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