Ylva And Malin
imgui.h
Go to the documentation of this file.
1 
2 // dear imgui, v1.62 WIP
3 // (headers)
4 
5 // See imgui.cpp file for documentation.
6 // Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code.
7 // Read 'Programmer guide' in imgui.cpp for notes on how to setup ImGui in your codebase.
8 // Get latest version at https://github.com/ocornut/imgui
9 
10 #pragma once
11 
12 // Configuration file (edit imconfig.h or define IMGUI_USER_CONFIG to set your own filename)
13 #ifdef IMGUI_USER_CONFIG
14 #include IMGUI_USER_CONFIG
15 #endif
16 #if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H)
17 #include "imconfig.h"
18 #endif
19 
20 #include <float.h> // FLT_MAX
21 #include <stdarg.h> // va_list
22 #include <stddef.h> // ptrdiff_t, NULL
23 #include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
24 
25 // Version
26 #define IMGUI_VERSION "1.62 WIP"
27 #define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert))
28 
29 // Define attributes of all API symbols declarations (e.g. for DLL under Windows)
30 #ifndef IMGUI_API
31 #define IMGUI_API
32 #endif
33 
34 // Helpers
35 #ifndef IM_ASSERT
36 #include <assert.h>
37 #define IM_ASSERT(_EXPR) assert(_EXPR)
38 #endif
39 #if defined(__clang__) || defined(__GNUC__)
40 #define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1))) // Apply printf-style warnings to user functions.
41 #define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
42 #else
43 #define IM_FMTARGS(FMT)
44 #define IM_FMTLIST(FMT)
45 #endif
46 #define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR))) // Size of a static C-style array. Don't use on pointers!
47 #define IM_OFFSETOF(_TYPE,_MEMBER) ((size_t)&(((_TYPE*)0)->_MEMBER)) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in modern C++.
48 
49 #if defined(__clang__)
50 #pragma clang diagnostic push
51 #pragma clang diagnostic ignored "-Wold-style-cast"
52 #endif
53 
54 // Forward declarations
55 struct ImDrawChannel; // Temporary storage for outputting drawing commands out of order, used by ImDrawList::ChannelsSplit()
56 struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call)
57 struct ImDrawData; // All draw command lists required to render the frame
58 struct ImDrawList; // A single draw command list (generally one per window)
59 struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself)
60 struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
61 struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
62 struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
63 struct ImFontConfig; // Configuration data when adding a font or merging fonts
64 struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*obsolete* please avoid using)
65 struct ImGuiIO; // Main configuration and I/O between your application and ImGui
66 struct ImGuiOnceUponAFrame; // Simple helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro
67 struct ImGuiStorage; // Simple custom key value storage
68 struct ImGuiStyle; // Runtime data for styling/colors
69 struct ImGuiTextFilter; // Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
70 struct ImGuiTextBuffer; // Text buffer for logging/accumulating text
71 struct ImGuiTextEditCallbackData; // Shared state of ImGui::InputText() when using custom ImGuiTextEditCallback (rare/advanced use)
72 struct ImGuiSizeCallbackData; // Structure used to constraint window size in custom ways when using custom ImGuiSizeCallback (rare/advanced use)
73 struct ImGuiListClipper; // Helper to manually clip large list of items
74 struct ImGuiPayload; // User data payload for drag and drop operations
75 struct ImGuiContext; // ImGui context (opaque)
76 #ifndef ImTextureID
77 typedef void* ImTextureID; // User data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp)
78 #endif
79 
80 // Typedefs and Enumerations (declared as int for compatibility with old C++ and to not pollute the top of this file)
81 typedef unsigned int ImGuiID; // Unique ID used by widgets (typically hashed from a stack of string)
82 typedef unsigned short ImWchar; // Character for keyboard input/display
83 typedef int ImGuiCol; // enum: a color identifier for styling // enum ImGuiCol_
84 typedef int ImGuiDataType; // enum: a primary data type // enum ImGuiDataType_
85 typedef int ImGuiDir; // enum: a cardinal direction // enum ImGuiDir_
86 typedef int ImGuiCond; // enum: a condition for Set*() // enum ImGuiCond_
87 typedef int ImGuiKey; // enum: a key identifier (ImGui-side enum) // enum ImGuiKey_
88 typedef int ImGuiNavInput; // enum: an input identifier for navigation // enum ImGuiNavInput_
89 typedef int ImGuiMouseCursor; // enum: a mouse cursor identifier // enum ImGuiMouseCursor_
90 typedef int ImGuiStyleVar; // enum: a variable identifier for styling // enum ImGuiStyleVar_
91 typedef int ImDrawCornerFlags; // flags: for ImDrawList::AddRect*() etc. // enum ImDrawCornerFlags_
92 typedef int ImDrawListFlags; // flags: for ImDrawList // enum ImDrawListFlags_
93 typedef int ImFontAtlasFlags; // flags: for ImFontAtlas // enum ImFontAtlasFlags_
94 typedef int ImGuiBackendFlags; // flags: for io.BackendFlags // enum ImGuiBackendFlags_
95 typedef int ImGuiColorEditFlags; // flags: for ColorEdit*(), ColorPicker*() // enum ImGuiColorEditFlags_
96 typedef int ImGuiColumnsFlags; // flags: for *Columns*() // enum ImGuiColumnsFlags_
97 typedef int ImGuiConfigFlags; // flags: for io.ConfigFlags // enum ImGuiConfigFlags_
98 typedef int ImGuiComboFlags; // flags: for BeginCombo() // enum ImGuiComboFlags_
99 typedef int ImGuiDragDropFlags; // flags: for *DragDrop*() // enum ImGuiDragDropFlags_
100 typedef int ImGuiFocusedFlags; // flags: for IsWindowFocused() // enum ImGuiFocusedFlags_
101 typedef int ImGuiHoveredFlags; // flags: for IsItemHovered() etc. // enum ImGuiHoveredFlags_
102 typedef int ImGuiInputTextFlags; // flags: for InputText*() // enum ImGuiInputTextFlags_
103 typedef int ImGuiSelectableFlags; // flags: for Selectable() // enum ImGuiSelectableFlags_
104 typedef int ImGuiTreeNodeFlags; // flags: for TreeNode*(),CollapsingHeader()// enum ImGuiTreeNodeFlags_
105 typedef int ImGuiWindowFlags; // flags: for Begin*() // enum ImGuiWindowFlags_
108 
109 // Scalar data types
110 typedef signed int ImS32; // 32-bit signed integer == int
111 typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors)
112 #if defined(_MSC_VER) && !defined(__clang__)
113 typedef signed __int64 ImS64; // 64-bit signed integer
114 typedef unsigned __int64 ImU64; // 64-bit unsigned integer
115 #else
116 typedef signed long long ImS64; // 64-bit signed integer
117 typedef unsigned long long ImU64; // 64-bit unsigned integer
118 #endif
119 
120 // 2d vector
121 struct ImVec2
122 {
123  float x, y;
124  ImVec2() { x = y = 0.0f; }
125  ImVec2(float _x, float _y) { x = _x; y = _y; }
126  float operator[] (size_t i) const { IM_ASSERT(i <= 1); return (&x)[i]; } // We very rarely use this [] operator, the assert overhead is fine.
127 #ifdef IM_VEC2_CLASS_EXTRA
128  IM_VEC2_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2.
129 #endif
130 };
131 
132 // 4d vector (often used to store floating-point colors)
133 struct ImVec4
134 {
135  float x, y, z, w;
136  ImVec4() { x = y = z = w = 0.0f; }
137  ImVec4(float _x, float _y, float _z, float _w) { x = _x; y = _y; z = _z; w = _w; }
138 #ifdef IM_VEC4_CLASS_EXTRA
139  IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4.
140 #endif
141 };
142 
143 // ImGui end-user API
144 // In a namespace so that user can add extra functions in your own separate file (please don't modify imgui.cpp/.h)
145 namespace ImGui
146 {
147  // Context creation and access
148  // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context.
149  // All those functions are not reliant on the current context.
150  IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
151  IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
154  IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert);
155 
156  // Main
159  IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame().
160  IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data. (Obsolete: optionally call io.RenderDrawListsFn if set. Nowadays, prefer calling your render function yourself.)
161  IMGUI_API ImDrawData* GetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render. (Obsolete: this used to be passed to your io.RenderDrawListsFn() function.)
162  IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead!
163 
164  // Demo, Debug, Information
165  IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
166  IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc.
167  IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
168  IMGUI_API bool ShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles.
169  IMGUI_API void ShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts.
170  IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
171  IMGUI_API const char* GetVersion(); // get a version string e.g. "1.23"
172 
173  // Styles
174  IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style (default)
175  IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style
176  IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font
177 
178  // Windows
179  // (Begin = push window to the stack and start appending to it. End = pop window from the stack. You may append multiple times to the same window during the same frame)
180  // Begin()/BeginChild() return false to indicate the window being collapsed or fully clipped, so you may early out and omit submitting anything to the window.
181  // You need to always call a matching End()/EndChild() for a Begin()/BeginChild() call, regardless of its return value (this is due to legacy reason and is inconsistent with BeginMenu/EndMenu, BeginPopup/EndPopup and other functions where the End call should only be called if the corresponding Begin function returned true.)
182  // Passing 'bool* p_open != NULL' shows a close widget in the upper-right corner of the window, which when clicking will set the boolean to false.
183  // Use child windows to introduce independent scrolling/clipping regions within a host window. Child windows can embed their own child.
184  IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
185  IMGUI_API void End();
186  IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0); // Begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400).
187  IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
188  IMGUI_API void EndChild();
189 
190  // Windows Utilities
193  IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
194  IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ!
195  IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the window, to append your own drawing primitives
196  IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList API)
197  IMGUI_API ImVec2 GetWindowSize(); // get current window size
198  IMGUI_API float GetWindowWidth(); // get current window width (shortcut for GetWindowSize().x)
199  IMGUI_API float GetWindowHeight(); // get current window height (shortcut for GetWindowSize().y)
200  IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
201  IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos()
203  IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates
204  IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
206 
207  IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc.
208  IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
209  IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints.
210  IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin()
211  IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
212  IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin()
213  IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily modify ImGuiCol_WindowBg/ChildBg/PopupBg.
214  IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
215  IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
216  IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
217  IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus().
218  IMGUI_API void SetWindowFontScale(float scale); // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows
219  IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position.
220  IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
221  IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state
222  IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
223 
224  // Windows Scrolling
225  IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()]
226  IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()]
227  IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X
228  IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y
229  IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()]
230  IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()]
231  IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
232  IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions.
233 
234  // Parameters stacks (shared)
235  IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
236  IMGUI_API void PopFont();
237  IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col);
238  IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
239  IMGUI_API void PopStyleColor(int count = 1);
240  IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val);
241  IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
242  IMGUI_API void PopStyleVar(int count = 1);
243  IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwise use GetColorU32() to get style color with style alpha baked in.
244  IMGUI_API ImFont* GetFont(); // get current font
245  IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied
246  IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
247  IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier
248  IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied
249  IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied
250 
251  // Parameters stacks (current window)
252  IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
253  IMGUI_API void PopItemWidth();
254  IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position
255  IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
256  IMGUI_API void PopTextWrapPos();
257  IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
259  IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
260  IMGUI_API void PopButtonRepeat();
261 
262  // Cursor / Layout
263  IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
264  IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally
265  IMGUI_API void NewLine(); // undo a SameLine()
266  IMGUI_API void Spacing(); // add vertical spacing
267  IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size
268  IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0
269  IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0
270  IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
271  IMGUI_API void EndGroup();
272  IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position
273  IMGUI_API float GetCursorPosX(); // "
274  IMGUI_API float GetCursorPosY(); // "
275  IMGUI_API void SetCursorPos(const ImVec2& local_pos); // "
276  IMGUI_API void SetCursorPosX(float x); // "
277  IMGUI_API void SetCursorPosY(float y); // "
278  IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position
279  IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API)
280  IMGUI_API void SetCursorScreenPos(const ImVec2& screen_pos); // cursor position in absolute screen coordinates [0..io.DisplaySize]
281  IMGUI_API void AlignTextToFramePadding(); // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item)
282  IMGUI_API float GetTextLineHeight(); // ~ FontSize
283  IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text)
284  IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2
285  IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets)
286 
287  // ID stack/scopes
288  // Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most
289  // likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
290  // You can also use the "##foobar" syntax within widget label to distinguish them from each others.
291  // In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID,
292  // whereas "str_id" denote a string that is only used as an ID and not aimed to be displayed.
293  IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack!
294  IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end);
295  IMGUI_API void PushID(const void* ptr_id);
296  IMGUI_API void PushID(int int_id);
297  IMGUI_API void PopID();
298  IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
299  IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
300  IMGUI_API ImGuiID GetID(const void* ptr_id);
301 
302  // Widgets: Text
303  IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
304  IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text
305  IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
306  IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
307  IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
308  IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
309  IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1);
310  IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
311  IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1);
312  IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
313  IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2);
314  IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text()
315  IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1);
316 
317  // Widgets: Main
318  IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
319  IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
320  IMGUI_API bool ArrowButton(const char* str_id, ImGuiDir dir);
321  IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
322  IMGUI_API void Image(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));
323  IMGUI_API bool ImageButton(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)); // <0 frame_padding uses default frame padding settings. 0 for no padding
324  IMGUI_API bool Checkbox(const char* label, bool* v);
325  IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
326  IMGUI_API bool RadioButton(const char* label, bool active);
327  IMGUI_API bool RadioButton(const char* label, int* v, int v_button);
328  IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
329  IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
330  IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float));
331  IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
332  IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL);
333  IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
334 
335  // Widgets: Combo Box
336  // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it.
337  // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
338  IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
339  IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true!
340  IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1);
341  IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0"
342  IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1);
343 
344  // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds)
345  // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
346  // Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
347  // Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision).
348  IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound
349  IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
350  IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
351  IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
352  IMGUI_API bool DragFloatRange2(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* format = "%.3f", const char* format_max = NULL, float power = 1.0f);
353  IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d"); // If v_min >= v_max we have no bound
354  IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
355  IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
356  IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
357  IMGUI_API bool DragIntRange2(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* format = "%d", const char* format_max = NULL);
358  IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* v, float v_speed, const void* v_min = NULL, const void* v_max = NULL, const char* format = NULL, float power = 1.0f);
359  IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* v, int components, float v_speed, const void* v_min = NULL, const void* v_max = NULL, const char* format = NULL, float power = 1.0f);
360 
361  // Widgets: Input with Keyboard
362  IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL);
363  IMGUI_API bool InputTextMultiline(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);
364  IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
365  IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
366  IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
367  IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags extra_flags = 0);
368  IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0);
369  IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0);
370  IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0);
371  IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0);
372  IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0f, double step_fast = 0.0f, const char* format = "%.6f", ImGuiInputTextFlags extra_flags = 0);
373  IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* v, const void* step = NULL, const void* step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags extra_flags = 0);
374  IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* step = NULL, const void* step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags extra_flags = 0);
375 
376  // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds)
377  // Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
378  IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for power curve sliders
379  IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
380  IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
381  IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
382  IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f);
383  IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d");
384  IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d");
385  IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d");
386  IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d");
387  IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* v, const void* v_min, const void* v_max, const char* format = NULL, float power = 1.0f);
388  IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format = NULL, float power = 1.0f);
389  IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
390  IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d");
391  IMGUI_API bool VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* v, const void* v_min, const void* v_max, const char* format = NULL, float power = 1.0f);
392 
393  // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
394  // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
395  IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
396  IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
397  IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
398  IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
399  IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed.
400  IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
401 
402  // Widgets: Trees
403  IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop().
404  IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
405  IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // "
406  IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
407  IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
408  IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
409  IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
410  IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
411  IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
412  IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
413  IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose
414  IMGUI_API void TreePush(const void* ptr_id = NULL); // "
415  IMGUI_API void TreePop(); // ~ Unindent()+PopId()
416  IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing()
417  IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
418  IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
419  IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
420  IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
421 
422  // Widgets: Selectable / Lists
423  IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height
424  IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
425  IMGUI_API bool ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1);
426  IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
427  IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. if the function return true, you can output elements then call ListBoxFooter() afterwards.
428  IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // "
429  IMGUI_API void ListBoxFooter(); // terminate the scrolling region. only call ListBoxFooter() if ListBoxHeader() returned true!
430 
431  // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace)
432  IMGUI_API void Value(const char* prefix, bool b);
433  IMGUI_API void Value(const char* prefix, int v);
434  IMGUI_API void Value(const char* prefix, unsigned int v);
435  IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
436 
437  // Tooltips
438  IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip().
439  IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
440  IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents).
441  IMGUI_API void EndTooltip();
442 
443  // Menus
444  IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar.
445  IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
446  IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
447  IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true!
448  IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true!
449  IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true!
450  IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment
451  IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
452 
453  // Popups
454  IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
455  IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true!
456  IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp!
457  IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window.
458  IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows).
459  IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside)
460  IMGUI_API void EndPopup(); // only call EndPopup() if BeginPopupXXX() returns true!
461  IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened.
462  IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open
463  IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
464 
465  // Columns
466  // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking.
467  IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
468  IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
469  IMGUI_API int GetColumnIndex(); // get current column index
470  IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column
471  IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column
472  IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f
473  IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
475 
476  // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging.
477  IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty
478  IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file
479  IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard
480  IMGUI_API void LogFinish(); // stop logging (close file, etc.)
481  IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
482  IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed)
483 
484  // Drag and Drop
485  // [BETA API] Missing Demo code. API may evolve.
486  IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource()
487  IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
488  IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true!
489  IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
490  IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
491  IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
492 
493  // Clipping
494  IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
495  IMGUI_API void PopClipRect();
496 
497  // Focus, Activation
498  // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged)
499  IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window. Please use instead of "if (IsWindowAppearing()) SetScrollHere()" to signify "default item".
500  IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
501 
502  // Utilities
503  IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options.
504  IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
505  IMGUI_API bool IsItemFocused(); // is the last item focused for keyboard/gamepad navigation?
506  IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on)
507  IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.)
509  IMGUI_API bool IsAnyItemActive();
511  IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space
513  IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space
514  IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
515  IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
516  IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
517  IMGUI_API float GetTime();
518  IMGUI_API int GetFrameCount();
519  IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text
520  IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances
521  IMGUI_API const char* GetStyleColorName(ImGuiCol idx);
522  IMGUI_API void SetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it)
524  IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
525  IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can.
526 
527  IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
528  IMGUI_API void EndChildFrame(); // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window)
529 
532  IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v);
533  IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
534 
535  // Inputs
536  IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
537  IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeysDown[]. Use your own indices/enums according to how your backend/engine stored them into io.KeysDown[]!
538  IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate
539  IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down)..
540  IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate
541  IMGUI_API bool IsMouseDown(int button); // is mouse button held
542  IMGUI_API bool IsAnyMouseDown(); // is any mouse button held
543  IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down)
544  IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
545  IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down)
546  IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
547  IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup.
548  IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); //
549  IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
550  IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse position at the time of opening popup we have BeginPopup() into
551  IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold
552  IMGUI_API void ResetMouseDragDelta(int button = 0); //
553  IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
554  IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type
555  IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered.
556  IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle).
557 
558  // Clipboard Utilities (also see the LogToClipboard() function to capture or output text data to the clipboard)
559  IMGUI_API const char* GetClipboardText();
560  IMGUI_API void SetClipboardText(const char* text);
561 
562  // Settings/.Ini Utilities
563  // The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
564  // Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
565  IMGUI_API void LoadIniSettingsFromDisk(const char* ini_filename); // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename).
566  IMGUI_API void LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source.
567  IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename);
568  IMGUI_API const char* SaveIniSettingsToMemory(size_t* out_ini_size = NULL); // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings.
569 
570  // Memory Utilities
571  // All those functions are not reliant on the current context.
572  // If you reload the contents of imgui.cpp at runtime, you may need to call SetCurrentContext() + SetAllocatorFunctions() again.
573  IMGUI_API void SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void(*free_func)(void* ptr, void* user_data), void* user_data = NULL);
574  IMGUI_API void* MemAlloc(size_t size);
575  IMGUI_API void MemFree(void* ptr);
576 
577 } // namespace ImGui
578 
579 // Flags for ImGui::Begin()
581 {
582  ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar
583  ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip
584  ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window
585  ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically)
586  ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
587  ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it
588  ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame
589  //ImGuiWindowFlags_ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders).
590  ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file
591  ImGuiWindowFlags_NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through.
592  ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar
593  ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
594  ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state
595  ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus)
596  ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y)
597  ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
598  ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
599  ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // [BETA] Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui.
600  ImGuiWindowFlags_NoNavInputs = 1 << 18, // No gamepad/keyboard navigation within the window
601  ImGuiWindowFlags_NoNavFocus = 1 << 19, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
603 
604  // [Internal]
605  ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!)
606  ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild()
607  ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip()
608  ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup()
609  ImGuiWindowFlags_Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal()
610  ImGuiWindowFlags_ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu()
611 };
612 
613 // Flags for ImGui::InputText()
615 {
616  ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/
617  ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef
618  ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z
619  ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs
620  ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus
621  ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified)
622  ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling)
623  ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling)
624  ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer.
625  ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character.
626  ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field
627  ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter).
628  ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally
629  ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode
630  ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
631  ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*'
632  ImGuiInputTextFlags_NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID().
633  ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input)
634  // [Internal]
635  ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline()
636 };
637 
638 // Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
640 {
641  ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected
642  ImGuiTreeNodeFlags_Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader)
643  ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one
644  ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
645  ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
646  ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open
647  ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node
648  ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
649  ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes).
650  ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow
651  ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
652  //ImGuITreeNodeFlags_SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed
653  //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
654  ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
656 
657  // Obsolete names (will be removed)
658 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
660 #endif
661 };
662 
663 // Flags for ImGui::Selectable()
665 {
666  ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window
667  ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column)
668  ImGuiSelectableFlags_AllowDoubleClick = 1 << 2 // Generate press events on double clicks too
669 };
670 
671 // Flags for ImGui::BeginCombo()
673 {
674  ImGuiComboFlags_PopupAlignLeft = 1 << 0, // Align the popup toward the left by default
675  ImGuiComboFlags_HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo()
676  ImGuiComboFlags_HeightRegular = 1 << 2, // Max ~8 items visible (default)
677  ImGuiComboFlags_HeightLarge = 1 << 3, // Max ~20 items visible
678  ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible
679  ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow button
680  ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow button
682 };
683 
684 // Flags for ImGui::IsWindowFocused()
686 {
687  ImGuiFocusedFlags_ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused
688  ImGuiFocusedFlags_RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy)
689  ImGuiFocusedFlags_AnyWindow = 1 << 2, // IsWindowFocused(): Return true if any window is focused
691 };
692 
693 // Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
694 // Note: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that. Please read the FAQ!
696 {
697  ImGuiHoveredFlags_Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
698  ImGuiHoveredFlags_ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered
699  ImGuiHoveredFlags_RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy)
700  ImGuiHoveredFlags_AnyWindow = 1 << 2, // IsWindowHovered() only: Return true if any window is hovered
701  ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 3, // Return true even if a popup window is normally blocking access to this item/window
702  //ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 4, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
703  ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 5, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
704  ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6, // Return true even if the position is overlapped by another window
707 };
708 
709 // Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload()
711 {
712  // BeginDragDropSource() flags
713  ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior.
714  ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item.
715  ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item.
716  ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit.
717  ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
718  // AcceptDragDropPayload() flags
719  ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered.
720  ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target.
722 };
723 
724 // Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui.
725 #define IMGUI_PAYLOAD_TYPE_COLOR_3F "_COL3F" // float[3]: Standard type for colors, without alpha. User code may use this type.
726 #define IMGUI_PAYLOAD_TYPE_COLOR_4F "_COL4F" // float[4]: Standard type for colors. User code may use this type.
727 
728 // A primary data type
730 {
732  ImGuiDataType_U32, // unsigned int
733  ImGuiDataType_S64, // long long, __int64
734  ImGuiDataType_U64, // unsigned long long, unsigned __int64
738 };
739 
740 // A cardinal direction
742 {
749 };
750 
751 // User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
753 {
769  ImGuiKey_A, // for text edit CTRL+A: select all
770  ImGuiKey_C, // for text edit CTRL+C: copy
771  ImGuiKey_V, // for text edit CTRL+V: paste
772  ImGuiKey_X, // for text edit CTRL+X: cut
773  ImGuiKey_Y, // for text edit CTRL+Y: redo
774  ImGuiKey_Z, // for text edit CTRL+Z: undo
776 };
777 
778 // [BETA] Gamepad/Keyboard directional navigation
779 // Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
780 // Gamepad: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Back-end: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame().
781 // Read instructions in imgui.cpp for more details. Download PNG/PSD at goo.gl/9LgVZW.
783 {
784  // Gamepad Mapping
785  ImGuiNavInput_Activate, // activate / open / toggle / tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard)
786  ImGuiNavInput_Cancel, // cancel / close / exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard)
787  ImGuiNavInput_Input, // text input / on-screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard)
788  ImGuiNavInput_Menu, // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard)
789  ImGuiNavInput_DpadLeft, // move / tweak / resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard)
793  ImGuiNavInput_LStickLeft, // scroll / move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down
797  ImGuiNavInput_FocusPrev, // next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
798  ImGuiNavInput_FocusNext, // prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
799  ImGuiNavInput_TweakSlow, // slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
800  ImGuiNavInput_TweakFast, // faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
801 
802  // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them.
803  // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from io.KeysDown[] instead of io.NavInputs[].
804  ImGuiNavInput_KeyMenu_, // toggle menu // = io.KeyAlt
805  ImGuiNavInput_KeyLeft_, // move left // = Arrow keys
806  ImGuiNavInput_KeyRight_, // move right
811 };
812 
813 // Configuration flags stored in io.ConfigFlags. Set by user/application.
815 {
816  ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[].
817  ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad.
818  ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth.
819  ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag with io.NavActive is set.
820  ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information back-end
821  ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility.
822 
823  // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core ImGui)
824  ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware.
825  ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse.
826 };
827 
828 // Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end.
830 {
831  ImGuiBackendFlags_HasGamepad = 1 << 0, // Back-end supports and has a connected gamepad.
832  ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Back-end supports reading GetMouseCursor() to change the OS cursor shape.
833  ImGuiBackendFlags_HasSetMousePos = 1 << 2 // Back-end supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
834 };
835 
836 // Enumeration for PushStyleColor() / PopStyleColor()
838 {
841  ImGuiCol_WindowBg, // Background of normal windows
842  ImGuiCol_ChildBg, // Background of child windows
843  ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows
846  ImGuiCol_FrameBg, // Background of checkbox, radio button, plot, slider, text input
877  ImGuiCol_ModalWindowDarkening, // Darken/colorize entire screen behind a modal window, when one is active
879  ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item
880  ImGuiCol_NavWindowingHighlight, // Gamepad/keyboard: when holding NavMenu to focus/move/resize windows
882 
883  // Obsolete names (will be removed)
884 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
886  //ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered, // [unused since 1.60+] the close button now uses regular button colors.
887  //ImGuiCol_ComboBg, // [unused since 1.53+] ComboBg has been merged with PopupBg, so a redirect isn't accurate.
888 #endif
889 };
890 
891 // Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
892 // NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly.
893 // NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
895 {
896  // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
897  ImGuiStyleVar_Alpha, // float Alpha
898  ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding
899  ImGuiStyleVar_WindowRounding, // float WindowRounding
900  ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize
901  ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize
902  ImGuiStyleVar_WindowTitleAlign, // ImVec2 WindowTitleAlign
903  ImGuiStyleVar_ChildRounding, // float ChildRounding
904  ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize
905  ImGuiStyleVar_PopupRounding, // float PopupRounding
906  ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize
907  ImGuiStyleVar_FramePadding, // ImVec2 FramePadding
908  ImGuiStyleVar_FrameRounding, // float FrameRounding
909  ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize
910  ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing
911  ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing
912  ImGuiStyleVar_IndentSpacing, // float IndentSpacing
913  ImGuiStyleVar_ScrollbarSize, // float ScrollbarSize
914  ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding
915  ImGuiStyleVar_GrabMinSize, // float GrabMinSize
916  ImGuiStyleVar_GrabRounding, // float GrabRounding
917  ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
919 
920  // Obsolete names (will be removed)
921 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
923 #endif
924 };
925 
926 // Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
928 {
929  ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer).
930  ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square.
931  ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
932  ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs)
933  ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square).
934  ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
935  ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
936  ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead.
937  ImGuiColorEditFlags_NoDragDrop = 1 << 9, // // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source.
938 
939  // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup.
940  ImGuiColorEditFlags_AlphaBar = 1 << 16, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
941  ImGuiColorEditFlags_AlphaPreview = 1 << 17, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
942  ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
943  ImGuiColorEditFlags_HDR = 1 << 19, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
944  ImGuiColorEditFlags_RGB = 1 << 20, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX.
945  ImGuiColorEditFlags_HSV = 1 << 21, // [Inputs] // "
946  ImGuiColorEditFlags_HEX = 1 << 22, // [Inputs] // "
947  ImGuiColorEditFlags_Uint8 = 1 << 23, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
948  ImGuiColorEditFlags_Float = 1 << 24, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
949  ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value.
950  ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value.
951 
952  // [Internal] Masks
957 };
958 
959 // Enumeration for GetMouseCursor()
960 // User code may request binding to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here
962 {
965  ImGuiMouseCursor_TextInput, // When hovering over InputText, etc.
966  ImGuiMouseCursor_ResizeAll, // Unused by imgui functions
967  ImGuiMouseCursor_ResizeNS, // When hovering over an horizontal border
968  ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column
969  ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window
970  ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window
972 
973  // Obsolete names (will be removed)
974 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
976 #endif
977 };
978 
979 // Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
980 // Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
982 {
983  ImGuiCond_Always = 1 << 0, // Set the variable
984  ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed)
985  ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file)
986  ImGuiCond_Appearing = 1 << 3 // Set the variable if the object/window is appearing after being hidden/inactive (or the first time)
987 
988  // Obsolete names (will be removed)
989 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
991 #endif
992 };
993 
994 // You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame().
995 // During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values, and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors.
997 {
998  float Alpha; // Global alpha applies to everything in ImGui.
999  ImVec2 WindowPadding; // Padding within a window.
1000  float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows.
1001  float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
1002  ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints().
1003  ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
1004  float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
1005  float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
1006  float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
1007  float PopupBorderSize; // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
1008  ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets).
1009  float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
1010  float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
1011  ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines.
1012  ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
1013  ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
1014  float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
1015  float ColumnsMinSpacing; // Minimum horizontal spacing between two columns.
1016  float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar.
1017  float ScrollbarRounding; // Radius of grab corners for scrollbar.
1018  float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar.
1019  float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
1020  ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered.
1021  ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows.
1022  ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
1023  float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
1024  bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU.
1025  bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
1026  float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
1028 
1030  IMGUI_API void ScaleAllSizes(float scale_factor);
1031 };
1032 
1033 // This is where your app communicate with ImGui. Access via ImGui::GetIO().
1034 // Read 'Programmer guide' section in .cpp file for general usage.
1035 struct ImGuiIO
1036 {
1037  //------------------------------------------------------------------
1038  // Settings (fill once) // Default value:
1039  //------------------------------------------------------------------
1040 
1041  ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
1042  ImGuiBackendFlags BackendFlags; // = 0 // Set ImGuiBackendFlags_ enum. Set by imgui_impl_xxx files or custom back-end to communicate features supported by the back-end.
1043  ImVec2 DisplaySize; // <unset> // Display size, in pixels. For clamping windows positions.
1044  float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds.
1045  float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds.
1046  const char* IniFilename; // = "imgui.ini" // Path to .ini file. Set NULL to disable automatic .ini loading/saving, if e.g. you want to manually load/save from memory.
1047  const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
1048  float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds.
1049  float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels.
1050  float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging.
1051  int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state.
1052  float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
1053  float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
1054  void* UserData; // = NULL // Store your own data for retrieval by callbacks.
1055 
1056  ImFontAtlas* Fonts; // <auto> // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array.
1057  float FontGlobalScale; // = 1.0f // Global scale all fonts
1058  bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel.
1059  ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
1060  ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui.
1061  ImVec2 DisplayVisibleMin; // <unset> (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area.
1062  ImVec2 DisplayVisibleMax; // <unset> (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize
1063 
1064  // Advanced/subtle behaviors
1065  bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl
1066  bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying.
1067 
1068  //------------------------------------------------------------------
1069  // Settings (User Functions)
1070  //------------------------------------------------------------------
1071 
1072  // Optional: access OS clipboard
1073  // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
1074  const char* (*GetClipboardTextFn)(void* user_data);
1075  void (*SetClipboardTextFn)(void* user_data, const char* text);
1077 
1078  // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows)
1079  // (default to use native imm32 api on Windows)
1080  void (*ImeSetInputScreenPosFn)(int x, int y);
1081  void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning.
1082 
1083 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1084  // [OBSOLETE] Rendering function, will be automatically called in Render(). Please call your rendering function yourself now!
1085  // You can obtain the ImDrawData* by calling ImGui::GetDrawData() after Render(). See example applications if you are unsure of how to implement this.
1086  void (*RenderDrawListsFn)(ImDrawData* data);
1087 #else
1088  // This is only here to keep ImGuiIO the same size, so that IMGUI_DISABLE_OBSOLETE_FUNCTIONS can exceptionally be used outside of imconfig.h.
1089  void* RenderDrawListsFnDummy;
1090 #endif
1091 
1092  //------------------------------------------------------------------
1093  // Input - Fill before calling NewFrame()
1094  //------------------------------------------------------------------
1095 
1096  ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.)
1097  bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
1098  float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text.
1099  float MouseWheelH; // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all back-ends.
1100  bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor).
1101  bool KeyCtrl; // Keyboard modifier pressed: Control
1102  bool KeyShift; // Keyboard modifier pressed: Shift
1103  bool KeyAlt; // Keyboard modifier pressed: Alt
1104  bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows
1105  bool KeysDown[512]; // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys).
1106  ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper.
1107  float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs (keyboard keys will be auto-mapped and be written here by ImGui::NewFrame, all values will be cleared back to zero in ImGui::EndFrame)
1108 
1109  // Functions
1110  IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[]
1111  IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string
1112  inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually
1113 
1114  //------------------------------------------------------------------
1115  // Output - Retrieve after calling NewFrame()
1116  //------------------------------------------------------------------
1117 
1118  bool WantCaptureMouse; // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
1119  bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
1120  bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
1121  bool WantSetMousePos; // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
1122  bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. IMPORTANT: You need to clear io.WantSaveIniSettings yourself.
1123  bool NavActive; // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
1124  bool NavVisible; // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
1125  float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
1126  int MetricsRenderVertices; // Vertices output during last call to Render()
1127  int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
1128  int MetricsActiveWindows; // Number of visible root windows (exclude child windows)
1129  ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
1130 
1131  //------------------------------------------------------------------
1132  // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed!
1133  //------------------------------------------------------------------
1134 
1135  ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame())
1136  ImVec2 MouseClickedPos[5]; // Position at time of clicking
1137  float MouseClickedTime[5]; // Time of last click (used to figure out double-click)
1138  bool MouseClicked[5]; // Mouse button went from !Down to Down
1139  bool MouseDoubleClicked[5]; // Has mouse button been double-clicked?
1140  bool MouseReleased[5]; // Mouse button went from Down to !Down
1141  bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds.
1142  float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
1143  float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
1144  ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
1145  float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point
1146  float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed)
1147  float KeysDownDurationPrev[512]; // Previous duration the key has been down
1148  float NavInputsDownDuration[ImGuiNavInput_COUNT];
1149  float NavInputsDownDurationPrev[ImGuiNavInput_COUNT];
1150 
1151  IMGUI_API ImGuiIO();
1152 };
1153 
1154 //-----------------------------------------------------------------------------
1155 // Obsolete functions (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details)
1156 //-----------------------------------------------------------------------------
1157 
1158 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1159 namespace ImGui
1160 {
1161  // OBSOLETED in 1.61 (from Apr 2018)
1162  bool InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags = 0); // Use the 'const char* format' version instead of 'decimal_precision'!
1163  bool InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags extra_flags = 0);
1164  bool InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags extra_flags = 0);
1165  bool InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags extra_flags = 0);
1166  // OBSOLETED in 1.60 (from Dec 2017)
1167  static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); }
1168  static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); }
1169  static inline ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = 0.f) { (void)on_edge; (void)outward; IM_ASSERT(0); return pos; }
1170  // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
1171  static inline void ShowTestWindow() { return ShowDemoWindow(); }
1172  static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); }
1173  static inline bool IsRootWindowOrAnyChildFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); }
1174  static inline void SetNextWindowContentWidth(float w) { SetNextWindowContentSize(ImVec2(w, 0.0f)); }
1175  static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); }
1176  // OBSOLETED in 1.52 (between Aug 2017 and Oct 2017)
1177  bool Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override = -1.0f, ImGuiWindowFlags flags = 0); // Use SetNextWindowSize(size, ImGuiCond_FirstUseEver) + SetNextWindowBgAlpha() instead.
1178  static inline bool IsRootWindowOrAnyChildHovered() { return IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows); }
1179  static inline void AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); }
1180  static inline void SetNextWindowPosCenter(ImGuiCond c=0) { ImGuiIO& io = GetIO(); SetNextWindowPos(ImVec2(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f), c, ImVec2(0.5f, 0.5f)); }
1181  // OBSOLETED in 1.51 (between Jun 2017 and Aug 2017)
1182  static inline bool IsItemHoveredRect() { return IsItemHovered(ImGuiHoveredFlags_RectOnly); }
1183  static inline bool IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // This was misleading and partly broken. You probably want to use the ImGui::GetIO().WantCaptureMouse flag instead.
1184  static inline bool IsMouseHoveringAnyWindow() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); }
1185  static inline bool IsMouseHoveringWindow() { return IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem); }
1186  // OBSOLETED IN 1.49 (between Apr 2016 and May 2016)
1187  static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1 << 5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); }
1188 }
1189 #endif
1190 
1191 //-----------------------------------------------------------------------------
1192 // Helpers
1193 //-----------------------------------------------------------------------------
1194 
1195 // Helper: Lightweight std::vector<> like class to avoid dragging dependencies (also: Windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug).
1196 // *Important* Our implementation does NOT call C++ constructors/destructors. This is intentional, we do not require it but you have to be mindful of that. Do _not_ use this class as a std::vector replacement in your code!
1197 template<typename T>
1199 {
1200 public:
1201  int Size;
1203  T* Data;
1204 
1205  typedef T value_type;
1206  typedef value_type* iterator;
1207  typedef const value_type* const_iterator;
1208 
1209  inline ImVector() { Size = Capacity = 0; Data = NULL; }
1210  inline ~ImVector() { if (Data) ImGui::MemFree(Data); }
1211  inline ImVector(const ImVector<T>& src) { Size = Capacity = 0; Data = NULL; operator=(src); }
1212  inline ImVector& operator=(const ImVector<T>& src) { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(value_type)); return *this; }
1213 
1214  inline bool empty() const { return Size == 0; }
1215  inline int size() const { return Size; }
1216  inline int capacity() const { return Capacity; }
1217  inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; }
1218  inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; }
1219 
1220  inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } }
1221  inline iterator begin() { return Data; }
1222  inline const_iterator begin() const { return Data; }
1223  inline iterator end() { return Data + Size; }
1224  inline const_iterator end() const { return Data + Size; }
1225  inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; }
1226  inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; }
1227  inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; }
1228  inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; }
1229  inline void swap(ImVector<value_type>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
1230 
1231  inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; }
1232  inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
1233  inline void resize(int new_size,const value_type& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; }
1234  inline void reserve(int new_capacity)
1235  {
1236  if (new_capacity <= Capacity)
1237  return;
1238  value_type* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(value_type));
1239  if (Data)
1240  {
1241  memcpy(new_data, Data, (size_t)Size * sizeof(value_type));
1242  ImGui::MemFree(Data);
1243  }
1244  Data = new_data;
1245  Capacity = new_capacity;
1246  }
1247 
1248  // NB: It is forbidden to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden.
1249  inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
1250  inline void pop_back() { IM_ASSERT(Size > 0); Size--; }
1251  inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); }
1252  inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; }
1253  inline iterator erase(const_iterator it, const_iterator it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(value_type)); Size -= (int)count; return Data + off; }
1254  inline iterator erase_unsorted(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(value_type)); Size--; return Data + off; }
1255  inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
1256  inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
1257 };
1258 
1259 // Helper: IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE() macros to call MemAlloc + Placement New, Placement Delete + MemFree
1260 // We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
1261 // Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
1262 struct ImNewDummy {};
1263 inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; }
1264 inline void operator delete(void*, ImNewDummy, void*) {} // This is only required so we can use the symetrical new()
1265 #define IM_PLACEMENT_NEW(_PTR) new(ImNewDummy(), _PTR)
1266 #define IM_NEW(_TYPE) new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
1267 template<typename T> void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } }
1268 
1269 // Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
1270 // Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame");
1272 {
1273  ImGuiOnceUponAFrame() { RefFrame = -1; }
1274  mutable int RefFrame;
1275  operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
1276 };
1277 
1278 // Helper: Macro for ImGuiOnceUponAFrame. Attention: The macro expands into 2 statement so make sure you don't use it within e.g. an if() statement without curly braces.
1279 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS // Will obsolete
1280 #define IMGUI_ONCE_UPON_A_FRAME static ImGuiOnceUponAFrame imgui_oaf; if (imgui_oaf)
1281 #endif
1282 
1283 // Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
1285 {
1286  struct TextRange
1287  {
1288  const char* b;
1289  const char* e;
1290 
1291  TextRange() { b = e = NULL; }
1292  TextRange(const char* _b, const char* _e) { b = _b; e = _e; }
1293  const char* begin() const { return b; }
1294  const char* end() const { return e; }
1295  bool empty() const { return b == e; }
1296  char front() const { return *b; }
1297  static bool is_blank(char c) { return c == ' ' || c == '\t'; }
1298  void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; }
1299  IMGUI_API void split(char separator, ImVector<TextRange>& out);
1300  };
1301 
1302  char InputBuf[256];
1305 
1306  IMGUI_API ImGuiTextFilter(const char* default_filter = "");
1307  IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
1308  IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
1309  IMGUI_API void Build();
1310  void Clear() { InputBuf[0] = 0; Build(); }
1311  bool IsActive() const { return !Filters.empty(); }
1312 };
1313 
1314 // Helper: Text buffer for logging/accumulating text
1316 {
1318 
1320  inline char operator[](int i) { return Buf.Data[i]; }
1321  const char* begin() const { return &Buf.front(); }
1322  const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator
1323  int size() const { return Buf.Size - 1; }
1324  bool empty() { return Buf.Size <= 1; }
1325  void clear() { Buf.clear(); Buf.push_back(0); }
1326  void reserve(int capacity) { Buf.reserve(capacity); }
1327  const char* c_str() const { return Buf.Data; }
1328  IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2);
1329  IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
1330 };
1331 
1332 // Helper: Simple Key->value storage
1333 // Typically you don't have to worry about this since a storage is held within each Window.
1334 // We use it to e.g. store collapse state for a tree (Int 0/1)
1335 // This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame)
1336 // You can use it as custom user storage for temporary values. Declare your own storage if, for example:
1337 // - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
1338 // - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
1339 // Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
1341 {
1342  struct Pair
1343  {
1345  union { int val_i; float val_f; void* val_p; };
1346  Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
1347  Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; }
1348  Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; }
1349  };
1351 
1352  // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
1353  // - Set***() functions find pair, insertion on demand if missing.
1354  // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair.
1355  void Clear() { Data.clear(); }
1356  IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const;
1357  IMGUI_API void SetInt(ImGuiID key, int val);
1358  IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const;
1359  IMGUI_API void SetBool(ImGuiID key, bool val);
1360  IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const;
1361  IMGUI_API void SetFloat(ImGuiID key, float val);
1362  IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL
1363  IMGUI_API void SetVoidPtr(ImGuiID key, void* val);
1364 
1365  // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set.
1366  // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
1367  // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct)
1368  // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar;
1369  IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0);
1370  IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false);
1371  IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f);
1372  IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL);
1373 
1374  // Use on your own storage if you know only integer are being stored (open/close all tree nodes)
1375  IMGUI_API void SetAllInt(int val);
1376 
1377  // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
1378  IMGUI_API void BuildSortByKey();
1379 };
1380 
1381 // Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered.
1383 {
1384  ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only
1385  ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only
1386  void* UserData; // What user passed to InputText() // Read-only
1387  bool ReadOnly; // Read-only mode // Read-only
1388 
1389  // CharFilter event:
1390  ImWchar EventChar; // Character input // Read-write (replace character or set to zero)
1391 
1392  // Completion,History,Always events:
1393  // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true.
1394  ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only
1395  char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer)
1396  int BufTextLen; // Current text length in bytes // Read-write
1397  int BufSize; // Maximum text length in bytes // Read-only
1398  bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write
1399  int CursorPos; // // Read-write
1400  int SelectionStart; // // Read-write (== to SelectionEnd when no selection)
1401  int SelectionEnd; // // Read-write
1402 
1403  // NB: Helper functions for text manipulation. Calling those function loses selection.
1404  IMGUI_API void DeleteChars(int pos, int bytes_count);
1405  IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
1406  bool HasSelection() const { return SelectionStart != SelectionEnd; }
1407 };
1408 
1409 // Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin().
1410 // NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough.
1412 {
1413  void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints()
1414  ImVec2 Pos; // Read-only. Window position, for reference.
1415  ImVec2 CurrentSize; // Read-only. Current window size.
1416  ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
1417 };
1418 
1419 // Data payload for Drag and Drop operations
1421 {
1422  // Members
1423  void* Data; // Data (copied and owned by dear imgui)
1424  int DataSize; // Data size
1425 
1426  // [Internal]
1427  ImGuiID SourceId; // Source item id
1428  ImGuiID SourceParentId; // Source parent id (if available)
1429  int DataFrameCount; // Data timestamp
1430  char DataType[32+1]; // Data type tag (short user-supplied string, 32 characters max)
1431  bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets)
1432  bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item.
1433 
1434  ImGuiPayload() { Clear(); }
1435  void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; }
1436  bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; }
1437  bool IsPreview() const { return Preview; }
1438  bool IsDelivery() const { return Delivery; }
1439 };
1440 
1441 // Helpers macros to generate 32-bits encoded colors
1442 #ifdef IMGUI_USE_BGRA_PACKED_COLOR
1443 #define IM_COL32_R_SHIFT 16
1444 #define IM_COL32_G_SHIFT 8
1445 #define IM_COL32_B_SHIFT 0
1446 #define IM_COL32_A_SHIFT 24
1447 #define IM_COL32_A_MASK 0xFF000000
1448 #else
1449 #define IM_COL32_R_SHIFT 0
1450 #define IM_COL32_G_SHIFT 8
1451 #define IM_COL32_B_SHIFT 16
1452 #define IM_COL32_A_SHIFT 24
1453 #define IM_COL32_A_MASK 0xFF000000
1454 #endif
1455 #define IM_COL32(R,G,B,A) (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
1456 #define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white = 0xFFFFFFFF
1457 #define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
1458 #define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black = 0x00000000
1459 
1460 // Helper: ImColor() implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
1461 // Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
1462 // **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
1463 // **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
1464 struct ImColor
1465 {
1467 
1468  ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; }
1469  ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; }
1470  ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; }
1471  ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
1472  ImColor(const ImVec4& col) { Value = col; }
1473  inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
1474  inline operator ImVec4() const { return Value; }
1475 
1476  // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
1477  inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
1478  static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
1479 };
1480 
1481 // Helper: Manually clip large list of items.
1482 // If you are submitting lots of evenly spaced items and you have a random access to the list, you can perform coarse clipping based on visibility to save yourself from processing those items at all.
1483 // The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped.
1484 // ImGui already clip items based on their bounds but it needs to measure text size to do so. Coarse clipping before submission makes this cost and your own data fetching/submission cost null.
1485 // Usage:
1486 // ImGuiListClipper clipper(1000); // we have 1000 elements, evenly spaced.
1487 // while (clipper.Step())
1488 // for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
1489 // ImGui::Text("line number %d", i);
1490 // - Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height (step skipped if we passed a known height as second arg to constructor).
1491 // - Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element.
1492 // - (Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user call Step(). Does nothing and switch to Step 3.)
1493 // - Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop.
1495 {
1496  float StartPosY;
1498  int ItemsCount, StepNo, DisplayStart, DisplayEnd;
1499 
1500  // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step).
1501  // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing().
1502  // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step().
1503  ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want).
1504  ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false.
1505 
1506  IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items.
1507  IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1.
1508  IMGUI_API void End(); // Automatically called on the last call of Step() that returns false.
1509 };
1510 
1511 //-----------------------------------------------------------------------------
1512 // Draw List
1513 // Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
1514 //-----------------------------------------------------------------------------
1515 
1516 // Draw callbacks for advanced uses.
1517 // NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that)
1518 // Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc.
1519 // The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()'
1520 typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
1521 
1522 // Typically, 1 command = 1 GPU draw call (unless command is a callback)
1524 {
1525  unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
1526  ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2)
1527  ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
1528  ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
1529  void* UserCallbackData; // The draw callback code can access this.
1530 
1531  ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; }
1532 };
1533 
1534 // Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h)
1535 #ifndef ImDrawIdx
1536 typedef unsigned short ImDrawIdx;
1537 #endif
1538 
1539 // Vertex layout
1540 #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT
1542 {
1546 };
1547 #else
1548 // You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
1549 // The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
1550 // The type has to be described within the macro (you can either declare the struct or use a typedef)
1551 // NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
1552 IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
1553 #endif
1554 
1555 // Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together.
1556 // You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered.
1558 {
1561 };
1562 
1564 {
1565  ImDrawCornerFlags_TopLeft = 1 << 0, // 0x1
1567  ImDrawCornerFlags_BotLeft = 1 << 2, // 0x4
1573  ImDrawCornerFlags_All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience
1574 };
1575 
1577 {
1580 };
1581 
1582 // Draw command list
1583 // This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
1584 // Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives.
1585 // You can interleave normal ImGui:: calls and adding primitives to the current draw list.
1586 // All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), but you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well)
1587 // Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects.
1589 {
1590  // This is what you have to render
1591  ImVector<ImDrawCmd> CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback.
1592  ImVector<ImDrawIdx> IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those
1593  ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
1594  ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
1595 
1596  // [Internal, used while building lists]
1597  const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
1598  const char* _OwnerName; // Pointer to owner window's name for debugging
1599  unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size
1600  ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
1601  ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
1604  ImVector<ImVec2> _Path; // [Internal] current path building
1605  int _ChannelsCurrent; // [Internal] current channel number (0)
1606  int _ChannelsCount; // [Internal] number of active channels (1+)
1607  ImVector<ImDrawChannel> _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size)
1608 
1609  // If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui)
1610  ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); }
1611  ~ImDrawList() { ClearFreeMemory(); }
1612  IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
1613  IMGUI_API void PushClipRectFullScreen();
1614  IMGUI_API void PopClipRect();
1615  IMGUI_API void PushTextureID(ImTextureID texture_id);
1616  IMGUI_API void PopTextureID();
1617  inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
1618  inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
1619 
1620  // Primitives
1621  IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f);
1622  IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round
1623  IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right
1624  IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
1625  IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f);
1626  IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col);
1627  IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f);
1628  IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col);
1629  IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f);
1630  IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
1631  IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
1632  IMGUI_API void AddText(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);
1633  IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF);
1634  IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF);
1635  IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All);
1636  IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness);
1637  IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
1638  IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0);
1639 
1640  // Stateful path API, add points then finish with PathFillConvex() or PathStroke()
1641  inline void PathClear() { _Path.resize(0); }
1642  inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
1643  inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
1644  inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } // Note: Anti-aliased filling requires points to be in clockwise order.
1645  inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); }
1646  IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10);
1647  IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
1648  IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0);
1649  IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All);
1650 
1651  // Channels
1652  // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives)
1653  // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end)
1654  IMGUI_API void ChannelsSplit(int channels_count);
1655  IMGUI_API void ChannelsMerge();
1656  IMGUI_API void ChannelsSetCurrent(int channel_index);
1657 
1658  // Advanced
1659  IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles.
1660  IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible
1661  IMGUI_API ImDrawList* CloneOutput() const; // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer.
1662 
1663  // Internal helpers
1664  // NB: all primitives needs to be reserved via PrimReserve() beforehand!
1665  IMGUI_API void Clear();
1666  IMGUI_API void ClearFreeMemory();
1667  IMGUI_API void PrimReserve(int idx_count, int vtx_count);
1668  IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles)
1669  IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col);
1670  IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col);
1671  inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; }
1672  inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; }
1673  inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); }
1674  IMGUI_API void UpdateClipRect();
1675  IMGUI_API void UpdateTextureID();
1676 };
1677 
1678 // All draw data to render an ImGui frame
1679 // (NB: the style and the naming convention here is a little inconsistent but we preserve them for backward compatibility purpose)
1681 {
1682  bool Valid; // Only valid after Render() is called and before the next NewFrame() is called.
1683  ImDrawList** CmdLists; // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here.
1684  int CmdListsCount; // Number of ImDrawList* to render
1685  int TotalIdxCount; // For convenience, sum of all ImDrawList's IdxBuffer.Size
1686  int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size
1687 
1688  // Functions
1689  ImDrawData() { Valid = false; Clear(); }
1690  ~ImDrawData() { Clear(); }
1691  void Clear() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } // The ImDrawList are owned by ImGuiContext!
1692  IMGUI_API void DeIndexAllBuffers(); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
1693  IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
1694 };
1695 
1697 {
1698  void* FontData; // // TTF/OTF data
1699  int FontDataSize; // // TTF/OTF data size
1700  bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
1701  int FontNo; // 0 // Index of font within TTF/OTF file
1702  float SizePixels; // // Size in pixels for rasterizer.
1703  int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
1704  int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
1705  bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
1706  ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
1707  ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
1708  const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
1709  bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
1710  unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one.
1711  float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
1712 
1713  // [Internal]
1714  char Name[40]; // Name (strictly to ease debugging)
1716 
1718 };
1719 
1721 {
1722  ImWchar Codepoint; // 0x0000..0xFFFF
1723  float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
1724  float X0, Y0, X1, Y1; // Glyph corners
1725  float U0, V0, U1, V1; // Texture coordinates
1726 };
1727 
1729 {
1730  ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two
1731  ImFontAtlasFlags_NoMouseCursors = 1 << 1 // Don't build software mouse cursors into the atlas
1732 };
1733 
1734 // Load and rasterize multiple TTF/OTF fonts into a same texture.
1735 // Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering.
1736 // We also add custom graphic data into the texture that serves for ImGui.
1737 // 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you.
1738 // 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
1739 // 3. Upload the pixels data into a texture within your graphics system.
1740 // 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture.
1741 // IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
1743 {
1745  IMGUI_API ~ImFontAtlas();
1746  IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg);
1747  IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL);
1748  IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
1749  IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership.
1750  IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp.
1751  IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter.
1752  IMGUI_API void ClearInputData(); // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts.
1753  IMGUI_API void ClearTexData(); // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory.
1754  IMGUI_API void ClearFonts(); // Clear output font data (glyphs storage, UV coordinates).
1755  IMGUI_API void Clear(); // Clear all input and output.
1756 
1757  // Build atlas, retrieve pixel data.
1758  // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID().
1759  // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste).
1760  // Pitch = Width * BytesPerPixels
1761  IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions.
1762  IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
1763  IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel
1764  void SetTexID(ImTextureID id) { TexID = id; }
1765 
1766  //-------------------------------------------
1767  // Glyph Ranges
1768  //-------------------------------------------
1769 
1770  // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
1771  // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
1772  IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
1773  IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
1774  IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
1775  IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs
1776  IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
1777  IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
1778 
1779  // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges().
1781  {
1782  ImVector<unsigned char> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
1783  GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); }
1784  bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; }
1785  void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array
1786  void AddChar(ImWchar c) { SetBit(c); } // Add character
1787  IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
1788  IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext
1789  IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
1790  };
1791 
1792  //-------------------------------------------
1793  // Custom Rectangles/Glyphs API
1794  //-------------------------------------------
1795 
1796  // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels.
1797  // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs.
1798  struct CustomRect
1799  {
1800  unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data.
1801  unsigned short Width, Height; // Input // Desired rectangle dimension
1802  unsigned short X, Y; // Output // Packed position in Atlas
1803  float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance
1804  ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset
1805  ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font
1806  CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; }
1807  bool IsPacked() const { return X != 0xFFFF; }
1808  };
1809 
1810  IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList
1811  IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font.
1812  const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; }
1813 
1814  // [Internal]
1815  IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max);
1816  IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
1817 
1818  //-------------------------------------------
1819  // Members
1820  //-------------------------------------------
1821 
1822  ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_)
1823  ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
1824  int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
1825  int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1.
1826 
1827  // [Internal]
1828  // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
1829  unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
1830  unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
1831  int TexWidth; // Texture width calculated during Build().
1832  int TexHeight; // Texture height calculated during Build().
1833  ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight)
1834  ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
1835  ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
1836  ImVector<CustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
1838  int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList
1839 };
1840 
1841 // Font runtime data and rendering
1842 // ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
1843 struct ImFont
1844 {
1845  // Members: Hot ~62/78 bytes
1846  float FontSize; // <user set> // Height of characters, set during loading (don't change after loading)
1847  float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale()
1848  ImVec2 DisplayOffset; // = (0.f,0.f) // Offset font rendering by xx pixels
1849  ImVector<ImFontGlyph> Glyphs; // // All glyphs.
1850  ImVector<float> IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI).
1851  ImVector<unsigned short> IndexLookup; // // Sparse. Index glyphs by Unicode code-point.
1852  const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar)
1853  float FallbackAdvanceX; // == FallbackGlyph->AdvanceX
1854  ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar()
1855 
1856  // Members: Cold ~18/26 bytes
1857  short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
1858  ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData
1859  ImFontAtlas* ContainerAtlas; // // What we has been loaded into
1860  float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
1862  int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
1863 
1864  // Methods
1865  IMGUI_API ImFont();
1866  IMGUI_API ~ImFont();
1867  IMGUI_API void ClearOutputData();
1868  IMGUI_API void BuildLookupTable();
1869  IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
1870  IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
1871  IMGUI_API void SetFallbackChar(ImWchar c);
1872  float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
1873  bool IsLoaded() const { return ContainerAtlas != NULL; }
1874  const char* GetDebugName() const { return ConfigData ? ConfigData->Name : "<unknown>"; }
1875 
1876  // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
1877  // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
1878  IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8
1879  IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const;
1880  IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const;
1881  IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
1882 
1883  // [Internal]
1884  IMGUI_API void GrowIndex(int new_size);
1885  IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
1886  IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
1887 
1888 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1889  typedef ImFontGlyph Glyph; // OBSOLETE 1.52+
1890 #endif
1891 };
1892 
1893 #if defined(__clang__)
1894 #pragma clang diagnostic pop
1895 #endif
1896 
1897 // Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h)
1898 #ifdef IMGUI_INCLUDE_IMGUI_USER_H
1899 #include "imgui_user.h"
1900 #endif
static bool is_blank(char c)
Definition: imgui.h:1297
value_type & front()
Definition: imgui.h:1225
bool BeginPopupContextItem(const char *str_id=NULL, int mouse_button=1)
Definition: imgui.cpp:5188
Definition: imgui.h:1572
bool contains(const value_type &v) const
Definition: imgui.h:1256
Definition: imgui.h:902
bool DragIntRange2(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 *format="%d", const char *format_max=NULL)
Definition: imgui.cpp:9579
Definition: imgui.h:858
Definition: imgui.h:874
void SetNextWindowSize(const ImVec2 &size, ImGuiCond cond=0)
Definition: imgui.cpp:7155
bool ColorPicker3(const char *label, float col[3], ImGuiColorEditFlags flags=0)
Definition: imgui.cpp:12134
bool WantSaveIniSettings
Definition: imgui.h:1122
Definition: imgui.h:1573
Definition: imgui.h:900
void ShowFontSelector(const char *label)
Definition: imgui_demo.cpp:2161
void Image(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))
Definition: imgui.cpp:7941
Definition: imgui.h:913
bool NavVisible
Definition: imgui.h:1124
float Framerate
Definition: imgui.h:1125
ImVector< ImTextureID > _TextureIdStack
Definition: imgui.h:1603
bool IsWindowHovered(ImGuiHoveredFlags flags=0)
Definition: imgui.cpp:6914
Definition: imgui.h:969
float GetCursorPosX()
Definition: imgui.cpp:7301
Definition: imgui.h:867
void PathStroke(ImU32 col, bool closed, float thickness=1.0f)
Definition: imgui.h:1645
Definition: imgui.h:791
Definition: imgui.h:1494
ImVec2 GetCursorStartPos()
Definition: imgui.cpp:7334
Definition: imgui.h:965
unsigned int ImU32
Definition: imgui.h:111
IMGUI_API void RenderText(ImVec2 pos, const char *text, const char *text_end=NULL, bool hide_text_after_hash=true)
Definition: imgui.cpp:4302
bool IsMouseReleased(int button)
Definition: imgui.cpp:4702
bool TreeNode(const void *ptr_id, const char *fmt,...)
Definition: imgui.cpp:8408
void * UserData
Definition: imgui.h:1054
bool MouseDrawCursor
Definition: imgui.h:1100
ImVector< unsigned char > UsedChars
Definition: imgui.h:1782
void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond=0)
Definition: imgui.cpp:8438
void LoadIniSettingsFromMemory(const char *ini_data, size_t ini_size=0)
Definition: imgui.cpp:3841
ImDrawList ** CmdLists
Definition: imgui.h:1683
bool DebugCheckVersionAndDataLayout(const char *version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert)
Definition: imgui.cpp:2693
Definition: imgui.h:918
ImVec2 GetCursorPos()
Definition: imgui.cpp:7295
Definition: imgui.h:785
ImGuiNavInput_
Definition: imgui.h:782
Definition: imgui.h:650
Definition: imgui.h:790
void * UserCallbackData
Definition: imgui.h:1529
ImDrawIdx * _IdxWritePtr
Definition: imgui.h:1601
void SetScrollFromPosY(float pos_y, float center_y_ratio=0.5f)
Definition: imgui.cpp:7387
bool InputFloat2(const char *label, float v[2], int decimal_precision, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10931
ImDrawListFlags_
Definition: imgui.h:1576
const char * LogFilename
Definition: imgui.h:1047
Definition: imgui.h:1557
float GetFontSize()
Definition: imgui.cpp:7275
Definition: imgui.h:689
bool IsLoaded() const
Definition: imgui.h:1873
bool WantSetMousePos
Definition: imgui.h:1121
bool ImageButton(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))
Definition: imgui.cpp:7969
Definition: imgui.h:705
Definition: imgui.h:763
Definition: imgui.h:855
~ImDrawData()
Definition: imgui.h:1690
bool SliderInt3(const char *label, int v[3], int v_min, int v_max, const char *format="%d")
Definition: imgui.cpp:9276
Definition: imgui.h:588
Definition: imgui.h:990
void ProgressBar(float fraction, const ImVec2 &size_arg=ImVec2(-1, 0), const char *overlay=NULL)
Definition: imgui.cpp:9752
int BufSize
Definition: imgui.h:1397
ImVec2 MousePos
Definition: imgui.h:1096
void SetColumnWidth(int column_index, float width)
Definition: imgui.cpp:12847
void LabelTextV(const char *label, const char *fmt, va_list args)
Definition: imgui.cpp:7631
void SetTexID(ImTextureID id)
Definition: imgui.h:1764
ImGuiDataType_
Definition: imgui.h:729
Definition: imgui.h:1286
Definition: imgui.h:909
void AlignTextToFramePadding()
Definition: imgui.cpp:7619
void(* ImDrawCallback)(const ImDrawList *parent_list, const ImDrawCmd *cmd)
Definition: imgui.h:1520
Definition: imgui.h:936
Definition: imgui.h:948
Definition: imgui.h:831
float MouseCursorScale
Definition: imgui.h:1023
ImGuiStorage * GetStateStorage()
Definition: imgui.cpp:7442
Definition: imgui.h:1731
void reserve(int capacity)
Definition: imgui.h:1326
bool ArrowButton(const char *str_id, ImGuiDir dir)
Definition: imgui.cpp:7864
void Clear()
Definition: imgui.h:1355
void LabelText(const char *label, const char *fmt,...)
Definition: imgui.cpp:7656
Definition: imgui.h:945
bool InputTextMultiline(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)
Definition: imgui.cpp:10792
Definition: imgui.h:757
Definition: imgui.h:700
ImVec2 GlyphOffset
Definition: imgui.h:1707
#define IM_FMTLIST(FMT)
Definition: imgui.h:44
Definition: imgui.h:592
void StyleColorsDark(ImGuiStyle *dst=NULL)
Definition: imgui_draw.cpp:155
Definition: imgui.h:857
void PathFillConvex(ImU32 col)
Definition: imgui.h:1644
ImColor()
Definition: imgui.h:1468
int int int int height
Definition: wglext.h:61
bool OpenPopupOnItemClick(const char *str_id=NULL, int mouse_button=1)
Definition: imgui.cpp:5172
ImColor(ImU32 rgba)
Definition: imgui.h:1470
bool InputInt3(const char *label, int v[3], ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10961
void SetCursorPos(const ImVec2 &local_pos)
Definition: imgui.cpp:7313
bool BeginCombo(const char *label, const char *preview_value, ImGuiComboFlags flags=0)
Definition: imgui.cpp:10979
signed long long ImS64
Definition: imgui.h:116
void SetWindowCollapsed(const char *name, bool collapsed, ImGuiCond cond=0)
Definition: imgui.cpp:7122
Definition: imgui.h:736
void SaveIniSettingsToDisk(const char *ini_filename)
Definition: imgui.cpp:3901
bool BeginPopupModal(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5085
void resize(int new_size)
Definition: imgui.h:1232
const ImGuiPayload * AcceptDragDropPayload(const char *type, ImGuiDragDropFlags flags=0)
Definition: imgui.cpp:13334
Definition: imgui.h:1566
ImGuiTextBuffer()
Definition: imgui.h:1319
Definition: imgui.h:121
int TexHeight
Definition: imgui.h:1832
bool IsMouseClicked(int button, bool repeat=false)
Definition: imgui.cpp:4684
bool TreeNodeEx(const void *ptr_id, ImGuiTreeNodeFlags flags, const char *fmt,...)
Definition: imgui.cpp:8390
bool IsItemClicked(int mouse_button=0)
Definition: imgui.cpp:4808
bool IsKeyPressed(int user_key_index, bool repeat=true)
Definition: imgui.cpp:4647
float CurveTessellationTol
Definition: imgui.h:1026
Definition: imgui.h:1798
Definition: imgui.h:878
void resize(int new_size, const value_type &v)
Definition: imgui.h:1233
float MouseWheelH
Definition: imgui.h:1099
void PopTextWrapPos()
Definition: imgui.cpp:6725
float ChildBorderSize
Definition: imgui.h:1005
ImVec2 DisplaySize
Definition: imgui.h:1043
float V1
Definition: imgui.h:1725
ImGuiInputTextFlags Flags
Definition: imgui.h:1385
void CalcListClipping(int items_count, float items_height, int *out_items_display_start, int *out_items_display_end)
Definition: imgui.cpp:4537
bool IsMouseDown(int button)
Definition: imgui.cpp:4668
void SetTooltip(const char *fmt,...)
Definition: imgui.cpp:4898
~ImDrawList()
Definition: imgui.h:1611
bool IsPacked() const
Definition: imgui.h:1807
ImVector< ImFontGlyph > Glyphs
Definition: imgui.h:1849
ImGuiConfigFlags_
Definition: imgui.h:814
Definition: imgui.h:847
const value_type & operator[](int i) const
Definition: imgui.h:1218
Definition: imgui.h:885
ImVec2 ItemSpacing
Definition: imgui.h:1011
ImVec2 GetItemRectMin()
Definition: imgui.cpp:4847
ImVector< ImVec2 > _Path
Definition: imgui.h:1604
ImVector()
Definition: imgui.h:1209
bool IsItemActive()
Definition: imgui.cpp:4791
bool ColorPicker4(const char *label, float col[4], ImGuiColorEditFlags flags=0, const float *ref_col=NULL)
Definition: imgui.cpp:12167
void(* ImGuiSizeCallback)(ImGuiSizeCallbackData *data)
Definition: imgui.h:107
bool SliderInt4(const char *label, int v[4], int v_min, int v_max, const char *format="%d")
Definition: imgui.cpp:9281
#define IM_FMTARGS(FMT)
Definition: imgui.h:43
bool Valid
Definition: imgui.h:1682
Definition: imgui.h:590
void SetNextWindowFocus()
Definition: imgui.cpp:7187
Definition: imgui.h:797
ImVec2 GetMouseDragDelta(int button=0, float lock_threshold=-1.0f)
Definition: imgui.cpp:4751
void NewFrame()
Definition: imgui.cpp:3477
Definition: imgui.h:743
Definition: imgui.h:943
ImDrawList(const ImDrawListSharedData *shared_data)
Definition: imgui.h:1610
int _ChannelsCount
Definition: imgui.h:1606
ImGuiPayload()
Definition: imgui.h:1434
Definition: imgui.h:677
Definition: imgui.h:602
void SetItemDefaultFocus()
Definition: imgui.cpp:7419
int ImGuiTreeNodeFlags
Definition: imgui.h:104
bool DragFloatRange2(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 *format="%.3f", const char *format_max=NULL, float power=1.0f)
Definition: imgui.cpp:9533
void EndTooltip()
Definition: imgui.cpp:4911
Definition: imgui.h:610
Definition: imgui.h:616
bool InputInt4(const char *label, int v[4], ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10966
Definition: imgui.h:804
const value_type * const_iterator
Definition: imgui.h:1207
ImGuiCond_
Definition: imgui.h:981
void LogButtons()
Definition: imgui.cpp:8089
int ImGuiFocusedFlags
Definition: imgui.h:100
value_type & operator[](int i)
Definition: imgui.h:1217
ImFontAtlasFlags Flags
Definition: imgui.h:1822
int ImGuiColorEditFlags
Definition: imgui.h:95
bool ListBox(const char *label, int *current_item, bool(*items_getter)(void *data, int idx, const char **out_text), void *data, int items_count, int height_in_items=-1)
void CaptureMouseFromApp(bool capture=true)
Definition: imgui.cpp:4786
void PlotLines(const char *label, float(*values_getter)(void *data, int idx), void *data, int values_count, int values_offset=0, const char *overlay_text=NULL, float scale_min=FLT_MAX, float scale_max=FLT_MAX, ImVec2 graph_size=ImVec2(0, 0))
Definition: imgui.cpp:9735
int _grow_capacity(int sz) const
Definition: imgui.h:1231
Definition: imgui.h:937
bool Selectable(const char *label, bool *p_selected, ImGuiSelectableFlags flags=0, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui.cpp:11271
int int int width
Definition: wglext.h:61
Definition: imgui.h:996
int size() const
Definition: imgui.h:1323
Definition: imgui.h:651
ImVec2 ItemInnerSpacing
Definition: imgui.h:1012
int(* ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data)
Definition: imgui.h:106
float Descent
Definition: imgui.h:1860
ImVec4 ClipRect
Definition: imgui.h:1526
ImGuiDragDropFlags_
Definition: imgui.h:710
void SetScrollHere(float center_y_ratio=0.5f)
Definition: imgui.cpp:7397
Definition: imgui.h:631
void SetAllocatorFunctions(void *(*alloc_func)(size_t sz, void *user_data), void(*free_func)(void *ptr, void *user_data), void *user_data=NULL)
Definition: imgui.cpp:2705
void PopAllowKeyboardFocus()
Definition: imgui.cpp:6703
bool SmallButton(const char *label)
Definition: imgui.cpp:7854
Definition: imgui.h:809
bool IsMouseHoveringRect(const ImVec2 &r_min, const ImVec2 &r_max, bool clip=true)
Definition: imgui.cpp:4594
ImVec2 DesiredSize
Definition: imgui.h:1416
Definition: imgui.h:842
Definition: imgui.h:591
void PushClipRect(const ImVec2 &clip_rect_min, const ImVec2 &clip_rect_max, bool intersect_with_current_clip_rect)
Definition: imgui.cpp:4064
Definition: imgui.h:624
bool BeginPopup(const char *str_id, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5062
ImDrawData()
Definition: imgui.h:1689
bool DragFloat2(const char *label, float v[2], float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9518
Definition: imgui.h:850
unsigned char * TexPixelsAlpha8
Definition: imgui.h:1829
void ShowMetricsWindow(bool *p_open=NULL)
Definition: imgui.cpp:13500
ImWchar EventChar
Definition: imgui.h:1390
void LogText(const char *fmt,...)
Definition: imgui.cpp:4233
int CmdListsCount
Definition: imgui.h:1684
void BeginTooltip()
Definition: imgui.cpp:4906
ImVector(const ImVector< T > &src)
Definition: imgui.h:1211
void BulletTextV(const char *fmt, va_list args)
Definition: imgui.cpp:8516
bool VSliderFloat(const char *label, const ImVec2 &size, float *v, float v_min, float v_max, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9217
bool IsWindowAppearing()
Definition: imgui.cpp:7116
Definition: imgui.h:990
Definition: imgui.h:748
bool DragScalar(const char *label, ImGuiDataType data_type, void *v, float v_speed, const void *v_min=NULL, const void *v_max=NULL, const char *format=NULL, float power=1.0f)
Definition: imgui.cpp:9412
Definition: imgui.h:605
bool FontDataOwnedByAtlas
Definition: imgui.h:1700
ImVec2 DisplayVisibleMax
Definition: imgui.h:1062
int SelectionStart
Definition: imgui.h:1400
void SetNextWindowSizeConstraints(const ImVec2 &size_min, const ImVec2 &size_max, ImGuiSizeCallback custom_callback=NULL, void *custom_callback_data=NULL)
Definition: imgui.cpp:7163
void * MemAlloc(size_t size)
Definition: imgui.cpp:2647
Definition: imgui.h:771
ImGuiWindowFlags_
Definition: imgui.h:580
Definition: imgui.h:792
Definition: imgui.h:833
const_iterator begin() const
Definition: imgui.h:1222
Definition: imgui.h:1340
ImDrawCmd()
Definition: imgui.h:1531
bool InputScalar(const char *label, ImGuiDataType data_type, void *v, const void *step=NULL, const void *step_fast=NULL, const char *format=NULL, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10798
const ImFontGlyph * FallbackGlyph
Definition: imgui.h:1852
void Indent(float indent_w=0.0f)
Definition: imgui.cpp:13029
Definition: imgui.h:866
bool IsWindowFocused(ImGuiFocusedFlags flags=0)
Definition: imgui.cpp:6955
Definition: imgui.h:817
float StartPosY
Definition: imgui.h:1496
void PushTextWrapPos(float wrap_pos_x=0.0f)
Definition: imgui.cpp:6718
int ImFontAtlasFlags
Definition: imgui.h:93
void PushButtonRepeat(bool repeat)
Definition: imgui.cpp:6708
void ResetMouseDragDelta(int button=0)
Definition: imgui.cpp:4763
#define IM_VEC2_CLASS_EXTRA
Definition: imconfig.h:81
ImVec2 DisplayVisibleMin
Definition: imgui.h:1061
Definition: imgui.h:681
const CustomRect * GetCustomRectByIndex(int index) const
Definition: imgui.h:1812
void SetWindowFocus(const char *name)
Definition: imgui.cpp:7133
Definition: imgui.h:881
void SetBit(int n)
Definition: imgui.h:1785
Definition: imgui.h:759
ImVec4()
Definition: imgui.h:136
Definition: imgui.h:767
ImGuiMouseCursor GetMouseCursor()
Definition: imgui.cpp:4771
Definition: imgui.h:1565
float GetColumnOffset(int column_index=-1)
Definition: imgui.cpp:12786
ImGuiKey_
Definition: imgui.h:752
void Text(const char *fmt,...)
Definition: imgui.cpp:7459
const char * begin() const
Definition: imgui.h:1293
bool SliderScalarN(const char *label, ImGuiDataType data_type, void *v, int components, const void *v_min, const void *v_max, const char *format=NULL, float power=1.0f)
Definition: imgui.cpp:9228
const ImDrawListSharedData * _Data
Definition: imgui.h:1597
TextRange(const char *_b, const char *_e)
Definition: imgui.h:1292
Definition: imgui.h:897
ImVec2 Pos
Definition: imgui.h:1414
bool HasSelection() const
Definition: imgui.h:1406
Definition: imgui.h:876
char Name[40]
Definition: imgui.h:1714
void SetWindowSize(const char *name, const ImVec2 &size, ImGuiCond cond=0)
Definition: imgui.cpp:7088
float FrameRounding
Definition: imgui.h:1009
const char * end() const
Definition: imgui.h:1322
Definition: imgui.h:944
bool WantCaptureKeyboard
Definition: imgui.h:1119
bool InputText(const char *label, char *buf, size_t buf_size, ImGuiInputTextFlags flags=0, ImGuiTextEditCallback callback=NULL, void *user_data=NULL)
Definition: imgui.cpp:10786
ImColor(int r, int g, int b, int a=255)
Definition: imgui.h:1469
Definition: imgui.h:916
void DestroyContext(ImGuiContext *ctx=NULL)
Definition: imgui.cpp:2721
bool IsItemHovered(ImGuiHoveredFlags flags=0)
Definition: imgui.cpp:2514
bool empty() const
Definition: imgui.h:1214
Definition: imgui.h:746
ImVector< ImFont * > Fonts
Definition: imgui.h:1835
int MetricsTotalSurface
Definition: imgui.h:1862
ImVec2 GetItemRectSize()
Definition: imgui.cpp:4859
void SetHSV(float h, float s, float v, float a=1.0f)
Definition: imgui.h:1477
void PrimWriteVtx(const ImVec2 &pos, const ImVec2 &uv, ImU32 col)
Definition: imgui.h:1671
ImFontGlyph Glyph
Definition: imgui.h:1889
float GetWindowWidth()
Definition: imgui.cpp:6983
bool IsAnyItemFocused()
Definition: imgui.cpp:4825
Definition: imgui.h:680
void SetWindowPos(const char *name, const ImVec2 &pos, ImGuiCond cond=0)
Definition: imgui.cpp:7039
Definition: imgui.h:756
int int y
Definition: wglext.h:61
bool BeginChild(ImGuiID id, const ImVec2 &size=ImVec2(0, 0), bool border=false, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5270
ImVec2 GetContentRegionMax()
Definition: imgui.cpp:7201
ImVector< char > Buf
Definition: imgui.h:1317
bool OptCursorBlink
Definition: imgui.h:1066
T * Data
Definition: imgui.h:1203
ImVector< Pair > Data
Definition: imgui.h:1350
Definition: imgui.h:864
int ImGuiDragDropFlags
Definition: imgui.h:99
iterator begin()
Definition: imgui.h:1221
bool CheckboxFlags(const char *label, unsigned int *flags, unsigned int flags_value)
Definition: imgui.cpp:9836
bool BeginChildFrame(ImGuiID id, const ImVec2 &size, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5316
void TextDisabledV(const char *fmt, va_list args)
Definition: imgui.cpp:7482
void ClearInputCharacters()
Definition: imgui.h:1112
ImVec2 uv
Definition: imgui.h:1544
bool ColorEdit4(const char *label, float col[4], ImGuiColorEditFlags flags=0)
Definition: imgui.cpp:11934
int _ChannelsCurrent
Definition: imgui.h:1605
bool BeginMenuBar()
Definition: imgui.cpp:11463
Definition: imgui.h:906
int ImGuiConfigFlags
Definition: imgui.h:97
Definition: imgui.h:789
bool empty() const
Definition: imgui.h:1295
float ColumnsMinSpacing
Definition: imgui.h:1015
float DeltaTime
Definition: imgui.h:1044
void PushStyleVar(ImGuiStyleVar idx, const ImVec2 &val)
Definition: imgui.cpp:6819
Definition: imgui.h:930
bool WantCaptureMouse
Definition: imgui.h:1118
typedef void(WINAPI *PFNWGLFREEMEMORYNVPROC)(void *pointer)
bool InputFloat4(const char *label, float v[4], int decimal_precision, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10947
void MemFree(void *ptr)
Definition: imgui.cpp:2653
Definition: imgui.h:844
unsigned short ImDrawIdx
Definition: imgui.h:1536
bool IsMousePosValid(const ImVec2 *mouse_pos=NULL)
Definition: imgui.cpp:4742
void SetStateStorage(ImGuiStorage *storage)
Definition: imgui.cpp:7436
int StepNo
Definition: imgui.h:1498
Definition: imgui.h:630
void trim_blanks()
Definition: imgui.h:1298
ImVec2 GetMousePos()
Definition: imgui.cpp:4727
void Bullet()
Definition: imgui.cpp:8493
Definition: imgui.h:907
Definition: imgui.h:800
int GLenum UINT size
Definition: wglext.h:321
Definition: imgui.h:863
bool IsDataType(const char *type) const
Definition: imgui.h:1436
unsigned short ImWchar
Definition: imgui.h:82
Definition: imgui.h:911
unsigned int ID
Definition: imgui.h:1800
Definition: imgui.h:731
Definition: imgui.h:899
int ImGuiCond
Definition: imgui.h:86
bool NavActive
Definition: imgui.h:1123
Definition: imgui.h:1588
Definition: imgui.h:1523
ImGuiKey EventKey
Definition: imgui.h:1394
void EndDragDropSource()
Definition: imgui.cpp:13221
ImVector< CustomRect > CustomRects
Definition: imgui.h:1836
int ImGuiInputTextFlags
Definition: imgui.h:102
void Clear()
Definition: imgui.h:1691
ImVec2 GlyphOffset
Definition: imgui.h:1804
Definition: imgui.h:1198
ImGuiID GetID(const void *ptr_id)
Definition: imgui.cpp:8488
void SameLine(float pos_x=0.0f, float spacing_w=-1.0f)
Definition: imgui.cpp:12672
void pop_back()
Definition: imgui.h:1250
int ImGuiDir
Definition: imgui.h:85
void EndDragDropTarget()
Definition: imgui.cpp:13377
void SetMouseCursor(ImGuiMouseCursor type)
Definition: imgui.cpp:4776
ImVec2 GetContentRegionAvail()
Definition: imgui.cpp:7210
int Size
Definition: imgui.h:1201
#define IM_VEC4_CLASS_EXTRA
Definition: imconfig.h:93
Definition: imgui.h:903
Definition: imgui.h:875
Definition: imgui.h:1271
void CaptureKeyboardFromApp(bool capture=true)
Definition: imgui.cpp:4781
Definition: imgui.h:607
bool DragFloat(const char *label, float *v, float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9513
ImGuiInputTextFlags EventFlag
Definition: imgui.h:1384
const value_type & back() const
Definition: imgui.h:1228
bool MergeMode
Definition: imgui.h:1709
Definition: imgui.h:642
Definition: imgui.h:608
Definition: imgui.h:860
ImVec2 DisplayOffset
Definition: imgui.h:1848
float GetScrollMaxY()
Definition: imgui.cpp:7368
bool DragScalarN(const char *label, ImGuiDataType data_type, void *v, int components, float v_speed, const void *v_min=NULL, const void *v_max=NULL, const char *format=NULL, float power=1.0f)
Definition: imgui.cpp:9485
void SetCurrentContext(ImGuiContext *ctx)
Definition: imgui.cpp:2682
Definition: imgui.h:766
Definition: imgui.h:772
Definition: imgui.h:810
ImFontAtlas * ContainerAtlas
Definition: imgui.h:1859
ImDrawList * GetWindowDrawList()
Definition: imgui.cpp:7264
void ShowDemoWindow(bool *p_open=NULL)
Definition: imgui_demo.cpp:129
#define IM_ASSERT(_EXPR)
Definition: imgui.h:37
Definition: imgui.h:983
bool InputInt2(const char *label, int v[2], ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10956
int ImGuiWindowFlags
Definition: imgui.h:105
#define IMGUI_API
Definition: imgui.h:31
bool IsKeyDown(int user_key_index)
Definition: imgui.cpp:4621
void PopStyleVar(int count=1)
Definition: imgui.cpp:6833
iterator erase(const_iterator it, const_iterator it_last)
Definition: imgui.h:1253
int DataFrameCount
Definition: imgui.h:1429
void SetScrollY(float scroll_y)
Definition: imgui.cpp:7380
Definition: imgui.h:760
float FontSize
Definition: imgui.h:1846
Definition: imgui.h:861
float Alpha
Definition: imgui.h:998
ImVec2 CalcTextSize(const char *text, const char *text_end=NULL, bool hide_text_after_double_hash=false, float wrap_width=-1.0f)
Definition: imgui.cpp:4508
#define IM_COL32_A_SHIFT
Definition: imgui.h:1452
ImVec2 GetWindowContentRegionMin()
Definition: imgui.cpp:7222
Definition: imgui.h:934
Definition: imgui.h:955
bool BeginPopupContextWindow(const char *str_id=NULL, int mouse_button=1, bool also_over_items=true)
Definition: imgui.cpp:5198
Definition: imgui.h:649
void Dummy(const ImVec2 &size)
Definition: imgui.cpp:12581
ImFont * Font
Definition: imgui.h:1805
Definition: imgui.h:949
bool IsAnyItemHovered()
Definition: imgui.cpp:4813
Definition: imgui.h:963
int ImGuiBackendFlags
Definition: imgui.h:94
char front() const
Definition: imgui.h:1296
Definition: imgui.h:632
float w
Definition: imgui.h:135
const char * GetStyleColorName(ImGuiCol idx)
Definition: imgui.cpp:6849
bool IsMouseDragging(int button=0, float lock_threshold=-1.0f)
Definition: imgui.cpp:4716
Definition: imgui.h:1541
Definition: imgui.h:841
ImVec2 GetWindowContentRegionMax()
Definition: imgui.cpp:7228
int capacity() const
Definition: imgui.h:1216
ImVec2 CurrentSize
Definition: imgui.h:1415
Definition: imgui.h:970
Definition: imgui.h:873
Pair(ImGuiID _key, void *_val_p)
Definition: imgui.h:1348
ImVec2 WindowMinSize
Definition: imgui.h:1002
bool SliderFloat4(const char *label, float v[4], float v_min, float v_max, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9266
unsigned int RasterizerFlags
Definition: imgui.h:1710
ImVector< ImDrawChannel > _Channels
Definition: imgui.h:1607
Definition: imgui.h:674
int TexWidth
Definition: imgui.h:1831
int BufTextLen
Definition: imgui.h:1396
void TextUnformatted(const char *text, const char *text_end=NULL)
Definition: imgui.cpp:7513
Definition: imgui.h:825
bool Preview
Definition: imgui.h:1431
TextRange()
Definition: imgui.h:1291
Definition: imgui.h:626
bool TreeNodeExV(const void *ptr_id, ImGuiTreeNodeFlags flags, const char *fmt, va_list args)
Definition: imgui.cpp:8360
void swap(ImVector< value_type > &rhs)
Definition: imgui.h:1229
void SetColumnOffset(int column_index, float offset_x)
Definition: imgui.cpp:12825
~ImVector()
Definition: imgui.h:1210
Definition: imgui.h:1567
void Unindent(float indent_w=0.0f)
Definition: imgui.cpp:13037
bool DragInt2(const char *label, int v[2], float v_speed=1.0f, int v_min=0, int v_max=0, const char *format="%d")
Definition: imgui.cpp:9564
const char * _OwnerName
Definition: imgui.h:1598
Definition: imgui.h:676
Definition: imgui.h:872
void push_front(const value_type &v)
Definition: imgui.h:1251
int SelectionEnd
Definition: imgui.h:1401
int GetColumnsCount()
Definition: imgui.cpp:12751
void PlotHistogram(const char *label, float(*values_getter)(void *data, int idx), void *data, int values_count, int values_offset=0, const char *overlay_text=NULL, float scale_min=FLT_MAX, float scale_max=FLT_MAX, ImVec2 graph_size=ImVec2(0, 0))
Definition: imgui.cpp:9746
Definition: imgui.h:762
#define IM_COL32_B_SHIFT
Definition: imgui.h:1451
bool SliderAngle(const char *label, float *v_rad, float v_degrees_min=-360.0f, float v_degrees_max=+360.0f)
Definition: imgui.cpp:9204
Definition: imgui.h:971
Definition: imgui.h:941
ImVector< ImDrawCmd > CmdBuffer
Definition: imgui.h:1591
bool ColorEdit3(const char *label, float col[3], ImGuiColorEditFlags flags=0)
Definition: imgui.cpp:11840
Definition: imgui.h:619
bool DragInt4(const char *label, int v[4], float v_speed=1.0f, int v_min=0, int v_max=0, const char *format="%d")
Definition: imgui.cpp:9574
Definition: imgui.h:1696
float ChildRounding
Definition: imgui.h:1004
ImTextureID TextureId
Definition: imgui.h:1527
int GLenum UINT void * data
Definition: wglext.h:321
Definition: imgui.h:734
Definition: imgui.h:865
void * ClipboardUserData
Definition: imgui.h:1076
int ImGuiStyleVar
Definition: imgui.h:90
Definition: imgui.h:1420
Definition: imgui.h:769
void * UserData
Definition: imgui.h:1413
Definition: imgui.h:761
void TextColored(const ImVec4 &col, const char *fmt,...)
Definition: imgui.cpp:7474
Definition: imgui.h:1284
ImVec2 GetMousePosOnOpeningCurrentPopup()
Definition: imgui.cpp:4733
typedef int(WINAPI *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer
Definition: imgui.h:1569
float MouseDoubleClickTime
Definition: imgui.h:1048
const ImWchar * GlyphRanges
Definition: imgui.h:1708
float GrabMinSize
Definition: imgui.h:1018
ImGuiID SourceId
Definition: imgui.h:1427
bool ShowStyleSelector(const char *label)
Definition: imgui_demo.cpp:2143
ImGuiIO & GetIO()
Definition: imgui.cpp:2731
Definition: imgui.h:645
Definition: imgui.h:848
Definition: imgui.h:824
int MetricsRenderIndices
Definition: imgui.h:1127
int ImGuiKey
Definition: imgui.h:87
int DataSize
Definition: imgui.h:1424
Definition: imgui.h:910
Definition: imgui.h:1411
void * val_p
Definition: imgui.h:1345
Definition: imgui.h:950
Definition: imgui.h:688
int RefFrame
Definition: imgui.h:1274
unsigned int * TexPixelsRGBA32
Definition: imgui.h:1830
int ImDrawCornerFlags
Definition: imgui.h:91
float z
Definition: imgui.h:135
char * Buf
Definition: imgui.h:1395
Definition: imgui.h:904
ImGuiOnceUponAFrame()
Definition: imgui.h:1273
ImFont * GetFont()
Definition: imgui.cpp:7270
void EndGroup()
Definition: imgui.cpp:12628
Definition: imgui.h:1568
ImVec2()
Definition: imgui.h:124
ImVec2 GlyphExtraSpacing
Definition: imgui.h:1706
float GetTime()
Definition: imgui.cpp:2750
void TextV(const char *fmt, va_list args)
Definition: imgui.cpp:7448
const char * c_str() const
Definition: imgui.h:1327
Definition: imgui.h:600
int GetColumnIndex()
Definition: imgui.cpp:12745
Definition: imgui.h:747
bool IsKeyReleased(int user_key_index)
Definition: imgui.cpp:4660
void Spacing()
Definition: imgui.cpp:12573
void LogToFile(int max_depth=-1, const char *filename=NULL)
Definition: imgui.cpp:8022
ImGuiContext * GetCurrentContext()
Definition: imgui.cpp:2677
void TextWrapped(const char *fmt,...)
Definition: imgui.cpp:7505
void reserve(int new_capacity)
Definition: imgui.h:1234
Definition: imgui.h:922
void EndCombo()
Definition: imgui.cpp:11082
float ScrollbarRounding
Definition: imgui.h:1017
Definition: imgui.h:768
ImGuiID key
Definition: imgui.h:1344
Definition: imgui.h:854
bool IsWindowCollapsed()
Definition: imgui.cpp:7110
void SetCursorPosX(float x)
Definition: imgui.cpp:7320
int Capacity
Definition: imgui.h:1202
signed int ImS32
Definition: imgui.h:110
void ShowStyleEditor(ImGuiStyle *ref=NULL)
Definition: imgui_demo.cpp:2180
bool DragFloat4(const char *label, float v[4], float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9528
float GetContentRegionAvailWidth()
Definition: imgui.cpp:7216
Definition: imgui.h:935
Definition: imgui.h:843
unsigned int ImGuiID
Definition: imgui.h:81
bool KeyShift
Definition: imgui.h:1102
Definition: imgui.h:775
Definition: imgui.h:699
bool VSliderInt(const char *label, const ImVec2 &size, int *v, int v_min, int v_max, const char *format="%d")
Definition: imgui.cpp:9222
float PopupBorderSize
Definition: imgui.h:1007
void PushItemWidth(float item_width)
Definition: imgui.cpp:6600
Definition: imgui.h:832
bool InputDouble(const char *label, double *v, double step=0.0f, double step_fast=0.0f, const char *format="%.6f", ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10864
bool MenuItem(const char *label, const char *shortcut, bool *p_selected, bool enabled=true)
Definition: imgui.cpp:11418
Definition: imgui.h:953
ImGuiContext * CreateContext(ImFontAtlas *shared_font_atlas=NULL)
Definition: imgui.cpp:2712
int CountGrep
Definition: imgui.h:1304
Definition: imgui.h:1780
Definition: imgui.h:717
bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui.cpp:7848
ImU32 col
Definition: imgui.h:1545
bool IsItemFocused()
Definition: imgui.cpp:4802
ImGuiCol_
Definition: imgui.h:837
void Separator()
Definition: imgui.cpp:12460
ImVec2 GetClipRectMin() const
Definition: imgui.h:1617
void End()
Definition: imgui.cpp:6393
GlyphRangesBuilder()
Definition: imgui.h:1783
bool VSliderScalar(const char *label, const ImVec2 &size, ImGuiDataType data_type, void *v, const void *v_min, const void *v_max, const char *format=NULL, float power=1.0f)
Definition: imgui.cpp:9155
Definition: imgui.h:922
int FontDataSize
Definition: imgui.h:1699
Definition: imgui.h:915
void TextDisabled(const char *fmt,...)
Definition: imgui.cpp:7489
void clear()
Definition: imgui.h:1220
Definition: imgui.h:133
Definition: imgui.h:898
void BeginGroup()
Definition: imgui.cpp:12605
bool FontAllowUserScaling
Definition: imgui.h:1058
Definition: imgui.h:793
float SizePixels
Definition: imgui.h:1702
float GetScrollX()
Definition: imgui.cpp:7353
ImTextureID TexID
Definition: imgui.h:1823
float GetCharAdvance(ImWchar c) const
Definition: imgui.h:1872
Definition: imgui.h:901
Definition: imgui.h:808
bool BeginPopupContextVoid(const char *str_id=NULL, int mouse_button=1)
Definition: imgui.cpp:5209
Definition: imgui.h:773
ImGuiListClipper(int items_count=-1, float items_height=-1.0f)
Definition: imgui.h:1503
int ImGuiHoveredFlags
Definition: imgui.h:101
float operator[](size_t i) const
Definition: imgui.h:126
unsigned int _VtxCurrentIdx
Definition: imgui.h:1599
Definition: imgui.h:947
int ImGuiMouseCursor
Definition: imgui.h:89
float GetColumnWidth(int column_index=-1)
Definition: imgui.cpp:12814
ImVec2 GetWindowSize()
Definition: imgui.cpp:7045
ImVec2(float _x, float _y)
Definition: imgui.h:125
Definition: imgui.h:582
void EndPopup()
Definition: imgui.cpp:5160
Definition: imgui.h:990
Definition: imgui.h:1680
Definition: imgui.h:1262
float GetTreeNodeToLabelSpacing()
Definition: imgui.cpp:8432
bool KeyCtrl
Definition: imgui.h:1101
ImVec2 GetFontTexUvWhitePixel()
Definition: imgui.cpp:7280
int ImGuiComboFlags
Definition: imgui.h:98
Definition: imgui.h:990
ImVector & operator=(const ImVector< T > &src)
Definition: imgui.h:1212
ImGuiMouseCursor_
Definition: imgui.h:961
void NextColumn()
Definition: imgui.cpp:12711
bool ColorButton(const char *desc_id, const ImVec4 &col, ImGuiColorEditFlags flags=0, ImVec2 size=ImVec2(0, 0))
Definition: imgui.cpp:11767
float x
Definition: imgui.h:135
Pair(ImGuiID _key, int _val_i)
Definition: imgui.h:1346
void * UserData
Definition: imgui.h:1386
Definition: imgui.h:737
Definition: imgui.h:679
T value_type
Definition: imgui.h:1205
Definition: imgui.h:583
float IndentSpacing
Definition: imgui.h:1014
Definition: imgui.h:1464
void PushStyleColor(ImGuiCol idx, const ImVec4 &col)
Definition: imgui.cpp:6743
Definition: imgui.h:806
ImGuiTreeNodeFlags_
Definition: imgui.h:639
bool SliderScalar(const char *label, ImGuiDataType data_type, void *v, const void *v_min, const void *v_max, const char *format=NULL, float power=1.0f)
Definition: imgui.cpp:9086
ImVector< ImDrawIdx > IdxBuffer
Definition: imgui.h:1560
float GetWindowHeight()
Definition: imgui.cpp:6989
void BulletText(const char *fmt,...)
Definition: imgui.cpp:8540
Definition: imgui.h:1720
int x
Definition: wglext.h:61
int ImDrawListFlags
Definition: imgui.h:92
Definition: imgui.h:966
Definition: imgui.h:932
const value_type & front() const
Definition: imgui.h:1226
Definition: imgui.h:796
bool BeginMainMenuBar()
Definition: imgui.cpp:11430
Definition: imgui.h:885
ImU32 ColorConvertFloat4ToU32(const ImVec4 &in)
Definition: imgui.cpp:1384
ImVec2 DisplaySafeAreaPadding
Definition: imgui.h:1022
void GLuint GLenum type
Definition: wglext.h:636
void TreePush(const void *ptr_id=NULL)
Definition: imgui.cpp:13053
void PushFont(ImFont *font)
Definition: imgui.cpp:6663
Definition: imgui.h:940
void SetNextWindowPos(const ImVec2 &pos, ImGuiCond cond=0, const ImVec2 &pivot=ImVec2(0, 0))
Definition: imgui.cpp:7146
ImVec2 DisplayWindowPadding
Definition: imgui.h:1021
void SetClipboardText(const char *text)
Definition: imgui.cpp:2664
Definition: imgui.h:871
float IniSavingRate
Definition: imgui.h:1045
Definition: imgui.h:846
unsigned short Y
Definition: imgui.h:1802
bool InvisibleButton(const char *str_id, const ImVec2 &size)
Definition: imgui.cpp:7892
float y
Definition: imgui.h:123
int MetricsRenderVertices
Definition: imgui.h:1126
Definition: imgui.h:845
void EndChild()
Definition: imgui.cpp:5276
float GetWindowContentRegionWidth()
Definition: imgui.cpp:7234
ImDrawListFlags Flags
Definition: imgui.h:1594
float GetScrollMaxX()
Definition: imgui.cpp:7363
Definition: imgui.h:586
ImGuiColorEditFlags_
Definition: imgui.h:927
ImVec2 FramePadding
Definition: imgui.h:1008
bool IsActive() const
Definition: imgui.h:1311
void SetTooltipV(const char *fmt, va_list args)
Definition: imgui.cpp:4891
bool BeginMenu(const char *label, bool enabled=true)
Definition: imgui.cpp:11531
Definition: imgui.h:849
Definition: imgui.h:755
bool DragInt(const char *label, int *v, float v_speed=1.0f, int v_min=0, int v_max=0, const char *format="%d")
Definition: imgui.cpp:9559
float GetTextLineHeightWithSpacing()
Definition: imgui.cpp:7246
Definition: imgui_internal.h:515
Definition: imgui.h:794
Definition: imgui.h:744
Definition: imgui.h:931
iterator insert(const_iterator it, const value_type &v)
Definition: imgui.h:1255
Definition: imgui.h:880
bool DragInt3(const char *label, int v[3], float v_speed=1.0f, int v_min=0, int v_max=0, const char *format="%d")
Definition: imgui.cpp:9569
Definition: imgui.h:620
void ListBoxFooter()
Definition: imgui.cpp:11324
bool InputScalarN(const char *label, ImGuiDataType data_type, void *v, int components, const void *step=NULL, const void *step_fast=NULL, const char *format=NULL, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10877
Definition: imgui.h:1315
unsigned short Width
Definition: imgui.h:1801
bool SliderInt(const char *label, int *v, int v_min, int v_max, const char *format="%d")
Definition: imgui.cpp:9212
void Clear()
Definition: imgui.h:1310
Definition: imgui.h:1578
void PrimVtx(const ImVec2 &pos, const ImVec2 &uv, ImU32 col)
Definition: imgui.h:1673
float CalcItemWidth()
Definition: imgui.cpp:6628
ImFontAtlasFlags_
Definition: imgui.h:1728
ImDrawCallback UserCallback
Definition: imgui.h:1528
int TotalIdxCount
Definition: imgui.h:1685
~ImGuiListClipper()
Definition: imgui.h:1504
int GetKeyPressedAmount(int key_index, float repeat_delay, float rate)
Definition: imgui.cpp:4638
Definition: imgui.h:1730
void LogToTTY(int max_depth=-1)
Definition: imgui.cpp:8006
#define IM_COL32_G_SHIFT
Definition: imgui.h:1450
float MouseDoubleClickMaxDist
Definition: imgui.h:1049
float GrabRounding
Definition: imgui.h:1019
ImGuiBackendFlags_
Definition: imgui.h:829
ImDrawVert * _VtxWritePtr
Definition: imgui.h:1600
Definition: imgui.h:754
ImGuiBackendFlags BackendFlags
Definition: imgui.h:1042
float FontGlobalScale
Definition: imgui.h:1057
ImVec2 GetCursorScreenPos()
Definition: imgui.cpp:7340
Definition: imgui.h:758
bool KeySuper
Definition: imgui.h:1104
void EndChildFrame()
Definition: imgui.cpp:5327
Definition: imgui.h:839
GLint texture_id
Definition: ym_gfx_sprite.c:21
Definition: imgui.h:807
float RasterizerMultiply
Definition: imgui.h:1711
bool BeginDragDropSource(ImGuiDragDropFlags flags=0)
Definition: imgui.cpp:13132
void push_back(const value_type &v)
Definition: imgui.h:1249
Definition: imgui.h:599
Definition: imgui.h:908
Definition: imgui.h:609
bool SliderFloat(const char *label, float *v, float v_min, float v_max, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9150
int TexGlyphPadding
Definition: imgui.h:1825
void PopItemWidth()
Definition: imgui.cpp:6621
Definition: imgui.h:606
void SetNextWindowBgAlpha(float alpha)
Definition: imgui.cpp:7193
bool TreeNodeV(const void *ptr_id, const char *fmt, va_list args)
Definition: imgui.cpp:8376
float KeyRepeatDelay
Definition: imgui.h:1052
Definition: imgui.h:618
void TreePop()
Definition: imgui.cpp:13069
iterator erase(const_iterator it)
Definition: imgui.h:1252
Definition: imgui.h:732
int OversampleV
Definition: imgui.h:1704
float MouseDragThreshold
Definition: imgui.h:1050
int TotalVtxCount
Definition: imgui.h:1686
value_type * iterator
Definition: imgui.h:1206
Definition: imgui.h:868
Definition: imgui.h:1342
bool ListBoxHeader(const char *label, int items_count, int height_in_items=-1)
Definition: imgui.cpp:11308
ImDrawList * GetOverlayDrawList()
Definition: imgui.cpp:2760
Definition: imgui.h:851
ImVec2 MousePosPrev
Definition: imgui.h:1135
Definition: imgui-SFML.cpp:166
int ImGuiDataType
Definition: imgui.h:84
bool IsDelivery() const
Definition: imgui.h:1438
ImVec2 TexUvWhitePixel
Definition: imgui.h:1834
bool AntiAliasedLines
Definition: imgui.h:1024
Definition: imgui.h:697
bool IsItemVisible()
Definition: imgui.cpp:4831
bool GetBit(int n)
Definition: imgui.h:1784
Definition: imgui.h:774
bool SliderFloat3(const char *label, float v[3], float v_min, float v_max, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9261
Definition: imgui.h:795
Definition: imgui.h:1570
bool BeginDragDropTarget()
Definition: imgui.cpp:13304
Definition: imgui.h:912
Definition: imgui.h:1843
void TextColoredV(const ImVec4 &col, const char *fmt, va_list args)
Definition: imgui.cpp:7467
Definition: imgui.h:853
void EndFrame()
Definition: imgui.cpp:4079
float GetTextLineHeight()
Definition: imgui.cpp:7240
bool Delivery
Definition: imgui.h:1432
void * Data
Definition: imgui.h:1423
ImVec4(float _x, float _y, float _z, float _w)
Definition: imgui.h:137
Definition: imgui.h:862
ImGuiConfigFlags ConfigFlags
Definition: imgui.h:1041
void PathLineToMergeDuplicate(const ImVec2 &pos)
Definition: imgui.h:1643
const char * e
Definition: imgui.h:1289
void PathLineTo(const ImVec2 &pos)
Definition: imgui.h:1642
ImWchar FallbackChar
Definition: imgui.h:1854
void IM_DELETE(T *p)
Definition: imgui.h:1267
int GetFrameCount()
Definition: imgui.cpp:2755
int OversampleH
Definition: imgui.h:1703
float FrameBorderSize
Definition: imgui.h:1010
void StyleColorsLight(ImGuiStyle *dst=NULL)
Definition: imgui_draw.cpp:254
bool empty()
Definition: imgui.h:1324
Definition: imgui.h:964
void * ImeWindowHandle
Definition: imgui.h:1081
const char * GetClipboardText()
Definition: imgui.cpp:2659
void SetNextWindowContentSize(const ImVec2 &size)
Definition: imgui.cpp:7172
ImGuiSelectableFlags_
Definition: imgui.h:664
Definition: imgui.h:985
Definition: imgui.h:1035
int GetKeyIndex(ImGuiKey imgui_key)
Definition: imgui.cpp:4614
void PopButtonRepeat()
Definition: imgui.cpp:6713
Definition: imgui.h:733
ImGuiComboFlags_
Definition: imgui.h:672
bool WantTextInput
Definition: imgui.h:1120
bool Checkbox(const char *label, bool *v)
Definition: imgui.cpp:9787
int TexDesiredWidth
Definition: imgui.h:1824
ImVector< ImDrawVert > VtxBuffer
Definition: imgui.h:1593
Definition: imgui.h:933
Definition: imgui.h:745
bool PixelSnapH
Definition: imgui.h:1705
Definition: imgui.h:984
bool ReadOnly
Definition: imgui.h:1387
void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond=0)
Definition: imgui.cpp:7179
ImVec2 WindowTitleAlign
Definition: imgui.h:1003
bool DragFloat3(const char *label, float v[3], float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9523
Definition: imgui.h:856
void LoadIniSettingsFromDisk(const char *ini_filename)
Definition: imgui.cpp:3820
#define IM_COL32_R_SHIFT
Definition: imgui.h:1449
ImDrawCornerFlags_
Definition: imgui.h:1563
ImVec2 MouseDelta
Definition: imgui.h:1129
unsigned int ElemCount
Definition: imgui.h:1525
ImVec2 GetItemRectMax()
Definition: imgui.cpp:4853
bool BufDirty
Definition: imgui.h:1398
Definition: imgui.h:641
ImVec4 Value
Definition: imgui.h:1466
float GetScrollY()
Definition: imgui.cpp:7358
void PushID(int int_id)
Definition: imgui.cpp:8465
int MetricsActiveWindows
Definition: imgui.h:1128
ImVec2 DisplayFramebufferScale
Definition: imgui.h:1060
int ImGuiSelectableFlags
Definition: imgui.h:103
void LogToClipboard(int max_depth=-1)
Definition: imgui.cpp:8050
float FallbackAdvanceX
Definition: imgui.h:1853
const char * begin() const
Definition: imgui.h:1321
Definition: imgui.h:678
Definition: imgui.h:967
void EndMenuBar()
Definition: imgui.cpp:11491
ImGuiDir_
Definition: imgui.h:741
void clear()
Definition: imgui.h:1325
ImVec2 ButtonTextAlign
Definition: imgui.h:1020
Definition: imgui.h:975
const char * GetVersion()
Definition: imgui.cpp:2670
bool InputFloat3(const char *label, float v[3], int decimal_precision, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10939
float MouseWheel
Definition: imgui.h:1098
float GetFrameHeight()
Definition: imgui.cpp:7252
ImGuiID SourceParentId
Definition: imgui.h:1428
char operator[](int i)
Definition: imgui.h:1320
Definition: imgui.h:816
CustomRect()
Definition: imgui.h:1806
bool KeyAlt
Definition: imgui.h:1103
void PushAllowKeyboardFocus(bool allow_keyboard_focus)
Definition: imgui.cpp:6698
unsigned long long ImU64
Definition: imgui.h:117
ImVector< float > IndexAdvanceX
Definition: imgui.h:1850
Definition: imgui.h:968
int ImGuiColumnsFlags
Definition: imgui.h:96
ImFont * DstFont
Definition: imgui.h:1715
float KeyRepeatRate
Definition: imgui.h:1053
Definition: imgui.h:601
iterator erase_unsorted(const_iterator it)
Definition: imgui.h:1254
ImVec2 pos
Definition: imgui.h:1543
Definition: imgui.h:852
ImVec2 TouchExtraPadding
Definition: imgui.h:1013
Definition: imgui.h:905
ImVec2 GetWindowPos()
Definition: imgui.cpp:6995
ImVector< ImDrawCmd > CmdBuffer
Definition: imgui.h:1559
ImColor(float r, float g, float b, float a=1.0f)
Definition: imgui.h:1471
int CursorPos
Definition: imgui.h:1399
ImGuiStyle & GetStyle()
Definition: imgui.cpp:2737
Definition: imgui.h:840
void TextWrappedV(const char *fmt, va_list args)
Definition: imgui.cpp:7497
void ColorConvertRGBtoHSV(float r, float g, float b, float &out_h, float &out_s, float &out_v)
Definition: imgui.cpp:1428
bool Combo(const char *label, int *current_item, bool(*items_getter)(void *data, int idx, const char **out_text), void *data, int items_count, int popup_max_height_in_items=-1)
int ImGuiCol
Definition: imgui.h:83
const char * b
Definition: imgui.h:1288
bool SliderInt2(const char *label, int v[2], int v_min, int v_max, const char *format="%d")
Definition: imgui.cpp:9271
Definition: imgui.h:917
ImWchar Codepoint
Definition: imgui.h:1722
int ImGuiNavInput
Definition: imgui.h:88
void SetItemAllowOverlap()
Definition: imgui.cpp:4838
bool SliderFloat2(const char *label, float v[2], float v_min, float v_max, const char *format="%.3f", float power=1.0f)
Definition: imgui.cpp:9256
Definition: imgui.h:877
void CloseCurrentPopup()
Definition: imgui.cpp:5029
void PopClipRect()
Definition: imgui.cpp:4071
const char * IniFilename
Definition: imgui.h:1046
Definition: imgui.h:648
Definition: imgui.h:885
void OpenPopup(const char *str_id)
Definition: imgui.cpp:4960
Definition: imgui.h:770
Definition: imgui.h:1571
float Y1
Definition: imgui.h:1724
Definition: imgui.h:635
const char * SaveIniSettingsToMemory(size_t *out_ini_size=NULL)
Definition: imgui.cpp:3918
ImGuiInputTextFlags_
Definition: imgui.h:614
float WindowBorderSize
Definition: imgui.h:1001
Definition: imgui.h:914
Definition: imgui.h:946
Definition: imgui.h:585
Definition: imgui.h:687
Definition: imgui.h:798
Definition: imgui.h:986
Pair(ImGuiID _key, float _val_f)
Definition: imgui.h:1347
Definition: imgui.h:788
void SetCursorScreenPos(const ImVec2 &screen_pos)
Definition: imgui.cpp:7346
Definition: imgui.h:870
ImVector< TextRange > Filters
Definition: imgui.h:1303
Definition: imgui.h:675
ImColor(const ImVec4 &col)
Definition: imgui.h:1472
iterator end()
Definition: imgui.h:1223
void SetCursorPosY(float y)
Definition: imgui.cpp:7327
float GlyphAdvanceX
Definition: imgui.h:1803
Definition: imgui.h:869
Definition: imgui.h:735
const char * end() const
Definition: imgui.h:1294
void AddChar(ImWchar c)
Definition: imgui.h:1786
float Scale
Definition: imgui.h:1847
ImVector< ImDrawIdx > IdxBuffer
Definition: imgui.h:1592
ImVector< ImFontConfig > ConfigData
Definition: imgui.h:1837
void Clear()
Definition: imgui.h:1435
ImDrawData * GetDrawData()
Definition: imgui.cpp:2744
void GLuint name
Definition: wglext.h:636
void ShowUserGuide()
Definition: imgui_demo.cpp:106
const ImVec4 & GetStyleColorVec4(ImGuiCol idx)
Definition: imgui.cpp:1410
Definition: imgui.h:587
ImFontConfig * ConfigData
Definition: imgui.h:1858
void Columns(int count=1, const char *id=NULL, bool border=true)
Definition: imgui.cpp:13012
int FontNo
Definition: imgui.h:1701
Definition: imgui.h:885
bool AntiAliasedFill
Definition: imgui.h:1025
void SetWindowFontScale(float scale)
Definition: imgui.cpp:7285
Definition: imgui_internal.h:594
Definition: imgui.h:820
float GetFrameHeightWithSpacing()
Definition: imgui.cpp:7258
Definition: imgui.h:646
bool IsMouseDoubleClicked(int button)
Definition: imgui.cpp:4709
ImFontAtlas * Fonts
Definition: imgui.h:1056
ImFont * FontDefault
Definition: imgui.h:1059
void StyleColorsClassic(ImGuiStyle *dst=NULL)
Definition: imgui_draw.cpp:204
Definition: imgui.h:1742
bool IsAnyItemActive()
Definition: imgui.cpp:4819
ImVec2 WindowPadding
Definition: imgui.h:999
ImGuiStyleVar_
Definition: imgui.h:894
float ItemsHeight
Definition: imgui.h:1497
void EndMenu()
Definition: imgui.cpp:11663
bool Begin(const char *name, bool *p_open, const ImVec2 &size_on_first_use, float bg_alpha_override=-1.0f, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:6379
Definition: imgui.h:721
void ColorConvertHSVtoRGB(float h, float s, float v, float &out_r, float &out_g, float &out_b)
Definition: imgui.cpp:1450
Definition: imgui.h:765
void PopID()
Definition: imgui.cpp:8472
void PrimWriteIdx(ImDrawIdx idx)
Definition: imgui.h:1672
float WindowRounding
Definition: imgui.h:1000
short ConfigDataCount
Definition: imgui.h:1857
bool SetDragDropPayload(const char *type, const void *data, size_t size, ImGuiCond cond=0)
Definition: imgui.cpp:13239
Definition: imgui.h:929
ImDrawListSharedData * GetDrawListSharedData()
Definition: imgui.cpp:2765
Definition: imgui.h:1382
float GetCursorPosY()
Definition: imgui.cpp:7307
void SetColorEditOptions(ImGuiColorEditFlags flags)
Definition: imgui.cpp:11749
Definition: imgui.h:879
Definition: imgui.h:787
void PathClear()
Definition: imgui.h:1641
Definition: imgui.h:954
void SetKeyboardFocusHere(int offset=0)
Definition: imgui.cpp:7411
void Value(const char *prefix, float v, const char *float_format=NULL)
Definition: imgui.cpp:13102
float ScrollbarSize
Definition: imgui.h:1016
void * ImTextureID
Definition: imgui.h:75
void LogFinish()
Definition: imgui.cpp:8065
bool IsPreview() const
Definition: imgui.h:1437
const HANDLE const LPVOID const DWORD UINT count
Definition: wglext.h:590
const_iterator end() const
Definition: imgui.h:1224
bool OptMacOSXBehaviors
Definition: imgui.h:1065
static ImColor HSV(float h, float s, float v, float a=1.0f)
Definition: imgui.h:1478
float AdvanceX
Definition: imgui.h:1723
ImGuiFocusedFlags_
Definition: imgui.h:685
void SetScrollX(float scroll_x)
Definition: imgui.cpp:7373
Definition: imgui.h:1579
Definition: imgui.h:698
void PopFont()
Definition: imgui.cpp:6673
float y
Definition: imgui.h:135
void Render()
Definition: imgui.cpp:4169
void TreeAdvanceToLabelPos()
Definition: imgui.cpp:8425
float x
Definition: imgui.h:123
bool InputInt(const char *label, int *v, int step=1, int step_fast=100, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10870
Definition: imgui.h:786
ImU32 GetColorU32(ImU32 col)
Definition: imgui.cpp:1416
bool InputFloat(const char *label, float *v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags=0)
Definition: imgui.cpp:10923
ImVec4 ColorConvertU32ToFloat4(ImU32 in)
Definition: imgui.cpp:1374
float PopupRounding
Definition: imgui.h:1006
void PopStyleColor(int count=1)
Definition: imgui.cpp:6753
Definition: imgui.h:799
Definition: imgui.h:584
ImGuiHoveredFlags_
Definition: imgui.h:695
Definition: imgui.h:805
Definition: imgui.h:764
bool RadioButton(const char *label, int *v, int v_button)
Definition: imgui.cpp:9909
ImVector< unsigned short > IndexLookup
Definition: imgui.h:1851
ImVec2 TexUvScale
Definition: imgui.h:1833
ImVector< ImVec4 > _ClipRectStack
Definition: imgui.h:1602
void EndMainMenuBar()
Definition: imgui.cpp:11450
void * FontData
Definition: imgui.h:1698
value_type & back()
Definition: imgui.h:1227
bool DirtyLookupTables
Definition: imgui.h:1861
ImVec2 GetClipRectMax() const
Definition: imgui.h:1618
bool IsAnyMouseDown()
Definition: imgui.cpp:4675
Definition: imgui.h:859
void NewLine()
Definition: imgui.cpp:12695
bool IsPopupOpen(const char *str_id)
Definition: imgui.cpp:5079
bool IsRectVisible(const ImVec2 &rect_min, const ImVec2 &rect_max)
Definition: imgui.cpp:12598
const char * GetDebugName() const
Definition: imgui.h:1874
int size() const
Definition: imgui.h:1215