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