1 // Generated on 2026-02-22
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 +/
1836 void OpenPopup(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted
1837 {
1838     igOpenPopup(str_id, popup_flags);
1839 }
1840 
1841 void OpenPopupID(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted
1842 {
1843     igOpenPopupID(id, popup_flags);
1844 }
1845 
1846 void OpenPopupOnItemClick(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted
1847 {
1848     igOpenPopupOnItemClick(str_id, popup_flags);
1849 }
1850 
1851 void CloseCurrentPopup() @trusted
1852 {
1853     igCloseCurrentPopup();
1854 }
1855 
1856 /++
1857 + Popups: Open+Begin popup combined functions helpers to create context menus.
1858 +  Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and rightclicking.
1859 +  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.
1860 +  IMPORTANT: If you ever used the left mouse button with BeginPopupContextXXX() helpers before 1.92.6:
1861 +  Before this version, OpenPopupOnItemClick(), BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid() had 'a ImGuiPopupFlags popup_flags = 1' default value in their function signature.
1862 +  Before: Explicitly passing a literal 0 meant ImGuiPopupFlags_MouseButtonLeft. The default = 1 meant ImGuiPopupFlags_MouseButtonRight.
1863 +  After: The default = 0 means ImGuiPopupFlags_MouseButtonRight. Explicitly passing a literal 1 also means ImGuiPopupFlags_MouseButtonRight (if legacy behavior are enabled) or will assert (if legacy behavior are disabled).
1864 +  TL;DR: if you don't want to use right mouse button for popups, always specify it explicitly using a named ImGuiPopupFlags_MouseButtonXXXX value.
1865 +  Read "API BREAKING CHANGES" 2026/01/07 (1.92.6) entry in imgui.cpp or GitHub topic #9157 for all details.
1866 +/
1867 bool BeginPopupContextItem() @trusted
1868 {
1869     return igBeginPopupContextItem();
1870 }
1871 
1872 bool BeginPopupContextItemEx(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted
1873 {
1874     return igBeginPopupContextItemEx(str_id, popup_flags);
1875 }
1876 
1877 bool BeginPopupContextWindow() @trusted
1878 {
1879     return igBeginPopupContextWindow();
1880 }
1881 
1882 bool BeginPopupContextWindowEx(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted
1883 {
1884     return igBeginPopupContextWindowEx(str_id, popup_flags);
1885 }
1886 
1887 bool BeginPopupContextVoid() @trusted
1888 {
1889     return igBeginPopupContextVoid();
1890 }
1891 
1892 bool BeginPopupContextVoidEx(const(char)* str_id, ImGuiPopupFlags popup_flags) @trusted
1893 {
1894     return igBeginPopupContextVoidEx(str_id, popup_flags);
1895 }
1896 
1897 /++
1898 + Popups: query functions
1899 +  IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack.
1900 +  IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack.
1901 +  IsPopupOpen() with ImGuiPopupFlags_AnyPopupId + ImGuiPopupFlags_AnyPopupLevel: return true if any popup is open.
1902 +/
1903 bool IsPopupOpen(const(char)* str_id, ImGuiPopupFlags flags) @trusted
1904 {
1905     return igIsPopupOpen(str_id, flags);
1906 }
1907 
1908 /++
1909 + Tables
1910 +  Fullfeatured replacement for old Columns API.
1911 +  See Demo>Tables for demo code. See top of imgui_tables.cpp for general commentary.
1912 +  See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags.
1913 + The typical call flow is:
1914 +  1. Call BeginTable(), early out if returning false.
1915 +  2. Optionally call TableSetupColumn() to submit column name/flags/defaults.
1916 +  3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows.
1917 +  4. Optionally call TableHeadersRow() to submit a header row. Names are pulled from TableSetupColumn() data.
1918 +  5. Populate contents:
1919 +  In most situations you can use TableNextRow() + TableSetColumnIndex(N) to start appending into a column.
1920 +  If you are using tables as a sort of grid, where every column is holding the same type of contents,
1921 + you may prefer using TableNextColumn() instead of TableNextRow() + TableSetColumnIndex().
1922 + TableNextColumn() will automatically wraparound into the next row if needed.
1923 +  IMPORTANT: Comparatively to the old Columns() API, we need to call TableNextColumn() for the first column!
1924 +  Summary of possible call flow:
1925 +  TableNextRow() > TableSetColumnIndex(0) > Text("Hello 0") > TableSetColumnIndex(1) > Text("Hello 1")  // OK
1926 +  TableNextRow() > TableNextColumn()      > Text("Hello 0") > TableNextColumn()      > Text("Hello 1")  // OK
1927 +                    TableNextColumn()      > Text("Hello 0") > TableNextColumn()      > Text("Hello 1")  // OK: TableNextColumn() automatically gets to next row!
1928 +  TableNextRow()                           > Text("Hello 0")                                               // Not OK! Missing TableSetColumnIndex() or TableNextColumn()! Text will not appear!
1929 +  5. Call EndTable()
1930 +/
1931 bool BeginTable(const(char)* str_id, int columns, ImGuiTableFlags flags) @trusted
1932 {
1933     return igBeginTable(str_id, columns, flags);
1934 }
1935 
1936 bool BeginTableEx(const(char)* str_id, int columns, ImGuiTableFlags flags, ImVec2 outer_size, float inner_width) @trusted
1937 {
1938     return igBeginTableEx(str_id, columns, flags, outer_size, inner_width);
1939 }
1940 
1941 void EndTable() @trusted
1942 {
1943     igEndTable();
1944 }
1945 
1946 void TableNextRow() @trusted
1947 {
1948     igTableNextRow();
1949 }
1950 
1951 void TableNextRowEx(ImGuiTableRowFlags row_flags, float min_row_height) @trusted
1952 {
1953     igTableNextRowEx(row_flags, min_row_height);
1954 }
1955 
1956 bool TableNextColumn() @trusted
1957 {
1958     return igTableNextColumn();
1959 }
1960 
1961 bool TableSetColumnIndex(int column_n) @trusted
1962 {
1963     return igTableSetColumnIndex(column_n);
1964 }
1965 
1966 /++
1967 + Tables: Headers
1968 + &
1969 + Columns declaration
1970 +  Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc.
1971 +  Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column.
1972 + Headers are required to perform: reordering, sorting, and opening the context menu.
1973 + The context menu can also be made available in columns body using ImGuiTableFlags_ContextMenuInBody.
1974 +  You may manually submit headers using TableNextRow() + TableHeader() calls, but this is only useful in
1975 + some advanced use cases (e.g. adding custom widgets in header row).
1976 +  Use TableSetupScrollFreeze() to lock columns/rows so they stay visible when scrolled.
1977 +/
1978 void TableSetupColumn(const(char)* label, ImGuiTableColumnFlags flags) @trusted
1979 {
1980     igTableSetupColumn(label, flags);
1981 }
1982 
1983 void TableSetupColumnEx(const(char)* label, ImGuiTableColumnFlags flags, float init_width_or_weight, ImGuiID user_id) @trusted
1984 {
1985     igTableSetupColumnEx(label, flags, init_width_or_weight, user_id);
1986 }
1987 
1988 void TableSetupScrollFreeze(int cols, int rows) @trusted
1989 {
1990     igTableSetupScrollFreeze(cols, rows);
1991 }
1992 
1993 void TableHeader(const(char)* label) @trusted
1994 {
1995     igTableHeader(label);
1996 }
1997 
1998 void TableHeadersRow() @trusted
1999 {
2000     igTableHeadersRow();
2001 }
2002 
2003 void TableAngledHeadersRow() @trusted
2004 {
2005     igTableAngledHeadersRow();
2006 }
2007 
2008 /++
2009 + Tables: Sorting
2010 + &
2011 + Miscellaneous functions
2012 +  Sorting: call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting.
2013 + When 'sort_specs>SpecsDirty == true' you should sort your data. It will be true when sorting specs have
2014 + changed since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting,
2015 + else you may wastefully sort your data every frame!
2016 +  Functions args 'int column_n' treat the default value of 1 as the same as passing the current column index.
2017 +/
2018 ImGuiTableSortSpecs* TableGetSortSpecs() @trusted
2019 {
2020     return igTableGetSortSpecs();
2021 }
2022 
2023 int TableGetColumnCount() @trusted
2024 {
2025     return igTableGetColumnCount();
2026 }
2027 
2028 int TableGetColumnIndex() @trusted
2029 {
2030     return igTableGetColumnIndex();
2031 }
2032 
2033 int TableGetRowIndex() @trusted
2034 {
2035     return igTableGetRowIndex();
2036 }
2037 
2038 const(char)* TableGetColumnName(int column_n) @trusted
2039 {
2040     return igTableGetColumnName(column_n);
2041 }
2042 
2043 ImGuiTableColumnFlags TableGetColumnFlags(int column_n) @trusted
2044 {
2045     return igTableGetColumnFlags(column_n);
2046 }
2047 
2048 void TableSetColumnEnabled(int column_n, bool v) @trusted
2049 {
2050     igTableSetColumnEnabled(column_n, v);
2051 }
2052 
2053 int TableGetHoveredColumn() @trusted
2054 {
2055     return igTableGetHoveredColumn();
2056 }
2057 
2058 void TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n) @trusted
2059 {
2060     igTableSetBgColor(target, color, column_n);
2061 }
2062 
2063 /++
2064 + Legacy Columns API (prefer using Tables!)
2065 +  You can also use SameLine(pos_x) to mimic simplified columns.
2066 +/
2067 void Columns() @trusted
2068 {
2069     igColumns();
2070 }
2071 
2072 void ColumnsEx(int count, const(char)* id, bool borders) @trusted
2073 {
2074     igColumnsEx(count, id, borders);
2075 }
2076 
2077 void NextColumn() @trusted
2078 {
2079     igNextColumn();
2080 }
2081 
2082 int GetColumnIndex() @trusted
2083 {
2084     return igGetColumnIndex();
2085 }
2086 
2087 float GetColumnWidth(int column_index) @trusted
2088 {
2089     return igGetColumnWidth(column_index);
2090 }
2091 
2092 void SetColumnWidth(int column_index, float width) @trusted
2093 {
2094     igSetColumnWidth(column_index, width);
2095 }
2096 
2097 float GetColumnOffset(int column_index) @trusted
2098 {
2099     return igGetColumnOffset(column_index);
2100 }
2101 
2102 void SetColumnOffset(int column_index, float offset_x) @trusted
2103 {
2104     igSetColumnOffset(column_index, offset_x);
2105 }
2106 
2107 int GetColumnsCount() @trusted
2108 {
2109     return igGetColumnsCount();
2110 }
2111 
2112 /++
2113 + Tab Bars, Tabs
2114 +  Note: Tabs are automatically created by the docking system (when in 'docking' branch). Use this to create tab bars/tabs yourself.
2115 +/
2116 bool BeginTabBar(const(char)* str_id, ImGuiTabBarFlags flags) @trusted
2117 {
2118     return igBeginTabBar(str_id, flags);
2119 }
2120 
2121 void EndTabBar() @trusted
2122 {
2123     igEndTabBar();
2124 }
2125 
2126 bool BeginTabItem(const(char)* label, scope bool* p_open, ImGuiTabItemFlags flags) @trusted
2127 {
2128     return igBeginTabItem(label, p_open, flags);
2129 }
2130 
2131 void EndTabItem() @trusted
2132 {
2133     igEndTabItem();
2134 }
2135 
2136 bool TabItemButton(const(char)* label, ImGuiTabItemFlags flags) @trusted
2137 {
2138     return igTabItemButton(label, flags);
2139 }
2140 
2141 void SetTabItemClosed(const(char)* tab_or_docked_window_label) @trusted
2142 {
2143     igSetTabItemClosed(tab_or_docked_window_label);
2144 }
2145 
2146 /++
2147 + Logging/Capture
2148 +  All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging.
2149 +/
2150 void LogToTTY(int auto_open_depth) @trusted
2151 {
2152     igLogToTTY(auto_open_depth);
2153 }
2154 
2155 void LogToFile(int auto_open_depth, const(char)* filename) @trusted
2156 {
2157     igLogToFile(auto_open_depth, filename);
2158 }
2159 
2160 void LogToClipboard(int auto_open_depth) @trusted
2161 {
2162     igLogToClipboard(auto_open_depth);
2163 }
2164 
2165 void LogFinish() @trusted
2166 {
2167     igLogFinish();
2168 }
2169 
2170 void LogButtons() @trusted
2171 {
2172     igLogButtons();
2173 }
2174 
2175 void LogText(const(char)* fmt) @trusted
2176 {
2177     igLogText(fmt);
2178 }
2179 
2180 alias LogTextV = igLogTextV;
2181 
2182 /++
2183 + Drag and Drop
2184 +  On source items, call BeginDragDropSource(), if it returns true also call SetDragDropPayload() + EndDragDropSource().
2185 +  On target candidates, call BeginDragDropTarget(), if it returns true also call AcceptDragDropPayload() + EndDragDropTarget().
2186 +  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)
2187 +  An item can be both drag source and drop target.
2188 +/
2189 bool BeginDragDropSource(ImGuiDragDropFlags flags) @trusted
2190 {
2191     return igBeginDragDropSource(flags);
2192 }
2193 
2194 bool SetDragDropPayload(const(char)* type, scope const(void)* data, size_t sz, ImGuiCond cond) @trusted
2195 {
2196     return igSetDragDropPayload(type, data, sz, cond);
2197 }
2198 
2199 void EndDragDropSource() @trusted
2200 {
2201     igEndDragDropSource();
2202 }
2203 
2204 bool BeginDragDropTarget() @trusted
2205 {
2206     return igBeginDragDropTarget();
2207 }
2208 
2209 const(ImGuiPayload)* AcceptDragDropPayload(const(char)* type, ImGuiDragDropFlags flags) @trusted
2210 {
2211     return igAcceptDragDropPayload(type, flags);
2212 }
2213 
2214 void EndDragDropTarget() @trusted
2215 {
2216     igEndDragDropTarget();
2217 }
2218 
2219 const(ImGuiPayload)* GetDragDropPayload() @trusted
2220 {
2221     return igGetDragDropPayload();
2222 }
2223 
2224 /++
2225 + Disabling [BETA API]
2226 +  Disable all user interactions and dim items visuals (applying style.DisabledAlpha over current colors)
2227 +  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)
2228 +  Tooltips windows are automatically opted out of disabling. Note that IsItemHovered() by default returns false on disabled items, unless using ImGuiHoveredFlags_AllowWhenDisabled.
2229 +  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)
2230 +/
2231 void BeginDisabled(bool disabled) @trusted
2232 {
2233     igBeginDisabled(disabled);
2234 }
2235 
2236 void EndDisabled() @trusted
2237 {
2238     igEndDisabled();
2239 }
2240 
2241 /++
2242 + Clipping
2243 +  Mouse hovering is affected by ImGui::PushClipRect() calls, unlike direct calls to ImDrawList::PushClipRect() which are render only.
2244 +/
2245 void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect) @trusted
2246 {
2247     igPushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect);
2248 }
2249 
2250 void PopClipRect() @trusted
2251 {
2252     igPopClipRect();
2253 }
2254 
2255 /++
2256 + Focus, Activation
2257 +/
2258 void SetItemDefaultFocus() @trusted
2259 {
2260     igSetItemDefaultFocus();
2261 }
2262 
2263 void SetKeyboardFocusHere() @trusted
2264 {
2265     igSetKeyboardFocusHere();
2266 }
2267 
2268 void SetKeyboardFocusHereEx(int offset) @trusted
2269 {
2270     igSetKeyboardFocusHereEx(offset);
2271 }
2272 
2273 /++
2274 + Keyboard/Gamepad Navigation
2275 +/
2276 void SetNavCursorVisible(bool visible) @trusted
2277 {
2278     igSetNavCursorVisible(visible);
2279 }
2280 
2281 /++
2282 + Overlapping mode
2283 +/
2284 void SetNextItemAllowOverlap() @trusted
2285 {
2286     igSetNextItemAllowOverlap();
2287 }
2288 
2289 /++
2290 + Item/Widgets Utilities and Query Functions
2291 +  Most of the functions are referring to the previous Item that has been submitted.
2292 +  See Demo Window under "Widgets>Querying Status" for an interactive visualization of most of those functions.
2293 +/
2294 bool IsItemHovered(ImGuiHoveredFlags flags) @trusted
2295 {
2296     return igIsItemHovered(flags);
2297 }
2298 
2299 bool IsItemActive() @trusted
2300 {
2301     return igIsItemActive();
2302 }
2303 
2304 bool IsItemFocused() @trusted
2305 {
2306     return igIsItemFocused();
2307 }
2308 
2309 bool IsItemClicked() @trusted
2310 {
2311     return igIsItemClicked();
2312 }
2313 
2314 bool IsItemClickedEx(ImGuiMouseButton mouse_button) @trusted
2315 {
2316     return igIsItemClickedEx(mouse_button);
2317 }
2318 
2319 bool IsItemVisible() @trusted
2320 {
2321     return igIsItemVisible();
2322 }
2323 
2324 bool IsItemEdited() @trusted
2325 {
2326     return igIsItemEdited();
2327 }
2328 
2329 bool IsItemActivated() @trusted
2330 {
2331     return igIsItemActivated();
2332 }
2333 
2334 bool IsItemDeactivated() @trusted
2335 {
2336     return igIsItemDeactivated();
2337 }
2338 
2339 bool IsItemDeactivatedAfterEdit() @trusted
2340 {
2341     return igIsItemDeactivatedAfterEdit();
2342 }
2343 
2344 bool IsItemToggledOpen() @trusted
2345 {
2346     return igIsItemToggledOpen();
2347 }
2348 
2349 bool IsAnyItemHovered() @trusted
2350 {
2351     return igIsAnyItemHovered();
2352 }
2353 
2354 bool IsAnyItemActive() @trusted
2355 {
2356     return igIsAnyItemActive();
2357 }
2358 
2359 bool IsAnyItemFocused() @trusted
2360 {
2361     return igIsAnyItemFocused();
2362 }
2363 
2364 ImGuiID GetItemID() @trusted
2365 {
2366     return igGetItemID();
2367 }
2368 
2369 ImVec2 GetItemRectMin() @trusted
2370 {
2371     return igGetItemRectMin();
2372 }
2373 
2374 ImVec2 GetItemRectMax() @trusted
2375 {
2376     return igGetItemRectMax();
2377 }
2378 
2379 ImVec2 GetItemRectSize() @trusted
2380 {
2381     return igGetItemRectSize();
2382 }
2383 
2384 ImGuiItemFlags GetItemFlags() @trusted
2385 {
2386     return igGetItemFlags();
2387 }
2388 
2389 /++
2390 + Viewports
2391 +  Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows.
2392 +  In 'docking' branch with multiviewport enabled, we extend this concept to have multiple active viewports.
2393 +  In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode.
2394 +/
2395 ImGuiViewport* GetMainViewport() @trusted
2396 {
2397     return igGetMainViewport();
2398 }
2399 
2400 /++
2401 + Background/Foreground Draw Lists
2402 +/
2403 ImDrawList* GetBackgroundDrawList() @trusted
2404 {
2405     return igGetBackgroundDrawList();
2406 }
2407 
2408 ImDrawList* GetForegroundDrawList() @trusted
2409 {
2410     return igGetForegroundDrawList();
2411 }
2412 
2413 /++
2414 + Miscellaneous Utilities
2415 +/
2416 bool IsRectVisibleBySize(ImVec2 size) @trusted
2417 {
2418     return igIsRectVisibleBySize(size);
2419 }
2420 
2421 bool IsRectVisible(ImVec2 rect_min, ImVec2 rect_max) @trusted
2422 {
2423     return igIsRectVisible(rect_min, rect_max);
2424 }
2425 
2426 double GetTime() @trusted
2427 {
2428     return igGetTime();
2429 }
2430 
2431 int GetFrameCount() @trusted
2432 {
2433     return igGetFrameCount();
2434 }
2435 
2436 ImDrawListSharedData* GetDrawListSharedData() @trusted
2437 {
2438     return igGetDrawListSharedData();
2439 }
2440 
2441 const(char)* GetStyleColorName(ImGuiCol idx) @trusted
2442 {
2443     return igGetStyleColorName(idx);
2444 }
2445 
2446 void SetStateStorage(scope ImGuiStorage* storage) @trusted
2447 {
2448     igSetStateStorage(storage);
2449 }
2450 
2451 ImGuiStorage* GetStateStorage() @trusted
2452 {
2453     return igGetStateStorage();
2454 }
2455 
2456 /++
2457 + Text Utilities
2458 +/
2459 ImVec2 CalcTextSize(const(char)* text) @trusted
2460 {
2461     return igCalcTextSize(text);
2462 }
2463 
2464 ImVec2 CalcTextSizeEx(const(char)* text, const(char)* text_end, bool hide_text_after_double_hash, float wrap_width) @trusted
2465 {
2466     return igCalcTextSizeEx(text, text_end, hide_text_after_double_hash, wrap_width);
2467 }
2468 
2469 /++
2470 + Color Utilities
2471 +/
2472 ImVec4 ColorConvertU32ToFloat4(ImU32 in_) @trusted
2473 {
2474     return igColorConvertU32ToFloat4(in_);
2475 }
2476 
2477 ImU32 ColorConvertFloat4ToU32(ImVec4 in_) @trusted
2478 {
2479     return igColorConvertFloat4ToU32(in_);
2480 }
2481 
2482 alias ColorConvertRGBtoHSV = igColorConvertRGBtoHSV;
2483 
2484 void ColorConvertHSVtoRGB(float h, float s, float v, scope float* out_r, scope float* out_g, scope float* out_b) @trusted
2485 {
2486     igColorConvertHSVtoRGB(h, s, v, out_r, out_g, out_b);
2487 }
2488 
2489 /++
2490 + Inputs Utilities: Raw Keyboard/Mouse/Gamepad Access
2491 +  Consider using the Shortcut() function instead of IsKeyPressed()/IsKeyChordPressed()! Shortcut() is easier to use and better featured (can do focus routing check).
2492 +  the ImGuiKey enum contains all possible keyboard, mouse and gamepad inputs (e.g. ImGuiKey_A, ImGuiKey_MouseLeft, ImGuiKey_GamepadDpadUp...).
2493 +  (legacy: before v1.87 (202202), we used ImGuiKey
2494 + <
2495 + 512 values to carry native/user indices as defined by each backends. This was obsoleted in 1.87 (202202) and completely removed in 1.91.5 (202411). See https://github.com/ocornut/imgui/issues/4921)
2496 +/
2497 bool IsKeyDown(ImGuiKey key) @trusted
2498 {
2499     return igIsKeyDown(key);
2500 }
2501 
2502 bool IsKeyPressed(ImGuiKey key) @trusted
2503 {
2504     return igIsKeyPressed(key);
2505 }
2506 
2507 bool IsKeyPressedEx(ImGuiKey key, bool repeat) @trusted
2508 {
2509     return igIsKeyPressedEx(key, repeat);
2510 }
2511 
2512 bool IsKeyReleased(ImGuiKey key) @trusted
2513 {
2514     return igIsKeyReleased(key);
2515 }
2516 
2517 bool IsKeyChordPressed(ImGuiKeyChord key_chord) @trusted
2518 {
2519     return igIsKeyChordPressed(key_chord);
2520 }
2521 
2522 int GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate) @trusted
2523 {
2524     return igGetKeyPressedAmount(key, repeat_delay, rate);
2525 }
2526 
2527 const(char)* GetKeyName(ImGuiKey key) @trusted
2528 {
2529     return igGetKeyName(key);
2530 }
2531 
2532 void SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard) @trusted
2533 {
2534     igSetNextFrameWantCaptureKeyboard(want_capture_keyboard);
2535 }
2536 
2537 /++
2538 + Inputs Utilities: Shortcut Testing
2539 + &
2540 + Routing
2541 +  Typical use is e.g.: 'if (ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiKey_S)) { ... }'.
2542 +  Flags: Default route use ImGuiInputFlags_RouteFocused, but see ImGuiInputFlags_RouteGlobal and other options in ImGuiInputFlags_!
2543 +  Flags: Use ImGuiInputFlags_Repeat to support repeat.
2544 +  ImGuiKeyChord = a ImGuiKey + optional ImGuiMod_Alt/ImGuiMod_Ctrl/ImGuiMod_Shift/ImGuiMod_Super.
2545 + ImGuiKey_C                          // Accepted by functions taking ImGuiKey or ImGuiKeyChord arguments
2546 + ImGuiMod_Ctrl | ImGuiKey_C          // Accepted by functions taking ImGuiKeyChord arguments
2547 + only ImGuiMod_XXX values are legal to combine with an ImGuiKey. You CANNOT combine two ImGuiKey values.
2548 +  The general idea is that several callers may register interest in a shortcut, and only one owner gets it.
2549 + Parent   > call Shortcut(Ctrl+S)    // When Parent is focused, Parent gets the shortcut.
2550 + Child1 > call Shortcut(Ctrl+S)    // When Child1 is focused, Child1 gets the shortcut (Child1 overrides Parent shortcuts)
2551 + Child2 > no call                  // When Child2 is focused, Parent gets the shortcut.
2552 + The whole system is order independent, so if Child1 makes its calls before Parent, results will be identical.
2553 + This is an important property as it facilitate working with foreign code or larger codebase.
2554 +  To understand the difference:
2555 +  IsKeyChordPressed() compares mods and call IsKeyPressed()
2556 + > the function has no sideeffect.
2557 +  Shortcut() submits a route, routes are resolved, if it currently can be routed it calls IsKeyChordPressed()
2558 + > the function has (desirable) sideeffects as it can prevents another call from getting the route.
2559 +  Visualize registered routes in 'Metrics/Debugger>Inputs'.
2560 +/
2561 bool Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted
2562 {
2563     return igShortcut(key_chord, flags);
2564 }
2565 
2566 void SetNextItemShortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted
2567 {
2568     igSetNextItemShortcut(key_chord, flags);
2569 }
2570 
2571 /++
2572 + Inputs Utilities: Key/Input Ownership [BETA]
2573 +  One common use case would be to allow your items to disable standard inputs behaviors such
2574 + as Tab or Alt key handling, Mouse Wheel scrolling, etc.
2575 + e.g. Button(...); SetItemKeyOwner(ImGuiKey_MouseWheelY); to make hovering/activating a button disable wheel for scrolling.
2576 +  Reminder ImGuiKey enum include access to mouse buttons and gamepad, so key ownership can apply to them.
2577 +  Many related features are still in imgui_internal.h. For instance, most IsKeyXXX()/IsMouseXXX() functions have an owneridaware version.
2578 +/
2579 void SetItemKeyOwner(ImGuiKey key) @trusted
2580 {
2581     igSetItemKeyOwner(key);
2582 }
2583 
2584 /++
2585 + Inputs Utilities: Mouse
2586 +  To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right.
2587 +  You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle.
2588 +  Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold')
2589 +/
2590 bool IsMouseDown(ImGuiMouseButton button) @trusted
2591 {
2592     return igIsMouseDown(button);
2593 }
2594 
2595 bool IsMouseClicked(ImGuiMouseButton button) @trusted
2596 {
2597     return igIsMouseClicked(button);
2598 }
2599 
2600 bool IsMouseClickedEx(ImGuiMouseButton button, bool repeat) @trusted
2601 {
2602     return igIsMouseClickedEx(button, repeat);
2603 }
2604 
2605 bool IsMouseReleased(ImGuiMouseButton button) @trusted
2606 {
2607     return igIsMouseReleased(button);
2608 }
2609 
2610 bool IsMouseDoubleClicked(ImGuiMouseButton button) @trusted
2611 {
2612     return igIsMouseDoubleClicked(button);
2613 }
2614 
2615 bool IsMouseReleasedWithDelay(ImGuiMouseButton button, float delay) @trusted
2616 {
2617     return igIsMouseReleasedWithDelay(button, delay);
2618 }
2619 
2620 int GetMouseClickedCount(ImGuiMouseButton button) @trusted
2621 {
2622     return igGetMouseClickedCount(button);
2623 }
2624 
2625 bool IsMouseHoveringRect(ImVec2 r_min, ImVec2 r_max) @trusted
2626 {
2627     return igIsMouseHoveringRect(r_min, r_max);
2628 }
2629 
2630 bool IsMouseHoveringRectEx(ImVec2 r_min, ImVec2 r_max, bool clip) @trusted
2631 {
2632     return igIsMouseHoveringRectEx(r_min, r_max, clip);
2633 }
2634 
2635 bool IsMousePosValid(ImVec2* mouse_pos) @trusted
2636 {
2637     return igIsMousePosValid(mouse_pos);
2638 }
2639 
2640 bool IsAnyMouseDown() @trusted
2641 {
2642     return igIsAnyMouseDown();
2643 }
2644 
2645 ImVec2 GetMousePos() @trusted
2646 {
2647     return igGetMousePos();
2648 }
2649 
2650 ImVec2 GetMousePosOnOpeningCurrentPopup() @trusted
2651 {
2652     return igGetMousePosOnOpeningCurrentPopup();
2653 }
2654 
2655 bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold) @trusted
2656 {
2657     return igIsMouseDragging(button, lock_threshold);
2658 }
2659 
2660 ImVec2 GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold) @trusted
2661 {
2662     return igGetMouseDragDelta(button, lock_threshold);
2663 }
2664 
2665 void ResetMouseDragDelta() @trusted
2666 {
2667     igResetMouseDragDelta();
2668 }
2669 
2670 void ResetMouseDragDeltaEx(ImGuiMouseButton button) @trusted
2671 {
2672     igResetMouseDragDeltaEx(button);
2673 }
2674 
2675 ImGuiMouseCursor GetMouseCursor() @trusted
2676 {
2677     return igGetMouseCursor();
2678 }
2679 
2680 void SetMouseCursor(ImGuiMouseCursor cursor_type) @trusted
2681 {
2682     igSetMouseCursor(cursor_type);
2683 }
2684 
2685 void SetNextFrameWantCaptureMouse(bool want_capture_mouse) @trusted
2686 {
2687     igSetNextFrameWantCaptureMouse(want_capture_mouse);
2688 }
2689 
2690 /++
2691 + Clipboard Utilities
2692 +  Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard.
2693 +/
2694 const(char)* GetClipboardText() @trusted
2695 {
2696     return igGetClipboardText();
2697 }
2698 
2699 void SetClipboardText(const(char)* text) @trusted
2700 {
2701     igSetClipboardText(text);
2702 }
2703 
2704 /++
2705 + Settings/.Ini Utilities
2706 +  The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
2707 +  Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
2708 +  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).
2709 +/
2710 void LoadIniSettingsFromDisk(const(char)* ini_filename) @trusted
2711 {
2712     igLoadIniSettingsFromDisk(ini_filename);
2713 }
2714 
2715 void LoadIniSettingsFromMemory(const(char)* ini_data, size_t ini_size) @trusted
2716 {
2717     igLoadIniSettingsFromMemory(ini_data, ini_size);
2718 }
2719 
2720 void SaveIniSettingsToDisk(const(char)* ini_filename) @trusted
2721 {
2722     igSaveIniSettingsToDisk(ini_filename);
2723 }
2724 
2725 const(char)* SaveIniSettingsToMemory(size_t* out_ini_size) @trusted
2726 {
2727     return igSaveIniSettingsToMemory(out_ini_size);
2728 }
2729 
2730 /++
2731 + Debug Utilities
2732 +  Your main debugging friend is the ShowMetricsWindow() function.
2733 +  Interactive tools are all accessible from the 'Dear ImGui Demo>Tools' menu.
2734 +  Read https://github.com/ocornut/imgui/wiki/DebugTools for a description of all available debug tools.
2735 +/
2736 void DebugTextEncoding(const(char)* text) @trusted
2737 {
2738     igDebugTextEncoding(text);
2739 }
2740 
2741 void DebugFlashStyleColor(ImGuiCol idx) @trusted
2742 {
2743     igDebugFlashStyleColor(idx);
2744 }
2745 
2746 void DebugStartItemPicker() @trusted
2747 {
2748     igDebugStartItemPicker();
2749 }
2750 
2751 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
2752 {
2753     return igDebugCheckVersionAndDataLayout(version_str, sz_io, sz_style, sz_vec2, sz_vec4, sz_drawvert, sz_drawidx);
2754 }
2755 
2756 void DebugLog(const(char)* fmt) @trusted
2757 {
2758     igDebugLog(fmt);
2759 }
2760 
2761 alias DebugLogV = igDebugLogV;
2762 
2763 /++
2764 + Memory Allocators
2765 +  Those functions are not reliant on the current context.
2766 +  DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
2767 + for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details.
2768 +/
2769 void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, scope void* user_data) @trusted
2770 {
2771     igSetAllocatorFunctions(alloc_func, free_func, user_data);
2772 }
2773 
2774 void GetAllocatorFunctions(scope ImGuiMemAllocFunc* p_alloc_func, scope ImGuiMemFreeFunc* p_free_func, scope void** p_user_data) @trusted
2775 {
2776     igGetAllocatorFunctions(p_alloc_func, p_free_func, p_user_data);
2777 }
2778 
2779 void* MemAlloc(size_t size) @trusted
2780 {
2781     return igMemAlloc(size);
2782 }
2783 
2784 void MemFree(scope void* ptr) @trusted
2785 {
2786     igMemFree(ptr);
2787 }
2788 
2789 /++
2790 + OBSOLETED in 1.92.0 (from June 2025)
2791 +/
2792 void PushFont(scope ImFont* font) @trusted
2793 {
2794     igPushFont(font);
2795 }
2796 
2797 void SetWindowFontScale(float scale) @trusted
2798 {
2799     igSetWindowFontScale(scale);
2800 }
2801 
2802 /++
2803 + OBSOLETED in 1.91.9 (from February 2025)
2804 +/
2805 void ImageImVec4(ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 tint_col, ImVec4 border_col) @trusted
2806 {
2807     igImageImVec4(tex_ref, image_size, uv0, uv1, tint_col, border_col);
2808 }
2809 
2810 /++
2811 + OBSOLETED in 1.91.0 (from July 2024)
2812 +/
2813 void PushButtonRepeat(bool repeat) @trusted
2814 {
2815     igPushButtonRepeat(repeat);
2816 }
2817 
2818 void PopButtonRepeat() @trusted
2819 {
2820     igPopButtonRepeat();
2821 }
2822 
2823 void PushTabStop(bool tab_stop) @trusted
2824 {
2825     igPushTabStop(tab_stop);
2826 }
2827 
2828 void PopTabStop() @trusted
2829 {
2830     igPopTabStop();
2831 }
2832 
2833 /++
2834 + You do not need those functions! See #7838 on GitHub for more info.
2835 +/
2836 ImVec2 GetContentRegionMax() @trusted
2837 {
2838     return igGetContentRegionMax();
2839 }
2840 
2841 ImVec2 GetWindowContentRegionMin() @trusted
2842 {
2843     return igGetWindowContentRegionMin();
2844 }
2845 
2846 ImVec2 GetWindowContentRegionMax() @trusted
2847 {
2848     return igGetWindowContentRegionMax();
2849 }
2850 
2851 /++
2852 + OBSOLETED in 1.90.0 (from September 2023)
2853 +/
2854 bool ComboObsolete(const(char)* label, scope int* current_item, ImGuiOld_callbackCallback old_callback, scope void* user_data, int items_count) @trusted
2855 {
2856     return igComboObsolete(label, current_item, old_callback, user_data, items_count);
2857 }
2858 
2859 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
2860 {
2861     return igComboObsoleteEx(label, current_item, old_callback, user_data, items_count, popup_max_height_in_items);
2862 }
2863 
2864 bool ListBoxObsolete(const(char)* label, scope int* current_item, ImGuiOld_callbackCallback old_callback, scope void* user_data, int items_count) @trusted
2865 {
2866     return igListBoxObsolete(label, current_item, old_callback, user_data, items_count);
2867 }
2868 
2869 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
2870 {
2871     return igListBoxObsoleteEx(label, current_item, old_callback, user_data, items_count, height_in_items);
2872 }
2873 
2874 /++
2875 + Windows
2876 + We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
2877 + If this ever crashes because g.CurrentWindow is NULL, it means that either:
2878 +  ImGui::NewFrame() has never been called, which is illegal.
2879 +  You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
2880 +/
2881 ImGuiIO* GetIOImGuiContextPtr(scope ImGuiContext* ctx) @trusted
2882 {
2883     return igGetIOImGuiContextPtr(ctx);
2884 }
2885 
2886 ImGuiPlatformIO* GetPlatformIOImGuiContextPtr(scope ImGuiContext* ctx) @trusted
2887 {
2888     return igGetPlatformIOImGuiContextPtr(ctx);
2889 }
2890 
2891 float GetScale() @trusted
2892 {
2893     return igGetScale();
2894 }
2895 
2896 ImGuiWindow* GetCurrentWindowRead() @trusted
2897 {
2898     return igGetCurrentWindowRead();
2899 }
2900 
2901 ImGuiWindow* GetCurrentWindow() @trusted
2902 {
2903     return igGetCurrentWindow();
2904 }
2905 
2906 ImGuiWindow* FindWindowByID(ImGuiID id) @trusted
2907 {
2908     return igFindWindowByID(id);
2909 }
2910 
2911 ImGuiWindow* FindWindowByName(const(char)* name) @trusted
2912 {
2913     return igFindWindowByName(name);
2914 }
2915 
2916 void UpdateWindowParentAndRootLinks(scope ImGuiWindow* window, ImGuiWindowFlags flags, scope ImGuiWindow* parent_window) @trusted
2917 {
2918     igUpdateWindowParentAndRootLinks(window, flags, parent_window);
2919 }
2920 
2921 void UpdateWindowSkipRefresh(scope ImGuiWindow* window) @trusted
2922 {
2923     igUpdateWindowSkipRefresh(window);
2924 }
2925 
2926 ImVec2 CalcWindowNextAutoFitSize(scope ImGuiWindow* window) @trusted
2927 {
2928     return igCalcWindowNextAutoFitSize(window);
2929 }
2930 
2931 bool IsWindowChildOf(scope ImGuiWindow* window, scope ImGuiWindow* potential_parent, bool popup_hierarchy) @trusted
2932 {
2933     return igIsWindowChildOf(window, potential_parent, popup_hierarchy);
2934 }
2935 
2936 bool IsWindowInBeginStack(scope ImGuiWindow* window) @trusted
2937 {
2938     return igIsWindowInBeginStack(window);
2939 }
2940 
2941 bool IsWindowWithinBeginStackOf(scope ImGuiWindow* window, scope ImGuiWindow* potential_parent) @trusted
2942 {
2943     return igIsWindowWithinBeginStackOf(window, potential_parent);
2944 }
2945 
2946 bool IsWindowAbove(scope ImGuiWindow* potential_above, scope ImGuiWindow* potential_below) @trusted
2947 {
2948     return igIsWindowAbove(potential_above, potential_below);
2949 }
2950 
2951 bool IsWindowNavFocusable(scope ImGuiWindow* window) @trusted
2952 {
2953     return igIsWindowNavFocusable(window);
2954 }
2955 
2956 void SetWindowPosImGuiWindowPtr(scope ImGuiWindow* window, ImVec2 pos, ImGuiCond cond) @trusted
2957 {
2958     igSetWindowPosImGuiWindowPtr(window, pos, cond);
2959 }
2960 
2961 void SetWindowSizeImGuiWindowPtr(scope ImGuiWindow* window, ImVec2 size, ImGuiCond cond) @trusted
2962 {
2963     igSetWindowSizeImGuiWindowPtr(window, size, cond);
2964 }
2965 
2966 void SetWindowCollapsedImGuiWindowPtr(scope ImGuiWindow* window, bool collapsed, ImGuiCond cond) @trusted
2967 {
2968     igSetWindowCollapsedImGuiWindowPtr(window, collapsed, cond);
2969 }
2970 
2971 void SetWindowHitTestHole(scope ImGuiWindow* window, ImVec2 pos, ImVec2 size) @trusted
2972 {
2973     igSetWindowHitTestHole(window, pos, size);
2974 }
2975 
2976 void SetWindowHiddenAndSkipItemsForCurrentFrame(scope ImGuiWindow* window) @trusted
2977 {
2978     igSetWindowHiddenAndSkipItemsForCurrentFrame(window);
2979 }
2980 
2981 void SetWindowParentWindowForFocusRoute(scope ImGuiWindow* window, scope ImGuiWindow* parent_window) @trusted
2982 {
2983     igSetWindowParentWindowForFocusRoute(window, parent_window);
2984 }
2985 
2986 ImRect WindowRectAbsToRel(scope ImGuiWindow* window, ImRect r) @trusted
2987 {
2988     return igWindowRectAbsToRel(window, r);
2989 }
2990 
2991 ImRect WindowRectRelToAbs(scope ImGuiWindow* window, ImRect r) @trusted
2992 {
2993     return igWindowRectRelToAbs(window, r);
2994 }
2995 
2996 ImVec2 WindowPosAbsToRel(scope ImGuiWindow* window, ImVec2 p) @trusted
2997 {
2998     return igWindowPosAbsToRel(window, p);
2999 }
3000 
3001 ImVec2 WindowPosRelToAbs(scope ImGuiWindow* window, ImVec2 p) @trusted
3002 {
3003     return igWindowPosRelToAbs(window, p);
3004 }
3005 
3006 /++
3007 + Windows: Display Order and Focus Order
3008 +/
3009 void FocusWindow(scope ImGuiWindow* window, ImGuiFocusRequestFlags flags) @trusted
3010 {
3011     igFocusWindow(window, flags);
3012 }
3013 
3014 void FocusTopMostWindowUnderOne(scope ImGuiWindow* under_this_window, scope ImGuiWindow* ignore_window, scope ImGuiViewport* filter_viewport, ImGuiFocusRequestFlags flags) @trusted
3015 {
3016     igFocusTopMostWindowUnderOne(under_this_window, ignore_window, filter_viewport, flags);
3017 }
3018 
3019 void BringWindowToFocusFront(scope ImGuiWindow* window) @trusted
3020 {
3021     igBringWindowToFocusFront(window);
3022 }
3023 
3024 void BringWindowToDisplayFront(scope ImGuiWindow* window) @trusted
3025 {
3026     igBringWindowToDisplayFront(window);
3027 }
3028 
3029 void BringWindowToDisplayBack(scope ImGuiWindow* window) @trusted
3030 {
3031     igBringWindowToDisplayBack(window);
3032 }
3033 
3034 void BringWindowToDisplayBehind(scope ImGuiWindow* window, scope ImGuiWindow* above_window) @trusted
3035 {
3036     igBringWindowToDisplayBehind(window, above_window);
3037 }
3038 
3039 int FindWindowDisplayIndex(scope ImGuiWindow* window) @trusted
3040 {
3041     return igFindWindowDisplayIndex(window);
3042 }
3043 
3044 ImGuiWindow* FindBottomMostVisibleWindowWithinBeginStack(scope ImGuiWindow* window) @trusted
3045 {
3046     return igFindBottomMostVisibleWindowWithinBeginStack(window);
3047 }
3048 
3049 /++
3050 + Windows: Idle, Refresh Policies [EXPERIMENTAL]
3051 +/
3052 void SetNextWindowRefreshPolicy(ImGuiWindowRefreshFlags flags) @trusted
3053 {
3054     igSetNextWindowRefreshPolicy(flags);
3055 }
3056 
3057 /++
3058 + Fonts, drawing
3059 +/
3060 void RegisterUserTexture(scope ImTextureData* tex) @trusted
3061 {
3062     igRegisterUserTexture(tex);
3063 }
3064 
3065 void UnregisterUserTexture(scope ImTextureData* tex) @trusted
3066 {
3067     igUnregisterUserTexture(tex);
3068 }
3069 
3070 void RegisterFontAtlas(scope ImFontAtlas* atlas) @trusted
3071 {
3072     igRegisterFontAtlas(atlas);
3073 }
3074 
3075 void UnregisterFontAtlas(scope ImFontAtlas* atlas) @trusted
3076 {
3077     igUnregisterFontAtlas(atlas);
3078 }
3079 
3080 void SetCurrentFont(scope ImFont* font, float font_size_before_scaling, float font_size_after_scaling) @trusted
3081 {
3082     igSetCurrentFont(font, font_size_before_scaling, font_size_after_scaling);
3083 }
3084 
3085 void UpdateCurrentFontSize(float restore_font_size_after_scaling) @trusted
3086 {
3087     igUpdateCurrentFontSize(restore_font_size_after_scaling);
3088 }
3089 
3090 void SetFontRasterizerDensity(float rasterizer_density) @trusted
3091 {
3092     igSetFontRasterizerDensity(rasterizer_density);
3093 }
3094 
3095 float GetFontRasterizerDensity() @trusted
3096 {
3097     return igGetFontRasterizerDensity();
3098 }
3099 
3100 float GetRoundedFontSize(float size) @trusted
3101 {
3102     return igGetRoundedFontSize(size);
3103 }
3104 
3105 ImFont* GetDefaultFont() @trusted
3106 {
3107     return igGetDefaultFont();
3108 }
3109 
3110 void PushPasswordFont() @trusted
3111 {
3112     igPushPasswordFont();
3113 }
3114 
3115 void PopPasswordFont() @trusted
3116 {
3117     igPopPasswordFont();
3118 }
3119 
3120 ImDrawList* GetForegroundDrawListImGuiWindowPtr(scope ImGuiWindow* window) @trusted
3121 {
3122     return igGetForegroundDrawListImGuiWindowPtr(window);
3123 }
3124 
3125 ImDrawList* GetBackgroundDrawListImGuiViewportPtr(scope ImGuiViewport* viewport) @trusted
3126 {
3127     return igGetBackgroundDrawListImGuiViewportPtr(viewport);
3128 }
3129 
3130 ImDrawList* GetForegroundDrawListImGuiViewportPtr(scope ImGuiViewport* viewport) @trusted
3131 {
3132     return igGetForegroundDrawListImGuiViewportPtr(viewport);
3133 }
3134 
3135 void AddDrawListToDrawDataEx(scope ImDrawData* draw_data, scope ImVector_ImDrawListPtr* out_list, scope ImDrawList* draw_list) @trusted
3136 {
3137     igAddDrawListToDrawDataEx(draw_data, out_list, draw_list);
3138 }
3139 
3140 /++
3141 + Init
3142 +/
3143 void Initialize() @trusted
3144 {
3145     igInitialize();
3146 }
3147 
3148 void Shutdown() @trusted
3149 {
3150     igShutdown();
3151 }
3152 
3153 /++
3154 + Context name
3155 + &
3156 + generic context hooks
3157 +/
3158 void SetContextName(scope ImGuiContext* ctx, const(char)* name) @trusted
3159 {
3160     igSetContextName(ctx, name);
3161 }
3162 
3163 ImGuiID AddContextHook(ImGuiContext* ctx, ImGuiContextHook* hook) @trusted
3164 {
3165     return igAddContextHook(ctx, hook);
3166 }
3167 
3168 void RemoveContextHook(scope ImGuiContext* ctx, ImGuiID hook_to_remove) @trusted
3169 {
3170     igRemoveContextHook(ctx, hook_to_remove);
3171 }
3172 
3173 void CallContextHooks(scope ImGuiContext* ctx, ImGuiContextHookType type) @trusted
3174 {
3175     igCallContextHooks(ctx, type);
3176 }
3177 
3178 /++
3179 + NewFrame
3180 +/
3181 void UpdateInputEvents(bool trickle_fast_inputs) @trusted
3182 {
3183     igUpdateInputEvents(trickle_fast_inputs);
3184 }
3185 
3186 void UpdateHoveredWindowAndCaptureFlags(ImVec2 mouse_pos) @trusted
3187 {
3188     igUpdateHoveredWindowAndCaptureFlags(mouse_pos);
3189 }
3190 
3191 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
3192 {
3193     igFindHoveredWindowEx(pos, find_first_and_in_any_viewport, out_hovered_window, out_hovered_window_under_moving_window);
3194 }
3195 
3196 void StartMouseMovingWindow(scope ImGuiWindow* window) @trusted
3197 {
3198     igStartMouseMovingWindow(window);
3199 }
3200 
3201 void StopMouseMovingWindow() @trusted
3202 {
3203     igStopMouseMovingWindow();
3204 }
3205 
3206 void UpdateMouseMovingWindowNewFrame() @trusted
3207 {
3208     igUpdateMouseMovingWindowNewFrame();
3209 }
3210 
3211 void UpdateMouseMovingWindowEndFrame() @trusted
3212 {
3213     igUpdateMouseMovingWindowEndFrame();
3214 }
3215 
3216 /++
3217 + Viewports
3218 +/
3219 ImGuiViewport* GetWindowViewport() @trusted
3220 {
3221     return igGetWindowViewport();
3222 }
3223 
3224 void ScaleWindowsInViewport(scope ImGuiViewportP* viewport, float scale) @trusted
3225 {
3226     igScaleWindowsInViewport(viewport, scale);
3227 }
3228 
3229 void SetWindowViewport(scope ImGuiWindow* window, scope ImGuiViewportP* viewport) @trusted
3230 {
3231     igSetWindowViewport(window, viewport);
3232 }
3233 
3234 /++
3235 + Settings
3236 +/
3237 void MarkIniSettingsDirty() @trusted
3238 {
3239     igMarkIniSettingsDirty();
3240 }
3241 
3242 void MarkIniSettingsDirtyImGuiWindowPtr(scope ImGuiWindow* window) @trusted
3243 {
3244     igMarkIniSettingsDirtyImGuiWindowPtr(window);
3245 }
3246 
3247 void ClearIniSettings() @trusted
3248 {
3249     igClearIniSettings();
3250 }
3251 
3252 void AddSettingsHandler(ImGuiSettingsHandler* handler) @trusted
3253 {
3254     igAddSettingsHandler(handler);
3255 }
3256 
3257 void RemoveSettingsHandler(const(char)* type_name) @trusted
3258 {
3259     igRemoveSettingsHandler(type_name);
3260 }
3261 
3262 ImGuiSettingsHandler* FindSettingsHandler(const(char)* type_name) @trusted
3263 {
3264     return igFindSettingsHandler(type_name);
3265 }
3266 
3267 /++
3268 + Settings  Windows
3269 +/
3270 ImGuiWindowSettings* CreateNewWindowSettings(const(char)* name) @trusted
3271 {
3272     return igCreateNewWindowSettings(name);
3273 }
3274 
3275 ImGuiWindowSettings* FindWindowSettingsByID(ImGuiID id) @trusted
3276 {
3277     return igFindWindowSettingsByID(id);
3278 }
3279 
3280 ImGuiWindowSettings* FindWindowSettingsByWindow(scope ImGuiWindow* window) @trusted
3281 {
3282     return igFindWindowSettingsByWindow(window);
3283 }
3284 
3285 void ClearWindowSettings(const(char)* name) @trusted
3286 {
3287     igClearWindowSettings(name);
3288 }
3289 
3290 /++
3291 + Localization
3292 +/
3293 void LocalizeRegisterEntries(ImGuiLocEntry* entries, int count) @trusted
3294 {
3295     igLocalizeRegisterEntries(entries, count);
3296 }
3297 
3298 const(char)* LocalizeGetMsg(ImGuiLocKey key) @trusted
3299 {
3300     return igLocalizeGetMsg(key);
3301 }
3302 
3303 /++
3304 + Scrolling
3305 +/
3306 void SetScrollXImGuiWindowPtr(scope ImGuiWindow* window, float scroll_x) @trusted
3307 {
3308     igSetScrollXImGuiWindowPtr(window, scroll_x);
3309 }
3310 
3311 void SetScrollYImGuiWindowPtr(scope ImGuiWindow* window, float scroll_y) @trusted
3312 {
3313     igSetScrollYImGuiWindowPtr(window, scroll_y);
3314 }
3315 
3316 void SetScrollFromPosXImGuiWindowPtr(scope ImGuiWindow* window, float local_x, float center_x_ratio) @trusted
3317 {
3318     igSetScrollFromPosXImGuiWindowPtr(window, local_x, center_x_ratio);
3319 }
3320 
3321 void SetScrollFromPosYImGuiWindowPtr(scope ImGuiWindow* window, float local_y, float center_y_ratio) @trusted
3322 {
3323     igSetScrollFromPosYImGuiWindowPtr(window, local_y, center_y_ratio);
3324 }
3325 
3326 /++
3327 + Early workinprogress API (ScrollToItem() will become public)
3328 +/
3329 void ScrollToItem(ImGuiScrollFlags flags) @trusted
3330 {
3331     igScrollToItem(flags);
3332 }
3333 
3334 void ScrollToRect(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted
3335 {
3336     igScrollToRect(window, rect, flags);
3337 }
3338 
3339 ImVec2 ScrollToRectEx(scope ImGuiWindow* window, ImRect rect, ImGuiScrollFlags flags) @trusted
3340 {
3341     return igScrollToRectEx(window, rect, flags);
3342 }
3343 
3344 /++
3345 + #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
3346 +/
3347 void ScrollToBringRectIntoView(scope ImGuiWindow* window, ImRect rect) @trusted
3348 {
3349     igScrollToBringRectIntoView(window, rect);
3350 }
3351 
3352 /++
3353 + Basic Accessors
3354 +/
3355 ImGuiItemStatusFlags GetItemStatusFlags() @trusted
3356 {
3357     return igGetItemStatusFlags();
3358 }
3359 
3360 ImGuiID GetActiveID() @trusted
3361 {
3362     return igGetActiveID();
3363 }
3364 
3365 ImGuiID GetFocusID() @trusted
3366 {
3367     return igGetFocusID();
3368 }
3369 
3370 void SetActiveID(ImGuiID id, scope ImGuiWindow* window) @trusted
3371 {
3372     igSetActiveID(id, window);
3373 }
3374 
3375 void SetFocusID(ImGuiID id, scope ImGuiWindow* window) @trusted
3376 {
3377     igSetFocusID(id, window);
3378 }
3379 
3380 void ClearActiveID() @trusted
3381 {
3382     igClearActiveID();
3383 }
3384 
3385 ImGuiID GetHoveredID() @trusted
3386 {
3387     return igGetHoveredID();
3388 }
3389 
3390 void SetHoveredID(ImGuiID id) @trusted
3391 {
3392     igSetHoveredID(id);
3393 }
3394 
3395 void KeepAliveID(ImGuiID id) @trusted
3396 {
3397     igKeepAliveID(id);
3398 }
3399 
3400 void MarkItemEdited(ImGuiID id) @trusted
3401 {
3402     igMarkItemEdited(id);
3403 }
3404 
3405 void PushOverrideID(ImGuiID id) @trusted
3406 {
3407     igPushOverrideID(id);
3408 }
3409 
3410 ImGuiID GetIDWithSeedStr(const(char)* str_id_begin, const(char)* str_id_end, ImGuiID seed) @trusted
3411 {
3412     return igGetIDWithSeedStr(str_id_begin, str_id_end, seed);
3413 }
3414 
3415 ImGuiID GetIDWithSeed(int n, ImGuiID seed) @trusted
3416 {
3417     return igGetIDWithSeed(n, seed);
3418 }
3419 
3420 /++
3421 + Basic Helpers for widget code
3422 +/
3423 void ItemSize(ImVec2 size) @trusted
3424 {
3425     igItemSize(size);
3426 }
3427 
3428 void ItemSizeEx(ImVec2 size, float text_baseline_y) @trusted
3429 {
3430     igItemSizeEx(size, text_baseline_y);
3431 }
3432 
3433 void ItemSizeImRect(ImRect bb) @trusted
3434 {
3435     igItemSizeImRect(bb);
3436 }
3437 
3438 void ItemSizeImRectEx(ImRect bb, float text_baseline_y) @trusted
3439 {
3440     igItemSizeImRectEx(bb, text_baseline_y);
3441 }
3442 
3443 bool ItemAdd(ImRect bb, ImGuiID id) @trusted
3444 {
3445     return igItemAdd(bb, id);
3446 }
3447 
3448 bool ItemAddEx(ImRect bb, ImGuiID id, ImRect* nav_bb, ImGuiItemFlags extra_flags) @trusted
3449 {
3450     return igItemAddEx(bb, id, nav_bb, extra_flags);
3451 }
3452 
3453 bool ItemHoverable(ImRect bb, ImGuiID id, ImGuiItemFlags item_flags) @trusted
3454 {
3455     return igItemHoverable(bb, id, item_flags);
3456 }
3457 
3458 bool IsWindowContentHoverable(scope ImGuiWindow* window, ImGuiHoveredFlags flags) @trusted
3459 {
3460     return igIsWindowContentHoverable(window, flags);
3461 }
3462 
3463 bool IsClippedEx(ImRect bb, ImGuiID id) @trusted
3464 {
3465     return igIsClippedEx(bb, id);
3466 }
3467 
3468 void SetLastItemData(ImGuiID item_id, ImGuiItemFlags item_flags, ImGuiItemStatusFlags status_flags, ImRect item_rect) @trusted
3469 {
3470     igSetLastItemData(item_id, item_flags, status_flags, item_rect);
3471 }
3472 
3473 ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h) @trusted
3474 {
3475     return igCalcItemSize(size, default_w, default_h);
3476 }
3477 
3478 float CalcWrapWidthForPos(ImVec2 pos, float wrap_pos_x) @trusted
3479 {
3480     return igCalcWrapWidthForPos(pos, wrap_pos_x);
3481 }
3482 
3483 void PushMultiItemsWidths(int components, float width_full) @trusted
3484 {
3485     igPushMultiItemsWidths(components, width_full);
3486 }
3487 
3488 void ShrinkWidths(scope ImGuiShrinkWidthItem* items, int count, float width_excess, float width_min) @trusted
3489 {
3490     igShrinkWidths(items, count, width_excess, width_min);
3491 }
3492 
3493 void CalcClipRectVisibleItemsY(ImRect clip_rect, ImVec2 pos, float items_height, scope int* out_visible_start, scope int* out_visible_end) @trusted
3494 {
3495     igCalcClipRectVisibleItemsY(clip_rect, pos, items_height, out_visible_start, out_visible_end);
3496 }
3497 
3498 /++
3499 + Parameter stacks (shared)
3500 +/
3501 const(ImGuiStyleVarInfo)* GetStyleVarInfo(ImGuiStyleVar idx) @trusted
3502 {
3503     return igGetStyleVarInfo(idx);
3504 }
3505 
3506 void BeginDisabledOverrideReenable() @trusted
3507 {
3508     igBeginDisabledOverrideReenable();
3509 }
3510 
3511 void EndDisabledOverrideReenable() @trusted
3512 {
3513     igEndDisabledOverrideReenable();
3514 }
3515 
3516 /++
3517 + Logging/Capture
3518 +/
3519 void LogBegin(ImGuiLogFlags flags, int auto_open_depth) @trusted
3520 {
3521     igLogBegin(flags, auto_open_depth);
3522 }
3523 
3524 void LogToBuffer() @trusted
3525 {
3526     igLogToBuffer();
3527 }
3528 
3529 void LogToBufferEx(int auto_open_depth) @trusted
3530 {
3531     igLogToBufferEx(auto_open_depth);
3532 }
3533 
3534 void LogRenderedText(ImVec2* ref_pos, const(char)* text) @trusted
3535 {
3536     igLogRenderedText(ref_pos, text);
3537 }
3538 
3539 void LogRenderedTextEx(ImVec2* ref_pos, const(char)* text, const(char)* text_end) @trusted
3540 {
3541     igLogRenderedTextEx(ref_pos, text, text_end);
3542 }
3543 
3544 void LogSetNextTextDecoration(const(char)* prefix, const(char)* suffix) @trusted
3545 {
3546     igLogSetNextTextDecoration(prefix, suffix);
3547 }
3548 
3549 /++
3550 + Childs
3551 +/
3552 bool BeginChildEx(const(char)* name, ImGuiID id, ImVec2 size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags) @trusted
3553 {
3554     return igBeginChildEx(name, id, size_arg, child_flags, window_flags);
3555 }
3556 
3557 /++
3558 + Popups, Modals
3559 +/
3560 bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_window_flags) @trusted
3561 {
3562     return igBeginPopupEx(id, extra_window_flags);
3563 }
3564 
3565 bool BeginPopupMenuEx(ImGuiID id, const(char)* label, ImGuiWindowFlags extra_window_flags) @trusted
3566 {
3567     return igBeginPopupMenuEx(id, label, extra_window_flags);
3568 }
3569 
3570 void OpenPopupEx(ImGuiID id) @trusted
3571 {
3572     igOpenPopupEx(id);
3573 }
3574 
3575 void OpenPopupExEx(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted
3576 {
3577     igOpenPopupExEx(id, popup_flags);
3578 }
3579 
3580 void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup) @trusted
3581 {
3582     igClosePopupToLevel(remaining, restore_focus_to_window_under_popup);
3583 }
3584 
3585 void ClosePopupsOverWindow(scope ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup) @trusted
3586 {
3587     igClosePopupsOverWindow(ref_window, restore_focus_to_window_under_popup);
3588 }
3589 
3590 void ClosePopupsExceptModals() @trusted
3591 {
3592     igClosePopupsExceptModals();
3593 }
3594 
3595 bool IsPopupOpenID(ImGuiID id, ImGuiPopupFlags popup_flags) @trusted
3596 {
3597     return igIsPopupOpenID(id, popup_flags);
3598 }
3599 
3600 ImRect GetPopupAllowedExtentRect(scope ImGuiWindow* window) @trusted
3601 {
3602     return igGetPopupAllowedExtentRect(window);
3603 }
3604 
3605 ImGuiWindow* GetTopMostPopupModal() @trusted
3606 {
3607     return igGetTopMostPopupModal();
3608 }
3609 
3610 ImGuiWindow* GetTopMostAndVisiblePopupModal() @trusted
3611 {
3612     return igGetTopMostAndVisiblePopupModal();
3613 }
3614 
3615 ImGuiWindow* FindBlockingModal(scope ImGuiWindow* window) @trusted
3616 {
3617     return igFindBlockingModal(window);
3618 }
3619 
3620 ImVec2 FindBestWindowPosForPopup(scope ImGuiWindow* window) @trusted
3621 {
3622     return igFindBestWindowPosForPopup(window);
3623 }
3624 
3625 ImVec2 FindBestWindowPosForPopupEx(ImVec2 ref_pos, ImVec2 size, scope ImGuiDir* last_dir, ImRect r_outer, ImRect r_avoid, ImGuiPopupPositionPolicy policy) @trusted
3626 {
3627     return igFindBestWindowPosForPopupEx(ref_pos, size, last_dir, r_outer, r_avoid, policy);
3628 }
3629 
3630 ImGuiMouseButton GetMouseButtonFromPopupFlags(ImGuiPopupFlags flags) @trusted
3631 {
3632     return igGetMouseButtonFromPopupFlags(flags);
3633 }
3634 
3635 /++
3636 + Tooltips
3637 +/
3638 bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags) @trusted
3639 {
3640     return igBeginTooltipEx(tooltip_flags, extra_window_flags);
3641 }
3642 
3643 bool BeginTooltipHidden() @trusted
3644 {
3645     return igBeginTooltipHidden();
3646 }
3647 
3648 /++
3649 + Menus
3650 +/
3651 bool BeginViewportSideBar(const(char)* name, scope ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags) @trusted
3652 {
3653     return igBeginViewportSideBar(name, viewport, dir, size, window_flags);
3654 }
3655 
3656 bool BeginMenuWithIcon(const(char)* label, const(char)* icon) @trusted
3657 {
3658     return igBeginMenuWithIcon(label, icon);
3659 }
3660 
3661 bool BeginMenuWithIconEx(const(char)* label, const(char)* icon, bool enabled) @trusted
3662 {
3663     return igBeginMenuWithIconEx(label, icon, enabled);
3664 }
3665 
3666 bool MenuItemWithIcon(const(char)* label, const(char)* icon) @trusted
3667 {
3668     return igMenuItemWithIcon(label, icon);
3669 }
3670 
3671 bool MenuItemWithIconEx(const(char)* label, const(char)* icon, const(char)* shortcut, bool selected, bool enabled) @trusted
3672 {
3673     return igMenuItemWithIconEx(label, icon, shortcut, selected, enabled);
3674 }
3675 
3676 /++
3677 + Combos
3678 +/
3679 bool BeginComboPopup(ImGuiID popup_id, ImRect bb, ImGuiComboFlags flags) @trusted
3680 {
3681     return igBeginComboPopup(popup_id, bb, flags);
3682 }
3683 
3684 bool BeginComboPreview() @trusted
3685 {
3686     return igBeginComboPreview();
3687 }
3688 
3689 void EndComboPreview() @trusted
3690 {
3691     igEndComboPreview();
3692 }
3693 
3694 /++
3695 + Keyboard/Gamepad Navigation
3696 +/
3697 void NavInitWindow(scope ImGuiWindow* window, bool force_reinit) @trusted
3698 {
3699     igNavInitWindow(window, force_reinit);
3700 }
3701 
3702 void NavInitRequestApplyResult() @trusted
3703 {
3704     igNavInitRequestApplyResult();
3705 }
3706 
3707 bool NavMoveRequestButNoResultYet() @trusted
3708 {
3709     return igNavMoveRequestButNoResultYet();
3710 }
3711 
3712 void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted
3713 {
3714     igNavMoveRequestSubmit(move_dir, clip_dir, move_flags, scroll_flags);
3715 }
3716 
3717 void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags) @trusted
3718 {
3719     igNavMoveRequestForward(move_dir, clip_dir, move_flags, scroll_flags);
3720 }
3721 
3722 void NavMoveRequestResolveWithLastItem(scope ImGuiNavItemData* result) @trusted
3723 {
3724     igNavMoveRequestResolveWithLastItem(result);
3725 }
3726 
3727 void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiTreeNodeStackData* tree_node_data) @trusted
3728 {
3729     igNavMoveRequestResolveWithPastTreeNode(result, tree_node_data);
3730 }
3731 
3732 void NavMoveRequestCancel() @trusted
3733 {
3734     igNavMoveRequestCancel();
3735 }
3736 
3737 void NavMoveRequestApplyResult() @trusted
3738 {
3739     igNavMoveRequestApplyResult();
3740 }
3741 
3742 void NavMoveRequestTryWrapping(scope ImGuiWindow* window, ImGuiNavMoveFlags move_flags) @trusted
3743 {
3744     igNavMoveRequestTryWrapping(window, move_flags);
3745 }
3746 
3747 void NavHighlightActivated(ImGuiID id) @trusted
3748 {
3749     igNavHighlightActivated(id);
3750 }
3751 
3752 void NavClearPreferredPosForAxis(ImGuiAxis axis) @trusted
3753 {
3754     igNavClearPreferredPosForAxis(axis);
3755 }
3756 
3757 void SetNavCursorVisibleAfterMove() @trusted
3758 {
3759     igSetNavCursorVisibleAfterMove();
3760 }
3761 
3762 void NavUpdateCurrentWindowIsScrollPushableX() @trusted
3763 {
3764     igNavUpdateCurrentWindowIsScrollPushableX();
3765 }
3766 
3767 void SetNavWindow(scope ImGuiWindow* window) @trusted
3768 {
3769     igSetNavWindow(window);
3770 }
3771 
3772 void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, ImRect rect_rel) @trusted
3773 {
3774     igSetNavID(id, nav_layer, focus_scope_id, rect_rel);
3775 }
3776 
3777 void SetNavFocusScope(ImGuiID focus_scope_id) @trusted
3778 {
3779     igSetNavFocusScope(focus_scope_id);
3780 }
3781 
3782 /++
3783 + Focus/Activation
3784 + This should be part of a larger set of API: FocusItem(offset = 1), FocusItemByID(id), ActivateItem(offset = 1), ActivateItemByID(id) etc. which are
3785 + 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.
3786 +/
3787 void FocusItem() @trusted
3788 {
3789     igFocusItem();
3790 }
3791 
3792 void ActivateItemByID(ImGuiID id) @trusted
3793 {
3794     igActivateItemByID(id);
3795 }
3796 
3797 /++
3798 + Inputs
3799 + FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
3800 +/
3801 bool IsNamedKey(ImGuiKey key) @trusted
3802 {
3803     return igIsNamedKey(key);
3804 }
3805 
3806 bool IsNamedKeyOrMod(ImGuiKey key) @trusted
3807 {
3808     return igIsNamedKeyOrMod(key);
3809 }
3810 
3811 bool IsLegacyKey(ImGuiKey key) @trusted
3812 {
3813     return igIsLegacyKey(key);
3814 }
3815 
3816 bool IsKeyboardKey(ImGuiKey key) @trusted
3817 {
3818     return igIsKeyboardKey(key);
3819 }
3820 
3821 bool IsGamepadKey(ImGuiKey key) @trusted
3822 {
3823     return igIsGamepadKey(key);
3824 }
3825 
3826 bool IsMouseKey(ImGuiKey key) @trusted
3827 {
3828     return igIsMouseKey(key);
3829 }
3830 
3831 bool IsAliasKey(ImGuiKey key) @trusted
3832 {
3833     return igIsAliasKey(key);
3834 }
3835 
3836 bool IsLRModKey(ImGuiKey key) @trusted
3837 {
3838     return igIsLRModKey(key);
3839 }
3840 
3841 ImGuiKeyChord FixupKeyChord(ImGuiKeyChord key_chord) @trusted
3842 {
3843     return igFixupKeyChord(key_chord);
3844 }
3845 
3846 ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key) @trusted
3847 {
3848     return igConvertSingleModFlagToKey(key);
3849 }
3850 
3851 ImGuiKeyData* GetKeyDataImGuiContextPtr(scope ImGuiContext* ctx, ImGuiKey key) @trusted
3852 {
3853     return igGetKeyDataImGuiContextPtr(ctx, key);
3854 }
3855 
3856 ImGuiKeyData* GetKeyData(ImGuiKey key) @trusted
3857 {
3858     return igGetKeyData(key);
3859 }
3860 
3861 const(char)* GetKeyChordName(ImGuiKeyChord key_chord) @trusted
3862 {
3863     return igGetKeyChordName(key_chord);
3864 }
3865 
3866 ImGuiKey MouseButtonToKey(ImGuiMouseButton button) @trusted
3867 {
3868     return igMouseButtonToKey(button);
3869 }
3870 
3871 bool IsMouseDragPastThreshold(ImGuiMouseButton button) @trusted
3872 {
3873     return igIsMouseDragPastThreshold(button);
3874 }
3875 
3876 bool IsMouseDragPastThresholdEx(ImGuiMouseButton button, float lock_threshold) @trusted
3877 {
3878     return igIsMouseDragPastThresholdEx(button, lock_threshold);
3879 }
3880 
3881 ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down) @trusted
3882 {
3883     return igGetKeyMagnitude2d(key_left, key_right, key_up, key_down);
3884 }
3885 
3886 float GetNavTweakPressedAmount(ImGuiAxis axis) @trusted
3887 {
3888     return igGetNavTweakPressedAmount(axis);
3889 }
3890 
3891 int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) @trusted
3892 {
3893     return igCalcTypematicRepeatAmount(t0, t1, repeat_delay, repeat_rate);
3894 }
3895 
3896 void GetTypematicRepeatRate(ImGuiInputFlags flags, scope float* repeat_delay, scope float* repeat_rate) @trusted
3897 {
3898     igGetTypematicRepeatRate(flags, repeat_delay, repeat_rate);
3899 }
3900 
3901 void TeleportMousePos(ImVec2 pos) @trusted
3902 {
3903     igTeleportMousePos(pos);
3904 }
3905 
3906 void SetActiveIdUsingAllKeyboardKeys() @trusted
3907 {
3908     igSetActiveIdUsingAllKeyboardKeys();
3909 }
3910 
3911 bool IsActiveIdUsingNavDir(ImGuiDir dir) @trusted
3912 {
3913     return igIsActiveIdUsingNavDir(dir);
3914 }
3915 
3916 /++
3917 + [EXPERIMENTAL] LowLevel: Key/Input Ownership
3918 +  The idea is that instead of "eating" a given input, we can link to an owner id.
3919 +  Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead).
3920 +  Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_NoOwner (== 1) or a custom ID.
3921 +  Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0).
3922 +  Input ownership is automatically released on the frame after a key is released. Therefore:
3923 +  for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case).
3924 +  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).
3925 +  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.
3926 +  This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step.
3927 + Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved.
3928 +/
3929 ImGuiID GetKeyOwner(ImGuiKey key) @trusted
3930 {
3931     return igGetKeyOwner(key);
3932 }
3933 
3934 void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted
3935 {
3936     igSetKeyOwner(key, owner_id, flags);
3937 }
3938 
3939 void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags) @trusted
3940 {
3941     igSetKeyOwnersForKeyChord(key, owner_id, flags);
3942 }
3943 
3944 void SetItemKeyOwnerImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted
3945 {
3946     igSetItemKeyOwnerImGuiInputFlags(key, flags);
3947 }
3948 
3949 bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id) @trusted
3950 {
3951     return igTestKeyOwner(key, owner_id);
3952 }
3953 
3954 ImGuiKeyOwnerData* GetKeyOwnerData(scope ImGuiContext* ctx, ImGuiKey key) @trusted
3955 {
3956     return igGetKeyOwnerData(ctx, key);
3957 }
3958 
3959 /++
3960 + [EXPERIMENTAL] HighLevel: Input Access functions w/ support for Key/Input Ownership
3961 +  Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag.
3962 +  Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0)
3963 +  Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'.
3964 + Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease.
3965 +  Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API.
3966 +/
3967 bool IsKeyDownID(ImGuiKey key, ImGuiID owner_id) @trusted
3968 {
3969     return igIsKeyDownID(key, owner_id);
3970 }
3971 
3972 bool IsKeyPressedImGuiInputFlags(ImGuiKey key, ImGuiInputFlags flags) @trusted
3973 {
3974     return igIsKeyPressedImGuiInputFlags(key, flags);
3975 }
3976 
3977 bool IsKeyPressedImGuiInputFlagsEx(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id) @trusted
3978 {
3979     return igIsKeyPressedImGuiInputFlagsEx(key, flags, owner_id);
3980 }
3981 
3982 bool IsKeyReleasedID(ImGuiKey key, ImGuiID owner_id) @trusted
3983 {
3984     return igIsKeyReleasedID(key, owner_id);
3985 }
3986 
3987 bool IsKeyChordPressedImGuiInputFlags(ImGuiKeyChord key_chord, ImGuiInputFlags flags) @trusted
3988 {
3989     return igIsKeyChordPressedImGuiInputFlags(key_chord, flags);
3990 }
3991 
3992 bool IsKeyChordPressedImGuiInputFlagsEx(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted
3993 {
3994     return igIsKeyChordPressedImGuiInputFlagsEx(key_chord, flags, owner_id);
3995 }
3996 
3997 bool IsMouseDownID(ImGuiMouseButton button, ImGuiID owner_id) @trusted
3998 {
3999     return igIsMouseDownID(button, owner_id);
4000 }
4001 
4002 bool IsMouseClickedImGuiInputFlags(ImGuiMouseButton button, ImGuiInputFlags flags) @trusted
4003 {
4004     return igIsMouseClickedImGuiInputFlags(button, flags);
4005 }
4006 
4007 bool IsMouseClickedImGuiInputFlagsEx(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id) @trusted
4008 {
4009     return igIsMouseClickedImGuiInputFlagsEx(button, flags, owner_id);
4010 }
4011 
4012 bool IsMouseReleasedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted
4013 {
4014     return igIsMouseReleasedID(button, owner_id);
4015 }
4016 
4017 bool IsMouseDoubleClickedID(ImGuiMouseButton button, ImGuiID owner_id) @trusted
4018 {
4019     return igIsMouseDoubleClickedID(button, owner_id);
4020 }
4021 
4022 /++
4023 + Shortcut Testing
4024 + &
4025 + Routing
4026 +  Set Shortcut() and SetNextItemShortcut() in imgui.h
4027 +  When a policy (except for ImGuiInputFlags_RouteAlways *) is set, Shortcut() will register itself with SetShortcutRouting(),
4028 + allowing the system to decide where to route the input among other routeaware calls.
4029 + (* using ImGuiInputFlags_RouteAlways is roughly equivalent to calling IsKeyChordPressed(key) and bypassing route registration and check)
4030 +  When using one of the routing option:
4031 +  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.)
4032 +  Routes are requested given a chord (key + modifiers) and a routing policy.
4033 +  Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame.
4034 +  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).
4035 +  Multiple read sites may use the same owner id can all access the granted route.
4036 +  When owner_id is 0 we use the current Focus Scope ID as a owner ID in order to identify our location.
4037 +  You can chain two unrelated windows in the focus stack using SetWindowParentWindowForFocusRoute()
4038 + e.g. if you have a tool window associated to a document, and you want document shortcuts to run when the tool is focused.
4039 +/
4040 bool ShortcutID(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted
4041 {
4042     return igShortcutID(key_chord, flags, owner_id);
4043 }
4044 
4045 bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id) @trusted
4046 {
4047     return igSetShortcutRouting(key_chord, flags, owner_id);
4048 }
4049 
4050 bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id) @trusted
4051 {
4052     return igTestShortcutRouting(key_chord, owner_id);
4053 }
4054 
4055 ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord) @trusted
4056 {
4057     return igGetShortcutRoutingData(key_chord);
4058 }
4059 
4060 /++
4061 + [EXPERIMENTAL] Focus Scope
4062 + This is generally used to identify a unique input location (for e.g. a selection set)
4063 + There is one per window (automatically set in Begin), but:
4064 +  Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set.
4065 + So in order to identify a set multiple lists in same window may each need a focus scope.
4066 + If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope()
4067 +  Shortcut routing also use focus scope as a default location identifier if an owner is not provided.
4068 + We don't use the ID Stack for this as it is common to want them separate.
4069 +/
4070 void PushFocusScope(ImGuiID id) @trusted
4071 {
4072     igPushFocusScope(id);
4073 }
4074 
4075 void PopFocusScope() @trusted
4076 {
4077     igPopFocusScope();
4078 }
4079 
4080 ImGuiID GetCurrentFocusScope() @trusted
4081 {
4082     return igGetCurrentFocusScope();
4083 }
4084 
4085 /++
4086 + Drag and Drop
4087 +/
4088 bool IsDragDropActive() @trusted
4089 {
4090     return igIsDragDropActive();
4091 }
4092 
4093 bool BeginDragDropTargetCustom(ImRect bb, ImGuiID id) @trusted
4094 {
4095     return igBeginDragDropTargetCustom(bb, id);
4096 }
4097 
4098 bool BeginDragDropTargetViewport(scope ImGuiViewport* viewport) @trusted
4099 {
4100     return igBeginDragDropTargetViewport(viewport);
4101 }
4102 
4103 bool BeginDragDropTargetViewportEx(scope ImGuiViewport* viewport, scope ImRect* p_bb) @trusted
4104 {
4105     return igBeginDragDropTargetViewportEx(viewport, p_bb);
4106 }
4107 
4108 void ClearDragDrop() @trusted
4109 {
4110     igClearDragDrop();
4111 }
4112 
4113 bool IsDragDropPayloadBeingAccepted() @trusted
4114 {
4115     return igIsDragDropPayloadBeingAccepted();
4116 }
4117 
4118 void RenderDragDropTargetRectForItem(ImRect bb) @trusted
4119 {
4120     igRenderDragDropTargetRectForItem(bb);
4121 }
4122 
4123 void RenderDragDropTargetRectEx(scope ImDrawList* draw_list, ImRect bb) @trusted
4124 {
4125     igRenderDragDropTargetRectEx(draw_list, bb);
4126 }
4127 
4128 /++
4129 + TypingSelect API
4130 + (provide Windows Explorer style "select items by typing partial name" + "cycle through items by typing same letter" feature)
4131 + (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!)
4132 +/
4133 ImGuiTypingSelectRequest* GetTypingSelectRequest() @trusted
4134 {
4135     return igGetTypingSelectRequest();
4136 }
4137 
4138 ImGuiTypingSelectRequest* GetTypingSelectRequestEx(ImGuiTypingSelectFlags flags) @trusted
4139 {
4140     return igGetTypingSelectRequestEx(flags);
4141 }
4142 
4143 int TypingSelectFindMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted
4144 {
4145     return igTypingSelectFindMatch(req, items_count, get_item_name_func, user_data, nav_item_idx);
4146 }
4147 
4148 int TypingSelectFindNextSingleCharMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data, int nav_item_idx) @trusted
4149 {
4150     return igTypingSelectFindNextSingleCharMatch(req, items_count, get_item_name_func, user_data, nav_item_idx);
4151 }
4152 
4153 int TypingSelectFindBestLeadingMatch(scope ImGuiTypingSelectRequest* req, int items_count, ImGuiGetterCallback get_item_name_func, scope void* user_data) @trusted
4154 {
4155     return igTypingSelectFindBestLeadingMatch(req, items_count, get_item_name_func, user_data);
4156 }
4157 
4158 /++
4159 + BoxSelect API
4160 +/
4161 bool BeginBoxSelect(ImRect scope_rect, scope ImGuiWindow* window, ImGuiID box_select_id, ImGuiMultiSelectFlags ms_flags) @trusted
4162 {
4163     return igBeginBoxSelect(scope_rect, window, box_select_id, ms_flags);
4164 }
4165 
4166 void EndBoxSelect(ImRect scope_rect, ImGuiMultiSelectFlags ms_flags) @trusted
4167 {
4168     igEndBoxSelect(scope_rect, ms_flags);
4169 }
4170 
4171 /++
4172 + MultiSelect API
4173 +/
4174 void MultiSelectItemHeader(ImGuiID id, scope bool* p_selected, scope ImGuiButtonFlags* p_button_flags) @trusted
4175 {
4176     igMultiSelectItemHeader(id, p_selected, p_button_flags);
4177 }
4178 
4179 void MultiSelectItemFooter(ImGuiID id, scope bool* p_selected, scope bool* p_pressed) @trusted
4180 {
4181     igMultiSelectItemFooter(id, p_selected, p_pressed);
4182 }
4183 
4184 void MultiSelectAddSetAll(scope ImGuiMultiSelectTempData* ms, bool selected) @trusted
4185 {
4186     igMultiSelectAddSetAll(ms, selected);
4187 }
4188 
4189 void MultiSelectAddSetRange(scope ImGuiMultiSelectTempData* ms, bool selected, int range_dir, ImGuiSelectionUserData first_item, ImGuiSelectionUserData last_item) @trusted
4190 {
4191     igMultiSelectAddSetRange(ms, selected, range_dir, first_item, last_item);
4192 }
4193 
4194 ImGuiBoxSelectState* GetBoxSelectState(ImGuiID id) @trusted
4195 {
4196     return igGetBoxSelectState(id);
4197 }
4198 
4199 ImGuiMultiSelectState* GetMultiSelectState(ImGuiID id) @trusted
4200 {
4201     return igGetMultiSelectState(id);
4202 }
4203 
4204 /++
4205 + Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API)
4206 +/
4207 void SetWindowClipRectBeforeSetChannel(scope ImGuiWindow* window, ImRect clip_rect) @trusted
4208 {
4209     igSetWindowClipRectBeforeSetChannel(window, clip_rect);
4210 }
4211 
4212 void BeginColumns(const(char)* str_id, int count, ImGuiOldColumnFlags flags) @trusted
4213 {
4214     igBeginColumns(str_id, count, flags);
4215 }
4216 
4217 void EndColumns() @trusted
4218 {
4219     igEndColumns();
4220 }
4221 
4222 void PushColumnClipRect(int column_index) @trusted
4223 {
4224     igPushColumnClipRect(column_index);
4225 }
4226 
4227 void PushColumnsBackground() @trusted
4228 {
4229     igPushColumnsBackground();
4230 }
4231 
4232 void PopColumnsBackground() @trusted
4233 {
4234     igPopColumnsBackground();
4235 }
4236 
4237 ImGuiID GetColumnsID(const(char)* str_id, int count) @trusted
4238 {
4239     return igGetColumnsID(str_id, count);
4240 }
4241 
4242 ImGuiOldColumns* FindOrCreateColumns(scope ImGuiWindow* window, ImGuiID id) @trusted
4243 {
4244     return igFindOrCreateColumns(window, id);
4245 }
4246 
4247 float GetColumnOffsetFromNorm(ImGuiOldColumns* columns, float offset_norm) @trusted
4248 {
4249     return igGetColumnOffsetFromNorm(columns, offset_norm);
4250 }
4251 
4252 float GetColumnNormFromOffset(ImGuiOldColumns* columns, float offset) @trusted
4253 {
4254     return igGetColumnNormFromOffset(columns, offset);
4255 }
4256 
4257 /++
4258 + Tables: Candidates for public API
4259 +/
4260 void TableOpenContextMenu() @trusted
4261 {
4262     igTableOpenContextMenu();
4263 }
4264 
4265 void TableOpenContextMenuEx(int column_n) @trusted
4266 {
4267     igTableOpenContextMenuEx(column_n);
4268 }
4269 
4270 void TableSetColumnWidth(int column_n, float width) @trusted
4271 {
4272     igTableSetColumnWidth(column_n, width);
4273 }
4274 
4275 void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs) @trusted
4276 {
4277     igTableSetColumnSortDirection(column_n, sort_direction, append_to_sort_specs);
4278 }
4279 
4280 int TableGetHoveredRow() @trusted
4281 {
4282     return igTableGetHoveredRow();
4283 }
4284 
4285 float TableGetHeaderRowHeight() @trusted
4286 {
4287     return igTableGetHeaderRowHeight();
4288 }
4289 
4290 float TableGetHeaderAngledMaxLabelWidth() @trusted
4291 {
4292     return igTableGetHeaderAngledMaxLabelWidth();
4293 }
4294 
4295 void TablePushBackgroundChannel() @trusted
4296 {
4297     igTablePushBackgroundChannel();
4298 }
4299 
4300 void TablePopBackgroundChannel() @trusted
4301 {
4302     igTablePopBackgroundChannel();
4303 }
4304 
4305 void TablePushColumnChannel(int column_n) @trusted
4306 {
4307     igTablePushColumnChannel(column_n);
4308 }
4309 
4310 void TablePopColumnChannel() @trusted
4311 {
4312     igTablePopColumnChannel();
4313 }
4314 
4315 void TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label_width, ImGuiTableHeaderData* data, int data_count) @trusted
4316 {
4317     igTableAngledHeadersRowEx(row_id, angle, max_label_width, data, data_count);
4318 }
4319 
4320 /++
4321 + Tables: Internals
4322 +/
4323 ImGuiTable* GetCurrentTable() @trusted
4324 {
4325     return igGetCurrentTable();
4326 }
4327 
4328 ImGuiTable* TableFindByID(ImGuiID id) @trusted
4329 {
4330     return igTableFindByID(id);
4331 }
4332 
4333 bool BeginTableWithID(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags) @trusted
4334 {
4335     return igBeginTableWithID(name, id, columns_count, flags);
4336 }
4337 
4338 bool BeginTableWithIDEx(const(char)* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, ImVec2 outer_size, float inner_width) @trusted
4339 {
4340     return igBeginTableWithIDEx(name, id, columns_count, flags, outer_size, inner_width);
4341 }
4342 
4343 void TableBeginInitMemory(scope ImGuiTable* table, int columns_count) @trusted
4344 {
4345     igTableBeginInitMemory(table, columns_count);
4346 }
4347 
4348 void TableBeginApplyRequests(scope ImGuiTable* table) @trusted
4349 {
4350     igTableBeginApplyRequests(table);
4351 }
4352 
4353 void TableSetupDrawChannels(scope ImGuiTable* table) @trusted
4354 {
4355     igTableSetupDrawChannels(table);
4356 }
4357 
4358 void TableUpdateLayout(scope ImGuiTable* table) @trusted
4359 {
4360     igTableUpdateLayout(table);
4361 }
4362 
4363 void TableUpdateBorders(scope ImGuiTable* table) @trusted
4364 {
4365     igTableUpdateBorders(table);
4366 }
4367 
4368 void TableUpdateColumnsWeightFromWidth(scope ImGuiTable* table) @trusted
4369 {
4370     igTableUpdateColumnsWeightFromWidth(table);
4371 }
4372 
4373 void TableDrawBorders(scope ImGuiTable* table) @trusted
4374 {
4375     igTableDrawBorders(table);
4376 }
4377 
4378 void TableDrawDefaultContextMenu(scope ImGuiTable* table, ImGuiTableFlags flags_for_section_to_display) @trusted
4379 {
4380     igTableDrawDefaultContextMenu(table, flags_for_section_to_display);
4381 }
4382 
4383 bool TableBeginContextMenuPopup(scope ImGuiTable* table) @trusted
4384 {
4385     return igTableBeginContextMenuPopup(table);
4386 }
4387 
4388 void TableMergeDrawChannels(scope ImGuiTable* table) @trusted
4389 {
4390     igTableMergeDrawChannels(table);
4391 }
4392 
4393 ImGuiTableInstanceData* TableGetInstanceData(scope ImGuiTable* table, int instance_no) @trusted
4394 {
4395     return igTableGetInstanceData(table, instance_no);
4396 }
4397 
4398 ImGuiID TableGetInstanceID(scope ImGuiTable* table, int instance_no) @trusted
4399 {
4400     return igTableGetInstanceID(table, instance_no);
4401 }
4402 
4403 void TableFixDisplayOrder(scope ImGuiTable* table) @trusted
4404 {
4405     igTableFixDisplayOrder(table);
4406 }
4407 
4408 void TableSortSpecsSanitize(scope ImGuiTable* table) @trusted
4409 {
4410     igTableSortSpecsSanitize(table);
4411 }
4412 
4413 void TableSortSpecsBuild(scope ImGuiTable* table) @trusted
4414 {
4415     igTableSortSpecsBuild(table);
4416 }
4417 
4418 ImGuiSortDirection TableGetColumnNextSortDirection(scope ImGuiTableColumn* column) @trusted
4419 {
4420     return igTableGetColumnNextSortDirection(column);
4421 }
4422 
4423 void TableFixColumnSortDirection(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted
4424 {
4425     igTableFixColumnSortDirection(table, column);
4426 }
4427 
4428 float TableGetColumnWidthAuto(scope ImGuiTable* table, scope ImGuiTableColumn* column) @trusted
4429 {
4430     return igTableGetColumnWidthAuto(table, column);
4431 }
4432 
4433 void TableBeginRow(scope ImGuiTable* table) @trusted
4434 {
4435     igTableBeginRow(table);
4436 }
4437 
4438 void TableEndRow(scope ImGuiTable* table) @trusted
4439 {
4440     igTableEndRow(table);
4441 }
4442 
4443 void TableBeginCell(scope ImGuiTable* table, int column_n) @trusted
4444 {
4445     igTableBeginCell(table, column_n);
4446 }
4447 
4448 void TableEndCell(scope ImGuiTable* table) @trusted
4449 {
4450     igTableEndCell(table);
4451 }
4452 
4453 ImRect TableGetCellBgRect(ImGuiTable* table, int column_n) @trusted
4454 {
4455     return igTableGetCellBgRect(table, column_n);
4456 }
4457 
4458 const(char)* TableGetColumnNameImGuiTablePtr(ImGuiTable* table, int column_n) @trusted
4459 {
4460     return igTableGetColumnNameImGuiTablePtr(table, column_n);
4461 }
4462 
4463 ImGuiID TableGetColumnResizeID(scope ImGuiTable* table, int column_n) @trusted
4464 {
4465     return igTableGetColumnResizeID(table, column_n);
4466 }
4467 
4468 ImGuiID TableGetColumnResizeIDEx(scope ImGuiTable* table, int column_n, int instance_no) @trusted
4469 {
4470     return igTableGetColumnResizeIDEx(table, column_n, instance_no);
4471 }
4472 
4473 float TableCalcMaxColumnWidth(ImGuiTable* table, int column_n) @trusted
4474 {
4475     return igTableCalcMaxColumnWidth(table, column_n);
4476 }
4477 
4478 void TableSetColumnWidthAutoSingle(scope ImGuiTable* table, int column_n) @trusted
4479 {
4480     igTableSetColumnWidthAutoSingle(table, column_n);
4481 }
4482 
4483 void TableSetColumnWidthAutoAll(scope ImGuiTable* table) @trusted
4484 {
4485     igTableSetColumnWidthAutoAll(table);
4486 }
4487 
4488 void TableSetColumnDisplayOrder(scope ImGuiTable* table, int column_n, int dst_order) @trusted
4489 {
4490     igTableSetColumnDisplayOrder(table, column_n, dst_order);
4491 }
4492 
4493 void TableRemove(scope ImGuiTable* table) @trusted
4494 {
4495     igTableRemove(table);
4496 }
4497 
4498 void TableGcCompactTransientBuffers(scope ImGuiTable* table) @trusted
4499 {
4500     igTableGcCompactTransientBuffers(table);
4501 }
4502 
4503 void TableGcCompactTransientBuffersImGuiTableTempDataPtr(scope ImGuiTableTempData* table) @trusted
4504 {
4505     igTableGcCompactTransientBuffersImGuiTableTempDataPtr(table);
4506 }
4507 
4508 void TableGcCompactSettings() @trusted
4509 {
4510     igTableGcCompactSettings();
4511 }
4512 
4513 /++
4514 + Tables: Settings
4515 +/
4516 void TableLoadSettings(scope ImGuiTable* table) @trusted
4517 {
4518     igTableLoadSettings(table);
4519 }
4520 
4521 void TableSaveSettings(scope ImGuiTable* table) @trusted
4522 {
4523     igTableSaveSettings(table);
4524 }
4525 
4526 void TableResetSettings(scope ImGuiTable* table) @trusted
4527 {
4528     igTableResetSettings(table);
4529 }
4530 
4531 ImGuiTableSettings* TableGetBoundSettings(scope ImGuiTable* table) @trusted
4532 {
4533     return igTableGetBoundSettings(table);
4534 }
4535 
4536 void TableSettingsAddSettingsHandler() @trusted
4537 {
4538     igTableSettingsAddSettingsHandler();
4539 }
4540 
4541 ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count) @trusted
4542 {
4543     return igTableSettingsCreate(id, columns_count);
4544 }
4545 
4546 ImGuiTableSettings* TableSettingsFindByID(ImGuiID id) @trusted
4547 {
4548     return igTableSettingsFindByID(id);
4549 }
4550 
4551 /++
4552 + Tab Bars
4553 +/
4554 ImGuiTabBar* GetCurrentTabBar() @trusted
4555 {
4556     return igGetCurrentTabBar();
4557 }
4558 
4559 ImGuiTabBar* TabBarFindByID(ImGuiID id) @trusted
4560 {
4561     return igTabBarFindByID(id);
4562 }
4563 
4564 void TabBarRemove(scope ImGuiTabBar* tab_bar) @trusted
4565 {
4566     igTabBarRemove(tab_bar);
4567 }
4568 
4569 bool BeginTabBarEx(scope ImGuiTabBar* tab_bar, ImRect bb, ImGuiTabBarFlags flags) @trusted
4570 {
4571     return igBeginTabBarEx(tab_bar, bb, flags);
4572 }
4573 
4574 ImGuiTabItem* TabBarFindTabByID(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted
4575 {
4576     return igTabBarFindTabByID(tab_bar, tab_id);
4577 }
4578 
4579 ImGuiTabItem* TabBarFindTabByOrder(scope ImGuiTabBar* tab_bar, int order) @trusted
4580 {
4581     return igTabBarFindTabByOrder(tab_bar, order);
4582 }
4583 
4584 ImGuiTabItem* TabBarGetCurrentTab(scope ImGuiTabBar* tab_bar) @trusted
4585 {
4586     return igTabBarGetCurrentTab(tab_bar);
4587 }
4588 
4589 int TabBarGetTabOrder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted
4590 {
4591     return igTabBarGetTabOrder(tab_bar, tab);
4592 }
4593 
4594 const(char)* TabBarGetTabName(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted
4595 {
4596     return igTabBarGetTabName(tab_bar, tab);
4597 }
4598 
4599 void TabBarRemoveTab(scope ImGuiTabBar* tab_bar, ImGuiID tab_id) @trusted
4600 {
4601     igTabBarRemoveTab(tab_bar, tab_id);
4602 }
4603 
4604 void TabBarCloseTab(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted
4605 {
4606     igTabBarCloseTab(tab_bar, tab);
4607 }
4608 
4609 void TabBarQueueFocus(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab) @trusted
4610 {
4611     igTabBarQueueFocus(tab_bar, tab);
4612 }
4613 
4614 void TabBarQueueFocusStr(scope ImGuiTabBar* tab_bar, const(char)* tab_name) @trusted
4615 {
4616     igTabBarQueueFocusStr(tab_bar, tab_name);
4617 }
4618 
4619 void TabBarQueueReorder(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, int offset) @trusted
4620 {
4621     igTabBarQueueReorder(tab_bar, tab, offset);
4622 }
4623 
4624 void TabBarQueueReorderFromMousePos(scope ImGuiTabBar* tab_bar, scope ImGuiTabItem* tab, ImVec2 mouse_pos) @trusted
4625 {
4626     igTabBarQueueReorderFromMousePos(tab_bar, tab, mouse_pos);
4627 }
4628 
4629 bool TabBarProcessReorder(scope ImGuiTabBar* tab_bar) @trusted
4630 {
4631     return igTabBarProcessReorder(tab_bar);
4632 }
4633 
4634 bool TabItemEx(scope ImGuiTabBar* tab_bar, const(char)* label, scope bool* p_open, ImGuiTabItemFlags flags, scope ImGuiWindow* docked_window) @trusted
4635 {
4636     return igTabItemEx(tab_bar, label, p_open, flags, docked_window);
4637 }
4638 
4639 void TabItemSpacing(const(char)* str_id, ImGuiTabItemFlags flags, float width) @trusted
4640 {
4641     igTabItemSpacing(str_id, flags, width);
4642 }
4643 
4644 ImVec2 TabItemCalcSizeStr(const(char)* label, bool has_close_button_or_unsaved_marker) @trusted
4645 {
4646     return igTabItemCalcSizeStr(label, has_close_button_or_unsaved_marker);
4647 }
4648 
4649 ImVec2 TabItemCalcSize(scope ImGuiWindow* window) @trusted
4650 {
4651     return igTabItemCalcSize(window);
4652 }
4653 
4654 void TabItemBackground(scope ImDrawList* draw_list, ImRect bb, ImGuiTabItemFlags flags, ImU32 col) @trusted
4655 {
4656     igTabItemBackground(draw_list, bb, flags, col);
4657 }
4658 
4659 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
4660 {
4661     igTabItemLabelAndCloseButton(draw_list, bb, flags, frame_padding, label, tab_id, close_button_id, is_contents_visible, out_just_closed, out_text_clipped);
4662 }
4663 
4664 /++
4665 + Render helpers
4666 + 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.
4667 + NB: All position are in absolute pixels coordinates (we are never using window coordinates internally)
4668 +/
4669 void RenderText(ImVec2 pos, const(char)* text) @trusted
4670 {
4671     igRenderText(pos, text);
4672 }
4673 
4674 void RenderTextEx(ImVec2 pos, const(char)* text, const(char)* text_end, bool hide_text_after_hash) @trusted
4675 {
4676     igRenderTextEx(pos, text, text_end, hide_text_after_hash);
4677 }
4678 
4679 void RenderTextWrapped(ImVec2 pos, const(char)* text, const(char)* text_end, float wrap_width) @trusted
4680 {
4681     igRenderTextWrapped(pos, text, text_end, wrap_width);
4682 }
4683 
4684 void RenderTextClipped(ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted
4685 {
4686     igRenderTextClipped(pos_min, pos_max, text, text_end, text_size_if_known);
4687 }
4688 
4689 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
4690 {
4691     igRenderTextClippedEx(pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect);
4692 }
4693 
4694 void RenderTextClippedWithDrawList(ImDrawList* draw_list, ImVec2 pos_min, ImVec2 pos_max, const(char)* text, const(char)* text_end, ImVec2* text_size_if_known) @trusted
4695 {
4696     igRenderTextClippedWithDrawList(draw_list, pos_min, pos_max, text, text_end, text_size_if_known);
4697 }
4698 
4699 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
4700 {
4701     igRenderTextClippedWithDrawListEx(draw_list, pos_min, pos_max, text, text_end, text_size_if_known, align_, clip_rect);
4702 }
4703 
4704 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
4705 {
4706     igRenderTextEllipsis(draw_list, pos_min, pos_max, ellipsis_max_x, text, text_end, text_size_if_known);
4707 }
4708 
4709 void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col) @trusted
4710 {
4711     igRenderFrame(p_min, p_max, fill_col);
4712 }
4713 
4714 void RenderFrameEx(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool borders, float rounding) @trusted
4715 {
4716     igRenderFrameEx(p_min, p_max, fill_col, borders, rounding);
4717 }
4718 
4719 void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max) @trusted
4720 {
4721     igRenderFrameBorder(p_min, p_max);
4722 }
4723 
4724 void RenderFrameBorderEx(ImVec2 p_min, ImVec2 p_max, float rounding) @trusted
4725 {
4726     igRenderFrameBorderEx(p_min, p_max, rounding);
4727 }
4728 
4729 void RenderColorComponentMarker(ImRect bb, ImU32 col, float rounding) @trusted
4730 {
4731     igRenderColorComponentMarker(bb, col, rounding);
4732 }
4733 
4734 void RenderColorRectWithAlphaCheckerboard(scope ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off) @trusted
4735 {
4736     igRenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, fill_col, grid_step, grid_off);
4737 }
4738 
4739 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
4740 {
4741     igRenderColorRectWithAlphaCheckerboardEx(draw_list, p_min, p_max, fill_col, grid_step, grid_off, rounding, flags);
4742 }
4743 
4744 void RenderNavCursor(ImRect bb, ImGuiID id) @trusted
4745 {
4746     igRenderNavCursor(bb, id);
4747 }
4748 
4749 void RenderNavCursorEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted
4750 {
4751     igRenderNavCursorEx(bb, id, flags);
4752 }
4753 
4754 void RenderNavHighlight(ImRect bb, ImGuiID id) @trusted
4755 {
4756     igRenderNavHighlight(bb, id);
4757 }
4758 
4759 void RenderNavHighlightEx(ImRect bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) @trusted
4760 {
4761     igRenderNavHighlightEx(bb, id, flags);
4762 }
4763 
4764 const(char)* FindRenderedTextEnd(const(char)* text) @trusted
4765 {
4766     return igFindRenderedTextEnd(text);
4767 }
4768 
4769 const(char)* FindRenderedTextEndEx(const(char)* text, const(char)* text_end) @trusted
4770 {
4771     return igFindRenderedTextEndEx(text, text_end);
4772 }
4773 
4774 void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) @trusted
4775 {
4776     igRenderMouseCursor(pos, scale, mouse_cursor, col_fill, col_border, col_shadow);
4777 }
4778 
4779 /++
4780 + Render helpers (those functions don't access any ImGui state!)
4781 +/
4782 void RenderArrow(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir) @trusted
4783 {
4784     igRenderArrow(draw_list, pos, col, dir);
4785 }
4786 
4787 void RenderArrowEx(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale) @trusted
4788 {
4789     igRenderArrowEx(draw_list, pos, col, dir, scale);
4790 }
4791 
4792 void RenderBullet(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col) @trusted
4793 {
4794     igRenderBullet(draw_list, pos, col);
4795 }
4796 
4797 void RenderCheckMark(scope ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz) @trusted
4798 {
4799     igRenderCheckMark(draw_list, pos, col, sz);
4800 }
4801 
4802 void RenderArrowPointingAt(scope ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) @trusted
4803 {
4804     igRenderArrowPointingAt(draw_list, pos, half_sz, direction, col);
4805 }
4806 
4807 void RenderRectFilledInRangeH(scope ImDrawList* draw_list, ImRect rect, ImU32 col, float fill_x0, float fill_x1, float rounding) @trusted
4808 {
4809     igRenderRectFilledInRangeH(draw_list, rect, col, fill_x0, fill_x1, rounding);
4810 }
4811 
4812 void RenderRectFilledWithHole(scope ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding) @trusted
4813 {
4814     igRenderRectFilledWithHole(draw_list, outer, inner, col, rounding);
4815 }
4816 
4817 ImDrawFlags CalcRoundingFlagsForRectInRect(ImRect r_in, ImRect r_outer, float threshold) @trusted
4818 {
4819     return igCalcRoundingFlagsForRectInRect(r_in, r_outer, threshold);
4820 }
4821 
4822 /++
4823 + Widgets: Text
4824 +/
4825 void TextEx(const(char)* text) @trusted
4826 {
4827     igTextEx(text);
4828 }
4829 
4830 void TextExEx(const(char)* text, const(char)* text_end, ImGuiTextFlags flags) @trusted
4831 {
4832     igTextExEx(text, text_end, flags);
4833 }
4834 
4835 alias TextAligned = igTextAligned;
4836 
4837 alias TextAlignedV = igTextAlignedV;
4838 
4839 /++
4840 + Widgets
4841 +/
4842 bool ButtonWithFlags(const(char)* label) @trusted
4843 {
4844     return igButtonWithFlags(label);
4845 }
4846 
4847 bool ButtonWithFlagsEx(const(char)* label, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted
4848 {
4849     return igButtonWithFlagsEx(label, size_arg, flags);
4850 }
4851 
4852 bool ArrowButtonEx(const(char)* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags) @trusted
4853 {
4854     return igArrowButtonEx(str_id, dir, size_arg, flags);
4855 }
4856 
4857 bool ImageButtonWithFlags(ImGuiID id, ImTextureRef tex_ref, ImVec2 image_size, ImVec2 uv0, ImVec2 uv1, ImVec4 bg_col, ImVec4 tint_col, ImGuiButtonFlags flags) @trusted
4858 {
4859     return igImageButtonWithFlags(id, tex_ref, image_size, uv0, uv1, bg_col, tint_col, flags);
4860 }
4861 
4862 void SeparatorEx(ImGuiSeparatorFlags flags) @trusted
4863 {
4864     igSeparatorEx(flags);
4865 }
4866 
4867 void SeparatorExEx(ImGuiSeparatorFlags flags, float thickness) @trusted
4868 {
4869     igSeparatorExEx(flags, thickness);
4870 }
4871 
4872 void SeparatorTextEx(ImGuiID id, const(char)* label, const(char)* label_end, float extra_width) @trusted
4873 {
4874     igSeparatorTextEx(id, label, label_end, extra_width);
4875 }
4876 
4877 bool CheckboxFlagsImS64Ptr(const(char)* label, scope ImS64* flags, ImS64 flags_value) @trusted
4878 {
4879     return igCheckboxFlagsImS64Ptr(label, flags, flags_value);
4880 }
4881 
4882 bool CheckboxFlagsImU64Ptr(const(char)* label, scope ImU64* flags, ImU64 flags_value) @trusted
4883 {
4884     return igCheckboxFlagsImU64Ptr(label, flags, flags_value);
4885 }
4886 
4887 /++
4888 + Widgets: Window Decorations
4889 +/
4890 bool CloseButton(ImGuiID id, ImVec2 pos) @trusted
4891 {
4892     return igCloseButton(id, pos);
4893 }
4894 
4895 bool CollapseButton(ImGuiID id, ImVec2 pos) @trusted
4896 {
4897     return igCollapseButton(id, pos);
4898 }
4899 
4900 void Scrollbar(ImGuiAxis axis) @trusted
4901 {
4902     igScrollbar(axis);
4903 }
4904 
4905 bool ScrollbarEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v) @trusted
4906 {
4907     return igScrollbarEx(bb, id, axis, p_scroll_v, avail_v, contents_v);
4908 }
4909 
4910 bool ScrollbarExEx(ImRect bb, ImGuiID id, ImGuiAxis axis, scope ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags draw_rounding_flags) @trusted
4911 {
4912     return igScrollbarExEx(bb, id, axis, p_scroll_v, avail_v, contents_v, draw_rounding_flags);
4913 }
4914 
4915 ImRect GetWindowScrollbarRect(scope ImGuiWindow* window, ImGuiAxis axis) @trusted
4916 {
4917     return igGetWindowScrollbarRect(window, axis);
4918 }
4919 
4920 ImGuiID GetWindowScrollbarID(scope ImGuiWindow* window, ImGuiAxis axis) @trusted
4921 {
4922     return igGetWindowScrollbarID(window, axis);
4923 }
4924 
4925 ImGuiID GetWindowResizeCornerID(scope ImGuiWindow* window, int n) @trusted
4926 {
4927     return igGetWindowResizeCornerID(window, n);
4928 }
4929 
4930 ImGuiID GetWindowResizeBorderID(scope ImGuiWindow* window, ImGuiDir dir) @trusted
4931 {
4932     return igGetWindowResizeBorderID(window, dir);
4933 }
4934 
4935 /++
4936 + Widgets lowlevel behaviors
4937 +/
4938 bool ButtonBehavior(ImRect bb, ImGuiID id, scope bool* out_hovered, scope bool* out_held, ImGuiButtonFlags flags) @trusted
4939 {
4940     return igButtonBehavior(bb, id, out_hovered, out_held, flags);
4941 }
4942 
4943 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
4944 {
4945     return igDragBehavior(id, data_type, p_v, v_speed, p_min, p_max, format, flags);
4946 }
4947 
4948 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
4949 {
4950     return igSliderBehavior(bb, id, data_type, p_v, p_min, p_max, format, flags, out_grab_bb);
4951 }
4952 
4953 bool SplitterBehavior(ImRect bb, ImGuiID id, ImGuiAxis axis, scope float* size1, scope float* size2, float min_size1, float min_size2) @trusted
4954 {
4955     return igSplitterBehavior(bb, id, axis, size1, size2, min_size1, min_size2);
4956 }
4957 
4958 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
4959 {
4960     return igSplitterBehaviorEx(bb, id, axis, size1, size2, min_size1, min_size2, hover_extend, hover_visibility_delay, bg_col);
4961 }
4962 
4963 /++
4964 + Widgets: Tree Nodes
4965 +/
4966 bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label) @trusted
4967 {
4968     return igTreeNodeBehavior(id, flags, label);
4969 }
4970 
4971 bool TreeNodeBehaviorEx(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label, const(char)* label_end) @trusted
4972 {
4973     return igTreeNodeBehaviorEx(id, flags, label, label_end);
4974 }
4975 
4976 void TreeNodeDrawLineToChildNode(ImVec2 target_pos) @trusted
4977 {
4978     igTreeNodeDrawLineToChildNode(target_pos);
4979 }
4980 
4981 void TreeNodeDrawLineToTreePop(scope ImGuiTreeNodeStackData* data) @trusted
4982 {
4983     igTreeNodeDrawLineToTreePop(data);
4984 }
4985 
4986 void TreePushOverrideID(ImGuiID id) @trusted
4987 {
4988     igTreePushOverrideID(id);
4989 }
4990 
4991 bool TreeNodeGetOpen(ImGuiID storage_id) @trusted
4992 {
4993     return igTreeNodeGetOpen(storage_id);
4994 }
4995 
4996 void TreeNodeSetOpen(ImGuiID storage_id, bool open) @trusted
4997 {
4998     igTreeNodeSetOpen(storage_id, open);
4999 }
5000 
5001 bool TreeNodeUpdateNextOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags) @trusted
5002 {
5003     return igTreeNodeUpdateNextOpen(storage_id, flags);
5004 }
5005 
5006 /++
5007 + Data type helpers
5008 +/
5009 const(ImGuiDataTypeInfo)* DataTypeGetInfo(ImGuiDataType data_type) @trusted
5010 {
5011     return igDataTypeGetInfo(data_type);
5012 }
5013 
5014 int DataTypeFormatString(scope char* buf, int buf_size, ImGuiDataType data_type, scope const(void)* p_data, const(char)* format) @trusted
5015 {
5016     return igDataTypeFormatString(buf, buf_size, data_type, p_data, format);
5017 }
5018 
5019 void DataTypeApplyOp(ImGuiDataType data_type, int op, scope void* output, scope const(void)* arg_1, scope const(void)* arg_2) @trusted
5020 {
5021     igDataTypeApplyOp(data_type, op, output, arg_1, arg_2);
5022 }
5023 
5024 bool DataTypeApplyFromText(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted
5025 {
5026     return igDataTypeApplyFromText(buf, data_type, p_data, format);
5027 }
5028 
5029 bool DataTypeApplyFromTextEx(const(char)* buf, ImGuiDataType data_type, scope void* p_data, const(char)* format, scope void* p_data_when_empty) @trusted
5030 {
5031     return igDataTypeApplyFromTextEx(buf, data_type, p_data, format, p_data_when_empty);
5032 }
5033 
5034 int DataTypeCompare(ImGuiDataType data_type, scope const(void)* arg_1, scope const(void)* arg_2) @trusted
5035 {
5036     return igDataTypeCompare(data_type, arg_1, arg_2);
5037 }
5038 
5039 bool DataTypeClamp(ImGuiDataType data_type, scope void* p_data, scope const(void)* p_min, scope const(void)* p_max) @trusted
5040 {
5041     return igDataTypeClamp(data_type, p_data, p_min, p_max);
5042 }
5043 
5044 bool DataTypeIsZero(ImGuiDataType data_type, scope const(void)* p_data) @trusted
5045 {
5046     return igDataTypeIsZero(data_type, p_data);
5047 }
5048 
5049 /++
5050 + InputText
5051 +/
5052 bool InputTextWithHintAndSize(const(char)* label, const(char)* hint, scope char* buf, int buf_size, ImVec2 size_arg, ImGuiInputTextFlags flags) @trusted
5053 {
5054     return igInputTextWithHintAndSize(label, hint, buf, buf_size, size_arg, flags);
5055 }
5056 
5057 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
5058 {
5059     return igInputTextWithHintAndSizeEx(label, hint, buf, buf_size, size_arg, flags, callback, user_data);
5060 }
5061 
5062 void InputTextDeactivateHook(ImGuiID id) @trusted
5063 {
5064     igInputTextDeactivateHook(id);
5065 }
5066 
5067 bool TempInputText(ImRect bb, ImGuiID id, const(char)* label, scope char* buf, int buf_size, ImGuiInputTextFlags flags) @trusted
5068 {
5069     return igTempInputText(bb, id, label, buf, buf_size, flags);
5070 }
5071 
5072 bool TempInputScalar(ImRect bb, ImGuiID id, const(char)* label, ImGuiDataType data_type, scope void* p_data, const(char)* format) @trusted
5073 {
5074     return igTempInputScalar(bb, id, label, data_type, p_data, format);
5075 }
5076 
5077 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
5078 {
5079     return igTempInputScalarEx(bb, id, label, data_type, p_data, format, p_clamp_min, p_clamp_max);
5080 }
5081 
5082 bool TempInputIsActive(ImGuiID id) @trusted
5083 {
5084     return igTempInputIsActive(id);
5085 }
5086 
5087 void SetNextItemRefVal(ImGuiDataType data_type, scope void* p_data) @trusted
5088 {
5089     igSetNextItemRefVal(data_type, p_data);
5090 }
5091 
5092 bool IsItemActiveAsInputText() @trusted
5093 {
5094     return igIsItemActiveAsInputText();
5095 }
5096 
5097 /++
5098 + Color
5099 +/
5100 void ColorTooltip(const(char)* text, scope const(float)* col, ImGuiColorEditFlags flags) @trusted
5101 {
5102     igColorTooltip(text, col, flags);
5103 }
5104 
5105 void ColorEditOptionsPopup(scope const(float)* col, ImGuiColorEditFlags flags) @trusted
5106 {
5107     igColorEditOptionsPopup(col, flags);
5108 }
5109 
5110 void ColorPickerOptionsPopup(scope const(float)* ref_col, ImGuiColorEditFlags flags) @trusted
5111 {
5112     igColorPickerOptionsPopup(ref_col, flags);
5113 }
5114 
5115 void SetNextItemColorMarker(ImU32 col) @trusted
5116 {
5117     igSetNextItemColorMarker(col);
5118 }
5119 
5120 /++
5121 + Plot
5122 +/
5123 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
5124 {
5125     return igPlotEx(plot_type, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, size_arg);
5126 }
5127 
5128 /++
5129 + Shade functions (write over already created vertices)
5130 +/
5131 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
5132 {
5133     igShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col0, col1);
5134 }
5135 
5136 alias ShadeVertsLinearUV = igShadeVertsLinearUV;
5137 
5138 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
5139 {
5140     igShadeVertsTransformPos(draw_list, vert_start_idx, vert_end_idx, pivot_in, cos_a, sin_a, pivot_out);
5141 }
5142 
5143 /++
5144 + Garbage collection
5145 +/
5146 void GcCompactTransientMiscBuffers() @trusted
5147 {
5148     igGcCompactTransientMiscBuffers();
5149 }
5150 
5151 void GcCompactTransientWindowBuffers(scope ImGuiWindow* window) @trusted
5152 {
5153     igGcCompactTransientWindowBuffers(window);
5154 }
5155 
5156 void GcAwakeTransientWindowBuffers(scope ImGuiWindow* window) @trusted
5157 {
5158     igGcAwakeTransientWindowBuffers(window);
5159 }
5160 
5161 /++
5162 + Error handling, State Recovery
5163 +/
5164 bool ErrorLog(const(char)* msg) @trusted
5165 {
5166     return igErrorLog(msg);
5167 }
5168 
5169 void ErrorRecoveryStoreState(scope ImGuiErrorRecoveryState* state_out) @trusted
5170 {
5171     igErrorRecoveryStoreState(state_out);
5172 }
5173 
5174 void ErrorRecoveryTryToRecoverState(scope ImGuiErrorRecoveryState* state_in) @trusted
5175 {
5176     igErrorRecoveryTryToRecoverState(state_in);
5177 }
5178 
5179 void ErrorRecoveryTryToRecoverWindowState(scope ImGuiErrorRecoveryState* state_in) @trusted
5180 {
5181     igErrorRecoveryTryToRecoverWindowState(state_in);
5182 }
5183 
5184 void ErrorCheckUsingSetCursorPosToExtendParentBoundaries() @trusted
5185 {
5186     igErrorCheckUsingSetCursorPosToExtendParentBoundaries();
5187 }
5188 
5189 void ErrorCheckEndFrameFinalizeErrorTooltip() @trusted
5190 {
5191     igErrorCheckEndFrameFinalizeErrorTooltip();
5192 }
5193 
5194 bool BeginErrorTooltip() @trusted
5195 {
5196     return igBeginErrorTooltip();
5197 }
5198 
5199 void EndErrorTooltip() @trusted
5200 {
5201     igEndErrorTooltip();
5202 }
5203 
5204 /++
5205 + Debug Tools
5206 +/
5207 void DebugAllocHook(scope ImGuiDebugAllocInfo* info, int frame_count, scope void* ptr, size_t size) @trusted
5208 {
5209     igDebugAllocHook(info, frame_count, ptr, size);
5210 }
5211 
5212 void DebugDrawCursorPos() @trusted
5213 {
5214     igDebugDrawCursorPos();
5215 }
5216 
5217 void DebugDrawCursorPosEx(ImU32 col) @trusted
5218 {
5219     igDebugDrawCursorPosEx(col);
5220 }
5221 
5222 void DebugDrawLineExtents() @trusted
5223 {
5224     igDebugDrawLineExtents();
5225 }
5226 
5227 void DebugDrawLineExtentsEx(ImU32 col) @trusted
5228 {
5229     igDebugDrawLineExtentsEx(col);
5230 }
5231 
5232 void DebugDrawItemRect() @trusted
5233 {
5234     igDebugDrawItemRect();
5235 }
5236 
5237 void DebugDrawItemRectEx(ImU32 col) @trusted
5238 {
5239     igDebugDrawItemRectEx(col);
5240 }
5241 
5242 void DebugTextUnformattedWithLocateItem(const(char)* line_begin, const(char)* line_end) @trusted
5243 {
5244     igDebugTextUnformattedWithLocateItem(line_begin, line_end);
5245 }
5246 
5247 void DebugLocateItem(ImGuiID target_id) @trusted
5248 {
5249     igDebugLocateItem(target_id);
5250 }
5251 
5252 void DebugLocateItemOnHover(ImGuiID target_id) @trusted
5253 {
5254     igDebugLocateItemOnHover(target_id);
5255 }
5256 
5257 void DebugLocateItemResolveWithLastItem() @trusted
5258 {
5259     igDebugLocateItemResolveWithLastItem();
5260 }
5261 
5262 void DebugBreakClearData() @trusted
5263 {
5264     igDebugBreakClearData();
5265 }
5266 
5267 bool DebugBreakButton(const(char)* label, const(char)* description_of_location) @trusted
5268 {
5269     return igDebugBreakButton(label, description_of_location);
5270 }
5271 
5272 void DebugBreakButtonTooltip(bool keyboard_only, const(char)* description_of_location) @trusted
5273 {
5274     igDebugBreakButtonTooltip(keyboard_only, description_of_location);
5275 }
5276 
5277 void ShowFontAtlas(scope ImFontAtlas* atlas) @trusted
5278 {
5279     igShowFontAtlas(atlas);
5280 }
5281 
5282 ImU64 DebugTextureIDToU64(ImTextureID tex_id) @trusted
5283 {
5284     return igDebugTextureIDToU64(tex_id);
5285 }
5286 
5287 void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, scope const(void)* data_id, scope const(void)* data_id_end) @trusted
5288 {
5289     igDebugHookIdInfo(id, data_type, data_id, data_id_end);
5290 }
5291 
5292 void DebugNodeColumns(scope ImGuiOldColumns* columns) @trusted
5293 {
5294     igDebugNodeColumns(columns);
5295 }
5296 
5297 void DebugNodeDrawList(scope ImGuiWindow* window, scope ImGuiViewportP* viewport, scope ImDrawList* draw_list, const(char)* label) @trusted
5298 {
5299     igDebugNodeDrawList(window, viewport, draw_list, label);
5300 }
5301 
5302 void DebugNodeDrawCmdShowMeshAndBoundingBox(scope ImDrawList* out_draw_list, scope ImDrawList* draw_list, scope ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb) @trusted
5303 {
5304     igDebugNodeDrawCmdShowMeshAndBoundingBox(out_draw_list, draw_list, draw_cmd, show_mesh, show_aabb);
5305 }
5306 
5307 void DebugNodeFont(scope ImFont* font) @trusted
5308 {
5309     igDebugNodeFont(font);
5310 }
5311 
5312 void DebugNodeFontGlyphesForSrcMask(scope ImFont* font, scope ImFontBaked* baked, int src_mask) @trusted
5313 {
5314     igDebugNodeFontGlyphesForSrcMask(font, baked, src_mask);
5315 }
5316 
5317 void DebugNodeFontGlyph(scope ImFont* font, scope ImFontGlyph* glyph) @trusted
5318 {
5319     igDebugNodeFontGlyph(font, glyph);
5320 }
5321 
5322 void DebugNodeTexture(scope ImTextureData* tex, int int_id) @trusted
5323 {
5324     igDebugNodeTexture(tex, int_id);
5325 }
5326 
5327 void DebugNodeTextureEx(scope ImTextureData* tex, int int_id, scope ImFontAtlasRect* highlight_rect) @trusted
5328 {
5329     igDebugNodeTextureEx(tex, int_id, highlight_rect);
5330 }
5331 
5332 void DebugNodeStorage(scope ImGuiStorage* storage, const(char)* label) @trusted
5333 {
5334     igDebugNodeStorage(storage, label);
5335 }
5336 
5337 void DebugNodeTabBar(scope ImGuiTabBar* tab_bar, const(char)* label) @trusted
5338 {
5339     igDebugNodeTabBar(tab_bar, label);
5340 }
5341 
5342 void DebugNodeTable(scope ImGuiTable* table) @trusted
5343 {
5344     igDebugNodeTable(table);
5345 }
5346 
5347 void DebugNodeTableSettings(scope ImGuiTableSettings* settings) @trusted
5348 {
5349     igDebugNodeTableSettings(settings);
5350 }
5351 
5352 void DebugNodeTypingSelectState(scope ImGuiTypingSelectState* state) @trusted
5353 {
5354     igDebugNodeTypingSelectState(state);
5355 }
5356 
5357 void DebugNodeMultiSelectState(scope ImGuiMultiSelectState* state) @trusted
5358 {
5359     igDebugNodeMultiSelectState(state);
5360 }
5361 
5362 void DebugNodeWindow(scope ImGuiWindow* window, const(char)* label) @trusted
5363 {
5364     igDebugNodeWindow(window, label);
5365 }
5366 
5367 void DebugNodeWindowSettings(scope ImGuiWindowSettings* settings) @trusted
5368 {
5369     igDebugNodeWindowSettings(settings);
5370 }
5371 
5372 void DebugNodeWindowsList(scope ImVector_ImGuiWindowPtr* windows, const(char)* label) @trusted
5373 {
5374     igDebugNodeWindowsList(windows, label);
5375 }
5376 
5377 void DebugNodeWindowsListByBeginStackParent(scope ImGuiWindow** windows, int windows_size, scope ImGuiWindow* parent_in_begin_stack) @trusted
5378 {
5379     igDebugNodeWindowsListByBeginStackParent(windows, windows_size, parent_in_begin_stack);
5380 }
5381 
5382 void DebugNodeViewport(scope ImGuiViewportP* viewport) @trusted
5383 {
5384     igDebugNodeViewport(viewport);
5385 }
5386 
5387 void DebugRenderKeyboardPreview(scope ImDrawList* draw_list) @trusted
5388 {
5389     igDebugRenderKeyboardPreview(draw_list);
5390 }
5391 
5392 void DebugRenderViewportThumbnail(scope ImDrawList* draw_list, scope ImGuiViewportP* viewport, ImRect bb) @trusted
5393 {
5394     igDebugRenderViewportThumbnail(draw_list, viewport, bb);
5395 }