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