VR-Vantage 3.1.1 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
imgui.h
Go to the documentation of this file.
1 //VRV_PATCH
2 #include <vrvImgui/vrvImgui.h>
3 
4 // dear imgui, v1.85
5 // (headers)
6 
7 // Help:
8 // - Read FAQ at http://dearimgui.org/faq
9 // - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
10 // - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp. All applications in examples/ are doing that.
11 // Read imgui.cpp for details, links and comments.
12 
13 // Resources:
14 // - FAQ http://dearimgui.org/faq
15 // - Homepage & latest https://github.com/ocornut/imgui
16 // - Releases & changelog https://github.com/ocornut/imgui/releases
17 // - Gallery https://github.com/ocornut/imgui/issues/4451 (please post your screenshots/video there!)
18 // - Wiki https://github.com/ocornut/imgui/wiki (lots of good stuff there)
19 // - Glossary https://github.com/ocornut/imgui/wiki/Glossary
20 // - Issues & support https://github.com/ocornut/imgui/issues
21 
22 // Getting Started?
23 // - For first-time users having issues compiling/linking/running or issues loading fonts:
24 // please post in https://github.com/ocornut/imgui/discussions if you cannot find a solution in resources above.
25 
26 /*
27 
28 Index of this file:
29 // [SECTION] Header mess
30 // [SECTION] Forward declarations and basic types
31 // [SECTION] Dear ImGui end-user API functions
32 // [SECTION] Flags & Enumerations
33 // [SECTION] Helpers: Memory allocations macros, ImVector<>
34 // [SECTION] ImGuiStyle
35 // [SECTION] ImGuiIO
36 // [SECTION] Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload, ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs)
37 // [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
38 // [SECTION] Drawing API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawListFlags, ImDrawList, ImDrawData)
39 // [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont)
40 // [SECTION] Viewports (ImGuiViewportFlags, ImGuiViewport)
41 // [SECTION] Obsolete functions and types
42 
43 */
44 
45 #pragma once
46 
47 // Configuration file with compile-time options (edit imconfig.h or '#define IMGUI_USER_CONFIG "myfilename.h" from your build system')
48 #ifdef IMGUI_USER_CONFIG
49 #include IMGUI_USER_CONFIG
50 #endif
51 #if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H)
52 #include "imconfig.h"
53 #endif
54 
55 #ifndef IMGUI_DISABLE
56 
57 //-----------------------------------------------------------------------------
58 // [SECTION] Header mess
59 //-----------------------------------------------------------------------------
60 
61 // Includes
62 #include <float.h> // FLT_MIN, FLT_MAX
63 #include <stdarg.h> // va_list, va_start, va_end
64 #include <stddef.h> // ptrdiff_t, NULL
65 #include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
66 
67 // Version
68 // (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
69 #define IMGUI_VERSION "1.85"
70 #define IMGUI_VERSION_NUM 18500
71 #define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
72 #define IMGUI_HAS_TABLE
73 
74 // Define attributes of all API symbols declarations (e.g. for DLL under Windows)
75 // IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default backends files (imgui_impl_xxx.h)
76 // Using dear imgui via a shared library is not recommended, because we don't guarantee backward nor forward ABI compatibility (also function call overhead, as dear imgui is a call-heavy API)
77 #ifndef IMGUI_API
78 #define IMGUI_API
79 #endif
80 #ifndef IMGUI_IMPL_API
81 #define IMGUI_IMPL_API IMGUI_API
82 #endif
83 
84 // Helper Macros
85 #ifndef IM_ASSERT
86 #include <assert.h>
87 #define IM_ASSERT(_EXPR) assert(_EXPR) // You can override the default assert handler by editing imconfig.h
88 #endif
89 #define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR) / sizeof(*(_ARR)))) // Size of a static C-style array. Don't use on pointers!
90 #define IM_UNUSED(_VAR) ((void)(_VAR)) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
91 #if (__cplusplus >= 201100) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201100)
92 #define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
93 #else
94 #define IM_OFFSETOF(_TYPE,_MEMBER) ((size_t)&(((_TYPE*)0)->_MEMBER)) // Offset of _MEMBER within _TYPE. Old style macro.
95 #endif
96 
97 // Helper Macros - IM_FMTARGS, IM_FMTLIST: Apply printf-style warnings to our formatting functions.
98 #if !defined(IMGUI_USE_STB_SPRINTF) && defined(__MINGW32__) && !defined(__clang__)
99 #define IM_FMTARGS(FMT) __attribute__((format(gnu_printf, FMT, FMT+1)))
100 #define IM_FMTLIST(FMT) __attribute__((format(gnu_printf, FMT, 0)))
101 #elif !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__))
102 #define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1)))
103 #define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
104 #else
105 #define IM_FMTARGS(FMT)
106 #define IM_FMTLIST(FMT)
107 #endif
108 
109 // Disable some of MSVC most aggressive Debug runtime checks in function header/footer (used in some simple/low-level functions)
110 #if defined(_MSC_VER) && !defined(__clang__) && !defined(IMGUI_DEBUG_PARANOID)
111 #define IM_MSVC_RUNTIME_CHECKS_OFF __pragma(runtime_checks("",off)) __pragma(check_stack(off)) __pragma(strict_gs_check(push,off))
112 #define IM_MSVC_RUNTIME_CHECKS_RESTORE __pragma(runtime_checks("",restore)) __pragma(check_stack()) __pragma(strict_gs_check(pop))
113 #else
114 #define IM_MSVC_RUNTIME_CHECKS_OFF
115 #define IM_MSVC_RUNTIME_CHECKS_RESTORE
116 #endif
117 
118 // Warnings
119 #ifdef _MSC_VER
120 #pragma warning (push)
121 #pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
122 #endif
123 #if defined(__clang__)
124 #pragma clang diagnostic push
125 #pragma clang diagnostic ignored "-Wold-style-cast"
126 #if __has_warning("-Wzero-as-null-pointer-constant")
127 #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
128 #endif
129 #elif defined(__GNUC__)
130 #pragma GCC diagnostic push
131 #pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
132 #pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
133 #endif
134 
135 //-----------------------------------------------------------------------------
136 // [SECTION] Forward declarations and basic types
137 //-----------------------------------------------------------------------------
138 
139 // Forward declarations
140 struct ImDrawChannel; // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit()
141 struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback)
142 struct ImDrawData; // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix.
143 struct ImDrawList; // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder)
144 struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself)
145 struct ImDrawListSplitter; // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back.
146 struct ImDrawVert; // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
147 struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
148 struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
149 struct ImFontBuilderIO; // Opaque interface to a font builder (stb_truetype or FreeType).
150 struct ImFontConfig; // Configuration data when adding a font or merging fonts
151 struct ImFontGlyph; // A single font glyph (code point + coordinates within in ImFontAtlas + offset)
152 struct ImFontGlyphRangesBuilder; // Helper to build glyph ranges from text/string data
153 struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using)
154 struct ImGuiContext; // Dear ImGui context (opaque structure, unless including imgui_internal.h)
155 struct ImGuiIO; // Main configuration and I/O between your application and ImGui
156 struct ImGuiInputTextCallbackData; // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use)
157 struct ImGuiListClipper; // Helper to manually clip large list of items
158 struct ImGuiOnceUponAFrame; // Helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro
159 struct ImGuiPayload; // User data payload for drag and drop operations
160 struct ImGuiSizeCallbackData; // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use)
161 struct ImGuiStorage; // Helper for key->value storage
162 struct ImGuiStyle; // Runtime data for styling/colors
163 struct ImGuiTableSortSpecs; // Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
164 struct ImGuiTableColumnSortSpecs; // Sorting specification for one column of a table
165 struct ImGuiTextBuffer; // Helper to hold and append into a text buffer (~string builder)
166 struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbbb][,ccccc]")
167 struct ImGuiViewport; // A Platform Window (always only one in 'master' branch), in the future may represent Platform Monitor
168 
169 // Enums/Flags (declared as int for compatibility with old C++, to allow using as flags without overhead, and to not pollute the top of this file)
170 // - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists!
171 // In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
172 // With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
173 typedef int ImGuiCol; // -> enum ImGuiCol_ // Enum: A color identifier for styling
174 typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for many Set*() functions
175 typedef int ImGuiDataType; // -> enum ImGuiDataType_ // Enum: A primary data type
176 typedef int ImGuiDir; // -> enum ImGuiDir_ // Enum: A cardinal direction
177 typedef int ImGuiKey; // -> enum ImGuiKey_ // Enum: A key identifier (ImGui-side enum)
178 typedef int ImGuiNavInput; // -> enum ImGuiNavInput_ // Enum: An input identifier for navigation
179 typedef int ImGuiMouseButton; // -> enum ImGuiMouseButton_ // Enum: A mouse button identifier (0=left, 1=right, 2=middle)
180 typedef int ImGuiMouseCursor; // -> enum ImGuiMouseCursor_ // Enum: A mouse cursor identifier
181 typedef int ImGuiSortDirection; // -> enum ImGuiSortDirection_ // Enum: A sorting direction (ascending or descending)
182 typedef int ImGuiStyleVar; // -> enum ImGuiStyleVar_ // Enum: A variable identifier for styling
183 typedef int ImGuiTableBgTarget; // -> enum ImGuiTableBgTarget_ // Enum: A color target for TableSetBgColor()
184 typedef int ImDrawFlags; // -> enum ImDrawFlags_ // Flags: for ImDrawList functions
185 typedef int ImDrawListFlags; // -> enum ImDrawListFlags_ // Flags: for ImDrawList instance
186 typedef int ImFontAtlasFlags; // -> enum ImFontAtlasFlags_ // Flags: for ImFontAtlas build
187 typedef int ImGuiBackendFlags; // -> enum ImGuiBackendFlags_ // Flags: for io.BackendFlags
188 typedef int ImGuiButtonFlags; // -> enum ImGuiButtonFlags_ // Flags: for InvisibleButton()
189 typedef int ImGuiColorEditFlags; // -> enum ImGuiColorEditFlags_ // Flags: for ColorEdit4(), ColorPicker4() etc.
190 typedef int ImGuiConfigFlags; // -> enum ImGuiConfigFlags_ // Flags: for io.ConfigFlags
191 typedef int ImGuiComboFlags; // -> enum ImGuiComboFlags_ // Flags: for BeginCombo()
192 typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: for BeginDragDropSource(), AcceptDragDropPayload()
193 typedef int ImGuiFocusedFlags; // -> enum ImGuiFocusedFlags_ // Flags: for IsWindowFocused()
194 typedef int ImGuiHoveredFlags; // -> enum ImGuiHoveredFlags_ // Flags: for IsItemHovered(), IsWindowHovered() etc.
195 typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText(), InputTextMultiline()
196 typedef int ImGuiKeyModFlags; // -> enum ImGuiKeyModFlags_ // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super)
197 typedef int ImGuiPopupFlags; // -> enum ImGuiPopupFlags_ // Flags: for OpenPopup*(), BeginPopupContext*(), IsPopupOpen()
198 typedef int ImGuiSelectableFlags; // -> enum ImGuiSelectableFlags_ // Flags: for Selectable()
199 typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc.
200 typedef int ImGuiTabBarFlags; // -> enum ImGuiTabBarFlags_ // Flags: for BeginTabBar()
201 typedef int ImGuiTabItemFlags; // -> enum ImGuiTabItemFlags_ // Flags: for BeginTabItem()
202 typedef int ImGuiTableFlags; // -> enum ImGuiTableFlags_ // Flags: For BeginTable()
203 typedef int ImGuiTableColumnFlags; // -> enum ImGuiTableColumnFlags_// Flags: For TableSetupColumn()
204 typedef int ImGuiTableRowFlags; // -> enum ImGuiTableRowFlags_ // Flags: For TableNextRow()
205 typedef int ImGuiTreeNodeFlags; // -> enum ImGuiTreeNodeFlags_ // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader()
206 typedef int ImGuiViewportFlags; // -> enum ImGuiViewportFlags_ // Flags: for ImGuiViewport
207 typedef int ImGuiWindowFlags; // -> enum ImGuiWindowFlags_ // Flags: for Begin(), BeginChild()
208 
209 // ImTexture: user data for renderer backend to identify a texture [Compile-time configurable type]
210 // - To use something else than an opaque void* pointer: override with e.g. '#define ImTextureID MyTextureType*' in your imconfig.h file.
211 // - This can be whatever to you want it to be! read the FAQ about ImTextureID for details.
212 #ifndef ImTextureID
213 typedef void* ImTextureID; // Default: store a pointer or an integer fitting in a pointer (most renderer backends are ok with that)
214 #endif
215 
216 // ImDrawIdx: vertex index. [Compile-time configurable type]
217 // - To use 16-bit indices + allow large meshes: backend need to set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset (recommended).
218 // - To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in your imconfig.h file.
219 #ifndef ImDrawIdx
220 typedef unsigned short ImDrawIdx; // Default: 16-bit (for maximum compatibility with renderer backends)
221 #endif
222 
223 // Scalar data types
224 typedef unsigned int ImGuiID;// A unique ID used by widgets (typically the result of hashing a stack of string)
225 typedef signed char ImS8; // 8-bit signed integer
226 typedef unsigned char ImU8; // 8-bit unsigned integer
227 typedef signed short ImS16; // 16-bit signed integer
228 typedef unsigned short ImU16; // 16-bit unsigned integer
229 typedef signed int ImS32; // 32-bit signed integer == int
230 typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors)
231 #if defined(_MSC_VER) && !defined(__clang__)
232 typedef signed __int64 ImS64; // 64-bit signed integer (pre and post C++11 with Visual Studio)
233 typedef unsigned __int64 ImU64; // 64-bit unsigned integer (pre and post C++11 with Visual Studio)
234 #elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100)
235 #include <stdint.h>
236 typedef int64_t ImS64; // 64-bit signed integer (pre C++11)
237 typedef uint64_t ImU64; // 64-bit unsigned integer (pre C++11)
238 #else
239 typedef signed long long ImS64; // 64-bit signed integer (post C++11)
240 typedef unsigned long long ImU64; // 64-bit unsigned integer (post C++11)
241 #endif
242 
243 // Character types
244 // (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display)
245 typedef unsigned short ImWchar16; // A single decoded U16 character/code point. We encode them as multi bytes UTF-8 when used in strings.
246 typedef unsigned int ImWchar32; // A single decoded U32 character/code point. We encode them as multi bytes UTF-8 when used in strings.
247 #ifdef IMGUI_USE_WCHAR32 // ImWchar [configurable type: override in imconfig.h with '#define IMGUI_USE_WCHAR32' to support Unicode planes 1-16]
248 typedef ImWchar32 ImWchar;
249 #else
251 #endif
252 
253 // Callback and functions types
254 typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData* data); // Callback function for ImGui::InputText()
255 typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); // Callback function for ImGui::SetNextWindowSizeConstraints()
256 typedef void* (*ImGuiMemAllocFunc)(size_t sz, void* user_data); // Function signature for ImGui::SetAllocatorFunctions()
257 typedef void (*ImGuiMemFreeFunc)(void* ptr, void* user_data); // Function signature for ImGui::SetAllocatorFunctions()
258 
259 // ImVec2: 2D vector used to store positions, sizes etc. [Compile-time configurable type]
260 // This is a frequently used type in the API. Consider using IM_VEC2_CLASS_EXTRA to create implicit cast from/to our preferred type.
262 struct ImVec2
263 {
264  float x, y;
265  ImVec2() { x = y = 0.0f; }
266  ImVec2(float _x, float _y) { x = _x; y = _y; }
267  float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
268  float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
269 #ifdef IM_VEC2_CLASS_EXTRA
270  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.
271 #endif
272 };
273 
274 // ImVec4: 4D vector used to store clipping rectangles, colors etc. [Compile-time configurable type]
275 struct ImVec4
276 {
277  float x, y, z, w;
278  ImVec4() { x = y = z = w = 0.0f; }
279  ImVec4(float _x, float _y, float _z, float _w) { x = _x; y = _y; z = _z; w = _w; }
280 #ifdef IM_VEC4_CLASS_EXTRA
281  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.
282 #endif
283 };
285 
286 //-----------------------------------------------------------------------------
287 // [SECTION] Dear ImGui end-user API functions
288 // (Note that ImGui:: being a namespace, you can add extra ImGui:: functions in your own separate file. Please don't modify imgui source files!)
289 //-----------------------------------------------------------------------------
290 
291 namespace ImGui
292 {
293  // Context creation and access
294  // - Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between contexts.
295  // - DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
296  // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for details.
297  IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
298  IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
301 
302  // Main
303  IMGUI_API ImGuiIO& GetIO(); // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags)
304  IMGUI_API ImGuiStyle& GetStyle(); // access the Style structure (colors, sizes). Always use PushStyleCol(), PushStyleVar() to modify style mid-frame!
305  IMGUI_API void NewFrame(); // start a new Dear ImGui frame, you can submit any command from this point until Render()/EndFrame().
306  IMGUI_API void EndFrame(); // ends the Dear ImGui frame. automatically called by Render(). If you don't need to render data (skipping rendering) you may call EndFrame() without Render()... but you'll have wasted CPU already! If you don't need to render, better to not create any windows and not call NewFrame() at all!
307  IMGUI_API void Render(); // ends the Dear ImGui frame, finalize the draw data. You can then get call GetDrawData().
308  IMGUI_API ImDrawData* GetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render.
309 
310  // Demo, Debug, Information
311  IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
312  IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc.
313  IMGUI_API void ShowStackToolWindow(bool* p_open = NULL); // create Stack Tool window. hover items with mouse to query information about the source of their unique ID.
314  IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information.
315  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)
316  IMGUI_API bool ShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles.
317  IMGUI_API void ShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts.
318  IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
319  IMGUI_API const char* GetVersion(); // get the compiled version string e.g. "1.80 WIP" (essentially the value for IMGUI_VERSION from the compiled version of imgui.cpp)
320 
321  // Styles
322  IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style (default)
323  IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font
324  IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style
325 
326  // Windows
327  // - Begin() = push window to the stack and start appending to it. End() = pop window from the stack.
328  // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window,
329  // which clicking will set the boolean to false when clicked.
330  // - You may append multiple times to the same window during the same frame by calling Begin()/End() pairs multiple times.
331  // Some information such as 'flags' or 'p_open' will only be considered by the first call to Begin().
332  // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
333  // anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
334  // [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
335  // BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
336  // returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
337  // - Note that the bottom of window stack always contains a window called "Debug".
338  IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
339  IMGUI_API void End();
340 
341  // Child Windows
342  // - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
343  // - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
344  // - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
345  // Always call a matching EndChild() for each BeginChild() call, regardless of its return value.
346  // [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
347  // BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
348  // returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
349  IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0, 0), bool border = false, ImGuiWindowFlags flags = 0);
350  IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0, 0), bool border = false, ImGuiWindowFlags flags = 0);
351  IMGUI_API void EndChild();
352 
353  // Windows Utilities
354  // - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into.
357  IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
358  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!
359  IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the current window, to append your own drawing primitives
360  IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList API)
361  IMGUI_API ImVec2 GetWindowSize(); // get current window size
362  IMGUI_API float GetWindowWidth(); // get current window width (shortcut for GetWindowSize().x)
363  IMGUI_API float GetWindowHeight(); // get current window height (shortcut for GetWindowSize().y)
364 
365  // Window manipulation
366  // - Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin).
367  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.
368  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()
369  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. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints.
370  IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin()
371  IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
372  IMGUI_API void SetNextWindowFocus(); // set next window to be focused / top-most. call before Begin()
373  IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily override the Alpha component of ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground.
374  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.
375  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.
376  IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
377  IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus().
378  IMGUI_API void SetWindowFontScale(float scale); // [OBSOLETE] set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes().
379  IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position.
380  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.
381  IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state
382  IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / top-most. use NULL to remove focus.
383 
384  // Content region
385  // - Retrieve available space from a given point. GetContentRegionAvail() is frequently useful.
386  // - Those functions are bound to be redesigned (they are confusing, incomplete and the Min/Max return values are in local window coordinates which increases confusion)
387  IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos()
388  IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
389  IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min for the full window (roughly (0,0)-Scroll), in window coordinates
390  IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max for the full window (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
391 
392  // Windows Scrolling
393  IMGUI_API float GetScrollX(); // get scrolling amount [0 .. GetScrollMaxX()]
394  IMGUI_API float GetScrollY(); // get scrolling amount [0 .. GetScrollMaxY()]
395  IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0 .. GetScrollMaxX()]
396  IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0 .. GetScrollMaxY()]
397  IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.x - WindowSize.x - DecorationsSize.x
398  IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.y - WindowSize.y - DecorationsSize.y
399  IMGUI_API void SetScrollHereX(float center_x_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
400  IMGUI_API void SetScrollHereY(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.
401  IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
402  IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
403 
404  // Parameters stacks (shared)
405  IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
406  IMGUI_API void PopFont();
407  IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); // modify a style color. always use this if you modify the style after NewFrame().
408  IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
409  IMGUI_API void PopStyleColor(int count = 1);
410  IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); // modify a style float variable. always use this if you modify the style after NewFrame().
411  IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); // modify a style ImVec2 variable. always use this if you modify the style after NewFrame().
412  IMGUI_API void PopStyleVar(int count = 1);
413  IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // == tab stop enable. Allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
415  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.
416  IMGUI_API void PopButtonRepeat();
417 
418  // Parameters stacks (current window)
419  IMGUI_API void PushItemWidth(float item_width); // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side).
420  IMGUI_API void PopItemWidth();
421  IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side)
422  IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
423  IMGUI_API void PushTextWrapPos(float wrap_local_pos_x = 0.0f); // push word-wrapping position 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
424  IMGUI_API void PopTextWrapPos();
425 
426  // Style read access
427  // - Use the style editor (ShowStyleEditor() function) to interactively see what the colors are)
428  IMGUI_API ImFont* GetFont(); // get current font
429  IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied
430  IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
431  IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier, packed as a 32-bit value suitable for ImDrawList
432  IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied, packed as a 32-bit value suitable for ImDrawList
433  IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied, packed as a 32-bit value suitable for ImDrawList
434  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.
435 
436  // Cursor / Layout
437  // - By "cursor" we mean the current output position.
438  // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
439  // - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceding widget.
440  // - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API:
441  // Window-local coordinates: SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos()
442  // Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions.
443  IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
444  IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates.
445  IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in an horizontal-layout context.
446  IMGUI_API void Spacing(); // add vertical spacing.
447  IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into.
448  IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by indent_w, or style.IndentSpacing if indent_w <= 0
449  IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by indent_w, or style.IndentSpacing if indent_w <= 0
450  IMGUI_API void BeginGroup(); // lock horizontal starting position
451  IMGUI_API void EndGroup(); // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
452  IMGUI_API ImVec2 GetCursorPos(); // cursor position in window coordinates (relative to window position)
453  IMGUI_API float GetCursorPosX(); // (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc.
454  IMGUI_API float GetCursorPosY(); // other functions such as GetCursorScreenPos or everything in ImDrawList::
455  IMGUI_API void SetCursorPos(const ImVec2& local_pos); // are using the main, absolute coordinate system.
456  IMGUI_API void SetCursorPosX(float local_x); // GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.)
457  IMGUI_API void SetCursorPosY(float local_y); //
458  IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position in window coordinates
459  IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute coordinates (useful to work with ImDrawList API). generally top-left == GetMainViewport()->Pos == (0,0) in single viewport mode, and bottom-right == GetMainViewport()->Pos+Size == io.DisplaySize in single-viewport mode.
460  IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute coordinates
461  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)
462  IMGUI_API float GetTextLineHeight(); // ~ FontSize
463  IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text)
464  IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2
465  IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets)
466 
467  // ID stack/scopes
468  // Read the FAQ (docs/FAQ.md or http://dearimgui.org/faq) for more details about how ID are handled in dear imgui.
469  // - Those questions are answered and impacted by understanding of the ID stack system:
470  // - "Q: Why is my widget not reacting when I click on it?"
471  // - "Q: How can I have widgets with an empty label?"
472  // - "Q: How can I have multiple widgets with the same label?"
473  // - Short version: ID are hashes of the entire ID stack. If you are creating widgets in a loop you most likely
474  // want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
475  // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others.
476  // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed + used as an ID,
477  // whereas "str_id" denote a string that is only used as an ID and not normally displayed.
478  IMGUI_API void PushID(const char* str_id); // push string into the ID stack (will hash string).
479  IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); // push string into the ID stack (will hash string).
480  IMGUI_API void PushID(const void* ptr_id); // push pointer into the ID stack (will hash pointer).
481  IMGUI_API void PushID(int int_id); // push integer into the ID stack (will hash integer).
482  IMGUI_API void PopID(); // pop from the ID stack.
483  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
484  IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
485  IMGUI_API ImGuiID GetID(const void* ptr_id);
486 
487  // Widgets: Text
488  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.
489  IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // formatted text
490  IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
491  IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
492  IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
493  IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
494  IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1);
495  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().
496  IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1);
497  IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
498  IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2);
499  IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text()
500  IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1);
501 
502  // Widgets: Main
503  // - Most widgets return true when the value has been changed or when pressed/selected
504  // - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state.
505  IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0, 0)); // button
506  IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
507  IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size, ImGuiButtonFlags flags = 0); // flexible button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
508  IMGUI_API bool ArrowButton(const char* str_id, ImGuiDir dir); // square button with an arrow shape
509  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));
510  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
511  IMGUI_API bool Checkbox(const char* label, bool* v);
512  IMGUI_API bool CheckboxFlags(const char* label, int* flags, int flags_value);
513  IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
514  IMGUI_API bool RadioButton(const char* label, bool active); // use with e.g. if (RadioButton("one", my_value==1)) { my_value = 1; }
515  IMGUI_API bool RadioButton(const char* label, int* v, int v_button); // shortcut to handle the above pattern when value is an integer
516  IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-FLT_MIN, 0), const char* overlay = NULL);
517  IMGUI_API void Bullet(); // draw a small circle + keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
518 
519  // Widgets: Combo Box
520  // - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
521  // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. This is analogous to how ListBox are created.
522  IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
523  IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true!
524  IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1);
525  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"
526  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);
527 
528  // Widgets: Drag Sliders
529  // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp.
530  // - 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
531  // - 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.
532  // - Format string may also be set to NULL or use the default format ("%f" or "%d").
533  // - 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).
534  // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits if ImGuiSliderFlags_AlwaysClamp is not used.
535  // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum.
536  // - We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them.
537  // - Legacy: Pre-1.78 there are DragXXX() function signatures that takes a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument.
538  // If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361
539  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", ImGuiSliderFlags flags = 0); // If v_min >= v_max we have no bound
540  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", ImGuiSliderFlags flags = 0);
541  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", ImGuiSliderFlags flags = 0);
542  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", ImGuiSliderFlags flags = 0);
543  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, ImGuiSliderFlags flags = 0);
544  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", ImGuiSliderFlags flags = 0); // If v_min >= v_max we have no bound
545  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", ImGuiSliderFlags flags = 0);
546  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", ImGuiSliderFlags flags = 0);
547  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", ImGuiSliderFlags flags = 0);
548  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, ImGuiSliderFlags flags = 0);
549  IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed = 1.0f, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiSliderFlags flags = 0);
550  IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed = 1.0f, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiSliderFlags flags = 0);
551 
552  // Widgets: Regular Sliders
553  // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp.
554  // - 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.
555  // - Format string may also be set to NULL or use the default format ("%f" or "%d").
556  // - Legacy: Pre-1.78 there are SliderXXX() function signatures that takes a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument.
557  // If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361
558  IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display.
559  IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
560  IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
561  IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
562  IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg", ImGuiSliderFlags flags = 0);
563  IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
564  IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
565  IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
566  IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
567  IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0);
568  IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0);
569  IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
570  IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
571  IMGUI_API bool VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0);
572 
573  // Widgets: Input with Keyboard
574  // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp.
575  // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc.
576  IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
577  IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
578  IMGUI_API bool InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
579  IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
580  IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
581  IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
582  IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
583  IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0);
584  IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0);
585  IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0);
586  IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0);
587  IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0);
588  IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
589  IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
590 
591  // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little color square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
592  // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible.
593  // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
594  IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
595  IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
596  IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
597  IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
598  IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0, 0)); // display a color square/button, hover for details, return true when pressed.
599  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.
600 
601  // Widgets: Trees
602  // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents.
603  IMGUI_API bool TreeNode(const char* label);
604  IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // helper variation to easily decorelate the id from the displayed string. 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().
605  IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // "
606  IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
607  IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
608  IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
609  IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
610  IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
611  IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
612  IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
613  IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired.
614  IMGUI_API void TreePush(const void* ptr_id = NULL); // "
615  IMGUI_API void TreePop(); // ~ Unindent()+PopId()
616  IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
617  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().
618  IMGUI_API bool CollapsingHeader(const char* label, bool* p_visible, ImGuiTreeNodeFlags flags = 0); // when 'p_visible != NULL': if '*p_visible==true' display an additional small close button on upper right of the header which will set the bool to false when clicked, if '*p_visible==false' don't display the header.
619  IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
620 
621  // Widgets: Selectables
622  // - A selectable highlights when hovered, and can display another color when selected.
623  // - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous.
624  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
625  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.
626 
627  // Widgets: List Boxes
628  // - This is essentially a thin wrapper to using BeginChild/EndChild with some stylistic changes.
629  // - The BeginListBox()/EndListBox() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() or any items.
630  // - The simplified/old ListBox() api are helpers over BeginListBox()/EndListBox() which are kept available for convenience purpose. This is analoguous to how Combos are created.
631  // - Choose frame width: size.x > 0.0f: custom / size.x < 0.0f or -FLT_MIN: right-align / size.x = 0.0f (default): use current ItemWidth
632  // - Choose frame height: size.y > 0.0f: custom / size.y < 0.0f or -FLT_MIN: bottom-align / size.y = 0.0f (default): arbitrary default height which can fit ~7 items
633  IMGUI_API bool BeginListBox(const char* label, const ImVec2& size = ImVec2(0, 0)); // open a framed scrolling region
634  IMGUI_API void EndListBox(); // only call EndListBox() if BeginListBox() returned true!
635  IMGUI_API bool ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1);
636  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);
637 
638  // Widgets: Data Plotting
639  // - Consider using ImPlot (https://github.com/epezent/implot) which is much better!
640  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));
641  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));
642  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));
643  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));
644 
645  // Widgets: Value() Helpers.
646  // - Those are merely shortcut to calling Text() with a format string. 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)
647  IMGUI_API void Value(const char* prefix, bool b);
648  IMGUI_API void Value(const char* prefix, int v);
649  IMGUI_API void Value(const char* prefix, unsigned int v);
650  IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
651 
652  // Widgets: Menus
653  // - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar.
654  // - Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it.
655  // - Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it.
656  // - Not that MenuItem() keyboardshortcuts are displayed as a convenience but _not processed_ by Dear ImGui at the moment.
657  IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
658  IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true!
659  IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar.
660  IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
661  IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true!
662  IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true!
663  IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated.
664  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
665 
666  // Tooltips
667  // - Tooltip are windows following the mouse. They do not take focus away.
668  IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
669  IMGUI_API void EndTooltip();
670  IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
671  IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
672 
673  // Popups, Modals
674  // - They block normal mouse hovering detection (and therefore most mouse interactions) behind them.
675  // - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
676  // - Their visibility state (~bool) is held internally instead of being held by the programmer as we are used to with regular Begin*() calls.
677  // - The 3 properties above are related: we need to retain popup visibility state in the library because popups may be closed as any time.
678  // - You can bypass the hovering restriction by using ImGuiHoveredFlags_AllowWhenBlockedByPopup when calling IsItemHovered() or IsWindowHovered().
679  // - IMPORTANT: Popup identifiers are relative to the current ID stack, so OpenPopup and BeginPopup generally needs to be at the same level of the stack.
680  // This is sometimes leading to confusing mistakes. May rework this in the future.
681 
682  // Popups: begin/end functions
683  // - BeginPopup(): query popup state, if open start appending into the window. Call EndPopup() afterwards. ImGuiWindowFlags are forwarded to the window.
684  // - BeginPopupModal(): block every interactions behind the window, cannot be closed by user, add a dimming background, has a title bar.
685  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.
686  IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // return true if the modal is open, and you can start outputting to it.
687  IMGUI_API void EndPopup(); // only call EndPopup() if BeginPopupXXX() returns true!
688 
689  // Popups: open/close functions
690  // - OpenPopup(): set popup state to open. ImGuiPopupFlags are available for opening options.
691  // - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
692  // - CloseCurrentPopup(): use inside the BeginPopup()/EndPopup() scope to close manually.
693  // - CloseCurrentPopup() is called by default by Selectable()/MenuItem() when activated (FIXME: need some options).
694  // - Use ImGuiPopupFlags_NoOpenOverExistingPopup to avoid opening a popup if there's already one at the same level. This is equivalent to e.g. testing for !IsAnyPopupOpen() prior to OpenPopup().
695  // - Use IsWindowAppearing() after BeginPopup() to tell if a window just opened.
696  IMGUI_API void OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags = 0); // call to mark popup as open (don't call every frame!).
697  IMGUI_API void OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags = 0); // id overload to facilitate calling from nested stacks
698  IMGUI_API void OpenPopupOnItemClick(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // helper to open popup when clicked on last item. Default to ImGuiPopupFlags_MouseButtonRight == 1. (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors)
699  IMGUI_API void CloseCurrentPopup(); // manually close the popup we have begin-ed into.
700 
701  // Popups: open+begin combined functions helpers
702  // - Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and right-clicking.
703  // - They are convenient to easily create context menus, hence the name.
704  // - IMPORTANT: Notice that BeginPopupContextXXX takes ImGuiPopupFlags just like OpenPopup() and unlike BeginPopup(). For full consistency, we may add ImGuiWindowFlags to the BeginPopupContextXXX functions in the future.
705  // - IMPORTANT: we exceptionally default their flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter, so if you add other flags remember to re-add the ImGuiPopupFlags_MouseButtonRight.
706  IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked on last item. Use str_id==NULL to associate the popup to previous item. 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!
707  IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);// open+begin popup when clicked on current window.
708  IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked in void (where there are no windows).
709 
710  // Popups: query functions
711  // - IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack.
712  // - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack.
713  // - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId + ImGuiPopupFlags_AnyPopupLevel: return true if any popup is open.
714  IMGUI_API bool IsPopupOpen(const char* str_id, ImGuiPopupFlags flags = 0); // return true if the popup is open.
715 
716  // Tables
717  // [BETA API] API may evolve slightly! If you use this, please update to the next version when it comes out!
718  // - Full-featured replacement for old Columns API.
719  // - See Demo->Tables for demo code.
720  // - See top of imgui_tables.cpp for general commentary.
721  // - See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags.
722  // The typical call flow is:
723  // - 1. Call BeginTable().
724  // - 2. Optionally call TableSetupColumn() to submit column name/flags/defaults.
725  // - 3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows.
726  // - 4. Optionally call TableHeadersRow() to submit a header row. Names are pulled from TableSetupColumn() data.
727  // - 5. Populate contents:
728  // - In most situations you can use TableNextRow() + TableSetColumnIndex(N) to start appending into a column.
729  // - If you are using tables as a sort of grid, where every columns is holding the same type of contents,
730  // you may prefer using TableNextColumn() instead of TableNextRow() + TableSetColumnIndex().
731  // TableNextColumn() will automatically wrap-around into the next row if needed.
732  // - IMPORTANT: Comparatively to the old Columns() API, we need to call TableNextColumn() for the first column!
733  // - Summary of possible call flow:
734  // --------------------------------------------------------------------------------------------------------
735  // TableNextRow() -> TableSetColumnIndex(0) -> Text("Hello 0") -> TableSetColumnIndex(1) -> Text("Hello 1") // OK
736  // TableNextRow() -> TableNextColumn() -> Text("Hello 0") -> TableNextColumn() -> Text("Hello 1") // OK
737  // TableNextColumn() -> Text("Hello 0") -> TableNextColumn() -> Text("Hello 1") // OK: TableNextColumn() automatically gets to next row!
738  // TableNextRow() -> Text("Hello 0") // Not OK! Missing TableSetColumnIndex() or TableNextColumn()! Text will not appear!
739  // --------------------------------------------------------------------------------------------------------
740  // - 5. Call EndTable()
741  IMGUI_API bool BeginTable(const char* str_id, int column, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0.0f, 0.0f), float inner_width = 0.0f);
742  IMGUI_API void EndTable(); // only call EndTable() if BeginTable() returns true!
743  IMGUI_API void TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row.
744  IMGUI_API bool TableNextColumn(); // append into the next column (or first column of next row if currently in last column). Return true when column is visible.
745  IMGUI_API bool TableSetColumnIndex(int column_n); // append into the specified column. Return true when column is visible.
746 
747  // Tables: Headers & Columns declaration
748  // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc.
749  // - Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column.
750  // Headers are required to perform: reordering, sorting, and opening the context menu.
751  // The context menu can also be made available in columns body using ImGuiTableFlags_ContextMenuInBody.
752  // - You may manually submit headers using TableNextRow() + TableHeader() calls, but this is only useful in
753  // some advanced use cases (e.g. adding custom widgets in header row).
754  // - Use TableSetupScrollFreeze() to lock columns/rows so they stay visible when scrolled.
755  IMGUI_API void TableSetupColumn(const char* label, ImGuiTableColumnFlags flags = 0, float init_width_or_weight = 0.0f, ImGuiID user_id = 0);
756  IMGUI_API void TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled.
757  IMGUI_API void TableHeadersRow(); // submit all headers cells based on data provided to TableSetupColumn() + submit context menu
758  IMGUI_API void TableHeader(const char* label); // submit one header cell manually (rarely used)
759 
760  // Tables: Sorting
761  // - Call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting.
762  // - When 'SpecsDirty == true' you should sort your data. It will be true when sorting specs have changed
763  // since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting, else you may
764  // wastefully sort your data every frame!
765  // - Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable().
766  IMGUI_API ImGuiTableSortSpecs* TableGetSortSpecs(); // get latest sort specs for the table (NULL if not sorting).
767 
768  // Tables: Miscellaneous functions
769  // - Functions args 'int column_n' treat the default value of -1 as the same as passing the current column index.
770  IMGUI_API int TableGetColumnCount(); // return number of columns (value passed to BeginTable)
771  IMGUI_API int TableGetColumnIndex(); // return current column index.
772  IMGUI_API int TableGetRowIndex(); // return current row index.
773  IMGUI_API const char* TableGetColumnName(int column_n = -1); // return "" if column didn't have a name declared by TableSetupColumn(). Pass -1 to use current column.
774  IMGUI_API ImGuiTableColumnFlags TableGetColumnFlags(int column_n = -1); // return column flags so you can query their Enabled/Visible/Sorted/Hovered status flags. Pass -1 to use current column.
775  IMGUI_API void TableSetColumnEnabled(int column_n, bool v);// change user accessible enabled/disabled state of a column. Set to false to hide the column. User can use the context menu to change this themselves (right-click in headers, or right-click in columns body with ImGuiTableFlags_ContextMenuInBody)
776  IMGUI_API void TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n = -1); // change the color of a cell, row, or column. See ImGuiTableBgTarget_ flags for details.
777 
778  // Legacy Columns API (prefer using Tables!)
779  // - You can also use SameLine(pos_x) to mimic simplified columns.
780  IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
781  IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
782  IMGUI_API int GetColumnIndex(); // get current column index
783  IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column
784  IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column
785  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
786  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
788 
789  // Tab Bars, Tabs
790  IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar
791  IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true!
792  IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0); // create a Tab. Returns true if the Tab is selected.
793  IMGUI_API void EndTabItem(); // only call EndTabItem() if BeginTabItem() returns true!
794  IMGUI_API bool TabItemButton(const char* label, ImGuiTabItemFlags flags = 0); // create a Tab behaving like a button. return true when clicked. cannot be selected in the tab bar.
795  IMGUI_API void SetTabItemClosed(const char* tab_or_docked_window_label); // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name.
796 
797  // Logging/Capture
798  // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging.
799  IMGUI_API void LogToTTY(int auto_open_depth = -1); // start logging to tty (stdout)
800  IMGUI_API void LogToFile(int auto_open_depth = -1, const char* filename = NULL); // start logging to file
801  IMGUI_API void LogToClipboard(int auto_open_depth = -1); // start logging to OS clipboard
802  IMGUI_API void LogFinish(); // stop logging (close file, etc.)
803  IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
804  IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed)
805  IMGUI_API void LogTextV(const char* fmt, va_list args) IM_FMTLIST(1);
806 
807  // Drag and Drop
808  // - On source items, call BeginDragDropSource(), if it returns true also call SetDragDropPayload() + EndDragDropSource().
809  // - On target candidates, call BeginDragDropTarget(), if it returns true also call AcceptDragDropPayload() + EndDragDropTarget().
810  // - If you stop calling BeginDragDropSource() the payload is preserved however it won't have a preview tooltip (we currently display a fallback "..." tooltip, see #1725)
811  // - An item can be both drag source and drop target.
812  IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call after submitting an item which may be dragged. when this return true, you can call SetDragDropPayload() + EndDragDropSource()
813  IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, 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.
814  IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true!
815  IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
816  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.
817  IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
818  IMGUI_API const ImGuiPayload* GetDragDropPayload(); // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
819 
820  // Disabling [BETA API]
821  // - Disable all user interactions and dim items visuals (applying style.DisabledAlpha over current colors)
822  // - Those can be nested but it cannot be used to enable an already disabled section (a single BeginDisabled(true) in the stack is enough to keep everything disabled)
823  // - BeginDisabled(false) essentially does nothing useful but is provided to facilitate use of boolean expressions. If you can avoid calling BeginDisabled(False)/EndDisabled() best to avoid it.
824  IMGUI_API void BeginDisabled(bool disabled = true);
825  IMGUI_API void EndDisabled();
826 
827  // Clipping
828  // - Mouse hovering is affected by ImGui::PushClipRect() calls, unlike direct calls to ImDrawList::PushClipRect() which are render only.
829  IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
830  IMGUI_API void PopClipRect();
831 
832  // Focus, Activation
833  // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item"
834  IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window.
835  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.
836 
837  // Item/Widgets Utilities and Query Functions
838  // - Most of the functions are referring to the previous Item that has been submitted.
839  // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions.
840  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.
841  IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited. This will continuously return true while holding mouse button on an item. Items that don't interact will always return false)
842  IMGUI_API bool IsItemFocused(); // is the last item focused for keyboard/gamepad navigation?
843  IMGUI_API bool IsItemClicked(ImGuiMouseButton mouse_button = 0); // is the last item hovered and mouse clicked on? (**) == IsMouseClicked(mouse_button) && IsItemHovered()Important. (**) this it NOT equivalent to the behavior of e.g. Button(). Read comments in function definition.
844  IMGUI_API bool IsItemVisible(); // is the last item visible? (items may be out of sight because of clipping/scrolling)
845  IMGUI_API bool IsItemEdited(); // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets.
846  IMGUI_API bool IsItemActivated(); // was the last item just made active (item was previously inactive).
847  IMGUI_API bool IsItemDeactivated(); // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that requires continuous editing.
848  IMGUI_API bool IsItemDeactivatedAfterEdit(); // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that requires continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item).
849  IMGUI_API bool IsItemToggledOpen(); // was the last item open state toggled? set by TreeNode().
850  IMGUI_API bool IsAnyItemHovered(); // is any item hovered?
851  IMGUI_API bool IsAnyItemActive(); // is any item active?
852  IMGUI_API bool IsAnyItemFocused(); // is any item focused?
853  IMGUI_API ImVec2 GetItemRectMin(); // get upper-left bounding rectangle of the last item (screen space)
854  IMGUI_API ImVec2 GetItemRectMax(); // get lower-right bounding rectangle of the last item (screen space)
855  IMGUI_API ImVec2 GetItemRectSize(); // get size of last item
856  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.
857 
858  // Viewports
859  // - Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows.
860  // - In 'docking' branch with multi-viewport enabled, we extend this concept to have multiple active viewports.
861  // - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode.
862  IMGUI_API ImGuiViewport* GetMainViewport(); // return primary/default viewport. This can never be NULL.
863 
864  // Miscellaneous Utilities
865  IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
866  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.
867  IMGUI_API double GetTime(); // get global imgui time. incremented by io.DeltaTime every frame.
868  IMGUI_API int GetFrameCount(); // get global imgui frame count. incremented by 1 every frame.
869  IMGUI_API ImDrawList* GetBackgroundDrawList(); // this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents.
870  IMGUI_API ImDrawList* GetForegroundDrawList(); // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
871  IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances.
872  IMGUI_API const char* GetStyleColorName(ImGuiCol idx); // get a string corresponding to the enum value (for display, saving, etc.).
873  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)
875  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.
876  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
877  IMGUI_API void EndChildFrame(); // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window)
878 
879  // Text Utilities
880  IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
881 
882  // Color Utilities
885  IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v);
886  IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
887 
888  // Inputs Utilities: Keyboard
889  // - For 'int user_key_index' you can use your own indices/enums according to how your backend/engine stored them in io.KeysDown[].
890  // - We don't know the meaning of those value. You can use GetKeyIndex() to map a ImGuiKey_ value into the user index.
891  IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
892  IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index].
893  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
894  IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down)?
895  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
896  IMGUI_API void CaptureKeyboardFromApp(bool want_capture_keyboard_value = true); // attention: misleading name! 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. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard_value"; after the next NewFrame() call.
897 
898  // Inputs Utilities: Mouse
899  // - To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right.
900  // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle.
901  // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold')
902  IMGUI_API bool IsMouseDown(ImGuiMouseButton button); // is mouse button held?
903  IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down)
904  IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse button released? (went from Down to !Down)
905  IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? (note that a double-click will also report IsMouseClicked() == true)
906  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, but disregarding of other consideration of focus/window ordering/popup-block.
907  IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available
908  IMGUI_API bool IsAnyMouseDown(); // is any mouse button held?
909  IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
910  IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves)
911  IMGUI_API bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f); // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
912  IMGUI_API ImVec2 GetMouseDragDelta(ImGuiMouseButton button = 0, float lock_threshold = -1.0f); // return the delta from the initial clicking position while the mouse button is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
913  IMGUI_API void ResetMouseDragDelta(ImGuiMouseButton button = 0); //
914  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
915  IMGUI_API void SetMouseCursor(ImGuiMouseCursor cursor_type); // set desired cursor type
916  IMGUI_API void CaptureMouseFromApp(bool want_capture_mouse_value = true); // attention: misleading name! manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse_value;" after the next NewFrame() call.
917 
918  // Clipboard Utilities
919  // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard.
920  IMGUI_API const char* GetClipboardText();
921  IMGUI_API void SetClipboardText(const char* text);
922 
923  // Settings/.Ini Utilities
924  // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
925  // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
926  // - Important: default value "imgui.ini" is relative to current working dir! Most apps will want to lock this to an absolute path (e.g. same path as executables).
927  IMGUI_API void LoadIniSettingsFromDisk(const char* ini_filename); // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename).
928  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.
929  IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename); // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext).
930  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.
931 
932  // Debug Utilities
933  // - This is used by the IMGUI_CHECKVERSION() macro.
934  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, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro.
935 
936  // Memory Allocators
937  // - Those functions are not reliant on the current context.
938  // - DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
939  // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details.
940  IMGUI_API void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, void* user_data = NULL);
941  IMGUI_API void GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeFunc* p_free_func, void** p_user_data);
942  IMGUI_API void* MemAlloc(size_t size);
943  IMGUI_API void MemFree(void* ptr);
944 
945 } // namespace ImGui
946 
947 //-----------------------------------------------------------------------------
948 // [SECTION] Flags & Enumerations
949 //-----------------------------------------------------------------------------
950 
951 // Flags for ImGui::Begin()
953 {
955  ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar
956  ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip
957  ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window
958  ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programmatically)
959  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.
960  ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it
961  ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame
962  ImGuiWindowFlags_NoBackground = 1 << 7, // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f).
963  ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file
964  ImGuiWindowFlags_NoMouseInputs = 1 << 9, // Disable catching mouse, hovering test with pass through.
965  ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar
966  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.
967  ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state
968  ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
969  ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y)
970  ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
971  ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
972  ImGuiWindowFlags_NoNavInputs = 1 << 18, // No gamepad/keyboard navigation within the window
973  ImGuiWindowFlags_NoNavFocus = 1 << 19, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
974  ImGuiWindowFlags_UnsavedDocument = 1 << 20, // Display a dot next to the title. When used in a tab/docking context, tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
978 
979  // [Internal]
980  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!)
981  ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild()
982  ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip()
983  ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup()
984  ImGuiWindowFlags_Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal()
985  ImGuiWindowFlags_ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu()
986 
987  // [Obsolete]
988  //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by backend (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)
989 };
990 
991 // Flags for ImGui::InputText()
993 {
995  ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/
996  ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef
997  ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z
998  ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs
999  ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus
1000  ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function.
1001  ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Callback on pressing TAB (for completion handling)
1002  ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Callback on pressing Up/Down arrows (for history handling)
1003  ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Callback on each iteration. User code may query cursor position, modify text buffer.
1004  ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
1005  ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field
1006  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).
1007  ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally
1008  ImGuiInputTextFlags_AlwaysOverwrite = 1 << 13, // Overwrite mode
1009  ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
1010  ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*'
1011  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().
1012  ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input)
1013  ImGuiInputTextFlags_CallbackResize = 1 << 18, // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this)
1014  ImGuiInputTextFlags_CallbackEdit = 1 << 19 // Callback on any edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active)
1015 
1016  // Obsolete names (will be removed soon)
1017 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1018  , ImGuiInputTextFlags_AlwaysInsertMode = ImGuiInputTextFlags_AlwaysOverwrite // [renamed in 1.82] name was not matching behavior
1019 #endif
1020 };
1021 
1022 // Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
1024 {
1026  ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected
1027  ImGuiTreeNodeFlags_Framed = 1 << 1, // Draw frame with background (e.g. for CollapsingHeader)
1028  ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one
1029  ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
1030  ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
1031  ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open
1032  ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node
1033  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.
1034  ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes).
1035  ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow
1036  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().
1037  ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11, // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
1038  ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12, // Extend hit box to the left-most and right-most edges (bypass the indented area).
1039  ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
1040  //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 14, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
1042 };
1043 
1044 // Flags for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() functions.
1045 // - To be backward compatible with older API which took an 'int mouse_button = 1' argument, we need to treat
1046 // small flags values as a mouse button index, so we encode the mouse button in the first few bits of the flags.
1047 // It is therefore guaranteed to be legal to pass a mouse button index in ImGuiPopupFlags.
1048 // - For the same reason, we exceptionally default the ImGuiPopupFlags argument of BeginPopupContextXXX functions to 1 instead of 0.
1049 // IMPORTANT: because the default parameter is 1 (==ImGuiPopupFlags_MouseButtonRight), if you rely on the default parameter
1050 // and want to another another flag, you need to pass in the ImGuiPopupFlags_MouseButtonRight flag.
1051 // - Multiple buttons currently cannot be combined/or-ed in those functions (we could allow it later).
1053 {
1055  ImGuiPopupFlags_MouseButtonLeft = 0, // For BeginPopupContext*(): open on Left Mouse release. Guaranteed to always be == 0 (same as ImGuiMouseButton_Left)
1056  ImGuiPopupFlags_MouseButtonRight = 1, // For BeginPopupContext*(): open on Right Mouse release. Guaranteed to always be == 1 (same as ImGuiMouseButton_Right)
1057  ImGuiPopupFlags_MouseButtonMiddle = 2, // For BeginPopupContext*(): open on Middle Mouse release. Guaranteed to always be == 2 (same as ImGuiMouseButton_Middle)
1060  ImGuiPopupFlags_NoOpenOverExistingPopup = 1 << 5, // For OpenPopup*(), BeginPopupContext*(): don't open if there's already a popup at the same level of the popup stack
1061  ImGuiPopupFlags_NoOpenOverItems = 1 << 6, // For BeginPopupContextWindow(): don't return true when hovering items, only when hovering empty space
1062  ImGuiPopupFlags_AnyPopupId = 1 << 7, // For IsPopupOpen(): ignore the ImGuiID parameter and test for any popup.
1063  ImGuiPopupFlags_AnyPopupLevel = 1 << 8, // For IsPopupOpen(): search/test at any level of the popup stack (default test in the current level)
1065 };
1066 
1067 // Flags for ImGui::Selectable()
1069 {
1071  ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window
1072  ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column)
1073  ImGuiSelectableFlags_AllowDoubleClick = 1 << 2, // Generate press events on double clicks too
1074  ImGuiSelectableFlags_Disabled = 1 << 3, // Cannot be selected, display grayed out text
1075  ImGuiSelectableFlags_AllowItemOverlap = 1 << 4 // (WIP) Hit testing to allow subsequent widgets to overlap this one
1076 };
1077 
1078 // Flags for ImGui::BeginCombo()
1080 {
1082  ImGuiComboFlags_PopupAlignLeft = 1 << 0, // Align the popup toward the left by default
1083  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()
1084  ImGuiComboFlags_HeightRegular = 1 << 2, // Max ~8 items visible (default)
1085  ImGuiComboFlags_HeightLarge = 1 << 3, // Max ~20 items visible
1086  ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible
1087  ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow button
1088  ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow button
1090 };
1091 
1092 // Flags for ImGui::BeginTabBar()
1094 {
1096  ImGuiTabBarFlags_Reorderable = 1 << 0, // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list
1097  ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1, // Automatically select new tabs when they appear
1098  ImGuiTabBarFlags_TabListPopupButton = 1 << 2, // Disable buttons to open the tab list popup
1099  ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
1100  ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4, // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll)
1101  ImGuiTabBarFlags_NoTooltip = 1 << 5, // Disable tooltips when hovering a tab
1102  ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6, // Resize tabs when they don't fit
1103  ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7, // Add scroll buttons when tabs don't fit
1106 };
1107 
1108 // Flags for ImGui::BeginTabItem()
1110 {
1112  ImGuiTabItemFlags_UnsavedDocument = 1 << 0, // Display a dot next to the title + tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
1113  ImGuiTabItemFlags_SetSelected = 1 << 1, // Trigger flag to programmatically make the tab selected when calling BeginTabItem()
1114  ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
1115  ImGuiTabItemFlags_NoPushId = 1 << 3, // Don't call PushID(tab->ID)/PopID() on BeginTabItem()/EndTabItem()
1116  ImGuiTabItemFlags_NoTooltip = 1 << 4, // Disable tooltip for the given tab
1117  ImGuiTabItemFlags_NoReorder = 1 << 5, // Disable reordering this tab or having another tab cross over this tab
1118  ImGuiTabItemFlags_Leading = 1 << 6, // Enforce the tab position to the left of the tab bar (after the tab list popup button)
1119  ImGuiTabItemFlags_Trailing = 1 << 7 // Enforce the tab position to the right of the tab bar (before the scrolling buttons)
1120 };
1121 
1122 // Flags for ImGui::BeginTable()
1123 // [BETA API] API may evolve slightly! If you use this, please update to the next version when it comes out!
1124 // - Important! Sizing policies have complex and subtle side effects, more so than you would expect.
1125 // Read comments/demos carefully + experiment with live demos to get acquainted with them.
1126 // - The DEFAULT sizing policies are:
1127 // - Default to ImGuiTableFlags_SizingFixedFit if ScrollX is on, or if host window has ImGuiWindowFlags_AlwaysAutoResize.
1128 // - Default to ImGuiTableFlags_SizingStretchSame if ScrollX is off.
1129 // - When ScrollX is off:
1130 // - Table defaults to ImGuiTableFlags_SizingStretchSame -> all Columns defaults to ImGuiTableColumnFlags_WidthStretch with same weight.
1131 // - Columns sizing policy allowed: Stretch (default), Fixed/Auto.
1132 // - Fixed Columns will generally obtain their requested width (unless the table cannot fit them all).
1133 // - Stretch Columns will share the remaining width.
1134 // - Mixed Fixed/Stretch columns is possible but has various side-effects on resizing behaviors.
1135 // The typical use of mixing sizing policies is: any number of LEADING Fixed columns, followed by one or two TRAILING Stretch columns.
1136 // (this is because the visible order of columns have subtle but necessary effects on how they react to manual resizing).
1137 // - When ScrollX is on:
1138 // - Table defaults to ImGuiTableFlags_SizingFixedFit -> all Columns defaults to ImGuiTableColumnFlags_WidthFixed
1139 // - Columns sizing policy allowed: Fixed/Auto mostly.
1140 // - Fixed Columns can be enlarged as needed. Table will show an horizontal scrollbar if needed.
1141 // - When using auto-resizing (non-resizable) fixed columns, querying the content width to use item right-alignment e.g. SetNextItemWidth(-FLT_MIN) doesn't make sense, would create a feedback loop.
1142 // - Using Stretch columns OFTEN DOES NOT MAKE SENSE if ScrollX is on, UNLESS you have specified a value for 'inner_width' in BeginTable().
1143 // If you specify a value for 'inner_width' then effectively the scrolling space is known and Stretch or mixed Fixed/Stretch columns become meaningful again.
1144 // - Read on documentation at the top of imgui_tables.cpp for details.
1146 {
1147  // Features
1149  ImGuiTableFlags_Resizable = 1 << 0, // Enable resizing columns.
1150  ImGuiTableFlags_Reorderable = 1 << 1, // Enable reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers)
1151  ImGuiTableFlags_Hideable = 1 << 2, // Enable hiding/disabling columns in context menu.
1152  ImGuiTableFlags_Sortable = 1 << 3, // Enable sorting. Call TableGetSortSpecs() to obtain sort specs. Also see ImGuiTableFlags_SortMulti and ImGuiTableFlags_SortTristate.
1153  ImGuiTableFlags_NoSavedSettings = 1 << 4, // Disable persisting columns order, width and sort settings in the .ini file.
1154  ImGuiTableFlags_ContextMenuInBody = 1 << 5, // Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow().
1155  // Decorations
1156  ImGuiTableFlags_RowBg = 1 << 6, // Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually)
1157  ImGuiTableFlags_BordersInnerH = 1 << 7, // Draw horizontal borders between rows.
1158  ImGuiTableFlags_BordersOuterH = 1 << 8, // Draw horizontal borders at the top and bottom.
1159  ImGuiTableFlags_BordersInnerV = 1 << 9, // Draw vertical borders between columns.
1160  ImGuiTableFlags_BordersOuterV = 1 << 10, // Draw vertical borders on the left and right sides.
1166  ImGuiTableFlags_NoBordersInBody = 1 << 11, // [ALPHA] Disable vertical borders in columns Body (borders will always appears in Headers). -> May move to style
1167  ImGuiTableFlags_NoBordersInBodyUntilResize = 1 << 12, // [ALPHA] Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). -> May move to style
1168  // Sizing Policy (read above for defaults)
1169  ImGuiTableFlags_SizingFixedFit = 1 << 13, // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching contents width.
1170  ImGuiTableFlags_SizingFixedSame = 2 << 13, // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching the maximum contents width of all columns. Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible.
1171  ImGuiTableFlags_SizingStretchProp = 3 << 13, // Columns default to _WidthStretch with default weights proportional to each columns contents widths.
1172  ImGuiTableFlags_SizingStretchSame = 4 << 13, // Columns default to _WidthStretch with default weights all equal, unless overridden by TableSetupColumn().
1173  // Sizing Extra Options
1174  ImGuiTableFlags_NoHostExtendX = 1 << 16, // Make outer width auto-fit to columns, overriding outer_size.x value. Only available when ScrollX/ScrollY are disabled and Stretch columns are not used.
1175  ImGuiTableFlags_NoHostExtendY = 1 << 17, // Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.
1176  ImGuiTableFlags_NoKeepColumnsVisible = 1 << 18, // Disable keeping column always minimally visible when ScrollX is off and table gets too small. Not recommended if columns are resizable.
1177  ImGuiTableFlags_PreciseWidths = 1 << 19, // Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.
1178  // Clipping
1179  ImGuiTableFlags_NoClip = 1 << 20, // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze().
1180  // Padding
1181  ImGuiTableFlags_PadOuterX = 1 << 21, // Default if BordersOuterV is on. Enable outer-most padding. Generally desirable if you have headers.
1182  ImGuiTableFlags_NoPadOuterX = 1 << 22, // Default if BordersOuterV is off. Disable outer-most padding.
1183  ImGuiTableFlags_NoPadInnerX = 1 << 23, // Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off).
1184  // Scrolling
1185  ImGuiTableFlags_ScrollX = 1 << 24, // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this create a child window, ScrollY is currently generally recommended when using ScrollX.
1186  ImGuiTableFlags_ScrollY = 1 << 25, // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
1187  // Sorting
1188  ImGuiTableFlags_SortMulti = 1 << 26, // Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).
1189  ImGuiTableFlags_SortTristate = 1 << 27, // Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).
1190 
1191  // [Internal] Combinations and masks
1193 
1194  // Obsolete names (will be removed soon)
1195 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1196  //, ImGuiTableFlags_ColumnsWidthFixed = ImGuiTableFlags_SizingFixedFit, ImGuiTableFlags_ColumnsWidthStretch = ImGuiTableFlags_SizingStretchSame // WIP Tables 2020/12
1197  //, ImGuiTableFlags_SizingPolicyFixed = ImGuiTableFlags_SizingFixedFit, ImGuiTableFlags_SizingPolicyStretch = ImGuiTableFlags_SizingStretchSame // WIP Tables 2021/01
1198 #endif
1199 };
1200 
1201 // Flags for ImGui::TableSetupColumn()
1203 {
1204  // Input configuration flags
1206  ImGuiTableColumnFlags_Disabled = 1 << 0, // Overriding/master disable flag: hide column, won't show in context menu (unlike calling TableSetColumnEnabled() which manipulates the user accessible state)
1207  ImGuiTableColumnFlags_DefaultHide = 1 << 1, // Default as a hidden/disabled column.
1208  ImGuiTableColumnFlags_DefaultSort = 1 << 2, // Default as a sorting column.
1209  ImGuiTableColumnFlags_WidthStretch = 1 << 3, // Column will stretch. Preferable with horizontal scrolling disabled (default if table sizing policy is _SizingStretchSame or _SizingStretchProp).
1210  ImGuiTableColumnFlags_WidthFixed = 1 << 4, // Column will not stretch. Preferable with horizontal scrolling enabled (default if table sizing policy is _SizingFixedFit and table is resizable).
1211  ImGuiTableColumnFlags_NoResize = 1 << 5, // Disable manual resizing.
1212  ImGuiTableColumnFlags_NoReorder = 1 << 6, // Disable manual reordering this column, this will also prevent other columns from crossing over this column.
1213  ImGuiTableColumnFlags_NoHide = 1 << 7, // Disable ability to hide/disable this column.
1214  ImGuiTableColumnFlags_NoClip = 1 << 8, // Disable clipping for this column (all NoClip columns will render in a same draw command).
1215  ImGuiTableColumnFlags_NoSort = 1 << 9, // Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table).
1216  ImGuiTableColumnFlags_NoSortAscending = 1 << 10, // Disable ability to sort in the ascending direction.
1217  ImGuiTableColumnFlags_NoSortDescending = 1 << 11, // Disable ability to sort in the descending direction.
1218  ImGuiTableColumnFlags_NoHeaderLabel = 1 << 12, // TableHeadersRow() will not submit label for this column. Convenient for some small columns. Name will still appear in context menu.
1219  ImGuiTableColumnFlags_NoHeaderWidth = 1 << 13, // Disable header text width contribution to automatic column width.
1220  ImGuiTableColumnFlags_PreferSortAscending = 1 << 14, // Make the initial sort direction Ascending when first sorting on this column (default).
1221  ImGuiTableColumnFlags_PreferSortDescending = 1 << 15, // Make the initial sort direction Descending when first sorting on this column.
1222  ImGuiTableColumnFlags_IndentEnable = 1 << 16, // Use current Indent value when entering cell (default for column 0).
1223  ImGuiTableColumnFlags_IndentDisable = 1 << 17, // Ignore current Indent value when entering cell (default for columns > 0). Indentation changes _within_ the cell will still be honored.
1224 
1225  // Output status flags, read-only via TableGetColumnFlags()
1226  ImGuiTableColumnFlags_IsEnabled = 1 << 24, // Status: is enabled == not hidden by user/api (referred to as "Hide" in _DefaultHide and _NoHide) flags.
1227  ImGuiTableColumnFlags_IsVisible = 1 << 25, // Status: is visible == is enabled AND not clipped by scrolling.
1228  ImGuiTableColumnFlags_IsSorted = 1 << 26, // Status: is currently part of the sort specs
1229  ImGuiTableColumnFlags_IsHovered = 1 << 27, // Status: is hovered by mouse
1230 
1231  // [Internal] Combinations and masks
1235  ImGuiTableColumnFlags_NoDirectResize_ = 1 << 30 // [Internal] Disable user resizing this column directly (it may however we resized indirectly from its left edge)
1236 
1237  // Obsolete names (will be removed soon)
1238 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1239  //ImGuiTableColumnFlags_WidthAuto = ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoResize, // Column will not stretch and keep resizing based on submitted contents.
1240 #endif
1241 };
1242 
1243 // Flags for ImGui::TableNextRow()
1245 {
1247  ImGuiTableRowFlags_Headers = 1 << 0 // Identify header row (set default background color + width of its contents accounted different for auto column width)
1248 };
1249 
1250 // Enum for ImGui::TableSetBgColor()
1251 // Background colors are rendering in 3 layers:
1252 // - Layer 0: draw with RowBg0 color if set, otherwise draw with ColumnBg0 if set.
1253 // - Layer 1: draw with RowBg1 color if set, otherwise draw with ColumnBg1 if set.
1254 // - Layer 2: draw with CellBg color if set.
1255 // The purpose of the two row/columns layers is to let you decide if a background color changes should override or blend with the existing color.
1256 // When using ImGuiTableFlags_RowBg on the table, each row has the RowBg0 color automatically set for odd/even rows.
1257 // If you set the color of RowBg0 target, your color will override the existing RowBg0 color.
1258 // If you set the color of RowBg1 or ColumnBg1 target, your color will blend over the RowBg0 color.
1260 {
1262  ImGuiTableBgTarget_RowBg0 = 1, // Set row background color 0 (generally used for background, automatically set when ImGuiTableFlags_RowBg is used)
1263  ImGuiTableBgTarget_RowBg1 = 2, // Set row background color 1 (generally used for selection marking)
1264  ImGuiTableBgTarget_CellBg = 3 // Set cell background color (top-most color)
1265 };
1266 
1267 // Flags for ImGui::IsWindowFocused()
1269 {
1271  ImGuiFocusedFlags_ChildWindows = 1 << 0, // Return true if any children of the window is focused
1272  ImGuiFocusedFlags_RootWindow = 1 << 1, // Test from root window (top most parent of the current hierarchy)
1273  ImGuiFocusedFlags_AnyWindow = 1 << 2, // Return true if any window is focused. Important: If you are trying to tell how to dispatch your low-level inputs, do NOT use this. Use 'io.WantCaptureMouse' instead! Please read the FAQ!
1274  ImGuiFocusedFlags_NoPopupHierarchy = 1 << 3, // Do not consider popup hierarchy (do not treat popup emitter as parent of popup) (when used with _ChildWindows or _RootWindow)
1275  //ImGuiFocusedFlags_DockHierarchy = 1 << 4, // Consider docking hierarchy (treat dockspace host as parent of docked window) (when used with _ChildWindows or _RootWindow)
1277 };
1278 
1279 // Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
1280 // Note: if you are trying to check whether your mouse should be dispatched to Dear ImGui or to your app, you should use 'io.WantCaptureMouse' instead! Please read the FAQ!
1281 // Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls.
1283 {
1284  ImGuiHoveredFlags_None = 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.
1285  ImGuiHoveredFlags_ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered
1286  ImGuiHoveredFlags_RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy)
1287  ImGuiHoveredFlags_AnyWindow = 1 << 2, // IsWindowHovered() only: Return true if any window is hovered
1288  ImGuiHoveredFlags_NoPopupHierarchy = 1 << 3, // IsWindowHovered() only: Do not consider popup hierarchy (do not treat popup emitter as parent of popup) (when used with _ChildWindows or _RootWindow)
1289  //ImGuiHoveredFlags_DockHierarchy = 1 << 4, // IsWindowHovered() only: Consider docking hierarchy (treat dockspace host as parent of docked window) (when used with _ChildWindows or _RootWindow)
1290  ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 5, // Return true even if a popup window is normally blocking access to this item/window
1291  //ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 6, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
1292  ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 7, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
1293  ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 8, // IsItemHovered() only: Return true even if the position is obstructed or overlapped by another window
1294  ImGuiHoveredFlags_AllowWhenDisabled = 1 << 9, // IsItemHovered() only: Return true even if the item is disabled
1297 };
1298 
1299 // Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload()
1301 {
1303  // BeginDragDropSource() flags
1304  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.
1305  ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item.
1306  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.
1307  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.
1308  ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
1309  ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5, // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged)
1310  // AcceptDragDropPayload() flags
1311  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.
1312  ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target.
1313  ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12, // Request hiding the BeginDragDropSource tooltip from the BeginDragDropTarget site.
1315 };
1316 
1317 // Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui.
1318 #define IMGUI_PAYLOAD_TYPE_COLOR_3F "_COL3F" // float[3]: Standard type for colors, without alpha. User code may use this type.
1319 #define IMGUI_PAYLOAD_TYPE_COLOR_4F "_COL4F" // float[4]: Standard type for colors. User code may use this type.
1320 
1321 // A primary data type
1323 {
1324  ImGuiDataType_S8, // signed char / char (with sensible compilers)
1325  ImGuiDataType_U8, // unsigned char
1327  ImGuiDataType_U16, // unsigned short
1329  ImGuiDataType_U32, // unsigned int
1330  ImGuiDataType_S64, // long long / __int64
1331  ImGuiDataType_U64, // unsigned long long / unsigned __int64
1335 };
1336 
1337 // A cardinal direction
1339 {
1346 };
1347 
1348 // A sorting direction
1350 {
1352  ImGuiSortDirection_Ascending = 1, // Ascending = 0->9, A->Z etc.
1353  ImGuiSortDirection_Descending = 2 // Descending = 9->0, Z->A etc.
1354 };
1355 
1356 // User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
1358 {
1375  ImGuiKey_A, // for text edit CTRL+A: select all
1376  ImGuiKey_C, // for text edit CTRL+C: copy
1377  ImGuiKey_V, // for text edit CTRL+V: paste
1378  ImGuiKey_X, // for text edit CTRL+X: cut
1379  ImGuiKey_Y, // for text edit CTRL+Y: redo
1380  ImGuiKey_Z, // for text edit CTRL+Z: undo
1382 };
1383 
1384 // To test io.KeyMods (which is a combination of individual fields io.KeyCtrl, io.KeyShift, io.KeyAlt set by user/backend)
1386 {
1392 };
1393 
1394 // Gamepad/Keyboard navigation
1395 // Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
1396 // Gamepad: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Backend: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame().
1397 // Read instructions in imgui.cpp for more details. Download PNG/PSD at http://dearimgui.org/controls_sheets.
1399 {
1400  // Gamepad Mapping
1401  ImGuiNavInput_Activate, // activate / open / toggle / tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard)
1402  ImGuiNavInput_Cancel, // cancel / close / exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard)
1403  ImGuiNavInput_Input, // text input / on-screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard)
1404  ImGuiNavInput_Menu, // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard)
1405  ImGuiNavInput_DpadLeft, // move / tweak / resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard)
1409  ImGuiNavInput_LStickLeft, // scroll / move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down
1413  ImGuiNavInput_FocusPrev, // next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
1414  ImGuiNavInput_FocusNext, // prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
1415  ImGuiNavInput_TweakSlow, // slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
1416  ImGuiNavInput_TweakFast, // faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
1417 
1418  // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them.
1419  // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from io.KeysDown[] instead of io.NavInputs[].
1420  ImGuiNavInput_KeyLeft_, // move left // = Arrow keys
1426 };
1427 
1428 // Configuration flags stored in io.ConfigFlags. Set by user/application.
1430 {
1432  ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[].
1433  ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. This is mostly to instruct your imgui backend to fill io.NavInputs[]. Backend also needs to set ImGuiBackendFlags_HasGamepad.
1434  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 backend, otherwise ImGui will react as if the mouse is jumping around back and forth.
1435  ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set.
1436  ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the backend.
1437  ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct backend to not alter mouse cursor shape and visibility. Use if the backend cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead.
1438 
1439  // User storage (to allow your backend/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core Dear ImGui)
1440  ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware.
1441  ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse.
1442 };
1443 
1444 // Backend capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom backend.
1446 {
1448  ImGuiBackendFlags_HasGamepad = 1 << 0, // Backend Platform supports gamepad and currently has one connected.
1449  ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Backend Platform supports honoring GetMouseCursor() value to change the OS cursor shape.
1450  ImGuiBackendFlags_HasSetMousePos = 1 << 2, // Backend Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
1451  ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3 // Backend Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bit indices.
1452 };
1453 
1454 // Enumeration for PushStyleColor() / PopStyleColor()
1456 {
1459  ImGuiCol_WindowBg, // Background of normal windows
1460  ImGuiCol_ChildBg, // Background of child windows
1461  ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows
1464  ImGuiCol_FrameBg, // Background of checkbox, radio button, plot, slider, text input
1481  ImGuiCol_Header, // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem
1499  ImGuiCol_TableHeaderBg, // Table header background
1500  ImGuiCol_TableBorderStrong, // Table outer and header borders (prefer using Alpha=1.0 here)
1501  ImGuiCol_TableBorderLight, // Table inner borders (prefer using Alpha=1.0 here)
1502  ImGuiCol_TableRowBg, // Table row background (even rows)
1503  ImGuiCol_TableRowBgAlt, // Table row background (odd rows)
1506  ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item
1507  ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB
1508  ImGuiCol_NavWindowingDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active
1509  ImGuiCol_ModalWindowDimBg, // Darken/colorize entire screen behind a modal window, when one is active
1511 };
1512 
1513 // Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
1514 // - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code.
1515 // During initialization or between frames, feel free to just poke into ImGuiStyle directly.
1516 // - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description.
1517 // In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
1518 // With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
1519 // - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
1521 {
1522  // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
1523  ImGuiStyleVar_Alpha, // float Alpha
1524  ImGuiStyleVar_DisabledAlpha, // float DisabledAlpha
1525  ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding
1526  ImGuiStyleVar_WindowRounding, // float WindowRounding
1527  ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize
1528  ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize
1529  ImGuiStyleVar_WindowTitleAlign, // ImVec2 WindowTitleAlign
1530  ImGuiStyleVar_ChildRounding, // float ChildRounding
1531  ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize
1532  ImGuiStyleVar_PopupRounding, // float PopupRounding
1533  ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize
1534  ImGuiStyleVar_FramePadding, // ImVec2 FramePadding
1535  ImGuiStyleVar_FrameRounding, // float FrameRounding
1536  ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize
1537  ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing
1538  ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing
1539  ImGuiStyleVar_IndentSpacing, // float IndentSpacing
1540  ImGuiStyleVar_CellPadding, // ImVec2 CellPadding
1541  ImGuiStyleVar_ScrollbarSize, // float ScrollbarSize
1542  ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding
1543  ImGuiStyleVar_GrabMinSize, // float GrabMinSize
1544  ImGuiStyleVar_GrabRounding, // float GrabRounding
1545  ImGuiStyleVar_TabRounding, // float TabRounding
1546  ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
1547  ImGuiStyleVar_SelectableTextAlign, // ImVec2 SelectableTextAlign
1549 };
1550 
1551 // Flags for InvisibleButton() [extended in imgui_internal.h]
1553 {
1555  ImGuiButtonFlags_MouseButtonLeft = 1 << 0, // React on left mouse button (default)
1556  ImGuiButtonFlags_MouseButtonRight = 1 << 1, // React on right mouse button
1557  ImGuiButtonFlags_MouseButtonMiddle = 1 << 2, // React on center mouse button
1558 
1559  // [Internal]
1562 };
1563 
1564 // Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
1566 {
1568  ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer).
1569  ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on color square.
1570  ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
1571  ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable color square preview next to the inputs. (e.g. to show only the inputs)
1572  ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview color square).
1573  ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
1574  ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
1575  ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small color square preview instead.
1576  ImGuiColorEditFlags_NoDragDrop = 1 << 9, // // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source.
1577  ImGuiColorEditFlags_NoBorder = 1 << 10, // // ColorButton: disable border (which is enforced by default)
1578 
1579  // User Options (right-click on widget to change some of them).
1580  ImGuiColorEditFlags_AlphaBar = 1 << 16, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
1581  ImGuiColorEditFlags_AlphaPreview = 1 << 17, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
1582  ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
1583  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).
1584  ImGuiColorEditFlags_DisplayRGB = 1 << 20, // [Display] // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex.
1585  ImGuiColorEditFlags_DisplayHSV = 1 << 21, // [Display] // "
1586  ImGuiColorEditFlags_DisplayHex = 1 << 22, // [Display] // "
1587  ImGuiColorEditFlags_Uint8 = 1 << 23, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
1588  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.
1589  ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [Picker] // ColorPicker: bar for Hue, rectangle for Sat/Value.
1590  ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [Picker] // ColorPicker: wheel for Hue, triangle for Sat/Value.
1591  ImGuiColorEditFlags_InputRGB = 1 << 27, // [Input] // ColorEdit, ColorPicker: input and output data in RGB format.
1592  ImGuiColorEditFlags_InputHSV = 1 << 28, // [Input] // ColorEdit, ColorPicker: input and output data in HSV format.
1593 
1594  // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to
1595  // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup.
1597 
1598  // [Internal] Masks
1603 
1604  // Obsolete names (will be removed)
1605 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1607 #endif
1608 };
1609 
1610 // Flags for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc.
1611 // We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them.
1613 {
1615  ImGuiSliderFlags_AlwaysClamp = 1 << 4, // Clamp value to min/max bounds when input manually with CTRL+Click. By default CTRL+Click allows going out of bounds.
1616  ImGuiSliderFlags_Logarithmic = 1 << 5, // Make the widget logarithmic (linear otherwise). Consider using ImGuiSliderFlags_NoRoundToFormat with this if using a format-string with small amount of digits.
1617  ImGuiSliderFlags_NoRoundToFormat = 1 << 6, // Disable rounding underlying value to match precision of the display format string (e.g. %.3f values are rounded to those 3 digits)
1618  ImGuiSliderFlags_NoInput = 1 << 7, // Disable CTRL+Click or Enter key allowing to input text directly into the widget
1619  ImGuiSliderFlags_InvalidMask_ = 0x7000000F // [Internal] We treat using those bits as being potentially a 'float power' argument from the previous API that has got miscast to this enum, and will trigger an assert if needed.
1620 
1621  // Obsolete names (will be removed)
1622 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1624 #endif
1625 };
1626 
1627 // Identify a mouse button.
1628 // Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience.
1630 {
1635 };
1636 
1637 // Enumeration for GetMouseCursor()
1638 // User code may request backend to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here
1640 {
1643  ImGuiMouseCursor_TextInput, // When hovering over InputText, etc.
1644  ImGuiMouseCursor_ResizeAll, // (Unused by Dear ImGui functions)
1645  ImGuiMouseCursor_ResizeNS, // When hovering over an horizontal border
1646  ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column
1647  ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window
1648  ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window
1649  ImGuiMouseCursor_Hand, // (Unused by Dear ImGui functions. Use for e.g. hyperlinks)
1650  ImGuiMouseCursor_NotAllowed, // When hovering something with disallowed interaction. Usually a crossed circle.
1652 };
1653 
1654 // Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
1655 // Represent a condition.
1656 // 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.
1658 {
1659  ImGuiCond_None = 0, // No condition (always set the variable), same as _Always
1660  ImGuiCond_Always = 1 << 0, // No condition (always set the variable)
1661  ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call will succeed)
1662  ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file)
1663  ImGuiCond_Appearing = 1 << 3 // Set the variable if the object/window is appearing after being hidden/inactive (or the first time)
1664 };
1665 
1666 //-----------------------------------------------------------------------------
1667 // [SECTION] Helpers: Memory allocations macros, ImVector<>
1668 //-----------------------------------------------------------------------------
1669 
1670 //-----------------------------------------------------------------------------
1671 // IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE()
1672 // We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
1673 // Defining a custom placement new() with a custom parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
1674 //-----------------------------------------------------------------------------
1675 
1676 struct ImNewWrapper {};
1677 inline void* operator new(size_t, ImNewWrapper, void* ptr) { return ptr; }
1678 inline void operator delete(void*, ImNewWrapper, void*) {} // This is only required so we can use the symmetrical new()
1679 #define IM_ALLOC(_SIZE) ImGui::MemAlloc(_SIZE)
1680 #define IM_FREE(_PTR) ImGui::MemFree(_PTR)
1681 #define IM_PLACEMENT_NEW(_PTR) new(ImNewWrapper(), _PTR)
1682 #define IM_NEW(_TYPE) new(ImNewWrapper(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
1683 template<typename T> void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } }
1684 
1685 //-----------------------------------------------------------------------------
1686 // ImVector<>
1687 // Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug).
1688 //-----------------------------------------------------------------------------
1689 // - You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our public structures are relying on it.
1690 // - We use std-like naming convention here, which is a little unusual for this codebase.
1691 // - Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs.
1692 // - Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that,
1693 // Do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset.
1694 //-----------------------------------------------------------------------------
1695 
1697 template<typename T>
1698 struct ImVector
1699 {
1700  int Size;
1702  T* Data;
1703 
1704  // Provide standard typedefs but we don't use them ourselves.
1705  typedef T value_type;
1707  typedef const value_type* const_iterator;
1708 
1709  // Constructors, destructor
1710  inline ImVector() { Size = Capacity = 0; Data = NULL; }
1711  inline ImVector(const ImVector<T>& src) { Size = Capacity = 0; Data = NULL; operator=(src); }
1712  inline ImVector<T>& operator=(const ImVector<T>& src) { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; }
1713  inline ~ImVector() { if (Data) IM_FREE(Data); } // Important: does not destruct anything
1714 
1715  inline void clear() { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } } // Important: does not destruct anything
1716  inline void clear_delete() { for (int n = 0; n < Size; n++) IM_DELETE(Data[n]); clear(); } // Important: never called automatically! always explicit.
1717  inline void clear_destruct() { for (int n = 0; n < Size; n++) Data[n].~T(); clear(); } // Important: never called automatically! always explicit.
1718 
1719  inline bool empty() const { return Size == 0; }
1720  inline int size() const { return Size; }
1721  inline int size_in_bytes() const { return Size * (int)sizeof(T); }
1722  inline int max_size() const { return 0x7FFFFFFF / (int)sizeof(T); }
1723  inline int capacity() const { return Capacity; }
1724  inline T& operator[](int i) { IM_ASSERT(i >= 0 && i < Size); return Data[i]; }
1725  inline const T& operator[](int i) const { IM_ASSERT(i >= 0 && i < Size); return Data[i]; }
1726 
1727  inline T* begin() { return Data; }
1728  inline const T* begin() const { return Data; }
1729  inline T* end() { return Data + Size; }
1730  inline const T* end() const { return Data + Size; }
1731  inline T& front() { IM_ASSERT(Size > 0); return Data[0]; }
1732  inline const T& front() const { IM_ASSERT(Size > 0); return Data[0]; }
1733  inline T& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; }
1734  inline const T& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; }
1735  inline void swap(ImVector<T>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
1736 
1737  inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity / 2) : 8; return new_capacity > sz ? new_capacity : sz; }
1738  inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
1739  inline void resize(int new_size, const T& 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; }
1740  inline void shrink(int new_size) { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation
1741  inline void reserve(int new_capacity) { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; }
1742 
1743  // NB: It is illegal 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.
1744  inline void push_back(const T& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
1745  inline void pop_back() { IM_ASSERT(Size > 0); Size--; }
1746  inline void push_front(const T& v) { if (Size == 0) push_back(v); else insert(Data, v); }
1747  inline T* erase(const T* 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(T)); Size--; return Data + off; }
1748  inline T* erase(const T* it, const T* 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(T)); Size -= (int)count; return Data + off; }
1749  inline T* erase_unsorted(const T* 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(T)); Size--; return Data + off; }
1750  inline T* insert(const T* it, const T& 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(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
1751  inline bool contains(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
1752  inline T* find(const T& v) { T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
1753  inline const T* find(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
1754  inline bool find_erase(const T& v) { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; }
1755  inline bool find_erase_unsorted(const T& v) { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; }
1756  inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; return (int)off; }
1757 };
1759 
1760 //-----------------------------------------------------------------------------
1761 // [SECTION] ImGuiStyle
1762 //-----------------------------------------------------------------------------
1763 // You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame().
1764 // During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values,
1765 // and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors.
1766 //-----------------------------------------------------------------------------
1767 
1769 {
1770  float Alpha; // Global alpha applies to everything in Dear ImGui.
1771  float DisabledAlpha; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.
1772  ImVec2 WindowPadding; // Padding within a window.
1773  float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
1774  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).
1775  ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints().
1776  ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
1777  ImGuiDir WindowMenuButtonPosition; // Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left.
1778  float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
1779  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).
1780  float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
1781  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).
1782  ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets).
1783  float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
1784  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).
1785  ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines.
1786  ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
1787  ImVec2 CellPadding; // Padding within a table cell
1788  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!
1789  float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
1790  float ColumnsMinSpacing; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
1791  float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar.
1792  float ScrollbarRounding; // Radius of grab corners for scrollbar.
1793  float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar.
1794  float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
1795  float LogSliderDeadzone; // The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero.
1796  float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
1797  float TabBorderSize; // Thickness of border around tabs.
1798  float TabMinWidthForCloseButton; // Minimum width for close button to appears on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
1799  ImGuiDir ColorButtonPosition; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
1800  ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
1801  ImVec2 SelectableTextAlign; // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
1802  ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
1803  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!
1804  float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
1805  bool AntiAliasedLines; // Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList).
1806  bool AntiAliasedLinesUseTex; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering. Latched at the beginning of the frame (copied to ImDrawList).
1807  bool AntiAliasedFill; // Enable anti-aliased edges around filled shapes (rounded rectangles, circles, etc.). Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList).
1808  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.
1809  float CircleTessellationMaxError; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
1811 
1813  IMGUI_API void ScaleAllSizes(float scale_factor);
1814 };
1815 
1816 //-----------------------------------------------------------------------------
1817 // [SECTION] ImGuiIO
1818 //-----------------------------------------------------------------------------
1819 // Communicate most settings and inputs/outputs to Dear ImGui using this structure.
1820 // Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage.
1821 //-----------------------------------------------------------------------------
1822 
1823 struct ImGuiIO
1824 {
1825  //------------------------------------------------------------------
1826  // Configuration (fill once) // Default value
1827  //------------------------------------------------------------------
1828 
1829  ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
1830  ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by backend (imgui_impl_xxx files or custom backend) to communicate features supported by the backend.
1831  ImVec2 DisplaySize; // <unset> // Main display size, in pixels (generally == GetMainViewport()->Size)
1832  float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds.
1833  float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds.
1834  const char* IniFilename; // = "imgui.ini" // Path to .ini file (important: default "imgui.ini" is relative to current working dir!). Set NULL to disable automatic .ini loading/saving or if you want to manually call LoadIniSettingsXXX() / SaveIniSettingsXXX() functions.
1835  const char* LogFilename; // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
1836  float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds.
1837  float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels.
1838  float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging.
1839  int KeyMap[ImGuiKey_COUNT]; // <unset> // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state.
1840  float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
1841  float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
1842  void* UserData; // = NULL // Store your own data for retrieval by callbacks.
1843 
1844  ImFontAtlas*Fonts; // <auto> // Font atlas: load, rasterize and pack one or more fonts into a single texture.
1845  float FontGlobalScale; // = 1.0f // Global scale all fonts
1846  bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel.
1847  ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
1848  ImVec2 DisplayFramebufferScale; // = (1, 1) // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale.
1849 
1850  // Miscellaneous options
1851  bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by backend implementations.
1852  bool ConfigMacOSXBehaviors; // = 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.
1853  bool ConfigInputTextCursorBlink; // = true // Enable blinking cursor (optional as some users consider it to be distracting).
1854  bool ConfigDragClickToInputText; // = false // [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard.
1855  bool ConfigWindowsResizeFromEdges; // = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag)
1856  bool ConfigWindowsMoveFromTitleBarOnly; // = false // Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar.
1857  float ConfigMemoryCompactTimer; // = 60.0f // Timer (in seconds) to free transient windows/tables memory buffers when unused. Set to -1.0f to disable.
1858 
1859  //------------------------------------------------------------------
1860  // Platform Functions
1861  // (the imgui_impl_xxxx backend files are setting those up for you)
1862  //------------------------------------------------------------------
1863 
1864  // Optional: Platform/Renderer backend name (informational only! will be displayed in About Window) + User data for backend/wrappers to store their own stuff.
1865  const char* BackendPlatformName; // = NULL
1866  const char* BackendRendererName; // = NULL
1867  void* BackendPlatformUserData; // = NULL // User data for platform backend
1868  void* BackendRendererUserData; // = NULL // User data for renderer backend
1869  void* BackendLanguageUserData; // = NULL // User data for non C++ programming language backend
1870 
1871  // Optional: Access OS clipboard
1872  // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
1873  const char* (*GetClipboardTextFn)(void* user_data);
1874  void (*SetClipboardTextFn)(void* user_data, const char* text);
1876 
1877  // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
1878  // (default to use native imm32 api on Windows)
1879  void (*ImeSetInputScreenPosFn)(int x, int y);
1880  void* ImeWindowHandle; // = NULL // (Windows) Set this to your HWND to get automatic IME cursor positioning.
1881 
1882  //------------------------------------------------------------------
1883  // Input - Fill before calling NewFrame()
1884  //------------------------------------------------------------------
1885  // VRV_PATCH
1886  ImVec2 DisplayPosOffset; // <unset> // Display position offset, in pixels.
1887  // VRV_PATCH_END
1888  ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX, -FLT_MAX) if mouse is unavailable (on another screen, etc.)
1889  bool MouseDown[5]; // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
1890  float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text.
1891  float MouseWheelH; // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all backends.
1892  bool KeyCtrl; // Keyboard modifier pressed: Control
1893  bool KeyShift; // Keyboard modifier pressed: Shift
1894  bool KeyAlt; // Keyboard modifier pressed: Alt
1895  bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows
1896  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).
1897  float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame().
1898 
1899  // Functions
1900  IMGUI_API void AddInputCharacter(unsigned int c); // Queue new character input
1901  IMGUI_API void AddInputCharacterUTF16(ImWchar16 c); // Queue new character input from an UTF-16 character, it can be a surrogate
1902  IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue new characters input from an UTF-8 string
1903  IMGUI_API void AddFocusEvent(bool focused); // Notifies Dear ImGui when hosting platform windows lose or gain input focus
1904  IMGUI_API void ClearInputCharacters(); // [Internal] Clear the text input buffer manually
1905  IMGUI_API void ClearInputKeys(); // [Internal] Release all keys
1906 
1907  //------------------------------------------------------------------
1908  // Output - Updated by NewFrame() or EndFrame()/Render()
1909  // (when reading from the io.WantCaptureMouse, io.WantCaptureKeyboard flags to dispatch your inputs, it is
1910  // generally easier and more correct to use their state BEFORE calling NewFrame(). See FAQ for details!)
1911  //------------------------------------------------------------------
1912 
1913  bool WantCaptureMouse; // Set when Dear ImGui will use mouse inputs, in this case do not dispatch them to your main game/application (either way, 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.).
1914  bool WantCaptureKeyboard; // Set when Dear ImGui will use keyboard inputs, in this case do not dispatch them to your main game/application (either way, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
1915  bool WantTextInput; // Mobile/console: when set, you may display an on-screen keyboard. This is set by Dear ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
1916  bool WantSetMousePos; // MousePos has been altered, backend should reposition mouse on next frame. Rarely used! Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
1917  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: clear io.WantSaveIniSettings yourself after saving!
1918  bool NavActive; // Keyboard/Gamepad navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
1919  bool NavVisible; // Keyboard/Gamepad navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
1920  float Framerate; // Rough estimate of application framerate, in frame per second. Solely for convenience. Rolling average estimation based on io.DeltaTime over 120 frames.
1921  int MetricsRenderVertices; // Vertices output during last call to Render()
1922  int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
1923  int MetricsRenderWindows; // Number of visible windows
1924  int MetricsActiveWindows; // Number of active windows
1925  int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
1926  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.
1927 
1928  //------------------------------------------------------------------
1929  // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
1930  //------------------------------------------------------------------
1931 
1932  bool WantCaptureMouseUnlessPopupClose;// Alternative to WantCaptureMouse: (WantCaptureMouse == true && WantCaptureMouseUnlessPopupClose == false) when a click over void is expected to close a popup.
1933  ImGuiKeyModFlags KeyMods; // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame()
1934  ImGuiKeyModFlags KeyModsPrev; // Previous key mods
1935  ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
1936  ImVec2 MouseClickedPos[5]; // Position at time of clicking
1937  double MouseClickedTime[5]; // Time of last click (used to figure out double-click)
1938  bool MouseClicked[5]; // Mouse button went from !Down to Down
1939  bool MouseDoubleClicked[5]; // Has mouse button been double-clicked?
1940  bool MouseReleased[5]; // Mouse button went from Down to !Down
1941  bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
1942  bool MouseDownOwnedUnlessPopupClose[5];//Track if button was clicked inside a dear imgui window.
1943  bool MouseDownWasDoubleClick[5]; // Track if button down was a double-click
1944  float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
1945  float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
1946  ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
1947  float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point
1948  float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed)
1949  float KeysDownDurationPrev[512]; // Previous duration the key has been down
1952  float PenPressure; // Touch/Pen pressure (0.0f to 1.0f, should be >0.0f only when MouseDown[0] == true). Helper storage currently unused by Dear ImGui.
1954  ImWchar16 InputQueueSurrogate; // For AddInputCharacterUTF16
1955  ImVector<ImWchar> InputQueueCharacters; // Queue of _characters_ input (obtained by platform backend). Fill using AddInputCharacter() helper.
1956 
1957  IMGUI_API ImGuiIO();
1958 };
1959 
1960 //-----------------------------------------------------------------------------
1961 // [SECTION] Misc data structures
1962 //-----------------------------------------------------------------------------
1963 
1964 // Shared state of InputText(), passed as an argument to your callback when a ImGuiInputTextFlags_Callback* flag is used.
1965 // The callback function should return 0 by default.
1966 // Callbacks (follow a flag name and see comments in ImGuiInputTextFlags_ declarations for more details)
1967 // - ImGuiInputTextFlags_CallbackEdit: Callback on buffer edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active)
1968 // - ImGuiInputTextFlags_CallbackAlways: Callback on each iteration
1969 // - ImGuiInputTextFlags_CallbackCompletion: Callback on pressing TAB
1970 // - ImGuiInputTextFlags_CallbackHistory: Callback on pressing Up/Down arrows
1971 // - ImGuiInputTextFlags_CallbackCharFilter: Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
1972 // - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
1974 {
1975  ImGuiInputTextFlags EventFlag; // One ImGuiInputTextFlags_Callback* // Read-only
1976  ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only
1977  void* UserData; // What user passed to InputText() // Read-only
1978 
1979  // Arguments for the different callback events
1980  // - To modify the text buffer in a callback, prefer using the InsertChars() / DeleteChars() function. InsertChars() will take care of calling the resize callback if necessary.
1981  // - If you know your edits are not going to resize the underlying buffer allocation, you may modify the contents of 'Buf[]' directly. You need to update 'BufTextLen' accordingly (0 <= BufTextLen < BufSize) and set 'BufDirty'' to true so InputText can update its internal state.
1982  ImWchar EventChar; // Character input // Read-write // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0;
1983  ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only // [Completion,History]
1984  char* Buf; // Text buffer // Read-write // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer!
1985  int BufTextLen; // Text length (in bytes) // Read-write // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length()
1986  int BufSize; // Buffer size (in bytes) = capacity+1 // Read-only // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1
1987  bool BufDirty; // Set if you modify Buf/BufTextLen! // Write // [Completion,History,Always]
1988  int CursorPos; // // Read-write // [Completion,History,Always]
1989  int SelectionStart; // // Read-write // [Completion,History,Always] == to SelectionEnd when no selection)
1990  int SelectionEnd; // // Read-write // [Completion,History,Always]
1991 
1992  // Helper functions for text manipulation.
1993  // Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection.
1995  IMGUI_API void DeleteChars(int pos, int bytes_count);
1996  IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
1999  bool HasSelection() const { return SelectionStart != SelectionEnd; }
2000 };
2001 
2002 // Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin().
2003 // NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough.
2005 {
2006  void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints()
2007  ImVec2 Pos; // Read-only. Window position, for reference.
2008  ImVec2 CurrentSize; // Read-only. Current window size.
2009  ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
2010 };
2011 
2012 // Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload()
2014 {
2015  // Members
2016  void* Data; // Data (copied and owned by dear imgui)
2017  int DataSize; // Data size
2018 
2019  // [Internal]
2020  ImGuiID SourceId; // Source item id
2021  ImGuiID SourceParentId; // Source parent id (if available)
2022  int DataFrameCount; // Data timestamp
2023  char DataType[32 + 1]; // Data type tag (short user-supplied string, 32 characters max)
2024  bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets)
2025  bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item.
2026 
2028  void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; }
2029  bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; }
2030  bool IsPreview() const { return Preview; }
2031  bool IsDelivery() const { return Delivery; }
2032 };
2033 
2034 // Sorting specification for one column of a table (sizeof == 12 bytes)
2036 {
2037  ImGuiID ColumnUserID; // User id of the column (if specified by a TableSetupColumn() call)
2038  ImS16 ColumnIndex; // Index of the column
2039  ImS16 SortOrder; // Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
2040  ImGuiSortDirection SortDirection : 8; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending (you can use this or SortSign, whichever is more convenient for your sort function)
2041 
2042  ImGuiTableColumnSortSpecs() { memset(this, 0, sizeof(*this)); }
2043 };
2044 
2045 // Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
2046 // Obtained by calling TableGetSortSpecs().
2047 // When 'SpecsDirty == true' you can sort your data. It will be true with sorting specs have changed since last call, or the first time.
2048 // Make sure to set 'SpecsDirty = false' after sorting, else you may wastefully sort your data every frame!
2050 {
2051  const ImGuiTableColumnSortSpecs* Specs; // Pointer to sort spec array.
2052  int SpecsCount; // Sort spec count. Most often 1. May be > 1 when ImGuiTableFlags_SortMulti is enabled. May be == 0 when ImGuiTableFlags_SortTristate is enabled.
2053  bool SpecsDirty; // Set to true when specs have changed since last time! Use this to sort again, then clear the flag.
2054 
2055  ImGuiTableSortSpecs() { memset(this, 0, sizeof(*this)); }
2056 };
2057 
2058 //-----------------------------------------------------------------------------
2059 // [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
2060 //-----------------------------------------------------------------------------
2061 
2062 // Helper: Unicode defines
2063 #define IM_UNICODE_CODEPOINT_INVALID 0xFFFD // Invalid Unicode code point (standard value).
2064 #ifdef IMGUI_USE_WCHAR32
2065 #define IM_UNICODE_CODEPOINT_MAX 0x10FFFF // Maximum Unicode code point supported by this build.
2066 #else
2067 #define IM_UNICODE_CODEPOINT_MAX 0xFFFF // Maximum Unicode code point supported by this build.
2068 #endif
2069 
2070 // 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.
2071 // Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame");
2073 {
2075  mutable int RefFrame;
2076  operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
2077 };
2078 
2079 // Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
2081 {
2082  IMGUI_API ImGuiTextFilter(const char* default_filter = "");
2083  IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
2084  IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
2085  IMGUI_API void Build();
2086  void Clear() { InputBuf[0] = 0; Build(); }
2087  bool IsActive() const { return !Filters.empty(); }
2088 
2089  // [Internal]
2091  {
2092  const char* b;
2093  const char* e;
2094 
2095  ImGuiTextRange() { b = e = NULL; }
2096  ImGuiTextRange(const char* _b, const char* _e) { b = _b; e = _e; }
2097  bool empty() const { return b == e; }
2098  IMGUI_API void split(char separator, ImVector<ImGuiTextRange>* out) const;
2099  };
2100  char InputBuf[256];
2103 };
2104 
2105 // Helper: Growable text buffer for logging/accumulating text
2106 // (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder')
2108 {
2110  IMGUI_API static char EmptyString[1];
2111 
2113  inline char operator[](int i) const { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; }
2114  const char* begin() const { return Buf.Data ? &Buf.front() : EmptyString; }
2115  const char* end() const { return Buf.Data ? &Buf.back() : EmptyString; } // Buf is zero-terminated, so end() will point on the zero-terminator
2116  int size() const { return Buf.Size ? Buf.Size - 1 : 0; }
2117  bool empty() const { return Buf.Size <= 1; }
2118  void clear() { Buf.clear(); }
2119  void reserve(int capacity) { Buf.reserve(capacity); }
2120  const char* c_str() const { return Buf.Data ? Buf.Data : EmptyString; }
2121  IMGUI_API void append(const char* str, const char* str_end = NULL);
2122  IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2);
2123  IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
2124 };
2125 
2126 // Helper: Key->Value storage
2127 // Typically you don't have to worry about this since a storage is held within each Window.
2128 // We use it to e.g. store collapse state for a tree (Int 0/1)
2129 // This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame)
2130 // You can use it as custom user storage for temporary values. Declare your own storage if, for example:
2131 // - 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).
2132 // - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
2133 // Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
2135 {
2136  // [Internal]
2138  {
2140  union { int val_i; float val_f; void* val_p; };
2141  ImGuiStoragePair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
2142  ImGuiStoragePair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; }
2143  ImGuiStoragePair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; }
2144  };
2145 
2147 
2148  // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
2149  // - Set***() functions find pair, insertion on demand if missing.
2150  // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair.
2151  void Clear() { Data.clear(); }
2152  IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const;
2153  IMGUI_API void SetInt(ImGuiID key, int val);
2154  IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const;
2155  IMGUI_API void SetBool(ImGuiID key, bool val);
2156  IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const;
2157  IMGUI_API void SetFloat(ImGuiID key, float val);
2158  IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL
2159  IMGUI_API void SetVoidPtr(ImGuiID key, void* val);
2160 
2161  // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set.
2162  // - 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.
2163  // - 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)
2164  // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar;
2165  IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0);
2166  IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false);
2167  IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f);
2168  IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL);
2169 
2170  // Use on your own storage if you know only integer are being stored (open/close all tree nodes)
2171  IMGUI_API void SetAllInt(int val);
2172 
2173  // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
2174  IMGUI_API void BuildSortByKey();
2175 };
2176 
2177 // Helper: Manually clip large list of items.
2178 // If you are submitting lots of evenly spaced items and you have a random access to the list, you can perform coarse
2179 // clipping based on visibility to save yourself from processing those items at all.
2180 // The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped.
2181 // (Dear ImGui already clip items based on their bounds but it needs to measure text size to do so, whereas manual coarse clipping before submission makes this cost and your own data fetching/submission cost almost null)
2182 // Usage:
2183 // ImGuiListClipper clipper;
2184 // clipper.Begin(1000); // We have 1000 elements, evenly spaced.
2185 // while (clipper.Step())
2186 // for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
2187 // ImGui::Text("line number %d", i);
2188 // Generally what happens is:
2189 // - Clipper lets you process the first element (DisplayStart = 0, DisplayEnd = 1) regardless of it being visible or not.
2190 // - User code submit one element.
2191 // - Clipper can measure the height of the first element
2192 // - Clipper calculate the actual range of elements to display based on the current clipping rectangle, position the cursor before the first visible element.
2193 // - User code submit visible elements.
2195 {
2198 
2199  // [Internal]
2201  int StepNo;
2204  float StartPosY;
2205 
2208 
2209  // items_count: 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)
2210  // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing().
2211  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.
2212  IMGUI_API void End(); // Automatically called on the last call of Step() that returns false.
2213  IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items.
2214 
2215 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2216  inline ImGuiListClipper(int items_count, float items_height = -1.0f) { memset(this, 0, sizeof(*this)); ItemsCount = -1; Begin(items_count, items_height); } // [removed in 1.79]
2217 #endif
2218 };
2219 
2220 // Helpers macros to generate 32-bit encoded colors
2221 #ifdef IMGUI_USE_BGRA_PACKED_COLOR
2222 #define IM_COL32_R_SHIFT 16
2223 #define IM_COL32_G_SHIFT 8
2224 #define IM_COL32_B_SHIFT 0
2225 #define IM_COL32_A_SHIFT 24
2226 #define IM_COL32_A_MASK 0xFF000000
2227 #else
2228 #define IM_COL32_R_SHIFT 0
2229 #define IM_COL32_G_SHIFT 8
2230 #define IM_COL32_B_SHIFT 16
2231 #define IM_COL32_A_SHIFT 24
2232 #define IM_COL32_A_MASK 0xFF000000
2233 #endif
2234 #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))
2235 #define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white = 0xFFFFFFFF
2236 #define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
2237 #define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black = 0x00000000
2238 
2239 // Helper: ImColor() implicitly converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
2240 // Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
2241 // **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
2242 // **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.
2243 struct ImColor
2244 {
2246 
2247  ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; }
2248  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; }
2249  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; }
2250  ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
2251  ImColor(const ImVec4& col) { Value = col; }
2252  inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
2253  inline operator ImVec4() const { return Value; }
2254 
2255  // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
2256  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; }
2257  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); }
2258 };
2259 
2260 //-----------------------------------------------------------------------------
2261 // [SECTION] Drawing API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
2262 // Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
2263 //-----------------------------------------------------------------------------
2264 
2265 // The maximum line width to bake anti-aliased textures for. Build atlas with ImFontAtlasFlags_NoBakedLines to disable baking.
2266 #ifndef IM_DRAWLIST_TEX_LINES_WIDTH_MAX
2267 #define IM_DRAWLIST_TEX_LINES_WIDTH_MAX (63)
2268 #endif
2269 
2270 // ImDrawCallback: Draw callbacks for advanced uses [configurable type: override in imconfig.h]
2271 // NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering,
2272 // you can poke into the draw list for that! Draw callback may be useful for example to:
2273 // A) Change your GPU render state,
2274 // B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc.
2275 // The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }'
2276 // If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering backend accordingly.
2277 #ifndef ImDrawCallback
2278 typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
2279 #endif
2280 
2281 // Special Draw callback value to request renderer backend to reset the graphics/render state.
2282 // The renderer backend needs to handle this special value, otherwise it will crash trying to call a function at this address.
2283 // This is useful for example if you submitted callbacks which you know have altered the render state and you want it to be restored.
2284 // It is not done by default because they are many perfectly useful way of altering render state for imgui contents (e.g. changing shader/blending settings before an Image call).
2285 #define ImDrawCallback_ResetRenderState (ImDrawCallback)(-1)
2286 
2287 // Typically, 1 command = 1 GPU draw call (unless command is a callback)
2288 // - VtxOffset/IdxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled,
2289 // those fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices.
2290 // Pre-1.71 backends will typically ignore the VtxOffset/IdxOffset fields.
2291 // - The ClipRect/TextureId/VtxOffset fields must be contiguous as we memcmp() them together (this is asserted for).
2293 {
2294  ImVec4 ClipRect; // 4*4 // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
2295  ImTextureID TextureId; // 4-8 // 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.
2296  unsigned int VtxOffset; // 4 // Start offset in vertex buffer. ImGuiBackendFlags_RendererHasVtxOffset: always 0, otherwise may be >0 to support meshes larger than 64K vertices with 16-bit indices.
2297  unsigned int IdxOffset; // 4 // Start offset in index buffer. Always equal to sum of ElemCount drawn so far.
2298  unsigned int ElemCount; // 4 // 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[].
2299  ImDrawCallback UserCallback; // 4-8 // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
2300  void* UserCallbackData; // 4-8 // The draw callback code can access this.
2301 
2302  ImDrawCmd() { memset(this, 0, sizeof(*this)); } // Also ensure our padding fields are zeroed
2303 
2304  // Since 1.83: returns ImTextureID associated with this draw call. Warning: DO NOT assume this is always same as 'TextureId' (we will change this function for an upcoming feature)
2305  inline ImTextureID GetTexID() const { return TextureId; }
2306 };
2307 
2308 // Vertex layout
2309 #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT
2311 {
2315 };
2316 #else
2317 // You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
2318 // 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.
2319 // The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared a the time you'd want to set your type up.
2320 // 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.
2321 IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
2322 #endif
2323 
2324 // [Internal] For use by ImDrawList
2326 {
2329  unsigned int VtxOffset;
2330 };
2331 
2332 // [Internal] For use by ImDrawListSplitter
2334 {
2337 };
2338 
2339 
2340 // Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order.
2341 // This is used by the Columns/Tables API, so items of each column can be batched together in a same draw call.
2343 {
2344  int _Current; // Current channel number (0)
2345  int _Count; // Number of active channels (1+)
2346  ImVector<ImDrawChannel> _Channels; // Draw channels (not resized down so _Count might be < Channels.Size)
2347 
2348  inline ImDrawListSplitter() { memset(this, 0, sizeof(*this)); }
2349  inline ~ImDrawListSplitter() { ClearFreeMemory(); }
2350  inline void Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame
2351  IMGUI_API void ClearFreeMemory();
2352  IMGUI_API void Split(ImDrawList* draw_list, int count);
2353  IMGUI_API void Merge(ImDrawList* draw_list);
2354  IMGUI_API void SetCurrentChannel(ImDrawList* draw_list, int channel_idx);
2355 };
2356 
2357 // Flags for ImDrawList functions
2358 // (Legacy: bit 0 must always correspond to ImDrawFlags_Closed to be backward compatible with old API using a bool. Bits 1..3 must be unused)
2360 {
2362  ImDrawFlags_Closed = 1 << 0, // PathStroke(), AddPolyline(): specify that shape should be closed (Important: this is always == 1 for legacy reason)
2363  ImDrawFlags_RoundCornersTopLeft = 1 << 4, // AddRect(), AddRectFilled(), PathRect(): enable rounding top-left corner only (when rounding > 0.0f, we default to all corners). Was 0x01.
2364  ImDrawFlags_RoundCornersTopRight = 1 << 5, // AddRect(), AddRectFilled(), PathRect(): enable rounding top-right corner only (when rounding > 0.0f, we default to all corners). Was 0x02.
2365  ImDrawFlags_RoundCornersBottomLeft = 1 << 6, // AddRect(), AddRectFilled(), PathRect(): enable rounding bottom-left corner only (when rounding > 0.0f, we default to all corners). Was 0x04.
2366  ImDrawFlags_RoundCornersBottomRight = 1 << 7, // AddRect(), AddRectFilled(), PathRect(): enable rounding bottom-right corner only (when rounding > 0.0f, we default to all corners). Wax 0x08.
2367  ImDrawFlags_RoundCornersNone = 1 << 8, // AddRect(), AddRectFilled(), PathRect(): disable rounding on all corners (when rounding > 0.0f). This is NOT zero, NOT an implicit flag!
2373  ImDrawFlags_RoundCornersDefault_ = ImDrawFlags_RoundCornersAll, // Default to ALL corners if none of the _RoundCornersXX flags are specified.
2375 };
2376 
2377 // Flags for ImDrawList instance. Those are set automatically by ImGui:: functions from ImGuiIO settings, and generally not manipulated directly.
2378 // It is however possible to temporarily alter flags between calls to ImDrawList:: functions.
2380 {
2382  ImDrawListFlags_AntiAliasedLines = 1 << 0, // Enable anti-aliased lines/borders (*2 the number of triangles for 1.0f wide line or lines thin enough to be drawn using textures, otherwise *3 the number of triangles)
2383  ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1, // Enable anti-aliased lines/borders using textures when possible. Require backend to render with bilinear filtering.
2384  ImDrawListFlags_AntiAliasedFill = 1 << 2, // Enable anti-aliased edge around filled shapes (rounded rectangles, circles).
2385  ImDrawListFlags_AllowVtxOffset = 1 << 3 // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled.
2386 };
2387 
2388 // Draw command list
2389 // This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame,
2390 // all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
2391 // Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to
2392 // access the current window draw list and draw custom primitives.
2393 // You can interleave normal ImGui:: calls and adding primitives to the current draw list.
2394 // In single viewport mode, top-left is == GetMainViewport()->Pos (generally 0,0), bottom-right is == GetMainViewport()->Pos+Size (generally io.DisplaySize).
2395 // You are totally free to apply whatever transformation matrix to want to the data (depending on the use of the transformation you may want to apply it to ClipRect as well!)
2396 // 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.
2398 {
2399  // This is what you have to render
2400  ImVector<ImDrawCmd> CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback.
2401  ImVector<ImDrawIdx> IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those
2402  ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
2403  ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
2404 
2405  // [Internal, used while building lists]
2406  unsigned int _VtxCurrentIdx; // [Internal] generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
2407  const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
2408  const char* _OwnerName; // Pointer to owner window's name for debugging
2409  ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
2410  ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
2413  ImVector<ImVec2> _Path; // [Internal] current path building
2414  ImDrawCmdHeader _CmdHeader; // [Internal] template of active commands. Fields should match those of CmdBuffer.back().
2415  ImDrawListSplitter _Splitter; // [Internal] for channels api (note: prefer using your own persistent instance of ImDrawListSplitter!)
2416  float _FringeScale; // [Internal] anti-alias fringe is scaled by this value, this helps to keep things sharp while zooming at vertex buffer content
2417 
2418  // 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)
2419  ImDrawList(const ImDrawListSharedData* shared_data) { memset(this, 0, sizeof(*this)); _Data = shared_data; }
2420 
2421  ~ImDrawList() { _ClearFreeMemory(); }
2422  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)
2423  IMGUI_API void PushClipRectFullScreen();
2424  IMGUI_API void PopClipRect();
2425  IMGUI_API void PushTextureID(ImTextureID texture_id);
2426  IMGUI_API void PopTextureID();
2427  inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
2428  inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
2429 
2430  // Primitives
2431  // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners.
2432  // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred).
2433  // In older versions (until Dear ImGui 1.77) the AddCircle functions defaulted to num_segments == 12.
2434  // In future versions we will use textures to provide cheaper and higher-quality circles.
2435  // Use AddNgon() and AddNgonFilled() functions if you need to guaranteed a specific number of sides.
2436  IMGUI_API void AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f);
2437  IMGUI_API void AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f); // a: upper-left, b: lower-right (== upper-left + size)
2438  IMGUI_API void AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0); // a: upper-left, b: lower-right (== upper-left + size)
2439  IMGUI_API void AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
2440  IMGUI_API void AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f);
2441  IMGUI_API void AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col);
2442  IMGUI_API void AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f);
2443  IMGUI_API void AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col);
2444  IMGUI_API void AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 0, float thickness = 1.0f);
2445  IMGUI_API void AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 0);
2446  IMGUI_API void AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness = 1.0f);
2447  IMGUI_API void AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments);
2448  IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
2449  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);
2450  IMGUI_API void AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);
2451  IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
2452  IMGUI_API void AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0); // Cubic Bezier (4 control points)
2453  IMGUI_API void AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness, int num_segments = 0); // Quadratic Bezier (3 control points)
2454 
2455  // Image primitives
2456  // - Read FAQ to understand what ImTextureID is.
2457  // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle.
2458  // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture.
2459  IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE);
2460  IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE);
2461  IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawFlags flags = 0);
2462 
2463  // Stateful path API, add points then finish with PathFillConvex() or PathStroke()
2464  inline void PathClear() { _Path.Size = 0; }
2465  inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
2466  inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size - 1], &pos, 8) != 0) _Path.push_back(pos); }
2467  inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; } // Note: Anti-aliased filling requires points to be in clockwise order.
2468  inline void PathStroke(ImU32 col, ImDrawFlags flags = 0, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, flags, thickness); _Path.Size = 0; }
2469  IMGUI_API void PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 0);
2470  IMGUI_API void PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
2471  IMGUI_API void PathBezierCubicCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0); // Cubic Bezier (4 control points)
2472  IMGUI_API void PathBezierQuadraticCurveTo(const ImVec2& p2, const ImVec2& p3, int num_segments = 0); // Quadratic Bezier (3 control points)
2473  IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawFlags flags = 0);
2474 
2475  // Advanced
2476  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.
2477  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
2478  IMGUI_API ImDrawList* CloneOutput() const; // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer.
2479 
2480  // Advanced: Channels
2481  // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit FG primitives before BG primitives)
2482  // - Use to minimize draw calls (e.g. if going back-and-forth between multiple clipping rectangles, prefer to append into separate channels then merge at the end)
2483  // - FIXME-OBSOLETE: This API shouldn't have been in ImDrawList in the first place!
2484  // Prefer using your own persistent instance of ImDrawListSplitter as you can stack them.
2485  // Using the ImDrawList::ChannelsXXXX you cannot stack a split over another.
2486  inline void ChannelsSplit(int count) { _Splitter.Split(this, count); }
2487  inline void ChannelsMerge() { _Splitter.Merge(this); }
2488  inline void ChannelsSetCurrent(int n) { _Splitter.SetCurrentChannel(this, n); }
2489 
2490  // Advanced: Primitives allocations
2491  // - We render triangles (three vertices)
2492  // - All primitives needs to be reserved via PrimReserve() beforehand.
2493  IMGUI_API void PrimReserve(int idx_count, int vtx_count);
2494  IMGUI_API void PrimUnreserve(int idx_count, int vtx_count);
2495  IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles)
2496  IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col);
2497  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);
2498  inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; }
2499  inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; }
2500  inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } // Write vertex with unique index
2501 
2502 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2503  inline void AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0) { AddBezierCubic(p1, p2, p3, p4, col, thickness, num_segments); }
2504  inline void PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0) { PathBezierCubicCurveTo(p2, p3, p4, num_segments); }
2505 #endif
2506 
2507  // [Internal helpers]
2508  IMGUI_API void _ResetForNewFrame();
2509  IMGUI_API void _ClearFreeMemory();
2510  IMGUI_API void _PopUnusedDrawCmd();
2511  IMGUI_API void _TryMergeDrawCmds();
2512  IMGUI_API void _OnChangedClipRect();
2513  IMGUI_API void _OnChangedTextureID();
2514  IMGUI_API void _OnChangedVtxOffset();
2515  IMGUI_API int _CalcCircleAutoSegmentCount(float radius) const;
2516  IMGUI_API void _PathArcToFastEx(const ImVec2& center, float radius, int a_min_sample, int a_max_sample, int a_step);
2517  IMGUI_API void _PathArcToN(const ImVec2& center, float radius, float a_min, float a_max, int num_segments);
2518 };
2519 
2520 // All draw data to render a Dear ImGui frame
2521 // (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose,
2522 // as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList)
2524 {
2525  bool Valid; // Only valid after Render() is called and before the next NewFrame() is called.
2526  int CmdListsCount; // Number of ImDrawList* to render
2527  int TotalIdxCount; // For convenience, sum of all ImDrawList's IdxBuffer.Size
2528  int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size
2529  ImDrawList** CmdLists; // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here.
2530  ImVec2 DisplayPos; // Top-left position of the viewport to render (== top-left of the orthogonal projection matrix to use) (== GetMainViewport()->Pos for the main viewport, == (0.0) in most single-viewport applications)
2531  ImVec2 DisplaySize; // Size of the viewport to render (== GetMainViewport()->Size for the main viewport, == io.DisplaySize in most single-viewport applications)
2532  ImVec2 FramebufferScale; // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display.
2533 
2534  // Functions
2535  ImDrawData() { Clear(); }
2536  void Clear() { memset(this, 0, sizeof(*this)); } // The ImDrawList are owned by ImGuiContext!
2537  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!
2538  IMGUI_API void ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
2539 };
2540 
2541 //-----------------------------------------------------------------------------
2542 // [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont)
2543 //-----------------------------------------------------------------------------
2544 
2546 {
2547  void* FontData; // // TTF/OTF data
2548  int FontDataSize; // // TTF/OTF data size
2549  bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
2550  int FontNo; // 0 // Index of font within TTF/OTF file
2551  float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height).
2552  int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. Note the difference between 2 and 3 is minimal so you can reduce this to 2 to save memory. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
2553  int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. This is not really useful as we don't use sub-pixel positions on the Y axis.
2554  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.
2555  ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
2556  ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
2557  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.
2558  float GlyphMinAdvanceX; // 0 // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font
2559  float GlyphMaxAdvanceX; // FLT_MAX // Maximum AdvanceX for glyphs
2560  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.
2561  unsigned int FontBuilderFlags; // 0 // Settings for custom font builder. THIS IS BUILDER IMPLEMENTATION DEPENDENT. Leave as zero if unsure.
2562  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.
2563  ImWchar EllipsisChar; // -1 // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used.
2564 
2565  // [Internal]
2566  char Name[40]; // Name (strictly to ease debugging)
2568 
2570 };
2571 
2572 // Hold rendering data for one glyph.
2573 // (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this)
2575 {
2576  unsigned int Colored : 1; // Flag to indicate glyph is colored and should generally ignore tinting (make it usable with no shift on little-endian as this is used in loops)
2577  unsigned int Visible : 1; // Flag to indicate glyph has no visible pixels (e.g. space). Allow early out when rendering.
2578  unsigned int Codepoint : 30; // 0x0000..0x10FFFF
2579  float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
2580  float X0, Y0, X1, Y1; // Glyph corners
2581  float U0, V0, U1, V1; // Texture coordinates
2582 };
2583 
2584 // Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges().
2585 // This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
2587 {
2588  ImVector<ImU32> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
2589 
2591  inline void Clear() { int size_in_bytes = (IM_UNICODE_CODEPOINT_MAX + 1) / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); }
2592  inline bool GetBit(size_t n) const { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
2593  inline void SetBit(size_t n) { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
2594  inline void AddChar(ImWchar c) { SetBit(c); } // Add character
2595  IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
2596  IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
2597  IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
2598 };
2599 
2600 // See ImFontAtlas::AddCustomRectXXX functions.
2602 {
2603  unsigned short Width, Height; // Input // Desired rectangle dimension
2604  unsigned short X, Y; // Output // Packed position in Atlas
2605  unsigned int GlyphID; // Input // For custom font glyphs only (ID < 0x110000)
2606  float GlyphAdvanceX; // Input // For custom font glyphs only: glyph xadvance
2607  ImVec2 GlyphOffset; // Input // For custom font glyphs only: glyph display offset
2608  ImFont* Font; // Input // For custom font glyphs only: target font
2609  ImFontAtlasCustomRect() { Width = Height = 0; X = Y = 0xFFFF; GlyphID = 0; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0, 0); Font = NULL; }
2610  bool IsPacked() const { return X != 0xFFFF; }
2611 };
2612 
2613 // Flags for ImFontAtlas build
2615 {
2617  ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two
2618  ImFontAtlasFlags_NoMouseCursors = 1 << 1, // Don't build software mouse cursors into the atlas (save a little texture memory)
2619  ImFontAtlasFlags_NoBakedLines = 1 << 2 // Don't build thick line textures into the atlas (save a little texture memory). The AntiAliasedLinesUseTex features uses them, otherwise they will be rendered using polygons (more expensive for CPU/GPU).
2620 };
2621 
2622 // Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding:
2623 // - One or more fonts.
2624 // - Custom graphics data needed to render the shapes needed by Dear ImGui.
2625 // - Mouse cursor shapes for software cursor rendering (unless setting 'Flags |= ImFontAtlasFlags_NoMouseCursors' in the font atlas).
2626 // It is the user-code responsibility to setup/build the atlas, then upload the pixel data into a texture accessible by your graphics api.
2627 // - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you.
2628 // - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
2629 // - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples)
2630 // - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API.
2631 // This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details.
2632 // Common pitfalls:
2633 // - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the
2634 // atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
2635 // - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction.
2636 // You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed,
2637 // - Even though many functions are suffixed with "TTF", OTF data is supported just as well.
2638 // - This is an old API and it is currently awkward for those and and various other reasons! We will address them in the future!
2640 {
2642  IMGUI_API ~ImFontAtlas();
2643  IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg);
2644  IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL);
2645  IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
2646  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 destruction of the atlas. Set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed.
2647  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.
2648  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.
2649  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.
2650  IMGUI_API void ClearTexData(); // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory.
2651  IMGUI_API void ClearFonts(); // Clear output font data (glyphs storage, UV coordinates).
2652  IMGUI_API void Clear(); // Clear all input and output.
2653 
2654  // Build atlas, retrieve pixel data.
2655  // 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().
2656  // The pitch is always = Width * BytesPerPixels (1 or 4)
2657  // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into
2658  // the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste.
2659  IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions.
2660  IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
2661  IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel
2662  bool IsBuilt() const { return Fonts.Size > 0 && TexReady; } // Bit ambiguous: used to detect when user didn't built texture but effectively we should check TexID != 0 except that would be backend dependent...
2663  void SetTexID(ImTextureID id) { TexID = id; }
2664 
2665  //-------------------------------------------
2666  // Glyph Ranges
2667  //-------------------------------------------
2668 
2669  // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
2670  // 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.
2671  // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data.
2672  IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
2673  IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
2674  IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 2999 Ideographs
2675  IMGUI_API const ImWchar* GetGlyphRangesChineseFull(); // Default + Half-Width + Japanese Hiragana/Katakana + full set of about 21000 CJK Unified Ideographs
2676  IMGUI_API const ImWchar* GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese
2677  IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
2678  IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
2679  IMGUI_API const ImWchar* GetGlyphRangesVietnamese(); // Default + Vietnamese characters
2680 
2681  //-------------------------------------------
2682  // [BETA] Custom Rectangles/Glyphs API
2683  //-------------------------------------------
2684 
2685  // You can request arbitrary rectangles to be packed into the atlas, for your own purposes.
2686  // - After calling Build(), you can query the rectangle position and render your pixels.
2687  // - If you render colored output, set 'atlas->TexPixelsUseColors = true' as this may help some backends decide of prefered texture format.
2688  // - You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
2689  // so you can render e.g. custom colorful icons and use them as regular glyphs.
2690  // - Read docs/FONTS.md for more details about using colorful icons.
2691  // - Note: this API may be redesigned later in order to support multi-monitor varying DPI settings.
2692  IMGUI_API int AddCustomRectRegular(int width, int height);
2693  IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0, 0));
2694  ImFontAtlasCustomRect* GetCustomRectByIndex(int index) { IM_ASSERT(index >= 0); return &CustomRects[index]; }
2695 
2696  // [Internal]
2697  IMGUI_API void CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const;
2698  IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
2699 
2700  //-------------------------------------------
2701  // Members
2702  //-------------------------------------------
2703 
2704  ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_)
2705  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.
2706  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.
2707  int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0.
2708  bool Locked; // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
2709 
2710  // [Internal]
2711  // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
2712  bool TexReady; // Set when texture was built matching current font input
2713  bool TexPixelsUseColors; // Tell whether our texture data is known to use colors (rather than just alpha channel), in order to help backend select a format.
2714  unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
2715  unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
2716  int TexWidth; // Texture width calculated during Build().
2717  int TexHeight; // Texture height calculated during Build().
2718  ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight)
2719  ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
2720  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.
2721  ImVector<ImFontAtlasCustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
2722  ImVector<ImFontConfig> ConfigData; // Configuration data
2723  ImVec4 TexUvLines[IM_DRAWLIST_TEX_LINES_WIDTH_MAX + 1]; // UVs for baked anti-aliased lines
2724 
2725  // [Internal] Font builder
2726  const ImFontBuilderIO* FontBuilderIO; // Opaque interface to a font builder (default to stb_truetype, can be changed to use FreeType by defining IMGUI_ENABLE_FREETYPE).
2727  unsigned int FontBuilderFlags; // Shared flags (for all fonts) for custom font builder. THIS IS BUILD IMPLEMENTATION DEPENDENT. Per-font override is also available in ImFontConfig.
2728 
2729  // [Internal] Packing data
2730  int PackIdMouseCursors; // Custom texture rectangle ID for white pixel and mouse cursors
2731  int PackIdLines; // Custom texture rectangle ID for baked anti-aliased lines
2732 
2733 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2734  typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+
2735  //typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+
2736 #endif
2737 };
2738 
2739 // Font runtime data and rendering
2740 // ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
2741 struct ImFont
2742 {
2743  // Members: Hot ~20/24 bytes (for CalcTextSize)
2744  ImVector<float> IndexAdvanceX; // 12-16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
2745  float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX
2746  float FontSize; // 4 // in // // Height of characters/line, set during loading (don't change after loading)
2747 
2748  // Members: Hot ~28/40 bytes (for CalcTextSize + render loop)
2749  ImVector<ImWchar> IndexLookup; // 12-16 // out // // Sparse. Index glyphs by Unicode code-point.
2750  ImVector<ImFontGlyph> Glyphs; // 12-16 // out // // All glyphs.
2751  const ImFontGlyph* FallbackGlyph; // 4-8 // out // = FindGlyph(FontFallbackChar)
2752 
2753  // Members: Cold ~32/40 bytes
2754  ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into
2755  const ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData
2756  short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
2757  ImWchar FallbackChar; // 2 // out // = FFFD/'?' // Character used if a glyph isn't found.
2758  ImWchar EllipsisChar; // 2 // out // = '...' // Character used for ellipsis rendering.
2759  ImWchar DotChar; // 2 // out // = '.' // Character used for ellipsis rendering (if a single '...' character isn't found)
2760  bool DirtyLookupTables; // 1 // out //
2761  float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
2762  float Ascent, Descent; // 4+4 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
2763  int MetricsTotalSurface;// 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
2764  ImU8 Used4kPagesMap[(IM_UNICODE_CODEPOINT_MAX+1)/4096/8]; // 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations across all used codepoints.
2765 
2766  // Methods
2767  IMGUI_API ImFont();
2768  IMGUI_API ~ImFont();
2769  IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
2770  IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
2771  float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
2772  bool IsLoaded() const { return ContainerAtlas != NULL; }
2773  const char* GetDebugName() const { return ConfigData ? ConfigData->Name : "<unknown>"; }
2774 
2775  // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
2776  // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
2777  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
2778  IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const;
2779  IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const;
2780  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;
2781 
2782  // [Internal] Don't use!
2783  IMGUI_API void BuildLookupTable();
2784  IMGUI_API void ClearOutputData();
2785  IMGUI_API void GrowIndex(int new_size);
2786  IMGUI_API void AddGlyph(const ImFontConfig* src_cfg, ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
2787  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.
2788  IMGUI_API void SetGlyphVisible(ImWchar c, bool visible);
2789  IMGUI_API bool IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last);
2790 };
2791 
2792 //-----------------------------------------------------------------------------
2793 // [SECTION] Viewports
2794 //-----------------------------------------------------------------------------
2795 
2796 // Flags stored in ImGuiViewport::Flags, giving indications to the platform backends.
2798 {
2800  ImGuiViewportFlags_IsPlatformWindow = 1 << 0, // Represent a Platform Window
2801  ImGuiViewportFlags_IsPlatformMonitor = 1 << 1, // Represent a Platform Monitor (unused yet)
2802  ImGuiViewportFlags_OwnedByApp = 1 << 2 // Platform Window: is created/managed by the application (rather than a dear imgui backend)
2803 };
2804 
2805 // - Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows.
2806 // - In 'docking' branch with multi-viewport enabled, we extend this concept to have multiple active viewports.
2807 // - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode.
2808 // - About Main Area vs Work Area:
2809 // - Main Area = entire viewport.
2810 // - Work Area = entire viewport minus sections used by main menu bars (for platform windows), or by task bar (for platform monitor).
2811 // - Windows are generally trying to stay within the Work Area of their host viewport.
2813 {
2814  ImGuiViewportFlags Flags; // See ImGuiViewportFlags_
2815  ImVec2 Pos; // Main Area: Position of the viewport (Dear ImGui coordinates are the same as OS desktop/native coordinates)
2816  ImVec2 Size; // Main Area: Size of the viewport.
2817  ImVec2 WorkPos; // Work Area: Position of the viewport minus task bars, menus bars, status bars (>= Pos)
2818  ImVec2 WorkSize; // Work Area: Size of the viewport minus task bars, menu bars, status bars (<= Size)
2819 
2820  ImGuiViewport() { memset(this, 0, sizeof(*this)); }
2821 
2822  // Helpers
2823  ImVec2 GetCenter() const { return ImVec2(Pos.x + Size.x * 0.5f, Pos.y + Size.y * 0.5f); }
2824  ImVec2 GetWorkCenter() const { return ImVec2(WorkPos.x + WorkSize.x * 0.5f, WorkPos.y + WorkSize.y * 0.5f); }
2825 };
2826 
2827 //-----------------------------------------------------------------------------
2828 // [SECTION] Obsolete functions and types
2829 // (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details)
2830 // Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead.
2831 //-----------------------------------------------------------------------------
2832 
2833 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2834 namespace ImGui
2835 {
2836  // OBSOLETED in 1.85 (from August 2021)
2838  // OBSOLETED in 1.81 (from February 2021)
2839  IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // Helper to calculate size from items_count and height_in_items
2840  static inline bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0, 0)) { return BeginListBox(label, size); }
2841  static inline void ListBoxFooter() { EndListBox(); }
2842  // OBSOLETED in 1.79 (from August 2020)
2843  static inline void OpenPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mb = 1) { OpenPopupOnItemClick(str_id, mb); } // Bool return value removed. Use IsWindowAppearing() in BeginPopup() instead. Renamed in 1.77, renamed back in 1.79. Sorry!
2844  // OBSOLETED in 1.78 (from June 2020)
2845  // Old drag/sliders functions that took a 'float power = 1.0' argument instead of flags.
2846  // For shared code, you can version check at compile-time with `#if IMGUI_VERSION_NUM >= 17704`.
2847  IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power);
2848  IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power);
2849  static inline bool DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power); }
2850  static inline bool DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power); }
2851  static inline bool DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power); }
2852  static inline bool DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power); }
2853  IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power);
2854  IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format, float power);
2855  static inline bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power) { return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power); }
2856  static inline bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power); }
2857  static inline bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power); }
2858  static inline bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); }
2859  // OBSOLETED in 1.77 (from June 2020)
2860  static inline bool BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mb, bool over_items) { return BeginPopupContextWindow(str_id, mb | (over_items ? 0 : ImGuiPopupFlags_NoOpenOverItems)); }
2861  // OBSOLETED in 1.72 (from April 2019)
2863  // OBSOLETED in 1.71 (from June 2019)
2864  static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); }
2865  // OBSOLETED in 1.70 (from May 2019)
2866  static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; }
2867 
2868  // Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE)
2869  //static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); } // OBSOLETED in 1.69 (from Mar 2019)
2870  //static inline void SetScrollHere(float ratio = 0.5f) { SetScrollHereY(ratio); } // OBSOLETED in 1.66 (from Nov 2018)
2871  //static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); } // OBSOLETED in 1.63 (from Aug 2018)
2872  //static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); } // OBSOLETED in 1.60 (from Apr 2018)
2873  //static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018)
2874  //static inline void ShowTestWindow() { return ShowDemoWindow(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
2875  //static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
2876  //static inline bool IsRootWindowOrAnyChildFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
2877  //static inline void SetNextWindowContentWidth(float w) { SetNextWindowContentSize(ImVec2(w, 0.0f)); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
2878  //static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
2879 }
2880 
2881 // OBSOLETED in 1.82 (from Mars 2021): flags for AddRect(), AddRectFilled(), AddImageRounded(), PathRect()
2884 {
2885  ImDrawCornerFlags_None = ImDrawFlags_RoundCornersNone, // Was == 0 prior to 1.82, this is now == ImDrawFlags_RoundCornersNone which is != 0 and not implicit
2886  ImDrawCornerFlags_TopLeft = ImDrawFlags_RoundCornersTopLeft, // Was == 0x01 (1 << 0) prior to 1.82. Order matches ImDrawFlags_NoRoundCorner* flag (we exploit this internally).
2887  ImDrawCornerFlags_TopRight = ImDrawFlags_RoundCornersTopRight, // Was == 0x02 (1 << 1) prior to 1.82.
2888  ImDrawCornerFlags_BotLeft = ImDrawFlags_RoundCornersBottomLeft, // Was == 0x04 (1 << 2) prior to 1.82.
2889  ImDrawCornerFlags_BotRight = ImDrawFlags_RoundCornersBottomRight, // Was == 0x08 (1 << 3) prior to 1.82.
2890  ImDrawCornerFlags_All = ImDrawFlags_RoundCornersAll, // Was == 0x0F prior to 1.82
2895 };
2896 
2897 #endif // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2898 
2899 //-----------------------------------------------------------------------------
2900 
2901 #if defined(__clang__)
2902 #pragma clang diagnostic pop
2903 #elif defined(__GNUC__)
2904 #pragma GCC diagnostic pop
2905 #endif
2906 
2907 #ifdef _MSC_VER
2908 #pragma warning (pop)
2909 #endif
2910 
2911 // Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h)
2912 #ifdef IMGUI_INCLUDE_IMGUI_USER_H
2913 #include "imgui_user.h"
2914 #endif
2915 
2916 #endif // #ifndef IMGUI_DISABLE
ImGuiTextBuffer()
Definition: imgui.h:2112
ImGuiTableBgTarget_
Definition: imgui.h:1259
ImVec4 Value
Definition: imgui.h:2245
Definition: imgui.h:1264
IMGUI_API void ShowDemoWindow(bool *p_open=NULL)
float Y1
Definition: imgui.h:2580
IMGUI_API void SetTooltip(const char *fmt,...) IM_FMTARGS(1)
IMGUI_API void StyleColorsClassic(ImGuiStyle *dst=NULL)
Definition: imgui.h:1618
Definition: imgui.h:1181
Definition: imgui.h:2894
Definition: imgui.h:1634
IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags)
Definition: imgui.h:1560
Definition: imgui.h:1529
Definition: imgui_internal.h:700
void resize(int new_size)
Definition: imgui.h:1738
Definition: imgui.h:1476
bool TexPixelsUseColors
Definition: imgui.h:2713
bool WantSaveIniSettings
Definition: imgui.h:1917
Definition: imgui.h:2545
Definition: imgui.h:1497
void * BackendRendererUserData
Definition: imgui.h:1868
int ImGuiTableRowFlags
Definition: imgui.h:204
int ImGuiSliderFlags
Definition: imgui.h:199
ImVector< ImTextureID > _TextureIdStack
Definition: imgui.h:2412
float NavInputsDownDurationPrev[ImGuiNavInput_COUNT]
Definition: imgui.h:1951
const T & back() const
Definition: imgui.h:1734
ImVec2 GetCenter() const
Definition: imgui.h:2823
Definition: imgui.h:1064
Definition: imgui.h:1054
Definition: imgui.h:1561
Definition: imgui.h:2890
ImVector< ImWchar > IndexLookup
Definition: imgui.h:2749
Definition: imgui.h:1527
IMGUI_API void SetItemDefaultFocus()
void push_back(const T &v)
Definition: imgui.h:1744
Definition: imgui.h:1541
IMGUI_API void PopButtonRepeat()
IMGUI_API double GetTime()
int CmdListsCount
Definition: imgui.h:2526
IMGUI_API void EndGroup()
Definition: imgui.h:1647
Definition: imgui.h:1616
Definition: imgui.h:1485
float MouseWheelH
Definition: imgui.h:1891
char * Buf
Definition: imgui.h:1984
Definition: imgui.h:1407
float _FringeScale
Definition: imgui.h:2416
int capacity() const
Definition: imgui.h:1723
Definition: imgui.h:1643
unsigned int ImU32
Definition: imgui.h:230
#define IM_FREE(_PTR)
Definition: imgui.h:1680
ImGuiSortDirection_
Definition: imgui.h:1349
ImGuiPayload()
Definition: imgui.h:2027
void ClearSelection()
Definition: imgui.h:1998
Definition: imgui.h:1151
~ImVector()
Definition: imgui.h:1713
ImVec2 CellPadding
Definition: imgui.h:1787
Definition: imgui.h:1232
ImVec2 GetClipRectMax() const
Definition: imgui.h:2428
ImVec2 WindowTitleAlign
Definition: imgui.h:1776
ImVec2()
Definition: imgui.h:265
IMGUI_API void LoadIniSettingsFromMemory(const char *ini_data, size_t ini_size=0)
T * end()
Definition: imgui.h:1729
float SizePixels
Definition: imgui.h:2551
int SelectionStart
Definition: imgui.h:1989
IMGUI_API void AddInputCharactersUTF8(const char *str)
Definition: imgui.h:1447
Definition: imgui.h:1161
IMGUI_API void EndCombo()
ImGuiDir WindowMenuButtonPosition
Definition: imgui.h:1777
Definition: imgui.h:1548
bool IsPreview() const
Definition: imgui.h:2030
ImVector< ImFontConfig > ConfigData
Definition: imgui.h:2722
Definition: imgui.h:1229
IMGUI_API bool IsWindowCollapsed()
int ImGuiViewportFlags
Definition: imgui.h:206
IMGUI_API void PopItemWidth()
IMGUI_API void PushItemWidth(float item_width)
Definition: imgui.h:1401
int ImGuiSortDirection
Definition: imgui.h:181
ImGuiNavInput_
Definition: imgui.h:1398
IMGUI_API bool TabItemButton(const char *label, ImGuiTabItemFlags flags=0)
Definition: imgui.h:1035
IMGUI_API bool IsMouseDown(ImGuiMouseButton button)
float ScrollbarSize
Definition: imgui.h:1791
int PackIdMouseCursors
Definition: imgui.h:2730
IMGUI_API void TableHeader(const char *label)
Definition: imgui.h:1600
unsigned int GlyphID
Definition: imgui.h:2605
Definition: imgui.h:1325
Definition: imgui.h:1406
float MouseDownDurationPrev[5]
Definition: imgui.h:1945
#define IM_ALLOC(_SIZE)
Definition: imgui.h:1679
ImVec2 DesiredSize
Definition: imgui.h:2009
int StepNo
Definition: imgui.h:2201
Definition: imgui.h:2107
IMGUI_API void TextWrapped(const char *fmt,...) IM_FMTARGS(1)
IMGUI_API bool CollapsingHeader(const char *label, ImGuiTreeNodeFlags flags=0)
ImGuiKeyModFlags KeyModsPrev
Definition: imgui.h:1934
ImVec2 ButtonTextAlign
Definition: imgui.h:1800
ImGuiViewportFlags Flags
Definition: imgui.h:2814
ImDrawListFlags_
Definition: imgui.h:2379
Definition: imgui.h:1431
IMGUI_API bool ListBox(const char *label, int *current_item, const char *const items[], int items_count, int height_in_items=-1)
Definition: imgui.h:1353
ImColor(const ImVec4 &col)
Definition: imgui.h:2251
Definition: imgui.h:1273
IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in)
IMGUI_API float GetWindowHeight()
Definition: imgui.h:1295
float TabBorderSize
Definition: imgui.h:1797
Definition: imgui.h:1368
Definition: imgui.h:1584
IMGUI_API bool SliderInt2(const char *label, int v[2], int v_min, int v_max, const char *format="%d", ImGuiSliderFlags flags=0)
T * Data
Definition: imgui.h:1702
IMGUI_API int GetColumnIndex()
bool AppFocusLost
Definition: imgui.h:1953
int index_from_ptr(const T *it) const
Definition: imgui.h:1756
Definition: imgui.h:1473
IMGUI_API const char * TableGetColumnName(int column_n=-1)
IMGUI_API void SetNextWindowContentSize(const ImVec2 &size)
float x
Definition: imgui.h:277
IMGUI_API void SetNextWindowSizeConstraints(const ImVec2 &size_min, const ImVec2 &size_max, ImGuiSizeCallback custom_callback=NULL, void *custom_callback_data=NULL)
Definition: imgui.h:1676
IMGUI_API bool IsItemToggledOpen()
#define IM_DRAWLIST_TEX_LINES_WIDTH_MAX
Definition: imgui.h:2267
IMGUI_API bool VSliderScalar(const char *label, const ImVec2 &size, ImGuiDataType data_type, void *p_data, const void *p_min, const void *p_max, const char *format=NULL, ImGuiSliderFlags flags=0)
IMGUI_API void CalcListClipping(int items_count, float items_height, int *out_items_display_start, int *out_items_display_end)
IMGUI_API ImVec2 GetWindowSize()
Definition: imgui.h:961
int TotalIdxCount
Definition: imgui.h:2527
IMGUI_API void AddInputCharacter(unsigned int c)
IMGUI_API void ResetMouseDragDelta(ImGuiMouseButton button=0)
ImGuiDataType_
Definition: imgui.h:1322
Definition: imgui.h:1536
bool MouseDrawCursor
Definition: imgui.h:1851
IMGUI_API ImGuiContext * GetCurrentContext()
Definition: imgui.h:1575
Definition: imgui.h:1588
int TexGlyphPadding
Definition: imgui.h:2707
IMGUI_API ImGuiStyle()
Definition: imgui.h:1448
Definition: imgui.h:1154
Definition: imgui.h:2618
ImVector< ImDrawCmd > CmdBuffer
Definition: imgui.h:2400
T * insert(const T *it, const T &v)
Definition: imgui.h:1750
Definition: imgui.h:1606
IMGUI_API ImGuiMouseCursor GetMouseCursor()
signed char ImS8
Definition: imgui.h:225
Definition: imgui.h:1362
IMGUI_API void SetNextWindowBgAlpha(float alpha)
float LogSliderDeadzone
Definition: imgui.h:1795
ImVec4 ClipRect
Definition: imgui.h:2327
void clear()
Definition: imgui.h:1715
Definition: imgui.h:1287
bool MouseDownOwnedUnlessPopupClose[5]
Definition: imgui.h:1942
void clear_destruct()
Definition: imgui.h:1717
Definition: imgui.h:1177
#define IM_FMTLIST(FMT)
Definition: imgui.h:106
Definition: imgui.h:2292
Definition: imgui.h:965
bool FontAllowUserScaling
Definition: imgui.h:1846
float Descent
Definition: imgui.h:2762
Definition: imgui.h:1475
Definition: imgui.h:1186
int CursorPos
Definition: imgui.h:1988
void * BackendPlatformUserData
Definition: imgui.h:1867
ImVector< ImVec4 > _ClipRectStack
Definition: imgui.h:2411
signed long long ImS64
Definition: imgui.h:239
Definition: imgui.h:1333
IMGUI_API void TableNextRow(ImGuiTableRowFlags row_flags=0, float min_row_height=0.0f)
const ImDrawListSharedData * _Data
Definition: imgui.h:2407
static void SetNextTreeNodeOpen(bool open, ImGuiCond cond=0)
Definition: imgui.h:2864
Definition: imgui.h:1632
bool WantCaptureMouseUnlessPopupClose
Definition: imgui.h:1932
char DataType[32+1]
Definition: imgui.h:2023
float ChildBorderSize
Definition: imgui.h:1779
IMGUI_API void SetMouseCursor(ImGuiMouseCursor cursor_type)
bool PixelSnapH
Definition: imgui.h:2554
Definition: imgui.h:1113
IMGUI_API void SetStateStorage(ImGuiStorage *storage)
Definition: imgui.h:2800
Definition: imgui.h:1503
Definition: imgui.h:994
Definition: imgui.h:2887
bool Delivery
Definition: imgui.h:2025
int _Current
Definition: imgui.h:2344
bool MergeMode
Definition: imgui.h:2560
ImDrawCmdHeader _CmdHeader
Definition: imgui.h:2414
ImVec2 TexUvScale
Definition: imgui.h:2718
Definition: imgui.h:2374
Definition: imgui.h:1215
Definition: imgui.h:1437
Definition: imgui.h:1501
IMGUI_API bool TableNextColumn()
bool MouseClicked[5]
Definition: imgui.h:1938
static void TreeAdvanceToLabelPos()
Definition: imgui.h:2862
ImDrawData()
Definition: imgui.h:2535
Definition: imgui.h:1505
IMGUI_API void PopStyleVar(int count=1)
Definition: imgui.h:1153
ImVec2 WorkSize
Definition: imgui.h:2818
int DataFrameCount
Definition: imgui.h:2022
Definition: imgui.h:1274
ImVector< ImDrawVert > VtxBuffer
Definition: imgui.h:2402
IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio=0.5f)
ImVector< ImGuiStoragePair > Data
Definition: imgui.h:2146
ImDrawCmd()
Definition: imgui.h:2302
Definition: imgui.h:1555
IMGUI_API void SetScrollX(float scroll_x)
IMGUI_API const char * GetVersion()
Definition: imgui.h:1324
int DisplayEnd
Definition: imgui.h:2197
ImVec2 WorkPos
Definition: imgui.h:2817
ImGuiConfigFlags_
Definition: imgui.h:1429
Definition: imgui.h:1465
float FallbackAdvanceX
Definition: imgui.h:2745
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f)
IMGUI_API const char * GetStyleColorName(ImGuiCol idx)
IMGUI_API bool BeginListBox(const char *label, const ImVec2 &size=ImVec2(0, 0))
IMGUI_API bool IsMousePosValid(const ImVec2 *mouse_pos=NULL)
IMGUI_API bool BeginPopup(const char *str_id, ImGuiWindowFlags flags=0)
Definition: imgui.h:1166
int FontNo
Definition: imgui.h:2550
IMGUI_API ImGuiStorage * GetStateStorage()
IMGUI_API ImDrawList * GetForegroundDrawList()
#define IM_FMTARGS(FMT)
Definition: imgui.h:105
Definition: imgui.h:1592
Definition: imgui.h:1389
Definition: imgui.h:963
ImDrawList(const ImDrawListSharedData *shared_data)
Definition: imgui.h:2419
Definition: imgui.h:1413
int PackIdLines
Definition: imgui.h:2731
ImVector< ImFontAtlasCustomRect > CustomRects
Definition: imgui.h:2721
IMGUI_API bool IsMouseHoveringRect(const ImVec2 &r_min, const ImVec2 &r_max, bool clip=true)
Definition: imgui.h:1340
IMGUI_API void EndListBox()
ImFontAtlasCustomRect()
Definition: imgui.h:2609
Definition: imgui.h:1583
Definition: imgui.h:1085
ImGuiViewport()
Definition: imgui.h:2820
int TexWidth
Definition: imgui.h:2716
Definition: imgui.h:975
Definition: imgui.h:1219
int ImGuiTreeNodeFlags
Definition: imgui.h:205
IMGUI_API bool IsItemFocused()
float Alpha
Definition: imgui.h:1770
Definition: imgui.h:2601
Definition: imgui.h:985
Definition: imgui.h:995
Definition: imgui.h:1218
ImVec4()
Definition: imgui.h:278
ImGuiCond_
Definition: imgui.h:1657
IMGUI_API ImGuiID GetID(const char *str_id)
ImVec2 GlyphExtraSpacing
Definition: imgui.h:2555
int ImGuiFocusedFlags
Definition: imgui.h:193
int ImGuiColorEditFlags
Definition: imgui.h:189
IMGUI_API void BeginDisabled(bool disabled=true)
Definition: imgui.h:1500
Definition: imgui.h:1228
IMGUI_API void InsertChars(int pos, const char *text, const char *text_end=NULL)
IMGUI_API float GetScrollMaxX()
float KeysDownDuration[512]
Definition: imgui.h:1948
#define IM_MSVC_RUNTIME_CHECKS_RESTORE
Definition: imgui.h:115
Definition: imgui.h:1576
Definition: imgui.h:2639
int max_size() const
Definition: imgui.h:1722
bool TexReady
Definition: imgui.h:2712
ImU32 col
Definition: imgui.h:2314
ImVec2 MouseClickedPos[5]
Definition: imgui.h:1936
Definition: imgui.h:2363
float GlyphMaxAdvanceX
Definition: imgui.h:2559
Definition: imgui.h:1036
void * ClipboardUserData
Definition: imgui.h:1875
Definition: imgui.h:1352
Definition: imgui.h:1063
ImGuiDragDropFlags_
Definition: imgui.h:1300
Definition: imgui.h:1010
Definition: imgui.h:1424
IMGUI_API bool VSliderInt(const char *label, const ImVec2 &size, int *v, int v_min, int v_max, const char *format="%d", ImGuiSliderFlags flags=0)
const char * begin() const
Definition: imgui.h:2114
Definition: imgui.h:1460
IMGUI_API void ShowAboutWindow(bool *p_open=NULL)
Definition: imgui.h:275
IMGUI_API void CaptureKeyboardFromApp(bool want_capture_keyboard_value=true)
IMGUI_API ImVec2 CalcTextSize(const char *text, const char *text_end=NULL, bool hide_text_after_double_hash=false, float wrap_width=-1.0f)
ImVector()
Definition: imgui.h:1710
bool SpecsDirty
Definition: imgui.h:2053
Definition: imgui.h:977
ImWchar EventChar
Definition: imgui.h:1982
IMGUI_API void EndChild()
Definition: imgui.h:1003
Definition: imgui.h:1468
T * find(const T &v)
Definition: imgui.h:1752
IMGUI_API bool InputFloat3(const char *label, float v[3], const char *format="%.3f", ImGuiInputTextFlags flags=0)
bool FontDataOwnedByAtlas
Definition: imgui.h:2549
Definition: imgui.h:1013
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", ImGuiSliderFlags flags=0)
IMGUI_API bool BeginPopupContextVoid(const char *str_id=NULL, ImGuiPopupFlags popup_flags=1)
IMGUI_API bool TableSetColumnIndex(int column_n)
IMGUI_API bool ListBoxHeader(const char *label, int items_count, int height_in_items=-1)
IMGUI_API void EndDragDropSource()
ImVec2 uv
Definition: imgui.h:2313
ImGuiTabBarFlags_
Definition: imgui.h:1093
IMGUI_API void LogToClipboard(int auto_open_depth=-1)
float FontSize
Definition: imgui.h:2746
void * UserData
Definition: imgui.h:1977
bool KeyShift
Definition: imgui.h:1893
char * dst
Definition: lz4.h:464
Definition: imgui.h:1000
const char * IniFilename
Definition: imgui.h:1834
IMGUI_API void ClearInputCharacters()
IMGUI_API void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, void *user_data=NULL)
void(* ImGuiMemFreeFunc)(void *ptr, void *user_data)
Definition: imgui.h:257
bool NavVisible
Definition: imgui.h:1919
Definition: imgui.h:1345
ImVec2 FramebufferScale
Definition: imgui.h:2532
Definition: imgui.h:1185
IMGUI_API void PushFont(ImFont *font)
Definition: imgui.h:1351
ImVec2 FramePadding
Definition: imgui.h:1782
IMGUI_API void ClearInputKeys()
Definition: imgui.h:980
Definition: imgui.h:1162
IMGUI_API ImVec2 GetCursorStartPos()
bool WantSetMousePos
Definition: imgui.h:1916
ImGuiInputTextFlags EventFlag
Definition: imgui.h:1975
Definition: imgui.h:1119
IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0)
Definition: imgui.h:1246
Definition: imgui.h:1182
IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float &out_h, float &out_s, float &out_v)
Definition: imgui.h:1377
Definition: imgui.h:2371
ImGuiWindowFlags_
Definition: imgui.h:952
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, ImGuiSliderFlags flags=0)
Definition: imgui.h:1408
Definition: imgui.h:1577
Definition: imgui.h:1450
float V1
Definition: imgui.h:2581
Definition: imgui.h:1150
void shrink(int new_size)
Definition: imgui.h:1740
ImGuiViewportFlags_
Definition: imgui.h:2797
IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4 &in)
float IniSavingRate
Definition: imgui.h:1833
void * UserData
Definition: imgui.h:2006
Definition: imgui.h:1484
float AdvanceX
Definition: imgui.h:2579
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", ImGuiSliderFlags flags=0)
Definition: imgui.h:1171
bool BufDirty
Definition: imgui.h:1987
Definition: imgui.h:1226
Definition: imgui.h:1433
ImGuiSortDirection SortDirection
Definition: imgui.h:2040
IMGUI_API void NewLine()
int ImFontAtlasFlags
Definition: imgui.h:186
Definition: imgui.h:1502
IMGUI_API void TextUnformatted(const char *text, const char *text_end=NULL)
void Clear()
Definition: imgui.h:2028
bool empty() const
Definition: imgui.h:1719
Definition: imgui.h:1261
IMGUI_API bool BeginPopupContextWindow(const char *str_id=NULL, ImGuiPopupFlags popup_flags=1)
const char * GetDebugName() const
Definition: imgui.h:2773
Definition: imgui.h:1089
IMGUI_API void PushClipRect(const ImVec2 &clip_rect_min, const ImVec2 &clip_rect_max, bool intersect_with_current_clip_rect)
int OversampleV
Definition: imgui.h:2553
Definition: imgui.h:1510
IMGUI_API ImGuiTableColumnFlags TableGetColumnFlags(int column_n=-1)
bool KeyCtrl
Definition: imgui.h:1892
void * UserCallbackData
Definition: imgui.h:2300
Definition: imgui.h:1364
IMGUI_API float CalcItemWidth()
Definition: imgui.h:1372
Definition: imgui.h:2368
Definition: imgui.h:1619
Definition: imgui.h:2886
ImGuiKey_
Definition: imgui.h:1357
Definition: imgui.h:1148
ImGuiStoragePair(ImGuiID _key, void *_val_p)
Definition: imgui.h:2143
IMGUI_API bool BeginMenu(const char *label, bool enabled=true)
Definition: imgui.h:2137
float MouseDragMaxDistanceSqr[5]
Definition: imgui.h:1947
IMGUI_API bool InputFloat2(const char *label, float v[2], const char *format="%.3f", ImGuiInputTextFlags flags=0)
void SetHSV(float h, float s, float v, float a=1.0f)
Definition: imgui.h:2256
Definition: imgui.h:1523
float PenPressure
Definition: imgui.h:1952
Definition: imgui.h:1504
void(* SetClipboardTextFn)(void *user_data, const char *text)
Definition: imgui.h:1874
Definition: imgui.h:1179
ImDrawVert * _VtxWritePtr
Definition: imgui.h:2409
IMGUI_API void EndChildFrame()
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", ImGuiSliderFlags flags=0)
Definition: imgui.h:962
int OversampleH
Definition: imgui.h:2552
Definition: imgui.h:1606
IMGUI_API void LogText(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui.h:1544
ImVec2 DisplaySize
Definition: imgui.h:2531
float KeyRepeatRate
Definition: imgui.h:1841
IMGUI_API bool SliderScalarN(const char *label, ImGuiDataType data_type, void *p_data, int components, const void *p_min, const void *p_max, const char *format=NULL, ImGuiSliderFlags flags=0)
Definition: imgui.h:2799
Definition: imgui.h:2035
ImVec2 DisplaySafeAreaPadding
Definition: imgui.h:1803
IMGUI_API void Separator()
Definition: imgui.h:1343
ImFontAtlasCustomRect CustomRect
Definition: imgui.h:2734
ImVec2 WindowMinSize
Definition: imgui.h:1775
Definition: imgui.h:1057
bool NavActive
Definition: imgui.h:1918
Definition: imgui.h:964
Definition: imgui.h:1227
IMGUI_API bool BeginCombo(const char *label, const char *preview_value, ImGuiComboFlags flags=0)
void * BackendLanguageUserData
Definition: imgui.h:1869
Definition: imgui.h:1088
ImColor(float r, float g, float b, float a=1.0f)
Definition: imgui.h:2250
IMGUI_API void Build()
Definition: imgui.h:1361
IMGUI_API void BeginGroup()
bool find_erase(const T &v)
Definition: imgui.h:1754
float MouseCursorScale
Definition: imgui.h:1804
float RasterizerMultiply
Definition: imgui.h:2562
float GlyphMinAdvanceX
Definition: imgui.h:2558
IMGUI_API void SetNextWindowFocus()
float ItemsHeight
Definition: imgui.h:2203
float GrabMinSize
Definition: imgui.h:1793
Definition: imgui.h:1025
IMGUI_API ImGuiContext * CreateContext(ImFontAtlas *shared_font_atlas=NULL)
float MouseDoubleClickTime
Definition: imgui.h:1836
IMGUI_API void TextColored(const ImVec4 &col, const char *fmt,...) IM_FMTARGS(2)
Definition: imgui.h:1482
int ImGuiDragDropFlags
Definition: imgui.h:192
Definition: imgui.h:1524
void Clear()
Definition: imgui.h:2151
Definition: imgui.h:2372
void PathClear()
Definition: imgui.h:2464
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", ImGuiSliderFlags flags=0)
Definition: imgui.h:1210
Definition: imgui.h:1111
Definition: imgui.h:2619
void * ImeWindowHandle
Definition: imgui.h:1880
int ImGuiTableFlags
Definition: imgui.h:202
Definition: imgui.h:2049
Definition: imgui.h:1533
bool MouseDownOwned[5]
Definition: imgui.h:1941
Definition: imgui.h:1582
Definition: imgui.h:1223
int ImGuiConfigFlags
Definition: imgui.h:190
Definition: imgui.h:1405
ImGuiButtonFlags_
Definition: imgui.h:1552
Definition: imgui.h:1097
IMGUI_API bool BeginPopupContextItem(const char *str_id=NULL, ImGuiPopupFlags popup_flags=1)
Definition: imgui.h:1569
IMGUI_API ImDrawList * GetWindowDrawList()
IMGUI_API bool InputTextWithHint(const char *label, const char *hint, char *buf, size_t buf_size, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
void PathLineTo(const ImVec2 &pos)
Definition: imgui.h:2465
ImVector< float > IndexAdvanceX
Definition: imgui.h:2744
Definition: imgui.h:1462
unsigned short ImDrawIdx
Definition: imgui.h:220
void reserve(int capacity)
Definition: imgui.h:2119
ImDrawList ** CmdLists
Definition: imgui.h:2529
IMGUI_API void appendf(const char *fmt,...) IM_FMTARGS(2)
IMGUI_API const ImVec4 & GetStyleColorVec4(ImGuiCol idx)
Definition: imgui.h:1009
Definition: imgui.h:2369
Definition: imgui.h:2373
Definition: imgui.h:1534
Definition: imgui.h:1416
ImGuiTextRange(const char *_b, const char *_e)
Definition: imgui.h:2096
ImColor(ImU32 rgba)
Definition: imgui.h:2249
Definition: imgui.h:2194
void PathStroke(ImU32 col, ImDrawFlags flags=0, float thickness=1.0f)
Definition: imgui.h:2468
ImVector< ImU32 > UsedChars
Definition: imgui.h:2588
Definition: imgui.h:1481
Definition: imgui.h:2364
ImGuiID SourceParentId
Definition: imgui.h:2021
ImFontAtlasCustomRect * GetCustomRectByIndex(int index)
Definition: imgui.h:2694
Definition: imgui.h:1538
IMGUI_API bool BeginChild(const char *str_id, const ImVec2 &size=ImVec2(0, 0), bool border=false, ImGuiWindowFlags flags=0)
IMGUI_API void LoadIniSettingsFromDisk(const char *ini_filename)
ImGuiKeyModFlags KeyMods
Definition: imgui.h:1933
const T & operator[](int i) const
Definition: imgui.h:1725
IMGUI_API bool InputInt3(const char *label, int v[3], ImGuiInputTextFlags flags=0)
Definition: imgui.h:1328
IMGUI_API bool InputInt4(const char *label, int v[4], ImGuiInputTextFlags flags=0)
Definition: imgui.h:1526
int ImGuiCond
Definition: imgui.h:174
IMGUI_API bool SliderFloat2(const char *label, float v[2], float v_min, float v_max, const char *format="%.3f", ImGuiSliderFlags flags=0)
int ImGuiPopupFlags
Definition: imgui.h:197
ImVec2(float _x, float _y)
Definition: imgui.h:266
ImVec2 DisplayWindowPadding
Definition: imgui.h:1802
IMGUI_API void SetNextWindowPos(const ImVec2 &pos, ImGuiCond cond=0, const ImVec2 &pivot=ImVec2(0, 0))
IMGUI_API bool InputInt2(const char *label, int v[2], ImGuiInputTextFlags flags=0)
IMGUI_API bool IsItemEdited()
IMGUI_API void TreePop()
int ImGuiInputTextFlags
Definition: imgui.h:195
Definition: imgui.h:2134
Definition: imgui.h:2397
IMGUI_API bool SliderFloat(const char *label, float *v, float v_min, float v_max, const char *format="%.3f", ImGuiSliderFlags flags=0)
Definition: imgui.h:1327
IMGUI_API void EndPopup()
IMGUI_API bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
int ImGuiDir
Definition: imgui.h:176
IMGUI_API ImVec2 GetContentRegionAvail()
int DataSize
Definition: imgui.h:2017
IMGUI_API void EndTabItem()
IMGUI_API void Spacing()
IMGUI_API void ShowMetricsWindow(bool *p_open=NULL)
const ImFontBuilderIO * FontBuilderIO
Definition: imgui.h:2726
IMGUI_API bool TreeNodeV(const char *str_id, const char *fmt, va_list args) IM_FMTLIST(2)
IMGUI_API ImDrawData * GetDrawData()
IMGUI_API ImGuiTextFilter(const char *default_filter="")
Definition: imgui.h:1530
Definition: imgui.h:1262
Definition: imgui.h:1498
Definition: imgui.h:262
bool IsLoaded() const
Definition: imgui.h:2772
IMGUI_API void CloseCurrentPopup()
bool WantCaptureMouse
Definition: imgui.h:1913
Definition: imgui.h:2325
float KeyRepeatDelay
Definition: imgui.h:1840
static void OpenPopupContextItem(const char *str_id=NULL, ImGuiMouseButton mb=1)
Definition: imgui.h:2843
Definition: imgui.h:1163
Definition: imgui.h:982
IMGUI_API void SetNextItemWidth(float item_width)
Definition: imgui.h:2741
Contains DLL export macros.
Definition: imgui.h:1027
Definition: imgui.h:983
Definition: imgui.h:1478
bool AntiAliasedLines
Definition: imgui.h:1805
Definition: imgui.h:1211
Definition: imgui.h:1371
IMGUI_API bool IsItemDeactivated()
Definition: imgui.h:1212
Definition: imgui.h:1378
IMGUI_API float GetFrameHeight()
void PathBezierCurveTo(const ImVec2 &p2, const ImVec2 &p3, const ImVec2 &p4, int num_segments=0)
Definition: imgui.h:2504
Definition: imgui.h:1425
float TabRounding
Definition: imgui.h:1796
IMGUI_API void SetItemAllowOverlap()
float CurveTessellationTol
Definition: imgui.h:1808
IMGUI_API void PushButtonRepeat(bool repeat)
#define IM_ASSERT(_EXPR)
Definition: imgui.h:87
Definition: imgui.h:1660
ImVec2 GlyphOffset
Definition: imgui.h:2607
void(* ImGuiSizeCallback)(ImGuiSizeCallbackData *data)
Definition: imgui.h:255
IMGUI_API ImVec2 GetItemRectMin()
int ImGuiWindowFlags
Definition: imgui.h:207
#define IMGUI_API
Definition: imgui.h:78
IMGUI_API void BeginTooltip()
IMGUI_API void DeleteChars(int pos, int bytes_count)
Definition: imgui.h:1365
Definition: imgui.h:1116
void pop_back()
Definition: imgui.h:1745
const char * LogFilename
Definition: imgui.h:1835
IMGUI_API void PushID(const char *str_id)
IMGUI_API void SetCursorPosX(float local_x)
const char * BackendRendererName
Definition: imgui.h:1866
Definition: imgui.h:1070
bool ConfigWindowsMoveFromTitleBarOnly
Definition: imgui.h:1856
IMGUI_API void append(const char *str, const char *str_end=NULL)
Definition: imgui.h:1479
Definition: imgui.h:1585
float PopupBorderSize
Definition: imgui.h:1781
bool find_erase_unsorted(const T &v)
Definition: imgui.h:1755
float FontGlobalScale
Definition: imgui.h:1845
ImWchar16 ImWchar
Definition: imgui.h:250
#define IM_COL32_A_SHIFT
Definition: imgui.h:2231
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond=0)
ImVec2 CurrentSize
Definition: imgui.h:2008
Definition: imgui.h:1573
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x *y t *t t x *y t *t *t x y *z t t *t t x *y *z t *t *t t x y z t t t t x *y z t *t t t x * y(z *w))
IMGUI_API int TableGetRowIndex()
const char * e
Definition: imgui.h:2093
Definition: imgui.h:1034
IMGUI_API void LogButtons()
Definition: imgui.h:2586
Definition: imgui.h:1055
IMGUI_API void BulletTextV(const char *fmt, va_list args) IM_FMTLIST(1)
ImGuiStoragePair(ImGuiID _key, int _val_i)
Definition: imgui.h:2141
IMGUI_API void TextDisabledV(const char *fmt, va_list args) IM_FMTLIST(1)
IMGUI_API ImDrawList * GetBackgroundDrawList()
#define IM_UNICODE_CODEPOINT_MAX
Definition: imgui.h:2067
Definition: imgui.h:1390
ImGuiPopupFlags_
Definition: imgui.h:1052
Definition: imgui.h:1028
Definition: imgui.h:1589
float NavInputs[ImGuiNavInput_COUNT]
Definition: imgui.h:1897
Definition: imgui.h:1641
IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col)
void Clear()
Definition: imgui.h:2086
int ItemsFrozen
Definition: imgui.h:2202
Definition: imgui.h:1601
Definition: imgui.h:1156
int ImGuiBackendFlags
Definition: imgui.h:187
Definition: imgui.h:1095
Definition: imgui.h:1011
IMGUI_API void Columns(int count=1, const char *id=NULL, bool border=true)
IMGUI_API bool InputScalar(const char *label, ImGuiDataType data_type, void *p_data, const void *p_step=NULL, const void *p_step_fast=NULL, const char *format=NULL, ImGuiInputTextFlags flags=0)
ImTextureID TextureId
Definition: imgui.h:2328
static IMGUI_API char EmptyString[1]
Definition: imgui.h:2110
IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus)
IMGUI_API ImGuiViewport * GetMainViewport()
IMGUI_API void SetWindowPos(const ImVec2 &pos, ImGuiCond cond=0)
Definition: imgui.h:1459
Definition: imgui.h:1176
Definition: imgui.h:1103
IMGUI_API bool ColorEdit3(const char *label, float col[3], ImGuiColorEditFlags flags=0)
Definition: imgui.h:1648
Definition: imgui.h:1496
ImVector< ImFontGlyph > Glyphs
Definition: imgui.h:2750
IMGUI_API void PopTextWrapPos()
unsigned short ImWchar16
Definition: imgui.h:245
T & front()
Definition: imgui.h:1731
ImGuiTableColumnSortSpecs()
Definition: imgui.h:2042
unsigned int FontBuilderFlags
Definition: imgui.h:2561
Definition: imgui.h:1175
Definition: imgui.h:1082
Definition: imgui.h:1056
IMGUI_API float GetScrollMaxY()
Definition: imgui.h:1441
IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup()
IMGUI_API bool IsAnyMouseDown()
ImVec4 ClipRect
Definition: imgui.h:2294
Definition: imgui.h:1387
Definition: imgui.h:1005
Definition: imgui.h:1554
unsigned int * TexPixelsRGBA32
Definition: imgui.h:2715
ImDrawFlags_
Definition: imgui.h:2359
IMGUI_API void RenderText(ImVec2 pos, const char *text, const char *text_end=NULL, bool hide_text_after_hash=true)
Definition: imgui.h:2888
IMGUI_API bool IsAnyItemHovered()
Definition: imgui.h:1084
IMGUI_API bool ColorEdit4(const char *label, float col[4], ImGuiColorEditFlags flags=0)
ImVec2 MousePos
Definition: imgui.h:1888
Definition: imgui.h:1495
IMGUI_API void End()
ImColor()
Definition: imgui.h:2247
Definition: imgui.h:1214
static std::string data()
Definition: exprtk.hpp:38889
ImFontAtlasFlags Flags
Definition: imgui.h:2704
int MetricsRenderWindows
Definition: imgui.h:1923
IMGUI_API void TreePush(const char *str_id)
IMGUI_API void SetClipboardText(const char *text)
Definition: imgui.h:1491
IMGUI_API void SetWindowSize(const ImVec2 &size, ImGuiCond cond=0)
float FrameRounding
Definition: imgui.h:1783
Definition: imgui.h:1367
IMGUI_API bool SliderFloat4(const char *label, float v[4], float v_min, float v_max, const char *format="%.3f", ImGuiSliderFlags flags=0)
Definition: imgui.h:1098
#define IM_COL32_B_SHIFT
Definition: imgui.h:2230
Definition: imgui.h:1651
Definition: imgui.h:1581
float StartPosY
Definition: imgui.h:2204
IMGUI_API void SetCursorPos(const ImVec2 &local_pos)
IMGUI_API ImGuiIO & GetIO()
int _grow_capacity(int sz) const
Definition: imgui.h:1737
Definition: imgui.h:998
IMGUI_API void PopAllowKeyboardFocus()
ImVec2 DisplayFramebufferScale
Definition: imgui.h:1848
void reserve(int new_capacity)
Definition: imgui.h:1741
IMGUI_API bool InputTextMultiline(const char *label, char *buf, size_t buf_size, const ImVec2 &size=ImVec2(0, 0), ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
bool KeysDown[512]
Definition: imgui.h:1896
IMGUI_API bool BeginTabBar(const char *str_id, ImGuiTabBarFlags flags=0)
ImVector< ImDrawChannel > _Channels
Definition: imgui.h:2346
void *(* ImGuiMemAllocFunc)(size_t sz, void *user_data)
Definition: imgui.h:256
Definition: imgui.h:1545
Definition: imgui.h:1206
Definition: imgui.h:1331
Definition: imgui.h:1483
IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate)
bool AntiAliasedLinesUseTex
Definition: imgui.h:1806
IMGUI_API void SetKeyboardFocusHere(int offset=0)
int ImGuiStyleVar
Definition: imgui.h:182
Definition: imgui.h:1375
IMGUI_API bool IsAnyItemActive()
Definition: imgui.h:1366
ImVec2 MouseDragMaxDistanceAbs[5]
Definition: imgui.h:1946
ImGuiKeyModFlags_
Definition: imgui.h:1385
float MouseDownDuration[5]
Definition: imgui.h:1944
Definition: imgui.h:2891
const T & front() const
Definition: imgui.h:1732
IMGUI_API void Bullet()
T & operator[](int i)
Definition: imgui.h:1724
Definition: imgui.h:1509
IMGUI_API bool RadioButton(const char *label, bool active)
IMGUI_API void LogToFile(int auto_open_depth=-1, const char *filename=NULL)
Definition: imgui.h:1294
Definition: imgui.h:1030
Definition: imgui.h:1466
IMGUI_API ImVec2 GetContentRegionMax()
IMGUI_API const char * GetClipboardText()
bool empty() const
Definition: imgui.h:2097
Definition: imgui.h:1440
int ImGuiKey
Definition: imgui.h:177
IMGUI_API bool SliderInt4(const char *label, int v[4], int v_min, int v_max, const char *format="%d", ImGuiSliderFlags flags=0)
IMGUI_API void Text(const char *fmt,...) IM_FMTARGS(1)
int MetricsRenderVertices
Definition: imgui.h:1921
Definition: imgui.h:1823
IMGUI_API void Value(const char *prefix, bool b)
Definition: imgui.h:1537
Definition: imgui.h:1233
Definition: imgui.h:1118
IMGUI_API bool DragScalarN(const char *label, ImGuiDataType data_type, void *p_data, int components, float v_speed=1.0f, const void *p_min=NULL, const void *p_max=NULL, const char *format=NULL, ImGuiSliderFlags flags=0)
Definition: imgui.h:1590
Definition: imgui.h:1272
Definition: imgui.h:1284
IMGUI_API void EndMenuBar()
IMGUI_API ImGuiStyle & GetStyle()
IMGUI_API float GetTextLineHeight()
Definition: imgui.h:1531
Definition: imgui.h:1037
Definition: imgui.h:2889
unsigned int _VtxCurrentIdx
Definition: imgui.h:2406
void * Data
Definition: imgui.h:2016
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))
Definition: imgui.h:2090
ImDrawIdx * _IdxWritePtr
Definition: imgui.h:2410
IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags=0)
Definition: imgui.h:972
IMGUI_API void TextColoredV(const ImVec4 &col, const char *fmt, va_list args) IM_FMTLIST(2)
Definition: imgui.h:1344
Definition: imgui.h:1032
IMGUI_API bool BeginTabItem(const char *label, bool *p_open=NULL, ImGuiTabItemFlags flags=0)
IMGUI_API void PopFont()
IMGUI_API void SetScrollHereX(float center_x_ratio=0.5f)
int Capacity
Definition: imgui.h:1701
IMGUI_API void * MemAlloc(size_t size)
Definition: imgui.h:1208
Definition: imgui.h:1650
IMGUI_API ImGuiInputTextCallbackData()
Definition: imgui.h:1373
ImTextureID GetTexID() const
Definition: imgui.h:2305
void ChannelsSplit(int count)
Definition: imgui.h:2486
Definition: imgui.h:1472
void PrimWriteIdx(ImDrawIdx idx)
Definition: imgui.h:2499
Definition: imgui.h:1112
static void ListBoxFooter()
Definition: imgui.h:2841
const T * begin() const
Definition: imgui.h:1728
signed int ImS32
Definition: imgui.h:229
IMGUI_API void PopID()
bool MouseReleased[5]
Definition: imgui.h:1940
IMGUI_API void TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n=-1)
ImGuiTextRange()
Definition: imgui.h:2095
IMGUI_API void LogFinish()
const char * end() const
Definition: imgui.h:2115
int ImGuiMouseButton
Definition: imgui.h:179
Definition: imgui.h:1574
Definition: imgui.h:1461
unsigned int ImGuiID
Definition: imgui.h:224
Definition: imgui.h:1631
Definition: imgui.h:1381
Definition: imgui.h:1286
ImGuiID ColumnUserID
Definition: imgui.h:2037
IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio=0.5f)
ImDrawListSplitter()
Definition: imgui.h:2348
int ImGuiTableBgTarget
Definition: imgui.h:183
Definition: imgui.h:1449
Definition: imgui.h:1117
ImGuiListClipper(int items_count, float items_height=-1.0f)
Definition: imgui.h:2216
void PrimWriteVtx(const ImVec2 &pos, const ImVec2 &uv, ImU32 col)
Definition: imgui.h:2498
ImVector< ImWchar > InputQueueCharacters
Definition: imgui.h:1955
float KeysDownDurationPrev[512]
Definition: imgui.h:1949
Definition: imgui.h:1586
IMGUI_API bool IsKeyDown(int user_key_index)
Definition: imgui.h:1308
Definition: imgui.h:2013
IMGUI_API void SetCursorPosY(float local_y)
Definition: imgui.h:1492
ImVector(const ImVector< T > &src)
Definition: imgui.h:1711
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, size_t sz_drawidx)
IMGUI_API bool MenuItem(const char *label, const char *shortcut=NULL, bool selected=false, bool enabled=true)
ImGuiCol_
Definition: imgui.h:1455
float z
Definition: imgui.h:277
void * FontData
Definition: imgui.h:2547
IMGUI_API void LabelTextV(const char *label, const char *fmt, va_list args) IM_FMTLIST(2)
const char * _OwnerName
Definition: imgui.h:2408
IMGUI_API void TableSetColumnEnabled(int column_n, bool v)
IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2 &size, ImGuiWindowFlags flags=0)
IMGUI_API bool Draw(const char *label="Filter (inc,-exc)", float width=0.0f)
IMGUI_API bool IsItemVisible()
Definition: imgui.h:1543
ImVec2 ItemSpacing
Definition: imgui.h:1785
const value_type * const_iterator
Definition: imgui.h:1707
Definition: imgui.h:1104
Definition: imgui.h:1008
IMGUI_API void TableHeadersRow()
Definition: imgui.h:1525
Definition: imgui.h:1014
unsigned short Y
Definition: imgui.h:2604
float FrameBorderSize
Definition: imgui.h:1784
void SetBit(size_t n)
Definition: imgui.h:2593
Definition: imgui.h:1374
ImDrawCallback UserCallback
Definition: imgui.h:2299
IMGUI_API void SetTabItemClosed(const char *tab_or_docked_window_label)
~ImDrawList()
Definition: imgui.h:2421
ImVec2 TexUvWhitePixel
Definition: imgui.h:2719
int MetricsTotalSurface
Definition: imgui.h:2763
IMGUI_API void SetTooltipV(const char *fmt, va_list args) IM_FMTLIST(1)
void ChannelsMerge()
Definition: imgui.h:2487
Definition: imgui.h:1409
Definition: imgui.h:2812
Definition: imgui.h:1698
Definition: imgui.h:1038
IMGUI_API float GetTreeNodeToLabelSpacing()
IMGUI_API bool ColorPicker3(const char *label, float col[3], ImGuiColorEditFlags flags=0)
Definition: imgui.h:954
Definition: imgui.h:1540
Definition: imgui.h:2381
float w
Definition: imgui.h:277
ImVec2 Size
Definition: imgui.h:2816
IMGUI_API ImVec2 GetItemRectMax()
Definition: imgui.h:1528
unsigned int IdxOffset
Definition: imgui.h:2297
Definition: imgui.h:1423
IMGUI_API float GetScrollY()
IMGUI_API bool IsItemClicked(ImGuiMouseButton mouse_button=0)
IMGUI_API bool InputText(const char *label, char *buf, size_t buf_size, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
IMGUI_API bool InputFloat4(const char *label, float v[4], const char *format="%.3f", ImGuiInputTextFlags flags=0)
Definition: imgui.h:1288
ImFont * DstFont
Definition: imgui.h:2567
Definition: imgui.h:1379
IMGUI_API void split(char separator, ImVector< ImGuiTextRange > *out) const
IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float &out_r, float &out_g, float &out_b)
Definition: imgui.h:1164
int ImGuiHoveredFlags
Definition: imgui.h:194
Definition: imgui.h:1587
Definition: imgui.h:1599
int ImGuiMouseCursor
Definition: imgui.h:180
Definition: imgui.h:1567
Definition: imgui.h:1072
int ImGuiTabBarFlags
Definition: imgui.h:200
Definition: imgui.h:955
int ImGuiTabItemFlags
Definition: imgui.h:201
ImGuiKey EventKey
Definition: imgui.h:1983
float ScrollbarRounding
Definition: imgui.h:1792
IMGUI_API float GetColumnWidth(int column_index=-1)
ImVector< T > & operator=(const ImVector< T > &src)
Definition: imgui.h:1712
ImVec2 SelectableTextAlign
Definition: imgui.h:1801
IMGUI_API void TextDisabled(const char *fmt,...) IM_FMTARGS(1)
ImWchar EllipsisChar
Definition: imgui.h:2758
IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags=0)
void clear_delete()
Definition: imgui.h:1716
int ImGuiComboFlags
Definition: imgui.h:191
IMGUI_API ImGuiIO()
Definition: imgui.h:1158
ImTextureID TexID
Definition: imgui.h:2705
IMGUI_API ImVec2 GetMouseDragDelta(ImGuiMouseButton button=0, float lock_threshold=-1.0f)
void(* ImeSetInputScreenPosFn)(int x, int y)
Definition: imgui.h:1879
Definition: imgui.h:1547
ImGuiMouseCursor_
Definition: imgui.h:1639
IMGUI_API void SetScrollY(float scroll_y)
void push_front(const T &v)
Definition: imgui.h:1746
Definition: imgui.h:1152
Definition: imgui.h:1188
const ImWchar * GlyphRanges
Definition: imgui.h:2557
ImWchar16 InputQueueSurrogate
Definition: imgui.h:1954
Definition: imgui.h:1334
Definition: imgui.h:1087
void * val_p
Definition: imgui.h:2140
Definition: imgui.h:956
Definition: imgui.h:1391
Definition: imgui.h:1388
Definition: imgui.h:1421
ImGuiTreeNodeFlags_
Definition: imgui.h:1023
Definition: imgui.h:1623
int FontDataSize
Definition: imgui.h:2548
int RefFrame
Definition: imgui.h:2075
IMGUI_API bool VSliderFloat(const char *label, const ImVec2 &size, float *v, float v_min, float v_max, const char *format="%.3f", ImGuiSliderFlags flags=0)
#define IM_MSVC_RUNTIME_CHECKS_OFF
Definition: imgui.h:114
float ConfigMemoryCompactTimer
Definition: imgui.h:1857
bool ConfigDragClickToInputText
Definition: imgui.h:1854
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", ImGuiSliderFlags flags=0)
bool Preview
Definition: imgui.h:2024
float TabMinWidthForCloseButton
Definition: imgui.h:1798
float WindowBorderSize
Definition: imgui.h:1774
int ImDrawListFlags
Definition: imgui.h:185
Definition: imgui.h:1644
Definition: imgui.h:1571
ImVec2 MouseDelta
Definition: imgui.h:1926
int ItemsCount
Definition: imgui.h:2200
int SpecsCount
Definition: imgui.h:2052
IMGUI_API const ImGuiPayload * AcceptDragDropPayload(const char *type, ImGuiDragDropFlags flags=0)
Definition: imgui.h:1412
Definition: imgui.h:1062
Definition: imgui.h:1071
IMGUI_API void SaveIniSettingsToDisk(const char *ini_filename)
bool MouseDown[5]
Definition: imgui.h:1889
ImTextureID TextureId
Definition: imgui.h:2295
void AddBezierCurve(const ImVec2 &p1, const ImVec2 &p2, const ImVec2 &p3, const ImVec2 &p4, ImU32 col, float thickness, int num_segments=0)
Definition: imgui.h:2503
IMGUI_API int GetColumnsCount()
IMGUI_API void PopClipRect()
IMGUI_API bool ColorButton(const char *desc_id, const ImVec4 &col, ImGuiColorEditFlags flags=0, ImVec2 size=ImVec2(0, 0))
Definition: imgui.h:1307
IMGUI_API void NewFrame()
Definition: imgui.h:1160
Definition: imgui.h:1580
IMGUI_API bool ColorPicker4(const char *label, float col[4], ImGuiColorEditFlags flags=0, const float *ref_col=NULL)
IMGUI_API bool SmallButton(const char *label)
Definition: imgui.h:1174
unsigned int FontBuilderFlags
Definition: imgui.h:2727
Definition: imgui.h:1489
Definition: imgui.h:1464
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", ImGuiSliderFlags flags=0)
Definition: imgui.h:1247
IMGUI_API bool Begin(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui_internal.h:2765
Definition: imgui.h:1463
IMGUI_API void NextColumn()
IMGUI_API bool IsMouseReleased(ImGuiMouseButton button)
Definition: imgui.h:2243
IMGUI_API bool TreeNode(const char *label)
ImGuiID SourceId
Definition: imgui.h:2020
float DisabledAlpha
Definition: imgui.h:1771
IMGUI_API ImVec2 GetWindowContentRegionMax()
int DisplayStart
Definition: imgui.h:2196
float Framerate
Definition: imgui.h:1920
Definition: imgui.h:959
ImGuiColorEditFlags_
Definition: imgui.h:1565
Definition: imgui.h:2802
unsigned int VtxOffset
Definition: imgui.h:2296
Definition: imgui.h:2801
const char * c_str() const
Definition: imgui.h:2120
Definition: imgui.h:1059
IMGUI_API void Unindent(float indent_w=0.0f)
Definition: imgui.h:1467
Definition: imgui.h:1360
Definition: imgui.h:1410
Definition: imgui.h:1341
IMGUI_API void PushTextWrapPos(float wrap_local_pos_x=0.0f)
void(* ImDrawCallback)(const ImDrawList *parent_list, const ImDrawCmd *cmd)
Definition: imgui.h:2278
Definition: imgui.h:1493
IMGUI_API void MemFree(void *ptr)
float Scale
Definition: imgui.h:2761
void Clear()
Definition: imgui.h:2591
IMGUI_API void SetWindowFontScale(float scale)
bool GetBit(size_t n) const
Definition: imgui.h:2592
IMGUI_API void LogTextV(const char *fmt, va_list args) IM_FMTLIST(1)
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", ImGuiSliderFlags flags=0)
ImFontAtlas * ContainerAtlas
Definition: imgui.h:2754
Definition: imgui.h:1614
Definition: imgui.h:1570
IMGUI_API void StyleColorsDark(ImGuiStyle *dst=NULL)
Definition: imgui.h:1507
IMGUI_API bool SliderScalar(const char *label, ImGuiDataType data_type, void *p_data, const void *p_min, const void *p_max, const char *format=NULL, ImGuiSliderFlags flags=0)
const ImFontGlyph * FallbackGlyph
Definition: imgui.h:2751
Definition: imgui.h:999
ImVec2 ItemInnerSpacing
Definition: imgui.h:1786
IMGUI_API void LogToTTY(int auto_open_depth=-1)
unsigned int VtxOffset
Definition: imgui.h:2329
Definition: imgui.h:1326
Definition: imgui.h:1602
Definition: imgui.h:2382
IMGUI_API void LabelText(const char *label, const char *fmt,...) IM_FMTARGS(2)
IMGUI_API float GetCursorPosX()
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))
ImFontAtlasFlags_
Definition: imgui.h:2614
ImVec2 DisplaySize
Definition: imgui.h:1831
Definition: imgui.h:1058
~ImDrawListSplitter()
Definition: imgui.h:2349
Definition: imgui.h:1207
ImWchar DotChar
Definition: imgui.h:2759
void PathFillConvex(ImU32 col)
Definition: imgui.h:2467
Definition: imgui.h:2617
double MouseClickedTime[5]
Definition: imgui.h:1937
signed short ImS16
Definition: imgui.h:227
#define IM_COL32_G_SHIFT
Definition: imgui.h:2229
ImGuiBackendFlags_
Definition: imgui.h:1445
IMGUI_API void ProgressBar(float fraction, const ImVec2 &size_arg=ImVec2(-FLT_MIN, 0), const char *overlay=NULL)
Definition: imgui.h:1359
ImVec2 Pos
Definition: imgui.h:2815
float IndentSpacing
Definition: imgui.h:1789
unsigned int ElemCount
Definition: imgui.h:2298
IMGUI_API void TableSetupColumn(const char *label, ImGuiTableColumnFlags flags=0, float init_width_or_weight=0.0f, ImGuiID user_id=0)
ImGuiTableColumnFlags_
Definition: imgui.h:1202
value_type * iterator
Definition: imgui.h:1706
IMGUI_API const ImGuiPayload * GetDragDropPayload()
Definition: imgui.h:1363
IMGUI_API void AlignTextToFramePadding()
IMGUI_API void AddFocusEvent(bool focused)
IMGUI_API bool IsItemDeactivatedAfterEdit()
ImVector< ImVec2 > _Path
Definition: imgui.h:2413
ImVec4 Colors[ImGuiCol_COUNT]
Definition: imgui.h:1810
IMGUI_API bool SetDragDropPayload(const char *type, const void *data, size_t sz, ImGuiCond cond=0)
IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul=1.0f)
unsigned char ImU8
Definition: imgui.h:226
IMGUI_API ImGuiTableSortSpecs * TableGetSortSpecs()
Definition: imgui.h:1457
Definition: imgui.h:1422
IMGUI_API void SetCursorScreenPos(const ImVec2 &pos)
Definition: imgui.h:1074
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))
IMGUI_API int TableGetColumnCount()
float y
Definition: imgui.h:277
Definition: imgui.h:1029
ImVector< ImFont * > Fonts
Definition: imgui.h:2720
bool HasSelection() const
Definition: imgui.h:1999
Definition: imgui.h:1169
IMGUI_API bool InputDouble(const char *label, double *v, double step=0.0, double step_fast=0.0, const char *format="%.6f", ImGuiInputTextFlags flags=0)
Definition: imgui.h:1535
Definition: imgui.h:984
Definition: imgui.h:2370
IMGUI_API bool SliderAngle(const char *label, float *v_rad, float v_degrees_min=-360.0f, float v_degrees_max=+360.0f, const char *format="%.0f deg", ImGuiSliderFlags flags=0)
Definition: imgui.h:1081
IMGUI_API ImVec2 GetCursorScreenPos()
ImDrawFlags ImDrawCornerFlags
Definition: imgui.h:2882
Definition: imgui.h:981
ImGuiID key
Definition: imgui.h:2139
IMGUI_API void ShowStackToolWindow(bool *p_open=NULL)
void SelectAll()
Definition: imgui.h:1997
Definition: imgui.h:2080
ImVec2 GlyphOffset
Definition: imgui.h:2556
Definition: imgui.h:997
bool Valid
Definition: imgui.h:2525
Definition: imgui.h:1329
IMGUI_API bool IsItemActive()
Definition: imgui.h:1486
float GetCharAdvance(ImWchar c) const
Definition: imgui.h:2771
IMGUI_API void EndTable()
bool KeyAlt
Definition: imgui.h:1894
bool empty() const
Definition: imgui.h:2117
ImS16 SortOrder
Definition: imgui.h:2039
Definition: imgui.h:1469
void ChannelsSetCurrent(int n)
Definition: imgui.h:2488
Definition: imgui.h:1617
Definition: imgui.h:2362
Definition: imgui.h:1189
static ImColor HSV(float h, float s, float v, float a=1.0f)
Definition: imgui.h:2257
Definition: imgui.h:1591
int ImGuiDataType
Definition: imgui.h:175
float ColumnsMinSpacing
Definition: imgui.h:1790
ImFont * Font
Definition: imgui.h:2608
Definition: imgui.h:1973
unsigned char * TexPixelsAlpha8
Definition: imgui.h:2714
Definition: imgui.h:1596
bool IsActive() const
Definition: imgui.h:2087
ImVector< ImDrawIdx > IdxBuffer
Definition: imgui.h:2401
static float GetContentRegionAvailWidth()
Definition: imgui.h:2866
Definition: imgui.h:2342
Definition: imgui.h:1494
ImGuiStoragePair(ImGuiID _key, float _val_f)
Definition: imgui.h:2142
Definition: imgui.h:1380
Definition: imgui.h:1411
IMGUI_API bool BeginMainMenuBar()
IMGUI_API bool InputScalarN(const char *label, ImGuiDataType data_type, void *p_data, int components, const void *p_step=NULL, const void *p_step_fast=NULL, const char *format=NULL, ImGuiInputTextFlags flags=0)
Definition: imgui.h:2892
bool KeySuper
Definition: imgui.h:1895
T * erase(const T *it)
Definition: imgui.h:1747
ImVector< ImDrawCmd > _CmdBuffer
Definition: imgui.h:2335
float NavInputsDownDuration[ImGuiNavInput_COUNT]
Definition: imgui.h:1950
IMGUI_API float GetFrameHeightWithSpacing()
Definition: imgui.h:1539
IMGUI_API bool PassFilter(const char *text, const char *text_end=NULL) const
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)
Definition: imgui.h:1471
Definition: imgui.h:1768
IMGUI_API bool IsKeyReleased(int user_key_index)
Definition: imgui.h:2333
int TexHeight
Definition: imgui.h:2717
void Clear()
Definition: imgui.h:2350
void PrimVtx(const ImVec2 &pos, const ImVec2 &uv, ImU32 col)
Definition: imgui.h:2500
ImVec2 GetClipRectMin() const
Definition: imgui.h:2427
IMGUI_API bool Combo(const char *label, int *current_item, const char *const items[], int items_count, int popup_max_height_in_items=-1)
float WindowRounding
Definition: imgui.h:1773
bool ConfigWindowsResizeFromEdges
Definition: imgui.h:1855
IMGUI_API void Render()
Definition: imgui.h:1165
bool IsDelivery() const
Definition: imgui.h:2031
float MouseWheel
Definition: imgui.h:1890
IMGUI_API void SetNextWindowSize(const ImVec2 &size, ImGuiCond cond=0)
Definition: imgui.h:1222
float MouseDoubleClickMaxDist
Definition: imgui.h:1837
IMGUI_API bool InputFloat(const char *label, float *v, float step=0.0f, float step_fast=0.0f, const char *format="%.3f", ImGuiInputTextFlags flags=0)
unsigned short Width
Definition: imgui.h:2603
Definition: imgui.h:1480
Definition: imgui.h:1061
T & back()
Definition: imgui.h:1733
ImGuiInputTextFlags Flags
Definition: imgui.h:1976
Definition: imgui.h:976
ImVector< ImDrawIdx > _IdxBuffer
Definition: imgui.h:2336
Definition: imgui.h:2616
void clear()
Definition: imgui.h:2118
Definition: imgui.h:1041
void IM_DELETE(T *p)
Definition: imgui.h:1683
IMGUI_API float GetScrollX()
Definition: imgui.h:1270
int TotalVtxCount
Definition: imgui.h:2528
Definition: imgui.h:1115
int ImGuiButtonFlags
Definition: imgui.h:188
IMGUI_API void ShowUserGuide()
ImVec2 DisplayPos
Definition: imgui.h:2530
IMGUI_API bool DragScalar(const char *label, ImGuiDataType data_type, void *p_data, float v_speed=1.0f, const void *p_min=NULL, const void *p_max=NULL, const char *format=NULL, ImGuiSliderFlags flags=0)
Definition: imgui.h:2523
Definition: imgui.h:1642
Definition: imgui.h:2367
void * UserData
Definition: imgui.h:1842
Definition: imgui.h:1615
int size() const
Definition: imgui.h:1720
ImVec2 MousePosPrev
Definition: imgui.h:1935
IMGUI_API void AddInputCharacterUTF16(ImWchar16 c)
const T * find(const T &v) const
Definition: imgui.h:1753
float x
Definition: imgui.h:264
ImGuiSelectableFlags_
Definition: imgui.h:1068
ImVec2 GetWorkCenter() const
Definition: imgui.h:2824
Definition: imgui.h:1662
float DeltaTime
Definition: imgui.h:1832
Definition: imgui.h:1234
Definition: imgui.h:1330
ImGuiComboFlags_
Definition: imgui.h:1079
IMGUI_API int TableGetColumnIndex()
ImFontGlyphRangesBuilder()
Definition: imgui.h:2590
Definition: imgui.h:1557
IMGUI_API void EndFrame()
int TexDesiredWidth
Definition: imgui.h:2706
Definition: imgui.h:1572
bool IsPacked() const
Definition: imgui.h:2610
Definition: imgui.h:1342
void swap(ImVector< T > &rhs)
Definition: imgui.h:1735
IMGUI_API void OpenPopupOnItemClick(const char *str_id=NULL, ImGuiPopupFlags popup_flags=1)
IMGUI_API ImVec2 GetMousePos()
ImDrawListFlags Flags
Definition: imgui.h:2403
Definition: imgui.h:1661
IMGUI_API void CaptureMouseFromApp(bool want_capture_mouse_value=true)
bool ConfigMacOSXBehaviors
Definition: imgui.h:1852
bool AntiAliasedFill
Definition: imgui.h:1807
Definition: imgui.h:1474
ImWchar EllipsisChar
Definition: imgui.h:2563
IMGUI_API bool ShowStyleSelector(const char *label)
#define IM_COL32_R_SHIFT
Definition: imgui.h:2228
ImDrawCornerFlags_
Definition: imgui.h:2883
ImGuiMouseButton_
Definition: imgui.h:1629
const ImFontConfig * ConfigData
Definition: imgui.h:2755
void resize(int new_size, const T &v)
Definition: imgui.h:1739
IMGUI_API void ScaleAllSizes(float scale_factor)
IMGUI_API bool InvisibleButton(const char *str_id, const ImVec2 &size, ImGuiButtonFlags flags=0)
IMGUI_API bool IsItemActivated()
Definition: imgui.h:1096
Definition: imgui.h:1026
Definition: imgui_internal.h:1457
ImGuiSliderFlags_
Definition: imgui.h:1612
int ImGuiSelectableFlags
Definition: imgui.h:198
Definition: imgui.h:1086
int _Count
Definition: imgui.h:2345
Definition: imgui.h:1645
ImGuiDir_
Definition: imgui.h:1338
bool WantTextInput
Definition: imgui.h:1915
IMGUI_API bool SliderInt3(const char *label, int v[3], int v_min, int v_max, const char *format="%d", ImGuiSliderFlags flags=0)
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))
int BufTextLen
Definition: imgui.h:1985
Definition: imgui.h:1302
ImVec2 pos
Definition: imgui.h:2312
IMGUI_API ImVec2 GetCursorPos()
Definition: imgui.h:1432
IMGUI_API ImFont * GetFont()
IMGUI_API bool BeginDragDropTarget()
Definition: imgui.h:2366
int MetricsActiveWindows
Definition: imgui.h:1924
unsigned long long ImU64
Definition: imgui.h:240
int(* ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data)
Definition: imgui.h:254
ImVec2 DisplayPosOffset
Definition: imgui.h:1886
bool ConfigInputTextCursorBlink
Definition: imgui.h:1853
IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat=false)
IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags=0)
bool MouseDoubleClicked[5]
Definition: imgui.h:1939
Definition: imgui.h:1646
IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond=0)
IMGUI_API void ShowFontSelector(const char *label)
short ConfigDataCount
Definition: imgui.h:2756
int Size
Definition: imgui.h:1700
Definition: imgui.h:973
Definition: imgui.h:1172
IMGUI_API void SetColumnOffset(int column_index, float offset_x)
Definition: imgui.h:1470
float PopupRounding
Definition: imgui.h:1780
IMGUI_API void Dummy(const ImVec2 &size)
ImVec4(float _x, float _y, float _z, float _w)
Definition: imgui.h:279
float y
Definition: imgui.h:264
Definition: imgui.h:1532
Definition: imgui.h:1183
IMGUI_API void ShowStyleEditor(ImGuiStyle *ref=NULL)
static float GetWindowContentRegionWidth()
Definition: imgui.h:2837
Definition: imgui.h:2361
unsigned short ImU16
Definition: imgui.h:228
int MetricsRenderIndices
Definition: imgui.h:1922
Definition: imgui.h:1508
void AddChar(ImWchar c)
Definition: imgui.h:2594
IMGUI_API void appendfv(const char *fmt, va_list args) IM_FMTLIST(2)
bool IsDataType(const char *type) const
Definition: imgui.h:2029
Definition: imgui.h:1159
IMGUI_API void OpenPopup(const char *str_id, ImGuiPopupFlags popup_flags=0)
Definition: imgui.h:1458
int ImGuiCol
Definition: imgui.h:167
IMGUI_API void TextWrappedV(const char *fmt, va_list args) IM_FMTLIST(1)
void Clear()
Definition: imgui.h:2536
char operator[](int i) const
Definition: imgui.h:2113
Definition: imgui.h:1546
int ImGuiNavInput
Definition: imgui.h:178
bool contains(const T &v) const
Definition: imgui.h:1751
Definition: imgui.h:2574
ImColor(int r, int g, int b, int a=255)
Definition: imgui.h:2248
IMGUI_API float GetColumnOffset(int column_index=-1)
Definition: imgui.h:1033
IMGUI_API bool BeginMenuBar()
Definition: imgui.h:2365
IMGUI_API int GetFrameCount()
Definition: imgui.h:1376
Definition: imgui.h:2893
IMGUI_API void EndTabBar()
IMGUI_API bool IsRectVisible(const ImVec2 &size)
ImGuiDir ColorButtonPosition
Definition: imgui.h:1799
const T * end() const
Definition: imgui.h:1730
IMGUI_API void Indent(float indent_w=0.0f)
int BufSize
Definition: imgui.h:1986
IMGUI_API void SetColumnWidth(int column_index, float width)
IMGUI_API bool SliderInt(const char *label, int *v, int v_min, int v_max, const char *format="%d", ImGuiSliderFlags flags=0)
ImGuiInputTextFlags_
Definition: imgui.h:992
ImGuiTableRowFlags_
Definition: imgui.h:1244
Definition: imgui.h:1542
IMGUI_API ImVec2 GetWindowContentRegionMin()
Definition: imgui.h:1606
Definition: imgui.h:958
Definition: imgui.h:1271
Definition: imgui.h:1414
IMGUI_API void SetCurrentContext(ImGuiContext *ctx)
Definition: imgui.h:1663
IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat=true)
IMGUI_API void EndMenu()
bool MouseDownWasDoubleClick[5]
Definition: imgui.h:1943
unsigned int ImWchar32
Definition: imgui.h:246
Definition: imgui.h:1404
Definition: imgui.h:1488
Definition: imgui.h:2885
Definition: imgui.h:1083
IMGUI_API bool IsAnyItemFocused()
IMGUI_API bool Checkbox(const char *label, bool *v)
Definition: imgui.h:1487
IMGUI_API void EndDisabled()
IMGUI_API bool TreeNodeExV(const char *str_id, ImGuiTreeNodeFlags flags, const char *fmt, va_list args) IM_FMTLIST(3)
IMGUI_API void DestroyContext(ImGuiContext *ctx=NULL)
IMGUI_API void GetAllocatorFunctions(ImGuiMemAllocFunc *p_alloc_func, ImGuiMemFreeFunc *p_free_func, void **p_user_data)
ImVec2 TouchExtraPadding
Definition: imgui.h:1788
Definition: imgui.h:1332
#define X(a)
Definition: DtSharedSimulationSettings.h:51
IMGUI_API bool BeginPopupModal(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
ImFontAtlas * Fonts
Definition: imgui.h:1844
Definition: imgui.h:1209
IMGUI_API bool TreeNodeEx(const char *label, ImGuiTreeNodeFlags flags=0)
IMGUI_API const char * SaveIniSettingsToMemory(size_t *out_ini_size=NULL)
ImVec2 WindowPadding
Definition: imgui.h:1772
Definition: imgui.h:1633
ImS16 ColumnIndex
Definition: imgui.h:2038
Definition: imgui.h:2072
T * erase(const T *it, const T *it_last)
Definition: imgui.h:1748
T * erase_unsorted(const T *it)
Definition: imgui.h:1749
Definition: imgui.h:960
ImGuiTabItemFlags_
Definition: imgui.h:1109
ImGuiTableFlags_
Definition: imgui.h:1145
IMGUI_API bool BeginTable(const char *str_id, int column, ImGuiTableFlags flags=0, const ImVec2 &outer_size=ImVec2(0.0f, 0.0f), float inner_width=0.0f)
IMGUI_API float GetCursorPosY()
Definition: imgui.h:1499
Definition: imgui.h:1436
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val)
ImGuiTableSortSpecs()
Definition: imgui.h:2055
IMGUI_API bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold=-1.0f)
Definition: imgui.h:1031
Definition: imgui.h:1659
IMGUI_API ImVec2 GetItemRectSize()
const char * b
Definition: imgui.h:2092
float GlyphAdvanceX
Definition: imgui.h:2606
void PathLineToMergeDuplicate(const ImVec2 &pos)
Definition: imgui.h:2466
Definition: imgui.h:1002
Definition: imgui.h:1192
float CircleTessellationMaxError
Definition: imgui.h:1809
int SelectionEnd
Definition: imgui.h:1990
IMGUI_API bool Selectable(const char *label, bool selected=false, ImGuiSelectableFlags flags=0, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui.h:1490
ImGuiStyleVar_
Definition: imgui.h:1520
int ImGuiKeyModFlags
Definition: imgui.h:196
Definition: imgui.h:1314
float MouseDragThreshold
Definition: imgui.h:1838
Definition: imgui.h:1370
ImGuiBackendFlags BackendFlags
Definition: imgui.h:1830
int size() const
Definition: imgui.h:2116
Definition: imgui.h:2385
ImVec2 Pos
Definition: imgui.h:2007
Definition: imgui.h:1568
ImGuiConfigFlags ConfigFlags
Definition: imgui.h:1829
IMGUI_API bool InputInt(const char *label, int *v, int step=1, int step_fast=100, ImGuiInputTextFlags flags=0)
IMGUI_API bool SliderFloat3(const char *label, float v[3], float v_min, float v_max, const char *format="%.3f", ImGuiSliderFlags flags=0)
Definition: imgui.h:1506
Definition: imgui.h:1403
Definition: imgui.h:1649
T * begin()
Definition: imgui.h:1727
int CountGrep
Definition: imgui.h:2102
Definition: imgui.h:1012
Definition: imgui.h:1213
bool DirtyLookupTables
Definition: imgui.h:2760
const ImGuiTableColumnSortSpecs * Specs
Definition: imgui.h:2051
IMGUI_API void BulletText(const char *fmt,...) IM_FMTARGS(1)
int MetricsActiveAllocations
Definition: imgui.h:1925
T value_type
Definition: imgui.h:1705
void * ImTextureID
Definition: imgui.h:213
IMGUI_API void TableSetupScrollFreeze(int cols, int rows)
ImDrawListSplitter _Splitter
Definition: imgui.h:2415
IMGUI_API float GetTextLineHeightWithSpacing()
IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond=0)
ImVector< ImGuiTextRange > Filters
Definition: imgui.h:2101
IMGUI_API float GetFontSize()
IMGUI_API ImVec2 GetWindowPos()
Definition: imgui.h:2004
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", ImGuiSliderFlags flags=0)
ImWchar FallbackChar
Definition: imgui.h:2757
Definition: imgui.h:974
Definition: imgui.h:1170
ImGuiFocusedFlags_
Definition: imgui.h:1268
IMGUI_API bool CheckboxFlags(const char *label, int *flags, int flags_value)
IMGUI_API bool ArrowButton(const char *str_id, ImGuiDir dir)
Definition: imgui.h:2384
Definition: imgui.h:1285
float ChildRounding
Definition: imgui.h:1778
Definition: imgui.h:2310
Definition: imgui.h:1263
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, ImGuiSliderFlags flags=0)
IMGUI_API bool IsWindowAppearing()
Definition: imgui.h:1402
Definition: imgui.h:1556
IMGUI_API void EndDragDropTarget()
ImVector< char > Buf
Definition: imgui.h:2109
Definition: imgui.h:1157
#define IM_COL32_WHITE
Definition: imgui.h:2235
IMGUI_API ImVec2 GetFontTexUvWhitePixel()
Definition: imgui.h:1205
IMGUI_API void SetWindowFocus()
Definition: imgui.h:1415
Definition: imgui.h:957
void SetTexID(ImTextureID id)
Definition: imgui.h:2663
IMGUI_API float GetWindowWidth()
ImGuiOnceUponAFrame()
Definition: imgui.h:2074
ImGuiHoveredFlags_
Definition: imgui.h:1282
Definition: imgui.h:1420
Definition: imgui.h:1369
Definition: imgui.h:1101
IMGUI_API void PopStyleColor(int count=1)
IMGUI_API int GetKeyIndex(ImGuiKey imgui_key)
IMGUI_API void EndMainMenuBar()
bool WantCaptureKeyboard
Definition: imgui.h:1914
float GrabRounding
Definition: imgui.h:1794
bool Locked
Definition: imgui.h:2708
IMGUI_API bool IsPopupOpen(const char *str_id, ImGuiPopupFlags flags=0)
Definition: imgui.h:1018
const char * BackendPlatformName
Definition: imgui.h:1865
int ImDrawFlags
Definition: imgui.h:184
int KeyMap[ImGuiKey_COUNT]
Definition: imgui.h:1839
int ImGuiTableColumnFlags
Definition: imgui.h:203
IMGUI_API void EndTooltip()
IMGUI_API void SetScrollHereY(float center_y_ratio=0.5f)
IMGUI_API ImDrawListSharedData * GetDrawListSharedData()
IMGUI_API void StyleColorsLight(ImGuiStyle *dst=NULL)
Definition: imgui.h:1477
IMGUI_API void TextV(const char *fmt, va_list args) IM_FMTLIST(1)
IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button)
bool IsBuilt() const
Definition: imgui.h:2662
ImFont * FontDefault
Definition: imgui.h:1847
int size_in_bytes() const
Definition: imgui.h:1721
float operator[](size_t idx) const
Definition: imgui.h:267
Definition: imgui.h:1149
char InputBuf[256]
Definition: imgui.h:2100


Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)