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