1 // Generated on 2026-04-19 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(...); 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 + Many related features are still in imgui_internal.h. For instance, most IsKeyXXX()/IsMouseXXX() functions have an owneridaware version. 2582 +/ 2583 void SetItemKeyOwner(ImGuiKey key) @trusted 2584 { 2585 igSetItemKeyOwner(key); 2586 } 2587 2588 /++ 2589 + Inputs Utilities: Mouse 2590 + To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right. 2591 + You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle. 2592 + Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold') 2593 +/ 2594 bool IsMouseDown(ImGuiMouseButton button) @trusted 2595 { 2596 return igIsMouseDown(button); 2597 } 2598 2599 bool IsMouseClicked(ImGuiMouseButton button) @trusted 2600 { 2601 return igIsMouseClicked(button); 2602 } 2603 2604 bool IsMouseClickedEx(ImGuiMouseButton button, bool repeat) @trusted 2605 { 2606 return igIsMouseClickedEx(button, repeat); 2607 } 2608 2609 bool IsMouseReleased(ImGuiMouseButton button) @trusted 2610 { 2611 return igIsMouseReleased(button); 2612 } 2613 2614 bool IsMouseDoubleClicked(ImGuiMouseButton button) @trusted 2615 { 2616 return igIsMouseDoubleClicked(button); 2617 } 2618 2619 bool IsMouseReleasedWithDelay(ImGuiMouseButton button, float delay) @trusted 2620 { 2621 return igIsMouseReleasedWithDelay(button, delay); 2622 } 2623 2624 int GetMouseClickedCount(ImGuiMouseButton button) @trusted 2625 { 2626 return igGetMouseClickedCount(button); 2627 } 2628 2629 bool IsMouseHoveringRect(ImVec2 r_min, ImVec2 r_max) @trusted 2630 { 2631 return igIsMouseHoveringRect(r_min, r_max); 2632 } 2633 2634 bool IsMouseHoveringRectEx(ImVec2 r_min, ImVec2 r_max, bool clip) @trusted 2635 { 2636 return igIsMouseHoveringRectEx(r_min, r_max, clip); 2637 } 2638 2639 bool IsMousePosValid(ImVec2* mouse_pos) @trusted 2640 { 2641 return igIsMousePosValid(mouse_pos); 2642 } 2643 2644 bool IsAnyMouseDown() @trusted 2645 { 2646 return igIsAnyMouseDown(); 2647 } 2648 2649 ImVec2 GetMousePos() @trusted 2650 { 2651 return igGetMousePos(); 2652 } 2653 2654 ImVec2 GetMousePosOnOpeningCurrentPopup() @trusted 2655 { 2656 return igGetMousePosOnOpeningCurrentPopup(); 2657 } 2658 2659 bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold) @trusted 2660 { 2661 return igIsMouseDragging(button, lock_threshold); 2662 } 2663 2664 ImVec2 GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold) @trusted 2665 { 2666 return igGetMouseDragDelta(button, lock_threshold); 2667 } 2668 2669 void ResetMouseDragDelta() @trusted 2670 { 2671 igResetMouseDragDelta(); 2672 } 2673 2674 void ResetMouseDragDeltaEx(ImGuiMouseButton button) @trusted 2675 { 2676 igResetMouseDragDeltaEx(button); 2677 } 2678 2679 ImGuiMouseCursor GetMouseCursor() @trusted 2680 { 2681 return igGetMouseCursor(); 2682 } 2683 2684 void SetMouseCursor(ImGuiMouseCursor cursor_type) @trusted 2685 { 2686 igSetMouseCursor(cursor_type); 2687 } 2688 2689 void SetNextFrameWantCaptureMouse(bool want_capture_mouse) @trusted 2690 { 2691 igSetNextFrameWantCaptureMouse(want_capture_mouse); 2692 } 2693 2694 /++ 2695 + Clipboard Utilities 2696 + Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard. 2697 +/ 2698 const(char)* GetClipboardText() @trusted 2699 { 2700 return igGetClipboardText(); 2701 } 2702 2703 void SetClipboardText(const(char)* text) @trusted 2704 { 2705 igSetClipboardText(text); 2706 } 2707 2708 /++ 2709 + Settings/.Ini Utilities 2710 + The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini"). 2711 + Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually. 2712 + 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). 2713 +/ 2714 void LoadIniSettingsFromDisk(const(char)* ini_filename) @trusted 2715 { 2716 igLoadIniSettingsFromDisk(ini_filename); 2717 } 2718 2719 void LoadIniSettingsFromMemory(const(char)* ini_data, size_t ini_size) @trusted 2720 { 2721 igLoadIniSettingsFromMemory(ini_data, ini_size); 2722 } 2723 2724 void SaveIniSettingsToDisk(const(char)* ini_filename) @trusted 2725 { 2726 igSaveIniSettingsToDisk(ini_filename); 2727 } 2728 2729 const(char)* SaveIniSettingsToMemory(size_t* out_ini_size) @trusted 2730 { 2731 return igSaveIniSettingsToMemory(out_ini_size); 2732 } 2733 2734 /++ 2735 + Debug Utilities 2736 + Your main debugging friend is the ShowMetricsWindow() function. 2737 + Interactive tools are all accessible from the 'Dear ImGui Demo>Tools' menu. 2738 + Read https://github.com/ocornut/imgui/wiki/DebugTools for a description of all available debug tools. 2739 +/ 2740 void DebugTextEncoding(const(char)* text) @trusted 2741 { 2742 igDebugTextEncoding(text); 2743 } 2744 2745 void DebugFlashStyleColor(ImGuiCol idx) @trusted 2746 { 2747 igDebugFlashStyleColor(idx); 2748 } 2749 2750 void DebugStartItemPicker() @trusted 2751 { 2752 igDebugStartItemPicker(); 2753 } 2754 2755 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 2756 { 2757 return igDebugCheckVersionAndDataLayout(version_str, sz_io, sz_style, sz_vec2, sz_vec4, sz_drawvert, sz_drawidx); 2758 } 2759 2760 void DebugLog(const(char)* fmt) @trusted 2761 { 2762 igDebugLog(fmt); 2763 } 2764 2765 alias DebugLogV = igDebugLogV; 2766 2767 /++ 2768 + Memory Allocators 2769 + Those functions are not reliant on the current context. 2770 + DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() 2771 + for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. 2772 +/ 2773 void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, scope void* user_data) @trusted 2774 { 2775 igSetAllocatorFunctions(alloc_func, free_func, user_data); 2776 } 2777 2778 void GetAllocatorFunctions(scope ImGuiMemAllocFunc* p_alloc_func, scope ImGuiMemFreeFunc* p_free_func, scope void** p_user_data) @trusted 2779 { 2780 igGetAllocatorFunctions(p_alloc_func, p_free_func, p_user_data); 2781 } 2782 2783 void* MemAlloc(size_t size) @trusted 2784 { 2785 return igMemAlloc(size); 2786 } 2787 2788 void MemFree(scope void* ptr) @trusted 2789 { 2790 igMemFree(ptr); 2791 } 2792 2793 /++ 2794 + OBSOLETED in 1.92.0 (from June 2025) 2795 +/ 2796 void PushFont(scope ImFont* font) @trusted 2797 { 2798 igPushFont(font); 2799 } 2800 2801 void SetWindowFontScale(float scale) @trusted 2802 { 2803 igSetWindowFontScale(scale); 2804 } 2805 2806 /++ 2807 + OBSOLETED in 1.91.9 (from February 2025) 2808 +/ 2809 void ImageImVec4(ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 tint_col, ImVec4 border_col) @trusted 2810 { 2811 igImageImVec4(tex_ref, image_size, uv0, uv1, tint_col, border_col); 2812 } 2813 2814 /++ 2815 + OBSOLETED in 1.91.0 (from July 2024) 2816 +/ 2817 void PushButtonRepeat(bool repeat) @trusted 2818 { 2819 igPushButtonRepeat(repeat); 2820 } 2821 2822 void PopButtonRepeat() @trusted 2823 { 2824 igPopButtonRepeat(); 2825 } 2826 2827 void PushTabStop(bool tab_stop) @trusted 2828 { 2829 igPushTabStop(tab_stop); 2830 } 2831 2832 void PopTabStop() @trusted 2833 { 2834 igPopTabStop(); 2835 } 2836 2837 /++ 2838 + You do not need those functions! See #7838 on GitHub for more info. 2839 +/ 2840 ImVec2 GetContentRegionMax() @trusted 2841 { 2842 return igGetContentRegionMax(); 2843 } 2844 2845 ImVec2 GetWindowContentRegionMin() @trusted 2846 { 2847 return igGetWindowContentRegionMin(); 2848 } 2849 2850 ImVec2 GetWindowContentRegionMax() @trusted 2851 { 2852 return igGetWindowContentRegionMax(); 2853 } 2854 2855 /++ 2856 + Windows 2857 + We should always have a CurrentWindow in the stack (there is an implicit "Debug" window) 2858 + If this ever crashes because g.CurrentWindow is NULL, it means that either: 2859 + ImGui::NewFrame() has never been called, which is illegal. 2860 + You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal. 2861 +/ 2862 ImGuiIO* GetIOImGuiContextPtr(scope ImGuiContext* ctx) @trusted 2863 { 2864 return igGetIOImGuiContextPtr(ctx); 2865 } 2866 2867 ImGuiPlatformIO* GetPlatformIOImGuiContextPtr(scope ImGuiContext* ctx) @trusted 2868 { 2869 return igGetPlatformIOImGuiContextPtr(ctx); 2870 } 2871 2872 float GetScale() @trusted 2873 { 2874 return igGetScale(); 2875 } 2876 2877 ImGuiWindow* GetCurrentWindowRead() @trusted 2878 { 2879 return igGetCurrentWindowRead(); 2880 } 2881 2882 ImGuiWindow* GetCurrentWindow() @trusted 2883 { 2884 return igGetCurrentWindow(); 2885 } 2886 2887 ImGuiWindow* FindWindowByID(ImGuiID id) @trusted 2888 { 2889 return igFindWindowByID(id); 2890 } 2891 2892 ImGuiWindow* FindWindowByName(const(char)* name) @trusted 2893 { 2894 return igFindWindowByName(name); 2895 } 2896 2897 void UpdateWindowParentAndRootLinks(scope ImGuiWindow* window, ImGuiWindowFlags flags, scope ImGuiWindow* parent_window) @trusted 2898 { 2899 igUpdateWindowParentAndRootLinks(window, flags, parent_window); 2900 } 2901 2902 void UpdateWindowSkipRefresh(scope ImGuiWindow* window) @trusted 2903 { 2904 igUpdateWindowSkipRefresh(window); 2905 } 2906 2907 ImVec2 CalcWindowNextAutoFitSize(scope ImGuiWindow* window) @trusted 2908 { 2909 return igCalcWindowNextAutoFitSize(window); 2910 } 2911 2912 bool IsWindowChildOf(scope ImGuiWindow* window, scope ImGuiWindow* potential_parent, bool popup_hierarchy) @trusted 2913 { 2914 return igIsWindowChildOf(window, potential_parent, popup_hierarchy); 2915 } 2916 2917 bool IsWindowInBeginStack(scope ImGuiWindow* window) @trusted 2918 { 2919 return igIsWindowInBeginStack(window); 2920 } 2921 2922 bool IsWindowWithinBeginStackOf(scope ImGuiWindow* window, scope ImGuiWindow* potential_parent) @trusted 2923 { 2924 return igIsWindowWithinBeginStackOf(window, potential_parent); 2925 } 2926 2927 bool IsWindowAbove(scope ImGuiWindow* potential_above, scope ImGuiWindow* potential_below) @trusted 2928 { 2929 return igIsWindowAbove(potential_above, potential_below); 2930 } 2931 2932 bool IsWindowNavFocusable(scope ImGuiWindow* window) @trusted 2933 { 2934 return igIsWindowNavFocusable(window); 2935 } 2936 2937 void SetWindowPosImGuiWindowPtr(scope ImGuiWindow* window, ImVec2 pos, ImGuiCond cond) @trusted 2938 { 2939 igSetWindowPosImGuiWindowPtr(window, pos, cond); 2940 } 2941 2942 void SetWindowSizeImGuiWindowPtr(scope ImGuiWindow* window, ImVec2 size, ImGuiCond cond) @trusted 2943 { 2944 igSetWindowSizeImGuiWindowPtr(window, size, cond); 2945 } 2946 2947 void SetWindowCollapsedImGuiWindowPtr(scope ImGuiWindow* window, bool collapsed, ImGuiCond cond) @trusted 2948 { 2949 igSetWindowCollapsedImGuiWindowPtr(window, collapsed, cond); 2950 } 2951 2952 void SetWindowHitTestHole(scope ImGuiWindow* window, ImVec2 pos, ImVec2 size) @trusted 2953 { 2954 igSetWindowHitTestHole(window, pos, size); 2955 } 2956 2957 void SetWindowHiddenAndSkipItemsForCurrentFrame(scope ImGuiWindow* window) @trusted 2958 { 2959 igSetWindowHiddenAndSkipItemsForCurrentFrame(window); 2960 } 2961 2962 void SetWindowParentWindowForFocusRoute(scope ImGuiWindow* window, scope ImGuiWindow* parent_window) @trusted 2963 { 2964 igSetWindowParentWindowForFocusRoute(window, parent_window); 2965 } 2966 2967 ImRect WindowRectAbsToRel(scope ImGuiWindow* window, ImRect r) @trusted 2968 { 2969 return igWindowRectAbsToRel(window, r); 2970 } 2971 2972 ImRect WindowRectRelToAbs(scope ImGuiWindow* window, ImRect r) @trusted 2973 { 2974 return igWindowRectRelToAbs(window, r); 2975 } 2976 2977 ImVec2 WindowPosAbsToRel(scope ImGuiWindow* window, ImVec2 p) @trusted 2978 { 2979 return igWindowPosAbsToRel(window, p); 2980 } 2981 2982 ImVec2 WindowPosRelToAbs(scope ImGuiWindow* window, ImVec2 p) @trusted 2983 { 2984 return igWindowPosRelToAbs(window, p); 2985 } 2986 2987 /++ 2988 + Windows: Display Order and Focus Order 2989 +/ 2990 void FocusWindow(scope ImGuiWindow* window, ImGuiFocusRequestFlags flags) @trusted 2991 { 2992 igFocusWindow(window, flags); 2993 } 2994 2995 void FocusTopMostWindowUnderOne(scope ImGuiWindow* under_this_window, scope ImGuiWindow* ignore_window, scope ImGuiViewport* filter_viewport, ImGuiFocusRequestFlags flags) @trusted 2996 { 2997 igFocusTopMostWindowUnderOne(under_this_window, ignore_window, filter_viewport, flags); 2998 } 2999 3000 void BringWindowToFocusFront(scope ImGuiWindow* window) @trusted 3001 { 3002 igBringWindowToFocusFront(window); 3003 } 3004 3005 void BringWindowToDisplayFront(scope ImGuiWindow* window) @trusted 3006 { 3007 igBringWindowToDisplayFront(window); 3008 } 3009 3010 void BringWindowToDisplayBack(scope ImGuiWindow* window) @trusted 3011 { 3012 igBringWindowToDisplayBack(window); 3013 } 3014 3015 void BringWindowToDisplayBehind(scope ImGuiWindow* window, scope ImGuiWindow* above_window) @trusted 3016 { 3017 igBringWindowToDisplayBehind(window, above_window); 3018 } 3019 3020 int FindWindowDisplayIndex(scope ImGuiWindow* window) @trusted 3021 { 3022 return igFindWindowDisplayIndex(window); 3023 } 3024 3025 ImGuiWindow* FindBottomMostVisibleWindowWithinBeginStack(scope ImGuiWindow* window) @trusted 3026 { 3027 return igFindBottomMostVisibleWindowWithinBeginStack(window); 3028 } 3029 3030 /++ 3031 + Windows: Idle, Refresh Policies [EXPERIMENTAL] 3032 +/ 3033 void SetNextWindowRefreshPolicy(ImGuiWindowRefreshFlags flags) @trusted 3034 { 3035 igSetNextWindowRefreshPolicy(flags); 3036 } 3037 3038 /++ 3039 + Fonts, drawing 3040 +/ 3041 void RegisterUserTexture(scope ImTextureData* tex) @trusted 3042 { 3043 igRegisterUserTexture(tex); 3044 } 3045 3046 void UnregisterUserTexture(scope ImTextureData* tex) @trusted 3047 { 3048 igUnregisterUserTexture(tex); 3049 } 3050 3051 void RegisterFontAtlas(scope ImFontAtlas* atlas) @trusted 3052 { 3053 igRegisterFontAtlas(atlas); 3054 } 3055 3056 void UnregisterFontAtlas(scope ImFontAtlas* atlas) @trusted 3057 { 3058 igUnregisterFontAtlas(atlas); 3059 } 3060 3061 void SetCurrentFont(scope ImFont* font, float font_size_before_scaling, float font_size_after_scaling) @trusted 3062 { 3063 igSetCurrentFont(font, font_size_before_scaling, font_size_after_scaling); 3064 } 3065 3066 void UpdateCurrentFontSize(float restore_font_size_after_scaling) @trusted 3067 { 3068 igUpdateCurrentFontSize(restore_font_size_after_scaling); 3069 } 3070 3071 void SetFontRasterizerDensity(float rasterizer_density) @trusted 3072 { 3073 igSetFontRasterizerDensity(rasterizer_density); 3074 } 3075 3076 float GetFontRasterizerDensity() @trusted 3077 { 3078 return igGetFontRasterizerDensity(); 3079 } 3080 3081 float GetRoundedFontSize(float size) @trusted 3082 { 3083 return igGetRoundedFontSize(size); 3084 } 3085 3086 ImFont* GetDefaultFont() @trusted 3087 { 3088 return igGetDefaultFont(); 3089 } 3090 3091 void PushPasswordFont() @trusted 3092 { 3093 igPushPasswordFont(); 3094 } 3095 3096 void PopPasswordFont() @trusted 3097 { 3098 igPopPasswordFont(); 3099 } 3100 3101 ImDrawList* GetForegroundDrawListImGuiWindowPtr(scope ImGuiWindow* window) @trusted 3102 { 3103 return igGetForegroundDrawListImGuiWindowPtr(window); 3104 } 3105 3106 ImDrawList* GetBackgroundDrawListImGuiViewportPtr(scope ImGuiViewport* viewport) @trusted 3107 { 3108 return igGetBackgroundDrawListImGuiViewportPtr(viewport); 3109 } 3110 3111 ImDrawList* GetForegroundDrawListImGuiViewportPtr(scope ImGuiViewport* viewport) @trusted 3112 { 3113 return igGetForegroundDrawListImGuiViewportPtr(viewport); 3114 } 3115 3116 void AddDrawListToDrawDataEx(scope ImDrawData* draw_data, scope ImVector_ImDrawListPtr* out_list, scope ImDrawList* draw_list) @trusted 3117 { 3118 igAddDrawListToDrawDataEx(draw_data, out_list, draw_list); 3119 } 3120 3121 /++ 3122 + Init 3123 +/ 3124 void Initialize() @trusted 3125 { 3126 igInitialize(); 3127 } 3128 3129 void Shutdown() @trusted 3130 { 3131 igShutdown(); 3132 } 3133 3134 /++ 3135 + Context name 3136 + & 3137 + generic context hooks 3138 +/ 3139 void SetContextName(scope ImGuiContext* ctx, const(char)* name) @trusted 3140 { 3141 igSetContextName(ctx, name); 3142 } 3143 3144 ImGuiID AddContextHook(ImGuiContext* ctx, ImGuiContextHook* hook) @trusted 3145 { 3146 return igAddContextHook(ctx, hook); 3147 } 3148 3149 void RemoveContextHook(scope ImGuiContext* ctx, ImGuiID hook_to_remove) @trusted 3150 { 3151 igRemoveContextHook(ctx, hook_to_remove); 3152 } 3153 3154 void CallContextHooks(scope ImGuiContext* ctx, ImGuiContextHookType type) @trusted 3155 { 3156 igCallContextHooks(ctx, type); 3157 } 3158 3159 /++ 3160 + NewFrame 3161 +/ 3162 void UpdateInputEvents(bool trickle_fast_inputs) @trusted 3163 { 3164 igUpdateInputEvents(trickle_fast_inputs); 3165 } 3166 3167 void UpdateHoveredWindowAndCaptureFlags(ImVec2 mouse_pos) @trusted 3168 { 3169 igUpdateHoveredWindowAndCaptureFlags(mouse_pos); 3170 } 3171 3172 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 3173 { 3174 igFindHoveredWindowEx(pos, find_first_and_in_any_viewport, out_hovered_window, out_hovered_window_under_moving_window); 3175 } 3176 3177 void StartMouseMovingWindow(scope ImGuiWindow* window) @trusted 3178 { 3179 igStartMouseMovingWindow(window); 3180 } 3181 3182 void StopMouseMovingWindow() @trusted 3183 { 3184 igStopMouseMovingWindow(); 3185 } 3186 3187 void UpdateMouseMovingWindowNewFrame() @trusted 3188 { 3189 igUpdateMouseMovingWindowNewFrame(); 3190 } 3191 3192 void UpdateMouseMovingWindowEndFrame() @trusted 3193 { 3194 igUpdateMouseMovingWindowEndFrame(); 3195 } 3196 3197 /++ 3198 + Viewports 3199 +/ 3200 ImGuiViewport* GetWindowViewport() @trusted 3201 { 3202 return igGetWindowViewport(); 3203 } 3204 3205 void ScaleWindowsInViewport(scope ImGuiViewportP* viewport, float scale) @trusted 3206 { 3207 igScaleWindowsInViewport(viewport, scale); 3208 } 3209 3210 void SetWindowViewport(scope ImGuiWindow* window, scope ImGuiViewportP* viewport) @trusted 3211 { 3212 igSetWindowViewport(window, viewport); 3213 } 3214 3215 /++ 3216 + Settings 3217 +/ 3218 void MarkIniSettingsDirty() @trusted 3219 { 3220 igMarkIniSettingsDirty(); 3221 } 3222 3223 void MarkIniSettingsDirtyImGuiWindowPtr(scope ImGuiWindow* window) @trusted 3224 { 3225 igMarkIniSettingsDirtyImGuiWindowPtr(window); 3226 } 3227 3228 void ClearIniSettings() @trusted 3229 { 3230 igClearIniSettings(); 3231 } 3232 3233 void AddSettingsHandler(ImGuiSettingsHandler* handler) @trusted 3234 { 3235 igAddSettingsHandler(handler); 3236 } 3237 3238 void RemoveSettingsHandler(const(char)* type_name) @trusted 3239 { 3240 igRemoveSettingsHandler(type_name); 3241 } 3242 3243 ImGuiSettingsHandler* FindSettingsHandler(const(char)* type_name) @trusted 3244 { 3245 return igFindSettingsHandler(type_name); 3246 } 3247 3248 /++ 3249 + Settings Windows 3250 +/ 3251 ImGuiWindowSettings* CreateNewWindowSettings(const(char)* name) @trusted 3252 { 3253 return igCreateNewWindowSettings(name); 3254 } 3255 3256 ImGuiWindowSettings* FindWindowSettingsByID(ImGuiID id) @trusted 3257 { 3258 return igFindWindowSettingsByID(id); 3259 } 3260 3261 ImGuiWindowSettings* FindWindowSettingsByWindow(scope ImGuiWindow* window) @trusted 3262 { 3263 return igFindWindowSettingsByWindow(window); 3264 } 3265 3266 void ClearWindowSettings(const(char)* name) @trusted 3267 { 3268 igClearWindowSettings(name); 3269 } 3270 3271 /++ 3272 + Localization 3273 +/ 3274 void LocalizeRegisterEntries(ImGuiLocEntry* entries, int count) @trusted 3275 { 3276 igLocalizeRegisterEntries(entries, count); 3277 } 3278 3279 const(char)* LocalizeGetMsg(ImGuiLocKey key) @trusted 3280 { 3281 return igLocalizeGetMsg(key); 3282 } 3283 3284 /++ 3285 + Scrolling 3286 +/ 3287 void SetScrollXImGuiWindowPtr(scope ImGuiWindow* window, float scroll_x) @trusted 3288 { 3289 igSetScrollXImGuiWindowPtr(window, scroll_x); 3290 } 3291 3292 void SetScrollYImGuiWindowPtr(scope ImGuiWindow* window, float scroll_y) @trusted 3293 { 3294 igSetScrollYImGuiWindowPtr(window, scroll_y); 3295 } 3296 3297 void SetScrollFromPosXImGuiWindowPtr(scope ImGuiWindow* window, float local_x, float center_x_ratio) @trusted 3298 { 3299 igSetScrollFromPosXImGuiWindowPtr(window, local_x, center_x_ratio); 3300 } 3301 3302 void SetScrollFromPosYImGuiWindowPtr(scope ImGuiWindow* window, float local_y, float center_y_ratio) @trusted 3303 { 3304 igSetScrollFromPosYImGuiWindowPtr(window, local_y, center_y_ratio); 3305 } 3306 3307 /++ 3308 + Early workinprogress API (ScrollToItem() will become public) 3309 +/ 3310 void ScrollToItem(ImGuiScrollFlags flags) @trusted 3311 { 3312 igScrollToItem(flags); 3313 } 3314 3315 void ScrollToRect(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted 3316 { 3317 igScrollToRect(window, rect, flags); 3318 } 3319 3320 ImVec2 ScrollToRectEx(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted 3321 { 3322 return igScrollToRectEx(window, rect, flags); 3323 } 3324 3325 /++ 3326 + #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 3327 +/ 3328 void ScrollToBringRectIntoView(scope ImGuiWindow* window, ImRect rect) @trusted 3329 { 3330 igScrollToBringRectIntoView(window, rect); 3331 } 3332 3333 /++ 3334 + Basic Accessors 3335 +/ 3336 ImGuiItemStatusFlags GetItemStatusFlags() @trusted 3337 { 3338 return igGetItemStatusFlags(); 3339 } 3340 3341 ImGuiID GetActiveID() @trusted 3342 { 3343 return igGetActiveID(); 3344 } 3345 3346 ImGuiID GetFocusID() @trusted 3347 { 3348 return igGetFocusID(); 3349 } 3350 3351 void SetActiveID(ImGuiID id, scope ImGuiWindow* window) @trusted 3352 { 3353 igSetActiveID(id, window); 3354 } 3355 3356 void SetFocusID(ImGuiID id, scope ImGuiWindow* window) @trusted 3357 { 3358 igSetFocusID(id, window); 3359 } 3360 3361 void ClearActiveID() @trusted 3362 { 3363 igClearActiveID(); 3364 } 3365 3366 ImGuiID GetHoveredID() @trusted 3367 { 3368 return igGetHoveredID(); 3369 } 3370 3371 void SetHoveredID(ImGuiID id) @trusted 3372 { 3373 igSetHoveredID(id); 3374 } 3375 3376 void KeepAliveID(ImGuiID id) @trusted 3377 { 3378 igKeepAliveID(id); 3379 } 3380 3381 void MarkItemEdited(ImGuiID id) @trusted 3382 { 3383 igMarkItemEdited(id); 3384 } 3385 3386 void PushOverrideID(ImGuiID id) @trusted 3387 { 3388 igPushOverrideID(id); 3389 } 3390 3391 ImGuiID GetIDWithSeedStr(const(char)* str_id_begin, const(char)* str_id_end, ImGuiID seed) @trusted 3392 { 3393 return igGetIDWithSeedStr(str_id_begin, str_id_end, seed); 3394 } 3395 3396 ImGuiID GetIDWithSeed(int n, ImGuiID seed) @trusted 3397 { 3398 return igGetIDWithSeed(n, seed); 3399 } 3400 3401 /++ 3402 + Basic Helpers for widget code 3403 +/ 3404 void ItemSize(ImVec2 size) @trusted 3405 { 3406 igItemSize(size); 3407 } 3408 3409 void ItemSizeEx(ImVec2 size, float text_baseline_y) @trusted 3410 { 3411 igItemSizeEx(size, text_baseline_y); 3412 } 3413 3414 void ItemSizeImRect(ImRect bb) @trusted 3415 { 3416 igItemSizeImRect(bb); 3417 } 3418 3419 void ItemSizeImRectEx(ImRect bb, float text_baseline_y) @trusted 3420 { 3421 igItemSizeImRectEx(bb, text_baseline_y); 3422 } 3423 3424 bool ItemAdd(ImRect bb, ImGuiID id) @trusted 3425 { 3426 return igItemAdd(bb, id); 3427 } 3428 3429 bool ItemAddEx(ImRect bb, ImGuiID id, ImRect* nav_bb, ImGuiItemFlags extra_flags) @trusted 3430 { 3431 return igItemAddEx(bb, id, nav_bb, extra_flags); 3432 } 3433 3434 bool ItemHoverable(ImRect bb, ImGuiID id, ImGuiItemFlags item_flags) @trusted 3435 { 3436 return igItemHoverable(bb, id, item_flags); 3437 } 3438 3439 bool IsWindowContentHoverable(scope ImGuiWindow* window, ImGuiHoveredFlags flags) @trusted 3440 { 3441 return igIsWindowContentHoverable(window, flags); 3442 } 3443 3444 bool IsClippedEx(ImRect bb, ImGuiID id) @trusted 3445 { 3446 return igIsClippedEx(bb, id); 3447 } 3448 3449 void SetLastItemData(ImGuiID item_id, ImGuiItemFlags item_flags, ImGuiItemStatusFlags status_flags, ImRect item_rect) @trusted 3450 { 3451 igSetLastItemData(item_id, item_flags, status_flags, item_rect); 3452 } 3453 3454 ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h) @trusted 3455 { 3456 return igCalcItemSize(size, default_w, default_h); 3457 } 3458 3459 float CalcWrapWidthForPos(ImVec2 pos, float wrap_pos_x) @trusted 3460 { 3461 return igCalcWrapWidthForPos(pos, wrap_pos_x); 3462 } 3463 3464 void PushMultiItemsWidths(int components, float width_full) @trusted 3465 { 3466 igPushMultiItemsWidths(components, width_full); 3467 } 3468 3469 void ShrinkWidths(scope ImGuiShrinkWidthItem* items, int count, float width_excess, float width_min) @trusted 3470 { 3471 igShrinkWidths(items, count, width_excess, width_min); 3472 } 3473 3474 void CalcClipRectVisibleItemsY(ImRect clip_rect, ImVec2 pos, float items_height, scope int* out_visible_start, scope int* out_visible_end) @trusted 3475 { 3476 igCalcClipRectVisibleItemsY(clip_rect, pos, items_height, out_visible_start, out_visible_end); 3477 } 3478 3479 /++ 3480 + Parameter stacks (shared) 3481 +/ 3482 const(ImGuiStyleVarInfo)* GetStyleVarInfo(ImGuiStyleVar idx) @trusted 3483 { 3484 return igGetStyleVarInfo(idx); 3485 } 3486 3487 void BeginDisabledOverrideReenable() @trusted 3488 { 3489 igBeginDisabledOverrideReenable(); 3490 } 3491 3492 void EndDisabledOverrideReenable() @trusted 3493 { 3494 igEndDisabledOverrideReenable(); 3495 } 3496 3497 /++ 3498 + Logging/Capture 3499 +/ 3500 void LogBegin(ImGuiLogFlags flags, int auto_open_depth) @trusted 3501 { 3502 igLogBegin(flags, auto_open_depth); 3503 } 3504 3505 void LogToBuffer() @trusted 3506 { 3507 igLogToBuffer(); 3508 } 3509 3510 void LogToBufferEx(int auto_open_depth) @trusted 3511 { 3512 igLogToBufferEx(auto_open_depth); 3513 } 3514 3515 void LogRenderedText(ImVec2* ref_pos, const(char)* text) @trusted 3516 { 3517 igLogRenderedText(ref_pos, text); 3518 } 3519 3520 void LogRenderedTextEx(ImVec2* ref_pos, const(char)* text, const(char)* text_end) @trusted 3521 { 3522 igLogRenderedTextEx(ref_pos, text, text_end); 3523 } 3524 3525 void LogSetNextTextDecoration(const(char)* prefix, const(char)* suffix) @trusted 3526 { 3527 igLogSetNextTextDecoration(prefix, suffix); 3528 } 3529 3530 /++ 3531 + Childs 3532 +/ 3533 bool BeginChildEx(const(char)* name, ImGuiID id, ImVec2 size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) @trusted 3534 { 3535 return igBeginChildEx(name, id, size_arg, child_flags, window_flags); 3536 } 3537 3538 /++ 3539 + Popups, Modals 3540 +/ 3541 bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_window_flags) @trusted 3542 { 3543 return igBeginPopupEx(id, extra_window_flags); 3544 } 3545 3546 bool BeginPopupMenuEx(ImGuiID id, const(char)* label, ImGuiWindowFlags extra_window_flags) @trusted 3547 { 3548 return igBeginPopupMenuEx(id, label, extra_window_flags); 3549 } 3550 3551 void OpenPopupEx(ImGuiID id) @trusted 3552 { 3553 igOpenPopupEx(id); 3554 } 3555 3556 void OpenPopupExEx(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 3557 { 3558 igOpenPopupExEx(id, popup_flags); 3559 } 3560 3561 void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup) @trusted 3562 { 3563 igClosePopupToLevel(remaining, restore_focus_to_window_under_popup); 3564 } 3565 3566 void ClosePopupsOverWindow(scope ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup) @trusted 3567 { 3568 igClosePopupsOverWindow(ref_window, restore_focus_to_window_under_popup); 3569 } 3570 3571 void ClosePopupsExceptModals() @trusted 3572 { 3573 igClosePopupsExceptModals(); 3574 } 3575 3576 bool IsPopupOpenID(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 3577 { 3578 return igIsPopupOpenID(id, popup_flags); 3579 } 3580 3581 ImRect GetPopupAllowedExtentRect(scope ImGuiWindow* window) @trusted 3582 { 3583 return igGetPopupAllowedExtentRect(window); 3584 } 3585 3586 ImGuiWindow* GetTopMostPopupModal() @trusted 3587 { 3588 return igGetTopMostPopupModal(); 3589 } 3590 3591 ImGuiWindow* GetTopMostAndVisiblePopupModal() @trusted 3592 { 3593 return igGetTopMostAndVisiblePopupModal(); 3594 } 3595 3596 ImGuiWindow* FindBlockingModal(scope ImGuiWindow* window) @trusted 3597 { 3598 return igFindBlockingModal(window); 3599 } 3600 3601 ImVec2 FindBestWindowPosForPopup(scope ImGuiWindow* window) @trusted 3602 { 3603 return igFindBestWindowPosForPopup(window); 3604 } 3605 3606 ImVec2 FindBestWindowPosForPopupEx(ImVec2 ref_pos, ImVec2 size, scope ImGuiDir* last_dir, ImRect r_outer, ImRect r_avoid, ImGuiPopupPositionPolicy policy) @trusted 3607 { 3608 return igFindBestWindowPosForPopupEx(ref_pos, size, last_dir, r_outer, r_avoid, policy); 3609 } 3610 3611 ImGuiMouseButton GetMouseButtonFromPopupFlags(ImGuiPopupFlags flags) @trusted 3612 { 3613 return igGetMouseButtonFromPopupFlags(flags); 3614 } 3615 3616 bool IsPopupOpenRequestForItem(ImGuiPopupFlags flags, ImGuiID id) @trusted 3617 { 3618 return igIsPopupOpenRequestForItem(flags, id); 3619 } 3620 3621 bool IsPopupOpenRequestForWindow(ImGuiPopupFlags flags) @trusted 3622 { 3623 return igIsPopupOpenRequestForWindow(flags); 3624 } 3625 3626 /++ 3627 + Tooltips 3628 +/ 3629 bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags) @trusted 3630 { 3631 return igBeginTooltipEx(tooltip_flags, extra_window_flags); 3632 } 3633 3634 bool BeginTooltipHidden() @trusted 3635 { 3636 return igBeginTooltipHidden(); 3637 } 3638 3639 /++ 3640 + Menus 3641 +/ 3642 bool BeginViewportSideBar(const(char)* name, scope ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags) @trusted 3643 { 3644 return igBeginViewportSideBar(name, viewport, dir, size, window_flags); 3645 } 3646 3647 bool BeginMenuWithIcon(const(char)* label, const(char)* icon) @trusted 3648 { 3649 return igBeginMenuWithIcon(label, icon); 3650 } 3651 3652 bool BeginMenuWithIconEx(const(char)* label, const(char)* icon, bool enabled) @trusted 3653 { 3654 return igBeginMenuWithIconEx(label, icon, enabled); 3655 } 3656 3657 bool MenuItemWithIcon(const(char)* label, const(char)* icon) @trusted 3658 { 3659 return igMenuItemWithIcon(label, icon); 3660 } 3661 3662 bool MenuItemWithIconEx(const(char)* label, const(char)* icon, const(char)* shortcut, bool selected, bool enabled) @trusted 3663 { 3664 return igMenuItemWithIconEx(label, icon, shortcut, selected, enabled); 3665 } 3666 3667 /++ 3668 + Combos 3669 +/ 3670 bool BeginComboPopup(ImGuiID popup_id, ImRect bb, ImGuiComboFlags flags) @trusted 3671 { 3672 return igBeginComboPopup(popup_id, bb, flags); 3673 } 3674 3675 bool BeginComboPreview() @trusted 3676 { 3677 return igBeginComboPreview(); 3678 } 3679 3680 void EndComboPreview() @trusted 3681 { 3682 igEndComboPreview(); 3683 } 3684 3685 /++ 3686 + Keyboard/Gamepad Navigation 3687 +/ 3688 void NavInitWindow(scope ImGuiWindow* window, bool force_reinit) @trusted 3689 { 3690 igNavInitWindow(window, force_reinit); 3691 } 3692 3693 void NavInitRequestApplyResult() @trusted 3694 { 3695 igNavInitRequestApplyResult(); 3696 } 3697 3698 bool NavMoveRequestButNoResultYet() @trusted 3699 { 3700 return igNavMoveRequestButNoResultYet(); 3701 } 3702 3703 void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted 3704 { 3705 igNavMoveRequestSubmit(move_dir, clip_dir, move_flags, scroll_flags); 3706 } 3707 3708 void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted 3709 { 3710 igNavMoveRequestForward(move_dir, clip_dir, move_flags, scroll_flags); 3711 } 3712 3713 void NavMoveRequestResolveWithLastItem(scope ImGuiNavItemData* result) @trusted 3714 { 3715 igNavMoveRequestResolveWithLastItem(result); 3716 } 3717 3718 void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiTreeNodeStackData* tree_node_data) @trusted 3719 { 3720 igNavMoveRequestResolveWithPastTreeNode(result, tree_node_data); 3721 } 3722 3723 void NavMoveRequestCancel() @trusted 3724 { 3725 igNavMoveRequestCancel(); 3726 } 3727 3728 void NavMoveRequestApplyResult() @trusted 3729 { 3730 igNavMoveRequestApplyResult(); 3731 } 3732 3733 void NavMoveRequestTryWrapping(scope ImGuiWindow* window, ImGuiNavMoveFlags move_flags) @trusted 3734 { 3735 igNavMoveRequestTryWrapping(window, move_flags); 3736 } 3737 3738 void NavHighlightActivated(ImGuiID id) @trusted 3739 { 3740 igNavHighlightActivated(id); 3741 } 3742 3743 void NavClearPreferredPosForAxis(ImGuiAxis axis) @trusted 3744 { 3745 igNavClearPreferredPosForAxis(axis); 3746 } 3747 3748 void SetNavCursorVisibleAfterMove() @trusted 3749 { 3750 igSetNavCursorVisibleAfterMove(); 3751 } 3752 3753 void NavUpdateCurrentWindowIsScrollPushableX() @trusted 3754 { 3755 igNavUpdateCurrentWindowIsScrollPushableX(); 3756 } 3757 3758 void SetNavWindow(scope ImGuiWindow* window) @trusted 3759 { 3760 igSetNavWindow(window); 3761 } 3762 3763 void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, ImRect rect_rel) @trusted 3764 { 3765 igSetNavID(id, nav_layer, focus_scope_id, rect_rel); 3766 } 3767 3768 void SetNavFocusScope(ImGuiID focus_scope_id) @trusted 3769 { 3770 igSetNavFocusScope(focus_scope_id); 3771 } 3772 3773 /++ 3774 + Focus/Activation 3775 + This should be part of a larger set of API: FocusItem(offset = 1), FocusItemByID(id), ActivateItem(offset = 1), ActivateItemByID(id) etc. which are 3776 + 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. 3777 +/ 3778 void FocusItem() @trusted 3779 { 3780 igFocusItem(); 3781 } 3782 3783 void ActivateItemByID(ImGuiID id) @trusted 3784 { 3785 igActivateItemByID(id); 3786 } 3787 3788 /++ 3789 + Inputs 3790 + FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions. 3791 +/ 3792 bool IsNamedKey(ImGuiKey key) @trusted 3793 { 3794 return igIsNamedKey(key); 3795 } 3796 3797 bool IsNamedKeyOrMod(ImGuiKey key) @trusted 3798 { 3799 return igIsNamedKeyOrMod(key); 3800 } 3801 3802 bool IsLegacyKey(ImGuiKey key) @trusted 3803 { 3804 return igIsLegacyKey(key); 3805 } 3806 3807 bool IsKeyboardKey(ImGuiKey key) @trusted 3808 { 3809 return igIsKeyboardKey(key); 3810 } 3811 3812 bool IsGamepadKey(ImGuiKey key) @trusted 3813 { 3814 return igIsGamepadKey(key); 3815 } 3816 3817 bool IsMouseKey(ImGuiKey key) @trusted 3818 { 3819 return igIsMouseKey(key); 3820 } 3821 3822 bool IsAliasKey(ImGuiKey key) @trusted 3823 { 3824 return igIsAliasKey(key); 3825 } 3826 3827 bool IsLRModKey(ImGuiKey key) @trusted 3828 { 3829 return igIsLRModKey(key); 3830 } 3831 3832 ImGuiKeyChord FixupKeyChord(ImGuiKeyChord key_chord) @trusted 3833 { 3834 return igFixupKeyChord(key_chord); 3835 } 3836 3837 ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key) @trusted 3838 { 3839 return igConvertSingleModFlagToKey(key); 3840 } 3841 3842 ImGuiKeyData* GetKeyDataImGuiContextPtr(scope ImGuiContext* ctx, ImGuiKey key) @trusted 3843 { 3844 return igGetKeyDataImGuiContextPtr(ctx, key); 3845 } 3846 3847 ImGuiKeyData* GetKeyData(ImGuiKey key) @trusted 3848 { 3849 return igGetKeyData(key); 3850 } 3851 3852 const(char)* GetKeyChordName(ImGuiKeyChord key_chord) @trusted 3853 { 3854 return igGetKeyChordName(key_chord); 3855 } 3856 3857 ImGuiKey MouseButtonToKey(ImGuiMouseButton button) @trusted 3858 { 3859 return igMouseButtonToKey(button); 3860 } 3861 3862 bool IsMouseDragPastThreshold(ImGuiMouseButton button) @trusted 3863 { 3864 return igIsMouseDragPastThreshold(button); 3865 } 3866 3867 bool IsMouseDragPastThresholdEx(ImGuiMouseButton button, float lock_threshold) @trusted 3868 { 3869 return igIsMouseDragPastThresholdEx(button, lock_threshold); 3870 } 3871 3872 ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down) @trusted 3873 { 3874 return igGetKeyMagnitude2d(key_left, key_right, key_up, key_down); 3875 } 3876 3877 float GetNavTweakPressedAmount(ImGuiAxis axis) @trusted 3878 { 3879 return igGetNavTweakPressedAmount(axis); 3880 } 3881 3882 int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) @trusted 3883 { 3884 return igCalcTypematicRepeatAmount(t0, t1, repeat_delay, repeat_rate); 3885 } 3886 3887 void GetTypematicRepeatRate(ImGuiInputFlags flags, scope float* repeat_delay, scope float* repeat_rate) @trusted 3888 { 3889 igGetTypematicRepeatRate(flags, repeat_delay, repeat_rate); 3890 } 3891 3892 void TeleportMousePos(ImVec2 pos) @trusted 3893 { 3894 igTeleportMousePos(pos); 3895 } 3896 3897 void SetActiveIdUsingAllKeyboardKeys() @trusted 3898 { 3899 igSetActiveIdUsingAllKeyboardKeys(); 3900 } 3901 3902 bool IsActiveIdUsingNavDir(ImGuiDir dir) @trusted 3903 { 3904 return igIsActiveIdUsingNavDir(dir); 3905 } 3906 3907 /++ 3908 + [EXPERIMENTAL] LowLevel: Key/Input Ownership 3909 + The idea is that instead of "eating" a given input, we can link to an owner id. 3910 + Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead). 3911 + Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_NoOwner (== 1) or a custom ID. 3912 + Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0). 3913 + Input ownership is automatically released on the frame after a key is released. Therefore: 3914 + for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case). 3915 + 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). 3916 + 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. 3917 + This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step. 3918 + Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved. 3919 +/ 3920 ImGuiID GetKeyOwner(ImGuiKey key) @trusted 3921 { 3922 return igGetKeyOwner(key); 3923 } 3924 3925 void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted 3926 { 3927 igSetKeyOwner(key, owner_id, flags); 3928 } 3929 3930 void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted 3931 { 3932 igSetKeyOwnersForKeyChord(key, owner_id, flags); 3933 } 3934 3935 void SetItemKeyOwnerImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted 3936 { 3937 igSetItemKeyOwnerImGuiInputFlags(key, flags); 3938 } 3939 3940 bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id) @trusted 3941 { 3942 return igTestKeyOwner(key, owner_id); 3943 } 3944 3945 ImGuiKeyOwnerData* GetKeyOwnerData(scope ImGuiContext* ctx, ImGuiKey key) @trusted 3946 { 3947 return igGetKeyOwnerData(ctx, key); 3948 } 3949 3950 /++ 3951 + [EXPERIMENTAL] HighLevel: Input Access functions w/ support for Key/Input Ownership 3952 + Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag. 3953 + Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0) 3954 + Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'. 3955 + Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease. 3956 + Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API. 3957 +/ 3958 bool IsKeyDownID(ImGuiKey key, ImGuiID owner_id) @trusted 3959 { 3960 return igIsKeyDownID(key, owner_id); 3961 } 3962 3963 bool IsKeyPressedImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted 3964 { 3965 return igIsKeyPressedImGuiInputFlags(key, flags); 3966 } 3967 3968 bool IsKeyPressedImGuiInputFlagsEx(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3969 { 3970 return igIsKeyPressedImGuiInputFlagsEx(key, flags, owner_id); 3971 } 3972 3973 bool IsKeyReleasedID(ImGuiKey key, ImGuiID owner_id) @trusted 3974 { 3975 return igIsKeyReleasedID(key, owner_id); 3976 } 3977 3978 bool IsKeyChordPressedImGuiInputFlags(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted 3979 { 3980 return igIsKeyChordPressedImGuiInputFlags(key_chord, flags); 3981 } 3982 3983 bool IsKeyChordPressedImGuiInputFlagsEx(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3984 { 3985 return igIsKeyChordPressedImGuiInputFlagsEx(key_chord, flags, owner_id); 3986 } 3987 3988 bool IsMouseDownID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 3989 { 3990 return igIsMouseDownID(button, owner_id); 3991 } 3992 3993 bool IsMouseClickedImGuiInputFlags(ImGuiMouseButton button, ImGuiInputFlags flags) @trusted 3994 { 3995 return igIsMouseClickedImGuiInputFlags(button, flags); 3996 } 3997 3998 bool IsMouseClickedImGuiInputFlagsEx(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3999 { 4000 return igIsMouseClickedImGuiInputFlagsEx(button, flags, owner_id); 4001 } 4002 4003 bool IsMouseReleasedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 4004 { 4005 return igIsMouseReleasedID(button, owner_id); 4006 } 4007 4008 bool IsMouseDoubleClickedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 4009 { 4010 return igIsMouseDoubleClickedID(button, owner_id); 4011 } 4012 4013 /++ 4014 + Shortcut Testing 4015 + & 4016 + Routing 4017 + Set Shortcut() and SetNextItemShortcut() in imgui.h 4018 + When a policy (except for ImGuiInputFlags_RouteAlways *) is set, Shortcut() will register itself with SetShortcutRouting(), 4019 + allowing the system to decide where to route the input among other routeaware calls. 4020 + (* using ImGuiInputFlags_RouteAlways is roughly equivalent to calling IsKeyChordPressed(key) and bypassing route registration and check) 4021 + When using one of the routing option: 4022 + 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.) 4023 + Routes are requested given a chord (key + modifiers) and a routing policy. 4024 + Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame. 4025 + 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). 4026 + Multiple read sites may use the same owner id can all access the granted route. 4027 + When owner_id is 0 we use the current Focus Scope ID as a owner ID in order to identify our location. 4028 + You can chain two unrelated windows in the focus stack using SetWindowParentWindowForFocusRoute() 4029 + e.g. if you have a tool window associated to a document, and you want document shortcuts to run when the tool is focused. 4030 +/ 4031 bool ShortcutID(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4032 { 4033 return igShortcutID(key_chord, flags, owner_id); 4034 } 4035 4036 bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4037 { 4038 return igSetShortcutRouting(key_chord, flags, owner_id); 4039 } 4040 4041 bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id) @trusted 4042 { 4043 return igTestShortcutRouting(key_chord, owner_id); 4044 } 4045 4046 ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord) @trusted 4047 { 4048 return igGetShortcutRoutingData(key_chord); 4049 } 4050 4051 /++ 4052 + [EXPERIMENTAL] Focus Scope 4053 + This is generally used to identify a unique input location (for e.g. a selection set) 4054 + There is one per window (automatically set in Begin), but: 4055 + Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set. 4056 + So in order to identify a set multiple lists in same window may each need a focus scope. 4057 + If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope() 4058 + Shortcut routing also use focus scope as a default location identifier if an owner is not provided. 4059 + We don't use the ID Stack for this as it is common to want them separate. 4060 +/ 4061 void PushFocusScope(ImGuiID id) @trusted 4062 { 4063 igPushFocusScope(id); 4064 } 4065 4066 void PopFocusScope() @trusted 4067 { 4068 igPopFocusScope(); 4069 } 4070 4071 ImGuiID GetCurrentFocusScope() @trusted 4072 { 4073 return igGetCurrentFocusScope(); 4074 } 4075 4076 /++ 4077 + Drag and Drop 4078 +/ 4079 bool IsDragDropActive() @trusted 4080 { 4081 return igIsDragDropActive(); 4082 } 4083 4084 bool BeginDragDropTargetCustom(ImRect bb, ImGuiID id) @trusted 4085 { 4086 return igBeginDragDropTargetCustom(bb, id); 4087 } 4088 4089 bool BeginDragDropTargetViewport(scope ImGuiViewport* viewport) @trusted 4090 { 4091 return igBeginDragDropTargetViewport(viewport); 4092 } 4093 4094 bool BeginDragDropTargetViewportEx(scope ImGuiViewport* viewport, scope ImRect* p_bb) @trusted 4095 { 4096 return igBeginDragDropTargetViewportEx(viewport, p_bb); 4097 } 4098 4099 void ClearDragDrop() @trusted 4100 { 4101 igClearDragDrop(); 4102 } 4103 4104 bool IsDragDropPayloadBeingAccepted() @trusted 4105 { 4106 return igIsDragDropPayloadBeingAccepted(); 4107 } 4108 4109 void RenderDragDropTargetRectForItem(ImRect bb) @trusted 4110 { 4111 igRenderDragDropTargetRectForItem(bb); 4112 } 4113 4114 void RenderDragDropTargetRectEx(scope ImDrawList* draw_list, ImRect bb) @trusted 4115 { 4116 igRenderDragDropTargetRectEx(draw_list, bb); 4117 } 4118 4119 /++ 4120 + TypingSelect API 4121 + (provide Windows Explorer style "select items by typing partial name" + "cycle through items by typing same letter" feature) 4122 + (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!) 4123 +/ 4124 ImGuiTypingSelectRequest* GetTypingSelectRequest() @trusted 4125 { 4126 return igGetTypingSelectRequest(); 4127 } 4128 4129 ImGuiTypingSelectRequest* GetTypingSelectRequestEx(ImGuiTypingSelectFlags flags) @trusted 4130 { 4131 return igGetTypingSelectRequestEx(flags); 4132 } 4133 4134 int TypingSelectFindMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted 4135 { 4136 return igTypingSelectFindMatch(req, items_count, get_item_name_func, user_data, nav_item_idx); 4137 } 4138 4139 int TypingSelectFindNextSingleCharMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted 4140 { 4141 return igTypingSelectFindNextSingleCharMatch(req, items_count, get_item_name_func, user_data, nav_item_idx); 4142 } 4143 4144 int TypingSelectFindBestLeadingMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data) @trusted 4145 { 4146 return igTypingSelectFindBestLeadingMatch(req, items_count, get_item_name_func, user_data); 4147 } 4148 4149 /++ 4150 + BoxSelect API 4151 +/ 4152 bool BeginBoxSelect(ImRect scope_rect, scope ImGuiWindow* window, ImGuiID box_select_id, ImGuiMultiSelectFlags ms_flags) @trusted 4153 { 4154 return igBeginBoxSelect(scope_rect, window, box_select_id, ms_flags); 4155 } 4156 4157 void EndBoxSelect(ImRect scope_rect, ImGuiMultiSelectFlags ms_flags) @trusted 4158 { 4159 igEndBoxSelect(scope_rect, ms_flags); 4160 } 4161 4162 /++ 4163 + MultiSelect API 4164 +/ 4165 void MultiSelectItemHeader(ImGuiID id, scope bool* p_selected, scope ImGuiButtonFlags* p_button_flags) @trusted 4166 { 4167 igMultiSelectItemHeader(id, p_selected, p_button_flags); 4168 } 4169 4170 void MultiSelectItemFooter(ImGuiID id, scope bool* p_selected, scope bool* p_pressed) @trusted 4171 { 4172 igMultiSelectItemFooter(id, p_selected, p_pressed); 4173 } 4174 4175 void MultiSelectAddSetAll(scope ImGuiMultiSelectTempData* ms, bool selected) @trusted 4176 { 4177 igMultiSelectAddSetAll(ms, selected); 4178 } 4179 4180 void MultiSelectAddSetRange(scope ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item) @trusted 4181 { 4182 igMultiSelectAddSetRange(ms, selected, range_dir, first_item, last_item); 4183 } 4184 4185 ImGuiBoxSelectState* GetBoxSelectState(ImGuiID id) @trusted 4186 { 4187 return igGetBoxSelectState(id); 4188 } 4189 4190 ImGuiMultiSelectState* GetMultiSelectState(ImGuiID id) @trusted 4191 { 4192 return igGetMultiSelectState(id); 4193 } 4194 4195 /++ 4196 + Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API) 4197 +/ 4198 void SetWindowClipRectBeforeSetChannel(scope ImGuiWindow* window, ImRect clip_rect) @trusted 4199 { 4200 igSetWindowClipRectBeforeSetChannel(window, clip_rect); 4201 } 4202 4203 void BeginColumns(const(char)* str_id, int count, ImGuiOldColumnFlags flags) @trusted 4204 { 4205 igBeginColumns(str_id, count, flags); 4206 } 4207 4208 void EndColumns() @trusted 4209 { 4210 igEndColumns(); 4211 } 4212 4213 void PushColumnClipRect(int column_index) @trusted 4214 { 4215 igPushColumnClipRect(column_index); 4216 } 4217 4218 void PushColumnsBackground() @trusted 4219 { 4220 igPushColumnsBackground(); 4221 } 4222 4223 void PopColumnsBackground() @trusted 4224 { 4225 igPopColumnsBackground(); 4226 } 4227 4228 ImGuiID GetColumnsID(const(char)* str_id, int count) @trusted 4229 { 4230 return igGetColumnsID(str_id, count); 4231 } 4232 4233 ImGuiOldColumns* FindOrCreateColumns(scope ImGuiWindow* window, ImGuiID id) @trusted 4234 { 4235 return igFindOrCreateColumns(window, id); 4236 } 4237 4238 float GetColumnOffsetFromNorm(ImGuiOldColumns* columns, float offset_norm) @trusted 4239 { 4240 return igGetColumnOffsetFromNorm(columns, offset_norm); 4241 } 4242 4243 float GetColumnNormFromOffset(ImGuiOldColumns* columns, float offset) @trusted 4244 { 4245 return igGetColumnNormFromOffset(columns, offset); 4246 } 4247 4248 /++ 4249 + Tables: Candidates for public API 4250 +/ 4251 void TableOpenContextMenu() @trusted 4252 { 4253 igTableOpenContextMenu(); 4254 } 4255 4256 void TableOpenContextMenuEx(int column_n) @trusted 4257 { 4258 igTableOpenContextMenuEx(column_n); 4259 } 4260 4261 void TableSetColumnWidth(int column_n, float width) @trusted 4262 { 4263 igTableSetColumnWidth(column_n, width); 4264 } 4265 4266 void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs) @trusted 4267 { 4268 igTableSetColumnSortDirection(column_n, sort_direction, append_to_sort_specs); 4269 } 4270 4271 int TableGetHoveredRow() @trusted 4272 { 4273 return igTableGetHoveredRow(); 4274 } 4275 4276 float TableGetHeaderRowHeight() @trusted 4277 { 4278 return igTableGetHeaderRowHeight(); 4279 } 4280 4281 float TableGetHeaderAngledMaxLabelWidth() @trusted 4282 { 4283 return igTableGetHeaderAngledMaxLabelWidth(); 4284 } 4285 4286 void TablePushBackgroundChannel() @trusted 4287 { 4288 igTablePushBackgroundChannel(); 4289 } 4290 4291 void TablePopBackgroundChannel() @trusted 4292 { 4293 igTablePopBackgroundChannel(); 4294 } 4295 4296 void TablePushColumnChannel(int column_n) @trusted 4297 { 4298 igTablePushColumnChannel(column_n); 4299 } 4300 4301 void TablePopColumnChannel() @trusted 4302 { 4303 igTablePopColumnChannel(); 4304 } 4305 4306 void TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label_width, ImGuiTableHeaderData* data, int data_count) @trusted 4307 { 4308 igTableAngledHeadersRowEx(row_id, angle, max_label_width, data, data_count); 4309 } 4310 4311 /++ 4312 + Tables: Internals 4313 +/ 4314 ImGuiTable* GetCurrentTable() @trusted 4315 { 4316 return igGetCurrentTable(); 4317 } 4318 4319 ImGuiTable* TableFindByID(ImGuiID id) @trusted 4320 { 4321 return igTableFindByID(id); 4322 } 4323 4324 bool BeginTableWithID(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags) @trusted 4325 { 4326 return igBeginTableWithID(name, id, columns_count, flags); 4327 } 4328 4329 bool BeginTableWithIDEx(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, ImVec2 outer_size, float inner_width) @trusted 4330 { 4331 return igBeginTableWithIDEx(name, id, columns_count, flags, outer_size, inner_width); 4332 } 4333 4334 void TableBeginInitMemory(scope ImGuiTable* table, int columns_count) @trusted 4335 { 4336 igTableBeginInitMemory(table, columns_count); 4337 } 4338 4339 void TableBeginApplyRequests(scope ImGuiTable* table) @trusted 4340 { 4341 igTableBeginApplyRequests(table); 4342 } 4343 4344 void TableSetupDrawChannels(scope ImGuiTable* table) @trusted 4345 { 4346 igTableSetupDrawChannels(table); 4347 } 4348 4349 void TableUpdateLayout(scope ImGuiTable* table) @trusted 4350 { 4351 igTableUpdateLayout(table); 4352 } 4353 4354 void TableUpdateBorders(scope ImGuiTable* table) @trusted 4355 { 4356 igTableUpdateBorders(table); 4357 } 4358 4359 void TableUpdateColumnsWeightFromWidth(scope ImGuiTable* table) @trusted 4360 { 4361 igTableUpdateColumnsWeightFromWidth(table); 4362 } 4363 4364 void TableDrawBorders(scope ImGuiTable* table) @trusted 4365 { 4366 igTableDrawBorders(table); 4367 } 4368 4369 void TableDrawDefaultContextMenu(scope ImGuiTable* table, ImGuiTableFlags flags_for_section_to_display) @trusted 4370 { 4371 igTableDrawDefaultContextMenu(table, flags_for_section_to_display); 4372 } 4373 4374 bool TableBeginContextMenuPopup(scope ImGuiTable* table) @trusted 4375 { 4376 return igTableBeginContextMenuPopup(table); 4377 } 4378 4379 void TableMergeDrawChannels(scope ImGuiTable* table) @trusted 4380 { 4381 igTableMergeDrawChannels(table); 4382 } 4383 4384 ImGuiTableInstanceData* TableGetInstanceData(scope ImGuiTable* table, int instance_no) @trusted 4385 { 4386 return igTableGetInstanceData(table, instance_no); 4387 } 4388 4389 ImGuiID TableGetInstanceID(scope ImGuiTable* table, int instance_no) @trusted 4390 { 4391 return igTableGetInstanceID(table, instance_no); 4392 } 4393 4394 void TableFixDisplayOrder(scope ImGuiTable* table) @trusted 4395 { 4396 igTableFixDisplayOrder(table); 4397 } 4398 4399 void TableSortSpecsSanitize(scope ImGuiTable* table) @trusted 4400 { 4401 igTableSortSpecsSanitize(table); 4402 } 4403 4404 void TableSortSpecsBuild(scope ImGuiTable* table) @trusted 4405 { 4406 igTableSortSpecsBuild(table); 4407 } 4408 4409 ImGuiSortDirection TableGetColumnNextSortDirection(scope ImGuiTableColumn* column) @trusted 4410 { 4411 return igTableGetColumnNextSortDirection(column); 4412 } 4413 4414 void TableFixColumnSortDirection(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted 4415 { 4416 igTableFixColumnSortDirection(table, column); 4417 } 4418 4419 float TableGetColumnWidthAuto(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted 4420 { 4421 return igTableGetColumnWidthAuto(table, column); 4422 } 4423 4424 void TableBeginRow(scope ImGuiTable* table) @trusted 4425 { 4426 igTableBeginRow(table); 4427 } 4428 4429 void TableEndRow(scope ImGuiTable* table) @trusted 4430 { 4431 igTableEndRow(table); 4432 } 4433 4434 void TableBeginCell(scope ImGuiTable* table, int column_n) @trusted 4435 { 4436 igTableBeginCell(table, column_n); 4437 } 4438 4439 void TableEndCell(scope ImGuiTable* table) @trusted 4440 { 4441 igTableEndCell(table); 4442 } 4443 4444 ImRect TableGetCellBgRect(ImGuiTable* table, int column_n) @trusted 4445 { 4446 return igTableGetCellBgRect(table, column_n); 4447 } 4448 4449 const(char)* TableGetColumnNameImGuiTablePtr(ImGuiTable* table, int column_n) @trusted 4450 { 4451 return igTableGetColumnNameImGuiTablePtr(table, column_n); 4452 } 4453 4454 ImGuiID TableGetColumnResizeID(scope ImGuiTable* table, int column_n) @trusted 4455 { 4456 return igTableGetColumnResizeID(table, column_n); 4457 } 4458 4459 ImGuiID TableGetColumnResizeIDEx(scope ImGuiTable* table, int column_n, int instance_no) @trusted 4460 { 4461 return igTableGetColumnResizeIDEx(table, column_n, instance_no); 4462 } 4463 4464 float TableCalcMaxColumnWidth(ImGuiTable* table, int column_n) @trusted 4465 { 4466 return igTableCalcMaxColumnWidth(table, column_n); 4467 } 4468 4469 void TableSetColumnWidthAutoSingle(scope ImGuiTable* table, int column_n) @trusted 4470 { 4471 igTableSetColumnWidthAutoSingle(table, column_n); 4472 } 4473 4474 void TableSetColumnWidthAutoAll(scope ImGuiTable* table) @trusted 4475 { 4476 igTableSetColumnWidthAutoAll(table); 4477 } 4478 4479 void TableSetColumnDisplayOrder(scope ImGuiTable* table, int column_n, int dst_order) @trusted 4480 { 4481 igTableSetColumnDisplayOrder(table, column_n, dst_order); 4482 } 4483 4484 void TableQueueSetColumnDisplayOrder(scope ImGuiTable* table, int column_n, int dst_order) @trusted 4485 { 4486 igTableQueueSetColumnDisplayOrder(table, column_n, dst_order); 4487 } 4488 4489 void TableRemove(scope ImGuiTable* table) @trusted 4490 { 4491 igTableRemove(table); 4492 } 4493 4494 void TableGcCompactTransientBuffers(scope ImGuiTable* table) @trusted 4495 { 4496 igTableGcCompactTransientBuffers(table); 4497 } 4498 4499 void TableGcCompactTransientBuffersImGuiTableTempDataPtr(scope ImGuiTableTempData* table) @trusted 4500 { 4501 igTableGcCompactTransientBuffersImGuiTableTempDataPtr(table); 4502 } 4503 4504 void TableGcCompactSettings() @trusted 4505 { 4506 igTableGcCompactSettings(); 4507 } 4508 4509 /++ 4510 + Tables: Settings 4511 +/ 4512 void TableLoadSettings(scope ImGuiTable* table) @trusted 4513 { 4514 igTableLoadSettings(table); 4515 } 4516 4517 void TableSaveSettings(scope ImGuiTable* table) @trusted 4518 { 4519 igTableSaveSettings(table); 4520 } 4521 4522 void TableResetSettings(scope ImGuiTable* table) @trusted 4523 { 4524 igTableResetSettings(table); 4525 } 4526 4527 ImGuiTableSettings* TableGetBoundSettings(scope ImGuiTable* table) @trusted 4528 { 4529 return igTableGetBoundSettings(table); 4530 } 4531 4532 void TableSettingsAddSettingsHandler() @trusted 4533 { 4534 igTableSettingsAddSettingsHandler(); 4535 } 4536 4537 ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count) @trusted 4538 { 4539 return igTableSettingsCreate(id, columns_count); 4540 } 4541 4542 ImGuiTableSettings* TableSettingsFindByID(ImGuiID id) @trusted 4543 { 4544 return igTableSettingsFindByID(id); 4545 } 4546 4547 /++ 4548 + Tab Bars 4549 +/ 4550 ImGuiTabBar* GetCurrentTabBar() @trusted 4551 { 4552 return igGetCurrentTabBar(); 4553 } 4554 4555 ImGuiTabBar* TabBarFindByID(ImGuiID id) @trusted 4556 { 4557 return igTabBarFindByID(id); 4558 } 4559 4560 void TabBarRemove(scope ImGuiTabBar* tab_bar) @trusted 4561 { 4562 igTabBarRemove(tab_bar); 4563 } 4564 4565 bool BeginTabBarEx(scope ImGuiTabBar* tab_bar, ImRect bb, ImGuiTabBarFlags flags) @trusted 4566 { 4567 return igBeginTabBarEx(tab_bar, bb, flags); 4568 } 4569 4570 ImGuiTabItem* TabBarFindTabByID(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted 4571 { 4572 return igTabBarFindTabByID(tab_bar, tab_id); 4573 } 4574 4575 ImGuiTabItem* TabBarFindTabByOrder(scope ImGuiTabBar* tab_bar, int order) @trusted 4576 { 4577 return igTabBarFindTabByOrder(tab_bar, order); 4578 } 4579 4580 ImGuiTabItem* TabBarGetCurrentTab(scope ImGuiTabBar* tab_bar) @trusted 4581 { 4582 return igTabBarGetCurrentTab(tab_bar); 4583 } 4584 4585 int TabBarGetTabOrder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4586 { 4587 return igTabBarGetTabOrder(tab_bar, tab); 4588 } 4589 4590 const(char)* TabBarGetTabName(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4591 { 4592 return igTabBarGetTabName(tab_bar, tab); 4593 } 4594 4595 void TabBarRemoveTab(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted 4596 { 4597 igTabBarRemoveTab(tab_bar, tab_id); 4598 } 4599 4600 void TabBarCloseTab(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4601 { 4602 igTabBarCloseTab(tab_bar, tab); 4603 } 4604 4605 void TabBarQueueFocus(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4606 { 4607 igTabBarQueueFocus(tab_bar, tab); 4608 } 4609 4610 void TabBarQueueFocusStr(scope ImGuiTabBar* tab_bar, const(char)* tab_name) @trusted 4611 { 4612 igTabBarQueueFocusStr(tab_bar, tab_name); 4613 } 4614 4615 void TabBarQueueReorder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, int offset) @trusted 4616 { 4617 igTabBarQueueReorder(tab_bar, tab, offset); 4618 } 4619 4620 void TabBarQueueReorderFromMousePos(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, ImVec2 mouse_pos) @trusted 4621 { 4622 igTabBarQueueReorderFromMousePos(tab_bar, tab, mouse_pos); 4623 } 4624 4625 bool TabBarProcessReorder(scope ImGuiTabBar* tab_bar) @trusted 4626 { 4627 return igTabBarProcessReorder(tab_bar); 4628 } 4629 4630 bool TabItemEx(scope ImGuiTabBar* tab_bar, const(char)* label, scope bool* p_open, ImGuiTabItemFlags flags, scope ImGuiWindow* docked_window) @trusted 4631 { 4632 return igTabItemEx(tab_bar, label, p_open, flags, docked_window); 4633 } 4634 4635 void TabItemSpacing(const(char)* str_id, ImGuiTabItemFlags flags, float width) @trusted 4636 { 4637 igTabItemSpacing(str_id, flags, width); 4638 } 4639 4640 ImVec2 TabItemCalcSizeStr(const(char)* label, bool has_close_button_or_unsaved_marker) @trusted 4641 { 4642 return igTabItemCalcSizeStr(label, has_close_button_or_unsaved_marker); 4643 } 4644 4645 ImVec2 TabItemCalcSize(scope ImGuiWindow* window) @trusted 4646 { 4647 return igTabItemCalcSize(window); 4648 } 4649 4650 void TabItemBackground(scope ImDrawList* draw_list, ImRect bb, ImGuiTabItemFlags flags, ImU32 col) @trusted 4651 { 4652 igTabItemBackground(draw_list, bb, flags, col); 4653 } 4654 4655 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 4656 { 4657 igTabItemLabelAndCloseButton(draw_list, bb, flags, frame_padding, label, tab_id, close_button_id, is_contents_visible, out_just_closed, out_text_clipped); 4658 } 4659 4660 /++ 4661 + Render helpers 4662 + 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. 4663 + NB: All position are in absolute pixels coordinates (we are never using window coordinates internally) 4664 +/ 4665 void RenderText(ImVec2 pos, const(char)* text) @trusted 4666 { 4667 igRenderText(pos, text); 4668 } 4669 4670 void RenderTextEx(ImVec2 pos, const(char)* text, const(char)* text_end, bool hide_text_after_hash) @trusted 4671 { 4672 igRenderTextEx(pos, text, text_end, hide_text_after_hash); 4673 } 4674 4675 void RenderTextWrapped(ImVec2 pos, const(char)* text, const(char)* text_end, float wrap_width) @trusted 4676 { 4677 igRenderTextWrapped(pos, text, text_end, wrap_width); 4678 } 4679 4680 void RenderTextClipped(ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4681 { 4682 igRenderTextClipped(pos_min, pos_max, text, text_end, text_size_if_known); 4683 } 4684 4685 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 4686 { 4687 igRenderTextClippedEx(pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect); 4688 } 4689 4690 void RenderTextClippedWithDrawList(ImDrawList* draw_list, ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4691 { 4692 igRenderTextClippedWithDrawList(draw_list, pos_min, pos_max, text, text_end, text_size_if_known); 4693 } 4694 4695 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 4696 { 4697 igRenderTextClippedWithDrawListEx(draw_list, pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect); 4698 } 4699 4700 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 4701 { 4702 igRenderTextEllipsis(draw_list, pos_min, pos_max, ellipsis_max_x, text, text_end, text_size_if_known); 4703 } 4704 4705 void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col) @trusted 4706 { 4707 igRenderFrame(p_min, p_max, fill_col); 4708 } 4709 4710 void RenderFrameEx(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool borders, float rounding) @trusted 4711 { 4712 igRenderFrameEx(p_min, p_max, fill_col, borders, rounding); 4713 } 4714 4715 void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max) @trusted 4716 { 4717 igRenderFrameBorder(p_min, p_max); 4718 } 4719 4720 void RenderFrameBorderEx(ImVec2 p_min, ImVec2 p_max, float rounding) @trusted 4721 { 4722 igRenderFrameBorderEx(p_min, p_max, rounding); 4723 } 4724 4725 void RenderColorComponentMarker(ImRect bb, ImU32 col, float rounding) @trusted 4726 { 4727 igRenderColorComponentMarker(bb, col, rounding); 4728 } 4729 4730 void RenderColorRectWithAlphaCheckerboard(scope ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off) @trusted 4731 { 4732 igRenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, fill_col, grid_step, grid_off); 4733 } 4734 4735 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 4736 { 4737 igRenderColorRectWithAlphaCheckerboardEx(draw_list, p_min, p_max, fill_col, grid_step, grid_off, rounding, flags); 4738 } 4739 4740 void RenderNavCursor(ImRect bb, ImGuiID id) @trusted 4741 { 4742 igRenderNavCursor(bb, id); 4743 } 4744 4745 void RenderNavCursorEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted 4746 { 4747 igRenderNavCursorEx(bb, id, flags); 4748 } 4749 4750 void RenderNavHighlight(ImRect bb, ImGuiID id) @trusted 4751 { 4752 igRenderNavHighlight(bb, id); 4753 } 4754 4755 void RenderNavHighlightEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted 4756 { 4757 igRenderNavHighlightEx(bb, id, flags); 4758 } 4759 4760 const(char)* FindRenderedTextEnd(const(char)* text) @trusted 4761 { 4762 return igFindRenderedTextEnd(text); 4763 } 4764 4765 const(char)* FindRenderedTextEndEx(const(char)* text, const(char)* text_end) @trusted 4766 { 4767 return igFindRenderedTextEndEx(text, text_end); 4768 } 4769 4770 void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) @trusted 4771 { 4772 igRenderMouseCursor(pos, scale, mouse_cursor, col_fill, col_border, col_shadow); 4773 } 4774 4775 /++ 4776 + Render helpers (those functions don't access any ImGui state!) 4777 +/ 4778 void RenderArrow(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir) @trusted 4779 { 4780 igRenderArrow(draw_list, pos, col, dir); 4781 } 4782 4783 void RenderArrowEx(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale) @trusted 4784 { 4785 igRenderArrowEx(draw_list, pos, col, dir, scale); 4786 } 4787 4788 void RenderBullet(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col) @trusted 4789 { 4790 igRenderBullet(draw_list, pos, col); 4791 } 4792 4793 void RenderCheckMark(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz) @trusted 4794 { 4795 igRenderCheckMark(draw_list, pos, col, sz); 4796 } 4797 4798 void RenderArrowPointingAt(scope ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) @trusted 4799 { 4800 igRenderArrowPointingAt(draw_list, pos, half_sz, direction, col); 4801 } 4802 4803 void RenderRectFilledInRangeH(scope ImDrawList* draw_list, ImRect rect, ImU32 col, float fill_x0, float fill_x1, float rounding) @trusted 4804 { 4805 igRenderRectFilledInRangeH(draw_list, rect, col, fill_x0, fill_x1, rounding); 4806 } 4807 4808 void RenderRectFilledWithHole(scope ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding) @trusted 4809 { 4810 igRenderRectFilledWithHole(draw_list, outer, inner, col, rounding); 4811 } 4812 4813 ImDrawFlags CalcRoundingFlagsForRectInRect(ImRect r_in, ImRect r_outer, float threshold) @trusted 4814 { 4815 return igCalcRoundingFlagsForRectInRect(r_in, r_outer, threshold); 4816 } 4817 4818 /++ 4819 + Widgets: Text 4820 +/ 4821 void TextEx(const(char)* text) @trusted 4822 { 4823 igTextEx(text); 4824 } 4825 4826 void TextExEx(const(char)* text, const(char)* text_end, ImGuiTextFlags flags) @trusted 4827 { 4828 igTextExEx(text, text_end, flags); 4829 } 4830 4831 alias TextAligned = igTextAligned; 4832 4833 alias TextAlignedV = igTextAlignedV; 4834 4835 /++ 4836 + Widgets 4837 +/ 4838 bool ButtonWithFlags(const(char)* label) @trusted 4839 { 4840 return igButtonWithFlags(label); 4841 } 4842 4843 bool ButtonWithFlagsEx(const(char)* label, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted 4844 { 4845 return igButtonWithFlagsEx(label, size_arg, flags); 4846 } 4847 4848 bool ArrowButtonEx(const(char)* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted 4849 { 4850 return igArrowButtonEx(str_id, dir, size_arg, flags); 4851 } 4852 4853 bool ImageButtonWithFlags(ImGuiID id, ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 bg_col, ImVec4 tint_col, ImGuiButtonFlags flags) @trusted 4854 { 4855 return igImageButtonWithFlags(id, tex_ref, image_size, uv0, uv1, bg_col, tint_col, flags); 4856 } 4857 4858 void SeparatorEx(ImGuiSeparatorFlags flags) @trusted 4859 { 4860 igSeparatorEx(flags); 4861 } 4862 4863 void SeparatorExEx(ImGuiSeparatorFlags flags, float thickness) @trusted 4864 { 4865 igSeparatorExEx(flags, thickness); 4866 } 4867 4868 void SeparatorTextEx(ImGuiID id, const(char)* label, const(char)* label_end, float extra_width) @trusted 4869 { 4870 igSeparatorTextEx(id, label, label_end, extra_width); 4871 } 4872 4873 bool CheckboxFlagsImS64Ptr(const(char)* label, scope ImS64* flags, ImS64 flags_value) @trusted 4874 { 4875 return igCheckboxFlagsImS64Ptr(label, flags, flags_value); 4876 } 4877 4878 bool CheckboxFlagsImU64Ptr(const(char)* label, scope ImU64* flags, ImU64 flags_value) @trusted 4879 { 4880 return igCheckboxFlagsImU64Ptr(label, flags, flags_value); 4881 } 4882 4883 /++ 4884 + Widgets: Window Decorations 4885 +/ 4886 bool CloseButton(ImGuiID id, ImVec2 pos) @trusted 4887 { 4888 return igCloseButton(id, pos); 4889 } 4890 4891 bool CollapseButton(ImGuiID id, ImVec2 pos) @trusted 4892 { 4893 return igCollapseButton(id, pos); 4894 } 4895 4896 void Scrollbar(ImGuiAxis axis) @trusted 4897 { 4898 igScrollbar(axis); 4899 } 4900 4901 bool ScrollbarEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v) @trusted 4902 { 4903 return igScrollbarEx(bb, id, axis, p_scroll_v, avail_v, contents_v); 4904 } 4905 4906 bool ScrollbarExEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags draw_rounding_flags) @trusted 4907 { 4908 return igScrollbarExEx(bb, id, axis, p_scroll_v, avail_v, contents_v, draw_rounding_flags); 4909 } 4910 4911 ImRect GetWindowScrollbarRect(scope ImGuiWindow* window, ImGuiAxis axis) @trusted 4912 { 4913 return igGetWindowScrollbarRect(window, axis); 4914 } 4915 4916 ImGuiID GetWindowScrollbarID(scope ImGuiWindow* window, ImGuiAxis axis) @trusted 4917 { 4918 return igGetWindowScrollbarID(window, axis); 4919 } 4920 4921 ImGuiID GetWindowResizeCornerID(scope ImGuiWindow* window, int n) @trusted 4922 { 4923 return igGetWindowResizeCornerID(window, n); 4924 } 4925 4926 ImGuiID GetWindowResizeBorderID(scope ImGuiWindow* window, ImGuiDir dir) @trusted 4927 { 4928 return igGetWindowResizeBorderID(window, dir); 4929 } 4930 4931 void ExtendHitBoxWhenNearViewportEdge(scope ImGuiWindow* window, scope ImRect* bb, float threshold, ImGuiAxis axis) @trusted 4932 { 4933 igExtendHitBoxWhenNearViewportEdge(window, bb, threshold, axis); 4934 } 4935 4936 /++ 4937 + Widgets lowlevel behaviors 4938 +/ 4939 bool ButtonBehavior(ImRect bb, ImGuiID id, scope bool* out_hovered, scope bool* out_held, ImGuiButtonFlags flags) @trusted 4940 { 4941 return igButtonBehavior(bb, id, out_hovered, out_held, flags); 4942 } 4943 4944 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 4945 { 4946 return igDragBehavior(id, data_type, p_v, v_speed, p_min, p_max, format, flags); 4947 } 4948 4949 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 4950 { 4951 return igSliderBehavior(bb, id, data_type, p_v, p_min, p_max, format, flags, out_grab_bb); 4952 } 4953 4954 bool SplitterBehavior(ImRect bb, ImGuiID id, ImGuiAxis axis, scope float* size1, scope float* size2, float min_size1, float min_size2) @trusted 4955 { 4956 return igSplitterBehavior(bb, id, axis, size1, size2, min_size1, min_size2); 4957 } 4958 4959 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 4960 { 4961 return igSplitterBehaviorEx(bb, id, axis, size1, size2, min_size1, min_size2, hover_extend, hover_visibility_delay, bg_col); 4962 } 4963 4964 /++ 4965 + Widgets: Tree Nodes 4966 +/ 4967 bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label) @trusted 4968 { 4969 return igTreeNodeBehavior(id, flags, label); 4970 } 4971 4972 bool TreeNodeBehaviorEx(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label, const(char)* label_end) @trusted 4973 { 4974 return igTreeNodeBehaviorEx(id, flags, label, label_end); 4975 } 4976 4977 void TreeNodeDrawLineToChildNode(ImVec2 target_pos) @trusted 4978 { 4979 igTreeNodeDrawLineToChildNode(target_pos); 4980 } 4981 4982 void TreeNodeDrawLineToTreePop(scope ImGuiTreeNodeStackData* data) @trusted 4983 { 4984 igTreeNodeDrawLineToTreePop(data); 4985 } 4986 4987 void TreePushOverrideID(ImGuiID id) @trusted 4988 { 4989 igTreePushOverrideID(id); 4990 } 4991 4992 void TreeNodeSetOpen(ImGuiID storage_id, bool open) @trusted 4993 { 4994 igTreeNodeSetOpen(storage_id, open); 4995 } 4996 4997 bool TreeNodeUpdateNextOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags) @trusted 4998 { 4999 return igTreeNodeUpdateNextOpen(storage_id, flags); 5000 } 5001 5002 /++ 5003 + Data type helpers 5004 +/ 5005 const(ImGuiDataTypeInfo)* DataTypeGetInfo(ImGuiDataType data_type) @trusted 5006 { 5007 return igDataTypeGetInfo(data_type); 5008 } 5009 5010 int DataTypeFormatString(scope char* buf, int buf_size, ImGuiDataType data_type, scope const(void)* p_data, const(char)* format) @trusted 5011 { 5012 return igDataTypeFormatString(buf, buf_size, data_type, p_data, format); 5013 } 5014 5015 void DataTypeApplyOp(ImGuiDataType data_type, int op, scope void* output, scope const(void)* arg_1, scope const(void)* arg_2) @trusted 5016 { 5017 igDataTypeApplyOp(data_type, op, output, arg_1, arg_2); 5018 } 5019 5020 bool DataTypeApplyFromText(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted 5021 { 5022 return igDataTypeApplyFromText(buf, data_type, p_data, format); 5023 } 5024 5025 bool DataTypeApplyFromTextEx(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format, scope void* p_data_when_empty) @trusted 5026 { 5027 return igDataTypeApplyFromTextEx(buf, data_type, p_data, format, p_data_when_empty); 5028 } 5029 5030 int DataTypeCompare(ImGuiDataType data_type, scope const(void)* arg_1, scope const(void)* arg_2) @trusted 5031 { 5032 return igDataTypeCompare(data_type, arg_1, arg_2); 5033 } 5034 5035 bool DataTypeClamp(ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max) @trusted 5036 { 5037 return igDataTypeClamp(data_type, p_data, p_min, p_max); 5038 } 5039 5040 bool DataTypeIsZero(ImGuiDataType data_type, scope const(void)* p_data) @trusted 5041 { 5042 return igDataTypeIsZero(data_type, p_data); 5043 } 5044 5045 /++ 5046 + InputText 5047 +/ 5048 bool InputTextWithHintAndSize(const(char)* label, const(char)* hint, scope char* buf, int buf_size, ImVec2 size_arg, ImGuiInputTextFlags flags) @trusted 5049 { 5050 return igInputTextWithHintAndSize(label, hint, buf, buf_size, size_arg, flags); 5051 } 5052 5053 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 5054 { 5055 return igInputTextWithHintAndSizeEx(label, hint, buf, buf_size, size_arg, flags, callback, user_data); 5056 } 5057 5058 void InputTextDeactivateHook(ImGuiID id) @trusted 5059 { 5060 igInputTextDeactivateHook(id); 5061 } 5062 5063 bool TempInputText(ImRect bb, ImGuiID id, const(char)* label, scope char* buf, size_t buf_size, ImGuiInputTextFlags flags) @trusted 5064 { 5065 return igTempInputText(bb, id, label, buf, buf_size, flags); 5066 } 5067 5068 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 5069 { 5070 return igTempInputTextEx(bb, id, label, buf, buf_size, flags, callback, user_data); 5071 } 5072 5073 bool TempInputScalar(ImRect bb, ImGuiID id, const(char)* label, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted 5074 { 5075 return igTempInputScalar(bb, id, label, data_type, p_data, format); 5076 } 5077 5078 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 5079 { 5080 return igTempInputScalarEx(bb, id, label, data_type, p_data, format, p_clamp_min, p_clamp_max); 5081 } 5082 5083 bool TempInputIsActive(ImGuiID id) @trusted 5084 { 5085 return igTempInputIsActive(id); 5086 } 5087 5088 void SetNextItemRefVal(ImGuiDataType data_type, scope void* p_data) @trusted 5089 { 5090 igSetNextItemRefVal(data_type, p_data); 5091 } 5092 5093 bool IsItemActiveAsInputText() @trusted 5094 { 5095 return igIsItemActiveAsInputText(); 5096 } 5097 5098 /++ 5099 + Color 5100 +/ 5101 void ColorTooltip(const(char)* text, scope const(float)* col, ImGuiColorEditFlags flags) @trusted 5102 { 5103 igColorTooltip(text, col, flags); 5104 } 5105 5106 void ColorEditOptionsPopup(scope const(float)* col, ImGuiColorEditFlags flags) @trusted 5107 { 5108 igColorEditOptionsPopup(col, flags); 5109 } 5110 5111 void ColorPickerOptionsPopup(scope const(float)* ref_col, ImGuiColorEditFlags flags) @trusted 5112 { 5113 igColorPickerOptionsPopup(ref_col, flags); 5114 } 5115 5116 void SetNextItemColorMarker(ImU32 col) @trusted 5117 { 5118 igSetNextItemColorMarker(col); 5119 } 5120 5121 /++ 5122 + Plot 5123 +/ 5124 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 5125 { 5126 return igPlotEx(plot_type, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, size_arg); 5127 } 5128 5129 /++ 5130 + Shade functions (write over already created vertices) 5131 +/ 5132 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 5133 { 5134 igShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col0, col1); 5135 } 5136 5137 alias ShadeVertsLinearUV = igShadeVertsLinearUV; 5138 5139 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 5140 { 5141 igShadeVertsTransformPos(draw_list, vert_start_idx, vert_end_idx, pivot_in, cos_a, sin_a, pivot_out); 5142 } 5143 5144 /++ 5145 + Garbage collection 5146 +/ 5147 void GcCompactTransientMiscBuffers() @trusted 5148 { 5149 igGcCompactTransientMiscBuffers(); 5150 } 5151 5152 void GcCompactTransientWindowBuffers(scope ImGuiWindow* window) @trusted 5153 { 5154 igGcCompactTransientWindowBuffers(window); 5155 } 5156 5157 void GcAwakeTransientWindowBuffers(scope ImGuiWindow* window) @trusted 5158 { 5159 igGcAwakeTransientWindowBuffers(window); 5160 } 5161 5162 /++ 5163 + Error handling, State Recovery 5164 +/ 5165 bool ErrorLog(const(char)* msg) @trusted 5166 { 5167 return igErrorLog(msg); 5168 } 5169 5170 void ErrorRecoveryStoreState(scope ImGuiErrorRecoveryState* state_out) @trusted 5171 { 5172 igErrorRecoveryStoreState(state_out); 5173 } 5174 5175 void ErrorRecoveryTryToRecoverState(scope ImGuiErrorRecoveryState* state_in) @trusted 5176 { 5177 igErrorRecoveryTryToRecoverState(state_in); 5178 } 5179 5180 void ErrorRecoveryTryToRecoverWindowState(scope ImGuiErrorRecoveryState* state_in) @trusted 5181 { 5182 igErrorRecoveryTryToRecoverWindowState(state_in); 5183 } 5184 5185 void ErrorCheckUsingSetCursorPosToExtendParentBoundaries() @trusted 5186 { 5187 igErrorCheckUsingSetCursorPosToExtendParentBoundaries(); 5188 } 5189 5190 void ErrorCheckEndFrameFinalizeErrorTooltip() @trusted 5191 { 5192 igErrorCheckEndFrameFinalizeErrorTooltip(); 5193 } 5194 5195 bool BeginErrorTooltip() @trusted 5196 { 5197 return igBeginErrorTooltip(); 5198 } 5199 5200 void EndErrorTooltip() @trusted 5201 { 5202 igEndErrorTooltip(); 5203 } 5204 5205 /++ 5206 + Demo Doc Marker for e.g. imgui_explorer 5207 +/ 5208 void DemoMarker(const(char)* file, int line, const(char)* section) @trusted 5209 { 5210 igDemoMarker(file, line, section); 5211 } 5212 5213 /++ 5214 + Debug Tools 5215 +/ 5216 void DebugAllocHook(scope ImGuiDebugAllocInfo* info, int frame_count, scope void* ptr, size_t size) @trusted 5217 { 5218 igDebugAllocHook(info, frame_count, ptr, size); 5219 } 5220 5221 void DebugDrawCursorPos() @trusted 5222 { 5223 igDebugDrawCursorPos(); 5224 } 5225 5226 void DebugDrawCursorPosEx(ImU32 col) @trusted 5227 { 5228 igDebugDrawCursorPosEx(col); 5229 } 5230 5231 void DebugDrawLineExtents() @trusted 5232 { 5233 igDebugDrawLineExtents(); 5234 } 5235 5236 void DebugDrawLineExtentsEx(ImU32 col) @trusted 5237 { 5238 igDebugDrawLineExtentsEx(col); 5239 } 5240 5241 void DebugDrawItemRect() @trusted 5242 { 5243 igDebugDrawItemRect(); 5244 } 5245 5246 void DebugDrawItemRectEx(ImU32 col) @trusted 5247 { 5248 igDebugDrawItemRectEx(col); 5249 } 5250 5251 void DebugTextUnformattedWithLocateItem(const(char)* line_begin, const(char)* line_end) @trusted 5252 { 5253 igDebugTextUnformattedWithLocateItem(line_begin, line_end); 5254 } 5255 5256 void DebugLocateItem(ImGuiID target_id) @trusted 5257 { 5258 igDebugLocateItem(target_id); 5259 } 5260 5261 void DebugLocateItemOnHover(ImGuiID target_id) @trusted 5262 { 5263 igDebugLocateItemOnHover(target_id); 5264 } 5265 5266 void DebugLocateItemResolveWithLastItem() @trusted 5267 { 5268 igDebugLocateItemResolveWithLastItem(); 5269 } 5270 5271 void DebugBreakClearData() @trusted 5272 { 5273 igDebugBreakClearData(); 5274 } 5275 5276 bool DebugBreakButton(const(char)* label, const(char)* description_of_location) @trusted 5277 { 5278 return igDebugBreakButton(label, description_of_location); 5279 } 5280 5281 void DebugBreakButtonTooltip(bool keyboard_only, const(char)* description_of_location) @trusted 5282 { 5283 igDebugBreakButtonTooltip(keyboard_only, description_of_location); 5284 } 5285 5286 void ShowFontAtlas(scope ImFontAtlas* atlas) @trusted 5287 { 5288 igShowFontAtlas(atlas); 5289 } 5290 5291 ImU64 DebugTextureIDToU64(ImTextureID tex_id) @trusted 5292 { 5293 return igDebugTextureIDToU64(tex_id); 5294 } 5295 5296 void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, scope const(void)* data_id, scope const(void)* data_id_end) @trusted 5297 { 5298 igDebugHookIdInfo(id, data_type, data_id, data_id_end); 5299 } 5300 5301 void DebugNodeColumns(scope ImGuiOldColumns* columns) @trusted 5302 { 5303 igDebugNodeColumns(columns); 5304 } 5305 5306 void DebugNodeDrawList(scope ImGuiWindow* window, scope ImGuiViewportP* viewport, scope ImDrawList* draw_list, const(char)* label) @trusted 5307 { 5308 igDebugNodeDrawList(window, viewport, draw_list, label); 5309 } 5310 5311 void DebugNodeDrawCmdShowMeshAndBoundingBox(scope ImDrawList* out_draw_list, scope ImDrawList* draw_list, scope ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb) @trusted 5312 { 5313 igDebugNodeDrawCmdShowMeshAndBoundingBox(out_draw_list, draw_list, draw_cmd, show_mesh, show_aabb); 5314 } 5315 5316 void DebugNodeFont(scope ImFont* font) @trusted 5317 { 5318 igDebugNodeFont(font); 5319 } 5320 5321 void DebugNodeFontGlyphsForSrcMask(scope ImFont* font, scope ImFontBaked* baked, int src_mask) @trusted 5322 { 5323 igDebugNodeFontGlyphsForSrcMask(font, baked, src_mask); 5324 } 5325 5326 void DebugNodeFontGlyph(scope ImFont* font, scope ImFontGlyph* glyph) @trusted 5327 { 5328 igDebugNodeFontGlyph(font, glyph); 5329 } 5330 5331 void DebugNodeTexture(scope ImTextureData* tex, int int_id) @trusted 5332 { 5333 igDebugNodeTexture(tex, int_id); 5334 } 5335 5336 void DebugNodeTextureEx(scope ImTextureData* tex, int int_id, scope ImFontAtlasRect* highlight_rect) @trusted 5337 { 5338 igDebugNodeTextureEx(tex, int_id, highlight_rect); 5339 } 5340 5341 void DebugNodeStorage(scope ImGuiStorage* storage, const(char)* label) @trusted 5342 { 5343 igDebugNodeStorage(storage, label); 5344 } 5345 5346 void DebugNodeTabBar(scope ImGuiTabBar* tab_bar, const(char)* label) @trusted 5347 { 5348 igDebugNodeTabBar(tab_bar, label); 5349 } 5350 5351 void DebugNodeTable(scope ImGuiTable* table) @trusted 5352 { 5353 igDebugNodeTable(table); 5354 } 5355 5356 void DebugNodeTableSettings(scope ImGuiTableSettings* settings) @trusted 5357 { 5358 igDebugNodeTableSettings(settings); 5359 } 5360 5361 void DebugNodeTypingSelectState(scope ImGuiTypingSelectState* state) @trusted 5362 { 5363 igDebugNodeTypingSelectState(state); 5364 } 5365 5366 void DebugNodeMultiSelectState(scope ImGuiMultiSelectState* state) @trusted 5367 { 5368 igDebugNodeMultiSelectState(state); 5369 } 5370 5371 void DebugNodeWindow(scope ImGuiWindow* window, const(char)* label) @trusted 5372 { 5373 igDebugNodeWindow(window, label); 5374 } 5375 5376 void DebugNodeWindowSettings(scope ImGuiWindowSettings* settings) @trusted 5377 { 5378 igDebugNodeWindowSettings(settings); 5379 } 5380 5381 void DebugNodeWindowsList(scope ImVector_ImGuiWindowPtr* windows, const(char)* label) @trusted 5382 { 5383 igDebugNodeWindowsList(windows, label); 5384 } 5385 5386 void DebugNodeWindowsListByBeginStackParent(scope ImGuiWindow** windows, int windows_size, scope ImGuiWindow* parent_in_begin_stack) @trusted 5387 { 5388 igDebugNodeWindowsListByBeginStackParent(windows, windows_size, parent_in_begin_stack); 5389 } 5390 5391 void DebugNodeViewport(scope ImGuiViewportP* viewport) @trusted 5392 { 5393 igDebugNodeViewport(viewport); 5394 } 5395 5396 void DebugRenderKeyboardPreview(scope ImDrawList* draw_list) @trusted 5397 { 5398 igDebugRenderKeyboardPreview(draw_list); 5399 } 5400 5401 void DebugRenderViewportThumbnail(scope ImDrawList* draw_list, scope ImGuiViewportP* viewport, ImRect bb) @trusted 5402 { 5403 igDebugRenderViewportThumbnail(draw_list, viewport, bb); 5404 }