1 // Generated on 2026-02-22 2 /++ 3 + D wrapper for cimgui (Dear ImGui). 4 + Provides bindings for Dear ImGui immediate mode GUI library. 5 + 6 + Features: 7 + Full ImGui API coverage 8 + @trusted wrapper functions 9 + Preserves ImGui naming conventions 10 + Handles memory management 11 +/ 12 module imgui.cimgui; 13 public import imgui.c.dcimgui; 14 15 pure @nogc nothrow: 16 17 // Callback function types 18 extern(C) alias ImGuiGet_item_name_funcCallback = const(char)* function(void*, int); 19 extern(C) alias ImGuiGetterCallback = const(char)* function(void*, int); 20 extern(C) alias ImGuiOld_callbackCallback = bool function(void*, int, const(char)**); 21 extern(C) alias ImGuiValues_getterCallback = float function(void*, int); 22 extern(C) alias ImGui__funcCallback = void function(int, void*); 23 24 // D-friendly wrappers 25 /++ 26 + Context creation and access 27 + Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between contexts. 28 + DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() 29 + for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for details. 30 +/ 31 ImGuiContext* CreateContext(scope ImFontAtlas* shared_font_atlas) @trusted 32 { 33 return igCreateContext(shared_font_atlas); 34 } 35 36 void DestroyContext(scope ImGuiContext* ctx) @trusted 37 { 38 igDestroyContext(ctx); 39 } 40 41 ImGuiContext* GetCurrentContext() @trusted 42 { 43 return igGetCurrentContext(); 44 } 45 46 void SetCurrentContext(scope ImGuiContext* ctx) @trusted 47 { 48 igSetCurrentContext(ctx); 49 } 50 51 /++ 52 + Main 53 +/ 54 ImGuiIO* GetIO() @trusted 55 { 56 return igGetIO(); 57 } 58 59 ImGuiPlatformIO* GetPlatformIO() @trusted 60 { 61 return igGetPlatformIO(); 62 } 63 64 ImGuiStyle* GetStyle() @trusted 65 { 66 return igGetStyle(); 67 } 68 69 void NewFrame() @trusted 70 { 71 igNewFrame(); 72 } 73 74 void EndFrame() @trusted 75 { 76 igEndFrame(); 77 } 78 79 void Render() @trusted 80 { 81 igRender(); 82 } 83 84 ImDrawData* GetDrawData() @trusted 85 { 86 return igGetDrawData(); 87 } 88 89 /++ 90 + Demo, Debug, Information 91 +/ 92 void ShowDemoWindow(scope bool* p_open) @trusted 93 { 94 igShowDemoWindow(p_open); 95 } 96 97 void ShowMetricsWindow(scope bool* p_open) @trusted 98 { 99 igShowMetricsWindow(p_open); 100 } 101 102 void ShowDebugLogWindow(scope bool* p_open) @trusted 103 { 104 igShowDebugLogWindow(p_open); 105 } 106 107 void ShowIDStackToolWindow() @trusted 108 { 109 igShowIDStackToolWindow(); 110 } 111 112 void ShowIDStackToolWindowEx(scope bool* p_open) @trusted 113 { 114 igShowIDStackToolWindowEx(p_open); 115 } 116 117 void ShowAboutWindow(scope bool* p_open) @trusted 118 { 119 igShowAboutWindow(p_open); 120 } 121 122 void ShowStyleEditor(scope ImGuiStyle* ref_) @trusted 123 { 124 igShowStyleEditor(ref_); 125 } 126 127 bool ShowStyleSelector(const(char)* label) @trusted 128 { 129 return igShowStyleSelector(label); 130 } 131 132 void ShowFontSelector(const(char)* label) @trusted 133 { 134 igShowFontSelector(label); 135 } 136 137 void ShowUserGuide() @trusted 138 { 139 igShowUserGuide(); 140 } 141 142 const(char)* GetVersion() @trusted 143 { 144 return igGetVersion(); 145 } 146 147 /++ 148 + Styles 149 +/ 150 void StyleColorsDark(scope ImGuiStyle* dst) @trusted 151 { 152 igStyleColorsDark(dst); 153 } 154 155 void StyleColorsLight(scope ImGuiStyle* dst) @trusted 156 { 157 igStyleColorsLight(dst); 158 } 159 160 void StyleColorsClassic(scope ImGuiStyle* dst) @trusted 161 { 162 igStyleColorsClassic(dst); 163 } 164 165 /++ 166 + Windows 167 + Begin() = push window to the stack and start appending to it. End() = pop window from the stack. 168 + Passing 'bool* p_open != NULL' shows a windowclosing widget in the upperright corner of the window, 169 + which clicking will set the boolean to false when clicked. 170 + You may append multiple times to the same window during the same frame by calling Begin()/End() pairs multiple times. 171 + Some information such as 'flags' or 'p_open' will only be considered by the first call to Begin(). 172 + Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting 173 + anything to the window. Always call a matching End() for each Begin() call, regardless of its return value! 174 + [Important: due to legacy reason, Begin/End and BeginChild/EndChild are inconsistent with all other functions 175 + such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding 176 + BeginXXX function returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.] 177 + Note that the bottom of window stack always contains a window called "Debug". 178 +/ 179 bool Begin(const(char)* name, scope bool* p_open, ImGuiWindowFlags flags) @trusted 180 { 181 return igBegin(name, p_open, flags); 182 } 183 184 void End() @trusted 185 { 186 igEnd(); 187 } 188 189 /++ 190 + Child Windows 191 + Use child windows to begin into a selfcontained independent scrolling/clipping regions within a host window. Child windows can embed their own child. 192 + Before 1.90 (November 2023), the "ImGuiChildFlags child_flags = 0" parameter was "bool border = false". 193 + This API is backward compatible with old code, as we guarantee that ImGuiChildFlags_Borders == true. 194 + Consider updating your old code: 195 + BeginChild("Name", size, false) > Begin("Name", size, 0); or Begin("Name", size, ImGuiChildFlags_None); 196 + BeginChild("Name", size, true) > Begin("Name", size, ImGuiChildFlags_Borders); 197 + Manual sizing (each axis can use a different setting e.g. ImVec2(0.0f, 400.0f)): 198 + == 0.0f: use remaining parent window size for this axis. 199 + > 0.0f: use specified size for this axis. 200 + 201 + < 202 + 0.0f: right/bottomalign to specified distance from available content boundaries. 203 + Specifying ImGuiChildFlags_AutoResizeX or ImGuiChildFlags_AutoResizeY makes the sizing automatic based on child contents. 204 + Combining both ImGuiChildFlags_AutoResizeX _and_ ImGuiChildFlags_AutoResizeY defeats purpose of a scrolling region and is NOT recommended. 205 + BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting 206 + anything to the window. Always call a matching EndChild() for each BeginChild() call, regardless of its return value. 207 + [Important: due to legacy reason, Begin/End and BeginChild/EndChild are inconsistent with all other functions 208 + such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding 209 + BeginXXX function returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.] 210 +/ 211 bool BeginChild(const(char)* str_id, ImVec2 size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) @trusted 212 { 213 return igBeginChild(str_id, size, child_flags, window_flags); 214 } 215 216 bool BeginChildID(ImGuiID id, ImVec2 size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) @trusted 217 { 218 return igBeginChildID(id, size, child_flags, window_flags); 219 } 220 221 void EndChild() @trusted 222 { 223 igEndChild(); 224 } 225 226 /++ 227 + Windows Utilities 228 + 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into. 229 +/ 230 bool IsWindowAppearing() @trusted 231 { 232 return igIsWindowAppearing(); 233 } 234 235 bool IsWindowCollapsed() @trusted 236 { 237 return igIsWindowCollapsed(); 238 } 239 240 bool IsWindowFocused(ImGuiFocusedFlags flags) @trusted 241 { 242 return igIsWindowFocused(flags); 243 } 244 245 bool IsWindowHovered(ImGuiHoveredFlags flags) @trusted 246 { 247 return igIsWindowHovered(flags); 248 } 249 250 ImDrawList* GetWindowDrawList() @trusted 251 { 252 return igGetWindowDrawList(); 253 } 254 255 ImVec2 GetWindowPos() @trusted 256 { 257 return igGetWindowPos(); 258 } 259 260 ImVec2 GetWindowSize() @trusted 261 { 262 return igGetWindowSize(); 263 } 264 265 float GetWindowWidth() @trusted 266 { 267 return igGetWindowWidth(); 268 } 269 270 float GetWindowHeight() @trusted 271 { 272 return igGetWindowHeight(); 273 } 274 275 /++ 276 + Window manipulation 277 + Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin). 278 +/ 279 void SetNextWindowPos(ImVec2 pos, ImGuiCond cond) @trusted 280 { 281 igSetNextWindowPos(pos, cond); 282 } 283 284 void SetNextWindowPosEx(ImVec2 pos, ImGuiCond cond, ImVec2 pivot) @trusted 285 { 286 igSetNextWindowPosEx(pos, cond, pivot); 287 } 288 289 void SetNextWindowSize(ImVec2 size, ImGuiCond cond) @trusted 290 { 291 igSetNextWindowSize(size, cond); 292 } 293 294 void SetNextWindowSizeConstraints(ImVec2 size_min, ImVec2 size_max, ImGuiSizeCallback custom_callback, scope void* custom_callback_data) @trusted 295 { 296 igSetNextWindowSizeConstraints(size_min, size_max, custom_callback, custom_callback_data); 297 } 298 299 void SetNextWindowContentSize(ImVec2 size) @trusted 300 { 301 igSetNextWindowContentSize(size); 302 } 303 304 void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond) @trusted 305 { 306 igSetNextWindowCollapsed(collapsed, cond); 307 } 308 309 void SetNextWindowFocus() @trusted 310 { 311 igSetNextWindowFocus(); 312 } 313 314 void SetNextWindowScroll(ImVec2 scroll) @trusted 315 { 316 igSetNextWindowScroll(scroll); 317 } 318 319 void SetNextWindowBgAlpha(float alpha) @trusted 320 { 321 igSetNextWindowBgAlpha(alpha); 322 } 323 324 void SetWindowPos(ImVec2 pos, ImGuiCond cond) @trusted 325 { 326 igSetWindowPos(pos, cond); 327 } 328 329 void SetWindowSize(ImVec2 size, ImGuiCond cond) @trusted 330 { 331 igSetWindowSize(size, cond); 332 } 333 334 void SetWindowCollapsed(bool collapsed, ImGuiCond cond) @trusted 335 { 336 igSetWindowCollapsed(collapsed, cond); 337 } 338 339 void SetWindowFocus() @trusted 340 { 341 igSetWindowFocus(); 342 } 343 344 void SetWindowPosStr(const(char)* name, ImVec2 pos, ImGuiCond cond) @trusted 345 { 346 igSetWindowPosStr(name, pos, cond); 347 } 348 349 void SetWindowSizeStr(const(char)* name, ImVec2 size, ImGuiCond cond) @trusted 350 { 351 igSetWindowSizeStr(name, size, cond); 352 } 353 354 void SetWindowCollapsedStr(const(char)* name, bool collapsed, ImGuiCond cond) @trusted 355 { 356 igSetWindowCollapsedStr(name, collapsed, cond); 357 } 358 359 void SetWindowFocusStr(const(char)* name) @trusted 360 { 361 igSetWindowFocusStr(name); 362 } 363 364 /++ 365 + Windows Scrolling 366 + Any change of Scroll will be applied at the beginning of next frame in the first call to Begin(). 367 + You may instead use SetNextWindowScroll() prior to calling Begin() to avoid this delay, as an alternative to using SetScrollX()/SetScrollY(). 368 +/ 369 float GetScrollX() @trusted 370 { 371 return igGetScrollX(); 372 } 373 374 float GetScrollY() @trusted 375 { 376 return igGetScrollY(); 377 } 378 379 void SetScrollX(float scroll_x) @trusted 380 { 381 igSetScrollX(scroll_x); 382 } 383 384 void SetScrollY(float scroll_y) @trusted 385 { 386 igSetScrollY(scroll_y); 387 } 388 389 float GetScrollMaxX() @trusted 390 { 391 return igGetScrollMaxX(); 392 } 393 394 float GetScrollMaxY() @trusted 395 { 396 return igGetScrollMaxY(); 397 } 398 399 void SetScrollHereX(float center_x_ratio) @trusted 400 { 401 igSetScrollHereX(center_x_ratio); 402 } 403 404 void SetScrollHereY(float center_y_ratio) @trusted 405 { 406 igSetScrollHereY(center_y_ratio); 407 } 408 409 void SetScrollFromPosX(float local_x, float center_x_ratio) @trusted 410 { 411 igSetScrollFromPosX(local_x, center_x_ratio); 412 } 413 414 void SetScrollFromPosY(float local_y, float center_y_ratio) @trusted 415 { 416 igSetScrollFromPosY(local_y, center_y_ratio); 417 } 418 419 /++ 420 + Parameters stacks (font) 421 + PushFont(font, 0.0f) // Change font and keep current size 422 + PushFont(NULL, 20.0f) // Keep font and change current size 423 + PushFont(font, 20.0f) // Change font and set size to 20.0f 424 + PushFont(font, style.FontSizeBase * 2.0f) // Change font and set size to be twice bigger than current size. 425 + PushFont(font, font>LegacySize) // Change font and set size to size passed to AddFontXXX() function. Same as pre1.92 behavior. 426 + *IMPORTANT* before 1.92, fonts had a single size. They can now be dynamically be adjusted. 427 + In 1.92 we have REMOVED the single parameter version of PushFont() because it seems like the easiest way to provide an errorproof transition. 428 + PushFont(font) before 1.92 = PushFont(font, font>LegacySize) after 1.92 // Use default font size as passed to AddFontXXX() function. 429 + *IMPORTANT* global scale factors are applied over the provided size. 430 + Global scale factors are: 'style.FontScaleMain', 'style.FontScaleDpi' and maybe more. 431 + If you want to apply a factor to the _current_ font size: 432 + CORRECT: PushFont(NULL, style.FontSizeBase) // use current unscaled size == does nothing 433 + CORRECT: PushFont(NULL, style.FontSizeBase * 2.0f) // use current unscaled size x2 == make text twice bigger 434 + INCORRECT: PushFont(NULL, GetFontSize()) // INCORRECT! using size after global factors already applied == GLOBAL SCALING FACTORS WILL APPLY TWICE! 435 + INCORRECT: PushFont(NULL, GetFontSize() * 2.0f) // INCORRECT! using size after global factors already applied == GLOBAL SCALING FACTORS WILL APPLY TWICE! 436 +/ 437 void PushFontFloat(scope ImFont* font, float font_size_base_unscaled) @trusted 438 { 439 igPushFontFloat(font, font_size_base_unscaled); 440 } 441 442 void PopFont() @trusted 443 { 444 igPopFont(); 445 } 446 447 ImFont* GetFont() @trusted 448 { 449 return igGetFont(); 450 } 451 452 float GetFontSize() @trusted 453 { 454 return igGetFontSize(); 455 } 456 457 ImFontBaked* GetFontBaked() @trusted 458 { 459 return igGetFontBaked(); 460 } 461 462 /++ 463 + Parameters stacks (shared) 464 +/ 465 void PushStyleColor(ImGuiCol idx, ImU32 col) @trusted 466 { 467 igPushStyleColor(idx, col); 468 } 469 470 void PushStyleColorImVec4(ImGuiCol idx, ImVec4 col) @trusted 471 { 472 igPushStyleColorImVec4(idx, col); 473 } 474 475 void PopStyleColor() @trusted 476 { 477 igPopStyleColor(); 478 } 479 480 void PopStyleColorEx(int count) @trusted 481 { 482 igPopStyleColorEx(count); 483 } 484 485 void PushStyleVar(ImGuiStyleVar idx, float val) @trusted 486 { 487 igPushStyleVar(idx, val); 488 } 489 490 void PushStyleVarImVec2(ImGuiStyleVar idx, ImVec2 val) @trusted 491 { 492 igPushStyleVarImVec2(idx, val); 493 } 494 495 void PushStyleVarX(ImGuiStyleVar idx, float val_x) @trusted 496 { 497 igPushStyleVarX(idx, val_x); 498 } 499 500 void PushStyleVarY(ImGuiStyleVar idx, float val_y) @trusted 501 { 502 igPushStyleVarY(idx, val_y); 503 } 504 505 void PopStyleVar() @trusted 506 { 507 igPopStyleVar(); 508 } 509 510 void PopStyleVarEx(int count) @trusted 511 { 512 igPopStyleVarEx(count); 513 } 514 515 void PushItemFlag(ImGuiItemFlags option, bool enabled) @trusted 516 { 517 igPushItemFlag(option, enabled); 518 } 519 520 void PopItemFlag() @trusted 521 { 522 igPopItemFlag(); 523 } 524 525 /++ 526 + Parameters stacks (current window) 527 +/ 528 void PushItemWidth(float item_width) @trusted 529 { 530 igPushItemWidth(item_width); 531 } 532 533 void PopItemWidth() @trusted 534 { 535 igPopItemWidth(); 536 } 537 538 void SetNextItemWidth(float item_width) @trusted 539 { 540 igSetNextItemWidth(item_width); 541 } 542 543 float CalcItemWidth() @trusted 544 { 545 return igCalcItemWidth(); 546 } 547 548 void PushTextWrapPos(float wrap_local_pos_x) @trusted 549 { 550 igPushTextWrapPos(wrap_local_pos_x); 551 } 552 553 void PopTextWrapPos() @trusted 554 { 555 igPopTextWrapPos(); 556 } 557 558 /++ 559 + Style read access 560 + Use the ShowStyleEditor() function to interactively see/edit the colors. 561 +/ 562 ImVec2 GetFontTexUvWhitePixel() @trusted 563 { 564 return igGetFontTexUvWhitePixel(); 565 } 566 567 ImU32 GetColorU32(ImGuiCol idx) @trusted 568 { 569 return igGetColorU32(idx); 570 } 571 572 ImU32 GetColorU32Ex(ImGuiCol idx, float alpha_mul) @trusted 573 { 574 return igGetColorU32Ex(idx, alpha_mul); 575 } 576 577 ImU32 GetColorU32ImVec4(ImVec4 col) @trusted 578 { 579 return igGetColorU32ImVec4(col); 580 } 581 582 ImU32 GetColorU32ImU32(ImU32 col) @trusted 583 { 584 return igGetColorU32ImU32(col); 585 } 586 587 ImU32 GetColorU32ImU32Ex(ImU32 col, float alpha_mul) @trusted 588 { 589 return igGetColorU32ImU32Ex(col, alpha_mul); 590 } 591 592 const(ImVec4)* GetStyleColorVec4(ImGuiCol idx) @trusted 593 { 594 return igGetStyleColorVec4(idx); 595 } 596 597 /++ 598 + Layout cursor positioning 599 + By "cursor" we mean the current output position. 600 + The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down. 601 + You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceding widget. 602 + YOU CAN DO 99% OF WHAT YOU NEED WITH ONLY GetCursorScreenPos() and GetContentRegionAvail(). 603 + Attention! We currently have inconsistencies between windowlocal and absolute positions we will aim to fix with future API: 604 + Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions. > this is the preferred way forward. 605 + Windowlocal coordinates: SameLine(offset), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), PushTextWrapPos() 606 + Windowlocal coordinates: GetContentRegionMax(), GetWindowContentRegionMin(), GetWindowContentRegionMax() > all obsoleted. YOU DON'T NEED THEM. 607 + GetCursorScreenPos() = GetCursorPos() + GetWindowPos(). GetWindowPos() is almost only ever useful to convert from windowlocal to absolute coordinates. Try not to use it. 608 +/ 609 ImVec2 GetCursorScreenPos() @trusted 610 { 611 return igGetCursorScreenPos(); 612 } 613 614 void SetCursorScreenPos(ImVec2 pos) @trusted 615 { 616 igSetCursorScreenPos(pos); 617 } 618 619 ImVec2 GetContentRegionAvail() @trusted 620 { 621 return igGetContentRegionAvail(); 622 } 623 624 ImVec2 GetCursorPos() @trusted 625 { 626 return igGetCursorPos(); 627 } 628 629 float GetCursorPosX() @trusted 630 { 631 return igGetCursorPosX(); 632 } 633 634 float GetCursorPosY() @trusted 635 { 636 return igGetCursorPosY(); 637 } 638 639 void SetCursorPos(ImVec2 local_pos) @trusted 640 { 641 igSetCursorPos(local_pos); 642 } 643 644 void SetCursorPosX(float local_x) @trusted 645 { 646 igSetCursorPosX(local_x); 647 } 648 649 void SetCursorPosY(float local_y) @trusted 650 { 651 igSetCursorPosY(local_y); 652 } 653 654 ImVec2 GetCursorStartPos() @trusted 655 { 656 return igGetCursorStartPos(); 657 } 658 659 /++ 660 + Other layout functions 661 +/ 662 void Separator() @trusted 663 { 664 igSeparator(); 665 } 666 667 void SameLine() @trusted 668 { 669 igSameLine(); 670 } 671 672 void SameLineEx(float offset_from_start_x, float spacing) @trusted 673 { 674 igSameLineEx(offset_from_start_x, spacing); 675 } 676 677 void NewLine() @trusted 678 { 679 igNewLine(); 680 } 681 682 void Spacing() @trusted 683 { 684 igSpacing(); 685 } 686 687 void Dummy(ImVec2 size) @trusted 688 { 689 igDummy(size); 690 } 691 692 void Indent() @trusted 693 { 694 igIndent(); 695 } 696 697 void IndentEx(float indent_w) @trusted 698 { 699 igIndentEx(indent_w); 700 } 701 702 void Unindent() @trusted 703 { 704 igUnindent(); 705 } 706 707 void UnindentEx(float indent_w) @trusted 708 { 709 igUnindentEx(indent_w); 710 } 711 712 void BeginGroup() @trusted 713 { 714 igBeginGroup(); 715 } 716 717 void EndGroup() @trusted 718 { 719 igEndGroup(); 720 } 721 722 void AlignTextToFramePadding() @trusted 723 { 724 igAlignTextToFramePadding(); 725 } 726 727 float GetTextLineHeight() @trusted 728 { 729 return igGetTextLineHeight(); 730 } 731 732 float GetTextLineHeightWithSpacing() @trusted 733 { 734 return igGetTextLineHeightWithSpacing(); 735 } 736 737 float GetFrameHeight() @trusted 738 { 739 return igGetFrameHeight(); 740 } 741 742 float GetFrameHeightWithSpacing() @trusted 743 { 744 return igGetFrameHeightWithSpacing(); 745 } 746 747 /++ 748 + ID stack/scopes 749 + Read the FAQ (docs/FAQ.md or http://dearimgui.com/faq) for more details about how ID are handled in dear imgui. 750 + Those questions are answered and impacted by understanding of the ID stack system: 751 + "Q: Why is my widget not reacting when I click on it?" 752 + "Q: How can I have widgets with an empty label?" 753 + "Q: How can I have multiple widgets with the same label?" 754 + Short version: ID are hashes of the entire ID stack. If you are creating widgets in a loop you most likely 755 + want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them. 756 + You can also use the "Label##foobar" syntax within widget label to distinguish them from each others. 757 + In this header file we use the "label"/"name" terminology to denote a string that will be displayed + used as an ID, 758 + whereas "str_id" denote a string that is only used as an ID and not normally displayed. 759 +/ 760 void PushID(const(char)* str_id) @trusted 761 { 762 igPushID(str_id); 763 } 764 765 void PushIDStr(const(char)* str_id_begin, const(char)* str_id_end) @trusted 766 { 767 igPushIDStr(str_id_begin, str_id_end); 768 } 769 770 void PushIDPtr(scope const(void)* ptr_id) @trusted 771 { 772 igPushIDPtr(ptr_id); 773 } 774 775 void PushIDInt(int int_id) @trusted 776 { 777 igPushIDInt(int_id); 778 } 779 780 void PopID() @trusted 781 { 782 igPopID(); 783 } 784 785 ImGuiID GetID(const(char)* str_id) @trusted 786 { 787 return igGetID(str_id); 788 } 789 790 ImGuiID GetIDStr(const(char)* str_id_begin, const(char)* str_id_end) @trusted 791 { 792 return igGetIDStr(str_id_begin, str_id_end); 793 } 794 795 ImGuiID GetIDPtr(scope const(void)* ptr_id) @trusted 796 { 797 return igGetIDPtr(ptr_id); 798 } 799 800 ImGuiID GetIDInt(int int_id) @trusted 801 { 802 return igGetIDInt(int_id); 803 } 804 805 /++ 806 + Widgets: Text 807 +/ 808 void TextUnformatted(const(char)* text) @trusted 809 { 810 igTextUnformatted(text); 811 } 812 813 void TextUnformattedEx(const(char)* text, const(char)* text_end) @trusted 814 { 815 igTextUnformattedEx(text, text_end); 816 } 817 818 alias Text = igText; 819 820 alias TextV = igTextV; 821 822 alias TextColored = igTextColored; 823 824 alias TextColoredV = igTextColoredV; 825 826 alias TextDisabled = igTextDisabled; 827 828 alias TextDisabledV = igTextDisabledV; 829 830 alias TextWrapped = igTextWrapped; 831 832 alias TextWrappedV = igTextWrappedV; 833 834 void LabelText(const(char)* label, const(char)* fmt) @trusted 835 { 836 igLabelText(label, fmt); 837 } 838 839 alias LabelTextV = igLabelTextV; 840 841 void BulletText(const(char)* fmt) @trusted 842 { 843 igBulletText(fmt); 844 } 845 846 alias BulletTextV = igBulletTextV; 847 848 void SeparatorText(const(char)* label) @trusted 849 { 850 igSeparatorText(label); 851 } 852 853 /++ 854 + Widgets: Main 855 + Most widgets return true when the value has been changed or when pressed/selected 856 + You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state. 857 +/ 858 bool Button(const(char)* label) @trusted 859 { 860 return igButton(label); 861 } 862 863 bool ButtonEx(const(char)* label, ImVec2 size) @trusted 864 { 865 return igButtonEx(label, size); 866 } 867 868 bool SmallButton(const(char)* label) @trusted 869 { 870 return igSmallButton(label); 871 } 872 873 bool InvisibleButton(const(char)* str_id, ImVec2 size, ImGuiButtonFlags flags) @trusted 874 { 875 return igInvisibleButton(str_id, size, flags); 876 } 877 878 bool ArrowButton(const(char)* str_id, ImGuiDir dir) @trusted 879 { 880 return igArrowButton(str_id, dir); 881 } 882 883 bool Checkbox(const(char)* label, scope bool* v) @trusted 884 { 885 return igCheckbox(label, v); 886 } 887 888 bool CheckboxFlagsIntPtr(const(char)* label, scope int* flags, int flags_value) @trusted 889 { 890 return igCheckboxFlagsIntPtr(label, flags, flags_value); 891 } 892 893 bool CheckboxFlagsUintPtr(const(char)* label, scope uint* flags, uint flags_value) @trusted 894 { 895 return igCheckboxFlagsUintPtr(label, flags, flags_value); 896 } 897 898 bool RadioButton(const(char)* label, bool active) @trusted 899 { 900 return igRadioButton(label, active); 901 } 902 903 bool RadioButtonIntPtr(const(char)* label, scope int* v, int v_button) @trusted 904 { 905 return igRadioButtonIntPtr(label, v, v_button); 906 } 907 908 void ProgressBar(float fraction, ImVec2 size_arg, const(char)* overlay) @trusted 909 { 910 igProgressBar(fraction, size_arg, overlay); 911 } 912 913 void Bullet() @trusted 914 { 915 igBullet(); 916 } 917 918 bool TextLink(const(char)* label) @trusted 919 { 920 return igTextLink(label); 921 } 922 923 bool TextLinkOpenURL(const(char)* label) @trusted 924 { 925 return igTextLinkOpenURL(label); 926 } 927 928 bool TextLinkOpenURLEx(const(char)* label, const(char)* url) @trusted 929 { 930 return igTextLinkOpenURLEx(label, url); 931 } 932 933 /++ 934 + Widgets: Images 935 + Read about ImTextureID/ImTextureRef here: https://github.com/ocornut/imgui/wiki/ImageLoadingandDisplayingExamples 936 + 'uv0' and 'uv1' are texture coordinates. Read about them from the same link above. 937 + Image() pads adds style.ImageBorderSize on each side, ImageButton() adds style.FramePadding on each side. 938 + ImageButton() draws a background based on regular Button() color + optionally an inner background if specified. 939 + An obsolete version of Image(), before 1.91.9 (March 2025), had a 'tint_col' parameter which is now supported by the ImageWithBg() function. 940 +/ 941 void Image(ImTextureRef tex_ref, ImVec2 image_size) @trusted 942 { 943 igImage(tex_ref, image_size); 944 } 945 946 void ImageEx(ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1) @trusted 947 { 948 igImageEx(tex_ref, image_size, uv0, uv1); 949 } 950 951 void ImageWithBg(ImTextureRef tex_ref, ImVec2 image_size) @trusted 952 { 953 igImageWithBg(tex_ref, image_size); 954 } 955 956 void ImageWithBgEx(ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 bg_col, ImVec4 tint_col) @trusted 957 { 958 igImageWithBgEx(tex_ref, image_size, uv0, uv1, bg_col, tint_col); 959 } 960 961 bool ImageButton(const(char)* str_id, ImTextureRef tex_ref, ImVec2 image_size) @trusted 962 { 963 return igImageButton(str_id, tex_ref, image_size); 964 } 965 966 bool ImageButtonEx(const(char)* str_id, ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 bg_col, ImVec4 tint_col) @trusted 967 { 968 return igImageButtonEx(str_id, tex_ref, image_size, uv0, uv1, bg_col, tint_col); 969 } 970 971 /++ 972 + Widgets: Combo Box (Dropdown) 973 + The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items. 974 + The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. This is analogous to how ListBox are created. 975 +/ 976 bool BeginCombo(const(char)* label, const(char)* preview_value, ImGuiComboFlags flags) @trusted 977 { 978 return igBeginCombo(label, preview_value, flags); 979 } 980 981 void EndCombo() @trusted 982 { 983 igEndCombo(); 984 } 985 986 bool ComboChar(const(char)* label, scope int* current_item, const(char)** items, int items_count) @trusted 987 { 988 return igComboChar(label, current_item, items, items_count); 989 } 990 991 bool ComboCharEx(const(char)* label, scope int* current_item, const(char)** items, int items_count, int popup_max_height_in_items) @trusted 992 { 993 return igComboCharEx(label, current_item, items, items_count, popup_max_height_in_items); 994 } 995 996 bool Combo(const(char)* label, scope int* current_item, const(char)* items_separated_by_zeros) @trusted 997 { 998 return igCombo(label, current_item, items_separated_by_zeros); 999 } 1000 1001 bool ComboEx(const(char)* label, scope int* current_item, const(char)* items_separated_by_zeros, int popup_max_height_in_items) @trusted 1002 { 1003 return igComboEx(label, current_item, items_separated_by_zeros, popup_max_height_in_items); 1004 } 1005 1006 bool ComboCallback(const(char)* label, scope int* current_item, ImGuiGetterCallback getter, scope void* user_data, int items_count) @trusted 1007 { 1008 return igComboCallback(label, current_item, getter, user_data, items_count); 1009 } 1010 1011 bool ComboCallbackEx(const(char)* label, scope int* current_item, ImGuiGetterCallback getter, scope void* user_data, int items_count, int popup_max_height_in_items) @trusted 1012 { 1013 return igComboCallbackEx(label, current_item, getter, user_data, items_count, popup_max_height_in_items); 1014 } 1015 1016 /++ 1017 + Widgets: Drag Sliders 1018 + Ctrl+Click on any drag box to turn them into an input box. Manually input values aren't clamped by default and can go offbounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp. 1019 + For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every function, note that a 'float v[X]' function argument is the same as 'float* v', 1020 + the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. 1021 + &myvector 1022 + .x 1023 + Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" > 1.234; "%5.2f secs" > 01.23 secs; "Biscuit: %.0f" > Biscuit: 1; etc. 1024 + Format string may also be set to NULL or use the default format ("%f" or "%d"). 1025 + Speed are perpixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For keyboard/gamepad navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision). 1026 + Use v_min 1027 + < 1028 + v_max to clamp edits to given limits. Note that Ctrl+Click manual input can override those limits if ImGuiSliderFlags_AlwaysClamp is not used. 1029 + Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = FLT_MAX / INT_MIN to avoid clamping to a minimum. 1030 + We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them. 1031 + Legacy: Pre1.78 there are DragXXX() function signatures that take a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument. 1032 + If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361 1033 +/ 1034 bool DragFloat(const(char)* label, scope float* v) @trusted 1035 { 1036 return igDragFloat(label, v); 1037 } 1038 1039 bool DragFloatEx(const(char)* label, scope float* v, float v_speed, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1040 { 1041 return igDragFloatEx(label, v, v_speed, v_min, v_max, format, flags); 1042 } 1043 1044 bool DragFloat2(const(char)* label, scope float* v) @trusted 1045 { 1046 return igDragFloat2(label, v); 1047 } 1048 1049 bool DragFloat2Ex(const(char)* label, scope float* v, float v_speed, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1050 { 1051 return igDragFloat2Ex(label, v, v_speed, v_min, v_max, format, flags); 1052 } 1053 1054 bool DragFloat3(const(char)* label, scope float* v) @trusted 1055 { 1056 return igDragFloat3(label, v); 1057 } 1058 1059 bool DragFloat3Ex(const(char)* label, scope float* v, float v_speed, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1060 { 1061 return igDragFloat3Ex(label, v, v_speed, v_min, v_max, format, flags); 1062 } 1063 1064 bool DragFloat4(const(char)* label, scope float* v) @trusted 1065 { 1066 return igDragFloat4(label, v); 1067 } 1068 1069 bool DragFloat4Ex(const(char)* label, scope float* v, float v_speed, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1070 { 1071 return igDragFloat4Ex(label, v, v_speed, v_min, v_max, format, flags); 1072 } 1073 1074 bool DragFloatRange2(const(char)* label, scope float* v_current_min, scope float* v_current_max) @trusted 1075 { 1076 return igDragFloatRange2(label, v_current_min, v_current_max); 1077 } 1078 1079 bool DragFloatRange2Ex(const(char)* label, scope float* v_current_min, scope float* v_current_max, float v_speed, float v_min, float v_max, const(char)* format, const(char)* format_max, ImGuiSliderFlags flags) @trusted 1080 { 1081 return igDragFloatRange2Ex(label, v_current_min, v_current_max, v_speed, v_min, v_max, format, format_max, flags); 1082 } 1083 1084 bool DragInt(const(char)* label, scope int* v) @trusted 1085 { 1086 return igDragInt(label, v); 1087 } 1088 1089 bool DragIntEx(const(char)* label, scope int* v, float v_speed, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1090 { 1091 return igDragIntEx(label, v, v_speed, v_min, v_max, format, flags); 1092 } 1093 1094 bool DragInt2(const(char)* label, scope int* v) @trusted 1095 { 1096 return igDragInt2(label, v); 1097 } 1098 1099 bool DragInt2Ex(const(char)* label, scope int* v, float v_speed, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1100 { 1101 return igDragInt2Ex(label, v, v_speed, v_min, v_max, format, flags); 1102 } 1103 1104 bool DragInt3(const(char)* label, scope int* v) @trusted 1105 { 1106 return igDragInt3(label, v); 1107 } 1108 1109 bool DragInt3Ex(const(char)* label, scope int* v, float v_speed, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1110 { 1111 return igDragInt3Ex(label, v, v_speed, v_min, v_max, format, flags); 1112 } 1113 1114 bool DragInt4(const(char)* label, scope int* v) @trusted 1115 { 1116 return igDragInt4(label, v); 1117 } 1118 1119 bool DragInt4Ex(const(char)* label, scope int* v, float v_speed, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1120 { 1121 return igDragInt4Ex(label, v, v_speed, v_min, v_max, format, flags); 1122 } 1123 1124 bool DragIntRange2(const(char)* label, scope int* v_current_min, scope int* v_current_max) @trusted 1125 { 1126 return igDragIntRange2(label, v_current_min, v_current_max); 1127 } 1128 1129 bool DragIntRange2Ex(const(char)* label, scope int* v_current_min, scope int* v_current_max, float v_speed, int v_min, int v_max, const(char)* format, const(char)* format_max, ImGuiSliderFlags flags) @trusted 1130 { 1131 return igDragIntRange2Ex(label, v_current_min, v_current_max, v_speed, v_min, v_max, format, format_max, flags); 1132 } 1133 1134 bool DragScalar(const(char)* label, ImGuiDataType data_type, scope void* p_data) @trusted 1135 { 1136 return igDragScalar(label, data_type, p_data); 1137 } 1138 1139 bool DragScalarEx(const(char)* label, ImGuiDataType data_type, scope void* p_data, float v_speed, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1140 { 1141 return igDragScalarEx(label, data_type, p_data, v_speed, p_min, p_max, format, flags); 1142 } 1143 1144 bool DragScalarN(const(char)* label, ImGuiDataType data_type, scope void* p_data, int components) @trusted 1145 { 1146 return igDragScalarN(label, data_type, p_data, components); 1147 } 1148 1149 bool DragScalarNEx(const(char)* label, ImGuiDataType data_type, scope void* p_data, int components, float v_speed, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1150 { 1151 return igDragScalarNEx(label, data_type, p_data, components, v_speed, p_min, p_max, format, flags); 1152 } 1153 1154 /++ 1155 + Widgets: Regular Sliders 1156 + Ctrl+Click on any slider to turn them into an input box. Manually input values aren't clamped by default and can go offbounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp. 1157 + Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" > 1.234; "%5.2f secs" > 01.23 secs; "Biscuit: %.0f" > Biscuit: 1; etc. 1158 + Format string may also be set to NULL or use the default format ("%f" or "%d"). 1159 + Legacy: Pre1.78 there are SliderXXX() function signatures that take a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument. 1160 + If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361 1161 +/ 1162 bool SliderFloat(const(char)* label, scope float* v, float v_min, float v_max) @trusted 1163 { 1164 return igSliderFloat(label, v, v_min, v_max); 1165 } 1166 1167 bool SliderFloatEx(const(char)* label, scope float* v, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1168 { 1169 return igSliderFloatEx(label, v, v_min, v_max, format, flags); 1170 } 1171 1172 bool SliderFloat2(const(char)* label, scope float* v, float v_min, float v_max) @trusted 1173 { 1174 return igSliderFloat2(label, v, v_min, v_max); 1175 } 1176 1177 bool SliderFloat2Ex(const(char)* label, scope float* v, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1178 { 1179 return igSliderFloat2Ex(label, v, v_min, v_max, format, flags); 1180 } 1181 1182 bool SliderFloat3(const(char)* label, scope float* v, float v_min, float v_max) @trusted 1183 { 1184 return igSliderFloat3(label, v, v_min, v_max); 1185 } 1186 1187 bool SliderFloat3Ex(const(char)* label, scope float* v, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1188 { 1189 return igSliderFloat3Ex(label, v, v_min, v_max, format, flags); 1190 } 1191 1192 bool SliderFloat4(const(char)* label, scope float* v, float v_min, float v_max) @trusted 1193 { 1194 return igSliderFloat4(label, v, v_min, v_max); 1195 } 1196 1197 bool SliderFloat4Ex(const(char)* label, scope float* v, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1198 { 1199 return igSliderFloat4Ex(label, v, v_min, v_max, format, flags); 1200 } 1201 1202 bool SliderAngle(const(char)* label, scope float* v_rad) @trusted 1203 { 1204 return igSliderAngle(label, v_rad); 1205 } 1206 1207 bool SliderAngleEx(const(char)* label, scope float* v_rad, float v_degrees_min, float v_degrees_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1208 { 1209 return igSliderAngleEx(label, v_rad, v_degrees_min, v_degrees_max, format, flags); 1210 } 1211 1212 bool SliderInt(const(char)* label, scope int* v, int v_min, int v_max) @trusted 1213 { 1214 return igSliderInt(label, v, v_min, v_max); 1215 } 1216 1217 bool SliderIntEx(const(char)* label, scope int* v, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1218 { 1219 return igSliderIntEx(label, v, v_min, v_max, format, flags); 1220 } 1221 1222 bool SliderInt2(const(char)* label, scope int* v, int v_min, int v_max) @trusted 1223 { 1224 return igSliderInt2(label, v, v_min, v_max); 1225 } 1226 1227 bool SliderInt2Ex(const(char)* label, scope int* v, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1228 { 1229 return igSliderInt2Ex(label, v, v_min, v_max, format, flags); 1230 } 1231 1232 bool SliderInt3(const(char)* label, scope int* v, int v_min, int v_max) @trusted 1233 { 1234 return igSliderInt3(label, v, v_min, v_max); 1235 } 1236 1237 bool SliderInt3Ex(const(char)* label, scope int* v, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1238 { 1239 return igSliderInt3Ex(label, v, v_min, v_max, format, flags); 1240 } 1241 1242 bool SliderInt4(const(char)* label, scope int* v, int v_min, int v_max) @trusted 1243 { 1244 return igSliderInt4(label, v, v_min, v_max); 1245 } 1246 1247 bool SliderInt4Ex(const(char)* label, scope int* v, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1248 { 1249 return igSliderInt4Ex(label, v, v_min, v_max, format, flags); 1250 } 1251 1252 bool SliderScalar(const(char)* label, ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max) @trusted 1253 { 1254 return igSliderScalar(label, data_type, p_data, p_min, p_max); 1255 } 1256 1257 bool SliderScalarEx(const(char)* label, ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1258 { 1259 return igSliderScalarEx(label, data_type, p_data, p_min, p_max, format, flags); 1260 } 1261 1262 bool SliderScalarN(const(char)* label, ImGuiDataType data_type, scope void* p_data, int components, scope const(void)* p_min, scope const(void)* p_max) @trusted 1263 { 1264 return igSliderScalarN(label, data_type, p_data, components, p_min, p_max); 1265 } 1266 1267 bool SliderScalarNEx(const(char)* label, ImGuiDataType data_type, scope void* p_data, int components, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1268 { 1269 return igSliderScalarNEx(label, data_type, p_data, components, p_min, p_max, format, flags); 1270 } 1271 1272 bool VSliderFloat(const(char)* label, ImVec2 size, scope float* v, float v_min, float v_max) @trusted 1273 { 1274 return igVSliderFloat(label, size, v, v_min, v_max); 1275 } 1276 1277 bool VSliderFloatEx(const(char)* label, ImVec2 size, scope float* v, float v_min, float v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1278 { 1279 return igVSliderFloatEx(label, size, v, v_min, v_max, format, flags); 1280 } 1281 1282 bool VSliderInt(const(char)* label, ImVec2 size, scope int* v, int v_min, int v_max) @trusted 1283 { 1284 return igVSliderInt(label, size, v, v_min, v_max); 1285 } 1286 1287 bool VSliderIntEx(const(char)* label, ImVec2 size, scope int* v, int v_min, int v_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1288 { 1289 return igVSliderIntEx(label, size, v, v_min, v_max, format, flags); 1290 } 1291 1292 bool VSliderScalar(const(char)* label, ImVec2 size, ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max) @trusted 1293 { 1294 return igVSliderScalar(label, size, data_type, p_data, p_min, p_max); 1295 } 1296 1297 bool VSliderScalarEx(const(char)* label, ImVec2 size, ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags) @trusted 1298 { 1299 return igVSliderScalarEx(label, size, data_type, p_data, p_min, p_max, format, flags); 1300 } 1301 1302 /++ 1303 + Widgets: Input with Keyboard 1304 + If you want to use InputText() with std::string or any custom dynamic string type, use the wrapper in misc/cpp/imgui_stdlib.h/.cpp! 1305 + Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc. 1306 +/ 1307 bool InputText(const(char)* label, scope char* buf, size_t buf_size, ImGuiInputTextFlags flags) @trusted 1308 { 1309 return igInputText(label, buf, buf_size, flags); 1310 } 1311 1312 bool InputTextEx(const(char)* label, scope char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, scope void* user_data) @trusted 1313 { 1314 return igInputTextEx(label, buf, buf_size, flags, callback, user_data); 1315 } 1316 1317 bool InputTextMultiline(const(char)* label, scope char* buf, size_t buf_size) @trusted 1318 { 1319 return igInputTextMultiline(label, buf, buf_size); 1320 } 1321 1322 bool InputTextMultilineEx(const(char)* label, scope char* buf, size_t buf_size, ImVec2 size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, scope void* user_data) @trusted 1323 { 1324 return igInputTextMultilineEx(label, buf, buf_size, size, flags, callback, user_data); 1325 } 1326 1327 bool InputTextWithHint(const(char)* label, const(char)* hint, scope char* buf, size_t buf_size, ImGuiInputTextFlags flags) @trusted 1328 { 1329 return igInputTextWithHint(label, hint, buf, buf_size, flags); 1330 } 1331 1332 bool InputTextWithHintEx(const(char)* label, const(char)* hint, scope char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, scope void* user_data) @trusted 1333 { 1334 return igInputTextWithHintEx(label, hint, buf, buf_size, flags, callback, user_data); 1335 } 1336 1337 bool InputFloat(const(char)* label, scope float* v) @trusted 1338 { 1339 return igInputFloat(label, v); 1340 } 1341 1342 bool InputFloatEx(const(char)* label, scope float* v, float step, float step_fast, const(char)* format, ImGuiInputTextFlags flags) @trusted 1343 { 1344 return igInputFloatEx(label, v, step, step_fast, format, flags); 1345 } 1346 1347 bool InputFloat2(const(char)* label, scope float* v) @trusted 1348 { 1349 return igInputFloat2(label, v); 1350 } 1351 1352 bool InputFloat2Ex(const(char)* label, scope float* v, const(char)* format, ImGuiInputTextFlags flags) @trusted 1353 { 1354 return igInputFloat2Ex(label, v, format, flags); 1355 } 1356 1357 bool InputFloat3(const(char)* label, scope float* v) @trusted 1358 { 1359 return igInputFloat3(label, v); 1360 } 1361 1362 bool InputFloat3Ex(const(char)* label, scope float* v, const(char)* format, ImGuiInputTextFlags flags) @trusted 1363 { 1364 return igInputFloat3Ex(label, v, format, flags); 1365 } 1366 1367 bool InputFloat4(const(char)* label, scope float* v) @trusted 1368 { 1369 return igInputFloat4(label, v); 1370 } 1371 1372 bool InputFloat4Ex(const(char)* label, scope float* v, const(char)* format, ImGuiInputTextFlags flags) @trusted 1373 { 1374 return igInputFloat4Ex(label, v, format, flags); 1375 } 1376 1377 bool InputInt(const(char)* label, scope int* v) @trusted 1378 { 1379 return igInputInt(label, v); 1380 } 1381 1382 bool InputIntEx(const(char)* label, scope int* v, int step, int step_fast, ImGuiInputTextFlags flags) @trusted 1383 { 1384 return igInputIntEx(label, v, step, step_fast, flags); 1385 } 1386 1387 bool InputInt2(const(char)* label, scope int* v, ImGuiInputTextFlags flags) @trusted 1388 { 1389 return igInputInt2(label, v, flags); 1390 } 1391 1392 bool InputInt3(const(char)* label, scope int* v, ImGuiInputTextFlags flags) @trusted 1393 { 1394 return igInputInt3(label, v, flags); 1395 } 1396 1397 bool InputInt4(const(char)* label, scope int* v, ImGuiInputTextFlags flags) @trusted 1398 { 1399 return igInputInt4(label, v, flags); 1400 } 1401 1402 bool InputDouble(const(char)* label, scope double* v) @trusted 1403 { 1404 return igInputDouble(label, v); 1405 } 1406 1407 bool InputDoubleEx(const(char)* label, scope double* v, double step, double step_fast, const(char)* format, ImGuiInputTextFlags flags) @trusted 1408 { 1409 return igInputDoubleEx(label, v, step, step_fast, format, flags); 1410 } 1411 1412 bool InputScalar(const(char)* label, ImGuiDataType data_type, scope void* p_data) @trusted 1413 { 1414 return igInputScalar(label, data_type, p_data); 1415 } 1416 1417 bool InputScalarEx(const(char)* label, ImGuiDataType data_type, scope void* p_data, scope const(void)* p_step, scope const(void)* p_step_fast, const(char)* format, ImGuiInputTextFlags flags) @trusted 1418 { 1419 return igInputScalarEx(label, data_type, p_data, p_step, p_step_fast, format, flags); 1420 } 1421 1422 bool InputScalarN(const(char)* label, ImGuiDataType data_type, scope void* p_data, int components) @trusted 1423 { 1424 return igInputScalarN(label, data_type, p_data, components); 1425 } 1426 1427 bool InputScalarNEx(const(char)* label, ImGuiDataType data_type, scope void* p_data, int components, scope const(void)* p_step, scope const(void)* p_step_fast, const(char)* format, ImGuiInputTextFlags flags) @trusted 1428 { 1429 return igInputScalarNEx(label, data_type, p_data, components, p_step, p_step_fast, format, flags); 1430 } 1431 1432 /++ 1433 + Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little color square that can be leftclicked to open a picker, and rightclicked to open an option menu.) 1434 + Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. 1435 + You can pass the address of a first float element out of a contiguous structure, e.g. 1436 + &myvector 1437 + .x 1438 +/ 1439 bool ColorEdit3(const(char)* label, scope float* col, ImGuiColorEditFlags flags) @trusted 1440 { 1441 return igColorEdit3(label, col, flags); 1442 } 1443 1444 bool ColorEdit4(const(char)* label, scope float* col, ImGuiColorEditFlags flags) @trusted 1445 { 1446 return igColorEdit4(label, col, flags); 1447 } 1448 1449 bool ColorPicker3(const(char)* label, scope float* col, ImGuiColorEditFlags flags) @trusted 1450 { 1451 return igColorPicker3(label, col, flags); 1452 } 1453 1454 bool ColorPicker4(const(char)* label, scope float* col, ImGuiColorEditFlags flags, scope const(float)* ref_col) @trusted 1455 { 1456 return igColorPicker4(label, col, flags, ref_col); 1457 } 1458 1459 bool ColorButton(const(char)* desc_id, ImVec4 col, ImGuiColorEditFlags flags) @trusted 1460 { 1461 return igColorButton(desc_id, col, flags); 1462 } 1463 1464 bool ColorButtonEx(const(char)* desc_id, ImVec4 col, ImGuiColorEditFlags flags, ImVec2 size) @trusted 1465 { 1466 return igColorButtonEx(desc_id, col, flags, size); 1467 } 1468 1469 void SetColorEditOptions(ImGuiColorEditFlags flags) @trusted 1470 { 1471 igSetColorEditOptions(flags); 1472 } 1473 1474 /++ 1475 + Widgets: Trees 1476 + TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents. 1477 +/ 1478 bool TreeNode(const(char)* label) @trusted 1479 { 1480 return igTreeNode(label); 1481 } 1482 1483 bool TreeNodeStr(const(char)* str_id, const(char)* fmt) @trusted 1484 { 1485 return igTreeNodeStr(str_id, fmt); 1486 } 1487 1488 bool TreeNodePtr(scope const(void)* ptr_id, const(char)* fmt) @trusted 1489 { 1490 return igTreeNodePtr(ptr_id, fmt); 1491 } 1492 1493 alias TreeNodeV = igTreeNodeV; 1494 1495 alias TreeNodeVPtr = igTreeNodeVPtr; 1496 1497 bool TreeNodeEx(const(char)* label, ImGuiTreeNodeFlags flags) @trusted 1498 { 1499 return igTreeNodeEx(label, flags); 1500 } 1501 1502 bool TreeNodeExStr(const(char)* str_id, ImGuiTreeNodeFlags flags, const(char)* fmt) @trusted 1503 { 1504 return igTreeNodeExStr(str_id, flags, fmt); 1505 } 1506 1507 bool TreeNodeExPtr(scope const(void)* ptr_id, ImGuiTreeNodeFlags flags, const(char)* fmt) @trusted 1508 { 1509 return igTreeNodeExPtr(ptr_id, flags, fmt); 1510 } 1511 1512 alias TreeNodeExV = igTreeNodeExV; 1513 1514 alias TreeNodeExVPtr = igTreeNodeExVPtr; 1515 1516 void TreePush(const(char)* str_id) @trusted 1517 { 1518 igTreePush(str_id); 1519 } 1520 1521 void TreePushPtr(scope const(void)* ptr_id) @trusted 1522 { 1523 igTreePushPtr(ptr_id); 1524 } 1525 1526 void TreePop() @trusted 1527 { 1528 igTreePop(); 1529 } 1530 1531 float GetTreeNodeToLabelSpacing() @trusted 1532 { 1533 return igGetTreeNodeToLabelSpacing(); 1534 } 1535 1536 bool CollapsingHeader(const(char)* label, ImGuiTreeNodeFlags flags) @trusted 1537 { 1538 return igCollapsingHeader(label, flags); 1539 } 1540 1541 bool CollapsingHeaderBoolPtr(const(char)* label, scope bool* p_visible, ImGuiTreeNodeFlags flags) @trusted 1542 { 1543 return igCollapsingHeaderBoolPtr(label, p_visible, flags); 1544 } 1545 1546 void SetNextItemOpen(bool is_open, ImGuiCond cond) @trusted 1547 { 1548 igSetNextItemOpen(is_open, cond); 1549 } 1550 1551 void SetNextItemStorageID(ImGuiID storage_id) @trusted 1552 { 1553 igSetNextItemStorageID(storage_id); 1554 } 1555 1556 /++ 1557 + Widgets: Selectables 1558 + A selectable highlights when hovered, and can display another color when selected. 1559 + Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous. 1560 +/ 1561 bool Selectable(const(char)* label) @trusted 1562 { 1563 return igSelectable(label); 1564 } 1565 1566 bool SelectableEx(const(char)* label, bool selected, ImGuiSelectableFlags flags, ImVec2 size) @trusted 1567 { 1568 return igSelectableEx(label, selected, flags, size); 1569 } 1570 1571 bool SelectableBoolPtr(const(char)* label, scope bool* p_selected, ImGuiSelectableFlags flags) @trusted 1572 { 1573 return igSelectableBoolPtr(label, p_selected, flags); 1574 } 1575 1576 bool SelectableBoolPtrEx(const(char)* label, scope bool* p_selected, ImGuiSelectableFlags flags, ImVec2 size) @trusted 1577 { 1578 return igSelectableBoolPtrEx(label, p_selected, flags, size); 1579 } 1580 1581 /++ 1582 + Multiselection system for Selectable(), Checkbox(), TreeNode() functions [BETA] 1583 + This enables standard multiselection/rangeselection idioms (Ctrl+Mouse/Keyboard, Shift+Mouse/Keyboard, etc.) in a way that also allow a clipper to be used. 1584 + ImGuiSelectionUserData is often used to store your item index within the current view (but may store something else). 1585 + Read comments near ImGuiMultiSelectIO for instructions/details and see 'Demo>Widgets>Selection State 1586 + & 1587 + MultiSelect' for demo. 1588 + TreeNode() is technically supported but... using this correctly is more complicated. You need some sort of linear/random access to your tree, 1589 + which is suited to advanced trees setups already implementing filters and clipper. We will work simplifying the current demo. 1590 + 'selection_size' and 'items_count' parameters are optional and used by a few features. If they are costly for you to compute, you may avoid them. 1591 +/ 1592 ImGuiMultiSelectIO* BeginMultiSelect(ImGuiMultiSelectFlags flags) @trusted 1593 { 1594 return igBeginMultiSelect(flags); 1595 } 1596 1597 ImGuiMultiSelectIO* BeginMultiSelectEx(ImGuiMultiSelectFlags flags, int selection_size, int items_count) @trusted 1598 { 1599 return igBeginMultiSelectEx(flags, selection_size, items_count); 1600 } 1601 1602 ImGuiMultiSelectIO* EndMultiSelect() @trusted 1603 { 1604 return igEndMultiSelect(); 1605 } 1606 1607 void SetNextItemSelectionUserData(ImGuiSelectionUserData selection_user_data) @trusted 1608 { 1609 igSetNextItemSelectionUserData(selection_user_data); 1610 } 1611 1612 bool IsItemToggledSelection() @trusted 1613 { 1614 return igIsItemToggledSelection(); 1615 } 1616 1617 /++ 1618 + Widgets: List Boxes 1619 + This is essentially a thin wrapper to using BeginChild/EndChild with the ImGuiChildFlags_FrameStyle flag for stylistic changes + displaying a label. 1620 + If you don't need a label you can probably simply use BeginChild() with the ImGuiChildFlags_FrameStyle flag for the same result. 1621 + You can submit contents and manage your selection state however you want it, by creating e.g. Selectable() or any other items. 1622 + The simplified/old ListBox() api are helpers over BeginListBox()/EndListBox() which are kept available for convenience purpose. This is analogous to how Combos are created. 1623 + Choose frame width: size.x > 0.0f: custom / size.x 1624 + < 1625 + 0.0f or FLT_MIN: rightalign / size.x = 0.0f (default): use current ItemWidth 1626 + Choose frame height: size.y > 0.0f: custom / size.y 1627 + < 1628 + 0.0f or FLT_MIN: bottomalign / size.y = 0.0f (default): arbitrary default height which can fit ~7 items 1629 +/ 1630 bool BeginListBox(const(char)* label, ImVec2 size) @trusted 1631 { 1632 return igBeginListBox(label, size); 1633 } 1634 1635 void EndListBox() @trusted 1636 { 1637 igEndListBox(); 1638 } 1639 1640 bool ListBox(const(char)* label, scope int* current_item, const(char)** items, int items_count, int height_in_items) @trusted 1641 { 1642 return igListBox(label, current_item, items, items_count, height_in_items); 1643 } 1644 1645 bool ListBoxCallback(const(char)* label, scope int* current_item, ImGuiGetterCallback getter, scope void* user_data, int items_count) @trusted 1646 { 1647 return igListBoxCallback(label, current_item, getter, user_data, items_count); 1648 } 1649 1650 bool ListBoxCallbackEx(const(char)* label, scope int* current_item, ImGuiGetterCallback getter, scope void* user_data, int items_count, int height_in_items) @trusted 1651 { 1652 return igListBoxCallbackEx(label, current_item, getter, user_data, items_count, height_in_items); 1653 } 1654 1655 /++ 1656 + Widgets: Data Plotting 1657 + Consider using ImPlot (https://github.com/epezent/implot) which is much better! 1658 +/ 1659 void PlotLines(const(char)* label, scope const(float)* values, int values_count) @trusted 1660 { 1661 igPlotLines(label, values, values_count); 1662 } 1663 1664 void PlotLinesEx(const(char)* label, scope const(float)* values, int values_count, int values_offset, const(char)* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride) @trusted 1665 { 1666 igPlotLinesEx(label, values, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size, stride); 1667 } 1668 1669 void PlotLinesCallback(const(char)* label, ImGuiValues_getterCallback values_getter, scope void* data, int values_count) @trusted 1670 { 1671 igPlotLinesCallback(label, values_getter, data, values_count); 1672 } 1673 1674 void PlotLinesCallbackEx(const(char)* label, ImGuiValues_getterCallback values_getter, scope void* data, int values_count, int values_offset, const(char)* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) @trusted 1675 { 1676 igPlotLinesCallbackEx(label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); 1677 } 1678 1679 void PlotHistogram(const(char)* label, scope const(float)* values, int values_count) @trusted 1680 { 1681 igPlotHistogram(label, values, values_count); 1682 } 1683 1684 void PlotHistogramEx(const(char)* label, scope const(float)* values, int values_count, int values_offset, const(char)* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride) @trusted 1685 { 1686 igPlotHistogramEx(label, values, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size, stride); 1687 } 1688 1689 void PlotHistogramCallback(const(char)* label, ImGuiValues_getterCallback values_getter, scope void* data, int values_count) @trusted 1690 { 1691 igPlotHistogramCallback(label, values_getter, data, values_count); 1692 } 1693 1694 void PlotHistogramCallbackEx(const(char)* label, ImGuiValues_getterCallback values_getter, scope void* data, int values_count, int values_offset, const(char)* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) @trusted 1695 { 1696 igPlotHistogramCallbackEx(label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); 1697 } 1698 1699 /++ 1700 + Widgets: Menus 1701 + Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar. 1702 + Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it. 1703 + Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it. 1704 + Not that MenuItem() keyboardshortcuts are displayed as a convenience but _not processed_ by Dear ImGui at the moment. 1705 +/ 1706 bool BeginMenuBar() @trusted 1707 { 1708 return igBeginMenuBar(); 1709 } 1710 1711 void EndMenuBar() @trusted 1712 { 1713 igEndMenuBar(); 1714 } 1715 1716 bool BeginMainMenuBar() @trusted 1717 { 1718 return igBeginMainMenuBar(); 1719 } 1720 1721 void EndMainMenuBar() @trusted 1722 { 1723 igEndMainMenuBar(); 1724 } 1725 1726 bool BeginMenu(const(char)* label) @trusted 1727 { 1728 return igBeginMenu(label); 1729 } 1730 1731 bool BeginMenuEx(const(char)* label, bool enabled) @trusted 1732 { 1733 return igBeginMenuEx(label, enabled); 1734 } 1735 1736 void EndMenu() @trusted 1737 { 1738 igEndMenu(); 1739 } 1740 1741 bool MenuItem(const(char)* label) @trusted 1742 { 1743 return igMenuItem(label); 1744 } 1745 1746 bool MenuItemEx(const(char)* label, const(char)* shortcut, bool selected, bool enabled) @trusted 1747 { 1748 return igMenuItemEx(label, shortcut, selected, enabled); 1749 } 1750 1751 bool MenuItemBoolPtr(const(char)* label, const(char)* shortcut, scope bool* p_selected, bool enabled) @trusted 1752 { 1753 return igMenuItemBoolPtr(label, shortcut, p_selected, enabled); 1754 } 1755 1756 /++ 1757 + Tooltips 1758 + Tooltips are windows following the mouse. They do not take focus away. 1759 + A tooltip window can contain items of any types. 1760 + SetTooltip() is more or less a shortcut for the 'if (BeginTooltip()) { Text(...); EndTooltip(); }' idiom (with a subtlety that it discard any previously submitted tooltip) 1761 +/ 1762 bool BeginTooltip() @trusted 1763 { 1764 return igBeginTooltip(); 1765 } 1766 1767 void EndTooltip() @trusted 1768 { 1769 igEndTooltip(); 1770 } 1771 1772 void SetTooltip(const(char)* fmt) @trusted 1773 { 1774 igSetTooltip(fmt); 1775 } 1776 1777 alias SetTooltipV = igSetTooltipV; 1778 1779 /++ 1780 + Tooltips: helpers for showing a tooltip when hovering an item 1781 + BeginItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip) 1782 + & 1783 + & 1784 + BeginTooltip())' idiom. 1785 + SetItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip)) { SetTooltip(...); }' idiom. 1786 + Where 'ImGuiHoveredFlags_ForTooltip' itself is a shortcut to use 'style.HoverFlagsForTooltipMouse' or 'style.HoverFlagsForTooltipNav' depending on active input type. For mouse it defaults to 'ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort'. 1787 +/ 1788 bool BeginItemTooltip() @trusted 1789 { 1790 return igBeginItemTooltip(); 1791 } 1792 1793 void SetItemTooltip(const(char)* fmt) @trusted 1794 { 1795 igSetItemTooltip(fmt); 1796 } 1797 1798 alias SetItemTooltipV = igSetItemTooltipV; 1799 1800 /++ 1801 + Popups, Modals 1802 + They block normal mouse hovering detection (and therefore most mouse interactions) behind them. 1803 + If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE. 1804 + Their visibility state (~bool) is held internally instead of being held by the programmer as we are used to with regular Begin*() calls. 1805 + The 3 properties above are related: we need to retain popup visibility state in the library because popups may be closed as any time. 1806 + You can bypass the hovering restriction by using ImGuiHoveredFlags_AllowWhenBlockedByPopup when calling IsItemHovered() or IsWindowHovered(). 1807 + IMPORTANT: Popup identifiers are relative to the current ID stack, so OpenPopup and BeginPopup generally needs to be at the same level of the stack. 1808 + This is sometimes leading to confusing mistakes. May rework this in the future. 1809 + BeginPopup(): query popup state, if open start appending into the window. Call EndPopup() afterwards if returned true. ImGuiWindowFlags are forwarded to the window. 1810 + BeginPopupModal(): block every interaction behind the window, cannot be closed by user, add a dimming background, has a title bar. 1811 +/ 1812 bool BeginPopup(const(char)* str_id, ImGuiWindowFlags flags) @trusted 1813 { 1814 return igBeginPopup(str_id, flags); 1815 } 1816 1817 bool BeginPopupModal(const(char)* name, scope bool* p_open, ImGuiWindowFlags flags) @trusted 1818 { 1819 return igBeginPopupModal(name, p_open, flags); 1820 } 1821 1822 void EndPopup() @trusted 1823 { 1824 igEndPopup(); 1825 } 1826 1827 /++ 1828 + Popups: open/close functions 1829 + OpenPopup(): set popup state to open. ImGuiPopupFlags are available for opening options. 1830 + If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE. 1831 + CloseCurrentPopup(): use inside the BeginPopup()/EndPopup() scope to close manually. 1832 + CloseCurrentPopup() is called by default by Selectable()/MenuItem() when activated (FIXME: need some options). 1833 + Use ImGuiPopupFlags_NoOpenOverExistingPopup to avoid opening a popup if there's already one at the same level. This is equivalent to e.g. testing for !IsAnyPopupOpen() prior to OpenPopup(). 1834 + Use IsWindowAppearing() after BeginPopup() to tell if a window just opened. 1835 +/ 1836 void OpenPopup(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted 1837 { 1838 igOpenPopup(str_id, popup_flags); 1839 } 1840 1841 void OpenPopupID(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 1842 { 1843 igOpenPopupID(id, popup_flags); 1844 } 1845 1846 void OpenPopupOnItemClick(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted 1847 { 1848 igOpenPopupOnItemClick(str_id, popup_flags); 1849 } 1850 1851 void CloseCurrentPopup() @trusted 1852 { 1853 igCloseCurrentPopup(); 1854 } 1855 1856 /++ 1857 + Popups: Open+Begin popup combined functions helpers to create context menus. 1858 + Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and rightclicking. 1859 + IMPORTANT: Notice that BeginPopupContextXXX takes ImGuiPopupFlags just like OpenPopup() and unlike BeginPopup(). For full consistency, we may add ImGuiWindowFlags to the BeginPopupContextXXX functions in the future. 1860 + IMPORTANT: If you ever used the left mouse button with BeginPopupContextXXX() helpers before 1.92.6: 1861 + Before this version, OpenPopupOnItemClick(), BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid() had 'a ImGuiPopupFlags popup_flags = 1' default value in their function signature. 1862 + Before: Explicitly passing a literal 0 meant ImGuiPopupFlags_MouseButtonLeft. The default = 1 meant ImGuiPopupFlags_MouseButtonRight. 1863 + After: The default = 0 means ImGuiPopupFlags_MouseButtonRight. Explicitly passing a literal 1 also means ImGuiPopupFlags_MouseButtonRight (if legacy behavior are enabled) or will assert (if legacy behavior are disabled). 1864 + TL;DR: if you don't want to use right mouse button for popups, always specify it explicitly using a named ImGuiPopupFlags_MouseButtonXXXX value. 1865 + Read "API BREAKING CHANGES" 2026/01/07 (1.92.6) entry in imgui.cpp or GitHub topic #9157 for all details. 1866 +/ 1867 bool BeginPopupContextItem() @trusted 1868 { 1869 return igBeginPopupContextItem(); 1870 } 1871 1872 bool BeginPopupContextItemEx(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted 1873 { 1874 return igBeginPopupContextItemEx(str_id, popup_flags); 1875 } 1876 1877 bool BeginPopupContextWindow() @trusted 1878 { 1879 return igBeginPopupContextWindow(); 1880 } 1881 1882 bool BeginPopupContextWindowEx(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted 1883 { 1884 return igBeginPopupContextWindowEx(str_id, popup_flags); 1885 } 1886 1887 bool BeginPopupContextVoid() @trusted 1888 { 1889 return igBeginPopupContextVoid(); 1890 } 1891 1892 bool BeginPopupContextVoidEx(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted 1893 { 1894 return igBeginPopupContextVoidEx(str_id, popup_flags); 1895 } 1896 1897 /++ 1898 + Popups: query functions 1899 + IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack. 1900 + IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack. 1901 + IsPopupOpen() with ImGuiPopupFlags_AnyPopupId + ImGuiPopupFlags_AnyPopupLevel: return true if any popup is open. 1902 +/ 1903 bool IsPopupOpen(const(char)* str_id, ImGuiPopupFlags flags) @trusted 1904 { 1905 return igIsPopupOpen(str_id, flags); 1906 } 1907 1908 /++ 1909 + Tables 1910 + Fullfeatured replacement for old Columns API. 1911 + See Demo>Tables for demo code. See top of imgui_tables.cpp for general commentary. 1912 + See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags. 1913 + The typical call flow is: 1914 + 1. Call BeginTable(), early out if returning false. 1915 + 2. Optionally call TableSetupColumn() to submit column name/flags/defaults. 1916 + 3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows. 1917 + 4. Optionally call TableHeadersRow() to submit a header row. Names are pulled from TableSetupColumn() data. 1918 + 5. Populate contents: 1919 + In most situations you can use TableNextRow() + TableSetColumnIndex(N) to start appending into a column. 1920 + If you are using tables as a sort of grid, where every column is holding the same type of contents, 1921 + you may prefer using TableNextColumn() instead of TableNextRow() + TableSetColumnIndex(). 1922 + TableNextColumn() will automatically wraparound into the next row if needed. 1923 + IMPORTANT: Comparatively to the old Columns() API, we need to call TableNextColumn() for the first column! 1924 + Summary of possible call flow: 1925 + TableNextRow() > TableSetColumnIndex(0) > Text("Hello 0") > TableSetColumnIndex(1) > Text("Hello 1") // OK 1926 + TableNextRow() > TableNextColumn() > Text("Hello 0") > TableNextColumn() > Text("Hello 1") // OK 1927 + TableNextColumn() > Text("Hello 0") > TableNextColumn() > Text("Hello 1") // OK: TableNextColumn() automatically gets to next row! 1928 + TableNextRow() > Text("Hello 0") // Not OK! Missing TableSetColumnIndex() or TableNextColumn()! Text will not appear! 1929 + 5. Call EndTable() 1930 +/ 1931 bool BeginTable(const(char)* str_id, int columns, ImGuiTableFlags flags) @trusted 1932 { 1933 return igBeginTable(str_id, columns, flags); 1934 } 1935 1936 bool BeginTableEx(const(char)* str_id, int columns, ImGuiTableFlags flags, ImVec2 outer_size, float inner_width) @trusted 1937 { 1938 return igBeginTableEx(str_id, columns, flags, outer_size, inner_width); 1939 } 1940 1941 void EndTable() @trusted 1942 { 1943 igEndTable(); 1944 } 1945 1946 void TableNextRow() @trusted 1947 { 1948 igTableNextRow(); 1949 } 1950 1951 void TableNextRowEx(ImGuiTableRowFlags row_flags, float min_row_height) @trusted 1952 { 1953 igTableNextRowEx(row_flags, min_row_height); 1954 } 1955 1956 bool TableNextColumn() @trusted 1957 { 1958 return igTableNextColumn(); 1959 } 1960 1961 bool TableSetColumnIndex(int column_n) @trusted 1962 { 1963 return igTableSetColumnIndex(column_n); 1964 } 1965 1966 /++ 1967 + Tables: Headers 1968 + & 1969 + Columns declaration 1970 + Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc. 1971 + Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column. 1972 + Headers are required to perform: reordering, sorting, and opening the context menu. 1973 + The context menu can also be made available in columns body using ImGuiTableFlags_ContextMenuInBody. 1974 + You may manually submit headers using TableNextRow() + TableHeader() calls, but this is only useful in 1975 + some advanced use cases (e.g. adding custom widgets in header row). 1976 + Use TableSetupScrollFreeze() to lock columns/rows so they stay visible when scrolled. 1977 +/ 1978 void TableSetupColumn(const(char)* label, ImGuiTableColumnFlags flags) @trusted 1979 { 1980 igTableSetupColumn(label, flags); 1981 } 1982 1983 void TableSetupColumnEx(const(char)* label, ImGuiTableColumnFlags flags, float init_width_or_weight, ImGuiID user_id) @trusted 1984 { 1985 igTableSetupColumnEx(label, flags, init_width_or_weight, user_id); 1986 } 1987 1988 void TableSetupScrollFreeze(int cols, int rows) @trusted 1989 { 1990 igTableSetupScrollFreeze(cols, rows); 1991 } 1992 1993 void TableHeader(const(char)* label) @trusted 1994 { 1995 igTableHeader(label); 1996 } 1997 1998 void TableHeadersRow() @trusted 1999 { 2000 igTableHeadersRow(); 2001 } 2002 2003 void TableAngledHeadersRow() @trusted 2004 { 2005 igTableAngledHeadersRow(); 2006 } 2007 2008 /++ 2009 + Tables: Sorting 2010 + & 2011 + Miscellaneous functions 2012 + Sorting: call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting. 2013 + When 'sort_specs>SpecsDirty == true' you should sort your data. It will be true when sorting specs have 2014 + changed since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting, 2015 + else you may wastefully sort your data every frame! 2016 + Functions args 'int column_n' treat the default value of 1 as the same as passing the current column index. 2017 +/ 2018 ImGuiTableSortSpecs* TableGetSortSpecs() @trusted 2019 { 2020 return igTableGetSortSpecs(); 2021 } 2022 2023 int TableGetColumnCount() @trusted 2024 { 2025 return igTableGetColumnCount(); 2026 } 2027 2028 int TableGetColumnIndex() @trusted 2029 { 2030 return igTableGetColumnIndex(); 2031 } 2032 2033 int TableGetRowIndex() @trusted 2034 { 2035 return igTableGetRowIndex(); 2036 } 2037 2038 const(char)* TableGetColumnName(int column_n) @trusted 2039 { 2040 return igTableGetColumnName(column_n); 2041 } 2042 2043 ImGuiTableColumnFlags TableGetColumnFlags(int column_n) @trusted 2044 { 2045 return igTableGetColumnFlags(column_n); 2046 } 2047 2048 void TableSetColumnEnabled(int column_n, bool v) @trusted 2049 { 2050 igTableSetColumnEnabled(column_n, v); 2051 } 2052 2053 int TableGetHoveredColumn() @trusted 2054 { 2055 return igTableGetHoveredColumn(); 2056 } 2057 2058 void TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n) @trusted 2059 { 2060 igTableSetBgColor(target, color, column_n); 2061 } 2062 2063 /++ 2064 + Legacy Columns API (prefer using Tables!) 2065 + You can also use SameLine(pos_x) to mimic simplified columns. 2066 +/ 2067 void Columns() @trusted 2068 { 2069 igColumns(); 2070 } 2071 2072 void ColumnsEx(int count, const(char)* id, bool borders) @trusted 2073 { 2074 igColumnsEx(count, id, borders); 2075 } 2076 2077 void NextColumn() @trusted 2078 { 2079 igNextColumn(); 2080 } 2081 2082 int GetColumnIndex() @trusted 2083 { 2084 return igGetColumnIndex(); 2085 } 2086 2087 float GetColumnWidth(int column_index) @trusted 2088 { 2089 return igGetColumnWidth(column_index); 2090 } 2091 2092 void SetColumnWidth(int column_index, float width) @trusted 2093 { 2094 igSetColumnWidth(column_index, width); 2095 } 2096 2097 float GetColumnOffset(int column_index) @trusted 2098 { 2099 return igGetColumnOffset(column_index); 2100 } 2101 2102 void SetColumnOffset(int column_index, float offset_x) @trusted 2103 { 2104 igSetColumnOffset(column_index, offset_x); 2105 } 2106 2107 int GetColumnsCount() @trusted 2108 { 2109 return igGetColumnsCount(); 2110 } 2111 2112 /++ 2113 + Tab Bars, Tabs 2114 + Note: Tabs are automatically created by the docking system (when in 'docking' branch). Use this to create tab bars/tabs yourself. 2115 +/ 2116 bool BeginTabBar(const(char)* str_id, ImGuiTabBarFlags flags) @trusted 2117 { 2118 return igBeginTabBar(str_id, flags); 2119 } 2120 2121 void EndTabBar() @trusted 2122 { 2123 igEndTabBar(); 2124 } 2125 2126 bool BeginTabItem(const(char)* label, scope bool* p_open, ImGuiTabItemFlags flags) @trusted 2127 { 2128 return igBeginTabItem(label, p_open, flags); 2129 } 2130 2131 void EndTabItem() @trusted 2132 { 2133 igEndTabItem(); 2134 } 2135 2136 bool TabItemButton(const(char)* label, ImGuiTabItemFlags flags) @trusted 2137 { 2138 return igTabItemButton(label, flags); 2139 } 2140 2141 void SetTabItemClosed(const(char)* tab_or_docked_window_label) @trusted 2142 { 2143 igSetTabItemClosed(tab_or_docked_window_label); 2144 } 2145 2146 /++ 2147 + Logging/Capture 2148 + All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging. 2149 +/ 2150 void LogToTTY(int auto_open_depth) @trusted 2151 { 2152 igLogToTTY(auto_open_depth); 2153 } 2154 2155 void LogToFile(int auto_open_depth, const(char)* filename) @trusted 2156 { 2157 igLogToFile(auto_open_depth, filename); 2158 } 2159 2160 void LogToClipboard(int auto_open_depth) @trusted 2161 { 2162 igLogToClipboard(auto_open_depth); 2163 } 2164 2165 void LogFinish() @trusted 2166 { 2167 igLogFinish(); 2168 } 2169 2170 void LogButtons() @trusted 2171 { 2172 igLogButtons(); 2173 } 2174 2175 void LogText(const(char)* fmt) @trusted 2176 { 2177 igLogText(fmt); 2178 } 2179 2180 alias LogTextV = igLogTextV; 2181 2182 /++ 2183 + Drag and Drop 2184 + On source items, call BeginDragDropSource(), if it returns true also call SetDragDropPayload() + EndDragDropSource(). 2185 + On target candidates, call BeginDragDropTarget(), if it returns true also call AcceptDragDropPayload() + EndDragDropTarget(). 2186 + If you stop calling BeginDragDropSource() the payload is preserved however it won't have a preview tooltip (we currently display a fallback "..." tooltip, see #1725) 2187 + An item can be both drag source and drop target. 2188 +/ 2189 bool BeginDragDropSource(ImGuiDragDropFlags flags) @trusted 2190 { 2191 return igBeginDragDropSource(flags); 2192 } 2193 2194 bool SetDragDropPayload(const(char)* type, scope const(void)* data, size_t sz, ImGuiCond cond) @trusted 2195 { 2196 return igSetDragDropPayload(type, data, sz, cond); 2197 } 2198 2199 void EndDragDropSource() @trusted 2200 { 2201 igEndDragDropSource(); 2202 } 2203 2204 bool BeginDragDropTarget() @trusted 2205 { 2206 return igBeginDragDropTarget(); 2207 } 2208 2209 const(ImGuiPayload)* AcceptDragDropPayload(const(char)* type, ImGuiDragDropFlags flags) @trusted 2210 { 2211 return igAcceptDragDropPayload(type, flags); 2212 } 2213 2214 void EndDragDropTarget() @trusted 2215 { 2216 igEndDragDropTarget(); 2217 } 2218 2219 const(ImGuiPayload)* GetDragDropPayload() @trusted 2220 { 2221 return igGetDragDropPayload(); 2222 } 2223 2224 /++ 2225 + Disabling [BETA API] 2226 + Disable all user interactions and dim items visuals (applying style.DisabledAlpha over current colors) 2227 + Those can be nested but it cannot be used to enable an already disabled section (a single BeginDisabled(true) in the stack is enough to keep everything disabled) 2228 + Tooltips windows are automatically opted out of disabling. Note that IsItemHovered() by default returns false on disabled items, unless using ImGuiHoveredFlags_AllowWhenDisabled. 2229 + BeginDisabled(false)/EndDisabled() essentially does nothing but is provided to facilitate use of boolean expressions (as a microoptimization: if you have tens of thousands of BeginDisabled(false)/EndDisabled() pairs, you might want to reformulate your code to avoid making those calls) 2230 +/ 2231 void BeginDisabled(bool disabled) @trusted 2232 { 2233 igBeginDisabled(disabled); 2234 } 2235 2236 void EndDisabled() @trusted 2237 { 2238 igEndDisabled(); 2239 } 2240 2241 /++ 2242 + Clipping 2243 + Mouse hovering is affected by ImGui::PushClipRect() calls, unlike direct calls to ImDrawList::PushClipRect() which are render only. 2244 +/ 2245 void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect) @trusted 2246 { 2247 igPushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); 2248 } 2249 2250 void PopClipRect() @trusted 2251 { 2252 igPopClipRect(); 2253 } 2254 2255 /++ 2256 + Focus, Activation 2257 +/ 2258 void SetItemDefaultFocus() @trusted 2259 { 2260 igSetItemDefaultFocus(); 2261 } 2262 2263 void SetKeyboardFocusHere() @trusted 2264 { 2265 igSetKeyboardFocusHere(); 2266 } 2267 2268 void SetKeyboardFocusHereEx(int offset) @trusted 2269 { 2270 igSetKeyboardFocusHereEx(offset); 2271 } 2272 2273 /++ 2274 + Keyboard/Gamepad Navigation 2275 +/ 2276 void SetNavCursorVisible(bool visible) @trusted 2277 { 2278 igSetNavCursorVisible(visible); 2279 } 2280 2281 /++ 2282 + Overlapping mode 2283 +/ 2284 void SetNextItemAllowOverlap() @trusted 2285 { 2286 igSetNextItemAllowOverlap(); 2287 } 2288 2289 /++ 2290 + Item/Widgets Utilities and Query Functions 2291 + Most of the functions are referring to the previous Item that has been submitted. 2292 + See Demo Window under "Widgets>Querying Status" for an interactive visualization of most of those functions. 2293 +/ 2294 bool IsItemHovered(ImGuiHoveredFlags flags) @trusted 2295 { 2296 return igIsItemHovered(flags); 2297 } 2298 2299 bool IsItemActive() @trusted 2300 { 2301 return igIsItemActive(); 2302 } 2303 2304 bool IsItemFocused() @trusted 2305 { 2306 return igIsItemFocused(); 2307 } 2308 2309 bool IsItemClicked() @trusted 2310 { 2311 return igIsItemClicked(); 2312 } 2313 2314 bool IsItemClickedEx(ImGuiMouseButton mouse_button) @trusted 2315 { 2316 return igIsItemClickedEx(mouse_button); 2317 } 2318 2319 bool IsItemVisible() @trusted 2320 { 2321 return igIsItemVisible(); 2322 } 2323 2324 bool IsItemEdited() @trusted 2325 { 2326 return igIsItemEdited(); 2327 } 2328 2329 bool IsItemActivated() @trusted 2330 { 2331 return igIsItemActivated(); 2332 } 2333 2334 bool IsItemDeactivated() @trusted 2335 { 2336 return igIsItemDeactivated(); 2337 } 2338 2339 bool IsItemDeactivatedAfterEdit() @trusted 2340 { 2341 return igIsItemDeactivatedAfterEdit(); 2342 } 2343 2344 bool IsItemToggledOpen() @trusted 2345 { 2346 return igIsItemToggledOpen(); 2347 } 2348 2349 bool IsAnyItemHovered() @trusted 2350 { 2351 return igIsAnyItemHovered(); 2352 } 2353 2354 bool IsAnyItemActive() @trusted 2355 { 2356 return igIsAnyItemActive(); 2357 } 2358 2359 bool IsAnyItemFocused() @trusted 2360 { 2361 return igIsAnyItemFocused(); 2362 } 2363 2364 ImGuiID GetItemID() @trusted 2365 { 2366 return igGetItemID(); 2367 } 2368 2369 ImVec2 GetItemRectMin() @trusted 2370 { 2371 return igGetItemRectMin(); 2372 } 2373 2374 ImVec2 GetItemRectMax() @trusted 2375 { 2376 return igGetItemRectMax(); 2377 } 2378 2379 ImVec2 GetItemRectSize() @trusted 2380 { 2381 return igGetItemRectSize(); 2382 } 2383 2384 ImGuiItemFlags GetItemFlags() @trusted 2385 { 2386 return igGetItemFlags(); 2387 } 2388 2389 /++ 2390 + Viewports 2391 + Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows. 2392 + In 'docking' branch with multiviewport enabled, we extend this concept to have multiple active viewports. 2393 + In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode. 2394 +/ 2395 ImGuiViewport* GetMainViewport() @trusted 2396 { 2397 return igGetMainViewport(); 2398 } 2399 2400 /++ 2401 + Background/Foreground Draw Lists 2402 +/ 2403 ImDrawList* GetBackgroundDrawList() @trusted 2404 { 2405 return igGetBackgroundDrawList(); 2406 } 2407 2408 ImDrawList* GetForegroundDrawList() @trusted 2409 { 2410 return igGetForegroundDrawList(); 2411 } 2412 2413 /++ 2414 + Miscellaneous Utilities 2415 +/ 2416 bool IsRectVisibleBySize(ImVec2 size) @trusted 2417 { 2418 return igIsRectVisibleBySize(size); 2419 } 2420 2421 bool IsRectVisible(ImVec2 rect_min, ImVec2 rect_max) @trusted 2422 { 2423 return igIsRectVisible(rect_min, rect_max); 2424 } 2425 2426 double GetTime() @trusted 2427 { 2428 return igGetTime(); 2429 } 2430 2431 int GetFrameCount() @trusted 2432 { 2433 return igGetFrameCount(); 2434 } 2435 2436 ImDrawListSharedData* GetDrawListSharedData() @trusted 2437 { 2438 return igGetDrawListSharedData(); 2439 } 2440 2441 const(char)* GetStyleColorName(ImGuiCol idx) @trusted 2442 { 2443 return igGetStyleColorName(idx); 2444 } 2445 2446 void SetStateStorage(scope ImGuiStorage* storage) @trusted 2447 { 2448 igSetStateStorage(storage); 2449 } 2450 2451 ImGuiStorage* GetStateStorage() @trusted 2452 { 2453 return igGetStateStorage(); 2454 } 2455 2456 /++ 2457 + Text Utilities 2458 +/ 2459 ImVec2 CalcTextSize(const(char)* text) @trusted 2460 { 2461 return igCalcTextSize(text); 2462 } 2463 2464 ImVec2 CalcTextSizeEx(const(char)* text, const(char)* text_end, bool hide_text_after_double_hash, float wrap_width) @trusted 2465 { 2466 return igCalcTextSizeEx(text, text_end, hide_text_after_double_hash, wrap_width); 2467 } 2468 2469 /++ 2470 + Color Utilities 2471 +/ 2472 ImVec4 ColorConvertU32ToFloat4(ImU32 in_) @trusted 2473 { 2474 return igColorConvertU32ToFloat4(in_); 2475 } 2476 2477 ImU32 ColorConvertFloat4ToU32(ImVec4 in_) @trusted 2478 { 2479 return igColorConvertFloat4ToU32(in_); 2480 } 2481 2482 alias ColorConvertRGBtoHSV = igColorConvertRGBtoHSV; 2483 2484 void ColorConvertHSVtoRGB(float h, float s, float v, scope float* out_r, scope float* out_g, scope float* out_b) @trusted 2485 { 2486 igColorConvertHSVtoRGB(h, s, v, out_r, out_g, out_b); 2487 } 2488 2489 /++ 2490 + Inputs Utilities: Raw Keyboard/Mouse/Gamepad Access 2491 + Consider using the Shortcut() function instead of IsKeyPressed()/IsKeyChordPressed()! Shortcut() is easier to use and better featured (can do focus routing check). 2492 + the ImGuiKey enum contains all possible keyboard, mouse and gamepad inputs (e.g. ImGuiKey_A, ImGuiKey_MouseLeft, ImGuiKey_GamepadDpadUp...). 2493 + (legacy: before v1.87 (202202), we used ImGuiKey 2494 + < 2495 + 512 values to carry native/user indices as defined by each backends. This was obsoleted in 1.87 (202202) and completely removed in 1.91.5 (202411). See https://github.com/ocornut/imgui/issues/4921) 2496 +/ 2497 bool IsKeyDown(ImGuiKey key) @trusted 2498 { 2499 return igIsKeyDown(key); 2500 } 2501 2502 bool IsKeyPressed(ImGuiKey key) @trusted 2503 { 2504 return igIsKeyPressed(key); 2505 } 2506 2507 bool IsKeyPressedEx(ImGuiKey key, bool repeat) @trusted 2508 { 2509 return igIsKeyPressedEx(key, repeat); 2510 } 2511 2512 bool IsKeyReleased(ImGuiKey key) @trusted 2513 { 2514 return igIsKeyReleased(key); 2515 } 2516 2517 bool IsKeyChordPressed(ImGuiKeyChord key_chord) @trusted 2518 { 2519 return igIsKeyChordPressed(key_chord); 2520 } 2521 2522 int GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate) @trusted 2523 { 2524 return igGetKeyPressedAmount(key, repeat_delay, rate); 2525 } 2526 2527 const(char)* GetKeyName(ImGuiKey key) @trusted 2528 { 2529 return igGetKeyName(key); 2530 } 2531 2532 void SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard) @trusted 2533 { 2534 igSetNextFrameWantCaptureKeyboard(want_capture_keyboard); 2535 } 2536 2537 /++ 2538 + Inputs Utilities: Shortcut Testing 2539 + & 2540 + Routing 2541 + Typical use is e.g.: 'if (ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiKey_S)) { ... }'. 2542 + Flags: Default route use ImGuiInputFlags_RouteFocused, but see ImGuiInputFlags_RouteGlobal and other options in ImGuiInputFlags_! 2543 + Flags: Use ImGuiInputFlags_Repeat to support repeat. 2544 + ImGuiKeyChord = a ImGuiKey + optional ImGuiMod_Alt/ImGuiMod_Ctrl/ImGuiMod_Shift/ImGuiMod_Super. 2545 + ImGuiKey_C // Accepted by functions taking ImGuiKey or ImGuiKeyChord arguments 2546 + ImGuiMod_Ctrl | ImGuiKey_C // Accepted by functions taking ImGuiKeyChord arguments 2547 + only ImGuiMod_XXX values are legal to combine with an ImGuiKey. You CANNOT combine two ImGuiKey values. 2548 + The general idea is that several callers may register interest in a shortcut, and only one owner gets it. 2549 + Parent > call Shortcut(Ctrl+S) // When Parent is focused, Parent gets the shortcut. 2550 + Child1 > call Shortcut(Ctrl+S) // When Child1 is focused, Child1 gets the shortcut (Child1 overrides Parent shortcuts) 2551 + Child2 > no call // When Child2 is focused, Parent gets the shortcut. 2552 + The whole system is order independent, so if Child1 makes its calls before Parent, results will be identical. 2553 + This is an important property as it facilitate working with foreign code or larger codebase. 2554 + To understand the difference: 2555 + IsKeyChordPressed() compares mods and call IsKeyPressed() 2556 + > the function has no sideeffect. 2557 + Shortcut() submits a route, routes are resolved, if it currently can be routed it calls IsKeyChordPressed() 2558 + > the function has (desirable) sideeffects as it can prevents another call from getting the route. 2559 + Visualize registered routes in 'Metrics/Debugger>Inputs'. 2560 +/ 2561 bool Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted 2562 { 2563 return igShortcut(key_chord, flags); 2564 } 2565 2566 void SetNextItemShortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted 2567 { 2568 igSetNextItemShortcut(key_chord, flags); 2569 } 2570 2571 /++ 2572 + Inputs Utilities: Key/Input Ownership [BETA] 2573 + One common use case would be to allow your items to disable standard inputs behaviors such 2574 + as Tab or Alt key handling, Mouse Wheel scrolling, etc. 2575 + e.g. Button(...); SetItemKeyOwner(ImGuiKey_MouseWheelY); to make hovering/activating a button disable wheel for scrolling. 2576 + Reminder ImGuiKey enum include access to mouse buttons and gamepad, so key ownership can apply to them. 2577 + Many related features are still in imgui_internal.h. For instance, most IsKeyXXX()/IsMouseXXX() functions have an owneridaware version. 2578 +/ 2579 void SetItemKeyOwner(ImGuiKey key) @trusted 2580 { 2581 igSetItemKeyOwner(key); 2582 } 2583 2584 /++ 2585 + Inputs Utilities: Mouse 2586 + To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right. 2587 + You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle. 2588 + Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold') 2589 +/ 2590 bool IsMouseDown(ImGuiMouseButton button) @trusted 2591 { 2592 return igIsMouseDown(button); 2593 } 2594 2595 bool IsMouseClicked(ImGuiMouseButton button) @trusted 2596 { 2597 return igIsMouseClicked(button); 2598 } 2599 2600 bool IsMouseClickedEx(ImGuiMouseButton button, bool repeat) @trusted 2601 { 2602 return igIsMouseClickedEx(button, repeat); 2603 } 2604 2605 bool IsMouseReleased(ImGuiMouseButton button) @trusted 2606 { 2607 return igIsMouseReleased(button); 2608 } 2609 2610 bool IsMouseDoubleClicked(ImGuiMouseButton button) @trusted 2611 { 2612 return igIsMouseDoubleClicked(button); 2613 } 2614 2615 bool IsMouseReleasedWithDelay(ImGuiMouseButton button, float delay) @trusted 2616 { 2617 return igIsMouseReleasedWithDelay(button, delay); 2618 } 2619 2620 int GetMouseClickedCount(ImGuiMouseButton button) @trusted 2621 { 2622 return igGetMouseClickedCount(button); 2623 } 2624 2625 bool IsMouseHoveringRect(ImVec2 r_min, ImVec2 r_max) @trusted 2626 { 2627 return igIsMouseHoveringRect(r_min, r_max); 2628 } 2629 2630 bool IsMouseHoveringRectEx(ImVec2 r_min, ImVec2 r_max, bool clip) @trusted 2631 { 2632 return igIsMouseHoveringRectEx(r_min, r_max, clip); 2633 } 2634 2635 bool IsMousePosValid(ImVec2* mouse_pos) @trusted 2636 { 2637 return igIsMousePosValid(mouse_pos); 2638 } 2639 2640 bool IsAnyMouseDown() @trusted 2641 { 2642 return igIsAnyMouseDown(); 2643 } 2644 2645 ImVec2 GetMousePos() @trusted 2646 { 2647 return igGetMousePos(); 2648 } 2649 2650 ImVec2 GetMousePosOnOpeningCurrentPopup() @trusted 2651 { 2652 return igGetMousePosOnOpeningCurrentPopup(); 2653 } 2654 2655 bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold) @trusted 2656 { 2657 return igIsMouseDragging(button, lock_threshold); 2658 } 2659 2660 ImVec2 GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold) @trusted 2661 { 2662 return igGetMouseDragDelta(button, lock_threshold); 2663 } 2664 2665 void ResetMouseDragDelta() @trusted 2666 { 2667 igResetMouseDragDelta(); 2668 } 2669 2670 void ResetMouseDragDeltaEx(ImGuiMouseButton button) @trusted 2671 { 2672 igResetMouseDragDeltaEx(button); 2673 } 2674 2675 ImGuiMouseCursor GetMouseCursor() @trusted 2676 { 2677 return igGetMouseCursor(); 2678 } 2679 2680 void SetMouseCursor(ImGuiMouseCursor cursor_type) @trusted 2681 { 2682 igSetMouseCursor(cursor_type); 2683 } 2684 2685 void SetNextFrameWantCaptureMouse(bool want_capture_mouse) @trusted 2686 { 2687 igSetNextFrameWantCaptureMouse(want_capture_mouse); 2688 } 2689 2690 /++ 2691 + Clipboard Utilities 2692 + Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard. 2693 +/ 2694 const(char)* GetClipboardText() @trusted 2695 { 2696 return igGetClipboardText(); 2697 } 2698 2699 void SetClipboardText(const(char)* text) @trusted 2700 { 2701 igSetClipboardText(text); 2702 } 2703 2704 /++ 2705 + Settings/.Ini Utilities 2706 + The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini"). 2707 + Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually. 2708 + Important: default value "imgui.ini" is relative to current working dir! Most apps will want to lock this to an absolute path (e.g. same path as executables). 2709 +/ 2710 void LoadIniSettingsFromDisk(const(char)* ini_filename) @trusted 2711 { 2712 igLoadIniSettingsFromDisk(ini_filename); 2713 } 2714 2715 void LoadIniSettingsFromMemory(const(char)* ini_data, size_t ini_size) @trusted 2716 { 2717 igLoadIniSettingsFromMemory(ini_data, ini_size); 2718 } 2719 2720 void SaveIniSettingsToDisk(const(char)* ini_filename) @trusted 2721 { 2722 igSaveIniSettingsToDisk(ini_filename); 2723 } 2724 2725 const(char)* SaveIniSettingsToMemory(size_t* out_ini_size) @trusted 2726 { 2727 return igSaveIniSettingsToMemory(out_ini_size); 2728 } 2729 2730 /++ 2731 + Debug Utilities 2732 + Your main debugging friend is the ShowMetricsWindow() function. 2733 + Interactive tools are all accessible from the 'Dear ImGui Demo>Tools' menu. 2734 + Read https://github.com/ocornut/imgui/wiki/DebugTools for a description of all available debug tools. 2735 +/ 2736 void DebugTextEncoding(const(char)* text) @trusted 2737 { 2738 igDebugTextEncoding(text); 2739 } 2740 2741 void DebugFlashStyleColor(ImGuiCol idx) @trusted 2742 { 2743 igDebugFlashStyleColor(idx); 2744 } 2745 2746 void DebugStartItemPicker() @trusted 2747 { 2748 igDebugStartItemPicker(); 2749 } 2750 2751 bool DebugCheckVersionAndDataLayout(const(char)* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx) @trusted 2752 { 2753 return igDebugCheckVersionAndDataLayout(version_str, sz_io, sz_style, sz_vec2, sz_vec4, sz_drawvert, sz_drawidx); 2754 } 2755 2756 void DebugLog(const(char)* fmt) @trusted 2757 { 2758 igDebugLog(fmt); 2759 } 2760 2761 alias DebugLogV = igDebugLogV; 2762 2763 /++ 2764 + Memory Allocators 2765 + Those functions are not reliant on the current context. 2766 + DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() 2767 + for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. 2768 +/ 2769 void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, scope void* user_data) @trusted 2770 { 2771 igSetAllocatorFunctions(alloc_func, free_func, user_data); 2772 } 2773 2774 void GetAllocatorFunctions(scope ImGuiMemAllocFunc* p_alloc_func, scope ImGuiMemFreeFunc* p_free_func, scope void** p_user_data) @trusted 2775 { 2776 igGetAllocatorFunctions(p_alloc_func, p_free_func, p_user_data); 2777 } 2778 2779 void* MemAlloc(size_t size) @trusted 2780 { 2781 return igMemAlloc(size); 2782 } 2783 2784 void MemFree(scope void* ptr) @trusted 2785 { 2786 igMemFree(ptr); 2787 } 2788 2789 /++ 2790 + OBSOLETED in 1.92.0 (from June 2025) 2791 +/ 2792 void PushFont(scope ImFont* font) @trusted 2793 { 2794 igPushFont(font); 2795 } 2796 2797 void SetWindowFontScale(float scale) @trusted 2798 { 2799 igSetWindowFontScale(scale); 2800 } 2801 2802 /++ 2803 + OBSOLETED in 1.91.9 (from February 2025) 2804 +/ 2805 void ImageImVec4(ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 tint_col, ImVec4 border_col) @trusted 2806 { 2807 igImageImVec4(tex_ref, image_size, uv0, uv1, tint_col, border_col); 2808 } 2809 2810 /++ 2811 + OBSOLETED in 1.91.0 (from July 2024) 2812 +/ 2813 void PushButtonRepeat(bool repeat) @trusted 2814 { 2815 igPushButtonRepeat(repeat); 2816 } 2817 2818 void PopButtonRepeat() @trusted 2819 { 2820 igPopButtonRepeat(); 2821 } 2822 2823 void PushTabStop(bool tab_stop) @trusted 2824 { 2825 igPushTabStop(tab_stop); 2826 } 2827 2828 void PopTabStop() @trusted 2829 { 2830 igPopTabStop(); 2831 } 2832 2833 /++ 2834 + You do not need those functions! See #7838 on GitHub for more info. 2835 +/ 2836 ImVec2 GetContentRegionMax() @trusted 2837 { 2838 return igGetContentRegionMax(); 2839 } 2840 2841 ImVec2 GetWindowContentRegionMin() @trusted 2842 { 2843 return igGetWindowContentRegionMin(); 2844 } 2845 2846 ImVec2 GetWindowContentRegionMax() @trusted 2847 { 2848 return igGetWindowContentRegionMax(); 2849 } 2850 2851 /++ 2852 + OBSOLETED in 1.90.0 (from September 2023) 2853 +/ 2854 bool ComboObsolete(const(char)* label, scope int* current_item, ImGuiOld_callbackCallback old_callback, scope void* user_data, int items_count) @trusted 2855 { 2856 return igComboObsolete(label, current_item, old_callback, user_data, items_count); 2857 } 2858 2859 bool ComboObsoleteEx(const(char)* label, scope int* current_item, ImGuiOld_callbackCallback old_callback, scope void* user_data, int items_count, int popup_max_height_in_items) @trusted 2860 { 2861 return igComboObsoleteEx(label, current_item, old_callback, user_data, items_count, popup_max_height_in_items); 2862 } 2863 2864 bool ListBoxObsolete(const(char)* label, scope int* current_item, ImGuiOld_callbackCallback old_callback, scope void* user_data, int items_count) @trusted 2865 { 2866 return igListBoxObsolete(label, current_item, old_callback, user_data, items_count); 2867 } 2868 2869 bool ListBoxObsoleteEx(const(char)* label, scope int* current_item, ImGuiOld_callbackCallback old_callback, scope void* user_data, int items_count, int height_in_items) @trusted 2870 { 2871 return igListBoxObsoleteEx(label, current_item, old_callback, user_data, items_count, height_in_items); 2872 } 2873 2874 /++ 2875 + Windows 2876 + We should always have a CurrentWindow in the stack (there is an implicit "Debug" window) 2877 + If this ever crashes because g.CurrentWindow is NULL, it means that either: 2878 + ImGui::NewFrame() has never been called, which is illegal. 2879 + You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal. 2880 +/ 2881 ImGuiIO* GetIOImGuiContextPtr(scope ImGuiContext* ctx) @trusted 2882 { 2883 return igGetIOImGuiContextPtr(ctx); 2884 } 2885 2886 ImGuiPlatformIO* GetPlatformIOImGuiContextPtr(scope ImGuiContext* ctx) @trusted 2887 { 2888 return igGetPlatformIOImGuiContextPtr(ctx); 2889 } 2890 2891 float GetScale() @trusted 2892 { 2893 return igGetScale(); 2894 } 2895 2896 ImGuiWindow* GetCurrentWindowRead() @trusted 2897 { 2898 return igGetCurrentWindowRead(); 2899 } 2900 2901 ImGuiWindow* GetCurrentWindow() @trusted 2902 { 2903 return igGetCurrentWindow(); 2904 } 2905 2906 ImGuiWindow* FindWindowByID(ImGuiID id) @trusted 2907 { 2908 return igFindWindowByID(id); 2909 } 2910 2911 ImGuiWindow* FindWindowByName(const(char)* name) @trusted 2912 { 2913 return igFindWindowByName(name); 2914 } 2915 2916 void UpdateWindowParentAndRootLinks(scope ImGuiWindow* window, ImGuiWindowFlags flags, scope ImGuiWindow* parent_window) @trusted 2917 { 2918 igUpdateWindowParentAndRootLinks(window, flags, parent_window); 2919 } 2920 2921 void UpdateWindowSkipRefresh(scope ImGuiWindow* window) @trusted 2922 { 2923 igUpdateWindowSkipRefresh(window); 2924 } 2925 2926 ImVec2 CalcWindowNextAutoFitSize(scope ImGuiWindow* window) @trusted 2927 { 2928 return igCalcWindowNextAutoFitSize(window); 2929 } 2930 2931 bool IsWindowChildOf(scope ImGuiWindow* window, scope ImGuiWindow* potential_parent, bool popup_hierarchy) @trusted 2932 { 2933 return igIsWindowChildOf(window, potential_parent, popup_hierarchy); 2934 } 2935 2936 bool IsWindowInBeginStack(scope ImGuiWindow* window) @trusted 2937 { 2938 return igIsWindowInBeginStack(window); 2939 } 2940 2941 bool IsWindowWithinBeginStackOf(scope ImGuiWindow* window, scope ImGuiWindow* potential_parent) @trusted 2942 { 2943 return igIsWindowWithinBeginStackOf(window, potential_parent); 2944 } 2945 2946 bool IsWindowAbove(scope ImGuiWindow* potential_above, scope ImGuiWindow* potential_below) @trusted 2947 { 2948 return igIsWindowAbove(potential_above, potential_below); 2949 } 2950 2951 bool IsWindowNavFocusable(scope ImGuiWindow* window) @trusted 2952 { 2953 return igIsWindowNavFocusable(window); 2954 } 2955 2956 void SetWindowPosImGuiWindowPtr(scope ImGuiWindow* window, ImVec2 pos, ImGuiCond cond) @trusted 2957 { 2958 igSetWindowPosImGuiWindowPtr(window, pos, cond); 2959 } 2960 2961 void SetWindowSizeImGuiWindowPtr(scope ImGuiWindow* window, ImVec2 size, ImGuiCond cond) @trusted 2962 { 2963 igSetWindowSizeImGuiWindowPtr(window, size, cond); 2964 } 2965 2966 void SetWindowCollapsedImGuiWindowPtr(scope ImGuiWindow* window, bool collapsed, ImGuiCond cond) @trusted 2967 { 2968 igSetWindowCollapsedImGuiWindowPtr(window, collapsed, cond); 2969 } 2970 2971 void SetWindowHitTestHole(scope ImGuiWindow* window, ImVec2 pos, ImVec2 size) @trusted 2972 { 2973 igSetWindowHitTestHole(window, pos, size); 2974 } 2975 2976 void SetWindowHiddenAndSkipItemsForCurrentFrame(scope ImGuiWindow* window) @trusted 2977 { 2978 igSetWindowHiddenAndSkipItemsForCurrentFrame(window); 2979 } 2980 2981 void SetWindowParentWindowForFocusRoute(scope ImGuiWindow* window, scope ImGuiWindow* parent_window) @trusted 2982 { 2983 igSetWindowParentWindowForFocusRoute(window, parent_window); 2984 } 2985 2986 ImRect WindowRectAbsToRel(scope ImGuiWindow* window, ImRect r) @trusted 2987 { 2988 return igWindowRectAbsToRel(window, r); 2989 } 2990 2991 ImRect WindowRectRelToAbs(scope ImGuiWindow* window, ImRect r) @trusted 2992 { 2993 return igWindowRectRelToAbs(window, r); 2994 } 2995 2996 ImVec2 WindowPosAbsToRel(scope ImGuiWindow* window, ImVec2 p) @trusted 2997 { 2998 return igWindowPosAbsToRel(window, p); 2999 } 3000 3001 ImVec2 WindowPosRelToAbs(scope ImGuiWindow* window, ImVec2 p) @trusted 3002 { 3003 return igWindowPosRelToAbs(window, p); 3004 } 3005 3006 /++ 3007 + Windows: Display Order and Focus Order 3008 +/ 3009 void FocusWindow(scope ImGuiWindow* window, ImGuiFocusRequestFlags flags) @trusted 3010 { 3011 igFocusWindow(window, flags); 3012 } 3013 3014 void FocusTopMostWindowUnderOne(scope ImGuiWindow* under_this_window, scope ImGuiWindow* ignore_window, scope ImGuiViewport* filter_viewport, ImGuiFocusRequestFlags flags) @trusted 3015 { 3016 igFocusTopMostWindowUnderOne(under_this_window, ignore_window, filter_viewport, flags); 3017 } 3018 3019 void BringWindowToFocusFront(scope ImGuiWindow* window) @trusted 3020 { 3021 igBringWindowToFocusFront(window); 3022 } 3023 3024 void BringWindowToDisplayFront(scope ImGuiWindow* window) @trusted 3025 { 3026 igBringWindowToDisplayFront(window); 3027 } 3028 3029 void BringWindowToDisplayBack(scope ImGuiWindow* window) @trusted 3030 { 3031 igBringWindowToDisplayBack(window); 3032 } 3033 3034 void BringWindowToDisplayBehind(scope ImGuiWindow* window, scope ImGuiWindow* above_window) @trusted 3035 { 3036 igBringWindowToDisplayBehind(window, above_window); 3037 } 3038 3039 int FindWindowDisplayIndex(scope ImGuiWindow* window) @trusted 3040 { 3041 return igFindWindowDisplayIndex(window); 3042 } 3043 3044 ImGuiWindow* FindBottomMostVisibleWindowWithinBeginStack(scope ImGuiWindow* window) @trusted 3045 { 3046 return igFindBottomMostVisibleWindowWithinBeginStack(window); 3047 } 3048 3049 /++ 3050 + Windows: Idle, Refresh Policies [EXPERIMENTAL] 3051 +/ 3052 void SetNextWindowRefreshPolicy(ImGuiWindowRefreshFlags flags) @trusted 3053 { 3054 igSetNextWindowRefreshPolicy(flags); 3055 } 3056 3057 /++ 3058 + Fonts, drawing 3059 +/ 3060 void RegisterUserTexture(scope ImTextureData* tex) @trusted 3061 { 3062 igRegisterUserTexture(tex); 3063 } 3064 3065 void UnregisterUserTexture(scope ImTextureData* tex) @trusted 3066 { 3067 igUnregisterUserTexture(tex); 3068 } 3069 3070 void RegisterFontAtlas(scope ImFontAtlas* atlas) @trusted 3071 { 3072 igRegisterFontAtlas(atlas); 3073 } 3074 3075 void UnregisterFontAtlas(scope ImFontAtlas* atlas) @trusted 3076 { 3077 igUnregisterFontAtlas(atlas); 3078 } 3079 3080 void SetCurrentFont(scope ImFont* font, float font_size_before_scaling, float font_size_after_scaling) @trusted 3081 { 3082 igSetCurrentFont(font, font_size_before_scaling, font_size_after_scaling); 3083 } 3084 3085 void UpdateCurrentFontSize(float restore_font_size_after_scaling) @trusted 3086 { 3087 igUpdateCurrentFontSize(restore_font_size_after_scaling); 3088 } 3089 3090 void SetFontRasterizerDensity(float rasterizer_density) @trusted 3091 { 3092 igSetFontRasterizerDensity(rasterizer_density); 3093 } 3094 3095 float GetFontRasterizerDensity() @trusted 3096 { 3097 return igGetFontRasterizerDensity(); 3098 } 3099 3100 float GetRoundedFontSize(float size) @trusted 3101 { 3102 return igGetRoundedFontSize(size); 3103 } 3104 3105 ImFont* GetDefaultFont() @trusted 3106 { 3107 return igGetDefaultFont(); 3108 } 3109 3110 void PushPasswordFont() @trusted 3111 { 3112 igPushPasswordFont(); 3113 } 3114 3115 void PopPasswordFont() @trusted 3116 { 3117 igPopPasswordFont(); 3118 } 3119 3120 ImDrawList* GetForegroundDrawListImGuiWindowPtr(scope ImGuiWindow* window) @trusted 3121 { 3122 return igGetForegroundDrawListImGuiWindowPtr(window); 3123 } 3124 3125 ImDrawList* GetBackgroundDrawListImGuiViewportPtr(scope ImGuiViewport* viewport) @trusted 3126 { 3127 return igGetBackgroundDrawListImGuiViewportPtr(viewport); 3128 } 3129 3130 ImDrawList* GetForegroundDrawListImGuiViewportPtr(scope ImGuiViewport* viewport) @trusted 3131 { 3132 return igGetForegroundDrawListImGuiViewportPtr(viewport); 3133 } 3134 3135 void AddDrawListToDrawDataEx(scope ImDrawData* draw_data, scope ImVector_ImDrawListPtr* out_list, scope ImDrawList* draw_list) @trusted 3136 { 3137 igAddDrawListToDrawDataEx(draw_data, out_list, draw_list); 3138 } 3139 3140 /++ 3141 + Init 3142 +/ 3143 void Initialize() @trusted 3144 { 3145 igInitialize(); 3146 } 3147 3148 void Shutdown() @trusted 3149 { 3150 igShutdown(); 3151 } 3152 3153 /++ 3154 + Context name 3155 + & 3156 + generic context hooks 3157 +/ 3158 void SetContextName(scope ImGuiContext* ctx, const(char)* name) @trusted 3159 { 3160 igSetContextName(ctx, name); 3161 } 3162 3163 ImGuiID AddContextHook(ImGuiContext* ctx, ImGuiContextHook* hook) @trusted 3164 { 3165 return igAddContextHook(ctx, hook); 3166 } 3167 3168 void RemoveContextHook(scope ImGuiContext* ctx, ImGuiID hook_to_remove) @trusted 3169 { 3170 igRemoveContextHook(ctx, hook_to_remove); 3171 } 3172 3173 void CallContextHooks(scope ImGuiContext* ctx, ImGuiContextHookType type) @trusted 3174 { 3175 igCallContextHooks(ctx, type); 3176 } 3177 3178 /++ 3179 + NewFrame 3180 +/ 3181 void UpdateInputEvents(bool trickle_fast_inputs) @trusted 3182 { 3183 igUpdateInputEvents(trickle_fast_inputs); 3184 } 3185 3186 void UpdateHoveredWindowAndCaptureFlags(ImVec2 mouse_pos) @trusted 3187 { 3188 igUpdateHoveredWindowAndCaptureFlags(mouse_pos); 3189 } 3190 3191 void FindHoveredWindowEx(ImVec2 pos, bool find_first_and_in_any_viewport, scope ImGuiWindow** out_hovered_window, scope ImGuiWindow** out_hovered_window_under_moving_window) @trusted 3192 { 3193 igFindHoveredWindowEx(pos, find_first_and_in_any_viewport, out_hovered_window, out_hovered_window_under_moving_window); 3194 } 3195 3196 void StartMouseMovingWindow(scope ImGuiWindow* window) @trusted 3197 { 3198 igStartMouseMovingWindow(window); 3199 } 3200 3201 void StopMouseMovingWindow() @trusted 3202 { 3203 igStopMouseMovingWindow(); 3204 } 3205 3206 void UpdateMouseMovingWindowNewFrame() @trusted 3207 { 3208 igUpdateMouseMovingWindowNewFrame(); 3209 } 3210 3211 void UpdateMouseMovingWindowEndFrame() @trusted 3212 { 3213 igUpdateMouseMovingWindowEndFrame(); 3214 } 3215 3216 /++ 3217 + Viewports 3218 +/ 3219 ImGuiViewport* GetWindowViewport() @trusted 3220 { 3221 return igGetWindowViewport(); 3222 } 3223 3224 void ScaleWindowsInViewport(scope ImGuiViewportP* viewport, float scale) @trusted 3225 { 3226 igScaleWindowsInViewport(viewport, scale); 3227 } 3228 3229 void SetWindowViewport(scope ImGuiWindow* window, scope ImGuiViewportP* viewport) @trusted 3230 { 3231 igSetWindowViewport(window, viewport); 3232 } 3233 3234 /++ 3235 + Settings 3236 +/ 3237 void MarkIniSettingsDirty() @trusted 3238 { 3239 igMarkIniSettingsDirty(); 3240 } 3241 3242 void MarkIniSettingsDirtyImGuiWindowPtr(scope ImGuiWindow* window) @trusted 3243 { 3244 igMarkIniSettingsDirtyImGuiWindowPtr(window); 3245 } 3246 3247 void ClearIniSettings() @trusted 3248 { 3249 igClearIniSettings(); 3250 } 3251 3252 void AddSettingsHandler(ImGuiSettingsHandler* handler) @trusted 3253 { 3254 igAddSettingsHandler(handler); 3255 } 3256 3257 void RemoveSettingsHandler(const(char)* type_name) @trusted 3258 { 3259 igRemoveSettingsHandler(type_name); 3260 } 3261 3262 ImGuiSettingsHandler* FindSettingsHandler(const(char)* type_name) @trusted 3263 { 3264 return igFindSettingsHandler(type_name); 3265 } 3266 3267 /++ 3268 + Settings Windows 3269 +/ 3270 ImGuiWindowSettings* CreateNewWindowSettings(const(char)* name) @trusted 3271 { 3272 return igCreateNewWindowSettings(name); 3273 } 3274 3275 ImGuiWindowSettings* FindWindowSettingsByID(ImGuiID id) @trusted 3276 { 3277 return igFindWindowSettingsByID(id); 3278 } 3279 3280 ImGuiWindowSettings* FindWindowSettingsByWindow(scope ImGuiWindow* window) @trusted 3281 { 3282 return igFindWindowSettingsByWindow(window); 3283 } 3284 3285 void ClearWindowSettings(const(char)* name) @trusted 3286 { 3287 igClearWindowSettings(name); 3288 } 3289 3290 /++ 3291 + Localization 3292 +/ 3293 void LocalizeRegisterEntries(ImGuiLocEntry* entries, int count) @trusted 3294 { 3295 igLocalizeRegisterEntries(entries, count); 3296 } 3297 3298 const(char)* LocalizeGetMsg(ImGuiLocKey key) @trusted 3299 { 3300 return igLocalizeGetMsg(key); 3301 } 3302 3303 /++ 3304 + Scrolling 3305 +/ 3306 void SetScrollXImGuiWindowPtr(scope ImGuiWindow* window, float scroll_x) @trusted 3307 { 3308 igSetScrollXImGuiWindowPtr(window, scroll_x); 3309 } 3310 3311 void SetScrollYImGuiWindowPtr(scope ImGuiWindow* window, float scroll_y) @trusted 3312 { 3313 igSetScrollYImGuiWindowPtr(window, scroll_y); 3314 } 3315 3316 void SetScrollFromPosXImGuiWindowPtr(scope ImGuiWindow* window, float local_x, float center_x_ratio) @trusted 3317 { 3318 igSetScrollFromPosXImGuiWindowPtr(window, local_x, center_x_ratio); 3319 } 3320 3321 void SetScrollFromPosYImGuiWindowPtr(scope ImGuiWindow* window, float local_y, float center_y_ratio) @trusted 3322 { 3323 igSetScrollFromPosYImGuiWindowPtr(window, local_y, center_y_ratio); 3324 } 3325 3326 /++ 3327 + Early workinprogress API (ScrollToItem() will become public) 3328 +/ 3329 void ScrollToItem(ImGuiScrollFlags flags) @trusted 3330 { 3331 igScrollToItem(flags); 3332 } 3333 3334 void ScrollToRect(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted 3335 { 3336 igScrollToRect(window, rect, flags); 3337 } 3338 3339 ImVec2 ScrollToRectEx(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted 3340 { 3341 return igScrollToRectEx(window, rect, flags); 3342 } 3343 3344 /++ 3345 + #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 3346 +/ 3347 void ScrollToBringRectIntoView(scope ImGuiWindow* window, ImRect rect) @trusted 3348 { 3349 igScrollToBringRectIntoView(window, rect); 3350 } 3351 3352 /++ 3353 + Basic Accessors 3354 +/ 3355 ImGuiItemStatusFlags GetItemStatusFlags() @trusted 3356 { 3357 return igGetItemStatusFlags(); 3358 } 3359 3360 ImGuiID GetActiveID() @trusted 3361 { 3362 return igGetActiveID(); 3363 } 3364 3365 ImGuiID GetFocusID() @trusted 3366 { 3367 return igGetFocusID(); 3368 } 3369 3370 void SetActiveID(ImGuiID id, scope ImGuiWindow* window) @trusted 3371 { 3372 igSetActiveID(id, window); 3373 } 3374 3375 void SetFocusID(ImGuiID id, scope ImGuiWindow* window) @trusted 3376 { 3377 igSetFocusID(id, window); 3378 } 3379 3380 void ClearActiveID() @trusted 3381 { 3382 igClearActiveID(); 3383 } 3384 3385 ImGuiID GetHoveredID() @trusted 3386 { 3387 return igGetHoveredID(); 3388 } 3389 3390 void SetHoveredID(ImGuiID id) @trusted 3391 { 3392 igSetHoveredID(id); 3393 } 3394 3395 void KeepAliveID(ImGuiID id) @trusted 3396 { 3397 igKeepAliveID(id); 3398 } 3399 3400 void MarkItemEdited(ImGuiID id) @trusted 3401 { 3402 igMarkItemEdited(id); 3403 } 3404 3405 void PushOverrideID(ImGuiID id) @trusted 3406 { 3407 igPushOverrideID(id); 3408 } 3409 3410 ImGuiID GetIDWithSeedStr(const(char)* str_id_begin, const(char)* str_id_end, ImGuiID seed) @trusted 3411 { 3412 return igGetIDWithSeedStr(str_id_begin, str_id_end, seed); 3413 } 3414 3415 ImGuiID GetIDWithSeed(int n, ImGuiID seed) @trusted 3416 { 3417 return igGetIDWithSeed(n, seed); 3418 } 3419 3420 /++ 3421 + Basic Helpers for widget code 3422 +/ 3423 void ItemSize(ImVec2 size) @trusted 3424 { 3425 igItemSize(size); 3426 } 3427 3428 void ItemSizeEx(ImVec2 size, float text_baseline_y) @trusted 3429 { 3430 igItemSizeEx(size, text_baseline_y); 3431 } 3432 3433 void ItemSizeImRect(ImRect bb) @trusted 3434 { 3435 igItemSizeImRect(bb); 3436 } 3437 3438 void ItemSizeImRectEx(ImRect bb, float text_baseline_y) @trusted 3439 { 3440 igItemSizeImRectEx(bb, text_baseline_y); 3441 } 3442 3443 bool ItemAdd(ImRect bb, ImGuiID id) @trusted 3444 { 3445 return igItemAdd(bb, id); 3446 } 3447 3448 bool ItemAddEx(ImRect bb, ImGuiID id, ImRect* nav_bb, ImGuiItemFlags extra_flags) @trusted 3449 { 3450 return igItemAddEx(bb, id, nav_bb, extra_flags); 3451 } 3452 3453 bool ItemHoverable(ImRect bb, ImGuiID id, ImGuiItemFlags item_flags) @trusted 3454 { 3455 return igItemHoverable(bb, id, item_flags); 3456 } 3457 3458 bool IsWindowContentHoverable(scope ImGuiWindow* window, ImGuiHoveredFlags flags) @trusted 3459 { 3460 return igIsWindowContentHoverable(window, flags); 3461 } 3462 3463 bool IsClippedEx(ImRect bb, ImGuiID id) @trusted 3464 { 3465 return igIsClippedEx(bb, id); 3466 } 3467 3468 void SetLastItemData(ImGuiID item_id, ImGuiItemFlags item_flags, ImGuiItemStatusFlags status_flags, ImRect item_rect) @trusted 3469 { 3470 igSetLastItemData(item_id, item_flags, status_flags, item_rect); 3471 } 3472 3473 ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h) @trusted 3474 { 3475 return igCalcItemSize(size, default_w, default_h); 3476 } 3477 3478 float CalcWrapWidthForPos(ImVec2 pos, float wrap_pos_x) @trusted 3479 { 3480 return igCalcWrapWidthForPos(pos, wrap_pos_x); 3481 } 3482 3483 void PushMultiItemsWidths(int components, float width_full) @trusted 3484 { 3485 igPushMultiItemsWidths(components, width_full); 3486 } 3487 3488 void ShrinkWidths(scope ImGuiShrinkWidthItem* items, int count, float width_excess, float width_min) @trusted 3489 { 3490 igShrinkWidths(items, count, width_excess, width_min); 3491 } 3492 3493 void CalcClipRectVisibleItemsY(ImRect clip_rect, ImVec2 pos, float items_height, scope int* out_visible_start, scope int* out_visible_end) @trusted 3494 { 3495 igCalcClipRectVisibleItemsY(clip_rect, pos, items_height, out_visible_start, out_visible_end); 3496 } 3497 3498 /++ 3499 + Parameter stacks (shared) 3500 +/ 3501 const(ImGuiStyleVarInfo)* GetStyleVarInfo(ImGuiStyleVar idx) @trusted 3502 { 3503 return igGetStyleVarInfo(idx); 3504 } 3505 3506 void BeginDisabledOverrideReenable() @trusted 3507 { 3508 igBeginDisabledOverrideReenable(); 3509 } 3510 3511 void EndDisabledOverrideReenable() @trusted 3512 { 3513 igEndDisabledOverrideReenable(); 3514 } 3515 3516 /++ 3517 + Logging/Capture 3518 +/ 3519 void LogBegin(ImGuiLogFlags flags, int auto_open_depth) @trusted 3520 { 3521 igLogBegin(flags, auto_open_depth); 3522 } 3523 3524 void LogToBuffer() @trusted 3525 { 3526 igLogToBuffer(); 3527 } 3528 3529 void LogToBufferEx(int auto_open_depth) @trusted 3530 { 3531 igLogToBufferEx(auto_open_depth); 3532 } 3533 3534 void LogRenderedText(ImVec2* ref_pos, const(char)* text) @trusted 3535 { 3536 igLogRenderedText(ref_pos, text); 3537 } 3538 3539 void LogRenderedTextEx(ImVec2* ref_pos, const(char)* text, const(char)* text_end) @trusted 3540 { 3541 igLogRenderedTextEx(ref_pos, text, text_end); 3542 } 3543 3544 void LogSetNextTextDecoration(const(char)* prefix, const(char)* suffix) @trusted 3545 { 3546 igLogSetNextTextDecoration(prefix, suffix); 3547 } 3548 3549 /++ 3550 + Childs 3551 +/ 3552 bool BeginChildEx(const(char)* name, ImGuiID id, ImVec2 size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) @trusted 3553 { 3554 return igBeginChildEx(name, id, size_arg, child_flags, window_flags); 3555 } 3556 3557 /++ 3558 + Popups, Modals 3559 +/ 3560 bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_window_flags) @trusted 3561 { 3562 return igBeginPopupEx(id, extra_window_flags); 3563 } 3564 3565 bool BeginPopupMenuEx(ImGuiID id, const(char)* label, ImGuiWindowFlags extra_window_flags) @trusted 3566 { 3567 return igBeginPopupMenuEx(id, label, extra_window_flags); 3568 } 3569 3570 void OpenPopupEx(ImGuiID id) @trusted 3571 { 3572 igOpenPopupEx(id); 3573 } 3574 3575 void OpenPopupExEx(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 3576 { 3577 igOpenPopupExEx(id, popup_flags); 3578 } 3579 3580 void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup) @trusted 3581 { 3582 igClosePopupToLevel(remaining, restore_focus_to_window_under_popup); 3583 } 3584 3585 void ClosePopupsOverWindow(scope ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup) @trusted 3586 { 3587 igClosePopupsOverWindow(ref_window, restore_focus_to_window_under_popup); 3588 } 3589 3590 void ClosePopupsExceptModals() @trusted 3591 { 3592 igClosePopupsExceptModals(); 3593 } 3594 3595 bool IsPopupOpenID(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 3596 { 3597 return igIsPopupOpenID(id, popup_flags); 3598 } 3599 3600 ImRect GetPopupAllowedExtentRect(scope ImGuiWindow* window) @trusted 3601 { 3602 return igGetPopupAllowedExtentRect(window); 3603 } 3604 3605 ImGuiWindow* GetTopMostPopupModal() @trusted 3606 { 3607 return igGetTopMostPopupModal(); 3608 } 3609 3610 ImGuiWindow* GetTopMostAndVisiblePopupModal() @trusted 3611 { 3612 return igGetTopMostAndVisiblePopupModal(); 3613 } 3614 3615 ImGuiWindow* FindBlockingModal(scope ImGuiWindow* window) @trusted 3616 { 3617 return igFindBlockingModal(window); 3618 } 3619 3620 ImVec2 FindBestWindowPosForPopup(scope ImGuiWindow* window) @trusted 3621 { 3622 return igFindBestWindowPosForPopup(window); 3623 } 3624 3625 ImVec2 FindBestWindowPosForPopupEx(ImVec2 ref_pos, ImVec2 size, scope ImGuiDir* last_dir, ImRect r_outer, ImRect r_avoid, ImGuiPopupPositionPolicy policy) @trusted 3626 { 3627 return igFindBestWindowPosForPopupEx(ref_pos, size, last_dir, r_outer, r_avoid, policy); 3628 } 3629 3630 ImGuiMouseButton GetMouseButtonFromPopupFlags(ImGuiPopupFlags flags) @trusted 3631 { 3632 return igGetMouseButtonFromPopupFlags(flags); 3633 } 3634 3635 /++ 3636 + Tooltips 3637 +/ 3638 bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags) @trusted 3639 { 3640 return igBeginTooltipEx(tooltip_flags, extra_window_flags); 3641 } 3642 3643 bool BeginTooltipHidden() @trusted 3644 { 3645 return igBeginTooltipHidden(); 3646 } 3647 3648 /++ 3649 + Menus 3650 +/ 3651 bool BeginViewportSideBar(const(char)* name, scope ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags) @trusted 3652 { 3653 return igBeginViewportSideBar(name, viewport, dir, size, window_flags); 3654 } 3655 3656 bool BeginMenuWithIcon(const(char)* label, const(char)* icon) @trusted 3657 { 3658 return igBeginMenuWithIcon(label, icon); 3659 } 3660 3661 bool BeginMenuWithIconEx(const(char)* label, const(char)* icon, bool enabled) @trusted 3662 { 3663 return igBeginMenuWithIconEx(label, icon, enabled); 3664 } 3665 3666 bool MenuItemWithIcon(const(char)* label, const(char)* icon) @trusted 3667 { 3668 return igMenuItemWithIcon(label, icon); 3669 } 3670 3671 bool MenuItemWithIconEx(const(char)* label, const(char)* icon, const(char)* shortcut, bool selected, bool enabled) @trusted 3672 { 3673 return igMenuItemWithIconEx(label, icon, shortcut, selected, enabled); 3674 } 3675 3676 /++ 3677 + Combos 3678 +/ 3679 bool BeginComboPopup(ImGuiID popup_id, ImRect bb, ImGuiComboFlags flags) @trusted 3680 { 3681 return igBeginComboPopup(popup_id, bb, flags); 3682 } 3683 3684 bool BeginComboPreview() @trusted 3685 { 3686 return igBeginComboPreview(); 3687 } 3688 3689 void EndComboPreview() @trusted 3690 { 3691 igEndComboPreview(); 3692 } 3693 3694 /++ 3695 + Keyboard/Gamepad Navigation 3696 +/ 3697 void NavInitWindow(scope ImGuiWindow* window, bool force_reinit) @trusted 3698 { 3699 igNavInitWindow(window, force_reinit); 3700 } 3701 3702 void NavInitRequestApplyResult() @trusted 3703 { 3704 igNavInitRequestApplyResult(); 3705 } 3706 3707 bool NavMoveRequestButNoResultYet() @trusted 3708 { 3709 return igNavMoveRequestButNoResultYet(); 3710 } 3711 3712 void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted 3713 { 3714 igNavMoveRequestSubmit(move_dir, clip_dir, move_flags, scroll_flags); 3715 } 3716 3717 void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted 3718 { 3719 igNavMoveRequestForward(move_dir, clip_dir, move_flags, scroll_flags); 3720 } 3721 3722 void NavMoveRequestResolveWithLastItem(scope ImGuiNavItemData* result) @trusted 3723 { 3724 igNavMoveRequestResolveWithLastItem(result); 3725 } 3726 3727 void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiTreeNodeStackData* tree_node_data) @trusted 3728 { 3729 igNavMoveRequestResolveWithPastTreeNode(result, tree_node_data); 3730 } 3731 3732 void NavMoveRequestCancel() @trusted 3733 { 3734 igNavMoveRequestCancel(); 3735 } 3736 3737 void NavMoveRequestApplyResult() @trusted 3738 { 3739 igNavMoveRequestApplyResult(); 3740 } 3741 3742 void NavMoveRequestTryWrapping(scope ImGuiWindow* window, ImGuiNavMoveFlags move_flags) @trusted 3743 { 3744 igNavMoveRequestTryWrapping(window, move_flags); 3745 } 3746 3747 void NavHighlightActivated(ImGuiID id) @trusted 3748 { 3749 igNavHighlightActivated(id); 3750 } 3751 3752 void NavClearPreferredPosForAxis(ImGuiAxis axis) @trusted 3753 { 3754 igNavClearPreferredPosForAxis(axis); 3755 } 3756 3757 void SetNavCursorVisibleAfterMove() @trusted 3758 { 3759 igSetNavCursorVisibleAfterMove(); 3760 } 3761 3762 void NavUpdateCurrentWindowIsScrollPushableX() @trusted 3763 { 3764 igNavUpdateCurrentWindowIsScrollPushableX(); 3765 } 3766 3767 void SetNavWindow(scope ImGuiWindow* window) @trusted 3768 { 3769 igSetNavWindow(window); 3770 } 3771 3772 void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, ImRect rect_rel) @trusted 3773 { 3774 igSetNavID(id, nav_layer, focus_scope_id, rect_rel); 3775 } 3776 3777 void SetNavFocusScope(ImGuiID focus_scope_id) @trusted 3778 { 3779 igSetNavFocusScope(focus_scope_id); 3780 } 3781 3782 /++ 3783 + Focus/Activation 3784 + This should be part of a larger set of API: FocusItem(offset = 1), FocusItemByID(id), ActivateItem(offset = 1), ActivateItemByID(id) etc. which are 3785 + much harder to design and implement than expected. I have a couple of private branches on this matter but it's not simple. For now implementing the easy ones. 3786 +/ 3787 void FocusItem() @trusted 3788 { 3789 igFocusItem(); 3790 } 3791 3792 void ActivateItemByID(ImGuiID id) @trusted 3793 { 3794 igActivateItemByID(id); 3795 } 3796 3797 /++ 3798 + Inputs 3799 + FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions. 3800 +/ 3801 bool IsNamedKey(ImGuiKey key) @trusted 3802 { 3803 return igIsNamedKey(key); 3804 } 3805 3806 bool IsNamedKeyOrMod(ImGuiKey key) @trusted 3807 { 3808 return igIsNamedKeyOrMod(key); 3809 } 3810 3811 bool IsLegacyKey(ImGuiKey key) @trusted 3812 { 3813 return igIsLegacyKey(key); 3814 } 3815 3816 bool IsKeyboardKey(ImGuiKey key) @trusted 3817 { 3818 return igIsKeyboardKey(key); 3819 } 3820 3821 bool IsGamepadKey(ImGuiKey key) @trusted 3822 { 3823 return igIsGamepadKey(key); 3824 } 3825 3826 bool IsMouseKey(ImGuiKey key) @trusted 3827 { 3828 return igIsMouseKey(key); 3829 } 3830 3831 bool IsAliasKey(ImGuiKey key) @trusted 3832 { 3833 return igIsAliasKey(key); 3834 } 3835 3836 bool IsLRModKey(ImGuiKey key) @trusted 3837 { 3838 return igIsLRModKey(key); 3839 } 3840 3841 ImGuiKeyChord FixupKeyChord(ImGuiKeyChord key_chord) @trusted 3842 { 3843 return igFixupKeyChord(key_chord); 3844 } 3845 3846 ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key) @trusted 3847 { 3848 return igConvertSingleModFlagToKey(key); 3849 } 3850 3851 ImGuiKeyData* GetKeyDataImGuiContextPtr(scope ImGuiContext* ctx, ImGuiKey key) @trusted 3852 { 3853 return igGetKeyDataImGuiContextPtr(ctx, key); 3854 } 3855 3856 ImGuiKeyData* GetKeyData(ImGuiKey key) @trusted 3857 { 3858 return igGetKeyData(key); 3859 } 3860 3861 const(char)* GetKeyChordName(ImGuiKeyChord key_chord) @trusted 3862 { 3863 return igGetKeyChordName(key_chord); 3864 } 3865 3866 ImGuiKey MouseButtonToKey(ImGuiMouseButton button) @trusted 3867 { 3868 return igMouseButtonToKey(button); 3869 } 3870 3871 bool IsMouseDragPastThreshold(ImGuiMouseButton button) @trusted 3872 { 3873 return igIsMouseDragPastThreshold(button); 3874 } 3875 3876 bool IsMouseDragPastThresholdEx(ImGuiMouseButton button, float lock_threshold) @trusted 3877 { 3878 return igIsMouseDragPastThresholdEx(button, lock_threshold); 3879 } 3880 3881 ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down) @trusted 3882 { 3883 return igGetKeyMagnitude2d(key_left, key_right, key_up, key_down); 3884 } 3885 3886 float GetNavTweakPressedAmount(ImGuiAxis axis) @trusted 3887 { 3888 return igGetNavTweakPressedAmount(axis); 3889 } 3890 3891 int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) @trusted 3892 { 3893 return igCalcTypematicRepeatAmount(t0, t1, repeat_delay, repeat_rate); 3894 } 3895 3896 void GetTypematicRepeatRate(ImGuiInputFlags flags, scope float* repeat_delay, scope float* repeat_rate) @trusted 3897 { 3898 igGetTypematicRepeatRate(flags, repeat_delay, repeat_rate); 3899 } 3900 3901 void TeleportMousePos(ImVec2 pos) @trusted 3902 { 3903 igTeleportMousePos(pos); 3904 } 3905 3906 void SetActiveIdUsingAllKeyboardKeys() @trusted 3907 { 3908 igSetActiveIdUsingAllKeyboardKeys(); 3909 } 3910 3911 bool IsActiveIdUsingNavDir(ImGuiDir dir) @trusted 3912 { 3913 return igIsActiveIdUsingNavDir(dir); 3914 } 3915 3916 /++ 3917 + [EXPERIMENTAL] LowLevel: Key/Input Ownership 3918 + The idea is that instead of "eating" a given input, we can link to an owner id. 3919 + Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead). 3920 + Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_NoOwner (== 1) or a custom ID. 3921 + Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0). 3922 + Input ownership is automatically released on the frame after a key is released. Therefore: 3923 + for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case). 3924 + for ownership registration happening ahead of a down/press event, the SetKeyOwner() call needs to be made every frame (happens if e.g. claiming ownership on hover). 3925 + SetItemKeyOwner() is a shortcut for common simple case. A custom widget will probably want to call SetKeyOwner() multiple times directly based on its interaction state. 3926 + This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step. 3927 + Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved. 3928 +/ 3929 ImGuiID GetKeyOwner(ImGuiKey key) @trusted 3930 { 3931 return igGetKeyOwner(key); 3932 } 3933 3934 void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted 3935 { 3936 igSetKeyOwner(key, owner_id, flags); 3937 } 3938 3939 void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted 3940 { 3941 igSetKeyOwnersForKeyChord(key, owner_id, flags); 3942 } 3943 3944 void SetItemKeyOwnerImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted 3945 { 3946 igSetItemKeyOwnerImGuiInputFlags(key, flags); 3947 } 3948 3949 bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id) @trusted 3950 { 3951 return igTestKeyOwner(key, owner_id); 3952 } 3953 3954 ImGuiKeyOwnerData* GetKeyOwnerData(scope ImGuiContext* ctx, ImGuiKey key) @trusted 3955 { 3956 return igGetKeyOwnerData(ctx, key); 3957 } 3958 3959 /++ 3960 + [EXPERIMENTAL] HighLevel: Input Access functions w/ support for Key/Input Ownership 3961 + Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag. 3962 + Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0) 3963 + Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'. 3964 + Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease. 3965 + Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API. 3966 +/ 3967 bool IsKeyDownID(ImGuiKey key, ImGuiID owner_id) @trusted 3968 { 3969 return igIsKeyDownID(key, owner_id); 3970 } 3971 3972 bool IsKeyPressedImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted 3973 { 3974 return igIsKeyPressedImGuiInputFlags(key, flags); 3975 } 3976 3977 bool IsKeyPressedImGuiInputFlagsEx(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3978 { 3979 return igIsKeyPressedImGuiInputFlagsEx(key, flags, owner_id); 3980 } 3981 3982 bool IsKeyReleasedID(ImGuiKey key, ImGuiID owner_id) @trusted 3983 { 3984 return igIsKeyReleasedID(key, owner_id); 3985 } 3986 3987 bool IsKeyChordPressedImGuiInputFlags(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted 3988 { 3989 return igIsKeyChordPressedImGuiInputFlags(key_chord, flags); 3990 } 3991 3992 bool IsKeyChordPressedImGuiInputFlagsEx(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3993 { 3994 return igIsKeyChordPressedImGuiInputFlagsEx(key_chord, flags, owner_id); 3995 } 3996 3997 bool IsMouseDownID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 3998 { 3999 return igIsMouseDownID(button, owner_id); 4000 } 4001 4002 bool IsMouseClickedImGuiInputFlags(ImGuiMouseButton button, ImGuiInputFlags flags) @trusted 4003 { 4004 return igIsMouseClickedImGuiInputFlags(button, flags); 4005 } 4006 4007 bool IsMouseClickedImGuiInputFlagsEx(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4008 { 4009 return igIsMouseClickedImGuiInputFlagsEx(button, flags, owner_id); 4010 } 4011 4012 bool IsMouseReleasedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 4013 { 4014 return igIsMouseReleasedID(button, owner_id); 4015 } 4016 4017 bool IsMouseDoubleClickedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 4018 { 4019 return igIsMouseDoubleClickedID(button, owner_id); 4020 } 4021 4022 /++ 4023 + Shortcut Testing 4024 + & 4025 + Routing 4026 + Set Shortcut() and SetNextItemShortcut() in imgui.h 4027 + When a policy (except for ImGuiInputFlags_RouteAlways *) is set, Shortcut() will register itself with SetShortcutRouting(), 4028 + allowing the system to decide where to route the input among other routeaware calls. 4029 + (* using ImGuiInputFlags_RouteAlways is roughly equivalent to calling IsKeyChordPressed(key) and bypassing route registration and check) 4030 + When using one of the routing option: 4031 + The default route is ImGuiInputFlags_RouteFocused (accept inputs if window is in focus stack. Deepmost focused window takes inputs. ActiveId takes inputs over deepmost focused window.) 4032 + Routes are requested given a chord (key + modifiers) and a routing policy. 4033 + Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame. 4034 + Each route may be granted to a single owner. When multiple requests are made we have policies to select the winning route (e.g. deep most window). 4035 + Multiple read sites may use the same owner id can all access the granted route. 4036 + When owner_id is 0 we use the current Focus Scope ID as a owner ID in order to identify our location. 4037 + You can chain two unrelated windows in the focus stack using SetWindowParentWindowForFocusRoute() 4038 + e.g. if you have a tool window associated to a document, and you want document shortcuts to run when the tool is focused. 4039 +/ 4040 bool ShortcutID(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4041 { 4042 return igShortcutID(key_chord, flags, owner_id); 4043 } 4044 4045 bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4046 { 4047 return igSetShortcutRouting(key_chord, flags, owner_id); 4048 } 4049 4050 bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id) @trusted 4051 { 4052 return igTestShortcutRouting(key_chord, owner_id); 4053 } 4054 4055 ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord) @trusted 4056 { 4057 return igGetShortcutRoutingData(key_chord); 4058 } 4059 4060 /++ 4061 + [EXPERIMENTAL] Focus Scope 4062 + This is generally used to identify a unique input location (for e.g. a selection set) 4063 + There is one per window (automatically set in Begin), but: 4064 + Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set. 4065 + So in order to identify a set multiple lists in same window may each need a focus scope. 4066 + If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope() 4067 + Shortcut routing also use focus scope as a default location identifier if an owner is not provided. 4068 + We don't use the ID Stack for this as it is common to want them separate. 4069 +/ 4070 void PushFocusScope(ImGuiID id) @trusted 4071 { 4072 igPushFocusScope(id); 4073 } 4074 4075 void PopFocusScope() @trusted 4076 { 4077 igPopFocusScope(); 4078 } 4079 4080 ImGuiID GetCurrentFocusScope() @trusted 4081 { 4082 return igGetCurrentFocusScope(); 4083 } 4084 4085 /++ 4086 + Drag and Drop 4087 +/ 4088 bool IsDragDropActive() @trusted 4089 { 4090 return igIsDragDropActive(); 4091 } 4092 4093 bool BeginDragDropTargetCustom(ImRect bb, ImGuiID id) @trusted 4094 { 4095 return igBeginDragDropTargetCustom(bb, id); 4096 } 4097 4098 bool BeginDragDropTargetViewport(scope ImGuiViewport* viewport) @trusted 4099 { 4100 return igBeginDragDropTargetViewport(viewport); 4101 } 4102 4103 bool BeginDragDropTargetViewportEx(scope ImGuiViewport* viewport, scope ImRect* p_bb) @trusted 4104 { 4105 return igBeginDragDropTargetViewportEx(viewport, p_bb); 4106 } 4107 4108 void ClearDragDrop() @trusted 4109 { 4110 igClearDragDrop(); 4111 } 4112 4113 bool IsDragDropPayloadBeingAccepted() @trusted 4114 { 4115 return igIsDragDropPayloadBeingAccepted(); 4116 } 4117 4118 void RenderDragDropTargetRectForItem(ImRect bb) @trusted 4119 { 4120 igRenderDragDropTargetRectForItem(bb); 4121 } 4122 4123 void RenderDragDropTargetRectEx(scope ImDrawList* draw_list, ImRect bb) @trusted 4124 { 4125 igRenderDragDropTargetRectEx(draw_list, bb); 4126 } 4127 4128 /++ 4129 + TypingSelect API 4130 + (provide Windows Explorer style "select items by typing partial name" + "cycle through items by typing same letter" feature) 4131 + (this is currently not documented nor used by main library, but should work. See "widgets_typingselect" in imgui_test_suite for usage code. Please let us know if you use this!) 4132 +/ 4133 ImGuiTypingSelectRequest* GetTypingSelectRequest() @trusted 4134 { 4135 return igGetTypingSelectRequest(); 4136 } 4137 4138 ImGuiTypingSelectRequest* GetTypingSelectRequestEx(ImGuiTypingSelectFlags flags) @trusted 4139 { 4140 return igGetTypingSelectRequestEx(flags); 4141 } 4142 4143 int TypingSelectFindMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted 4144 { 4145 return igTypingSelectFindMatch(req, items_count, get_item_name_func, user_data, nav_item_idx); 4146 } 4147 4148 int TypingSelectFindNextSingleCharMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted 4149 { 4150 return igTypingSelectFindNextSingleCharMatch(req, items_count, get_item_name_func, user_data, nav_item_idx); 4151 } 4152 4153 int TypingSelectFindBestLeadingMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data) @trusted 4154 { 4155 return igTypingSelectFindBestLeadingMatch(req, items_count, get_item_name_func, user_data); 4156 } 4157 4158 /++ 4159 + BoxSelect API 4160 +/ 4161 bool BeginBoxSelect(ImRect scope_rect, scope ImGuiWindow* window, ImGuiID box_select_id, ImGuiMultiSelectFlags ms_flags) @trusted 4162 { 4163 return igBeginBoxSelect(scope_rect, window, box_select_id, ms_flags); 4164 } 4165 4166 void EndBoxSelect(ImRect scope_rect, ImGuiMultiSelectFlags ms_flags) @trusted 4167 { 4168 igEndBoxSelect(scope_rect, ms_flags); 4169 } 4170 4171 /++ 4172 + MultiSelect API 4173 +/ 4174 void MultiSelectItemHeader(ImGuiID id, scope bool* p_selected, scope ImGuiButtonFlags* p_button_flags) @trusted 4175 { 4176 igMultiSelectItemHeader(id, p_selected, p_button_flags); 4177 } 4178 4179 void MultiSelectItemFooter(ImGuiID id, scope bool* p_selected, scope bool* p_pressed) @trusted 4180 { 4181 igMultiSelectItemFooter(id, p_selected, p_pressed); 4182 } 4183 4184 void MultiSelectAddSetAll(scope ImGuiMultiSelectTempData* ms, bool selected) @trusted 4185 { 4186 igMultiSelectAddSetAll(ms, selected); 4187 } 4188 4189 void MultiSelectAddSetRange(scope ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item) @trusted 4190 { 4191 igMultiSelectAddSetRange(ms, selected, range_dir, first_item, last_item); 4192 } 4193 4194 ImGuiBoxSelectState* GetBoxSelectState(ImGuiID id) @trusted 4195 { 4196 return igGetBoxSelectState(id); 4197 } 4198 4199 ImGuiMultiSelectState* GetMultiSelectState(ImGuiID id) @trusted 4200 { 4201 return igGetMultiSelectState(id); 4202 } 4203 4204 /++ 4205 + Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API) 4206 +/ 4207 void SetWindowClipRectBeforeSetChannel(scope ImGuiWindow* window, ImRect clip_rect) @trusted 4208 { 4209 igSetWindowClipRectBeforeSetChannel(window, clip_rect); 4210 } 4211 4212 void BeginColumns(const(char)* str_id, int count, ImGuiOldColumnFlags flags) @trusted 4213 { 4214 igBeginColumns(str_id, count, flags); 4215 } 4216 4217 void EndColumns() @trusted 4218 { 4219 igEndColumns(); 4220 } 4221 4222 void PushColumnClipRect(int column_index) @trusted 4223 { 4224 igPushColumnClipRect(column_index); 4225 } 4226 4227 void PushColumnsBackground() @trusted 4228 { 4229 igPushColumnsBackground(); 4230 } 4231 4232 void PopColumnsBackground() @trusted 4233 { 4234 igPopColumnsBackground(); 4235 } 4236 4237 ImGuiID GetColumnsID(const(char)* str_id, int count) @trusted 4238 { 4239 return igGetColumnsID(str_id, count); 4240 } 4241 4242 ImGuiOldColumns* FindOrCreateColumns(scope ImGuiWindow* window, ImGuiID id) @trusted 4243 { 4244 return igFindOrCreateColumns(window, id); 4245 } 4246 4247 float GetColumnOffsetFromNorm(ImGuiOldColumns* columns, float offset_norm) @trusted 4248 { 4249 return igGetColumnOffsetFromNorm(columns, offset_norm); 4250 } 4251 4252 float GetColumnNormFromOffset(ImGuiOldColumns* columns, float offset) @trusted 4253 { 4254 return igGetColumnNormFromOffset(columns, offset); 4255 } 4256 4257 /++ 4258 + Tables: Candidates for public API 4259 +/ 4260 void TableOpenContextMenu() @trusted 4261 { 4262 igTableOpenContextMenu(); 4263 } 4264 4265 void TableOpenContextMenuEx(int column_n) @trusted 4266 { 4267 igTableOpenContextMenuEx(column_n); 4268 } 4269 4270 void TableSetColumnWidth(int column_n, float width) @trusted 4271 { 4272 igTableSetColumnWidth(column_n, width); 4273 } 4274 4275 void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs) @trusted 4276 { 4277 igTableSetColumnSortDirection(column_n, sort_direction, append_to_sort_specs); 4278 } 4279 4280 int TableGetHoveredRow() @trusted 4281 { 4282 return igTableGetHoveredRow(); 4283 } 4284 4285 float TableGetHeaderRowHeight() @trusted 4286 { 4287 return igTableGetHeaderRowHeight(); 4288 } 4289 4290 float TableGetHeaderAngledMaxLabelWidth() @trusted 4291 { 4292 return igTableGetHeaderAngledMaxLabelWidth(); 4293 } 4294 4295 void TablePushBackgroundChannel() @trusted 4296 { 4297 igTablePushBackgroundChannel(); 4298 } 4299 4300 void TablePopBackgroundChannel() @trusted 4301 { 4302 igTablePopBackgroundChannel(); 4303 } 4304 4305 void TablePushColumnChannel(int column_n) @trusted 4306 { 4307 igTablePushColumnChannel(column_n); 4308 } 4309 4310 void TablePopColumnChannel() @trusted 4311 { 4312 igTablePopColumnChannel(); 4313 } 4314 4315 void TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label_width, ImGuiTableHeaderData* data, int data_count) @trusted 4316 { 4317 igTableAngledHeadersRowEx(row_id, angle, max_label_width, data, data_count); 4318 } 4319 4320 /++ 4321 + Tables: Internals 4322 +/ 4323 ImGuiTable* GetCurrentTable() @trusted 4324 { 4325 return igGetCurrentTable(); 4326 } 4327 4328 ImGuiTable* TableFindByID(ImGuiID id) @trusted 4329 { 4330 return igTableFindByID(id); 4331 } 4332 4333 bool BeginTableWithID(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags) @trusted 4334 { 4335 return igBeginTableWithID(name, id, columns_count, flags); 4336 } 4337 4338 bool BeginTableWithIDEx(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, ImVec2 outer_size, float inner_width) @trusted 4339 { 4340 return igBeginTableWithIDEx(name, id, columns_count, flags, outer_size, inner_width); 4341 } 4342 4343 void TableBeginInitMemory(scope ImGuiTable* table, int columns_count) @trusted 4344 { 4345 igTableBeginInitMemory(table, columns_count); 4346 } 4347 4348 void TableBeginApplyRequests(scope ImGuiTable* table) @trusted 4349 { 4350 igTableBeginApplyRequests(table); 4351 } 4352 4353 void TableSetupDrawChannels(scope ImGuiTable* table) @trusted 4354 { 4355 igTableSetupDrawChannels(table); 4356 } 4357 4358 void TableUpdateLayout(scope ImGuiTable* table) @trusted 4359 { 4360 igTableUpdateLayout(table); 4361 } 4362 4363 void TableUpdateBorders(scope ImGuiTable* table) @trusted 4364 { 4365 igTableUpdateBorders(table); 4366 } 4367 4368 void TableUpdateColumnsWeightFromWidth(scope ImGuiTable* table) @trusted 4369 { 4370 igTableUpdateColumnsWeightFromWidth(table); 4371 } 4372 4373 void TableDrawBorders(scope ImGuiTable* table) @trusted 4374 { 4375 igTableDrawBorders(table); 4376 } 4377 4378 void TableDrawDefaultContextMenu(scope ImGuiTable* table, ImGuiTableFlags flags_for_section_to_display) @trusted 4379 { 4380 igTableDrawDefaultContextMenu(table, flags_for_section_to_display); 4381 } 4382 4383 bool TableBeginContextMenuPopup(scope ImGuiTable* table) @trusted 4384 { 4385 return igTableBeginContextMenuPopup(table); 4386 } 4387 4388 void TableMergeDrawChannels(scope ImGuiTable* table) @trusted 4389 { 4390 igTableMergeDrawChannels(table); 4391 } 4392 4393 ImGuiTableInstanceData* TableGetInstanceData(scope ImGuiTable* table, int instance_no) @trusted 4394 { 4395 return igTableGetInstanceData(table, instance_no); 4396 } 4397 4398 ImGuiID TableGetInstanceID(scope ImGuiTable* table, int instance_no) @trusted 4399 { 4400 return igTableGetInstanceID(table, instance_no); 4401 } 4402 4403 void TableFixDisplayOrder(scope ImGuiTable* table) @trusted 4404 { 4405 igTableFixDisplayOrder(table); 4406 } 4407 4408 void TableSortSpecsSanitize(scope ImGuiTable* table) @trusted 4409 { 4410 igTableSortSpecsSanitize(table); 4411 } 4412 4413 void TableSortSpecsBuild(scope ImGuiTable* table) @trusted 4414 { 4415 igTableSortSpecsBuild(table); 4416 } 4417 4418 ImGuiSortDirection TableGetColumnNextSortDirection(scope ImGuiTableColumn* column) @trusted 4419 { 4420 return igTableGetColumnNextSortDirection(column); 4421 } 4422 4423 void TableFixColumnSortDirection(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted 4424 { 4425 igTableFixColumnSortDirection(table, column); 4426 } 4427 4428 float TableGetColumnWidthAuto(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted 4429 { 4430 return igTableGetColumnWidthAuto(table, column); 4431 } 4432 4433 void TableBeginRow(scope ImGuiTable* table) @trusted 4434 { 4435 igTableBeginRow(table); 4436 } 4437 4438 void TableEndRow(scope ImGuiTable* table) @trusted 4439 { 4440 igTableEndRow(table); 4441 } 4442 4443 void TableBeginCell(scope ImGuiTable* table, int column_n) @trusted 4444 { 4445 igTableBeginCell(table, column_n); 4446 } 4447 4448 void TableEndCell(scope ImGuiTable* table) @trusted 4449 { 4450 igTableEndCell(table); 4451 } 4452 4453 ImRect TableGetCellBgRect(ImGuiTable* table, int column_n) @trusted 4454 { 4455 return igTableGetCellBgRect(table, column_n); 4456 } 4457 4458 const(char)* TableGetColumnNameImGuiTablePtr(ImGuiTable* table, int column_n) @trusted 4459 { 4460 return igTableGetColumnNameImGuiTablePtr(table, column_n); 4461 } 4462 4463 ImGuiID TableGetColumnResizeID(scope ImGuiTable* table, int column_n) @trusted 4464 { 4465 return igTableGetColumnResizeID(table, column_n); 4466 } 4467 4468 ImGuiID TableGetColumnResizeIDEx(scope ImGuiTable* table, int column_n, int instance_no) @trusted 4469 { 4470 return igTableGetColumnResizeIDEx(table, column_n, instance_no); 4471 } 4472 4473 float TableCalcMaxColumnWidth(ImGuiTable* table, int column_n) @trusted 4474 { 4475 return igTableCalcMaxColumnWidth(table, column_n); 4476 } 4477 4478 void TableSetColumnWidthAutoSingle(scope ImGuiTable* table, int column_n) @trusted 4479 { 4480 igTableSetColumnWidthAutoSingle(table, column_n); 4481 } 4482 4483 void TableSetColumnWidthAutoAll(scope ImGuiTable* table) @trusted 4484 { 4485 igTableSetColumnWidthAutoAll(table); 4486 } 4487 4488 void TableSetColumnDisplayOrder(scope ImGuiTable* table, int column_n, int dst_order) @trusted 4489 { 4490 igTableSetColumnDisplayOrder(table, column_n, dst_order); 4491 } 4492 4493 void TableRemove(scope ImGuiTable* table) @trusted 4494 { 4495 igTableRemove(table); 4496 } 4497 4498 void TableGcCompactTransientBuffers(scope ImGuiTable* table) @trusted 4499 { 4500 igTableGcCompactTransientBuffers(table); 4501 } 4502 4503 void TableGcCompactTransientBuffersImGuiTableTempDataPtr(scope ImGuiTableTempData* table) @trusted 4504 { 4505 igTableGcCompactTransientBuffersImGuiTableTempDataPtr(table); 4506 } 4507 4508 void TableGcCompactSettings() @trusted 4509 { 4510 igTableGcCompactSettings(); 4511 } 4512 4513 /++ 4514 + Tables: Settings 4515 +/ 4516 void TableLoadSettings(scope ImGuiTable* table) @trusted 4517 { 4518 igTableLoadSettings(table); 4519 } 4520 4521 void TableSaveSettings(scope ImGuiTable* table) @trusted 4522 { 4523 igTableSaveSettings(table); 4524 } 4525 4526 void TableResetSettings(scope ImGuiTable* table) @trusted 4527 { 4528 igTableResetSettings(table); 4529 } 4530 4531 ImGuiTableSettings* TableGetBoundSettings(scope ImGuiTable* table) @trusted 4532 { 4533 return igTableGetBoundSettings(table); 4534 } 4535 4536 void TableSettingsAddSettingsHandler() @trusted 4537 { 4538 igTableSettingsAddSettingsHandler(); 4539 } 4540 4541 ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count) @trusted 4542 { 4543 return igTableSettingsCreate(id, columns_count); 4544 } 4545 4546 ImGuiTableSettings* TableSettingsFindByID(ImGuiID id) @trusted 4547 { 4548 return igTableSettingsFindByID(id); 4549 } 4550 4551 /++ 4552 + Tab Bars 4553 +/ 4554 ImGuiTabBar* GetCurrentTabBar() @trusted 4555 { 4556 return igGetCurrentTabBar(); 4557 } 4558 4559 ImGuiTabBar* TabBarFindByID(ImGuiID id) @trusted 4560 { 4561 return igTabBarFindByID(id); 4562 } 4563 4564 void TabBarRemove(scope ImGuiTabBar* tab_bar) @trusted 4565 { 4566 igTabBarRemove(tab_bar); 4567 } 4568 4569 bool BeginTabBarEx(scope ImGuiTabBar* tab_bar, ImRect bb, ImGuiTabBarFlags flags) @trusted 4570 { 4571 return igBeginTabBarEx(tab_bar, bb, flags); 4572 } 4573 4574 ImGuiTabItem* TabBarFindTabByID(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted 4575 { 4576 return igTabBarFindTabByID(tab_bar, tab_id); 4577 } 4578 4579 ImGuiTabItem* TabBarFindTabByOrder(scope ImGuiTabBar* tab_bar, int order) @trusted 4580 { 4581 return igTabBarFindTabByOrder(tab_bar, order); 4582 } 4583 4584 ImGuiTabItem* TabBarGetCurrentTab(scope ImGuiTabBar* tab_bar) @trusted 4585 { 4586 return igTabBarGetCurrentTab(tab_bar); 4587 } 4588 4589 int TabBarGetTabOrder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4590 { 4591 return igTabBarGetTabOrder(tab_bar, tab); 4592 } 4593 4594 const(char)* TabBarGetTabName(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4595 { 4596 return igTabBarGetTabName(tab_bar, tab); 4597 } 4598 4599 void TabBarRemoveTab(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted 4600 { 4601 igTabBarRemoveTab(tab_bar, tab_id); 4602 } 4603 4604 void TabBarCloseTab(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4605 { 4606 igTabBarCloseTab(tab_bar, tab); 4607 } 4608 4609 void TabBarQueueFocus(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4610 { 4611 igTabBarQueueFocus(tab_bar, tab); 4612 } 4613 4614 void TabBarQueueFocusStr(scope ImGuiTabBar* tab_bar, const(char)* tab_name) @trusted 4615 { 4616 igTabBarQueueFocusStr(tab_bar, tab_name); 4617 } 4618 4619 void TabBarQueueReorder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, int offset) @trusted 4620 { 4621 igTabBarQueueReorder(tab_bar, tab, offset); 4622 } 4623 4624 void TabBarQueueReorderFromMousePos(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, ImVec2 mouse_pos) @trusted 4625 { 4626 igTabBarQueueReorderFromMousePos(tab_bar, tab, mouse_pos); 4627 } 4628 4629 bool TabBarProcessReorder(scope ImGuiTabBar* tab_bar) @trusted 4630 { 4631 return igTabBarProcessReorder(tab_bar); 4632 } 4633 4634 bool TabItemEx(scope ImGuiTabBar* tab_bar, const(char)* label, scope bool* p_open, ImGuiTabItemFlags flags, scope ImGuiWindow* docked_window) @trusted 4635 { 4636 return igTabItemEx(tab_bar, label, p_open, flags, docked_window); 4637 } 4638 4639 void TabItemSpacing(const(char)* str_id, ImGuiTabItemFlags flags, float width) @trusted 4640 { 4641 igTabItemSpacing(str_id, flags, width); 4642 } 4643 4644 ImVec2 TabItemCalcSizeStr(const(char)* label, bool has_close_button_or_unsaved_marker) @trusted 4645 { 4646 return igTabItemCalcSizeStr(label, has_close_button_or_unsaved_marker); 4647 } 4648 4649 ImVec2 TabItemCalcSize(scope ImGuiWindow* window) @trusted 4650 { 4651 return igTabItemCalcSize(window); 4652 } 4653 4654 void TabItemBackground(scope ImDrawList* draw_list, ImRect bb, ImGuiTabItemFlags flags, ImU32 col) @trusted 4655 { 4656 igTabItemBackground(draw_list, bb, flags, col); 4657 } 4658 4659 void TabItemLabelAndCloseButton(scope ImDrawList* draw_list, ImRect bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const(char)* label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible, scope bool* out_just_closed, scope bool* out_text_clipped) @trusted 4660 { 4661 igTabItemLabelAndCloseButton(draw_list, bb, flags, frame_padding, label, tab_id, close_button_id, is_contents_visible, out_just_closed, out_text_clipped); 4662 } 4663 4664 /++ 4665 + Render helpers 4666 + AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT. 4667 + NB: All position are in absolute pixels coordinates (we are never using window coordinates internally) 4668 +/ 4669 void RenderText(ImVec2 pos, const(char)* text) @trusted 4670 { 4671 igRenderText(pos, text); 4672 } 4673 4674 void RenderTextEx(ImVec2 pos, const(char)* text, const(char)* text_end, bool hide_text_after_hash) @trusted 4675 { 4676 igRenderTextEx(pos, text, text_end, hide_text_after_hash); 4677 } 4678 4679 void RenderTextWrapped(ImVec2 pos, const(char)* text, const(char)* text_end, float wrap_width) @trusted 4680 { 4681 igRenderTextWrapped(pos, text, text_end, wrap_width); 4682 } 4683 4684 void RenderTextClipped(ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4685 { 4686 igRenderTextClipped(pos_min, pos_max, text, text_end, text_size_if_known); 4687 } 4688 4689 void RenderTextClippedEx(ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known, ImVec2 align_, ImRect* clip_rect) @trusted 4690 { 4691 igRenderTextClippedEx(pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect); 4692 } 4693 4694 void RenderTextClippedWithDrawList(ImDrawList* draw_list, ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4695 { 4696 igRenderTextClippedWithDrawList(draw_list, pos_min, pos_max, text, text_end, text_size_if_known); 4697 } 4698 4699 void RenderTextClippedWithDrawListEx(ImDrawList* draw_list, ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known, ImVec2 align_, ImRect* clip_rect) @trusted 4700 { 4701 igRenderTextClippedWithDrawListEx(draw_list, pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect); 4702 } 4703 4704 void RenderTextEllipsis(ImDrawList* draw_list, ImVec2 pos_min, ImVec2 pos_max, float ellipsis_max_x, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4705 { 4706 igRenderTextEllipsis(draw_list, pos_min, pos_max, ellipsis_max_x, text, text_end, text_size_if_known); 4707 } 4708 4709 void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col) @trusted 4710 { 4711 igRenderFrame(p_min, p_max, fill_col); 4712 } 4713 4714 void RenderFrameEx(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool borders, float rounding) @trusted 4715 { 4716 igRenderFrameEx(p_min, p_max, fill_col, borders, rounding); 4717 } 4718 4719 void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max) @trusted 4720 { 4721 igRenderFrameBorder(p_min, p_max); 4722 } 4723 4724 void RenderFrameBorderEx(ImVec2 p_min, ImVec2 p_max, float rounding) @trusted 4725 { 4726 igRenderFrameBorderEx(p_min, p_max, rounding); 4727 } 4728 4729 void RenderColorComponentMarker(ImRect bb, ImU32 col, float rounding) @trusted 4730 { 4731 igRenderColorComponentMarker(bb, col, rounding); 4732 } 4733 4734 void RenderColorRectWithAlphaCheckerboard(scope ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off) @trusted 4735 { 4736 igRenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, fill_col, grid_step, grid_off); 4737 } 4738 4739 void RenderColorRectWithAlphaCheckerboardEx(scope ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding, ImDrawFlags flags) @trusted 4740 { 4741 igRenderColorRectWithAlphaCheckerboardEx(draw_list, p_min, p_max, fill_col, grid_step, grid_off, rounding, flags); 4742 } 4743 4744 void RenderNavCursor(ImRect bb, ImGuiID id) @trusted 4745 { 4746 igRenderNavCursor(bb, id); 4747 } 4748 4749 void RenderNavCursorEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted 4750 { 4751 igRenderNavCursorEx(bb, id, flags); 4752 } 4753 4754 void RenderNavHighlight(ImRect bb, ImGuiID id) @trusted 4755 { 4756 igRenderNavHighlight(bb, id); 4757 } 4758 4759 void RenderNavHighlightEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted 4760 { 4761 igRenderNavHighlightEx(bb, id, flags); 4762 } 4763 4764 const(char)* FindRenderedTextEnd(const(char)* text) @trusted 4765 { 4766 return igFindRenderedTextEnd(text); 4767 } 4768 4769 const(char)* FindRenderedTextEndEx(const(char)* text, const(char)* text_end) @trusted 4770 { 4771 return igFindRenderedTextEndEx(text, text_end); 4772 } 4773 4774 void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) @trusted 4775 { 4776 igRenderMouseCursor(pos, scale, mouse_cursor, col_fill, col_border, col_shadow); 4777 } 4778 4779 /++ 4780 + Render helpers (those functions don't access any ImGui state!) 4781 +/ 4782 void RenderArrow(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir) @trusted 4783 { 4784 igRenderArrow(draw_list, pos, col, dir); 4785 } 4786 4787 void RenderArrowEx(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale) @trusted 4788 { 4789 igRenderArrowEx(draw_list, pos, col, dir, scale); 4790 } 4791 4792 void RenderBullet(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col) @trusted 4793 { 4794 igRenderBullet(draw_list, pos, col); 4795 } 4796 4797 void RenderCheckMark(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz) @trusted 4798 { 4799 igRenderCheckMark(draw_list, pos, col, sz); 4800 } 4801 4802 void RenderArrowPointingAt(scope ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) @trusted 4803 { 4804 igRenderArrowPointingAt(draw_list, pos, half_sz, direction, col); 4805 } 4806 4807 void RenderRectFilledInRangeH(scope ImDrawList* draw_list, ImRect rect, ImU32 col, float fill_x0, float fill_x1, float rounding) @trusted 4808 { 4809 igRenderRectFilledInRangeH(draw_list, rect, col, fill_x0, fill_x1, rounding); 4810 } 4811 4812 void RenderRectFilledWithHole(scope ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding) @trusted 4813 { 4814 igRenderRectFilledWithHole(draw_list, outer, inner, col, rounding); 4815 } 4816 4817 ImDrawFlags CalcRoundingFlagsForRectInRect(ImRect r_in, ImRect r_outer, float threshold) @trusted 4818 { 4819 return igCalcRoundingFlagsForRectInRect(r_in, r_outer, threshold); 4820 } 4821 4822 /++ 4823 + Widgets: Text 4824 +/ 4825 void TextEx(const(char)* text) @trusted 4826 { 4827 igTextEx(text); 4828 } 4829 4830 void TextExEx(const(char)* text, const(char)* text_end, ImGuiTextFlags flags) @trusted 4831 { 4832 igTextExEx(text, text_end, flags); 4833 } 4834 4835 alias TextAligned = igTextAligned; 4836 4837 alias TextAlignedV = igTextAlignedV; 4838 4839 /++ 4840 + Widgets 4841 +/ 4842 bool ButtonWithFlags(const(char)* label) @trusted 4843 { 4844 return igButtonWithFlags(label); 4845 } 4846 4847 bool ButtonWithFlagsEx(const(char)* label, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted 4848 { 4849 return igButtonWithFlagsEx(label, size_arg, flags); 4850 } 4851 4852 bool ArrowButtonEx(const(char)* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted 4853 { 4854 return igArrowButtonEx(str_id, dir, size_arg, flags); 4855 } 4856 4857 bool ImageButtonWithFlags(ImGuiID id, ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 bg_col, ImVec4 tint_col, ImGuiButtonFlags flags) @trusted 4858 { 4859 return igImageButtonWithFlags(id, tex_ref, image_size, uv0, uv1, bg_col, tint_col, flags); 4860 } 4861 4862 void SeparatorEx(ImGuiSeparatorFlags flags) @trusted 4863 { 4864 igSeparatorEx(flags); 4865 } 4866 4867 void SeparatorExEx(ImGuiSeparatorFlags flags, float thickness) @trusted 4868 { 4869 igSeparatorExEx(flags, thickness); 4870 } 4871 4872 void SeparatorTextEx(ImGuiID id, const(char)* label, const(char)* label_end, float extra_width) @trusted 4873 { 4874 igSeparatorTextEx(id, label, label_end, extra_width); 4875 } 4876 4877 bool CheckboxFlagsImS64Ptr(const(char)* label, scope ImS64* flags, ImS64 flags_value) @trusted 4878 { 4879 return igCheckboxFlagsImS64Ptr(label, flags, flags_value); 4880 } 4881 4882 bool CheckboxFlagsImU64Ptr(const(char)* label, scope ImU64* flags, ImU64 flags_value) @trusted 4883 { 4884 return igCheckboxFlagsImU64Ptr(label, flags, flags_value); 4885 } 4886 4887 /++ 4888 + Widgets: Window Decorations 4889 +/ 4890 bool CloseButton(ImGuiID id, ImVec2 pos) @trusted 4891 { 4892 return igCloseButton(id, pos); 4893 } 4894 4895 bool CollapseButton(ImGuiID id, ImVec2 pos) @trusted 4896 { 4897 return igCollapseButton(id, pos); 4898 } 4899 4900 void Scrollbar(ImGuiAxis axis) @trusted 4901 { 4902 igScrollbar(axis); 4903 } 4904 4905 bool ScrollbarEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v) @trusted 4906 { 4907 return igScrollbarEx(bb, id, axis, p_scroll_v, avail_v, contents_v); 4908 } 4909 4910 bool ScrollbarExEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags draw_rounding_flags) @trusted 4911 { 4912 return igScrollbarExEx(bb, id, axis, p_scroll_v, avail_v, contents_v, draw_rounding_flags); 4913 } 4914 4915 ImRect GetWindowScrollbarRect(scope ImGuiWindow* window, ImGuiAxis axis) @trusted 4916 { 4917 return igGetWindowScrollbarRect(window, axis); 4918 } 4919 4920 ImGuiID GetWindowScrollbarID(scope ImGuiWindow* window, ImGuiAxis axis) @trusted 4921 { 4922 return igGetWindowScrollbarID(window, axis); 4923 } 4924 4925 ImGuiID GetWindowResizeCornerID(scope ImGuiWindow* window, int n) @trusted 4926 { 4927 return igGetWindowResizeCornerID(window, n); 4928 } 4929 4930 ImGuiID GetWindowResizeBorderID(scope ImGuiWindow* window, ImGuiDir dir) @trusted 4931 { 4932 return igGetWindowResizeBorderID(window, dir); 4933 } 4934 4935 /++ 4936 + Widgets lowlevel behaviors 4937 +/ 4938 bool ButtonBehavior(ImRect bb, ImGuiID id, scope bool* out_hovered, scope bool* out_held, ImGuiButtonFlags flags) @trusted 4939 { 4940 return igButtonBehavior(bb, id, out_hovered, out_held, flags); 4941 } 4942 4943 bool DragBehavior(ImGuiID id, ImGuiDataType data_type, scope void* p_v, float v_speed, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags) @trusted 4944 { 4945 return igDragBehavior(id, data_type, p_v, v_speed, p_min, p_max, format, flags); 4946 } 4947 4948 bool SliderBehavior(ImRect bb, ImGuiID id, ImGuiDataType data_type, scope void* p_v, scope const(void)* p_min, scope const(void)* p_max, const(char)* format, ImGuiSliderFlags flags, scope ImRect* out_grab_bb) @trusted 4949 { 4950 return igSliderBehavior(bb, id, data_type, p_v, p_min, p_max, format, flags, out_grab_bb); 4951 } 4952 4953 bool SplitterBehavior(ImRect bb, ImGuiID id, ImGuiAxis axis, scope float* size1, scope float* size2, float min_size1, float min_size2) @trusted 4954 { 4955 return igSplitterBehavior(bb, id, axis, size1, size2, min_size1, min_size2); 4956 } 4957 4958 bool SplitterBehaviorEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope float* size1, scope float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay, ImU32 bg_col) @trusted 4959 { 4960 return igSplitterBehaviorEx(bb, id, axis, size1, size2, min_size1, min_size2, hover_extend, hover_visibility_delay, bg_col); 4961 } 4962 4963 /++ 4964 + Widgets: Tree Nodes 4965 +/ 4966 bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label) @trusted 4967 { 4968 return igTreeNodeBehavior(id, flags, label); 4969 } 4970 4971 bool TreeNodeBehaviorEx(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label, const(char)* label_end) @trusted 4972 { 4973 return igTreeNodeBehaviorEx(id, flags, label, label_end); 4974 } 4975 4976 void TreeNodeDrawLineToChildNode(ImVec2 target_pos) @trusted 4977 { 4978 igTreeNodeDrawLineToChildNode(target_pos); 4979 } 4980 4981 void TreeNodeDrawLineToTreePop(scope ImGuiTreeNodeStackData* data) @trusted 4982 { 4983 igTreeNodeDrawLineToTreePop(data); 4984 } 4985 4986 void TreePushOverrideID(ImGuiID id) @trusted 4987 { 4988 igTreePushOverrideID(id); 4989 } 4990 4991 bool TreeNodeGetOpen(ImGuiID storage_id) @trusted 4992 { 4993 return igTreeNodeGetOpen(storage_id); 4994 } 4995 4996 void TreeNodeSetOpen(ImGuiID storage_id, bool open) @trusted 4997 { 4998 igTreeNodeSetOpen(storage_id, open); 4999 } 5000 5001 bool TreeNodeUpdateNextOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags) @trusted 5002 { 5003 return igTreeNodeUpdateNextOpen(storage_id, flags); 5004 } 5005 5006 /++ 5007 + Data type helpers 5008 +/ 5009 const(ImGuiDataTypeInfo)* DataTypeGetInfo(ImGuiDataType data_type) @trusted 5010 { 5011 return igDataTypeGetInfo(data_type); 5012 } 5013 5014 int DataTypeFormatString(scope char* buf, int buf_size, ImGuiDataType data_type, scope const(void)* p_data, const(char)* format) @trusted 5015 { 5016 return igDataTypeFormatString(buf, buf_size, data_type, p_data, format); 5017 } 5018 5019 void DataTypeApplyOp(ImGuiDataType data_type, int op, scope void* output, scope const(void)* arg_1, scope const(void)* arg_2) @trusted 5020 { 5021 igDataTypeApplyOp(data_type, op, output, arg_1, arg_2); 5022 } 5023 5024 bool DataTypeApplyFromText(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted 5025 { 5026 return igDataTypeApplyFromText(buf, data_type, p_data, format); 5027 } 5028 5029 bool DataTypeApplyFromTextEx(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format, scope void* p_data_when_empty) @trusted 5030 { 5031 return igDataTypeApplyFromTextEx(buf, data_type, p_data, format, p_data_when_empty); 5032 } 5033 5034 int DataTypeCompare(ImGuiDataType data_type, scope const(void)* arg_1, scope const(void)* arg_2) @trusted 5035 { 5036 return igDataTypeCompare(data_type, arg_1, arg_2); 5037 } 5038 5039 bool DataTypeClamp(ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max) @trusted 5040 { 5041 return igDataTypeClamp(data_type, p_data, p_min, p_max); 5042 } 5043 5044 bool DataTypeIsZero(ImGuiDataType data_type, scope const(void)* p_data) @trusted 5045 { 5046 return igDataTypeIsZero(data_type, p_data); 5047 } 5048 5049 /++ 5050 + InputText 5051 +/ 5052 bool InputTextWithHintAndSize(const(char)* label, const(char)* hint, scope char* buf, int buf_size, ImVec2 size_arg, ImGuiInputTextFlags flags) @trusted 5053 { 5054 return igInputTextWithHintAndSize(label, hint, buf, buf_size, size_arg, flags); 5055 } 5056 5057 bool InputTextWithHintAndSizeEx(const(char)* label, const(char)* hint, scope char* buf, int buf_size, ImVec2 size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, scope void* user_data) @trusted 5058 { 5059 return igInputTextWithHintAndSizeEx(label, hint, buf, buf_size, size_arg, flags, callback, user_data); 5060 } 5061 5062 void InputTextDeactivateHook(ImGuiID id) @trusted 5063 { 5064 igInputTextDeactivateHook(id); 5065 } 5066 5067 bool TempInputText(ImRect bb, ImGuiID id, const(char)* label, scope char* buf, int buf_size, ImGuiInputTextFlags flags) @trusted 5068 { 5069 return igTempInputText(bb, id, label, buf, buf_size, flags); 5070 } 5071 5072 bool TempInputScalar(ImRect bb, ImGuiID id, const(char)* label, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted 5073 { 5074 return igTempInputScalar(bb, id, label, data_type, p_data, format); 5075 } 5076 5077 bool TempInputScalarEx(ImRect bb, ImGuiID id, const(char)* label, ImGuiDataType data_type, scope void* p_data, const(char)* format, scope const(void)* p_clamp_min, scope const(void)* p_clamp_max) @trusted 5078 { 5079 return igTempInputScalarEx(bb, id, label, data_type, p_data, format, p_clamp_min, p_clamp_max); 5080 } 5081 5082 bool TempInputIsActive(ImGuiID id) @trusted 5083 { 5084 return igTempInputIsActive(id); 5085 } 5086 5087 void SetNextItemRefVal(ImGuiDataType data_type, scope void* p_data) @trusted 5088 { 5089 igSetNextItemRefVal(data_type, p_data); 5090 } 5091 5092 bool IsItemActiveAsInputText() @trusted 5093 { 5094 return igIsItemActiveAsInputText(); 5095 } 5096 5097 /++ 5098 + Color 5099 +/ 5100 void ColorTooltip(const(char)* text, scope const(float)* col, ImGuiColorEditFlags flags) @trusted 5101 { 5102 igColorTooltip(text, col, flags); 5103 } 5104 5105 void ColorEditOptionsPopup(scope const(float)* col, ImGuiColorEditFlags flags) @trusted 5106 { 5107 igColorEditOptionsPopup(col, flags); 5108 } 5109 5110 void ColorPickerOptionsPopup(scope const(float)* ref_col, ImGuiColorEditFlags flags) @trusted 5111 { 5112 igColorPickerOptionsPopup(ref_col, flags); 5113 } 5114 5115 void SetNextItemColorMarker(ImU32 col) @trusted 5116 { 5117 igSetNextItemColorMarker(col); 5118 } 5119 5120 /++ 5121 + Plot 5122 +/ 5123 int PlotEx(ImGuiPlotType plot_type, const(char)* label, ImGuiValues_getterCallback values_getter, scope void* data, int values_count, int values_offset, const(char)* overlay_text, float scale_min, float scale_max, ImVec2 size_arg) @trusted 5124 { 5125 return igPlotEx(plot_type, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, size_arg); 5126 } 5127 5128 /++ 5129 + Shade functions (write over already created vertices) 5130 +/ 5131 void ShadeVertsLinearColorGradientKeepAlpha(scope ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1) @trusted 5132 { 5133 igShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col0, col1); 5134 } 5135 5136 alias ShadeVertsLinearUV = igShadeVertsLinearUV; 5137 5138 void ShadeVertsTransformPos(scope ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 pivot_in, float cos_a, float sin_a, ImVec2 pivot_out) @trusted 5139 { 5140 igShadeVertsTransformPos(draw_list, vert_start_idx, vert_end_idx, pivot_in, cos_a, sin_a, pivot_out); 5141 } 5142 5143 /++ 5144 + Garbage collection 5145 +/ 5146 void GcCompactTransientMiscBuffers() @trusted 5147 { 5148 igGcCompactTransientMiscBuffers(); 5149 } 5150 5151 void GcCompactTransientWindowBuffers(scope ImGuiWindow* window) @trusted 5152 { 5153 igGcCompactTransientWindowBuffers(window); 5154 } 5155 5156 void GcAwakeTransientWindowBuffers(scope ImGuiWindow* window) @trusted 5157 { 5158 igGcAwakeTransientWindowBuffers(window); 5159 } 5160 5161 /++ 5162 + Error handling, State Recovery 5163 +/ 5164 bool ErrorLog(const(char)* msg) @trusted 5165 { 5166 return igErrorLog(msg); 5167 } 5168 5169 void ErrorRecoveryStoreState(scope ImGuiErrorRecoveryState* state_out) @trusted 5170 { 5171 igErrorRecoveryStoreState(state_out); 5172 } 5173 5174 void ErrorRecoveryTryToRecoverState(scope ImGuiErrorRecoveryState* state_in) @trusted 5175 { 5176 igErrorRecoveryTryToRecoverState(state_in); 5177 } 5178 5179 void ErrorRecoveryTryToRecoverWindowState(scope ImGuiErrorRecoveryState* state_in) @trusted 5180 { 5181 igErrorRecoveryTryToRecoverWindowState(state_in); 5182 } 5183 5184 void ErrorCheckUsingSetCursorPosToExtendParentBoundaries() @trusted 5185 { 5186 igErrorCheckUsingSetCursorPosToExtendParentBoundaries(); 5187 } 5188 5189 void ErrorCheckEndFrameFinalizeErrorTooltip() @trusted 5190 { 5191 igErrorCheckEndFrameFinalizeErrorTooltip(); 5192 } 5193 5194 bool BeginErrorTooltip() @trusted 5195 { 5196 return igBeginErrorTooltip(); 5197 } 5198 5199 void EndErrorTooltip() @trusted 5200 { 5201 igEndErrorTooltip(); 5202 } 5203 5204 /++ 5205 + Debug Tools 5206 +/ 5207 void DebugAllocHook(scope ImGuiDebugAllocInfo* info, int frame_count, scope void* ptr, size_t size) @trusted 5208 { 5209 igDebugAllocHook(info, frame_count, ptr, size); 5210 } 5211 5212 void DebugDrawCursorPos() @trusted 5213 { 5214 igDebugDrawCursorPos(); 5215 } 5216 5217 void DebugDrawCursorPosEx(ImU32 col) @trusted 5218 { 5219 igDebugDrawCursorPosEx(col); 5220 } 5221 5222 void DebugDrawLineExtents() @trusted 5223 { 5224 igDebugDrawLineExtents(); 5225 } 5226 5227 void DebugDrawLineExtentsEx(ImU32 col) @trusted 5228 { 5229 igDebugDrawLineExtentsEx(col); 5230 } 5231 5232 void DebugDrawItemRect() @trusted 5233 { 5234 igDebugDrawItemRect(); 5235 } 5236 5237 void DebugDrawItemRectEx(ImU32 col) @trusted 5238 { 5239 igDebugDrawItemRectEx(col); 5240 } 5241 5242 void DebugTextUnformattedWithLocateItem(const(char)* line_begin, const(char)* line_end) @trusted 5243 { 5244 igDebugTextUnformattedWithLocateItem(line_begin, line_end); 5245 } 5246 5247 void DebugLocateItem(ImGuiID target_id) @trusted 5248 { 5249 igDebugLocateItem(target_id); 5250 } 5251 5252 void DebugLocateItemOnHover(ImGuiID target_id) @trusted 5253 { 5254 igDebugLocateItemOnHover(target_id); 5255 } 5256 5257 void DebugLocateItemResolveWithLastItem() @trusted 5258 { 5259 igDebugLocateItemResolveWithLastItem(); 5260 } 5261 5262 void DebugBreakClearData() @trusted 5263 { 5264 igDebugBreakClearData(); 5265 } 5266 5267 bool DebugBreakButton(const(char)* label, const(char)* description_of_location) @trusted 5268 { 5269 return igDebugBreakButton(label, description_of_location); 5270 } 5271 5272 void DebugBreakButtonTooltip(bool keyboard_only, const(char)* description_of_location) @trusted 5273 { 5274 igDebugBreakButtonTooltip(keyboard_only, description_of_location); 5275 } 5276 5277 void ShowFontAtlas(scope ImFontAtlas* atlas) @trusted 5278 { 5279 igShowFontAtlas(atlas); 5280 } 5281 5282 ImU64 DebugTextureIDToU64(ImTextureID tex_id) @trusted 5283 { 5284 return igDebugTextureIDToU64(tex_id); 5285 } 5286 5287 void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, scope const(void)* data_id, scope const(void)* data_id_end) @trusted 5288 { 5289 igDebugHookIdInfo(id, data_type, data_id, data_id_end); 5290 } 5291 5292 void DebugNodeColumns(scope ImGuiOldColumns* columns) @trusted 5293 { 5294 igDebugNodeColumns(columns); 5295 } 5296 5297 void DebugNodeDrawList(scope ImGuiWindow* window, scope ImGuiViewportP* viewport, scope ImDrawList* draw_list, const(char)* label) @trusted 5298 { 5299 igDebugNodeDrawList(window, viewport, draw_list, label); 5300 } 5301 5302 void DebugNodeDrawCmdShowMeshAndBoundingBox(scope ImDrawList* out_draw_list, scope ImDrawList* draw_list, scope ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb) @trusted 5303 { 5304 igDebugNodeDrawCmdShowMeshAndBoundingBox(out_draw_list, draw_list, draw_cmd, show_mesh, show_aabb); 5305 } 5306 5307 void DebugNodeFont(scope ImFont* font) @trusted 5308 { 5309 igDebugNodeFont(font); 5310 } 5311 5312 void DebugNodeFontGlyphesForSrcMask(scope ImFont* font, scope ImFontBaked* baked, int src_mask) @trusted 5313 { 5314 igDebugNodeFontGlyphesForSrcMask(font, baked, src_mask); 5315 } 5316 5317 void DebugNodeFontGlyph(scope ImFont* font, scope ImFontGlyph* glyph) @trusted 5318 { 5319 igDebugNodeFontGlyph(font, glyph); 5320 } 5321 5322 void DebugNodeTexture(scope ImTextureData* tex, int int_id) @trusted 5323 { 5324 igDebugNodeTexture(tex, int_id); 5325 } 5326 5327 void DebugNodeTextureEx(scope ImTextureData* tex, int int_id, scope ImFontAtlasRect* highlight_rect) @trusted 5328 { 5329 igDebugNodeTextureEx(tex, int_id, highlight_rect); 5330 } 5331 5332 void DebugNodeStorage(scope ImGuiStorage* storage, const(char)* label) @trusted 5333 { 5334 igDebugNodeStorage(storage, label); 5335 } 5336 5337 void DebugNodeTabBar(scope ImGuiTabBar* tab_bar, const(char)* label) @trusted 5338 { 5339 igDebugNodeTabBar(tab_bar, label); 5340 } 5341 5342 void DebugNodeTable(scope ImGuiTable* table) @trusted 5343 { 5344 igDebugNodeTable(table); 5345 } 5346 5347 void DebugNodeTableSettings(scope ImGuiTableSettings* settings) @trusted 5348 { 5349 igDebugNodeTableSettings(settings); 5350 } 5351 5352 void DebugNodeTypingSelectState(scope ImGuiTypingSelectState* state) @trusted 5353 { 5354 igDebugNodeTypingSelectState(state); 5355 } 5356 5357 void DebugNodeMultiSelectState(scope ImGuiMultiSelectState* state) @trusted 5358 { 5359 igDebugNodeMultiSelectState(state); 5360 } 5361 5362 void DebugNodeWindow(scope ImGuiWindow* window, const(char)* label) @trusted 5363 { 5364 igDebugNodeWindow(window, label); 5365 } 5366 5367 void DebugNodeWindowSettings(scope ImGuiWindowSettings* settings) @trusted 5368 { 5369 igDebugNodeWindowSettings(settings); 5370 } 5371 5372 void DebugNodeWindowsList(scope ImVector_ImGuiWindowPtr* windows, const(char)* label) @trusted 5373 { 5374 igDebugNodeWindowsList(windows, label); 5375 } 5376 5377 void DebugNodeWindowsListByBeginStackParent(scope ImGuiWindow** windows, int windows_size, scope ImGuiWindow* parent_in_begin_stack) @trusted 5378 { 5379 igDebugNodeWindowsListByBeginStackParent(windows, windows_size, parent_in_begin_stack); 5380 } 5381 5382 void DebugNodeViewport(scope ImGuiViewportP* viewport) @trusted 5383 { 5384 igDebugNodeViewport(viewport); 5385 } 5386 5387 void DebugRenderKeyboardPreview(scope ImDrawList* draw_list) @trusted 5388 { 5389 igDebugRenderKeyboardPreview(draw_list); 5390 } 5391 5392 void DebugRenderViewportThumbnail(scope ImDrawList* draw_list, scope ImGuiViewportP* viewport, ImRect bb) @trusted 5393 { 5394 igDebugRenderViewportThumbnail(draw_list, viewport, bb); 5395 }