1 module cimgui.types;
2 
3 import cimgui.funcs;
4 
5 struct ImGuiContext;
6 struct ImDrawListSharedData;
7 
8 struct ImVec2_Simple { float x, y; }
9 struct ImVec4_Simple { float x, y, z, w; }
10 struct ImColor_Simple { ImVec4_Simple value; }
11 
12 alias ImTextureID = void*;
13 alias ImGuiID = uint;
14 alias ImWchar = ushort;
15 
16 alias ImGuiCol = int;
17 alias ImGuiCond = int;
18 alias ImGuiDataType = int;
19 alias ImGuiDir = int;
20 alias ImGuiKey = int;
21 alias ImGuiNavInput = int;
22 alias ImGuiMouseCursor = int;
23 alias ImGuiStyleVar = int;
24 alias ImDrawCornerFlags = int;
25 alias ImDrawListFlags = int;
26 alias ImFontAtlasFlags = int;
27 alias ImGuiBackendFlags = int;
28 alias ImGuiColorEditFlags = int;
29 alias ImGuiColumnsFlags = int;
30 alias ImGuiConfigFlags = int;
31 alias ImGuiComboFlags = int;
32 alias ImGuiDragDropFlags = int;
33 alias ImGuiFocusedFlags = int;
34 alias ImGuiHoveredFlags = int;
35 alias ImGuiInputTextFlags = int;
36 alias ImGuiSelectableFlags = int;
37 alias ImGuiTabBarFlags = int;
38 alias ImGuiTabItemFlags = int;
39 alias ImGuiTreeNodeFlags = int;
40 alias ImGuiWindowFlags = int;
41 
42 extern(C) nothrow 
43 {
44 	alias ImGuiInputTextCallback = int function(ImGuiInputTextCallbackData* data);
45 	alias ImGuiSizeCallback = void function(ImGuiSizeCallbackData* data);
46 }
47 
48 alias ImS8 = byte;
49 alias ImU8 = ubyte;
50 alias ImS16 = short;
51 alias ImU16 = ushort;
52 alias ImS32 = int;
53 alias ImU32 = uint;
54 alias ImS64 = long;
55 alias ImU64 = ulong;
56 
57 alias ImDrawCallback = void function(const ImDrawList* parentList, const ImDrawCmd* cmd);
58 alias ImDrawIdx = ushort;
59 
60 struct ImVector(T, string N)
61 {
62 	int size;
63 	int capacity;
64 	T* data;
65 
66 	static ImVector!(T, N)* create()
67 	{
68 		mixin("return ImVector_" ~ N ~ "_ImVector_" ~ N ~ "();");
69 	}
70 
71 	void destroy()
72 	{
73 		mixin("ImVector_" ~ N ~ "_destroy(&this);");
74 	}
75 
76 	bool empty()
77 	{
78 		mixin("return ImVector_" ~ N ~ "_empty(&this);");
79 	}
80 
81 	int sizeInBytes()
82 	{
83 		mixin("return ImVector_" ~ N ~ "_size_in_bytes(&this);");
84 	}
85 
86 	void clear()
87 	{
88 		mixin("ImVector_" ~ N ~ "_clear(&this);");
89 	}
90 
91 	T* begin()
92 	{
93 		mixin("return ImVector_" ~ N ~ "_begin(&this);");
94 	}
95 
96 	const(T*) beginConst()
97 	{
98 		mixin("return ImVector_" ~ N ~ "_begin_const(&this);");
99 	}
100 
101 	T* end()
102 	{
103 		mixin("return ImVector_" ~ N ~ "_end(&this);");
104 	}
105 
106 	const(T*) endConst()
107 	{
108 		mixin("return ImVector_" ~ N ~ "_end_const(&this);");
109 	}
110 
111 	T* front()
112 	{
113 		mixin("return ImVector_" ~ N ~ "_front(&this);");
114 	}
115 
116 	const(T*) frontConst()
117 	{
118 		mixin("return ImVector_" ~ N ~ "_front_const(&this);");
119 	}
120 
121 	T* back()
122 	{
123 		mixin("return ImVector_" ~ N ~ "_back(&this);");
124 	}
125 
126 	const(T*) backConst()
127 	{
128 		mixin("return ImVector_" ~ N ~ "_back_const(&this);");
129 	}
130 
131 	void swap(ImVector!(T, N) rhs)
132 	{
133 		mixin("ImVector_" ~ N ~ "_swap(&this, rhs);");
134 	}
135 
136 	int growCapacity(int sz)
137 	{
138 		mixin("return ImVector_" ~ N ~ "__grow_capacity(&this, sz);");
139 	}
140 
141 	void resize(int newSize)
142 	{
143 		mixin("ImVector_" ~ N ~ "_resize(&this, newSize);");
144 	}
145 
146 	void resizeT(int newSize, const T v)
147 	{
148 		mixin("ImVector_" ~ N ~ "_resizeT(&this, newSize, v);");
149 	}
150 
151 	void reserve(int newCapacity)
152 	{
153 		mixin("ImVector_" ~ N ~ "_reserve(&this, newCapacity);");
154 	}
155 
156 	void pushBack(const T v)
157 	{
158 		mixin("ImVector_" ~ N ~ "_push_back(&this, v);");
159 	}
160 
161 	void popBack()
162 	{
163 		mixin("ImVector_" ~ N ~ "_pop_back(&this);");
164 	}
165 
166 	void pushFront(const T v)
167 	{
168 		mixin("ImVector_" ~ N ~ "_push_front(&this, v);");
169 	}
170 
171 	T* erase(const T* it)
172 	{
173 		mixin("return ImVector_" ~ N ~ "_erase(&this, it);");
174 	}
175 
176 	T* eraseTPtr(const T* it, const T* itLast)
177 	{
178 		mixin("return ImVector_" ~ N ~ "_eraseTPtr(&this, it, itLast);");
179 	}
180 
181 	T* eraseUnsorted(const T* it)
182 	{
183 		mixin("return ImVector_" ~ N ~ "_erase_unsorted(&this, it);");
184 	}
185 
186 	T* insert(const T* it, const T v)
187 	{
188 		mixin("return ImVector_" ~ N ~ "_insert(&this, it, v);");
189 	}
190 
191 	static if(N == "float" || N == "ImWchar" || N == "char" || N == "int")
192 	{
193 		bool contains(const T v)
194 		{
195 			mixin("return ImVector_" ~ N ~ "_contains(&this, v);");
196 		}
197 	}
198 
199 	int indexFromPtr(const T* it)
200 	{
201 		mixin("return ImVector_" ~ N ~ "_index_from_ptr(&this, it);");
202 	}
203 }
204 
205 alias ImVector_float = ImVector!(float, "float");
206 alias ImVector_ImWchar = ImVector!(ImWchar, "ImWchar");
207 alias ImVector_ImFontConfig = ImVector!(ImFontConfig, "ImFontConfig");
208 alias ImVector_ImFontGlyph = ImVector!(ImFontGlyph, "ImFontGlyph");
209 alias ImVector_TextRange = ImVector!(TextRange, "TextRange");
210 alias ImVector_CustomRect = ImVector!(CustomRect, "CustomRect");
211 alias ImVector_ImDrawChannel = ImVector!(ImDrawChannel, "ImDrawChannel");
212 alias ImVector_char = ImVector!(char, "char");
213 alias ImVector_ImTextureID = ImVector!(ImTextureID, "ImTextureID");
214 alias ImVector_ImDrawVert = ImVector!(ImDrawVert, "ImDrawVert");
215 alias ImVector_int = ImVector!(int, "int");
216 alias ImVector_Pair = ImVector!(Pair, "Pair");
217 alias ImVector_ImFontPtr = ImVector!(ImFont*, "ImFontPtr");
218 alias ImVector_ImVec4 = ImVector!(ImVec4, "ImVec4");
219 alias ImVector_ImDrawCmd = ImVector!(ImDrawCmd, "ImDrawCmd");
220 alias ImVector_ImDrawIdx = ImVector!(ImDrawIdx, "ImDrawIdx");
221 alias ImVector_ImVec2 = ImVector!(ImVec2, "ImVec2");
222 
223 /*struct ImVector_float { int size; int capacity; float* data; }
224 struct ImVector_ImWchar { int size; int capacity; ImWchar* data; }
225 struct ImVector_ImFontConfig { int size; int capacity; ImFontConfig* data; }
226 struct ImVector_ImFontGlyph { int size; int capacity; ImFontGlyph* data; }
227 struct ImVector_TextRange { int size; int capacity; TextRange* data; }
228 struct ImVector_CustomRect { int size; int capacity; CustomRect* data; }
229 struct ImVector_ImDrawChannel { int size; int capacity; ImDrawChannel* data; }
230 struct ImVector_char { int size; int capacity; char* data; }
231 struct ImVector_ImTextureID { int size; int capacity; ImTextureID* data; }
232 struct ImVector_ImDrawVert { int size; int capacity; ImDrawVert* data; }
233 struct ImVector_int { int size; int capacity; int* data; }
234 struct ImVector_Pair { int size; int capacity; Pair* data; }
235 struct ImVector_ImFontPtr { int size; int capacity; ImFont** data; }
236 struct ImVector_ImVec4 { int size; int capacity; ImVec4* data; }
237 struct ImVector_ImDrawCmd { int size; int capacity; ImDrawCmd* data; }
238 struct ImVector_ImDrawIdx { int size; int capacity; ImDrawIdx* data; }
239 struct ImVector_ImVec2 { int size; int capacity; ImVec2* data; }*/
240 
241 struct ImVec2 { float x, y; }
242 struct ImVec4 { float x, y, z, w; }
243 
244 enum
245 {
246     ImGuiWindowFlags_None = 0,
247     ImGuiWindowFlags_NoTitleBar = 1 << 0,
248     ImGuiWindowFlags_NoResize = 1 << 1,
249     ImGuiWindowFlags_NoMove = 1 << 2,
250     ImGuiWindowFlags_NoScrollbar = 1 << 3,
251     ImGuiWindowFlags_NoScrollWithMouse = 1 << 4,
252     ImGuiWindowFlags_NoCollapse = 1 << 5,
253     ImGuiWindowFlags_AlwaysAutoResize = 1 << 6,
254     ImGuiWindowFlags_NoBackground = 1 << 7,
255     ImGuiWindowFlags_NoSavedSettings = 1 << 8,
256     ImGuiWindowFlags_NoMouseInputs = 1 << 9,
257     ImGuiWindowFlags_MenuBar = 1 << 10,
258     ImGuiWindowFlags_HorizontalScrollbar = 1 << 11,
259     ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12,
260     ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13,
261     ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14,
262     ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15,
263     ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16,
264     ImGuiWindowFlags_NoNavInputs = 1 << 18,
265     ImGuiWindowFlags_NoNavFocus = 1 << 19,
266     ImGuiWindowFlags_UnsavedDocument = 1 << 20,
267     ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
268     ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
269     ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
270     ImGuiWindowFlags_NavFlattened = 1 << 23,
271     ImGuiWindowFlags_ChildWindow = 1 << 24,
272     ImGuiWindowFlags_Tooltip = 1 << 25,
273     ImGuiWindowFlags_Popup = 1 << 26,
274     ImGuiWindowFlags_Modal = 1 << 27,
275     ImGuiWindowFlags_ChildMenu = 1 << 28
276 }
277 
278 enum
279 {
280     ImGuiInputTextFlags_None = 0,
281     ImGuiInputTextFlags_CharsDecimal = 1 << 0,
282     ImGuiInputTextFlags_CharsHexadecimal = 1 << 1,
283     ImGuiInputTextFlags_CharsUppercase = 1 << 2,
284     ImGuiInputTextFlags_CharsNoBlank = 1 << 3,
285     ImGuiInputTextFlags_AutoSelectAll = 1 << 4,
286     ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5,
287     ImGuiInputTextFlags_CallbackCompletion = 1 << 6,
288     ImGuiInputTextFlags_CallbackHistory = 1 << 7,
289     ImGuiInputTextFlags_CallbackAlways = 1 << 8,
290     ImGuiInputTextFlags_CallbackCharFilter = 1 << 9,
291     ImGuiInputTextFlags_AllowTabInput = 1 << 10,
292     ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11,
293     ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12,
294     ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13,
295     ImGuiInputTextFlags_ReadOnly = 1 << 14,
296     ImGuiInputTextFlags_Password = 1 << 15,
297     ImGuiInputTextFlags_NoUndoRedo = 1 << 16,
298     ImGuiInputTextFlags_CharsScientific = 1 << 17,
299     ImGuiInputTextFlags_CallbackResize = 1 << 18,
300     ImGuiInputTextFlags_Multiline = 1 << 20
301 }
302 
303 enum
304 {
305     ImGuiTreeNodeFlags_None = 0,
306     ImGuiTreeNodeFlags_Selected = 1 << 0,
307     ImGuiTreeNodeFlags_Framed = 1 << 1,
308     ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2,
309     ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3,
310     ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4,
311     ImGuiTreeNodeFlags_DefaultOpen = 1 << 5,
312     ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6,
313     ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7,
314     ImGuiTreeNodeFlags_Leaf = 1 << 8,
315     ImGuiTreeNodeFlags_Bullet = 1 << 9,
316     ImGuiTreeNodeFlags_FramePadding = 1 << 10,
317     ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13,
318     ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
319 }
320 
321 enum
322 {
323     ImGuiSelectableFlags_None = 0,
324     ImGuiSelectableFlags_DontClosePopups = 1 << 0,
325     ImGuiSelectableFlags_SpanAllColumns = 1 << 1,
326     ImGuiSelectableFlags_AllowDoubleClick = 1 << 2,
327     ImGuiSelectableFlags_Disabled = 1 << 3
328 }
329 
330 enum
331 {
332     ImGuiComboFlags_None = 0,
333     ImGuiComboFlags_PopupAlignLeft = 1 << 0,
334     ImGuiComboFlags_HeightSmall = 1 << 1,
335     ImGuiComboFlags_HeightRegular = 1 << 2,
336     ImGuiComboFlags_HeightLarge = 1 << 3,
337     ImGuiComboFlags_HeightLargest = 1 << 4,
338     ImGuiComboFlags_NoArrowButton = 1 << 5,
339     ImGuiComboFlags_NoPreview = 1 << 6,
340     ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
341 }
342 
343 enum
344 {
345     ImGuiTabBarFlags_None = 0,
346     ImGuiTabBarFlags_Reorderable = 1 << 0,
347     ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1,
348     ImGuiTabBarFlags_TabListPopupButton = 1 << 2,
349     ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3,
350     ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4,
351     ImGuiTabBarFlags_NoTooltip = 1 << 5,
352     ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6,
353     ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7,
354     ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll,
355     ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown
356 }
357 
358 enum
359 {
360     ImGuiTabItemFlags_None = 0,
361     ImGuiTabItemFlags_UnsavedDocument = 1 << 0,
362     ImGuiTabItemFlags_SetSelected = 1 << 1,
363     ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2,
364     ImGuiTabItemFlags_NoPushId = 1 << 3
365 }
366 
367 enum
368 {
369     ImGuiFocusedFlags_None = 0,
370     ImGuiFocusedFlags_ChildWindows = 1 << 0,
371     ImGuiFocusedFlags_RootWindow = 1 << 1,
372     ImGuiFocusedFlags_AnyWindow = 1 << 2,
373     ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows
374 }
375 
376 enum
377 {
378     ImGuiHoveredFlags_None = 0,
379     ImGuiHoveredFlags_ChildWindows = 1 << 0,
380     ImGuiHoveredFlags_RootWindow = 1 << 1,
381     ImGuiHoveredFlags_AnyWindow = 1 << 2,
382     ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 3,
383     ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 5,
384     ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6,
385     ImGuiHoveredFlags_AllowWhenDisabled = 1 << 7,
386     ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
387     ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows
388 }
389 
390 enum
391 {
392     ImGuiDragDropFlags_None = 0,
393     ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0,
394     ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1,
395     ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2,
396     ImGuiDragDropFlags_SourceAllowNullID = 1 << 3,
397     ImGuiDragDropFlags_SourceExtern = 1 << 4,
398     ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5,
399     ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10,
400     ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11,
401     ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12,
402     ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect
403 }
404 
405 enum
406 {
407     ImGuiDataType_S8,
408     ImGuiDataType_U8,
409     ImGuiDataType_S16,
410     ImGuiDataType_U16,
411     ImGuiDataType_S32,
412     ImGuiDataType_U32,
413     ImGuiDataType_S64,
414     ImGuiDataType_U64,
415     ImGuiDataType_Float,
416     ImGuiDataType_Double,
417     ImGuiDataType_COUNT
418 }
419 
420 enum
421 {
422     ImGuiDir_None = -1,
423     ImGuiDir_Left = 0,
424     ImGuiDir_Right = 1,
425     ImGuiDir_Up = 2,
426     ImGuiDir_Down = 3,
427     ImGuiDir_COUNT
428 }
429 
430 enum
431 {
432     ImGuiKey_Tab,
433     ImGuiKey_LeftArrow,
434     ImGuiKey_RightArrow,
435     ImGuiKey_UpArrow,
436     ImGuiKey_DownArrow,
437     ImGuiKey_PageUp,
438     ImGuiKey_PageDown,
439     ImGuiKey_Home,
440     ImGuiKey_End,
441     ImGuiKey_Insert,
442     ImGuiKey_Delete,
443     ImGuiKey_Backspace,
444     ImGuiKey_Space,
445     ImGuiKey_Enter,
446     ImGuiKey_Escape,
447     ImGuiKey_A,
448     ImGuiKey_C,
449     ImGuiKey_V,
450     ImGuiKey_X,
451     ImGuiKey_Y,
452     ImGuiKey_Z,
453     ImGuiKey_COUNT
454 }
455 
456 enum
457 {
458     ImGuiNavInput_Activate,
459     ImGuiNavInput_Cancel,
460     ImGuiNavInput_Input,
461     ImGuiNavInput_Menu,
462     ImGuiNavInput_DpadLeft,
463     ImGuiNavInput_DpadRight,
464     ImGuiNavInput_DpadUp,
465     ImGuiNavInput_DpadDown,
466     ImGuiNavInput_LStickLeft,
467     ImGuiNavInput_LStickRight,
468     ImGuiNavInput_LStickUp,
469     ImGuiNavInput_LStickDown,
470     ImGuiNavInput_FocusPrev,
471     ImGuiNavInput_FocusNext,
472     ImGuiNavInput_TweakSlow,
473     ImGuiNavInput_TweakFast,
474     ImGuiNavInput_KeyMenu_,
475     ImGuiNavInput_KeyTab_,
476     ImGuiNavInput_KeyLeft_,
477     ImGuiNavInput_KeyRight_,
478     ImGuiNavInput_KeyUp_,
479     ImGuiNavInput_KeyDown_,
480     ImGuiNavInput_COUNT,
481     ImGuiNavInput_InternalStart_ = ImGuiNavInput_KeyMenu_
482 }
483 
484 enum
485 {
486     ImGuiConfigFlags_None = 0,
487     ImGuiConfigFlags_NavEnableKeyboard = 1 << 0,
488     ImGuiConfigFlags_NavEnableGamepad = 1 << 1,
489     ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2,
490     ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3,
491     ImGuiConfigFlags_NoMouse = 1 << 4,
492     ImGuiConfigFlags_NoMouseCursorChange = 1 << 5,
493     ImGuiConfigFlags_IsSRGB = 1 << 20,
494     ImGuiConfigFlags_IsTouchScreen = 1 << 21
495 }
496 
497 enum
498 {
499     ImGuiBackendFlags_None = 0,
500     ImGuiBackendFlags_HasGamepad = 1 << 0,
501     ImGuiBackendFlags_HasMouseCursors = 1 << 1,
502     ImGuiBackendFlags_HasSetMousePos = 1 << 2
503 }
504 
505 enum
506 {
507     ImGuiCol_Text,
508     ImGuiCol_TextDisabled,
509     ImGuiCol_WindowBg,
510     ImGuiCol_ChildBg,
511     ImGuiCol_PopupBg,
512     ImGuiCol_Border,
513     ImGuiCol_BorderShadow,
514     ImGuiCol_FrameBg,
515     ImGuiCol_FrameBgHovered,
516     ImGuiCol_FrameBgActive,
517     ImGuiCol_TitleBg,
518     ImGuiCol_TitleBgActive,
519     ImGuiCol_TitleBgCollapsed,
520     ImGuiCol_MenuBarBg,
521     ImGuiCol_ScrollbarBg,
522     ImGuiCol_ScrollbarGrab,
523     ImGuiCol_ScrollbarGrabHovered,
524     ImGuiCol_ScrollbarGrabActive,
525     ImGuiCol_CheckMark,
526     ImGuiCol_SliderGrab,
527     ImGuiCol_SliderGrabActive,
528     ImGuiCol_Button,
529     ImGuiCol_ButtonHovered,
530     ImGuiCol_ButtonActive,
531     ImGuiCol_Header,
532     ImGuiCol_HeaderHovered,
533     ImGuiCol_HeaderActive,
534     ImGuiCol_Separator,
535     ImGuiCol_SeparatorHovered,
536     ImGuiCol_SeparatorActive,
537     ImGuiCol_ResizeGrip,
538     ImGuiCol_ResizeGripHovered,
539     ImGuiCol_ResizeGripActive,
540     ImGuiCol_Tab,
541     ImGuiCol_TabHovered,
542     ImGuiCol_TabActive,
543     ImGuiCol_TabUnfocused,
544     ImGuiCol_TabUnfocusedActive,
545     ImGuiCol_PlotLines,
546     ImGuiCol_PlotLinesHovered,
547     ImGuiCol_PlotHistogram,
548     ImGuiCol_PlotHistogramHovered,
549     ImGuiCol_TextSelectedBg,
550     ImGuiCol_DragDropTarget,
551     ImGuiCol_NavHighlight,
552     ImGuiCol_NavWindowingHighlight,
553     ImGuiCol_NavWindowingDimBg,
554     ImGuiCol_ModalWindowDimBg,
555     ImGuiCol_COUNT
556 }
557 
558 enum
559 {
560     ImGuiStyleVar_Alpha,
561     ImGuiStyleVar_WindowPadding,
562     ImGuiStyleVar_WindowRounding,
563     ImGuiStyleVar_WindowBorderSize,
564     ImGuiStyleVar_WindowMinSize,
565     ImGuiStyleVar_WindowTitleAlign,
566     ImGuiStyleVar_ChildRounding,
567     ImGuiStyleVar_ChildBorderSize,
568     ImGuiStyleVar_PopupRounding,
569     ImGuiStyleVar_PopupBorderSize,
570     ImGuiStyleVar_FramePadding,
571     ImGuiStyleVar_FrameRounding,
572     ImGuiStyleVar_FrameBorderSize,
573     ImGuiStyleVar_ItemSpacing,
574     ImGuiStyleVar_ItemInnerSpacing,
575     ImGuiStyleVar_IndentSpacing,
576     ImGuiStyleVar_ScrollbarSize,
577     ImGuiStyleVar_ScrollbarRounding,
578     ImGuiStyleVar_GrabMinSize,
579     ImGuiStyleVar_GrabRounding,
580     ImGuiStyleVar_TabRounding,
581     ImGuiStyleVar_ButtonTextAlign,
582     ImGuiStyleVar_SelectableTextAlign,
583     ImGuiStyleVar_COUNT
584 }
585 
586 enum
587 {
588     ImGuiColorEditFlags_None = 0,
589     ImGuiColorEditFlags_NoAlpha = 1 << 1,
590     ImGuiColorEditFlags_NoPicker = 1 << 2,
591     ImGuiColorEditFlags_NoOptions = 1 << 3,
592     ImGuiColorEditFlags_NoSmallPreview = 1 << 4,
593     ImGuiColorEditFlags_NoInputs = 1 << 5,
594     ImGuiColorEditFlags_NoTooltip = 1 << 6,
595     ImGuiColorEditFlags_NoLabel = 1 << 7,
596     ImGuiColorEditFlags_NoSidePreview = 1 << 8,
597     ImGuiColorEditFlags_NoDragDrop = 1 << 9,
598     ImGuiColorEditFlags_AlphaBar = 1 << 16,
599     ImGuiColorEditFlags_AlphaPreview = 1 << 17,
600     ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18,
601     ImGuiColorEditFlags_HDR = 1 << 19,
602     ImGuiColorEditFlags_DisplayRGB = 1 << 20,
603     ImGuiColorEditFlags_DisplayHSV = 1 << 21,
604     ImGuiColorEditFlags_DisplayHex = 1 << 22,
605     ImGuiColorEditFlags_Uint8 = 1 << 23,
606     ImGuiColorEditFlags_Float = 1 << 24,
607     ImGuiColorEditFlags_PickerHueBar = 1 << 25,
608     ImGuiColorEditFlags_PickerHueWheel = 1 << 26,
609     ImGuiColorEditFlags_InputRGB = 1 << 27,
610     ImGuiColorEditFlags_InputHSV = 1 << 28,
611     ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_PickerHueBar,
612     ImGuiColorEditFlags__DisplayMask = ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_DisplayHSV|ImGuiColorEditFlags_DisplayHex,
613     ImGuiColorEditFlags__DataTypeMask = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float,
614     ImGuiColorEditFlags__PickerMask = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar,
615     ImGuiColorEditFlags__InputMask = ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_InputHSV
616 }
617 
618 enum
619 {
620     ImGuiMouseCursor_None = -1,
621     ImGuiMouseCursor_Arrow = 0,
622     ImGuiMouseCursor_TextInput,
623     ImGuiMouseCursor_ResizeAll,
624     ImGuiMouseCursor_ResizeNS,
625     ImGuiMouseCursor_ResizeEW,
626     ImGuiMouseCursor_ResizeNESW,
627     ImGuiMouseCursor_ResizeNWSE,
628     ImGuiMouseCursor_Hand,
629     ImGuiMouseCursor_COUNT
630 }
631 
632 enum
633 {
634     ImGuiCond_Always = 1 << 0,
635     ImGuiCond_Once = 1 << 1,
636     ImGuiCond_FirstUseEver = 1 << 2,
637     ImGuiCond_Appearing = 1 << 3
638 }
639 
640 struct ImGuiStyle
641 {
642 	float alpha;
643 	ImVec2 windowPadding;
644 	float windowRounding;
645 	float windowBorderSize;
646 	ImVec2 windowMinSize;
647 	ImVec2 windowTitleAlign;
648 	float childRounding;
649 	float childBorderSize;
650 	ImVec2 framePadding;
651 	float frameRounding;
652 	float frameBorderSize;
653 	ImVec2 itemSpacing;
654 	ImVec2 itemInnerSpacing;
655 	ImVec2 touchExtraPadding;
656 	float indentSpacing;
657     float columnsMinSpacing;
658     float scrollbarSize;
659     float scrollbarRounding;
660     float grabMinSize;
661     float grabRounding;
662     float tabRounding;
663     float tabBorderSize;
664     ImVec2 buttonTextAlign;
665     ImVec2 selectableTextAlign;
666     ImVec2 displayWindowPadding;
667     ImVec2 displaySafeAreaPadding;
668     float mouseCursorScale;
669     bool antiAliasedLines;
670     bool antiAliasedFill;
671     float curveTessellationTol;
672 	ImVec4[ImGuiCol_COUNT] colors;
673 
674 	void scaleAllSizes(float scaleFactor) { ImGuiStyle_ScaleAllSizes(&this, scaleFactor); }
675 }
676 
677 struct ImGuiIO
678 {
679     ImGuiConfigFlags ConfigFlags;
680     ImGuiBackendFlags BackendFlags;
681     ImVec2 DisplaySize;
682     float DeltaTime;
683     float IniSavingRate;
684     const char* IniFilename;
685     const char* LogFilename;
686     float MouseDoubleClickTime;
687     float MouseDoubleClickMaxDist;
688     float MouseDragThreshold;
689     int[ImGuiKey_COUNT] KeyMap;
690     float KeyRepeatDelay;
691     float KeyRepeatRate;
692     void* UserData;
693     ImFontAtlas* Fonts;
694     float FontGlobalScale;
695     bool FontAllowUserScaling;
696     ImFont* FontDefault;
697     ImVec2 DisplayFramebufferScale;
698     bool MouseDrawCursor;
699     bool ConfigMacOSXBehaviors;
700     bool ConfigInputTextCursorBlink;
701     bool ConfigWindowsResizeFromEdges;
702     bool ConfigWindowsMoveFromTitleBarOnly;
703     const char* BackendPlatformName;
704     const char* BackendRendererName;
705     void* BackendPlatformUserData;
706     void* BackendRendererUserData;
707     void* BackendLanguageUserData;
708 	extern(C) nothrow 
709 	{
710 		//const char* (*GetClipboardTextFn)(void* user_data);
711 		alias da_getClipboardTextFn = const char* function(void* userdata);
712 		da_getClipboardTextFn getClipboardTextFn;
713 		//void (*SetClipboardTextFn)(void* user_data, const char* text);
714 		alias da_setClipboardTextFn = void function(void* userData, const char* text);
715 		da_setClipboardTextFn setClipboardTextFn;
716 		void* ClipboardUserData;
717 		//void (*ImeSetInputScreenPosFn)(int x, int y);
718 		alias da_imeSetInputScreenPosFn = void function(int x, int y);
719 		da_imeSetInputScreenPosFn imeSetInputScreenPosFn;
720 	}
721     void* ImeWindowHandle;
722     void* RenderDrawListsFnUnused;
723     ImVec2 MousePos;
724     bool[5] MouseDown;
725     float MouseWheel;
726     float MouseWheelH;
727     bool KeyCtrl;
728     bool KeyShift;
729     bool KeyAlt;
730     bool KeySuper;
731     bool[512] KeysDown;
732     float[ImGuiNavInput_COUNT] NavInputs;
733     bool WantCaptureMouse;
734     bool WantCaptureKeyboard;
735     bool WantTextInput;
736     bool WantSetMousePos;
737     bool WantSaveIniSettings;
738     bool NavActive;
739     bool NavVisible;
740     float Framerate;
741     int MetricsRenderVertices;
742     int MetricsRenderIndices;
743     int MetricsRenderWindows;
744     int MetricsActiveWindows;
745     int MetricsActiveAllocations;
746     ImVec2 MouseDelta;
747     ImVec2 MousePosPrev;
748     ImVec2[5] MouseClickedPos;
749     double[5] MouseClickedTime;
750     bool[5] MouseClicked;
751     bool[5] MouseDoubleClicked;
752     bool[5] MouseReleased;
753     bool[5] MouseDownOwned;
754     bool[5] MouseDownWasDoubleClick;
755     float[5] MouseDownDuration;
756     float[5] MouseDownDurationPrev;
757     ImVec2[5] MouseDragMaxDistanceAbs;
758     float[5] MouseDragMaxDistanceSqr;
759     float[512] KeysDownDuration;
760     float[512] KeysDownDurationPrev;
761     float[ImGuiNavInput_COUNT] NavInputsDownDuration;
762     float[ImGuiNavInput_COUNT] NavInputsDownDurationPrev;
763     ImVector_ImWchar InputQueueCharacters;
764 
765 	void addInputCharacter(ImWchar c) { ImGuiIO_AddInputCharacter(&this, c); }
766 	void addInputCharactersUTF8(const char* str) { ImGuiIO_AddInputCharactersUTF8(&this, str); }
767 	void addInputCharactersUTF8(string str) 
768 	{
769 		import std.string : toStringz;
770 		addInputCharactersUTF8(str.toStringz);
771 	}
772 }
773 
774 struct ImGuiInputTextCallbackData
775 {
776     ImGuiInputTextFlags EventFlag;
777     ImGuiInputTextFlags Flags;
778     void* UserData;
779     ImWchar EventChar;
780     ImGuiKey EventKey;
781     char* Buf;
782     int BufTextLen;
783     int BufSize;
784     bool BufDirty;
785     int CursorPos;
786     int SelectionStart;
787     int SelectionEnd;
788 }
789 
790 struct ImGuiSizeCallbackData
791 {
792     void* UserData;
793     ImVec2 Pos;
794     ImVec2 CurrentSize;
795     ImVec2 DesiredSize;
796 }
797 
798 struct ImGuiPayload
799 {
800     void* Data;
801     int DataSize;
802     ImGuiID SourceId;
803     ImGuiID SourceParentId;
804     int DataFrameCount;
805     char[32+1] DataType;
806     bool Preview;
807     bool Delivery;
808 }
809 
810 struct ImGuiOnceUponAFrame
811 {
812 	int RefFrame;
813 }
814 
815 struct ImGuiTextFilter
816 {
817     char[256] InputBuf;
818     ImVector_TextRange Filters;
819     int CountGrep;
820 }
821 
822 struct ImGuiTextBuffer
823 {
824     ImVector_char Buf;
825 }
826 
827 struct ImGuiStorage
828 {
829     ImVector_Pair Data;
830 }
831 
832 struct ImGuiListClipper
833 {
834     float StartPosY;
835     float ItemsHeight;
836     int ItemsCount, StepNo, DisplayStart, DisplayEnd;
837 }
838 
839 struct ImColor
840 {
841     ImVec4 Value;
842 }
843 
844 struct ImDrawCmd
845 {
846     uint ElemCount;
847     ImVec4 ClipRect;
848     ImTextureID TextureId;
849     ImDrawCallback UserCallback;
850     void* UserCallbackData;
851 }
852 
853 struct ImDrawVert
854 {
855     ImVec2 pos;
856     ImVec2 uv;
857     ImU32 col;
858 }
859 
860 struct ImDrawChannel
861 {
862     ImVector_ImDrawCmd CmdBuffer;
863     ImVector_ImDrawIdx IdxBuffer;
864 }
865 
866 enum
867 {
868     ImDrawCornerFlags_TopLeft = 1 << 0,
869     ImDrawCornerFlags_TopRight = 1 << 1,
870     ImDrawCornerFlags_BotLeft = 1 << 2,
871     ImDrawCornerFlags_BotRight = 1 << 3,
872     ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight,
873     ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight,
874     ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft,
875     ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight,
876     ImDrawCornerFlags_All = 0xF
877 }
878 
879 enum
880 {
881     ImDrawListFlags_None = 0,
882     ImDrawListFlags_AntiAliasedLines = 1 << 0,
883     ImDrawListFlags_AntiAliasedFill = 1 << 1
884 }
885 
886 struct ImDrawList
887 {
888     ImVector_ImDrawCmd CmdBuffer;
889     ImVector_ImDrawIdx IdxBuffer;
890     ImVector_ImDrawVert VtxBuffer;
891     ImDrawListFlags Flags;
892     const ImDrawListSharedData* _Data;
893     const char* _OwnerName;
894     uint _VtxCurrentIdx;
895     ImDrawVert* _VtxWritePtr;
896     ImDrawIdx* _IdxWritePtr;
897     ImVector_ImVec4 _ClipRectStack;
898     ImVector_ImTextureID _TextureIdStack;
899     ImVector_ImVec2 _Path;
900     int _ChannelsCurrent;
901     int _ChannelsCount;
902     ImVector_ImDrawChannel _Channels;
903 }
904 
905 struct ImDrawData
906 {
907     bool Valid;
908     ImDrawList** CmdLists;
909     int CmdListsCount;
910     int TotalIdxCount;
911     int TotalVtxCount;
912     ImVec2 DisplayPos;
913     ImVec2 DisplaySize;
914     ImVec2 FramebufferScale;
915 }
916 
917 struct ImFontConfig
918 {
919     void* FontData;
920     int FontDataSize;
921     bool FontDataOwnedByAtlas;
922     int FontNo;
923     float SizePixels;
924     int OversampleH;
925     int OversampleV;
926     bool PixelSnapH;
927     ImVec2 GlyphExtraSpacing;
928     ImVec2 GlyphOffset;
929     const ImWchar* GlyphRanges;
930     float GlyphMinAdvanceX;
931     float GlyphMaxAdvanceX;
932     bool MergeMode;
933     uint RasterizerFlags;
934     float RasterizerMultiply;
935     char[40] Name;
936     ImFont* DstFont;
937 }
938 
939 struct ImFontGlyph
940 {
941     ImWchar Codepoint;
942     float AdvanceX;
943     float X0, Y0, X1, Y1;
944     float U0, V0, U1, V1;
945 }
946 
947 struct ImFontGlyphRangesBuilder
948 {
949     ImVector_int UsedChars;
950 }
951 
952 enum
953 {
954     ImFontAtlasFlags_None = 0,
955     ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0,
956     ImFontAtlasFlags_NoMouseCursors = 1 << 1
957 }
958 
959 struct ImFontAtlas
960 {
961     bool Locked;
962     ImFontAtlasFlags Flags;
963     ImTextureID TexID;
964     int TexDesiredWidth;
965     int TexGlyphPadding;
966     ubyte* TexPixelsAlpha8;
967     uint* TexPixelsRGBA32;
968     int TexWidth;
969     int TexHeight;
970     ImVec2 TexUvScale;
971     ImVec2 TexUvWhitePixel;
972     ImVector_ImFontPtr Fonts;
973     ImVector_CustomRect CustomRects;
974     ImVector_ImFontConfig ConfigData;
975     int[1] CustomRectIds;
976 }
977 
978 struct ImFont
979 {
980     ImVector_float IndexAdvanceX;
981     float FallbackAdvanceX;
982     float FontSize;
983     ImVector_ImWchar IndexLookup;
984     ImVector_ImFontGlyph Glyphs;
985     const ImFontGlyph* FallbackGlyph;
986     ImVec2 DisplayOffset;
987     ImFontAtlas* ContainerAtlas;
988     const ImFontConfig* ConfigData;
989     short ConfigDataCount;
990     ImWchar FallbackChar;
991     float Scale;
992     float Ascent, Descent;
993     int MetricsTotalSurface;
994     bool DirtyLookupTables;
995 }
996 
997 struct TextRange
998 {
999 	const char* b;
1000 	const char* e;
1001 }
1002 
1003 struct Pair
1004 {
1005 	ImGuiID key;
1006 	union { int val_i; float val_f; void* val_p; };
1007 }
1008 
1009 struct CustomRect
1010 {
1011 	uint ID;
1012 	ushort Width, Height;
1013 	ushort X, Y;
1014 	float GlyphAdvanceX;
1015 	ImVec2 GlyphOffset;
1016 	ImFont* Font;
1017 }