1 /*
2  * Copyright (c) 2015 Derelict Developers
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the names 'Derelict', 'DerelictILUT', nor the names of its contributors
17  *   may be used to endorse or promote products derived from this software
18  *   without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 module derelict.imgui.funcs;
33 
34 private
35 {
36     import derelict.util.system;
37     import derelict.imgui.types;
38     import core.stdc.stdarg:va_list;
39 }
40 
41 extern(C) @nogc nothrow
42 {
43     alias da_igGetIO                        = ImGuiIO* function();
44     alias da_igGetStyle                     = ImGuiStyle* function();
45     alias da_igGetDrawData                  = ImDrawData* function();
46     alias da_igNewFrame                     = void function();
47     alias da_igRender                       = void function();
48     alias da_igShutdown                     = void function();
49     alias da_igShowUserGuide                = void function();
50     alias da_igShowStyleEditor          = void function(ImGuiStyle* ref_);
51     alias da_igShowTestWindow               = void function(bool* opened = null);
52     alias da_igShowMetricsWindow            = void function(bool* opened = null);
53 
54     // Window
55     alias da_igBegin                        = bool function(const char* name, bool* p_opened = null, ImGuiWindowFlags flags = 0);
56     alias da_igBegin2                       = bool function(const char* name, bool* p_opened, const ImVec2 size_on_first_use, float bg_alpha = -1.0f, ImGuiWindowFlags flags = 0);
57     alias da_igEnd                      = void function();
58     alias da_igBeginChild                   = bool function(const char* str_id, const ImVec2 size = ImVec2(0, 0), bool border = false, ImGuiWindowFlags extra_flags = 0);
59     alias da_igBeginChildEx                 = bool function(ImGuiID id, const ImVec2 size = ImVec2(0, 0), bool border = false, ImGuiWindowFlags extra_flags = 0);
60     alias da_igEndChild                     = void function();
61     alias da_igGetContentRegionMax			= void function(ImVec2* outParam);
62 	alias da_igGetContentRegionAvail		= void function(ImVec2* outParam);
63     alias da_igGetContentRegionAvailWidth   = float function();
64     alias da_igGetWindowContentRegionMin    = void function(ImVec2* outParam);
65     alias da_igGetWindowContentRegionMax    = void function(ImVec2* outParam);
66     alias da_igGetWindowContentRegionWidth  = float function();
67     alias da_igGetWindowDrawList            = ImDrawList* function();
68     alias da_igGetWindowFont                = ImFont* function();
69     alias da_igGetWindowFontSize            = float function();
70     alias da_igSetWindowFontScale           = void function(float scale);
71     alias da_igGetWindowPos                 = void function(ImVec2* outParam);
72     alias da_igGetWindowSize                = void function(ImVec2* outParam);
73     alias da_igGetWindowWidth               = float function();
74     alias da_igGetWindowHeight              = float function();
75     alias da_igIsWindowCollapsed            = bool function();
76 
77     alias da_igSetNextWindowPos             = void function(const ImVec2 pos, ImGuiSetCond cond = 0);
78     alias da_igSetNextWindowPosCenter      = void function(ImGuiSetCond cond = 0);
79     alias da_igSetNextWindowSize            = void function(const ImVec2 size, ImGuiSetCond cond = 0);
80     alias da_igSetNextWindowCollapsed       = void function(bool collapsed, ImGuiSetCond cond = 0);
81     alias da_igSetNextWindowFocus           = void function();
82     alias da_igSetWindowPos                 = void function(const ImVec2 pos, ImGuiSetCond cond = 0);
83     alias da_igSetWindowSize                = void function(const ImVec2 size, ImGuiSetCond cond = 0);
84     alias da_igSetNextWindowContentSize     = void function(const ImVec2 size);
85     alias da_igSetNextWindowContentWidth    = void function(float width);
86     alias da_igSetWindowCollapsed           = void function(bool collapsed, ImGuiSetCond cond = 0);
87     alias da_igSetWindowFocus               = void function();
88     alias da_igSetWindowPosByName               = void function(const char* name, const ImVec2 pos, ImGuiSetCond cond = 0);
89     alias da_igSetWindowSize2               = void function(const char* name, const ImVec2 size, ImGuiSetCond cond = 0);
90     alias da_igSetWindowCollapsed2      = void function(const char* name, bool collapsed, ImGuiSetCond cond = 0);
91     alias da_igSetWindowFocus2          = void function(const char* name);
92 
93     alias da_igGetScrollX                   = float         function();
94     alias da_igGetScrollY                   = float         function();
95     alias da_igGetScrollMaxX                = float         function();
96     alias da_igGetScrollMaxY                = float         function();
97     alias da_igSetScrollX                  = void              function(int scroll_x);
98     alias da_igSetScrollY                  = void              function(int scroll_y);
99     alias da_igSetScrollHere                = void              function(float center_y_ratio = 0.5f);
100     alias da_igSetScrollFromPosY           = void              function(float pos_y, float center_y_ratio = 0.5f);
101     alias da_igSetKeyboardFocusHere     = void              function(int offset = 0);
102     alias da_igSetStateStorage              = void              function(ImGuiStorage* tree);
103     alias da_igGetStateStorage              = ImGuiStorage* function();
104 
105     alias da_igPushFont                 = void              function(ImFont* font);
106     alias da_igPopFont                      = void              function();
107     alias da_igPushStyleColor               = void              function(ImGuiCol idx, const ImVec4 col);
108     alias da_igPopStyleColor                = void              function(int count = 1);
109     alias da_igPushStyleVar             = void              function(ImGuiStyleVar idx, float val);
110     alias da_igPushStyleVarVec              = void              function(ImGuiStyleVar idx, const ImVec2 val);
111     alias da_igPopStyleVar                  = void              function(int count = 1);
112 
113     alias da_igPushItemWidth                = void              function(float item_width);
114     alias da_igPopItemWidth             = void              function();
115     alias da_igCalcItemWidth                = float         function();
116     alias da_igPushAllowKeyboardFocus       = void              function(bool v);
117     alias da_igPopAllowKeyboardFocus        = void              function();
118     alias da_igPushTextWrapPos              = void              function(float wrap_pos_x = 0.0f);
119     alias da_igPopTextWrapPos               = void              function();
120     alias da_igPushButtonRepeat            = void              function(bool repeat);
121     alias da_igPopButtonRepeat             = void              function();
122 
123     alias da_igBeginGroup                   = void              function();
124     alias da_igEndGroup                 = void              function();
125     alias da_igSeparator                    = void              function();
126     alias da_igSameLine                     = void              function(float local_pos_x = 0.0f, float spacing_w = -1.0f);
127     alias da_igSpacing                      = void              function();
128     alias da_igDummy                       = void              function(const ImVec2* size);
129     alias da_igIndent                       = void              function();
130     alias da_igUnindent                 = void              function();
131     alias da_igColumns                      = void              function(int count = 1, const char* id = null, bool border = true);
132     alias da_igNextColumn                   = void              function();
133     alias da_igGetColumnIndex               = int               function();
134     alias da_igGetColumnOffset              = float         function(int column_index = -1);
135     alias da_igSetColumnOffset              = void              function(int column_index, float offset_x);
136     alias da_igGetColumnWidth               = float         function(int column_index = -1);
137     alias da_igGetColumnsCount              = int               function();
138     alias da_igGetCursorPos             = void          function(ImVec2* pOut);
139     alias da_igGetCursorPosX                = float         function();
140     alias da_igGetCursorPosY                = float         function();
141     alias da_igSetCursorPos             = void              function(const ImVec2 locl_pos);
142     alias da_igSetCursorPosX                = void              function(float x);
143     alias da_igSetCursorPosY                = void              function(float y);
144     alias da_igGetCursorStartPos           = void function(ImVec2* pOut);
145     alias da_igGetCursorScreenPos           = void function(ImVec2* pOut);
146     alias da_igSetCursorScreenPos           = void              function(const ImVec2 pos);
147     alias da_igAlignFirstTextHeightToWidgets    = void              function();
148     alias da_igGetTextLineHeight            = float         function();
149     alias da_igGetTextLineHeightWithSpacing = float         function();
150     alias da_igGetItemsLineHeightWithSpacing    = float         function();
151 
152     alias da_igPushIdStr                    = void              function(const char* str_id);
153     alias da_igPushIdStrRange              = void              function(const char* str_begin, const char* str_end);
154     alias da_igPushIdPtr                    = void              function(const void* ptr_id);
155     alias da_igPushIdInt                    = void              function(int int_id);
156     alias da_igPopId                        = void              function();
157     alias da_igGetIdStr                 = ImGuiID           function(const char* str_id);
158     alias da_igGetIdStrRange               = ImGuiID           function(const char* str_begin, const char* str_end);
159     alias da_igGetIdPtr                 = ImGuiID           function(const void* ptr_id);
160 
161     alias da_igText                     = void              function(const char* fmt, ...);
162     alias da_igTextV                        = void              function(const char* fmt, va_list args);
163     alias da_igTextColored                  = void              function(const ImVec4 col, const char* fmt, ...);
164     alias da_igTextColoredV             = void              function(const ImVec4 col, const char* fmt, va_list args);
165     alias da_igTextDisabled                = void              function(const char* fmt, ...);
166     alias da_igTextDisabledV               = void              function(const char* fmt, va_list args);
167     alias da_igTextWrapped                  = void              function(const char* fmt, ...);
168     alias da_igTextWrappedV             = void              function(const char* fmt, va_list args);
169     alias da_igTextUnformatted              = void              function(const char* text, const char* text_end = null);
170     alias da_igLabelText                    = void              function(const char* label, const char* fmt, ...);
171     alias da_igLabelTextV                   = void              function(const char* label, const char* fmt, va_list args);
172     alias da_igBullet                       = void              function();
173     alias da_igBulletText                   = void              function(const char* fmt, ...);
174     alias da_igBulletTextV                  = void              function(const char* fmt, va_list args);
175     alias da_igButton                       = bool              function(const char* label, const ImVec2 size = ImVec2(0, 0));
176     alias da_igSmallButton                  = bool              function(const char* label);
177     alias da_igInvisibleButton              = bool              function(const char* str_id, const ImVec2 size);
178     alias da_igImage                        = void              function(ImTextureID user_texture_id, const ImVec2 size, const ImVec2 uv0 = ImVec2(0, 0), const ImVec2 uv1 = ImVec2(1, 1), const ImVec4 tint_col = ImVec4(1, 1, 1, 1), const ImVec4 border_col = ImVec4(0, 0, 0, 0));
179     alias da_igImageButton                  = bool              function(ImTextureID user_texture_id, const ImVec2 size, const ImVec2 uv0 = ImVec2(0, 0), const ImVec2 uv1 = ImVec2(1, 1), int frame_padding = -1, const ImVec4 bg_col = ImVec4(0, 0, 0, 0), const ImVec4 tint_col = ImVec4(1, 1, 1, 1));
180     alias da_igCollapsingHeader         = bool              function(const char* label, const char* str_id = null, bool display_frame = true, bool default_open = false);
181     alias da_igCheckbox                 = bool              function(const char* label, bool* v);
182     alias da_igCheckboxFlags                = bool              function(const char* label, uint* flags, uint flags_value);
183     alias da_igRadioButtonBool                  = bool              function(const char* label, bool active);
184     alias da_igRadioButton              = bool              function(const char* label, int* v, int v_button);
185     alias da_igCombo                        = bool              function(const char* label, int* current_item, const char** items, int items_count, int height_in_items = -1);
186     alias da_igCombo2                       = bool              function(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1);
187     alias da_igCombo3                       = bool              function(const char* label, int* current_item, bool function(void* data, int idx, const(char)** out_text) items_getter, void* data, int items_count, int height_in_items = -1);
188     alias da_igColorButton                  = bool              function(const ImVec4 col, bool small_height = false, bool outline_border = true);
189     alias da_igColorEdit3                   = bool              function(const char* label, ref float[3] col);
190     alias da_igColorEdit4                   = bool              function(const char* label, ref float[4] col, bool show_alpha = true);
191     alias da_igColorEditMode                = void              function(ImGuiColorEditMode mode);
192     alias da_igPlotLines                    = void              function(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = null, float scale_min = float.max, float scale_max = float.max, ImVec2 graph_size = ImVec2(0, 0), size_t stride = float.sizeof);
193     alias da_igPlotLines2                   = void              function(const char* label, float function(void* data, int idx) values_getter, void* data, int values_count, int values_offset = 0, const char* overlay_text = null, float scale_min = float.max, float scale_max = float.max, ImVec2 graph_size = ImVec2(0, 0));
194     alias da_igPlotHistogram                = void              function(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = null, float scale_min = float.max, float scale_max = float.max, ImVec2 graph_size = ImVec2(0, 0), size_t stride = float.sizeof);
195     alias da_igPlotHistogram2               = void              function(const char* label, float function(void* data, int idx) values_getter, void* data, int values_count, int values_offset = 0, const char* overlay_text = null, float scale_min = float.max, float scale_max = float.max, ImVec2 graph_size = ImVec2(0, 0));
196 
197     alias da_igSliderFloat                  = bool              function(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
198     alias da_igSliderFloat2             = bool              function(const char* label, ref float[2] v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
199     alias da_igSliderFloat3             = bool              function(const char* label, ref float[3] v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
200     alias da_igSliderFloat4             = bool              function(const char* label, ref float[4] v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
201     alias da_igSliderAngle                  = bool              function(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f);
202     alias da_igSliderInt                    = bool              function(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f");
203     alias da_igSliderInt2                   = bool              function(const char* label, ref int[2] v, int v_min, int v_max, const char* display_format = "%.0f");
204     alias da_igSliderInt3                   = bool              function(const char* label, ref int[3] v, int v_min, int v_max, const char* display_format = "%.0f");
205     alias da_igSliderInt4                   = bool              function(const char* label, ref int[4] v, int v_min, int v_max, const char* display_format = "%.0f");
206     alias da_igVSliderFloat             = bool              function(const char* label, const ImVec2 size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
207     alias da_igVSliderInt                   = bool              function(const char* label, const ImVec2 size, int* v, int v_min, int v_max, const char* display_format = "%.0f");
208 
209     alias da_igDragFloat                   = bool              function(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);     // If v_max >= v_max we have no bound
210     alias da_igDragFloat2                  = bool              function(const char* label, ref float[2] v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
211     alias da_igDragFloat3                  = bool              function(const char* label, ref float[3] v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
212     alias da_igDragFloat4                  = bool              function(const char* label, ref float[4] v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);
213     alias da_igDragFloatRange2             = bool              function(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = null, float power = 1.0f);
214     alias da_igDragInt                     = bool              function(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.3f");                                       // If v_max >= v_max we have no bound
215     alias da_igDragInt2                    = bool              function(const char* label, ref int[2] v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.3f");
216     alias da_igDragInt3                    = bool              function(const char* label, ref int[3] v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.3f");
217     alias da_igDragInt4                    = bool              function(const char* label, ref int[4] v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.3f");
218     alias da_igDragIntRange2               = bool              function(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = null);
219 
220     alias da_igInputText                    = bool              function(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = null, void* user_data = null);
221     alias da_igInputTextMultiline          = bool              function(const char* label, char* buf, size_t buf_size, const ImVec2 size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = null, void* user_data = null);
222     alias da_igInputFloat                   = bool              function(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
223     alias da_igInputFloat2                  = bool              function(const char* label, ref float[2] v, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
224     alias da_igInputFloat3                  = bool              function(const char* label, ref float[3] v, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
225     alias da_igInputFloat4                  = bool              function(const char* label, ref float[4] v, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
226     alias da_igInputInt                 = bool              function(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0);
227     alias da_igInputInt2                    = bool              function(const char* label, ref int[2] v, ImGuiInputTextFlags extra_flags = 0);
228     alias da_igInputInt3                    = bool              function(const char* label, ref int[3] v, ImGuiInputTextFlags extra_flags = 0);
229     alias da_igInputInt4                    = bool              function(const char* label, ref int[4] v, ImGuiInputTextFlags extra_flags = 0);
230 
231     alias da_igTreeNode                 = bool              function(const char* str_label_id);
232     alias da_igTreeNodeStr                  = bool              function(const char* str_id, const char* fmt, ...);
233     alias da_igTreeNodePtr                  = bool              function(const void* ptr_id, const char* fmt, ...);
234     alias da_igTreeNodeStrV                 = bool              function(const char* str_id, const char* fmt, va_list args);
235     alias da_igTreeNodePtrV                 = bool              function(const void* ptr_id, const char* fmt, va_list args);
236     alias da_igTreePushStr                  = void              function(const char* str_id = null);
237     alias da_igTreePushPtr                  = void              function(const void* ptr_id = null);
238     alias da_igTreePop                      = void              function();
239     alias da_igSetNextTreeNodeOpened        = void              function(bool opened, ImGuiSetCond cond = 0);
240 
241     alias da_igSelectable                   = bool              function(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2 size = ImVec2(0, 0));
242     alias da_igSelectableEx             = bool              function(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2 size = ImVec2(0, 0));
243 
244     alias da_igListBox                      = bool              function(const char* label, int* current_item, const char** items, int items_count, int height_in_items = -1);
245     alias da_igListBox2                 = bool              function(const char* label, int* current_item, bool function(void* data, int idx, const char** out_text) items_getter, void* data, int items_count, int height_in_items = -1);
246     alias da_igListBoxHeader                = bool              function(const char* label, const ImVec2 size = ImVec2(0, 0));
247     alias da_igListBoxHeader2               = bool              function(const char* label, int items_count, int height_in_items = -1);
248     alias da_igListBoxFooter                = void              function();
249 
250     alias da_igValueBool       = void              function(const char* prefix, bool b);
251     alias da_igValueInt        = void              function(const char* prefix, int v);
252     alias da_igValueUInt       = void              function(const char* prefix, uint v);
253     alias da_igValueFloat      = void              function(const char* prefix, float v, const char* float_format = null);
254     alias da_igColor           = void              function(const char* prefix, const ImVec4 v);
255     alias da_igColor2          = void              function(const char* prefix, uint v);
256 
257     alias da_igSetTooltip                  = void              function(const(char)* fmt, ...);
258     alias da_igSetTooltipV                 = void              function(const(char)* fmt, va_list args);
259     alias da_igBeginTooltip                = void              function();
260     alias da_igEndTooltip                  = void              function();
261 
262     // Widgets: Menus
263     alias da_igBeginMainMenuBar            = bool      function();
264     alias da_igEndMainMenuBar              = void      function();
265     alias da_igBeginMenuBar                = bool      function();
266     alias da_igEndMenuBar                  = void      function();
267     alias da_igBeginMenu                   = bool      function(const(char)* label, bool enabled = true);
268     alias da_igEndMenu                     = void      function();
269     alias da_igMenuItem                    = bool      function(const(char)* label, const(char)* shortcut, bool selected = false, bool enabled = true);
270     alias da_igMenuItemPtr                 = bool      function(const(char)* label, const(char)* shortcut, bool* p_selected, bool enabled = true);
271 
272     alias da_igOpenPopup                   = void              function(const(char)* str_id);
273     alias da_igBeginPopup                  = bool              function(const(char)* str_id);
274     alias da_igBeginPopupModal             = bool function(const(char)* name, bool* p_opened = null, ImGuiWindowFlags extra_flags = 0);
275     alias da_igBeginPopupContextItem       = bool              function(const(char)* str_id, int mouse_button = 1);
276     alias da_igBeginPopupContextWindow     = bool              function(bool also_over_items = true, const(char)* str_id = null, int mouse_button = 1);
277     alias da_igBeginPopupContextVoid       = bool              function(const char* str_id = null, int mouse_button = 1);
278     alias da_igEndPopup                    = void              function();
279     alias da_igCloseCurrentPopup           = void              function();
280 
281     alias da_igLogToTTY     = void              function(int max_depth = -1);
282     alias da_igLogToFile        = void              function(int max_depth = -1, const char* filename = null);
283     alias da_igLogToClipboard   = void              function(int max_depth = -1);
284     alias da_igLogFinish        = void              function();
285     alias da_igLogButtons       = void              function();
286     alias da_igLogText          = void              function(const char* fmt, ...);
287 
288     alias da_igIsItemHovered                = bool              function();
289     alias da_igIsItemHoveredRect            = bool              function();
290     alias da_igIsItemActive             = bool              function();
291     alias da_igIsItemVisible               = bool              function();
292     alias da_igIsAnyItemHovered            = bool              function();
293     alias da_igIsAnyItemActive             = bool              function();
294     alias da_igGetItemRectMin               = void function(ImVec2* pOut);
295     alias da_igGetItemRectMax               = void function(ImVec2* pOut);
296     alias da_igGetItemRectSize              = void function(ImVec2* pOut);
297     alias da_igIsWindowHovered             = bool              function();
298     alias da_igIsWindowFocused              = bool              function();
299     alias da_igIsRootWindowFocused          = bool              function();
300     alias da_igIsRootWindowOrAnyChildFocused    = bool              function();
301     alias da_igIsRectVisible                    = bool              function(const ImVec2 item_size);
302     alias da_igIsKeyDown                   = bool              function(int key_index);
303     alias da_igIsKeyPressed             = bool              function(int key_index, bool repeat = true);
304     alias da_igIsKeyReleased               = bool              function(int key_index);
305     alias da_igIsMouseDown                 = bool              function(int button);
306     alias da_igIsMouseClicked               = bool              function(int button, bool repeat = false);
307     alias da_igIsMouseDoubleClicked     = bool              function(int button);
308     alias da_igIsMouseReleased             = bool              function(int button);
309     alias da_igIsMouseHoveringWindow        = bool              function();
310     alias da_igIsMouseHoveringAnyWindow = bool              function();
311     alias da_igIsMouseHoveringRect          = bool              function(const ImVec2 pos_min, const ImVec2 pos_max, bool clip = true);
312     alias da_igIsMouseDragging              = bool              function(int button = 0, float lock_threshold = -1.0f);
313     alias da_igIsPosHoveringAnyWindow       = bool              function(const ImVec2 pos);
314     alias da_igGetMousePos                  = void function(ImVec2* pOut);
315     alias da_igGetMousePosOnOpeningCurrentPopup = void function(ImVec2* pOut);
316     alias da_igGetMouseDragDelta            = void function(ImVec2* pOut, int button = 0, float lock_threshold = -1.0f);
317     alias da_igResetMouseDragDelta         = void function(int button=0);
318     alias da_igGetMouseCursor               = ImGuiMouseCursor function();
319     alias da_igSetMouseCursor               = void              function(ImGuiMouseCursor type);
320     alias da_igCaptureKeyboardFromApp       = void function();
321     alias da_igCaptureMouseFromApp          = void function();
322 
323 
324     alias da_igMemAlloc                     = void* function(size_t sz);
325     alias da_igMemFree                      = void function(void* ptr);
326     alias da_igGetClipboardText             = const(char)* function();
327     alias da_igSetClipboardText             = void function(const(char)* text);
328 
329     alias da_igGetTime                      = float         function();
330     alias da_igGetFrameCount                = int               function();
331     alias da_igGetStyleColName             = const(char)*       function(ImGuiCol idx);
332     alias da_igCalcItemRectClosestPoint = void function(ImVec2* pOut, const ImVec2 pos, bool on_edge = false, float outward = +0.0f);
333     alias da_igCalcTextSize             = void function(ImVec2* pOut, const char* text, const char* text_end = null, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
334     alias da_igCalcListClipping         = void              function(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end);
335 
336     alias da_igBeginChildFrame              = bool              function(ImGuiID id, const ImVec2 size, ImGuiWindowFlags extra_flags = 0);
337     alias da_igEndChildFrame                = void              function();
338 
339     alias da_igColorConvertU32ToFloat4      = void function(ImVec4* pOut, ImU32 in_);
340     alias da_igColorConvertFloat4ToU32      = ImU32 function(const ImVec4 in_);
341     alias da_igColorConvertRGBtoHSV     = void function(float r, float g, float b, float* out_h, float* out_s, float* out_v);
342     alias da_igColorConvertHSVtoRGB     = void function(float h, float s, float v, float* out_r, float* out_g, float* out_b);
343 
344     alias da_igGetVersion                   = const(char)*      function();
345     alias da_igGetInternalState         = void*         function();
346     alias da_igGetInternalStateSize     = size_t            function();
347     alias da_igSetInternalState         = void              function(void* state, bool con= false);
348 }
349 
350 // ImFontAtlas Methods
351 extern(C) @nogc nothrow
352 {
353     alias da_ImFontAtlas_GetTexDataAsRGBA32   = void function(ImFontAtlas* atlas,ubyte** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel);
354     alias da_ImFontAtlas_GetTexDataAsAlpha8   = void function(ImFontAtlas* atlas,ubyte** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel);
355     alias da_ImFontAtlas_SetTexID             = void function(ImFontAtlas* atlas, void* id);
356     alias da_ImFontAtlas_AddFont       = ImFont* function(ImFontAtlas* atlas, const ImFontConfig* font_cfg);
357     alias da_ImFontAtlas_AddFontDefault       = ImFont* function(ImFontAtlas* atlas, const ImFontConfig* font_cfg);
358     alias da_ImFontAtlas_AddFontFromFileTTF   = ImFont* function(ImFontAtlas* atlas, const char* filename, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges = null);
359     alias da_ImFontAtlas_AddFontFromMemoryTTF = ImFont* function(ImFontAtlas* atlas, void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges = null);
360     alias da_ImFontAtlas_AddFontFromMemoryCompressedTTF = ImFont* function(ImFontAtlas* atlas, const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg = null, const ImWchar* glyph_ranges = null);
361 	alias da_ImFontAtlas_AddFontFromMemoryCompressedBase85TTF = ImFont* function(ImFontAtlas* atlas, const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg = null, const ImWchar* glyph_ranges = null);
362 
363     alias da_ImFontAtlas_ClearTexData         = void function(ImFontAtlas* atlas, void* id);
364     alias da_ImFontAtlas_Clear                = void function(ImFontAtlas* atlas, void* id);
365 }
366 
367 //TODO: rework
368 extern(C) @nogc nothrow
369 {
370     alias da_ImDrawList_GetVertexBufferSize = int function(ImDrawList* list);
371     alias da_ImDrawList_GetVertexPtr = ImDrawVert* function(ImDrawList* list, int n);
372     alias da_ImDrawList_GetIndexBufferSize = int function(ImDrawList* list);
373     alias da_ImDrawList_GetIndexPtr = ImDrawIdx* function(ImDrawList* list, int n);
374     alias da_ImDrawList_GetCmdSize = int function(ImDrawList* list);
375     alias da_ImDrawList_GetCmdPtr = ImDrawCmd* function(ImDrawList* list, int n);
376 
377     alias da_ImDrawData_DeIndexAllBuffers = void function(ImDrawData* drawData);
378 
379     alias da_ImGuiIO_AddInputCharacter = void function(ushort c);
380     alias da_ImGuiIO_AddInputCharactersUTF8 = void function(const(char*) utf8_chars);
381 
382     //---------------------------------------------------
383 	alias da_ImDrawList_Clear = void function(ImDrawList* list);
384 	alias da_ImDrawList_ClearFreeMemory = void function(ImDrawList* list);
385 	alias da_ImDrawList_PushClipRect = void function(ImDrawList* list, const ImVec4 clip_rect);
386 	alias da_ImDrawList_PushClipRectFullScreen = void function(ImDrawList* list);
387 	alias da_ImDrawList_PopClipRect = void function(ImDrawList* list);
388 	alias da_ImDrawList_PushTextureID = void function(ImDrawList* list, const ImTextureID texture_id);
389 	alias da_ImDrawList_PopTextureID = void function(ImDrawList* list);
390 	alias da_ImDrawList_AddLine = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, ImU32 col, float thickness = 1.0f);
391 	alias da_ImDrawList_AddRect = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, ImU32 col, float rounding = 0.0f, int rounding_corners = 0x0F);
392 	alias da_ImDrawList_AddRectFilled = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, ImU32 col, float rounding = 0.0f, int rounding_corners = 0x0F);
393 	alias da_ImDrawList_AddRectFilledMultiColor = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
394 	alias da_ImDrawList_AddTriangleFilled = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, const ImVec2 c, ImU32 col);
395 	alias da_ImDrawList_AddCircle = void function(ImDrawList* list, const ImVec2 centre, float radius, ImU32 col, int num_segments = 12);
396 	alias da_ImDrawList_AddCircleFilled = void function(ImDrawList* list, const ImVec2 centre, float radius, ImU32 col, int num_segments = 12);
397 	alias da_ImDrawList_AddText = void function(ImDrawList* list, const ImVec2 pos, ImU32 col, const char* text_begin, const char* text_end = null);
398 	alias da_ImDrawList_AddTextExt = void function(ImDrawList* list, const ImFont* font, float font_size, const ImVec2 pos, ImU32 col, const char* text_begin, const char* text_end = null, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = null);
399 	alias da_ImDrawList_AddImage = void function(ImDrawList* list, ImTextureID user_texture_id, const ImVec2 a, const ImVec2 b, const ImVec2 uv0, const ImVec2 uv1, ImU32 col = 0xFFFFFFFF);
400 	alias da_ImDrawList_AddPolyline = void function(ImDrawList* list, const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness, bool anti_aliased);
401 	alias da_ImDrawList_AddConvexPolyFilled = void function(ImDrawList* list, const ImVec2* points, const int num_points, ImU32 col, bool anti_aliased);
402 	alias da_ImDrawList_AddBezierCurve = void function(ImDrawList* list, const ImVec2 pos0, const ImVec2 cp0, const ImVec2 cp1, const ImVec2 pos1, ImU32 col, float thickness, int num_segments = 0);
403 	alias da_ImDrawList_PathClear = void function(ImDrawList* list);
404 	alias da_ImDrawList_PathLineTo = void function(ImDrawList* list, const ImVec2 pos);
405 	alias da_ImDrawList_PathLineToMergeDuplicate = void function(ImDrawList* list, const ImVec2 pos);
406 	alias da_ImDrawList_PathFill = void function(ImDrawList* list, ImU32 col);
407 	alias da_ImDrawList_PathStroke = void function(ImDrawList* list, ImU32 col, bool closed, float thickness = 1.0f);
408 	alias da_ImDrawList_PathArcTo = void function(ImDrawList* list, const ImVec2 centre, float radius, float a_min, float a_max, int num_segments = 10);
409 	alias da_ImDrawList_PathArcToFast = void function(ImDrawList* list, const ImVec2 centre, float radius, int a_min_of_12, int a_max_of_12);
410 	alias da_ImDrawList_PathBezierCurveTo = void function(ImDrawList* list, const ImVec2 p1, const ImVec2 p2, const ImVec2 p3, int num_segments = 0);
411 	alias da_ImDrawList_PathRect = void function(ImDrawList* list, const ImVec2 rect_min, const ImVec2 rect_max, float rounding = 0.0f, int rounding_corners = 0x0F);
412 	alias da_ImDrawList_ChannelsSplit = void function(ImDrawList* list, int channels_count);
413 	alias da_ImDrawList_ChannelsMerge = void function(ImDrawList* list);
414 	alias da_ImDrawList_ChannelsSetCurrent = void function(ImDrawList* list, int channel_index);
415 	alias da_ImDrawList_AddCallback = void function(ImDrawList* list, ImDrawCallback callback, void* callback_data);
416 	alias da_ImDrawList_AddDrawCmd = void function(ImDrawList* list);
417 	alias da_ImDrawList_PrimReserve = void function(ImDrawList* list, int idx_count, int vtx_count);
418 	alias da_ImDrawList_PrimRect = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, ImU32 col);
419 	alias da_ImDrawList_PrimRectUV = void function(ImDrawList* list, const ImVec2 a, const ImVec2 b, const ImVec2 uv_a, const ImVec2 uv_b, ImU32 col);
420 	alias da_ImDrawList_PrimVtx = void function(ImDrawList* list, const ImVec2 pos, const ImVec2 uv, ImU32 col);
421 	alias da_ImDrawList_PrimWriteVtx = void function(ImDrawList* list, const ImVec2 pos, const ImVec2 uv, ImU32 col);
422 	alias da_ImDrawList_PrimWriteIdx = void function(ImDrawList* list, ImDrawIdx idx);
423 	alias da_ImDrawList_UpdateClipRect = void function(ImDrawList* list);
424 	alias da_ImDrawList_UpdateTextureID = void function(ImDrawList* list);
425 
426 	//-----------------------------------------------------------------------------
427 	// Internal API
428 	// No guarantee of forward compatibility here.
429 	//-----------------------------------------------------------------------------
430 	alias da_igGetCurrentWindowRead = ImGuiWindow*  function();
431 	alias da_igGetCurrentWindow = ImGuiWindow*  function();
432 	alias da_igGetParentWindow = ImGuiWindow*  function();
433 	alias da_igFocusWindow = void function(ImGuiWindow* window);
434 	alias da_igSetActiveID = void function(ImGuiID id, ImGuiWindow* window);
435 	alias da_igKeepAliveID = void function(ImGuiID id);
436 	alias da_igItemSize = void function(const ImVec2 size, float text_offset_y = 0.0f);
437 	alias da_igItemSize2 = void function(const ImRect bb, float text_offset_y = 0.0f);
438 	alias da_igItemAdd = bool function(const ImRect bb, const ImGuiID* id);
439 	alias da_igIsClippedEx = bool function(const ImRect bb, const ImGuiID* id, bool clip_even_when_logged);
440 	alias da_igIsHovered = bool function(const ImRect bb, ImGuiID id, bool flatten_childs = false);
441 	alias da_igFocusableItemRegister = bool function(ImGuiWindow* window, bool is_active, bool tab_stop = true);
442 	alias da_igFocusableItemUnregister = void function(ImGuiWindow* window);
443 	alias da_igCalcWrapWidthForPos = float function(const ImVec2 pos, float wrap_pos_x);
444 	alias da_igRenderText = void function(ImVec2 pos, const char* text, const char* text_end = null, bool hide_text_after_hash = true);
445 	alias da_igRenderTextWrapped = void function(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
446 	alias da_igRenderTextClipped = void function(const ImVec2 pos_min, const ImVec2 pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, ImGuiAlign align_ = ImGuiAlign_Default, const ImVec2* clip_min = null, const ImVec2* clip_max = null);
447 	alias da_igRenderFrame = void function(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
448 	alias da_igRenderCollapseTriangle = void function(ImVec2 p_min, bool opened, float scale = 1.0f, bool shadow = false);
449 	alias da_igRenderCheckMark = void function(ImVec2 pos, ImU32 col);
450 	alias da_igButtonBehavior = bool function(const ImRect bb, ImGuiID id, bool* out_hovered, bool* out_held, bool allow_key_modifiers, ImGuiButtonFlags flags = 0);
451 	alias da_igButtonEx = bool function(const char* label, const ImVec2 size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0);
452 	alias da_igSliderBehavior = bool function(const ImRect frame_bb, ImGuiID id, float* v, float v_min, float v_max, float power, int decimal_precision, bool horizontal);
453 	alias da_igSliderFloatN = bool function(const char* label, float* v, int components, float v_min, float v_max, const char* display_format, float power);
454 	alias da_igSliderIntN = bool function(const char* label, int* v, int components, int v_min, int v_max, const char* display_format);
455 	alias da_igDragBehavior = bool function(const ImRect frame_bb, ImGuiID id, float* v, float v_speed, float v_min, float v_max, int decimal_precision, float power);
456 	alias da_igDragFloatN = bool function(const char* label, float* v, int components, float v_speed, float v_min, float v_max, const char* display_format, float power);
457 	alias da_igDragIntN = bool function(const char* label, int* v, int components, float v_speed, int v_min, int v_max, const char* display_format);
458 	alias da_igInputTextEx = bool function(const char* label, char* buf, int buf_size, const ImVec2 size_arg, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback = null, void* user_data = null);
459 	alias da_igInputFloatN = bool function(const char* label, float* v, int components, int decimal_precision, ImGuiInputTextFlags extra_flags);
460 	alias da_igInputIntN = bool function(const char* label, int* v, int components, ImGuiInputTextFlags extra_flags);
461 	alias da_igTreeNodeBehaviorIsOpened = bool function(ImGuiID id, ImGuiTreeNodeFlags flags = 0);
462 	alias da_igParseFormatPrecision = int function(const char* fmt, int default_value);
463 	alias da_igRoundScalar = float function(float value, int decimal_precision);
464 	alias da_igGetImGuiState = ImGuiState* function();
465 	alias da_igGetSkipItems = bool function(ImGuiWindow* window);
466 
467 	// namespace ImGuiP
468 }
469 
470 __gshared
471 {
472     da_igGetIO igGetIO;
473     da_igGetStyle igGetStyle;
474     da_igGetDrawData igGetDrawData;
475     da_igNewFrame igNewFrame;
476     da_igRender igRender;
477     da_igShutdown igShutdown;
478     da_igShowUserGuide igShowUserGuide;
479     da_igShowStyleEditor igShowStyleEditor;
480     da_igShowTestWindow igShowTestWindow;
481     da_igShowMetricsWindow igShowMetricsWindow;
482 
483     da_igBegin igBegin;
484     da_igBegin2 igBegin2;
485     da_igEnd igEnd;
486     da_igBeginChild igBeginChild;
487     da_igBeginChildEx igBeginChildEx;
488     da_igEndChild igEndChild;
489     da_igGetContentRegionMax igGetContentRegionMax;
490 	da_igGetContentRegionAvail igGetContentRegionAvail;
491     da_igGetContentRegionAvailWidth igGetContentRegionAvailWidth;
492     da_igGetWindowContentRegionMin igGetWindowContentRegionMin;
493     da_igGetWindowContentRegionMax igGetWindowContentRegionMax;
494     da_igGetWindowContentRegionWidth igGetWindowContentRegionWidth;
495     da_igGetWindowDrawList igGetWindowDrawList;
496     da_igGetWindowFont igGetWindowFont;
497     da_igGetWindowFontSize igGetWindowFontSize;
498     da_igSetWindowFontScale igSetWindowFontScale;
499     da_igGetWindowPos igGetWindowPos;
500     da_igGetWindowSize igGetWindowSize;
501     da_igGetWindowWidth igGetWindowWidth;
502     da_igGetWindowHeight igGetWindowHeight;
503     da_igIsWindowCollapsed igIsWindowCollapsed;
504 
505     da_igSetNextWindowPos igSetNextWindowPos;
506     da_igSetNextWindowPosCenter igSetNextWindowPosCenter;
507     da_igSetNextWindowSize igSetNextWindowSize;
508     da_igSetNextWindowCollapsed igSetNextWindowCollapsed;
509     da_igSetNextWindowFocus igSetNextWindowFocus;
510     da_igSetWindowPos igSetWindowPos;
511     da_igSetWindowSize igSetWindowSize;
512     da_igSetNextWindowContentSize igSetNextWindowContentSize;
513     da_igSetNextWindowContentWidth igSetNextWindowContentWidth;
514     da_igSetWindowCollapsed igSetWindowCollapsed;
515     da_igSetWindowFocus igSetWindowFocus;
516     da_igSetWindowPosByName igSetWindowPosByName;
517     da_igSetWindowSize2 igSetWindowSize2;
518     da_igSetWindowCollapsed2 igSetWindowCollapsed2;
519     da_igSetWindowFocus2 igSetWindowFocus2;
520 
521     da_igGetScrollX igGetScrollX;
522     da_igGetScrollY igGetScrollY;
523     da_igGetScrollMaxX igGetScrollMaxX;
524     da_igGetScrollMaxY igGetScrollMaxY;
525     da_igSetScrollX igSetScrollX;
526     da_igSetScrollY igSetScrollY;
527     da_igSetScrollHere igSetScrollHere;
528     da_igSetScrollFromPosY igSetScrollFromPosY;
529     da_igSetKeyboardFocusHere igSetKeyboardFocusHere;
530     da_igSetStateStorage igSetStateStorage;
531     da_igGetStateStorage igGetStateStorage;
532 
533     da_igPushFont igPushFont;
534     da_igPopFont igPopFont;
535     da_igPushStyleColor igPushStyleColor;
536     da_igPopStyleColor igPopStyleColor;
537     da_igPushStyleVar igPushStyleVar;
538     da_igPushStyleVarVec igPushStyleVarVec;
539     da_igPopStyleVar igPopStyleVar;
540 
541     da_igPushItemWidth igPushItemWidth;
542     da_igPopItemWidth igPopItemWidth;
543     da_igCalcItemWidth igCalcItemWidth;
544     da_igPushAllowKeyboardFocus igPushAllowKeyboardFocus;
545     da_igPopAllowKeyboardFocus igPopAllowKeyboardFocus;
546     da_igPushTextWrapPos igPushTextWrapPos;
547     da_igPopTextWrapPos igPopTextWrapPos;
548     da_igPushButtonRepeat igPushButtonRepeat;
549     da_igPopButtonRepeat igPopButtonRepeat;
550 
551     da_igSetTooltip igSetTooltip;
552     da_igSetTooltipV igSetTooltipV;
553     da_igBeginTooltip igBeginTooltip;
554     da_igEndTooltip igEndTooltip;
555 
556     da_igOpenPopup igOpenPopup;
557     da_igBeginPopup igBeginPopup;
558     da_igBeginPopupModal igBeginPopupModal;
559     da_igBeginPopupContextItem igBeginPopupContextItem;
560     da_igBeginPopupContextWindow igBeginPopupContextWindow;
561     da_igBeginPopupContextVoid igBeginPopupContextVoid;
562     da_igEndPopup igEndPopup;
563     da_igCloseCurrentPopup igCloseCurrentPopup;
564 
565     da_igBeginGroup igBeginGroup;
566     da_igEndGroup igEndGroup;
567     da_igSeparator igSeparator;
568     da_igSameLine igSameLine;
569     da_igSpacing igSpacing;
570     da_igDummy igDummy;
571     da_igIndent igIndent;
572     da_igUnindent igUnindent;
573     da_igColumns igColumns;
574     da_igNextColumn igNextColumn;
575     da_igGetColumnIndex igGetColumnIndex;
576     da_igGetColumnOffset igGetColumnOffset;
577     da_igSetColumnOffset igSetColumnOffset;
578     da_igGetColumnWidth igGetColumnWidth;
579     da_igGetColumnsCount igGetColumnsCount;
580     da_igGetCursorPos igGetCursorPos;
581     da_igGetCursorPosX igGetCursorPosX;
582     da_igGetCursorPosY igGetCursorPosY;
583     da_igSetCursorPos igSetCursorPos;
584     da_igSetCursorPosX igSetCursorPosX;
585     da_igSetCursorPosY igSetCursorPosY;
586     da_igGetCursorStartPos igGetCursorStartPos;
587     da_igGetCursorScreenPos igGetCursorScreenPos;
588     da_igSetCursorScreenPos igSetCursorScreenPos;
589     da_igAlignFirstTextHeightToWidgets igAlignFirstTextHeightToWidgets;
590     da_igGetTextLineHeight igGetTextLineHeight;
591     da_igGetTextLineHeightWithSpacing igGetTextLineHeightWithSpacing;
592     da_igGetItemsLineHeightWithSpacing igGetItemsLineHeightWithSpacing;
593 
594     da_igPushIdStr igPushIdStr;
595     da_igPushIdStrRange igPushIdStrRange;
596     da_igPushIdPtr igPushIdPtr;
597     da_igPushIdInt igPushIdInt;
598     da_igPopId igPopId;
599     da_igGetIdStr igGetIdStr;
600     da_igGetIdStrRange igGetIdStrRange;
601     da_igGetIdPtr igGetIdPtr;
602 
603     da_igText igText;
604     da_igTextV igTextV;
605     da_igTextColored igTextColored;
606     da_igTextColoredV igTextColoredV;
607     da_igTextDisabled igTextDisabled;
608     da_igTextDisabledV igTextDisabledV;
609     da_igTextWrapped igTextWrapped;
610     da_igTextWrappedV igTextWrappedV;
611     da_igTextUnformatted igTextUnformatted;
612     da_igLabelText igLabelText;
613     da_igLabelTextV igLabelTextV;
614     da_igBullet igBullet;
615     da_igBulletText igBulletText;
616     da_igBulletTextV igBulletTextV;
617     da_igButton igButton;
618     da_igSmallButton igSmallButton;
619     da_igInvisibleButton igInvisibleButton;
620     da_igImage igImage;
621     da_igImageButton igImageButton;
622     da_igCollapsingHeader igCollapsingHeader;
623     da_igCheckbox igCheckbox;
624     da_igCheckboxFlags igCheckboxFlags;
625     da_igRadioButtonBool igRadioButtonBool;
626     da_igRadioButton igRadioButton;
627     da_igCombo igCombo;
628     da_igCombo2 igCombo2;
629     da_igCombo3 igCombo3;
630     da_igColorButton igColorButton;
631     da_igColorEdit3 igColorEdit3;
632     da_igColorEdit4 igColorEdit4;
633     da_igColorEditMode igColorEditMode;
634     da_igPlotLines igPlotLines;
635     da_igPlotLines2 igPlotLines2;
636     da_igPlotHistogram igPlotHistogram;
637     da_igPlotHistogram2 igPlotHistogram2;
638 
639     da_igSliderFloat igSliderFloat;
640     da_igSliderFloat2 igSliderFloat2;
641     da_igSliderFloat3 igSliderFloat3;
642     da_igSliderFloat4 igSliderFloat4;
643     da_igSliderAngle igSliderAngle;
644     da_igSliderInt igSliderInt;
645     da_igSliderInt2 igSliderInt2;
646     da_igSliderInt3 igSliderInt3;
647     da_igSliderInt4 igSliderInt4;
648     da_igVSliderFloat igVSliderFloat;
649     da_igVSliderInt igVSliderInt;
650 
651     da_igDragFloat igDragFloat;
652     da_igDragFloat2 igDragFloat2;
653     da_igDragFloat3 igDragFloat3;
654     da_igDragFloat4 igDragFloat4;
655     da_igDragFloatRange2 igDragFloatRange2;
656     da_igDragInt igDragInt;
657     da_igDragInt2 igDragInt2;
658     da_igDragInt3 igDragInt3;
659     da_igDragInt4 igDragInt4;
660     da_igDragIntRange2 igDragIntRange2;
661 
662     da_igInputText igInputText;
663     da_igInputTextMultiline igInputTextMultiline;
664     da_igInputFloat igInputFloat;
665     da_igInputFloat2 igInputFloat2;
666     da_igInputFloat3 igInputFloat3;
667     da_igInputFloat4 igInputFloat4;
668     da_igInputInt igInputInt;
669     da_igInputInt2 igInputInt2;
670     da_igInputInt3 igInputInt3;
671     da_igInputInt4 igInputInt4;
672 
673     da_igTreeNode igTreeNode;
674     da_igTreeNodeStr igTreeNodeStr;
675     da_igTreeNodePtr igTreeNodePtr;
676     da_igTreeNodeStrV igTreeNodeStrV;
677     da_igTreeNodePtrV igTreeNodePtrV;
678     da_igTreePushStr igTreePushStr;
679     da_igTreePushPtr igTreePushPtr;
680     da_igTreePop igTreePop;
681     da_igSetNextTreeNodeOpened igSetNextTreeNodeOpened;
682 
683     da_igSelectable igSelectable;
684     da_igSelectableEx igSelectableEx;
685     da_igListBox igListBox;
686     da_igListBox2 igListBox2;
687     da_igListBoxHeader igListBoxHeader;
688     da_igListBoxHeader2 igListBoxHeader2;
689     da_igListBoxFooter igListBoxFooter;
690 
691     da_igBeginMainMenuBar  igBeginMainMenuBar;
692     da_igEndMainMenuBar    igEndMainMenuBar;
693     da_igBeginMenuBar      igBeginMenuBar;
694     da_igEndMenuBar        igEndMenuBar;
695     da_igBeginMenu         igBeginMenu;
696     da_igEndMenu           igEndMenu;
697     da_igMenuItem          igMenuItem;
698     da_igMenuItemPtr       igMenuItemPtr;
699 
700     da_igValueBool igValueBool;
701     da_igValueInt igValueInt;
702     da_igValueUInt igValueUInt;
703     da_igValueFloat igValueFloat;
704     da_igColor igColor;
705     da_igColor2 igColor2;
706 
707     da_igLogToTTY igLogToTTY;
708     da_igLogToFile igLogToFile;
709     da_igLogToClipboard igLogToClipboard;
710     da_igLogFinish igLogFinish;
711     da_igLogButtons igLogButtons;
712     da_igLogText igLogText;
713 
714     da_igIsItemHovered igIsItemHovered;
715     da_igIsItemHoveredRect igIsItemHoveredRect;
716     da_igIsItemActive igIsItemActive;
717     da_igIsItemVisible igIsItemVisible;
718     da_igIsAnyItemHovered igIsAnyItemHovered;
719     da_igIsAnyItemActive igIsAnyItemActive;
720     da_igGetItemRectMin igGetItemRectMin;
721     da_igGetItemRectMax igGetItemRectMax;
722     da_igGetItemRectSize igGetItemRectSize;
723     da_igIsWindowHovered igIsWindowHovered;
724     da_igIsWindowFocused igIsWindowFocused;
725     da_igIsRootWindowFocused igIsRootWindowFocused;
726     da_igIsRootWindowOrAnyChildFocused igIsRootWindowOrAnyChildFocused;
727     da_igIsRectVisible igIsRectVisible;
728     da_igIsKeyDown igIsKeyDown;
729     da_igIsKeyPressed igIsKeyPressed;
730     da_igIsKeyReleased igIsKeyReleased;
731     da_igIsMouseDown igIsMouseDown;
732     da_igIsMouseClicked igIsMouseClicked;
733     da_igIsMouseDoubleClicked igIsMouseDoubleClicked;
734     da_igIsMouseReleased igIsMouseReleased;
735     da_igIsMouseHoveringWindow igIsMouseHoveringWindow;
736     da_igIsMouseHoveringAnyWindow igIsMouseHoveringAnyWindow;
737     da_igIsMouseHoveringRect igIsMouseHoveringRect;
738     da_igIsMouseDragging igIsMouseDragging;
739     da_igIsPosHoveringAnyWindow igIsPosHoveringAnyWindow;
740     da_igGetMousePos igGetMousePos;
741     da_igGetMousePosOnOpeningCurrentPopup igGetMousePosOnOpeningCurrentPopup;
742     da_igGetMouseDragDelta igGetMouseDragDelta;
743     da_igResetMouseDragDelta igResetMouseDragDelta;
744     da_igGetMouseCursor igGetMouseCursor;
745     da_igSetMouseCursor igSetMouseCursor;
746     da_igCaptureKeyboardFromApp igCaptureKeyboardFromApp;
747     da_igCaptureMouseFromApp igCaptureMouseFromApp;
748 
749 
750     da_igMemAlloc igMemAlloc;
751     da_igMemFree igMemFree;
752     da_igGetClipboardText igGetClipboardText;
753     da_igSetClipboardText igSetClipboardText;
754 
755     da_igGetTime igGetTime;
756     da_igGetFrameCount igGetFrameCount;
757     da_igGetStyleColName igGetStyleColName;
758     da_igCalcItemRectClosestPoint igCalcItemRectClosestPoint;
759     da_igCalcTextSize igCalcTextSize;
760     da_igCalcListClipping igCalcListClipping;
761 
762     da_igBeginChildFrame igBeginChildFrame;
763     da_igEndChildFrame igEndChildFrame;
764 
765     da_igColorConvertU32ToFloat4 igColorConvertU32ToFloat4;
766     da_igColorConvertFloat4ToU32 igColorConvertFloat4ToU32;
767     da_igColorConvertRGBtoHSV igColorConvertRGBtoHSV;
768     da_igColorConvertHSVtoRGB igColorConvertHSVtoRGB;
769 
770     da_igGetVersion igGetVersion;
771     da_igGetInternalState igGetInternalState;
772     da_igGetInternalStateSize igGetInternalStateSize;
773     da_igSetInternalState igSetInternalState;
774 }
775 
776 __gshared
777 {
778     da_ImFontAtlas_GetTexDataAsRGBA32       ImFontAtlas_GetTexDataAsRGBA32;
779     da_ImFontAtlas_GetTexDataAsAlpha8       ImFontAtlas_GetTexDataAsAlpha8;
780     da_ImFontAtlas_SetTexID                 ImFontAtlas_SetTexID;
781     da_ImFontAtlas_AddFont                  ImFontAtlas_AddFont;
782     da_ImFontAtlas_AddFontDefault           ImFontAtlas_AddFontDefault;
783     da_ImFontAtlas_AddFontFromFileTTF       ImFontAtlas_AddFontFromFileTTF;
784     da_ImFontAtlas_AddFontFromMemoryTTF     ImFontAtlas_AddFontFromMemoryTTF;
785     da_ImFontAtlas_AddFontFromMemoryCompressedTTF ImFontAtlas_AddFontFromMemoryCompressedTTF;
786 	da_ImFontAtlas_AddFontFromMemoryCompressedBase85TTF ImFontAtlas_AddFontFromMemoryCompressedBase85TTF;
787     da_ImFontAtlas_ClearTexData             ImFontAtlas_ClearTexData;
788     da_ImFontAtlas_Clear                    ImFontAtlas_Clear;
789 }
790 
791 //TODO: rework
792 __gshared
793 {
794     da_ImDrawList_GetVertexBufferSize ImDrawList_GetVertexBufferSize;
795     da_ImDrawList_GetVertexPtr ImDrawList_GetVertexPtr;
796     da_ImDrawList_GetIndexBufferSize ImDrawList_GetIndexBufferSize;
797     da_ImDrawList_GetIndexPtr ImDrawList_GetIndexPtr;
798     da_ImDrawList_GetCmdSize ImDrawList_GetCmdSize;
799     da_ImDrawList_GetCmdPtr ImDrawList_GetCmdPtr;
800 
801     da_ImDrawData_DeIndexAllBuffers ImDrawData_DeIndexAllBuffers;
802 
803 	da_ImDrawList_Clear ImDrawList_Clear;
804 	da_ImDrawList_ClearFreeMemory ImDrawList_ClearFreeMemory;
805 	da_ImDrawList_PushClipRect ImDrawList_PushClipRect;
806 	da_ImDrawList_PushClipRectFullScreen ImDrawList_PushClipRectFullScreen;
807 	da_ImDrawList_PopClipRect ImDrawList_PopClipRect;
808 	da_ImDrawList_PushTextureID ImDrawList_PushTextureID;
809 	da_ImDrawList_PopTextureID ImDrawList_PopTextureID;
810 	da_ImDrawList_AddLine ImDrawList_AddLine;
811 	da_ImDrawList_AddRect ImDrawList_AddRect;
812 	da_ImDrawList_AddRectFilled ImDrawList_AddRectFilled;
813 	da_ImDrawList_AddRectFilledMultiColor ImDrawList_AddRectFilledMultiColor;
814 	da_ImDrawList_AddTriangleFilled ImDrawList_AddTriangleFilled;
815 	da_ImDrawList_AddCircle ImDrawList_AddCircle;
816 	da_ImDrawList_AddCircleFilled ImDrawList_AddCircleFilled;
817 	da_ImDrawList_AddText ImDrawList_AddText;
818 	da_ImDrawList_AddTextExt ImDrawList_AddTextExt;
819 	da_ImDrawList_AddImage ImDrawList_AddImage;
820 	da_ImDrawList_AddPolyline ImDrawList_AddPolyline;
821 	da_ImDrawList_AddConvexPolyFilled ImDrawList_AddConvexPolyFilled;
822 	da_ImDrawList_AddBezierCurve ImDrawList_AddBezierCurve;
823 	da_ImDrawList_PathClear ImDrawList_PathClear;
824 	da_ImDrawList_PathLineTo ImDrawList_PathLineTo;
825 	da_ImDrawList_PathLineToMergeDuplicate ImDrawList_PathLineToMergeDuplicate;
826 	da_ImDrawList_PathFill ImDrawList_PathFill;
827 	da_ImDrawList_PathStroke ImDrawList_PathStroke;
828 	da_ImDrawList_PathArcTo ImDrawList_PathArcTo;
829 	da_ImDrawList_PathArcToFast ImDrawList_PathArcToFast;
830 	da_ImDrawList_PathBezierCurveTo ImDrawList_PathBezierCurveTo;
831 	da_ImDrawList_PathRect ImDrawList_PathRect;
832 	da_ImDrawList_ChannelsSplit ImDrawList_ChannelsSplit;
833 	da_ImDrawList_ChannelsMerge ImDrawList_ChannelsMerge;
834 	da_ImDrawList_ChannelsSetCurrent ImDrawList_ChannelsSetCurrent;
835 	da_ImDrawList_AddCallback ImDrawList_AddCallback;
836 	da_ImDrawList_AddDrawCmd ImDrawList_AddDrawCmd;
837 	da_ImDrawList_PrimReserve ImDrawList_PrimReserve;
838 	da_ImDrawList_PrimRect ImDrawList_PrimRect;
839 	da_ImDrawList_PrimRectUV ImDrawList_PrimRectUV;
840 	da_ImDrawList_PrimVtx ImDrawList_PrimVtx;
841 	da_ImDrawList_PrimWriteVtx ImDrawList_PrimWriteVtx;
842 	da_ImDrawList_PrimWriteIdx ImDrawList_PrimWriteIdx;
843 	da_ImDrawList_UpdateClipRect ImDrawList_UpdateClipRect;
844 	da_ImDrawList_UpdateTextureID ImDrawList_UpdateTextureID;
845 
846     da_ImGuiIO_AddInputCharacter ImGuiIO_AddInputCharacter;
847     da_ImGuiIO_AddInputCharactersUTF8 ImGuiIO_AddInputCharactersUTF8;
848 }
849 
850 __gshared
851 {
852 	da_igGetCurrentWindowRead igGetCurrentWindowRead;
853 	da_igGetCurrentWindow igGetCurrentWindow;
854 	da_igGetParentWindow igGetParentWindow;
855 	da_igFocusWindow igFocusWindow;
856 	da_igSetActiveID igSetActiveID;
857 	da_igKeepAliveID igKeepAliveID;
858 	da_igItemSize igItemSize;
859 	da_igItemSize2 igItemSize2;
860 	da_igItemAdd igItemAdd;
861 	da_igIsClippedEx igIsClippedEx;
862 	da_igIsHovered igIsHovered;
863 	da_igFocusableItemRegister igFocusableItemRegister;
864 	da_igFocusableItemUnregister igFocusableItemUnregister;
865 	da_igCalcWrapWidthForPos igCalcWrapWidthForPos;
866 	da_igRenderText igRenderText;
867 	da_igRenderTextWrapped igRenderTextWrapped;
868 	da_igRenderTextClipped igRenderTextClipped;
869 	da_igRenderFrame igRenderFrame;
870 	da_igRenderCollapseTriangle igRenderCollapseTriangle;
871 	da_igRenderCheckMark igRenderCheckMark;
872 	da_igButtonBehavior igButtonBehavior;
873 	da_igButtonEx igButtonEx;
874 	da_igSliderBehavior igSliderBehavior;
875 	da_igSliderFloatN igSliderFloatN;
876 	da_igSliderIntN igSliderIntN;
877 	da_igDragBehavior igDragBehavior;
878 	da_igDragFloatN igDragFloatN;
879 	da_igDragIntN igDragIntN;
880 	da_igInputTextEx igInputTextEx;
881 	da_igInputFloatN igInputFloatN;
882 	da_igInputIntN igInputIntN;
883 	da_igTreeNodeBehaviorIsOpened igTreeNodeBehaviorIsOpened;
884 	da_igParseFormatPrecision igParseFormatPrecision;
885 	da_igRoundScalar igRoundScalar;
886 
887 	da_igGetImGuiState igGetImGuiState;
888 	da_igGetSkipItems igGetSkipItems;
889 }