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