1 // Generated on 2025-07-13 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 + static 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 + static 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 UpdateMouseMovingWindowNewFrame() @trusted 3185 { 3186 igUpdateMouseMovingWindowNewFrame(); 3187 } 3188 3189 void UpdateMouseMovingWindowEndFrame() @trusted 3190 { 3191 igUpdateMouseMovingWindowEndFrame(); 3192 } 3193 3194 /++ 3195 + Generic context hooks 3196 +/ 3197 ImGuiID AddContextHook(ImGuiContext* context, ImGuiContextHook* hook) @trusted 3198 { 3199 return igAddContextHook(context, hook); 3200 } 3201 3202 void RemoveContextHook(scope ImGuiContext* context, ImGuiID hook_to_remove) @trusted 3203 { 3204 igRemoveContextHook(context, hook_to_remove); 3205 } 3206 3207 void CallContextHooks(scope ImGuiContext* context, ImGuiContextHookType type) @trusted 3208 { 3209 igCallContextHooks(context, type); 3210 } 3211 3212 /++ 3213 + Viewports 3214 +/ 3215 void ScaleWindowsInViewport(scope ImGuiViewportP* viewport, float scale) @trusted 3216 { 3217 igScaleWindowsInViewport(viewport, scale); 3218 } 3219 3220 void SetWindowViewport(scope ImGuiWindow* window, scope ImGuiViewportP* viewport) @trusted 3221 { 3222 igSetWindowViewport(window, viewport); 3223 } 3224 3225 /++ 3226 + Settings 3227 +/ 3228 void MarkIniSettingsDirty() @trusted 3229 { 3230 igMarkIniSettingsDirty(); 3231 } 3232 3233 void MarkIniSettingsDirtyImGuiWindowPtr(scope ImGuiWindow* window) @trusted 3234 { 3235 igMarkIniSettingsDirtyImGuiWindowPtr(window); 3236 } 3237 3238 void ClearIniSettings() @trusted 3239 { 3240 igClearIniSettings(); 3241 } 3242 3243 void AddSettingsHandler(ImGuiSettingsHandler* handler) @trusted 3244 { 3245 igAddSettingsHandler(handler); 3246 } 3247 3248 void RemoveSettingsHandler(const(char)* type_name) @trusted 3249 { 3250 igRemoveSettingsHandler(type_name); 3251 } 3252 3253 ImGuiSettingsHandler* FindSettingsHandler(const(char)* type_name) @trusted 3254 { 3255 return igFindSettingsHandler(type_name); 3256 } 3257 3258 /++ 3259 + Settings Windows 3260 +/ 3261 ImGuiWindowSettings* CreateNewWindowSettings(const(char)* name) @trusted 3262 { 3263 return igCreateNewWindowSettings(name); 3264 } 3265 3266 ImGuiWindowSettings* FindWindowSettingsByID(ImGuiID id) @trusted 3267 { 3268 return igFindWindowSettingsByID(id); 3269 } 3270 3271 ImGuiWindowSettings* FindWindowSettingsByWindow(scope ImGuiWindow* window) @trusted 3272 { 3273 return igFindWindowSettingsByWindow(window); 3274 } 3275 3276 void ClearWindowSettings(const(char)* name) @trusted 3277 { 3278 igClearWindowSettings(name); 3279 } 3280 3281 /++ 3282 + Localization 3283 +/ 3284 void LocalizeRegisterEntries(ImGuiLocEntry* entries, int count) @trusted 3285 { 3286 igLocalizeRegisterEntries(entries, count); 3287 } 3288 3289 const(char)* LocalizeGetMsg(ImGuiLocKey key) @trusted 3290 { 3291 return igLocalizeGetMsg(key); 3292 } 3293 3294 /++ 3295 + Scrolling 3296 +/ 3297 void SetScrollXImGuiWindowPtr(scope ImGuiWindow* window, float scroll_x) @trusted 3298 { 3299 igSetScrollXImGuiWindowPtr(window, scroll_x); 3300 } 3301 3302 void SetScrollYImGuiWindowPtr(scope ImGuiWindow* window, float scroll_y) @trusted 3303 { 3304 igSetScrollYImGuiWindowPtr(window, scroll_y); 3305 } 3306 3307 void SetScrollFromPosXImGuiWindowPtr(scope ImGuiWindow* window, float local_x, float center_x_ratio) @trusted 3308 { 3309 igSetScrollFromPosXImGuiWindowPtr(window, local_x, center_x_ratio); 3310 } 3311 3312 void SetScrollFromPosYImGuiWindowPtr(scope ImGuiWindow* window, float local_y, float center_y_ratio) @trusted 3313 { 3314 igSetScrollFromPosYImGuiWindowPtr(window, local_y, center_y_ratio); 3315 } 3316 3317 /++ 3318 + Early workinprogress API (ScrollToItem() will become public) 3319 +/ 3320 void ScrollToItem(ImGuiScrollFlags flags) @trusted 3321 { 3322 igScrollToItem(flags); 3323 } 3324 3325 void ScrollToRect(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted 3326 { 3327 igScrollToRect(window, rect, flags); 3328 } 3329 3330 ImVec2 ScrollToRectEx(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted 3331 { 3332 return igScrollToRectEx(window, rect, flags); 3333 } 3334 3335 /++ 3336 + #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 3337 +/ 3338 void ScrollToBringRectIntoView(scope ImGuiWindow* window, ImRect rect) @trusted 3339 { 3340 igScrollToBringRectIntoView(window, rect); 3341 } 3342 3343 /++ 3344 + Basic Accessors 3345 +/ 3346 ImGuiItemStatusFlags GetItemStatusFlags() @trusted 3347 { 3348 return igGetItemStatusFlags(); 3349 } 3350 3351 ImGuiItemFlags GetItemFlags() @trusted 3352 { 3353 return igGetItemFlags(); 3354 } 3355 3356 ImGuiID GetActiveID() @trusted 3357 { 3358 return igGetActiveID(); 3359 } 3360 3361 ImGuiID GetFocusID() @trusted 3362 { 3363 return igGetFocusID(); 3364 } 3365 3366 void SetActiveID(ImGuiID id, scope ImGuiWindow* window) @trusted 3367 { 3368 igSetActiveID(id, window); 3369 } 3370 3371 void SetFocusID(ImGuiID id, scope ImGuiWindow* window) @trusted 3372 { 3373 igSetFocusID(id, window); 3374 } 3375 3376 void ClearActiveID() @trusted 3377 { 3378 igClearActiveID(); 3379 } 3380 3381 ImGuiID GetHoveredID() @trusted 3382 { 3383 return igGetHoveredID(); 3384 } 3385 3386 void SetHoveredID(ImGuiID id) @trusted 3387 { 3388 igSetHoveredID(id); 3389 } 3390 3391 void KeepAliveID(ImGuiID id) @trusted 3392 { 3393 igKeepAliveID(id); 3394 } 3395 3396 void MarkItemEdited(ImGuiID id) @trusted 3397 { 3398 igMarkItemEdited(id); 3399 } 3400 3401 void PushOverrideID(ImGuiID id) @trusted 3402 { 3403 igPushOverrideID(id); 3404 } 3405 3406 ImGuiID GetIDWithSeedStr(const(char)* str_id_begin, const(char)* str_id_end, ImGuiID seed) @trusted 3407 { 3408 return igGetIDWithSeedStr(str_id_begin, str_id_end, seed); 3409 } 3410 3411 ImGuiID GetIDWithSeed(int n, ImGuiID seed) @trusted 3412 { 3413 return igGetIDWithSeed(n, seed); 3414 } 3415 3416 /++ 3417 + Basic Helpers for widget code 3418 +/ 3419 void ItemSize(ImVec2 size) @trusted 3420 { 3421 igItemSize(size); 3422 } 3423 3424 void ItemSizeEx(ImVec2 size, float text_baseline_y) @trusted 3425 { 3426 igItemSizeEx(size, text_baseline_y); 3427 } 3428 3429 void ItemSizeImRect(ImRect bb) @trusted 3430 { 3431 igItemSizeImRect(bb); 3432 } 3433 3434 void ItemSizeImRectEx(ImRect bb, float text_baseline_y) @trusted 3435 { 3436 igItemSizeImRectEx(bb, text_baseline_y); 3437 } 3438 3439 bool ItemAdd(ImRect bb, ImGuiID id) @trusted 3440 { 3441 return igItemAdd(bb, id); 3442 } 3443 3444 bool ItemAddEx(ImRect bb, ImGuiID id, ImRect* nav_bb, ImGuiItemFlags extra_flags) @trusted 3445 { 3446 return igItemAddEx(bb, id, nav_bb, extra_flags); 3447 } 3448 3449 bool ItemHoverable(ImRect bb, ImGuiID id, ImGuiItemFlags item_flags) @trusted 3450 { 3451 return igItemHoverable(bb, id, item_flags); 3452 } 3453 3454 bool IsWindowContentHoverable(scope ImGuiWindow* window, ImGuiHoveredFlags flags) @trusted 3455 { 3456 return igIsWindowContentHoverable(window, flags); 3457 } 3458 3459 bool IsClippedEx(ImRect bb, ImGuiID id) @trusted 3460 { 3461 return igIsClippedEx(bb, id); 3462 } 3463 3464 void SetLastItemData(ImGuiID item_id, ImGuiItemFlags item_flags, ImGuiItemStatusFlags status_flags, ImRect item_rect) @trusted 3465 { 3466 igSetLastItemData(item_id, item_flags, status_flags, item_rect); 3467 } 3468 3469 ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h) @trusted 3470 { 3471 return igCalcItemSize(size, default_w, default_h); 3472 } 3473 3474 float CalcWrapWidthForPos(ImVec2 pos, float wrap_pos_x) @trusted 3475 { 3476 return igCalcWrapWidthForPos(pos, wrap_pos_x); 3477 } 3478 3479 void PushMultiItemsWidths(int components, float width_full) @trusted 3480 { 3481 igPushMultiItemsWidths(components, width_full); 3482 } 3483 3484 void ShrinkWidths(scope ImGuiShrinkWidthItem* items, int count, float width_excess) @trusted 3485 { 3486 igShrinkWidths(items, count, width_excess); 3487 } 3488 3489 /++ 3490 + Parameter stacks (shared) 3491 +/ 3492 const(ImGuiStyleVarInfo)* GetStyleVarInfo(ImGuiStyleVar idx) @trusted 3493 { 3494 return igGetStyleVarInfo(idx); 3495 } 3496 3497 void BeginDisabledOverrideReenable() @trusted 3498 { 3499 igBeginDisabledOverrideReenable(); 3500 } 3501 3502 void EndDisabledOverrideReenable() @trusted 3503 { 3504 igEndDisabledOverrideReenable(); 3505 } 3506 3507 /++ 3508 + Logging/Capture 3509 +/ 3510 void LogBegin(ImGuiLogFlags flags, int auto_open_depth) @trusted 3511 { 3512 igLogBegin(flags, auto_open_depth); 3513 } 3514 3515 void LogToBuffer() @trusted 3516 { 3517 igLogToBuffer(); 3518 } 3519 3520 void LogToBufferEx(int auto_open_depth) @trusted 3521 { 3522 igLogToBufferEx(auto_open_depth); 3523 } 3524 3525 void LogRenderedText(ImVec2* ref_pos, const(char)* text) @trusted 3526 { 3527 igLogRenderedText(ref_pos, text); 3528 } 3529 3530 void LogRenderedTextEx(ImVec2* ref_pos, const(char)* text, const(char)* text_end) @trusted 3531 { 3532 igLogRenderedTextEx(ref_pos, text, text_end); 3533 } 3534 3535 void LogSetNextTextDecoration(const(char)* prefix, const(char)* suffix) @trusted 3536 { 3537 igLogSetNextTextDecoration(prefix, suffix); 3538 } 3539 3540 /++ 3541 + Childs 3542 +/ 3543 bool BeginChildEx(const(char)* name, ImGuiID id, ImVec2 size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) @trusted 3544 { 3545 return igBeginChildEx(name, id, size_arg, child_flags, window_flags); 3546 } 3547 3548 /++ 3549 + Popups, Modals 3550 +/ 3551 bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_window_flags) @trusted 3552 { 3553 return igBeginPopupEx(id, extra_window_flags); 3554 } 3555 3556 bool BeginPopupMenuEx(ImGuiID id, const(char)* label, ImGuiWindowFlags extra_window_flags) @trusted 3557 { 3558 return igBeginPopupMenuEx(id, label, extra_window_flags); 3559 } 3560 3561 void OpenPopupEx(ImGuiID id) @trusted 3562 { 3563 igOpenPopupEx(id); 3564 } 3565 3566 void OpenPopupExEx(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 3567 { 3568 igOpenPopupExEx(id, popup_flags); 3569 } 3570 3571 void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup) @trusted 3572 { 3573 igClosePopupToLevel(remaining, restore_focus_to_window_under_popup); 3574 } 3575 3576 void ClosePopupsOverWindow(scope ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup) @trusted 3577 { 3578 igClosePopupsOverWindow(ref_window, restore_focus_to_window_under_popup); 3579 } 3580 3581 void ClosePopupsExceptModals() @trusted 3582 { 3583 igClosePopupsExceptModals(); 3584 } 3585 3586 bool IsPopupOpenID(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted 3587 { 3588 return igIsPopupOpenID(id, popup_flags); 3589 } 3590 3591 ImRect GetPopupAllowedExtentRect(scope ImGuiWindow* window) @trusted 3592 { 3593 return igGetPopupAllowedExtentRect(window); 3594 } 3595 3596 ImGuiWindow* GetTopMostPopupModal() @trusted 3597 { 3598 return igGetTopMostPopupModal(); 3599 } 3600 3601 ImGuiWindow* GetTopMostAndVisiblePopupModal() @trusted 3602 { 3603 return igGetTopMostAndVisiblePopupModal(); 3604 } 3605 3606 ImGuiWindow* FindBlockingModal(scope ImGuiWindow* window) @trusted 3607 { 3608 return igFindBlockingModal(window); 3609 } 3610 3611 ImVec2 FindBestWindowPosForPopup(scope ImGuiWindow* window) @trusted 3612 { 3613 return igFindBestWindowPosForPopup(window); 3614 } 3615 3616 ImVec2 FindBestWindowPosForPopupEx(ImVec2 ref_pos, ImVec2 size, scope ImGuiDir* last_dir, ImRect r_outer, ImRect r_avoid, ImGuiPopupPositionPolicy policy) @trusted 3617 { 3618 return igFindBestWindowPosForPopupEx(ref_pos, size, last_dir, r_outer, r_avoid, policy); 3619 } 3620 3621 /++ 3622 + Tooltips 3623 +/ 3624 bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags) @trusted 3625 { 3626 return igBeginTooltipEx(tooltip_flags, extra_window_flags); 3627 } 3628 3629 bool BeginTooltipHidden() @trusted 3630 { 3631 return igBeginTooltipHidden(); 3632 } 3633 3634 /++ 3635 + Menus 3636 +/ 3637 bool BeginViewportSideBar(const(char)* name, scope ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags) @trusted 3638 { 3639 return igBeginViewportSideBar(name, viewport, dir, size, window_flags); 3640 } 3641 3642 bool BeginMenuWithIcon(const(char)* label, const(char)* icon) @trusted 3643 { 3644 return igBeginMenuWithIcon(label, icon); 3645 } 3646 3647 bool BeginMenuWithIconEx(const(char)* label, const(char)* icon, bool enabled) @trusted 3648 { 3649 return igBeginMenuWithIconEx(label, icon, enabled); 3650 } 3651 3652 bool MenuItemWithIcon(const(char)* label, const(char)* icon) @trusted 3653 { 3654 return igMenuItemWithIcon(label, icon); 3655 } 3656 3657 bool MenuItemWithIconEx(const(char)* label, const(char)* icon, const(char)* shortcut, bool selected, bool enabled) @trusted 3658 { 3659 return igMenuItemWithIconEx(label, icon, shortcut, selected, enabled); 3660 } 3661 3662 /++ 3663 + Combos 3664 +/ 3665 bool BeginComboPopup(ImGuiID popup_id, ImRect bb, ImGuiComboFlags flags) @trusted 3666 { 3667 return igBeginComboPopup(popup_id, bb, flags); 3668 } 3669 3670 bool BeginComboPreview() @trusted 3671 { 3672 return igBeginComboPreview(); 3673 } 3674 3675 void EndComboPreview() @trusted 3676 { 3677 igEndComboPreview(); 3678 } 3679 3680 /++ 3681 + Keyboard/Gamepad Navigation 3682 +/ 3683 void NavInitWindow(scope ImGuiWindow* window, bool force_reinit) @trusted 3684 { 3685 igNavInitWindow(window, force_reinit); 3686 } 3687 3688 void NavInitRequestApplyResult() @trusted 3689 { 3690 igNavInitRequestApplyResult(); 3691 } 3692 3693 bool NavMoveRequestButNoResultYet() @trusted 3694 { 3695 return igNavMoveRequestButNoResultYet(); 3696 } 3697 3698 void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted 3699 { 3700 igNavMoveRequestSubmit(move_dir, clip_dir, move_flags, scroll_flags); 3701 } 3702 3703 void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted 3704 { 3705 igNavMoveRequestForward(move_dir, clip_dir, move_flags, scroll_flags); 3706 } 3707 3708 void NavMoveRequestResolveWithLastItem(scope ImGuiNavItemData* result) @trusted 3709 { 3710 igNavMoveRequestResolveWithLastItem(result); 3711 } 3712 3713 void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiTreeNodeStackData* tree_node_data) @trusted 3714 { 3715 igNavMoveRequestResolveWithPastTreeNode(result, tree_node_data); 3716 } 3717 3718 void NavMoveRequestCancel() @trusted 3719 { 3720 igNavMoveRequestCancel(); 3721 } 3722 3723 void NavMoveRequestApplyResult() @trusted 3724 { 3725 igNavMoveRequestApplyResult(); 3726 } 3727 3728 void NavMoveRequestTryWrapping(scope ImGuiWindow* window, ImGuiNavMoveFlags move_flags) @trusted 3729 { 3730 igNavMoveRequestTryWrapping(window, move_flags); 3731 } 3732 3733 void NavHighlightActivated(ImGuiID id) @trusted 3734 { 3735 igNavHighlightActivated(id); 3736 } 3737 3738 void NavClearPreferredPosForAxis(ImGuiAxis axis) @trusted 3739 { 3740 igNavClearPreferredPosForAxis(axis); 3741 } 3742 3743 void SetNavCursorVisibleAfterMove() @trusted 3744 { 3745 igSetNavCursorVisibleAfterMove(); 3746 } 3747 3748 void NavUpdateCurrentWindowIsScrollPushableX() @trusted 3749 { 3750 igNavUpdateCurrentWindowIsScrollPushableX(); 3751 } 3752 3753 void SetNavWindow(scope ImGuiWindow* window) @trusted 3754 { 3755 igSetNavWindow(window); 3756 } 3757 3758 void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, ImRect rect_rel) @trusted 3759 { 3760 igSetNavID(id, nav_layer, focus_scope_id, rect_rel); 3761 } 3762 3763 void SetNavFocusScope(ImGuiID focus_scope_id) @trusted 3764 { 3765 igSetNavFocusScope(focus_scope_id); 3766 } 3767 3768 /++ 3769 + Focus/Activation 3770 + This should be part of a larger set of API: FocusItem(offset = 1), FocusItemByID(id), ActivateItem(offset = 1), ActivateItemByID(id) etc. which are 3771 + 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. 3772 +/ 3773 void FocusItem() @trusted 3774 { 3775 igFocusItem(); 3776 } 3777 3778 void ActivateItemByID(ImGuiID id) @trusted 3779 { 3780 igActivateItemByID(id); 3781 } 3782 3783 /++ 3784 + Inputs 3785 + FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions. 3786 +/ 3787 bool IsNamedKey(ImGuiKey key) @trusted 3788 { 3789 return igIsNamedKey(key); 3790 } 3791 3792 bool IsNamedKeyOrMod(ImGuiKey key) @trusted 3793 { 3794 return igIsNamedKeyOrMod(key); 3795 } 3796 3797 bool IsLegacyKey(ImGuiKey key) @trusted 3798 { 3799 return igIsLegacyKey(key); 3800 } 3801 3802 bool IsKeyboardKey(ImGuiKey key) @trusted 3803 { 3804 return igIsKeyboardKey(key); 3805 } 3806 3807 bool IsGamepadKey(ImGuiKey key) @trusted 3808 { 3809 return igIsGamepadKey(key); 3810 } 3811 3812 bool IsMouseKey(ImGuiKey key) @trusted 3813 { 3814 return igIsMouseKey(key); 3815 } 3816 3817 bool IsAliasKey(ImGuiKey key) @trusted 3818 { 3819 return igIsAliasKey(key); 3820 } 3821 3822 bool IsLRModKey(ImGuiKey key) @trusted 3823 { 3824 return igIsLRModKey(key); 3825 } 3826 3827 ImGuiKeyChord FixupKeyChord(ImGuiKeyChord key_chord) @trusted 3828 { 3829 return igFixupKeyChord(key_chord); 3830 } 3831 3832 ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key) @trusted 3833 { 3834 return igConvertSingleModFlagToKey(key); 3835 } 3836 3837 ImGuiKeyData* GetKeyDataImGuiContextPtr(scope ImGuiContext* ctx, ImGuiKey key) @trusted 3838 { 3839 return igGetKeyDataImGuiContextPtr(ctx, key); 3840 } 3841 3842 ImGuiKeyData* GetKeyData(ImGuiKey key) @trusted 3843 { 3844 return igGetKeyData(key); 3845 } 3846 3847 const(char)* GetKeyChordName(ImGuiKeyChord key_chord) @trusted 3848 { 3849 return igGetKeyChordName(key_chord); 3850 } 3851 3852 ImGuiKey MouseButtonToKey(ImGuiMouseButton button) @trusted 3853 { 3854 return igMouseButtonToKey(button); 3855 } 3856 3857 bool IsMouseDragPastThreshold(ImGuiMouseButton button) @trusted 3858 { 3859 return igIsMouseDragPastThreshold(button); 3860 } 3861 3862 bool IsMouseDragPastThresholdEx(ImGuiMouseButton button, float lock_threshold) @trusted 3863 { 3864 return igIsMouseDragPastThresholdEx(button, lock_threshold); 3865 } 3866 3867 ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down) @trusted 3868 { 3869 return igGetKeyMagnitude2d(key_left, key_right, key_up, key_down); 3870 } 3871 3872 float GetNavTweakPressedAmount(ImGuiAxis axis) @trusted 3873 { 3874 return igGetNavTweakPressedAmount(axis); 3875 } 3876 3877 int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) @trusted 3878 { 3879 return igCalcTypematicRepeatAmount(t0, t1, repeat_delay, repeat_rate); 3880 } 3881 3882 void GetTypematicRepeatRate(ImGuiInputFlags flags, scope float* repeat_delay, scope float* repeat_rate) @trusted 3883 { 3884 igGetTypematicRepeatRate(flags, repeat_delay, repeat_rate); 3885 } 3886 3887 void TeleportMousePos(ImVec2 pos) @trusted 3888 { 3889 igTeleportMousePos(pos); 3890 } 3891 3892 void SetActiveIdUsingAllKeyboardKeys() @trusted 3893 { 3894 igSetActiveIdUsingAllKeyboardKeys(); 3895 } 3896 3897 bool IsActiveIdUsingNavDir(ImGuiDir dir) @trusted 3898 { 3899 return igIsActiveIdUsingNavDir(dir); 3900 } 3901 3902 /++ 3903 + [EXPERIMENTAL] LowLevel: Key/Input Ownership 3904 + The idea is that instead of "eating" a given input, we can link to an owner id. 3905 + Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead). 3906 + Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_NoOwner (== 1) or a custom ID. 3907 + Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0). 3908 + Input ownership is automatically released on the frame after a key is released. Therefore: 3909 + for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case). 3910 + 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). 3911 + 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. 3912 + This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step. 3913 + Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved. 3914 +/ 3915 ImGuiID GetKeyOwner(ImGuiKey key) @trusted 3916 { 3917 return igGetKeyOwner(key); 3918 } 3919 3920 void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted 3921 { 3922 igSetKeyOwner(key, owner_id, flags); 3923 } 3924 3925 void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted 3926 { 3927 igSetKeyOwnersForKeyChord(key, owner_id, flags); 3928 } 3929 3930 void SetItemKeyOwnerImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted 3931 { 3932 igSetItemKeyOwnerImGuiInputFlags(key, flags); 3933 } 3934 3935 bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id) @trusted 3936 { 3937 return igTestKeyOwner(key, owner_id); 3938 } 3939 3940 ImGuiKeyOwnerData* GetKeyOwnerData(scope ImGuiContext* ctx, ImGuiKey key) @trusted 3941 { 3942 return igGetKeyOwnerData(ctx, key); 3943 } 3944 3945 /++ 3946 + [EXPERIMENTAL] HighLevel: Input Access functions w/ support for Key/Input Ownership 3947 + Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag. 3948 + Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0) 3949 + Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'. 3950 + Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease. 3951 + Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API. 3952 +/ 3953 bool IsKeyDownID(ImGuiKey key, ImGuiID owner_id) @trusted 3954 { 3955 return igIsKeyDownID(key, owner_id); 3956 } 3957 3958 bool IsKeyPressedImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted 3959 { 3960 return igIsKeyPressedImGuiInputFlags(key, flags); 3961 } 3962 3963 bool IsKeyPressedImGuiInputFlagsEx(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3964 { 3965 return igIsKeyPressedImGuiInputFlagsEx(key, flags, owner_id); 3966 } 3967 3968 bool IsKeyReleasedID(ImGuiKey key, ImGuiID owner_id) @trusted 3969 { 3970 return igIsKeyReleasedID(key, owner_id); 3971 } 3972 3973 bool IsKeyChordPressedImGuiInputFlags(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted 3974 { 3975 return igIsKeyChordPressedImGuiInputFlags(key_chord, flags); 3976 } 3977 3978 bool IsKeyChordPressedImGuiInputFlagsEx(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3979 { 3980 return igIsKeyChordPressedImGuiInputFlagsEx(key_chord, flags, owner_id); 3981 } 3982 3983 bool IsMouseDownID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 3984 { 3985 return igIsMouseDownID(button, owner_id); 3986 } 3987 3988 bool IsMouseClickedImGuiInputFlags(ImGuiMouseButton button, ImGuiInputFlags flags) @trusted 3989 { 3990 return igIsMouseClickedImGuiInputFlags(button, flags); 3991 } 3992 3993 bool IsMouseClickedImGuiInputFlagsEx(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 3994 { 3995 return igIsMouseClickedImGuiInputFlagsEx(button, flags, owner_id); 3996 } 3997 3998 bool IsMouseReleasedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 3999 { 4000 return igIsMouseReleasedID(button, owner_id); 4001 } 4002 4003 bool IsMouseDoubleClickedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted 4004 { 4005 return igIsMouseDoubleClickedID(button, owner_id); 4006 } 4007 4008 /++ 4009 + Shortcut Testing 4010 + & 4011 + Routing 4012 + Set Shortcut() and SetNextItemShortcut() in imgui.h 4013 + When a policy (except for ImGuiInputFlags_RouteAlways *) is set, Shortcut() will register itself with SetShortcutRouting(), 4014 + allowing the system to decide where to route the input among other routeaware calls. 4015 + (* using ImGuiInputFlags_RouteAlways is roughly equivalent to calling IsKeyChordPressed(key) and bypassing route registration and check) 4016 + When using one of the routing option: 4017 + 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.) 4018 + Routes are requested given a chord (key + modifiers) and a routing policy. 4019 + Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame. 4020 + 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). 4021 + Multiple read sites may use the same owner id can all access the granted route. 4022 + When owner_id is 0 we use the current Focus Scope ID as a owner ID in order to identify our location. 4023 + You can chain two unrelated windows in the focus stack using SetWindowParentWindowForFocusRoute() 4024 + e.g. if you have a tool window associated to a document, and you want document shortcuts to run when the tool is focused. 4025 +/ 4026 bool ShortcutID(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4027 { 4028 return igShortcutID(key_chord, flags, owner_id); 4029 } 4030 4031 bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted 4032 { 4033 return igSetShortcutRouting(key_chord, flags, owner_id); 4034 } 4035 4036 bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id) @trusted 4037 { 4038 return igTestShortcutRouting(key_chord, owner_id); 4039 } 4040 4041 ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord) @trusted 4042 { 4043 return igGetShortcutRoutingData(key_chord); 4044 } 4045 4046 /++ 4047 + [EXPERIMENTAL] Focus Scope 4048 + This is generally used to identify a unique input location (for e.g. a selection set) 4049 + There is one per window (automatically set in Begin), but: 4050 + Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set. 4051 + So in order to identify a set multiple lists in same window may each need a focus scope. 4052 + If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope() 4053 + Shortcut routing also use focus scope as a default location identifier if an owner is not provided. 4054 + We don't use the ID Stack for this as it is common to want them separate. 4055 +/ 4056 void PushFocusScope(ImGuiID id) @trusted 4057 { 4058 igPushFocusScope(id); 4059 } 4060 4061 void PopFocusScope() @trusted 4062 { 4063 igPopFocusScope(); 4064 } 4065 4066 ImGuiID GetCurrentFocusScope() @trusted 4067 { 4068 return igGetCurrentFocusScope(); 4069 } 4070 4071 /++ 4072 + Drag and Drop 4073 +/ 4074 bool IsDragDropActive() @trusted 4075 { 4076 return igIsDragDropActive(); 4077 } 4078 4079 bool BeginDragDropTargetCustom(ImRect bb, ImGuiID id) @trusted 4080 { 4081 return igBeginDragDropTargetCustom(bb, id); 4082 } 4083 4084 void ClearDragDrop() @trusted 4085 { 4086 igClearDragDrop(); 4087 } 4088 4089 bool IsDragDropPayloadBeingAccepted() @trusted 4090 { 4091 return igIsDragDropPayloadBeingAccepted(); 4092 } 4093 4094 void RenderDragDropTargetRect(ImRect bb, ImRect item_clip_rect) @trusted 4095 { 4096 igRenderDragDropTargetRect(bb, item_clip_rect); 4097 } 4098 4099 /++ 4100 + TypingSelect API 4101 + (provide Windows Explorer style "select items by typing partial name" + "cycle through items by typing same letter" feature) 4102 + (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!) 4103 +/ 4104 ImGuiTypingSelectRequest* GetTypingSelectRequest() @trusted 4105 { 4106 return igGetTypingSelectRequest(); 4107 } 4108 4109 ImGuiTypingSelectRequest* GetTypingSelectRequestEx(ImGuiTypingSelectFlags flags) @trusted 4110 { 4111 return igGetTypingSelectRequestEx(flags); 4112 } 4113 4114 int TypingSelectFindMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted 4115 { 4116 return igTypingSelectFindMatch(req, items_count, get_item_name_func, user_data, nav_item_idx); 4117 } 4118 4119 int TypingSelectFindNextSingleCharMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted 4120 { 4121 return igTypingSelectFindNextSingleCharMatch(req, items_count, get_item_name_func, user_data, nav_item_idx); 4122 } 4123 4124 int TypingSelectFindBestLeadingMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data) @trusted 4125 { 4126 return igTypingSelectFindBestLeadingMatch(req, items_count, get_item_name_func, user_data); 4127 } 4128 4129 /++ 4130 + BoxSelect API 4131 +/ 4132 bool BeginBoxSelect(ImRect scope_rect, scope ImGuiWindow* window, ImGuiID box_select_id, ImGuiMultiSelectFlags ms_flags) @trusted 4133 { 4134 return igBeginBoxSelect(scope_rect, window, box_select_id, ms_flags); 4135 } 4136 4137 void EndBoxSelect(ImRect scope_rect, ImGuiMultiSelectFlags ms_flags) @trusted 4138 { 4139 igEndBoxSelect(scope_rect, ms_flags); 4140 } 4141 4142 /++ 4143 + MultiSelect API 4144 +/ 4145 void MultiSelectItemHeader(ImGuiID id, scope bool* p_selected, scope ImGuiButtonFlags* p_button_flags) @trusted 4146 { 4147 igMultiSelectItemHeader(id, p_selected, p_button_flags); 4148 } 4149 4150 void MultiSelectItemFooter(ImGuiID id, scope bool* p_selected, scope bool* p_pressed) @trusted 4151 { 4152 igMultiSelectItemFooter(id, p_selected, p_pressed); 4153 } 4154 4155 void MultiSelectAddSetAll(scope ImGuiMultiSelectTempData* ms, bool selected) @trusted 4156 { 4157 igMultiSelectAddSetAll(ms, selected); 4158 } 4159 4160 void MultiSelectAddSetRange(scope ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item) @trusted 4161 { 4162 igMultiSelectAddSetRange(ms, selected, range_dir, first_item, last_item); 4163 } 4164 4165 ImGuiBoxSelectState* GetBoxSelectState(ImGuiID id) @trusted 4166 { 4167 return igGetBoxSelectState(id); 4168 } 4169 4170 ImGuiMultiSelectState* GetMultiSelectState(ImGuiID id) @trusted 4171 { 4172 return igGetMultiSelectState(id); 4173 } 4174 4175 /++ 4176 + Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API) 4177 +/ 4178 void SetWindowClipRectBeforeSetChannel(scope ImGuiWindow* window, ImRect clip_rect) @trusted 4179 { 4180 igSetWindowClipRectBeforeSetChannel(window, clip_rect); 4181 } 4182 4183 void BeginColumns(const(char)* str_id, int count, ImGuiOldColumnFlags flags) @trusted 4184 { 4185 igBeginColumns(str_id, count, flags); 4186 } 4187 4188 void EndColumns() @trusted 4189 { 4190 igEndColumns(); 4191 } 4192 4193 void PushColumnClipRect(int column_index) @trusted 4194 { 4195 igPushColumnClipRect(column_index); 4196 } 4197 4198 void PushColumnsBackground() @trusted 4199 { 4200 igPushColumnsBackground(); 4201 } 4202 4203 void PopColumnsBackground() @trusted 4204 { 4205 igPopColumnsBackground(); 4206 } 4207 4208 ImGuiID GetColumnsID(const(char)* str_id, int count) @trusted 4209 { 4210 return igGetColumnsID(str_id, count); 4211 } 4212 4213 ImGuiOldColumns* FindOrCreateColumns(scope ImGuiWindow* window, ImGuiID id) @trusted 4214 { 4215 return igFindOrCreateColumns(window, id); 4216 } 4217 4218 float GetColumnOffsetFromNorm(ImGuiOldColumns* columns, float offset_norm) @trusted 4219 { 4220 return igGetColumnOffsetFromNorm(columns, offset_norm); 4221 } 4222 4223 float GetColumnNormFromOffset(ImGuiOldColumns* columns, float offset) @trusted 4224 { 4225 return igGetColumnNormFromOffset(columns, offset); 4226 } 4227 4228 /++ 4229 + Tables: Candidates for public API 4230 +/ 4231 void TableOpenContextMenu() @trusted 4232 { 4233 igTableOpenContextMenu(); 4234 } 4235 4236 void TableOpenContextMenuEx(int column_n) @trusted 4237 { 4238 igTableOpenContextMenuEx(column_n); 4239 } 4240 4241 void TableSetColumnWidth(int column_n, float width) @trusted 4242 { 4243 igTableSetColumnWidth(column_n, width); 4244 } 4245 4246 void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs) @trusted 4247 { 4248 igTableSetColumnSortDirection(column_n, sort_direction, append_to_sort_specs); 4249 } 4250 4251 int TableGetHoveredRow() @trusted 4252 { 4253 return igTableGetHoveredRow(); 4254 } 4255 4256 float TableGetHeaderRowHeight() @trusted 4257 { 4258 return igTableGetHeaderRowHeight(); 4259 } 4260 4261 float TableGetHeaderAngledMaxLabelWidth() @trusted 4262 { 4263 return igTableGetHeaderAngledMaxLabelWidth(); 4264 } 4265 4266 void TablePushBackgroundChannel() @trusted 4267 { 4268 igTablePushBackgroundChannel(); 4269 } 4270 4271 void TablePopBackgroundChannel() @trusted 4272 { 4273 igTablePopBackgroundChannel(); 4274 } 4275 4276 void TablePushColumnChannel(int column_n) @trusted 4277 { 4278 igTablePushColumnChannel(column_n); 4279 } 4280 4281 void TablePopColumnChannel() @trusted 4282 { 4283 igTablePopColumnChannel(); 4284 } 4285 4286 void TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label_width, ImGuiTableHeaderData* data, int data_count) @trusted 4287 { 4288 igTableAngledHeadersRowEx(row_id, angle, max_label_width, data, data_count); 4289 } 4290 4291 /++ 4292 + Tables: Internals 4293 +/ 4294 ImGuiTable* GetCurrentTable() @trusted 4295 { 4296 return igGetCurrentTable(); 4297 } 4298 4299 ImGuiTable* TableFindByID(ImGuiID id) @trusted 4300 { 4301 return igTableFindByID(id); 4302 } 4303 4304 bool BeginTableWithID(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags) @trusted 4305 { 4306 return igBeginTableWithID(name, id, columns_count, flags); 4307 } 4308 4309 bool BeginTableWithIDEx(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, ImVec2 outer_size, float inner_width) @trusted 4310 { 4311 return igBeginTableWithIDEx(name, id, columns_count, flags, outer_size, inner_width); 4312 } 4313 4314 void TableBeginInitMemory(scope ImGuiTable* table, int columns_count) @trusted 4315 { 4316 igTableBeginInitMemory(table, columns_count); 4317 } 4318 4319 void TableBeginApplyRequests(scope ImGuiTable* table) @trusted 4320 { 4321 igTableBeginApplyRequests(table); 4322 } 4323 4324 void TableSetupDrawChannels(scope ImGuiTable* table) @trusted 4325 { 4326 igTableSetupDrawChannels(table); 4327 } 4328 4329 void TableUpdateLayout(scope ImGuiTable* table) @trusted 4330 { 4331 igTableUpdateLayout(table); 4332 } 4333 4334 void TableUpdateBorders(scope ImGuiTable* table) @trusted 4335 { 4336 igTableUpdateBorders(table); 4337 } 4338 4339 void TableUpdateColumnsWeightFromWidth(scope ImGuiTable* table) @trusted 4340 { 4341 igTableUpdateColumnsWeightFromWidth(table); 4342 } 4343 4344 void TableDrawBorders(scope ImGuiTable* table) @trusted 4345 { 4346 igTableDrawBorders(table); 4347 } 4348 4349 void TableDrawDefaultContextMenu(scope ImGuiTable* table, ImGuiTableFlags flags_for_section_to_display) @trusted 4350 { 4351 igTableDrawDefaultContextMenu(table, flags_for_section_to_display); 4352 } 4353 4354 bool TableBeginContextMenuPopup(scope ImGuiTable* table) @trusted 4355 { 4356 return igTableBeginContextMenuPopup(table); 4357 } 4358 4359 void TableMergeDrawChannels(scope ImGuiTable* table) @trusted 4360 { 4361 igTableMergeDrawChannels(table); 4362 } 4363 4364 ImGuiTableInstanceData* TableGetInstanceData(scope ImGuiTable* table, int instance_no) @trusted 4365 { 4366 return igTableGetInstanceData(table, instance_no); 4367 } 4368 4369 ImGuiID TableGetInstanceID(scope ImGuiTable* table, int instance_no) @trusted 4370 { 4371 return igTableGetInstanceID(table, instance_no); 4372 } 4373 4374 void TableSortSpecsSanitize(scope ImGuiTable* table) @trusted 4375 { 4376 igTableSortSpecsSanitize(table); 4377 } 4378 4379 void TableSortSpecsBuild(scope ImGuiTable* table) @trusted 4380 { 4381 igTableSortSpecsBuild(table); 4382 } 4383 4384 ImGuiSortDirection TableGetColumnNextSortDirection(scope ImGuiTableColumn* column) @trusted 4385 { 4386 return igTableGetColumnNextSortDirection(column); 4387 } 4388 4389 void TableFixColumnSortDirection(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted 4390 { 4391 igTableFixColumnSortDirection(table, column); 4392 } 4393 4394 float TableGetColumnWidthAuto(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted 4395 { 4396 return igTableGetColumnWidthAuto(table, column); 4397 } 4398 4399 void TableBeginRow(scope ImGuiTable* table) @trusted 4400 { 4401 igTableBeginRow(table); 4402 } 4403 4404 void TableEndRow(scope ImGuiTable* table) @trusted 4405 { 4406 igTableEndRow(table); 4407 } 4408 4409 void TableBeginCell(scope ImGuiTable* table, int column_n) @trusted 4410 { 4411 igTableBeginCell(table, column_n); 4412 } 4413 4414 void TableEndCell(scope ImGuiTable* table) @trusted 4415 { 4416 igTableEndCell(table); 4417 } 4418 4419 ImRect TableGetCellBgRect(ImGuiTable* table, int column_n) @trusted 4420 { 4421 return igTableGetCellBgRect(table, column_n); 4422 } 4423 4424 const(char)* TableGetColumnNameImGuiTablePtr(ImGuiTable* table, int column_n) @trusted 4425 { 4426 return igTableGetColumnNameImGuiTablePtr(table, column_n); 4427 } 4428 4429 ImGuiID TableGetColumnResizeID(scope ImGuiTable* table, int column_n) @trusted 4430 { 4431 return igTableGetColumnResizeID(table, column_n); 4432 } 4433 4434 ImGuiID TableGetColumnResizeIDEx(scope ImGuiTable* table, int column_n, int instance_no) @trusted 4435 { 4436 return igTableGetColumnResizeIDEx(table, column_n, instance_no); 4437 } 4438 4439 float TableCalcMaxColumnWidth(ImGuiTable* table, int column_n) @trusted 4440 { 4441 return igTableCalcMaxColumnWidth(table, column_n); 4442 } 4443 4444 void TableSetColumnWidthAutoSingle(scope ImGuiTable* table, int column_n) @trusted 4445 { 4446 igTableSetColumnWidthAutoSingle(table, column_n); 4447 } 4448 4449 void TableSetColumnWidthAutoAll(scope ImGuiTable* table) @trusted 4450 { 4451 igTableSetColumnWidthAutoAll(table); 4452 } 4453 4454 void TableRemove(scope ImGuiTable* table) @trusted 4455 { 4456 igTableRemove(table); 4457 } 4458 4459 void TableGcCompactTransientBuffers(scope ImGuiTable* table) @trusted 4460 { 4461 igTableGcCompactTransientBuffers(table); 4462 } 4463 4464 void TableGcCompactTransientBuffersImGuiTableTempDataPtr(scope ImGuiTableTempData* table) @trusted 4465 { 4466 igTableGcCompactTransientBuffersImGuiTableTempDataPtr(table); 4467 } 4468 4469 void TableGcCompactSettings() @trusted 4470 { 4471 igTableGcCompactSettings(); 4472 } 4473 4474 /++ 4475 + Tables: Settings 4476 +/ 4477 void TableLoadSettings(scope ImGuiTable* table) @trusted 4478 { 4479 igTableLoadSettings(table); 4480 } 4481 4482 void TableSaveSettings(scope ImGuiTable* table) @trusted 4483 { 4484 igTableSaveSettings(table); 4485 } 4486 4487 void TableResetSettings(scope ImGuiTable* table) @trusted 4488 { 4489 igTableResetSettings(table); 4490 } 4491 4492 ImGuiTableSettings* TableGetBoundSettings(scope ImGuiTable* table) @trusted 4493 { 4494 return igTableGetBoundSettings(table); 4495 } 4496 4497 void TableSettingsAddSettingsHandler() @trusted 4498 { 4499 igTableSettingsAddSettingsHandler(); 4500 } 4501 4502 ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count) @trusted 4503 { 4504 return igTableSettingsCreate(id, columns_count); 4505 } 4506 4507 ImGuiTableSettings* TableSettingsFindByID(ImGuiID id) @trusted 4508 { 4509 return igTableSettingsFindByID(id); 4510 } 4511 4512 /++ 4513 + Tab Bars 4514 +/ 4515 ImGuiTabBar* GetCurrentTabBar() @trusted 4516 { 4517 return igGetCurrentTabBar(); 4518 } 4519 4520 bool BeginTabBarEx(scope ImGuiTabBar* tab_bar, ImRect bb, ImGuiTabBarFlags flags) @trusted 4521 { 4522 return igBeginTabBarEx(tab_bar, bb, flags); 4523 } 4524 4525 ImGuiTabItem* TabBarFindTabByID(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted 4526 { 4527 return igTabBarFindTabByID(tab_bar, tab_id); 4528 } 4529 4530 ImGuiTabItem* TabBarFindTabByOrder(scope ImGuiTabBar* tab_bar, int order) @trusted 4531 { 4532 return igTabBarFindTabByOrder(tab_bar, order); 4533 } 4534 4535 ImGuiTabItem* TabBarGetCurrentTab(scope ImGuiTabBar* tab_bar) @trusted 4536 { 4537 return igTabBarGetCurrentTab(tab_bar); 4538 } 4539 4540 int TabBarGetTabOrder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4541 { 4542 return igTabBarGetTabOrder(tab_bar, tab); 4543 } 4544 4545 const(char)* TabBarGetTabName(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4546 { 4547 return igTabBarGetTabName(tab_bar, tab); 4548 } 4549 4550 void TabBarRemoveTab(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted 4551 { 4552 igTabBarRemoveTab(tab_bar, tab_id); 4553 } 4554 4555 void TabBarCloseTab(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4556 { 4557 igTabBarCloseTab(tab_bar, tab); 4558 } 4559 4560 void TabBarQueueFocus(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted 4561 { 4562 igTabBarQueueFocus(tab_bar, tab); 4563 } 4564 4565 void TabBarQueueFocusStr(scope ImGuiTabBar* tab_bar, const(char)* tab_name) @trusted 4566 { 4567 igTabBarQueueFocusStr(tab_bar, tab_name); 4568 } 4569 4570 void TabBarQueueReorder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, int offset) @trusted 4571 { 4572 igTabBarQueueReorder(tab_bar, tab, offset); 4573 } 4574 4575 void TabBarQueueReorderFromMousePos(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, ImVec2 mouse_pos) @trusted 4576 { 4577 igTabBarQueueReorderFromMousePos(tab_bar, tab, mouse_pos); 4578 } 4579 4580 bool TabBarProcessReorder(scope ImGuiTabBar* tab_bar) @trusted 4581 { 4582 return igTabBarProcessReorder(tab_bar); 4583 } 4584 4585 bool TabItemEx(scope ImGuiTabBar* tab_bar, const(char)* label, scope bool* p_open, ImGuiTabItemFlags flags, scope ImGuiWindow* docked_window) @trusted 4586 { 4587 return igTabItemEx(tab_bar, label, p_open, flags, docked_window); 4588 } 4589 4590 void TabItemSpacing(const(char)* str_id, ImGuiTabItemFlags flags, float width) @trusted 4591 { 4592 igTabItemSpacing(str_id, flags, width); 4593 } 4594 4595 ImVec2 TabItemCalcSizeStr(const(char)* label, bool has_close_button_or_unsaved_marker) @trusted 4596 { 4597 return igTabItemCalcSizeStr(label, has_close_button_or_unsaved_marker); 4598 } 4599 4600 ImVec2 TabItemCalcSize(scope ImGuiWindow* window) @trusted 4601 { 4602 return igTabItemCalcSize(window); 4603 } 4604 4605 void TabItemBackground(scope ImDrawList* draw_list, ImRect bb, ImGuiTabItemFlags flags, ImU32 col) @trusted 4606 { 4607 igTabItemBackground(draw_list, bb, flags, col); 4608 } 4609 4610 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 4611 { 4612 igTabItemLabelAndCloseButton(draw_list, bb, flags, frame_padding, label, tab_id, close_button_id, is_contents_visible, out_just_closed, out_text_clipped); 4613 } 4614 4615 /++ 4616 + Render helpers 4617 + 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. 4618 + NB: All position are in absolute pixels coordinates (we are never using window coordinates internally) 4619 +/ 4620 void RenderText(ImVec2 pos, const(char)* text) @trusted 4621 { 4622 igRenderText(pos, text); 4623 } 4624 4625 void RenderTextEx(ImVec2 pos, const(char)* text, const(char)* text_end, bool hide_text_after_hash) @trusted 4626 { 4627 igRenderTextEx(pos, text, text_end, hide_text_after_hash); 4628 } 4629 4630 void RenderTextWrapped(ImVec2 pos, const(char)* text, const(char)* text_end, float wrap_width) @trusted 4631 { 4632 igRenderTextWrapped(pos, text, text_end, wrap_width); 4633 } 4634 4635 void RenderTextClipped(ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4636 { 4637 igRenderTextClipped(pos_min, pos_max, text, text_end, text_size_if_known); 4638 } 4639 4640 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 4641 { 4642 igRenderTextClippedEx(pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect); 4643 } 4644 4645 void RenderTextClippedWithDrawList(ImDrawList* draw_list, ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted 4646 { 4647 igRenderTextClippedWithDrawList(draw_list, pos_min, pos_max, text, text_end, text_size_if_known); 4648 } 4649 4650 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 4651 { 4652 igRenderTextClippedWithDrawListEx(draw_list, pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect); 4653 } 4654 4655 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 4656 { 4657 igRenderTextEllipsis(draw_list, pos_min, pos_max, ellipsis_max_x, text, text_end, text_size_if_known); 4658 } 4659 4660 void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col) @trusted 4661 { 4662 igRenderFrame(p_min, p_max, fill_col); 4663 } 4664 4665 void RenderFrameEx(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool borders, float rounding) @trusted 4666 { 4667 igRenderFrameEx(p_min, p_max, fill_col, borders, rounding); 4668 } 4669 4670 void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max) @trusted 4671 { 4672 igRenderFrameBorder(p_min, p_max); 4673 } 4674 4675 void RenderFrameBorderEx(ImVec2 p_min, ImVec2 p_max, float rounding) @trusted 4676 { 4677 igRenderFrameBorderEx(p_min, p_max, rounding); 4678 } 4679 4680 void RenderColorRectWithAlphaCheckerboard(scope ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off) @trusted 4681 { 4682 igRenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, fill_col, grid_step, grid_off); 4683 } 4684 4685 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 4686 { 4687 igRenderColorRectWithAlphaCheckerboardEx(draw_list, p_min, p_max, fill_col, grid_step, grid_off, rounding, flags); 4688 } 4689 4690 void RenderNavCursor(ImRect bb, ImGuiID id) @trusted 4691 { 4692 igRenderNavCursor(bb, id); 4693 } 4694 4695 void RenderNavCursorEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted 4696 { 4697 igRenderNavCursorEx(bb, id, flags); 4698 } 4699 4700 void RenderNavHighlight(ImRect bb, ImGuiID id) @trusted 4701 { 4702 igRenderNavHighlight(bb, id); 4703 } 4704 4705 void RenderNavHighlightEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted 4706 { 4707 igRenderNavHighlightEx(bb, id, flags); 4708 } 4709 4710 const(char)* FindRenderedTextEnd(const(char)* text) @trusted 4711 { 4712 return igFindRenderedTextEnd(text); 4713 } 4714 4715 const(char)* FindRenderedTextEndEx(const(char)* text, const(char)* text_end) @trusted 4716 { 4717 return igFindRenderedTextEndEx(text, text_end); 4718 } 4719 4720 void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) @trusted 4721 { 4722 igRenderMouseCursor(pos, scale, mouse_cursor, col_fill, col_border, col_shadow); 4723 } 4724 4725 /++ 4726 + Render helpers (those functions don't access any ImGui state!) 4727 +/ 4728 void RenderArrow(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir) @trusted 4729 { 4730 igRenderArrow(draw_list, pos, col, dir); 4731 } 4732 4733 void RenderArrowEx(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale) @trusted 4734 { 4735 igRenderArrowEx(draw_list, pos, col, dir, scale); 4736 } 4737 4738 void RenderBullet(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col) @trusted 4739 { 4740 igRenderBullet(draw_list, pos, col); 4741 } 4742 4743 void RenderCheckMark(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz) @trusted 4744 { 4745 igRenderCheckMark(draw_list, pos, col, sz); 4746 } 4747 4748 void RenderArrowPointingAt(scope ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) @trusted 4749 { 4750 igRenderArrowPointingAt(draw_list, pos, half_sz, direction, col); 4751 } 4752 4753 void RenderRectFilledRangeH(scope ImDrawList* draw_list, ImRect rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding) @trusted 4754 { 4755 igRenderRectFilledRangeH(draw_list, rect, col, x_start_norm, x_end_norm, rounding); 4756 } 4757 4758 void RenderRectFilledWithHole(scope ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding) @trusted 4759 { 4760 igRenderRectFilledWithHole(draw_list, outer, inner, col, rounding); 4761 } 4762 4763 /++ 4764 + Widgets: Text 4765 +/ 4766 void TextEx(const(char)* text) @trusted 4767 { 4768 igTextEx(text); 4769 } 4770 4771 void TextExEx(const(char)* text, const(char)* text_end, ImGuiTextFlags flags) @trusted 4772 { 4773 igTextExEx(text, text_end, flags); 4774 } 4775 4776 alias TextAligned = igTextAligned; 4777 4778 alias TextAlignedV = igTextAlignedV; 4779 4780 /++ 4781 + Widgets 4782 +/ 4783 bool ButtonWithFlags(const(char)* label) @trusted 4784 { 4785 return igButtonWithFlags(label); 4786 } 4787 4788 bool ButtonWithFlagsEx(const(char)* label, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted 4789 { 4790 return igButtonWithFlagsEx(label, size_arg, flags); 4791 } 4792 4793 bool ArrowButtonEx(const(char)* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted 4794 { 4795 return igArrowButtonEx(str_id, dir, size_arg, flags); 4796 } 4797 4798 bool ImageButtonWithFlags(ImGuiID id, ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 bg_col, ImVec4 tint_col, ImGuiButtonFlags flags) @trusted 4799 { 4800 return igImageButtonWithFlags(id, tex_ref, image_size, uv0, uv1, bg_col, tint_col, flags); 4801 } 4802 4803 void SeparatorEx(ImGuiSeparatorFlags flags) @trusted 4804 { 4805 igSeparatorEx(flags); 4806 } 4807 4808 void SeparatorExEx(ImGuiSeparatorFlags flags, float thickness) @trusted 4809 { 4810 igSeparatorExEx(flags, thickness); 4811 } 4812 4813 void SeparatorTextEx(ImGuiID id, const(char)* label, const(char)* label_end, float extra_width) @trusted 4814 { 4815 igSeparatorTextEx(id, label, label_end, extra_width); 4816 } 4817 4818 bool CheckboxFlagsImS64Ptr(const(char)* label, scope ImS64* flags, ImS64 flags_value) @trusted 4819 { 4820 return igCheckboxFlagsImS64Ptr(label, flags, flags_value); 4821 } 4822 4823 bool CheckboxFlagsImU64Ptr(const(char)* label, scope ImU64* flags, ImU64 flags_value) @trusted 4824 { 4825 return igCheckboxFlagsImU64Ptr(label, flags, flags_value); 4826 } 4827 4828 /++ 4829 + Widgets: Window Decorations 4830 +/ 4831 bool CloseButton(ImGuiID id, ImVec2 pos) @trusted 4832 { 4833 return igCloseButton(id, pos); 4834 } 4835 4836 bool CollapseButton(ImGuiID id, ImVec2 pos) @trusted 4837 { 4838 return igCollapseButton(id, pos); 4839 } 4840 4841 void Scrollbar(ImGuiAxis axis) @trusted 4842 { 4843 igScrollbar(axis); 4844 } 4845 4846 bool ScrollbarEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v) @trusted 4847 { 4848 return igScrollbarEx(bb, id, axis, p_scroll_v, avail_v, contents_v); 4849 } 4850 4851 bool ScrollbarExEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags draw_rounding_flags) @trusted 4852 { 4853 return igScrollbarExEx(bb, id, axis, p_scroll_v, avail_v, contents_v, draw_rounding_flags); 4854 } 4855 4856 ImRect GetWindowScrollbarRect(scope ImGuiWindow* window, ImGuiAxis axis) @trusted 4857 { 4858 return igGetWindowScrollbarRect(window, axis); 4859 } 4860 4861 ImGuiID GetWindowScrollbarID(scope ImGuiWindow* window, ImGuiAxis axis) @trusted 4862 { 4863 return igGetWindowScrollbarID(window, axis); 4864 } 4865 4866 ImGuiID GetWindowResizeCornerID(scope ImGuiWindow* window, int n) @trusted 4867 { 4868 return igGetWindowResizeCornerID(window, n); 4869 } 4870 4871 ImGuiID GetWindowResizeBorderID(scope ImGuiWindow* window, ImGuiDir dir) @trusted 4872 { 4873 return igGetWindowResizeBorderID(window, dir); 4874 } 4875 4876 /++ 4877 + Widgets lowlevel behaviors 4878 +/ 4879 bool ButtonBehavior(ImRect bb, ImGuiID id, scope bool* out_hovered, scope bool* out_held, ImGuiButtonFlags flags) @trusted 4880 { 4881 return igButtonBehavior(bb, id, out_hovered, out_held, flags); 4882 } 4883 4884 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 4885 { 4886 return igDragBehavior(id, data_type, p_v, v_speed, p_min, p_max, format, flags); 4887 } 4888 4889 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 4890 { 4891 return igSliderBehavior(bb, id, data_type, p_v, p_min, p_max, format, flags, out_grab_bb); 4892 } 4893 4894 bool SplitterBehavior(ImRect bb, ImGuiID id, ImGuiAxis axis, scope float* size1, scope float* size2, float min_size1, float min_size2) @trusted 4895 { 4896 return igSplitterBehavior(bb, id, axis, size1, size2, min_size1, min_size2); 4897 } 4898 4899 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 4900 { 4901 return igSplitterBehaviorEx(bb, id, axis, size1, size2, min_size1, min_size2, hover_extend, hover_visibility_delay, bg_col); 4902 } 4903 4904 /++ 4905 + Widgets: Tree Nodes 4906 +/ 4907 bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label) @trusted 4908 { 4909 return igTreeNodeBehavior(id, flags, label); 4910 } 4911 4912 bool TreeNodeBehaviorEx(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label, const(char)* label_end) @trusted 4913 { 4914 return igTreeNodeBehaviorEx(id, flags, label, label_end); 4915 } 4916 4917 void TreeNodeDrawLineToChildNode(ImVec2 target_pos) @trusted 4918 { 4919 igTreeNodeDrawLineToChildNode(target_pos); 4920 } 4921 4922 void TreeNodeDrawLineToTreePop(scope ImGuiTreeNodeStackData* data) @trusted 4923 { 4924 igTreeNodeDrawLineToTreePop(data); 4925 } 4926 4927 void TreePushOverrideID(ImGuiID id) @trusted 4928 { 4929 igTreePushOverrideID(id); 4930 } 4931 4932 bool TreeNodeGetOpen(ImGuiID storage_id) @trusted 4933 { 4934 return igTreeNodeGetOpen(storage_id); 4935 } 4936 4937 void TreeNodeSetOpen(ImGuiID storage_id, bool open) @trusted 4938 { 4939 igTreeNodeSetOpen(storage_id, open); 4940 } 4941 4942 bool TreeNodeUpdateNextOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags) @trusted 4943 { 4944 return igTreeNodeUpdateNextOpen(storage_id, flags); 4945 } 4946 4947 /++ 4948 + Data type helpers 4949 +/ 4950 const(ImGuiDataTypeInfo)* DataTypeGetInfo(ImGuiDataType data_type) @trusted 4951 { 4952 return igDataTypeGetInfo(data_type); 4953 } 4954 4955 int DataTypeFormatString(scope char* buf, int buf_size, ImGuiDataType data_type, scope const(void)* p_data, const(char)* format) @trusted 4956 { 4957 return igDataTypeFormatString(buf, buf_size, data_type, p_data, format); 4958 } 4959 4960 void DataTypeApplyOp(ImGuiDataType data_type, int op, scope void* output, scope const(void)* arg_1, scope const(void)* arg_2) @trusted 4961 { 4962 igDataTypeApplyOp(data_type, op, output, arg_1, arg_2); 4963 } 4964 4965 bool DataTypeApplyFromText(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted 4966 { 4967 return igDataTypeApplyFromText(buf, data_type, p_data, format); 4968 } 4969 4970 bool DataTypeApplyFromTextEx(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format, scope void* p_data_when_empty) @trusted 4971 { 4972 return igDataTypeApplyFromTextEx(buf, data_type, p_data, format, p_data_when_empty); 4973 } 4974 4975 int DataTypeCompare(ImGuiDataType data_type, scope const(void)* arg_1, scope const(void)* arg_2) @trusted 4976 { 4977 return igDataTypeCompare(data_type, arg_1, arg_2); 4978 } 4979 4980 bool DataTypeClamp(ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max) @trusted 4981 { 4982 return igDataTypeClamp(data_type, p_data, p_min, p_max); 4983 } 4984 4985 bool DataTypeIsZero(ImGuiDataType data_type, scope const(void)* p_data) @trusted 4986 { 4987 return igDataTypeIsZero(data_type, p_data); 4988 } 4989 4990 /++ 4991 + InputText 4992 +/ 4993 bool InputTextWithHintAndSize(const(char)* label, const(char)* hint, scope char* buf, int buf_size, ImVec2 size_arg, ImGuiInputTextFlags flags) @trusted 4994 { 4995 return igInputTextWithHintAndSize(label, hint, buf, buf_size, size_arg, flags); 4996 } 4997 4998 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 4999 { 5000 return igInputTextWithHintAndSizeEx(label, hint, buf, buf_size, size_arg, flags, callback, user_data); 5001 } 5002 5003 void InputTextDeactivateHook(ImGuiID id) @trusted 5004 { 5005 igInputTextDeactivateHook(id); 5006 } 5007 5008 bool TempInputText(ImRect bb, ImGuiID id, const(char)* label, scope char* buf, int buf_size, ImGuiInputTextFlags flags) @trusted 5009 { 5010 return igTempInputText(bb, id, label, buf, buf_size, flags); 5011 } 5012 5013 bool TempInputScalar(ImRect bb, ImGuiID id, const(char)* label, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted 5014 { 5015 return igTempInputScalar(bb, id, label, data_type, p_data, format); 5016 } 5017 5018 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 5019 { 5020 return igTempInputScalarEx(bb, id, label, data_type, p_data, format, p_clamp_min, p_clamp_max); 5021 } 5022 5023 bool TempInputIsActive(ImGuiID id) @trusted 5024 { 5025 return igTempInputIsActive(id); 5026 } 5027 5028 void SetNextItemRefVal(ImGuiDataType data_type, scope void* p_data) @trusted 5029 { 5030 igSetNextItemRefVal(data_type, p_data); 5031 } 5032 5033 bool IsItemActiveAsInputText() @trusted 5034 { 5035 return igIsItemActiveAsInputText(); 5036 } 5037 5038 /++ 5039 + Color 5040 +/ 5041 void ColorTooltip(const(char)* text, scope const(float)* col, ImGuiColorEditFlags flags) @trusted 5042 { 5043 igColorTooltip(text, col, flags); 5044 } 5045 5046 void ColorEditOptionsPopup(scope const(float)* col, ImGuiColorEditFlags flags) @trusted 5047 { 5048 igColorEditOptionsPopup(col, flags); 5049 } 5050 5051 void ColorPickerOptionsPopup(scope const(float)* ref_col, ImGuiColorEditFlags flags) @trusted 5052 { 5053 igColorPickerOptionsPopup(ref_col, flags); 5054 } 5055 5056 /++ 5057 + Plot 5058 +/ 5059 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 5060 { 5061 return igPlotEx(plot_type, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, size_arg); 5062 } 5063 5064 /++ 5065 + Shade functions (write over already created vertices) 5066 +/ 5067 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 5068 { 5069 igShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col0, col1); 5070 } 5071 5072 alias ShadeVertsLinearUV = igShadeVertsLinearUV; 5073 5074 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 5075 { 5076 igShadeVertsTransformPos(draw_list, vert_start_idx, vert_end_idx, pivot_in, cos_a, sin_a, pivot_out); 5077 } 5078 5079 /++ 5080 + Garbage collection 5081 +/ 5082 void GcCompactTransientMiscBuffers() @trusted 5083 { 5084 igGcCompactTransientMiscBuffers(); 5085 } 5086 5087 void GcCompactTransientWindowBuffers(scope ImGuiWindow* window) @trusted 5088 { 5089 igGcCompactTransientWindowBuffers(window); 5090 } 5091 5092 void GcAwakeTransientWindowBuffers(scope ImGuiWindow* window) @trusted 5093 { 5094 igGcAwakeTransientWindowBuffers(window); 5095 } 5096 5097 /++ 5098 + Error handling, State Recovery 5099 +/ 5100 bool ErrorLog(const(char)* msg) @trusted 5101 { 5102 return igErrorLog(msg); 5103 } 5104 5105 void ErrorRecoveryStoreState(scope ImGuiErrorRecoveryState* state_out) @trusted 5106 { 5107 igErrorRecoveryStoreState(state_out); 5108 } 5109 5110 void ErrorRecoveryTryToRecoverState(scope ImGuiErrorRecoveryState* state_in) @trusted 5111 { 5112 igErrorRecoveryTryToRecoverState(state_in); 5113 } 5114 5115 void ErrorRecoveryTryToRecoverWindowState(scope ImGuiErrorRecoveryState* state_in) @trusted 5116 { 5117 igErrorRecoveryTryToRecoverWindowState(state_in); 5118 } 5119 5120 void ErrorCheckUsingSetCursorPosToExtendParentBoundaries() @trusted 5121 { 5122 igErrorCheckUsingSetCursorPosToExtendParentBoundaries(); 5123 } 5124 5125 void ErrorCheckEndFrameFinalizeErrorTooltip() @trusted 5126 { 5127 igErrorCheckEndFrameFinalizeErrorTooltip(); 5128 } 5129 5130 bool BeginErrorTooltip() @trusted 5131 { 5132 return igBeginErrorTooltip(); 5133 } 5134 5135 void EndErrorTooltip() @trusted 5136 { 5137 igEndErrorTooltip(); 5138 } 5139 5140 /++ 5141 + Debug Tools 5142 +/ 5143 void DebugAllocHook(scope ImGuiDebugAllocInfo* info, int frame_count, scope void* ptr, size_t size) @trusted 5144 { 5145 igDebugAllocHook(info, frame_count, ptr, size); 5146 } 5147 5148 void DebugDrawCursorPos() @trusted 5149 { 5150 igDebugDrawCursorPos(); 5151 } 5152 5153 void DebugDrawCursorPosEx(ImU32 col) @trusted 5154 { 5155 igDebugDrawCursorPosEx(col); 5156 } 5157 5158 void DebugDrawLineExtents() @trusted 5159 { 5160 igDebugDrawLineExtents(); 5161 } 5162 5163 void DebugDrawLineExtentsEx(ImU32 col) @trusted 5164 { 5165 igDebugDrawLineExtentsEx(col); 5166 } 5167 5168 void DebugDrawItemRect() @trusted 5169 { 5170 igDebugDrawItemRect(); 5171 } 5172 5173 void DebugDrawItemRectEx(ImU32 col) @trusted 5174 { 5175 igDebugDrawItemRectEx(col); 5176 } 5177 5178 void DebugTextUnformattedWithLocateItem(const(char)* line_begin, const(char)* line_end) @trusted 5179 { 5180 igDebugTextUnformattedWithLocateItem(line_begin, line_end); 5181 } 5182 5183 void DebugLocateItem(ImGuiID target_id) @trusted 5184 { 5185 igDebugLocateItem(target_id); 5186 } 5187 5188 void DebugLocateItemOnHover(ImGuiID target_id) @trusted 5189 { 5190 igDebugLocateItemOnHover(target_id); 5191 } 5192 5193 void DebugLocateItemResolveWithLastItem() @trusted 5194 { 5195 igDebugLocateItemResolveWithLastItem(); 5196 } 5197 5198 void DebugBreakClearData() @trusted 5199 { 5200 igDebugBreakClearData(); 5201 } 5202 5203 bool DebugBreakButton(const(char)* label, const(char)* description_of_location) @trusted 5204 { 5205 return igDebugBreakButton(label, description_of_location); 5206 } 5207 5208 void DebugBreakButtonTooltip(bool keyboard_only, const(char)* description_of_location) @trusted 5209 { 5210 igDebugBreakButtonTooltip(keyboard_only, description_of_location); 5211 } 5212 5213 void ShowFontAtlas(scope ImFontAtlas* atlas) @trusted 5214 { 5215 igShowFontAtlas(atlas); 5216 } 5217 5218 void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, scope const(void)* data_id, scope const(void)* data_id_end) @trusted 5219 { 5220 igDebugHookIdInfo(id, data_type, data_id, data_id_end); 5221 } 5222 5223 void DebugNodeColumns(scope ImGuiOldColumns* columns) @trusted 5224 { 5225 igDebugNodeColumns(columns); 5226 } 5227 5228 void DebugNodeDrawList(scope ImGuiWindow* window, scope ImGuiViewportP* viewport, scope ImDrawList* draw_list, const(char)* label) @trusted 5229 { 5230 igDebugNodeDrawList(window, viewport, draw_list, label); 5231 } 5232 5233 void DebugNodeDrawCmdShowMeshAndBoundingBox(scope ImDrawList* out_draw_list, scope ImDrawList* draw_list, scope ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb) @trusted 5234 { 5235 igDebugNodeDrawCmdShowMeshAndBoundingBox(out_draw_list, draw_list, draw_cmd, show_mesh, show_aabb); 5236 } 5237 5238 void DebugNodeFont(scope ImFont* font) @trusted 5239 { 5240 igDebugNodeFont(font); 5241 } 5242 5243 void DebugNodeFontGlyphesForSrcMask(scope ImFont* font, scope ImFontBaked* baked, int src_mask) @trusted 5244 { 5245 igDebugNodeFontGlyphesForSrcMask(font, baked, src_mask); 5246 } 5247 5248 void DebugNodeFontGlyph(scope ImFont* font, scope ImFontGlyph* glyph) @trusted 5249 { 5250 igDebugNodeFontGlyph(font, glyph); 5251 } 5252 5253 void DebugNodeTexture(scope ImTextureData* tex, int int_id) @trusted 5254 { 5255 igDebugNodeTexture(tex, int_id); 5256 } 5257 5258 void DebugNodeTextureEx(scope ImTextureData* tex, int int_id, scope ImFontAtlasRect* highlight_rect) @trusted 5259 { 5260 igDebugNodeTextureEx(tex, int_id, highlight_rect); 5261 } 5262 5263 void DebugNodeStorage(scope ImGuiStorage* storage, const(char)* label) @trusted 5264 { 5265 igDebugNodeStorage(storage, label); 5266 } 5267 5268 void DebugNodeTabBar(scope ImGuiTabBar* tab_bar, const(char)* label) @trusted 5269 { 5270 igDebugNodeTabBar(tab_bar, label); 5271 } 5272 5273 void DebugNodeTable(scope ImGuiTable* table) @trusted 5274 { 5275 igDebugNodeTable(table); 5276 } 5277 5278 void DebugNodeTableSettings(scope ImGuiTableSettings* settings) @trusted 5279 { 5280 igDebugNodeTableSettings(settings); 5281 } 5282 5283 void DebugNodeTypingSelectState(scope ImGuiTypingSelectState* state) @trusted 5284 { 5285 igDebugNodeTypingSelectState(state); 5286 } 5287 5288 void DebugNodeMultiSelectState(scope ImGuiMultiSelectState* state) @trusted 5289 { 5290 igDebugNodeMultiSelectState(state); 5291 } 5292 5293 void DebugNodeWindow(scope ImGuiWindow* window, const(char)* label) @trusted 5294 { 5295 igDebugNodeWindow(window, label); 5296 } 5297 5298 void DebugNodeWindowSettings(scope ImGuiWindowSettings* settings) @trusted 5299 { 5300 igDebugNodeWindowSettings(settings); 5301 } 5302 5303 void DebugNodeWindowsList(scope ImVector_ImGuiWindowPtr* windows, const(char)* label) @trusted 5304 { 5305 igDebugNodeWindowsList(windows, label); 5306 } 5307 5308 void DebugNodeWindowsListByBeginStackParent(scope ImGuiWindow** windows, int windows_size, scope ImGuiWindow* parent_in_begin_stack) @trusted 5309 { 5310 igDebugNodeWindowsListByBeginStackParent(windows, windows_size, parent_in_begin_stack); 5311 } 5312 5313 void DebugNodeViewport(scope ImGuiViewportP* viewport) @trusted 5314 { 5315 igDebugNodeViewport(viewport); 5316 } 5317 5318 void DebugRenderKeyboardPreview(scope ImDrawList* draw_list) @trusted 5319 { 5320 igDebugRenderKeyboardPreview(draw_list); 5321 } 5322 5323 void DebugRenderViewportThumbnail(scope ImDrawList* draw_list, scope ImGuiViewportP* viewport, ImRect bb) @trusted 5324 { 5325 igDebugRenderViewportThumbnail(draw_list, viewport, bb); 5326 }