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