VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
imgui_internal.h
Go to the documentation of this file.
1 // dear imgui, v1.85
2 // (internal structures/api)
3 
4 // You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
5 // Set:
6 // #define IMGUI_DEFINE_MATH_OPERATORS
7 // To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
8 
9 /*
10 
11 Index of this file:
12 
13 // [SECTION] Header mess
14 // [SECTION] Forward declarations
15 // [SECTION] Context pointer
16 // [SECTION] STB libraries includes
17 // [SECTION] Macros
18 // [SECTION] Generic helpers
19 // [SECTION] ImDrawList support
20 // [SECTION] Widgets support: flags, enums, data structures
21 // [SECTION] Navigation support
22 // [SECTION] Columns support
23 // [SECTION] Multi-select support
24 // [SECTION] Docking support
25 // [SECTION] Viewport support
26 // [SECTION] Settings support
27 // [SECTION] Metrics, Debug tools
28 // [SECTION] Generic context hooks
29 // [SECTION] ImGuiContext (main imgui context)
30 // [SECTION] ImGuiWindowTempData, ImGuiWindow
31 // [SECTION] Tab bar, Tab item support
32 // [SECTION] Table support
33 // [SECTION] ImGui internal API
34 // [SECTION] ImFontAtlas internal API
35 // [SECTION] Test Engine specific hooks (imgui_test_engine)
36 
37 */
38 
39 #pragma once
40 #ifndef IMGUI_DISABLE
41 
42 //-----------------------------------------------------------------------------
43 // [SECTION] Header mess
44 //-----------------------------------------------------------------------------
45 
46 #ifndef IMGUI_VERSION
47 #include "imgui.h"
48 #endif
49 
50 #include <stdio.h> // FILE*, sscanf
51 #include <stdlib.h> // NULL, malloc, free, qsort, atoi, atof
52 #include <math.h> // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf
53 #include <limits.h> // INT_MIN, INT_MAX
54 
55 // Enable SSE intrinsics if available
56 #if (defined __SSE__ || defined __x86_64__ || defined _M_X64) && !defined(IMGUI_DISABLE_SSE)
57 #define IMGUI_ENABLE_SSE
58 #include <immintrin.h>
59 #endif
60 
61 // Visual Studio warnings
62 #ifdef _MSC_VER
63 #pragma warning (push)
64 #pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport)
65 #pragma warning (disable: 26812) // The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). [MSVC Static Analyzer)
66 #pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
67 #if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
68 #pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types
69 #endif
70 #endif
71 
72 // Clang/GCC warnings with -Weverything
73 #if defined(__clang__)
74 #pragma clang diagnostic push
75 #if __has_warning("-Wunknown-warning-option")
76 #pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx'
77 #endif
78 #pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
79 #pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants ok, for ImFloorSigned()
80 #pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h
81 #pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h
82 #pragma clang diagnostic ignored "-Wold-style-cast"
83 #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
84 #pragma clang diagnostic ignored "-Wdouble-promotion"
85 #pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
86 #pragma clang diagnostic ignored "-Wmissing-noreturn" // warning: function 'xxx' could be declared with attribute 'noreturn'
87 #elif defined(__GNUC__)
88 #pragma GCC diagnostic push
89 #pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
90 #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
91 #endif
92 
93 // Legacy defines
94 #ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Renamed in 1.74
95 #error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
96 #endif
97 #ifdef IMGUI_DISABLE_MATH_FUNCTIONS // Renamed in 1.74
98 #error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
99 #endif
100 
101 // Enable stb_truetype by default unless FreeType is enabled.
102 // You can compile with both by defining both IMGUI_ENABLE_FREETYPE and IMGUI_ENABLE_STB_TRUETYPE together.
103 #ifndef IMGUI_ENABLE_FREETYPE
104 #define IMGUI_ENABLE_STB_TRUETYPE
105 #endif
106 
107 //-----------------------------------------------------------------------------
108 // [SECTION] Forward declarations
109 //-----------------------------------------------------------------------------
110 
111 struct ImBitVector; // Store 1-bit per value
112 struct ImRect; // An axis-aligned rectangle (2 points)
113 struct ImDrawDataBuilder; // Helper to build a ImDrawData instance
114 struct ImDrawListSharedData; // Data shared between all ImDrawList instances
115 struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it
116 struct ImGuiContext; // Main Dear ImGui context
117 struct ImGuiContextHook; // Hook for extensions like ImGuiTestEngine
118 struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
119 struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
120 struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
121 struct ImGuiLastItemData; // Status storage for last submitted items
122 struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
123 struct ImGuiNavItemData; // Result of a gamepad/keyboard directional navigation move query result
124 struct ImGuiMetricsConfig; // Storage for ShowMetricsWindow() and DebugNodeXXX() functions
125 struct ImGuiNextWindowData; // Storage for SetNextWindow** functions
126 struct ImGuiNextItemData; // Storage for SetNextItem** functions
127 struct ImGuiOldColumnData; // Storage data for a single column for legacy Columns() api
128 struct ImGuiOldColumns; // Storage data for a columns set for legacy Columns() api
129 struct ImGuiPopupData; // Storage for current popup stack
130 struct ImGuiSettingsHandler; // Storage for one type registered in the .ini file
131 struct ImGuiStackSizes; // Storage of stack sizes for debugging/asserting
132 struct ImGuiStyleMod; // Stacked style modifier, backup of modified data so we can restore it
133 struct ImGuiTabBar; // Storage for a tab bar
134 struct ImGuiTabItem; // Storage for a tab item (within a tab bar)
135 struct ImGuiTable; // Storage for a table
136 struct ImGuiTableColumn; // Storage for one column of a table
137 struct ImGuiTableTempData; // Temporary storage for one table (one per table in the stack), shared between tables.
138 struct ImGuiTableSettings; // Storage for a table .ini settings
139 struct ImGuiTableColumnsSettings; // Storage for a column .ini settings
140 struct ImGuiWindow; // Storage for one window
141 struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame, in practice we currently keep it for each window)
142 struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
143 
144 // Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
145 typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
146 typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
147 typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag()
148 typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags
149 typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
150 typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight()
151 typedef int ImGuiNavDirSourceFlags; // -> enum ImGuiNavDirSourceFlags_ // Flags: for GetNavInputAmount2d()
152 typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests
153 typedef int ImGuiNextItemDataFlags; // -> enum ImGuiNextItemDataFlags_ // Flags: for SetNextItemXXX() functions
154 typedef int ImGuiNextWindowDataFlags; // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions
155 typedef int ImGuiScrollFlags; // -> enum ImGuiScrollFlags_ // Flags: for ScrollToItem() and navigation requests
156 typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx()
157 typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx()
158 typedef int ImGuiTooltipFlags; // -> enum ImGuiTooltipFlags_ // Flags: for BeginTooltipEx()
159 
160 typedef void (*ImGuiErrorLogCallback)(void* user_data, const char* fmt, ...);
161 
162 //-----------------------------------------------------------------------------
163 // [SECTION] Context pointer
164 // See implementation of this variable in imgui.cpp for comments and details.
165 //-----------------------------------------------------------------------------
166 
167 #ifndef GImGui
168 extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer
169 #endif
170 
171 //-------------------------------------------------------------------------
172 // [SECTION] STB libraries includes
173 //-------------------------------------------------------------------------
174 
175 namespace ImStb
176 {
177 
178 #undef STB_TEXTEDIT_STRING
179 #undef STB_TEXTEDIT_CHARTYPE
180 #define STB_TEXTEDIT_STRING ImGuiInputTextState
181 #define STB_TEXTEDIT_CHARTYPE ImWchar
182 #define STB_TEXTEDIT_GETWIDTH_NEWLINE (-1.0f)
183 #define STB_TEXTEDIT_UNDOSTATECOUNT 99
184 #define STB_TEXTEDIT_UNDOCHARCOUNT 999
185 #include "imstb_textedit.h"
186 
187 } // namespace ImStb
188 
189 //-----------------------------------------------------------------------------
190 // [SECTION] Macros
191 //-----------------------------------------------------------------------------
192 
193 // Debug Logging
194 #ifndef IMGUI_DEBUG_LOG
195 #define IMGUI_DEBUG_LOG(_FMT,...) printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__)
196 #endif
197 
198 // Debug Logging for selected systems. Remove the '((void)0) //' to enable.
199 //#define IMGUI_DEBUG_LOG_POPUP IMGUI_DEBUG_LOG // Enable log
200 //#define IMGUI_DEBUG_LOG_NAV IMGUI_DEBUG_LOG // Enable log
201 #define IMGUI_DEBUG_LOG_POPUP(...) ((void)0) // Disable log
202 #define IMGUI_DEBUG_LOG_NAV(...) ((void)0) // Disable log
203 
204 // Static Asserts
205 #if (__cplusplus >= 201100) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201100)
206 #define IM_STATIC_ASSERT(_COND) static_assert(_COND, "")
207 #else
208 #define IM_STATIC_ASSERT(_COND) typedef char static_assertion_##__line__[(_COND)?1:-1]
209 #endif
210 
211 // "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much.
212 // We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code.
213 //#define IMGUI_DEBUG_PARANOID
214 #ifdef IMGUI_DEBUG_PARANOID
215 #define IM_ASSERT_PARANOID(_EXPR) IM_ASSERT(_EXPR)
216 #else
217 #define IM_ASSERT_PARANOID(_EXPR)
218 #endif
219 
220 // Error handling
221 // Down the line in some frameworks/languages we would like to have a way to redirect those to the programmer and recover from more faults.
222 #ifndef IM_ASSERT_USER_ERROR
223 #define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG) // Recoverable User Error
224 #endif
225 
226 // Misc Macros
227 #define IM_PI 3.14159265358979323846f
228 #ifdef _WIN32
229 #define IM_NEWLINE "\r\n" // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
230 #else
231 #define IM_NEWLINE "\n"
232 #endif
233 #define IM_TABSIZE (4)
234 #define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + (_ALIGN - 1)) & ~(_ALIGN - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8
235 #define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose
236 #define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255
237 #define IM_FLOOR(_VAL) ((float)(int)(_VAL)) // ImFloor() is not inlined in MSVC debug builds
238 #define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) //
239 
240 // Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
241 #ifdef _MSC_VER
242 #define IMGUI_CDECL __cdecl
243 #else
244 #define IMGUI_CDECL
245 #endif
246 
247 // Warnings
248 #if defined(_MSC_VER) && !defined(__clang__)
249 #define IM_MSVC_WARNING_SUPPRESS(XXXX) __pragma(warning(suppress: XXXX))
250 #else
251 #define IM_MSVC_WARNING_SUPPRESS(XXXX)
252 #endif
253 
254 // Debug Tools
255 // Use 'Metrics->Tools->Item Picker' to break into the call-stack of a specific item.
256 #ifndef IM_DEBUG_BREAK
257 #if defined(__clang__)
258 #define IM_DEBUG_BREAK() __builtin_debugtrap()
259 #elif defined (_MSC_VER)
260 #define IM_DEBUG_BREAK() __debugbreak()
261 #else
262 #define IM_DEBUG_BREAK() IM_ASSERT(0) // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger!
263 #endif
264 #endif // #ifndef IM_DEBUG_BREAK
265 
266 //-----------------------------------------------------------------------------
267 // [SECTION] Generic helpers
268 // Note that the ImXXX helpers functions are lower-level than ImGui functions.
269 // ImGui functions or the ImGui context are never called/used from other ImXXX functions.
270 //-----------------------------------------------------------------------------
271 // - Helpers: Hashing
272 // - Helpers: Sorting
273 // - Helpers: Bit manipulation
274 // - Helpers: String, Formatting
275 // - Helpers: UTF-8 <> wchar conversions
276 // - Helpers: ImVec2/ImVec4 operators
277 // - Helpers: Maths
278 // - Helpers: Geometry
279 // - Helper: ImVec1
280 // - Helper: ImVec2ih
281 // - Helper: ImRect
282 // - Helper: ImBitArray
283 // - Helper: ImBitVector
284 // - Helper: ImSpan<>, ImSpanAllocator<>
285 // - Helper: ImPool<>
286 // - Helper: ImChunkStream<>
287 //-----------------------------------------------------------------------------
288 
289 // Helpers: Hashing
290 IMGUI_API ImGuiID ImHashData(const void* data, size_t data_size, ImU32 seed = 0);
291 IMGUI_API ImGuiID ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0);
292 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
293 static inline ImGuiID ImHash(const void* data, int size, ImU32 seed = 0) { return size ? ImHashData(data, (size_t)size, seed) : ImHashStr((const char*)data, 0, seed); } // [moved to ImHashStr/ImHashData in 1.68]
294 #endif
295 
296 // Helpers: Sorting
297 #define ImQsort qsort
298 
299 // Helpers: Color Blending
301 
302 // Helpers: Bit manipulation
303 static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
304 static inline bool ImIsPowerOfTwo(ImU64 v) { return v != 0 && (v & (v - 1)) == 0; }
305 static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
307 // Helpers: String, Formatting
308 IMGUI_API int ImStricmp(const char* str1, const char* str2);
309 IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count);
310 IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count);
311 IMGUI_API char* ImStrdup(const char* str);
312 IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str);
313 IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c);
314 IMGUI_API int ImStrlenW(const ImWchar* str);
315 IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line
316 IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line
317 IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end);
318 IMGUI_API void ImStrTrimBlanks(char* str);
319 IMGUI_API const char* ImStrSkipBlank(const char* str);
320 IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3);
321 IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
322 IMGUI_API const char* ImParseFormatFindStart(const char* format);
323 IMGUI_API const char* ImParseFormatFindEnd(const char* format);
324 IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size);
325 IMGUI_API int ImParseFormatPrecision(const char* format, int default_value);
326 static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; }
327 static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; }
329 // Helpers: UTF-8 <> wchar conversions
330 IMGUI_API const char* ImTextCharToUtf8(char out_buf[5], unsigned int c); // return out_buf
331 IMGUI_API int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count
332 IMGUI_API int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end); // read one character. return input UTF-8 bytes count
333 IMGUI_API int ImTextStrFromUtf8(ImWchar* out_buf, int out_buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL); // return input UTF-8 bytes count
334 IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count)
335 IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end); // return number of bytes to express one char in UTF-8
336 IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8
337 
338 // Helpers: ImVec2/ImVec4 operators
339 // We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.)
340 // We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself.
341 #ifdef IMGUI_DEFINE_MATH_OPERATORS
343 static inline ImVec2 operator*(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x * rhs, lhs.y * rhs); }
344 static inline ImVec2 operator/(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x / rhs, lhs.y / rhs); }
345 static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x + rhs.x, lhs.y + rhs.y); }
346 static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x - rhs.x, lhs.y - rhs.y); }
347 static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
348 static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x / rhs.x, lhs.y / rhs.y); }
349 static inline ImVec2& operator*=(ImVec2& lhs, const float rhs) { lhs.x *= rhs; lhs.y *= rhs; return lhs; }
350 static inline ImVec2& operator/=(ImVec2& lhs, const float rhs) { lhs.x /= rhs; lhs.y /= rhs; return lhs; }
351 static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs) { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; }
352 static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs) { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; }
353 static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs) { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; }
354 static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs) { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; }
355 static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z, lhs.w + rhs.w); }
356 static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z, lhs.w - rhs.w); }
357 static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x * rhs.x, lhs.y * rhs.y, lhs.z * rhs.z, lhs.w * rhs.w); }
359 #endif
360 
361 // Helpers: File System
362 #ifdef IMGUI_DISABLE_FILE_FUNCTIONS
363 #define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
364 typedef void* ImFileHandle;
365 static inline ImFileHandle ImFileOpen(const char*, const char*) { return NULL; }
366 static inline bool ImFileClose(ImFileHandle) { return false; }
367 static inline ImU64 ImFileGetSize(ImFileHandle) { return (ImU64)-1; }
368 static inline ImU64 ImFileRead(void*, ImU64, ImU64, ImFileHandle) { return 0; }
369 static inline ImU64 ImFileWrite(const void*, ImU64, ImU64, ImFileHandle) { return 0; }
370 #endif
371 #ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
372 typedef FILE* ImFileHandle;
373 IMGUI_API ImFileHandle ImFileOpen(const char* filename, const char* mode);
376 IMGUI_API ImU64 ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file);
377 IMGUI_API ImU64 ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file);
378 #else
379 #define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions
380 #endif
381 IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0);
382 
383 // Helpers: Maths
385 // - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
386 #ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
387 #define ImFabs(X) fabsf(X)
388 #define ImSqrt(X) sqrtf(X)
389 #define ImFmod(X, Y) fmodf((X), (Y))
390 #define ImCos(X) cosf(X)
391 #define ImSin(X) sinf(X)
392 #define ImAcos(X) acosf(X)
393 #define ImAtan2(Y, X) atan2f((Y), (X))
394 #define ImAtof(STR) atof(STR)
395 //#define ImFloorStd(X) floorf(X) // We use our own, see ImFloor() and ImFloorSigned()
396 #define ImCeil(X) ceilf(X)
397 static inline float ImPow(float x, float y) { return powf(x, y); } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision
398 static inline double ImPow(double x, double y) { return pow(x, y); }
399 static inline float ImLog(float x) { return logf(x); } // DragBehaviorT/SliderBehaviorT uses ImLog with either float/double and need the precision
400 static inline double ImLog(double x) { return log(x); }
401 static inline int ImAbs(int x) { return x < 0 ? -x : x; }
402 static inline float ImAbs(float x) { return fabsf(x); }
403 static inline double ImAbs(double x) { return fabs(x); }
404 static inline float ImSign(float x) { return (x < 0.0f) ? -1.0f : ((x > 0.0f) ? 1.0f : 0.0f); } // Sign operator - returns -1, 0 or 1 based on sign of argument
405 static inline double ImSign(double x) { return (x < 0.0) ? -1.0 : ((x > 0.0) ? 1.0 : 0.0); }
406 #ifdef IMGUI_ENABLE_SSE
407 static inline float ImRsqrt(float x) { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(x))); }
408 #else
409 static inline float ImRsqrt(float x) { return 1.0f / sqrtf(x); }
410 #endif
411 static inline double ImRsqrt(double x) { return 1.0 / sqrt(x); }
412 #endif
413 // - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double
414 // (Exceptionally using templates here but we could also redefine them for those types)
415 template<typename T> static inline T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; }
416 template<typename T> static inline T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; }
417 template<typename T> static inline T ImClamp(T v, T mn, T mx) { return (v < mn) ? mn : (v > mx) ? mx : v; }
418 template<typename T> static inline T ImLerp(T a, T b, float t) { return (T)(a + (b - a) * t); }
419 template<typename T> static inline void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
420 template<typename T> static inline T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
421 template<typename T> static inline T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
422 // - Misc maths helpers
423 static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
424 static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
425 static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 mx) { return ImVec2((v.x < mn.x) ? mn.x : (v.x > mx.x) ? mx.x : v.x, (v.y < mn.y) ? mn.y : (v.y > mx.y) ? mx.y : v.y); }
426 static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t) { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); }
427 static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t) { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); }
428 static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t) { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); }
429 static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; }
430 static inline float ImLengthSqr(const ImVec2& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y); }
431 static inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); }
432 static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return ImRsqrt(d); return fail_value; }
433 static inline float ImFloor(float f) { return (float)(int)(f); }
434 static inline float ImFloorSigned(float f) { return (float)((f >= 0 || (int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf()
435 static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
436 static inline int ImModPositive(int a, int b) { return (a + b) % b; }
437 static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; }
438 static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
439 static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; }
440 static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
442 
443 // Helpers: Geometry
444 IMGUI_API ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t);
445 IMGUI_API ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments); // For curves with explicit number of segments
446 IMGUI_API ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol);// For auto-tessellated curves you can use tess_tol = style.CurveTessellationTol
447 IMGUI_API ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, float t);
448 IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
449 IMGUI_API bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
450 IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
451 IMGUI_API void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w);
452 inline float ImTriangleArea(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ImFabs((a.x * (b.y - c.y)) + (b.x * (c.y - a.y)) + (c.x * (a.y - b.y))) * 0.5f; }
453 IMGUI_API ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy);
454 
455 // Helper: ImVec1 (1D vector)
456 // (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches)
458 struct ImVec1
459 {
460  float x;
461  ImVec1() { x = 0.0f; }
462  ImVec1(float _x) { x = _x; }
463 };
464 
465 // Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage)
466 struct ImVec2ih
467 {
468  short x, y;
469  ImVec2ih() { x = y = 0; }
470  ImVec2ih(short _x, short _y) { x = _x; y = _y; }
471  explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs.y; }
472 };
473 
474 // Helper: ImRect (2D axis aligned bounding-box)
475 // NB: we can't rely on ImVec2 math operators being available here!
477 {
478  ImVec2 Min; // Upper-left
479  ImVec2 Max; // Lower-right
480 
481  ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {}
482  ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {}
483  ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {}
484  ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {}
485 
486  ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
487  ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
488  float GetWidth() const { return Max.x - Min.x; }
489  float GetHeight() const { return Max.y - Min.y; }
490  float GetArea() const { return (Max.x - Min.x) * (Max.y - Min.y); }
491  ImVec2 GetTL() const { return Min; } // Top-left
492  ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right
493  ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left
494  ImVec2 GetBR() const { return Max; } // Bottom-right
495  bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; }
496  bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x <= Max.x && r.Max.y <= Max.y; }
497  bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; }
498  void Add(const ImVec2& p) { if (Min.x > p.x) Min.x = p.x; if (Min.y > p.y) Min.y = p.y; if (Max.x < p.x) Max.x = p.x; if (Max.y < p.y) Max.y = p.y; }
499  void Add(const ImRect& r) { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; }
500  void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; }
501  void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; }
502  void Translate(const ImVec2& d) { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; }
503  void TranslateX(float dx) { Min.x += dx; Max.x += dx; }
504  void TranslateY(float dy) { Min.y += dy; Max.y += dy; }
505  void ClipWith(const ImRect& r) { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); } // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display.
506  void ClipWithFull(const ImRect& r) { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped.
507  void Floor() { Min.x = IM_FLOOR(Min.x); Min.y = IM_FLOOR(Min.y); Max.x = IM_FLOOR(Max.x); Max.y = IM_FLOOR(Max.y); }
508  bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; }
509  ImVec4 ToVec4() const { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
510 };
512 
513 // Helper: ImBitArray
514 inline bool ImBitArrayTestBit(const ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; }
515 inline void ImBitArrayClearBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; }
516 inline void ImBitArraySetBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; }
517 inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on range [n..n2)
518 {
519  n2--;
520  while (n <= n2)
521  {
522  int a_mod = (n & 31);
523  int b_mod = (n2 > (n | 31) ? 31 : (n2 & 31)) + 1;
524  ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1);
525  arr[n >> 5] |= mask;
526  n = (n + 32) & ~31;
527  }
528 }
529 
530 // Helper: ImBitArray class (wrapper over ImBitArray functions)
531 // Store 1-bit per value.
532 template<int BITCOUNT>
534 {
535  ImU32 Storage[(BITCOUNT + 31) >> 5];
536  ImBitArray() { ClearAllBits(); }
537  void ClearAllBits() { memset(Storage, 0, sizeof(Storage)); }
538  void SetAllBits() { memset(Storage, 255, sizeof(Storage)); }
539  bool TestBit(int n) const { IM_ASSERT(n < BITCOUNT); return ImBitArrayTestBit(Storage, n); }
540  void SetBit(int n) { IM_ASSERT(n < BITCOUNT); ImBitArraySetBit(Storage, n); }
541  void ClearBit(int n) { IM_ASSERT(n < BITCOUNT); ImBitArrayClearBit(Storage, n); }
542  void SetBitRange(int n, int n2) { ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2)
543 };
544 
545 // Helper: ImBitVector
546 // Store 1-bit per value.
548 {
550  void Create(int sz) { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); }
551  void Clear() { Storage.clear(); }
552  bool TestBit(int n) const { IM_ASSERT(n < (Storage.Size << 5)); return ImBitArrayTestBit(Storage.Data, n); }
553  void SetBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); }
554  void ClearBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); }
555 };
556 
557 // Helper: ImSpan<>
558 // Pointing to a span of data we don't own.
559 template<typename T>
560 struct ImSpan
561 {
562  T* Data;
564 
565  // Constructors, destructor
566  inline ImSpan() { Data = DataEnd = NULL; }
567  inline ImSpan(T* data, int size) { Data = data; DataEnd = data + size; }
568  inline ImSpan(T* data, T* data_end) { Data = data; DataEnd = data_end; }
569 
570  inline void set(T* data, int size) { Data = data; DataEnd = data + size; }
571  inline void set(T* data, T* data_end) { Data = data; DataEnd = data_end; }
572  inline int size() const { return (int)(ptrdiff_t)(DataEnd - Data); }
573  inline int size_in_bytes() const { return (int)(ptrdiff_t)(DataEnd - Data) * (int)sizeof(T); }
574  inline T& operator[](int i) { T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; }
575  inline const T& operator[](int i) const { const T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; }
576 
577  inline T* begin() { return Data; }
578  inline const T* begin() const { return Data; }
579  inline T* end() { return DataEnd; }
580  inline const T* end() const { return DataEnd; }
581 
582  // Utilities
583  inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < DataEnd); const ptrdiff_t off = it - Data; return (int)off; }
584 };
585 
586 // Helper: ImSpanAllocator<>
587 // Facilitate storing multiple chunks into a single large block (the "arena")
588 // - Usage: call Reserve() N times, allocate GetArenaSizeInBytes() worth, pass it to SetArenaBasePtr(), call GetSpan() N times to retrieve the aligned ranges.
589 template<int CHUNKS>
591 {
592  char* BasePtr;
593  int CurrOff;
594  int CurrIdx;
595  int Offsets[CHUNKS];
596  int Sizes[CHUNKS];
597 
598  ImSpanAllocator() { memset(this, 0, sizeof(*this)); }
599  inline void Reserve(int n, size_t sz, int a=4) { IM_ASSERT(n == CurrIdx && n < CHUNKS); CurrOff = IM_MEMALIGN(CurrOff, a); Offsets[n] = CurrOff; Sizes[n] = (int)sz; CurrIdx++; CurrOff += (int)sz; }
600  inline int GetArenaSizeInBytes() { return CurrOff; }
601  inline void SetArenaBasePtr(void* base_ptr) { BasePtr = (char*)base_ptr; }
602  inline void* GetSpanPtrBegin(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n]); }
603  inline void* GetSpanPtrEnd(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n] + Sizes[n]); }
604  template<typename T>
605  inline void GetSpan(int n, ImSpan<T>* span) { span->set((T*)GetSpanPtrBegin(n), (T*)GetSpanPtrEnd(n)); }
606 };
607 
608 // Helper: ImPool<>
609 // Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer,
610 // Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object.
611 typedef int ImPoolIdx;
612 template<typename T>
614 {
615  ImVector<T> Buf; // Contiguous data
616  ImGuiStorage Map; // ID->Index
617  ImPoolIdx FreeIdx; // Next free idx to use
618  ImPoolIdx AliveCount; // Number of active/alive items (for display purpose)
619 
620  ImPool() { FreeIdx = AliveCount = 0; }
621  ~ImPool() { Clear(); }
622  T* GetByKey(ImGuiID key) { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; }
623  T* GetByIndex(ImPoolIdx n) { return &Buf[n]; }
624  ImPoolIdx GetIndex(const T* p) const { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); }
625  T* GetOrAddByKey(ImGuiID key) { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); }
626  bool Contains(const T* p) const { return (p >= Buf.Data && p < Buf.Data + Buf.Size); }
627  void Clear() { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = AliveCount = 0; }
628  T* Add() { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); AliveCount++; return &Buf[idx]; }
629  void Remove(ImGuiID key, const T* p) { Remove(key, GetIndex(p)); }
630  void Remove(ImGuiID key, ImPoolIdx idx) { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); AliveCount--; }
631  void Reserve(int capacity) { Buf.reserve(capacity); Map.Data.reserve(capacity); }
632 
633  // To iterate a ImPool: for (int n = 0; n < pool.GetMapSize(); n++) if (T* t = pool.TryGetMapData(n)) { ... }
634  // Can be avoided if you know .Remove() has never been called on the pool, or AliveCount == GetMapSize()
635  int GetAliveCount() const { return AliveCount; } // Number of active/alive items in the pool (for display purpose)
636  int GetBufSize() const { return Buf.Size; }
637  int GetMapSize() const { return Map.Data.Size; } // It is the map we need iterate to find valid items, since we don't have "alive" storage anywhere
638  T* TryGetMapData(ImPoolIdx n) { int idx = Map.Data[n].val_i; if (idx == -1) return NULL; return GetByIndex(idx); }
639 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
640  int GetSize() { return GetMapSize(); } // For ImPlot: should use GetMapSize() from (IMGUI_VERSION_NUM >= 18304)
641 #endif
642 };
643 
644 // Helper: ImChunkStream<>
645 // Build and iterate a contiguous stream of variable-sized structures.
646 // This is used by Settings to store persistent data while reducing allocation count.
647 // We store the chunk size first, and align the final size on 4 bytes boundaries.
648 // The tedious/zealous amount of casting is to avoid -Wcast-align warnings.
649 template<typename T>
651 {
653 
654  void clear() { Buf.clear(); }
655  bool empty() const { return Buf.Size == 0; }
656  int size() const { return Buf.Size; }
657  T* alloc_chunk(size_t sz) { size_t HDR_SZ = 4; sz = IM_MEMALIGN(HDR_SZ + sz, 4u); int off = Buf.Size; Buf.resize(off + (int)sz); ((int*)(void*)(Buf.Data + off))[0] = (int)sz; return (T*)(void*)(Buf.Data + off + (int)HDR_SZ); }
658  T* begin() { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); }
659  T* next_chunk(T* p) { size_t HDR_SZ = 4; IM_ASSERT(p >= begin() && p < end()); p = (T*)(void*)((char*)(void*)p + chunk_size(p)); if (p == (T*)(void*)((char*)end() + HDR_SZ)) return (T*)0; IM_ASSERT(p < end()); return p; }
660  int chunk_size(const T* p) { return ((const int*)p)[-1]; }
661  T* end() { return (T*)(void*)(Buf.Data + Buf.Size); }
662  int offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end()); const ptrdiff_t off = (const char*)p - Buf.Data; return (int)off; }
663  T* ptr_from_offset(int off) { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); }
664  void swap(ImChunkStream<T>& rhs) { rhs.Buf.swap(Buf); }
665 
666 };
667 
668 //-----------------------------------------------------------------------------
669 // [SECTION] ImDrawList support
670 //-----------------------------------------------------------------------------
671 
672 // ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
673 // Estimation of number of circle segment based on error is derived using method described in https://stackoverflow.com/a/2244088/15194693
674 // Number of segments (N) is calculated using equation:
675 // N = ceil ( pi / acos(1 - error / r) ) where r > 0, error <= r
676 // Our equation is significantly simpler that one in the post thanks for choosing segment that is
677 // perpendicular to X axis. Follow steps in the article from this starting condition and you will
678 // will get this result.
679 //
680 // Rendering circles with an odd number of segments, while mathematically correct will produce
681 // asymmetrical results on the raster grid. Therefore we're rounding N to next even number (7->8, 8->8, 9->10 etc.)
682 //
683 #define IM_ROUNDUP_TO_EVEN(_V) ((((_V) + 1) / 2) * 2)
684 #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 4
685 #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512
686 #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR) ImClamp(IM_ROUNDUP_TO_EVEN((int)ImCeil(IM_PI / ImAcos(1 - ImMin((_MAXERROR), (_RAD)) / (_RAD)))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX)
687 
688 // Raw equation from IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC rewritten for 'r' and 'error'.
689 #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(_N,_MAXERROR) ((_MAXERROR) / (1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))))
690 #define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_ERROR(_N,_RAD) ((1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))) / (_RAD))
691 
692 // ImDrawList: Lookup table size for adaptive arc drawing, cover full circle.
693 #ifndef IM_DRAWLIST_ARCFAST_TABLE_SIZE
694 #define IM_DRAWLIST_ARCFAST_TABLE_SIZE 48 // Number of samples in lookup table.
695 #endif
696 #define IM_DRAWLIST_ARCFAST_SAMPLE_MAX IM_DRAWLIST_ARCFAST_TABLE_SIZE // Sample index _PathArcToFastEx() for 360 angle.
697 
698 // Data shared between all ImDrawList instances
699 // You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure.
701 {
702  ImVec2 TexUvWhitePixel; // UV of white pixel in the atlas
703  ImFont* Font; // Current/default font (optional, for simplified AddText overload)
704  float FontSize; // Current/default font size (optional, for simplified AddText overload)
705  float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo()
706  float CircleSegmentMaxError; // Number of circle segments to use per pixel of radius for AddCircle() etc
707  ImVec4 ClipRectFullscreen; // Value for PushClipRectFullscreen()
708  ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
709 
710  // [Internal] Lookup tables
711  ImVec2 ArcFastVtx[IM_DRAWLIST_ARCFAST_TABLE_SIZE]; // Sample points on the quarter of the circle.
712  float ArcFastRadiusCutoff; // Cutoff radius after which arc drawing will fallback to slower PathArcTo()
713  ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius before we calculate it dynamically (to avoid calculation overhead)
714  const ImVec4* TexUvLines; // UV of anti-aliased lines in the atlas
715 
717  void SetCircleTessellationMaxError(float max_error);
718 };
719 
721 {
722  ImVector<ImDrawList*> Layers[2]; // Global layers for: regular, tooltip
723 
724  void Clear() { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].resize(0); }
725  void ClearFreeMemory() { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].clear(); }
726  int GetDrawListCount() const { int count = 0; for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) count += Layers[n].Size; return count; }
728 };
729 
730 //-----------------------------------------------------------------------------
731 // [SECTION] Widgets support: flags, enums, data structures
732 //-----------------------------------------------------------------------------
733 
734 // Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
735 // This is going to be exposed in imgui.h when stabilized enough.
737 {
739  ImGuiItemFlags_NoTabStop = 1 << 0, // false // Disable keyboard tabbing (FIXME: should merge with _NoNav)
740  ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
741  ImGuiItemFlags_Disabled = 1 << 2, // false // Disable interactions but doesn't affect visuals. See BeginDisabled()/EndDisabled(). See github.com/ocornut/imgui/issues/211
742  ImGuiItemFlags_NoNav = 1 << 3, // false // Disable keyboard/gamepad directional navigation (FIXME: should merge with _NoTabStop)
743  ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false // Disable item being a candidate for default focus (e.g. used by title bar items)
744  ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // Disable MenuItem/Selectable() automatically closing their popup window
745  ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
746  ImGuiItemFlags_ReadOnly = 1 << 7, // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
747  ImGuiItemFlags_Inputable = 1 << 8 // false // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature.
748 };
749 
750 // Storage for LastItem data
752 {
754  ImGuiItemStatusFlags_HoveredRect = 1 << 0, // Mouse position is within item rectangle (does NOT mean that the window is in correct z-order and can be hovered!, this is only one part of the most-common IsItemHovered test)
755  ImGuiItemStatusFlags_HasDisplayRect = 1 << 1, // g.LastItemData.DisplayRect is valid
756  ImGuiItemStatusFlags_Edited = 1 << 2, // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
757  ImGuiItemStatusFlags_ToggledSelection = 1 << 3, // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected", only state changes, in order to easily handle clipping with less issues.
758  ImGuiItemStatusFlags_ToggledOpen = 1 << 4, // Set when TreeNode() reports toggling their open state.
759  ImGuiItemStatusFlags_HasDeactivated = 1 << 5, // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag.
760  ImGuiItemStatusFlags_Deactivated = 1 << 6, // Only valid if ImGuiItemStatusFlags_HasDeactivated is set.
761  ImGuiItemStatusFlags_HoveredWindow = 1 << 7, // Override the HoveredWindow test to allow cross-window hover testing.
762  ImGuiItemStatusFlags_FocusedByTabbing = 1 << 8 // Set when the Focusable item just got focused by Tabbing (FIXME: to be removed soon)
763 
764 #ifdef IMGUI_ENABLE_TEST_ENGINE
765  , // [imgui_tests only]
766  ImGuiItemStatusFlags_Openable = 1 << 20, //
767  ImGuiItemStatusFlags_Opened = 1 << 21, //
768  ImGuiItemStatusFlags_Checkable = 1 << 22, //
769  ImGuiItemStatusFlags_Checked = 1 << 23 //
770 #endif
771 };
772 
773 // Extend ImGuiInputTextFlags_
775 {
776  // [Internal]
777  ImGuiInputTextFlags_Multiline = 1 << 26, // For internal use by InputTextMultiline()
778  ImGuiInputTextFlags_NoMarkEdited = 1 << 27, // For internal use by functions using InputText() before reformatting data
779  ImGuiInputTextFlags_MergedItem = 1 << 28 // For internal use by TempInputText(), will skip calling ItemAdd(). Require bounding-box to strictly match.
780 };
781 
782 // Extend ImGuiButtonFlags_
784 {
785  ImGuiButtonFlags_PressedOnClick = 1 << 4, // return true on click (mouse down event)
786  ImGuiButtonFlags_PressedOnClickRelease = 1 << 5, // [Default] return true on click + release on same item <-- this is what the majority of Button are using
787  ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 6, // return true on click + release even if the release event is not done while hovering the item
788  ImGuiButtonFlags_PressedOnRelease = 1 << 7, // return true on release (default requires click+release)
789  ImGuiButtonFlags_PressedOnDoubleClick = 1 << 8, // return true on double-click (default requires click+release)
790  ImGuiButtonFlags_PressedOnDragDropHold = 1 << 9, // return true when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers)
791  ImGuiButtonFlags_Repeat = 1 << 10, // hold to repeat
792  ImGuiButtonFlags_FlattenChildren = 1 << 11, // allow interactions even if a child window is overlapping
793  ImGuiButtonFlags_AllowItemOverlap = 1 << 12, // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap()
794  ImGuiButtonFlags_DontClosePopups = 1 << 13, // disable automatically closing parent popup on press // [UNUSED]
795  //ImGuiButtonFlags_Disabled = 1 << 14, // disable interactions -> use BeginDisabled() or ImGuiItemFlags_Disabled
796  ImGuiButtonFlags_AlignTextBaseLine = 1 << 15, // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
797  ImGuiButtonFlags_NoKeyModifiers = 1 << 16, // disable mouse interaction if a key modifier is held
798  ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
799  ImGuiButtonFlags_NoNavFocus = 1 << 18, // don't override navigation focus when activated
800  ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, // don't report as hovered when nav focus is on this item
803 };
804 
805 // Extend ImGuiComboFlags_
807 {
808  ImGuiComboFlags_CustomPreview = 1 << 20 // enable BeginComboPreview()
809 };
810 
811 // Extend ImGuiSliderFlags_
813 {
814  ImGuiSliderFlags_Vertical = 1 << 20, // Should this slider be orientated vertically?
816 };
817 
818 // Extend ImGuiSelectableFlags_
820 {
821  // NB: need to be in sync with last value of ImGuiSelectableFlags_
823  ImGuiSelectableFlags_SelectOnNav = 1 << 21, // (WIP) Auto-select when moved into. This is not exposed in public API as to handle multi-select and modifiers we will need user to explicitly control focus scope. May be replaced with a BeginSelection() API.
824  ImGuiSelectableFlags_SelectOnClick = 1 << 22, // Override button behavior to react on Click (default is Click+Release)
825  ImGuiSelectableFlags_SelectOnRelease = 1 << 23, // Override button behavior to react on Release (default is Click+Release)
826  ImGuiSelectableFlags_SpanAvailWidth = 1 << 24, // Span all avail width even if we declared less for layout purpose. FIXME: We may be able to remove this (added in 6251d379, 2bcafc86 for menus)
827  ImGuiSelectableFlags_DrawHoveredWhenHeld = 1 << 25, // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
828  ImGuiSelectableFlags_SetNavIdOnHover = 1 << 26, // Set Nav/Focus ID on mouse hover (used by MenuItem)
829  ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 27 // Disable padding each side with ItemSpacing * 0.5f
830 };
831 
832 // Extend ImGuiTreeNodeFlags_
834 {
836 };
837 
839 {
841  ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
844 };
845 
847 {
850 };
851 
853 {
855  ImGuiTooltipFlags_OverridePreviousTooltip = 1 << 0 // Override will clear/ignore previously submitted tooltip (defaults to append)
856 };
857 
858 // FIXME: this is in development, not exposed/functional as a generic feature yet.
859 // Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
861 {
864 };
865 
867 {
873 };
874 
875 // X/Y enums are fixed to 0/1 so they may be used to index ImVec2
877 {
881 };
882 
884 {
887 };
888 
890 {
895  ImGuiInputSource_Nav, // Stored in g.ActiveIdSource only
896  ImGuiInputSource_Clipboard, // Currently only used by InputText()
898 };
899 
900 // FIXME-NAV: Clarify/expose various repeat delay/rate
902 {
909 };
910 
912 {
916 };
917 
919 {
920  ImU8 Data[8]; // Can fit any data up to ImGuiDataType_COUNT
921 };
922 
923 // Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
925 {
926  size_t Size; // Size in bytes
927  const char* Name; // Short descriptive name for the type, for debugging
928  const char* PrintFmt; // Default printf format for the type
929  const char* ScanFmt; // Default scanf format for the type
930 };
931 
932 // Extend ImGuiDataType_
934 {
938 };
939 
940 // Stacked color modifier, backup of modified data so we can restore it
942 {
945 };
946 
947 // Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable.
949 {
951  union { int BackupInt[2]; float BackupFloat[2]; };
952  ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; }
953  ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; }
954  ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; }
955 };
956 
957 // Storage data for BeginComboPreview()/EndComboPreview()
959 {
966 
967  ImGuiComboPreviewData() { memset(this, 0, sizeof(*this)); }
968 };
969 
970 // Stacked storage data for BeginGroup()/EndGroup()
972 {
983  bool EmitItem;
984 };
985 
986 // Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper.
988 {
992  ImU16 OffsetIcon; // Always zero for now
993  ImU16 OffsetLabel; // Offsets are locked in Update()
996  ImU16 Widths[4]; // Width of: Icon, Label, Shortcut, Mark (accumulators for current frame)
997 
998  ImGuiMenuColumns() { memset(this, 0, sizeof(*this)); }
999  void Update(float spacing, bool window_reappearing);
1000  float DeclColumns(float w_icon, float w_label, float w_shortcut, float w_mark);
1001  void CalcNextTotalWidth(bool update_offsets);
1002 };
1003 
1004 // Internal state of the currently focused/edited text input box
1005 // For a given item ID, access with ImGui::GetInputTextState()
1007 {
1008  ImGuiID ID; // widget id owning the text state
1009  int CurLenW, CurLenA; // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 length is valid even if TextA is not.
1010  ImVector<ImWchar> TextW; // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer.
1011  ImVector<char> TextA; // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity.
1012  ImVector<char> InitialTextA; // backup of end-user buffer at the time of focus (in UTF-8, unaltered)
1013  bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
1014  int BufCapacityA; // end-user buffer capacity
1015  float ScrollX; // horizontal scrolling/offset
1016  ImStb::STB_TexteditState Stb; // state for stb_textedit.h
1017  float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately
1018  bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!)
1019  bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
1020  bool Edited; // edited this frame
1021  ImGuiInputTextFlags Flags; // copy of InputText() flags
1023  void* UserCallbackData; // "
1024 
1025  ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
1026  void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
1027  void ClearFreeMemory() { TextW.clear(); TextA.clear(); InitialTextA.clear(); }
1028  int GetUndoAvailCount() const { return Stb.undostate.undo_point; }
1029  int GetRedoAvailCount() const { return STB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; }
1030  void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation
1031 
1032  // Cursor & Selection
1033  void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
1034  void CursorClamp() { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); }
1035  bool HasSelection() const { return Stb.select_start != Stb.select_end; }
1036  void ClearSelection() { Stb.select_start = Stb.select_end = Stb.cursor; }
1037  int GetCursorPos() const { return Stb.cursor; }
1038  int GetSelectionStart() const { return Stb.select_start; }
1039  int GetSelectionEnd() const { return Stb.select_end; }
1040  void SelectAll() { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; }
1041 };
1042 
1043 // Storage for current popup stack
1045 {
1046  ImGuiID PopupId; // Set on OpenPopup()
1047  ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup()
1048  ImGuiWindow* SourceWindow; // Set on OpenPopup() copy of NavWindow at the time of opening the popup
1049  int OpenFrameCount; // Set on OpenPopup()
1050  ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items)
1051  ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
1052  ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup
1053 
1054  ImGuiPopupData() { memset(this, 0, sizeof(*this)); OpenFrameCount = -1; }
1055 };
1056 
1058 {
1068 };
1069 
1070 // Storage for SetNexWindow** functions
1072 {
1086  float BgAlphaVal; // Override background alpha
1087  ImVec2 MenuBarOffsetMinVal; // (Always on) This is not exposed publicly, so we don't clear it and it doesn't have a corresponding flag (could we? for consistency?)
1088 
1089  ImGuiNextWindowData() { memset(this, 0, sizeof(*this)); }
1091 };
1092 
1094 {
1098 };
1099 
1101 {
1103  float Width; // Set by SetNextItemWidth()
1104  ImGuiID FocusScopeId; // Set by SetNextItemMultiSelectData() (!= 0 signify value has been set, so it's an alternate version of HasSelectionData, we don't use Flags for this because they are cleared too early. This is mostly used for debugging)
1106  bool OpenVal; // Set by SetNextItemOpen()
1107 
1108  ImGuiNextItemData() { memset(this, 0, sizeof(*this)); }
1109  inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; } // Also cleared manually by ItemAdd()!
1110 };
1111 
1112 // Status storage for the last submitted item
1114 {
1116  ImGuiItemFlags InFlags; // See ImGuiItemFlags_
1117  ImGuiItemStatusFlags StatusFlags; // See ImGuiItemStatusFlags_
1118  ImRect Rect; // Full rectangle
1119  ImRect NavRect; // Navigation scoring rectangle (not displayed)
1120  ImRect DisplayRect; // Display rectangle (only if ImGuiItemStatusFlags_HasDisplayRect is set)
1121 
1122  ImGuiLastItemData() { memset(this, 0, sizeof(*this)); }
1123 };
1124 
1126 {
1136 
1137  ImGuiStackSizes() { memset(this, 0, sizeof(*this)); }
1138  void SetToCurrentState();
1139  void CompareWithCurrentState();
1140 };
1141 
1142 // Data saved for each window pushed into the stack
1144 {
1147  ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
1148 };
1149 
1151 {
1152  int Index;
1153  float Width;
1154 };
1155 
1157 {
1158  void* Ptr; // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool.
1159  int Index; // Usually index in a main pool.
1160 
1161  ImGuiPtrOrIndex(void* ptr) { Ptr = ptr; Index = -1; }
1162  ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; }
1163 };
1164 
1165 //-----------------------------------------------------------------------------
1166 // [SECTION] Navigation support
1167 //-----------------------------------------------------------------------------
1168 
1170 {
1172  ImGuiActivateFlags_PreferInput = 1 << 0, // Favor activation that requires keyboard text input (e.g. for Slider/Drag). Default if keyboard is available.
1173  ImGuiActivateFlags_PreferTweak = 1 << 1, // Favor activation for tweaking with arrows or gamepad (e.g. for Slider/Drag). Default if keyboard is not available.
1174  ImGuiActivateFlags_TryToPreserveState = 1 << 2 // Request widget to preserve state if it can (e.g. InputText will try to preserve cursor/selection)
1175 };
1176 
1177 // Early work-in-progress API for ScrollToItem()
1179 {
1181  ImGuiScrollFlags_KeepVisibleEdgeX = 1 << 0, // If item is not visible: scroll as little as possible on X axis to bring item back into view [default for X axis]
1182  ImGuiScrollFlags_KeepVisibleEdgeY = 1 << 1, // If item is not visible: scroll as little as possible on Y axis to bring item back into view [default for Y axis for windows that are already visible]
1183  ImGuiScrollFlags_KeepVisibleCenterX = 1 << 2, // If item is not visible: scroll to make the item centered on X axis [rarely used]
1184  ImGuiScrollFlags_KeepVisibleCenterY = 1 << 3, // If item is not visible: scroll to make the item centered on Y axis
1185  ImGuiScrollFlags_AlwaysCenterX = 1 << 4, // Always center the result item on X axis [rarely used]
1186  ImGuiScrollFlags_AlwaysCenterY = 1 << 5, // Always center the result item on Y axis [default for Y axis for appearing window)
1187  ImGuiScrollFlags_NoScrollParent = 1 << 6, // Disable forwarding scrolling to parent window if required to keep item/rect visible (only scroll window the function was applied to).
1190 };
1191 
1193 {
1197  ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse.
1199 };
1200 
1202 {
1207 };
1208 
1210 {
1212  ImGuiNavMoveFlags_LoopX = 1 << 0, // On failed request, restart from opposite side
1214  ImGuiNavMoveFlags_WrapX = 1 << 2, // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left)
1215  ImGuiNavMoveFlags_WrapY = 1 << 3, // This is not super useful but provided for completeness
1216  ImGuiNavMoveFlags_AllowCurrentNavId = 1 << 4, // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place)
1217  ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, // Store alternate result in NavMoveResultLocalVisible that only comprise elements that are already fully visible (used by PageUp/PageDown)
1218  ImGuiNavMoveFlags_ScrollToEdgeY = 1 << 6, // Force scrolling to min/max (used by Home/End) // FIXME-NAV: Aim to remove or reword, probably unnecessary
1220  ImGuiNavMoveFlags_DebugNoResult = 1 << 8, // Dummy scoring for debug purpose, don't apply result
1221  ImGuiNavMoveFlags_Tabbing = 1 << 9, // == Focus + Activate if item is Inputable + DontChangeNavHighlight
1223  ImGuiNavMoveFlags_DontSetNavHighlight = 1 << 11 // Do not alter the visible state of keyboard vs mouse nav highlight
1224 };
1225 
1227 {
1228  ImGuiNavLayer_Main = 0, // Main scrolling layer
1229  ImGuiNavLayer_Menu = 1, // Menu layer (access with Alt/ImGuiNavInput_Menu)
1231 };
1232 
1234 {
1235  ImGuiWindow* Window; // Init,Move // Best candidate window (result->ItemWindow->RootWindowForNav == request->Window)
1236  ImGuiID ID; // Init,Move // Best candidate item ID
1237  ImGuiID FocusScopeId; // Init,Move // Best candidate focus scope ID
1238  ImRect RectRel; // Init,Move // Best candidate bounding box in window relative space
1239  ImGuiItemFlags InFlags; // ????,Move // Best candidate item flags
1240  float DistBox; // Move // Best candidate box distance to current NavId
1241  float DistCenter; // Move // Best candidate center distance to current NavId
1242  float DistAxial; // Move // Best candidate axial distance to current NavId
1243 
1245  void Clear() { Window = NULL; ID = FocusScopeId = 0; InFlags = 0; DistBox = DistCenter = DistAxial = FLT_MAX; }
1246 };
1247 
1248 //-----------------------------------------------------------------------------
1249 // [SECTION] Columns support
1250 //-----------------------------------------------------------------------------
1251 
1252 // Flags for internal's BeginColumns(). Prefix using BeginTable() nowadays!
1254 {
1256  ImGuiOldColumnFlags_NoBorder = 1 << 0, // Disable column dividers
1257  ImGuiOldColumnFlags_NoResize = 1 << 1, // Disable resizing columns when clicking on the dividers
1258  ImGuiOldColumnFlags_NoPreserveWidths = 1 << 2, // Disable column width preservation when adjusting columns
1259  ImGuiOldColumnFlags_NoForceWithinWindow = 1 << 3, // Disable forcing columns to fit within window
1260  ImGuiOldColumnFlags_GrowParentContentsSize = 1 << 4 // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
1261 
1262  // Obsolete names (will be removed)
1263 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1270 #endif
1271 };
1272 
1274 {
1275  float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
1277  ImGuiOldColumnFlags Flags; // Not exposed
1279 
1280  ImGuiOldColumnData() { memset(this, 0, sizeof(*this)); }
1281 };
1282 
1284 {
1289  int Current;
1290  int Count;
1291  float OffMinX, OffMaxX; // Offsets from HostWorkRect.Min.x
1293  float HostCursorPosY; // Backup of CursorPos at the time of BeginColumns()
1294  float HostCursorMaxPosX; // Backup of CursorMaxPos at the time of BeginColumns()
1295  ImRect HostInitialClipRect; // Backup of ClipRect at the time of BeginColumns()
1296  ImRect HostBackupClipRect; // Backup of ClipRect during PushColumnsBackground()/PopColumnsBackground()
1297  ImRect HostBackupParentWorkRect;//Backup of WorkRect at the time of BeginColumns()
1300 
1301  ImGuiOldColumns() { memset(this, 0, sizeof(*this)); }
1302 };
1303 
1304 //-----------------------------------------------------------------------------
1305 // [SECTION] Multi-select support
1306 //-----------------------------------------------------------------------------
1307 
1308 #ifdef IMGUI_HAS_MULTI_SELECT
1309 // <this is filled in 'range_select' branch>
1310 #endif // #ifdef IMGUI_HAS_MULTI_SELECT
1311 
1312 //-----------------------------------------------------------------------------
1313 // [SECTION] Docking support
1314 //-----------------------------------------------------------------------------
1315 
1316 #ifdef IMGUI_HAS_DOCK
1317 // <this is filled in 'docking' branch>
1318 #endif // #ifdef IMGUI_HAS_DOCK
1319 
1320 //-----------------------------------------------------------------------------
1321 // [SECTION] Viewport support
1322 //-----------------------------------------------------------------------------
1323 
1324 // ImGuiViewport Private/Internals fields (cardinal sin: we are using inheritance!)
1325 // Every instance of ImGuiViewport is in fact a ImGuiViewportP.
1327 {
1328  int DrawListsLastFrame[2]; // Last frame number the background (0) and foreground (1) draw lists were used
1329  ImDrawList* DrawLists[2]; // Convenience background (0) and foreground (1) draw lists. We use them to draw software mouser cursor when io.MouseDrawCursor is set and to draw most debug overlays.
1332 
1333  ImVec2 WorkOffsetMin; // Work Area: Offset from Pos to top-left corner of Work Area. Generally (0,0) or (0,+main_menu_bar_height). Work Area is Full Area but without menu-bars/status-bars (so WorkArea always fit inside Pos/Size!)
1334  ImVec2 WorkOffsetMax; // Work Area: Offset from Pos+Size to bottom-right corner of Work Area. Generally (0,0) or (0,-status_bar_height).
1335  ImVec2 BuildWorkOffsetMin; // Work Area: Offset being built during current frame. Generally >= 0.0f.
1336  ImVec2 BuildWorkOffsetMax; // Work Area: Offset being built during current frame. Generally <= 0.0f.
1337 
1340 
1341  // Calculate work rect pos/size given a set of offset (we have 1 pair of offset for rect locked from last frame data, and 1 pair for currently building rect)
1342  ImVec2 CalcWorkRectPos(const ImVec2& off_min) const { return ImVec2(Pos.x + off_min.x, Pos.y + off_min.y); }
1343  ImVec2 CalcWorkRectSize(const ImVec2& off_min, const ImVec2& off_max) const { return ImVec2(ImMax(0.0f, Size.x - off_min.x + off_max.x), ImMax(0.0f, Size.y - off_min.y + off_max.y)); }
1345 
1346  // Helpers to retrieve ImRect (we don't need to store BuildWorkRect as every access tend to change it, hence the code asymmetry)
1347  ImRect GetMainRect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
1350 };
1351 
1352 //-----------------------------------------------------------------------------
1353 // [SECTION] Settings support
1354 //-----------------------------------------------------------------------------
1355 
1356 // Windows data saved in imgui.ini file
1357 // Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily.
1358 // (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure)
1360 {
1365  bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
1366 
1367  ImGuiWindowSettings() { memset(this, 0, sizeof(*this)); }
1368  char* GetName() { return (char*)(this + 1); }
1369 };
1370 
1372 {
1373  const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']'
1374  ImGuiID TypeHash; // == ImHashStr(TypeName)
1375  void (*ClearAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Clear all settings data
1376  void (*ReadInitFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called before reading (in registration order)
1377  void* (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name); // Read: Called when entering into a new ini entry e.g. "[Window][Name]"
1378  void (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry
1379  void (*ApplyAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called after reading (in registration order)
1380  void (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf); // Write: Output every entries into 'out_buf'
1381  void* UserData;
1382 
1383  ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
1384 };
1385 
1386 //-----------------------------------------------------------------------------
1387 // [SECTION] Metrics, Debug Tools
1388 //-----------------------------------------------------------------------------
1389 
1391 {
1400 
1402  {
1403  ShowStackTool = false;
1404  ShowWindowsRects = false;
1405  ShowWindowsBeginOrder = false;
1406  ShowTablesRects = false;
1407  ShowDrawCmdMesh = true;
1408  ShowDrawCmdBoundingBoxes = true;
1409  ShowWindowsRectsType = -1;
1410  ShowTablesRectsType = -1;
1411  }
1412 };
1413 
1415 {
1417  ImS8 QueryFrameCount; // >= 1: Query in progress
1418  bool QuerySuccess; // Obtained result from DebugHookIdInfo()
1419  char Desc[58]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?)
1420 
1421  ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); }
1422 };
1423 
1424 // State for Stack tool queries
1426 {
1428  int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level
1429  ImGuiID QueryId; // ID to query details for
1431 
1432  ImGuiStackTool() { memset(this, 0, sizeof(*this)); }
1433 };
1434 
1435 //-----------------------------------------------------------------------------
1436 // [SECTION] Generic context hooks
1437 //-----------------------------------------------------------------------------
1438 
1441 
1443 {
1444  ImGuiID HookId; // A unique ID assigned by AddContextHook()
1448  void* UserData;
1449 
1450  ImGuiContextHook() { memset(this, 0, sizeof(*this)); }
1451 };
1452 
1453 //-----------------------------------------------------------------------------
1454 // [SECTION] ImGuiContext (main imgui context)
1455 //-----------------------------------------------------------------------------
1456 
1458 {
1460  bool FontAtlasOwnedByContext; // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it.
1463  ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
1464  float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
1465  float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
1467  double Time;
1471  bool WithinFrameScope; // Set by NewFrame(), cleared by EndFrame()
1472  bool WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed
1473  bool WithinEndChild; // Set within EndChild()
1474  bool GcCompactAll; // Request full GC
1475  bool TestEngineHookItems; // Will call test engine hooks: ImGuiTestEngineHook_ItemAdd(), ImGuiTestEngineHook_ItemInfo(), ImGuiTestEngineHook_Log()
1476  void* TestEngine; // Test engine user data
1477 
1478  // Windows state
1479  ImVector<ImGuiWindow*> Windows; // Windows, sorted in display order, back to front
1480  ImVector<ImGuiWindow*> WindowsFocusOrder; // Root windows, sorted in focus order, back to front.
1481  ImVector<ImGuiWindow*> WindowsTempSortBuffer; // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child
1483  ImGuiStorage WindowsById; // Map window's ImGuiID to ImGuiWindow*
1484  int WindowsActiveCount; // Number of unique windows submitted by frame
1485  ImVec2 WindowsHoverPadding; // Padding around resizable windows for which hovering on counts as hovering the window == ImMax(style.TouchExtraPadding, WINDOWS_HOVER_PADDING)
1486  ImGuiWindow* CurrentWindow; // Window being drawn into
1487  ImGuiWindow* HoveredWindow; // Window the mouse is hovering. Will typically catch mouse inputs.
1488  ImGuiWindow* HoveredWindowUnderMovingWindow; // Hovered window ignoring MovingWindow. Only set if MovingWindow is set.
1489  ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actual window that is moved is generally MovingWindow->RootWindow.
1490  ImGuiWindow* WheelingWindow; // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window.
1493 
1494  // Item/widgets state and tracking information
1495  ImGuiID DebugHookIdInfo; // Will call core hooks: DebugHookIdInfo() from GetID functions, used by Stack Tool [next HoveredId/ActiveId to not pull in an extra cache-line]
1496  ImGuiID HoveredId; // Hovered widget, filled during the frame
1499  bool HoveredIdUsingMouseWheel; // Hovered widget will use mouse wheel. Blocks scrolling the underlying window.
1501  bool HoveredIdDisabled; // At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0.
1502  float HoveredIdTimer; // Measure contiguous hovering time
1503  float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active
1504  ImGuiID ActiveId; // Active widget
1505  ImGuiID ActiveIdIsAlive; // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
1507  bool ActiveIdIsJustActivated; // Set at the time of activation for one frame
1508  bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
1509  bool ActiveIdNoClearOnFocusLoss; // Disable losing active id if the active id window gets unfocused.
1510  bool ActiveIdHasBeenPressedBefore; // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch.
1511  bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state.
1513  bool ActiveIdUsingMouseWheel; // Active widget will want to read mouse wheel. Blocks scrolling the underlying window.
1514  ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it)
1515  ImU32 ActiveIdUsingNavInputMask; // Active widget will want to read those nav inputs.
1516  ImU64 ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
1517  ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
1519  ImGuiInputSource ActiveIdSource; // Activating with mouse or nav (gamepad/keyboard)
1525  ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation.
1526  float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
1527 
1528  // Next window/item data
1529  ImGuiItemFlags CurrentItemFlags; // == g.ItemFlagsStack.back()
1530  ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions
1531  ImGuiLastItemData LastItemData; // Storage for last submitted item (setup by ItemAdd)
1532  ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
1533 
1534  // Shared stacks
1535  ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
1536  ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
1537  ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
1538  ImVector<ImGuiID> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - not inherited by Begin(), unless child window
1539  ImVector<ImGuiItemFlags>ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
1540  ImVector<ImGuiGroupData>GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
1541  ImVector<ImGuiPopupData>OpenPopupStack; // Which popups are open (persistent)
1542  ImVector<ImGuiPopupData>BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame)
1543 
1544  // Viewports
1545  ImVector<ImGuiViewportP*> Viewports; // Active viewports (Size==1 in 'master' branch). Each viewports hold their copy of ImDrawData.
1546 
1547  // Gamepad/keyboard Navigation
1548  ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusWindow'
1549  ImGuiID NavId; // Focused item for navigation
1550  ImGuiID NavFocusScopeId; // Identify a selection scope (selection code often wants to "clear other items" when landing on an item of the selection set)
1551  ImGuiID NavActivateId; // ~~ (g.ActiveId == 0) && IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0, also set when calling ActivateItem()
1552  ImGuiID NavActivateDownId; // ~~ IsNavInputDown(ImGuiNavInput_Activate) ? NavId : 0
1553  ImGuiID NavActivatePressedId; // ~~ IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0
1554  ImGuiID NavActivateInputId; // ~~ IsNavInputPressed(ImGuiNavInput_Input) ? NavId : 0; ImGuiActivateFlags_PreferInput will be set and NavActivateId will be 0.
1556  ImGuiID NavJustTabbedId; // Just tabbed to this id.
1557  ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest).
1558  ImGuiID NavJustMovedToFocusScopeId; // Just navigated to this focus scope id (result of a successfully MoveRequest).
1560  ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame.
1562  ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard.
1563  ImGuiNavLayer NavLayer; // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later.
1564  int NavIdTabCounter; // == NavWindow->DC.FocusIdxTabCounter at time of NavId processing
1565  bool NavIdIsAlive; // Nav widget has been seen this frame ~~ NavRectRel is valid
1566  bool NavMousePosDirty; // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default)
1567  bool NavDisableHighlight; // When user starts using mouse, we hide gamepad/keyboard highlight (NB: but they are still available, which is why NavDisableHighlight isn't always != NavDisableMouseHover)
1568  bool NavDisableMouseHover; // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again.
1569 
1570  // Navigation: Init & Move Requests
1571  bool NavAnyRequest; // ~~ NavMoveRequest || NavInitRequest this is to perform early out in ItemAdd()
1572  bool NavInitRequest; // Init request for appearing window to select first item
1574  ImGuiID NavInitResultId; // Init request result (first item of the window, or one for which SetItemDefaultFocus() was called)
1575  ImRect NavInitResultRectRel; // Init request result rectangle (relative to parent window)
1576  bool NavMoveSubmitted; // Move request submitted, will process result on next NewFrame()
1577  bool NavMoveScoringItems; // Move request submitted, still scoring incoming items
1582  ImGuiDir NavMoveDir; // Direction of the move request (left/right/up/down)
1584  ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename?
1585  ImRect NavScoringRect; // Rectangle used for scoring, in screen space. Based of window->NavRectRel[], modified for directional navigation scoring.
1586  int NavScoringDebugCount; // Metrics for debugging
1587  int NavTabbingInputableRemaining; // >0 when counting items for tabbing
1588  ImGuiNavItemData NavMoveResultLocal; // Best move request candidate within NavWindow
1589  ImGuiNavItemData NavMoveResultLocalVisible; // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
1590  ImGuiNavItemData NavMoveResultOther; // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
1591 
1592  // Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
1593  ImGuiWindow* NavWindowingTarget; // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most!
1594  ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f, so the fade-out can stay on it.
1595  ImGuiWindow* NavWindowingListWindow; // Internal window actually listing the CTRL+Tab contents
1599 
1600  // Legacy Focus/Tabbing system (older than Nav, active even if Nav is disabled, misnamed. FIXME-NAV: This needs a redesign!)
1603  int TabFocusRequestCurrCounterTabStop; // Tab item being requested for focus, stored as an index
1605  bool TabFocusPressed; // Set in NewFrame() when user pressed Tab
1606 
1607  // Render
1608  float DimBgRatio; // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list)
1610 
1611  // Drag and Drop
1613  bool DragDropWithinSource; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source.
1614  bool DragDropWithinTarget; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target.
1619  ImRect DragDropTargetRect; // Store rectangle of current target candidate (we favor small targets when overlapping)
1622  float DragDropAcceptIdCurrRectSurface; // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
1623  ImGuiID DragDropAcceptIdCurr; // Target item id (set at the time of accepting the payload)
1624  ImGuiID DragDropAcceptIdPrev; // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
1625  int DragDropAcceptFrameCount; // Last time a target expressed a desire to accept the source
1626  ImGuiID DragDropHoldJustPressedId; // Set when holding a payload just made ButtonBehavior() return a press.
1627  ImVector<unsigned char> DragDropPayloadBufHeap; // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size
1628  unsigned char DragDropPayloadBufLocal[16]; // Local buffer for small payloads
1629 
1630  // Table
1635  ImVector<float> TablesLastTimeActive; // Last used timestamp of each tables (SOA, for efficient GC)
1637 
1638  // Tab bars
1643 
1644  // Widget state
1648  ImGuiID TempInputId; // Temporary text input when CTRL+clicking on a slider, etc.
1649  ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets
1650  float ColorEditLastHue; // Backup of last Hue associated to LastColor, so we can restore Hue in lossy RGB<>HSV round trips
1651  float ColorEditLastSat; // Backup of last Saturation associated to LastColor, so we can restore Saturation in lossy RGB<>HSV round trips
1652  ImU32 ColorEditLastColor; // RGB value with alpha set to 0.
1653  ImVec4 ColorPickerRef; // Initial/reference color at the time of opening the color picker.
1655  float SliderCurrentAccum; // Accumulated slider delta when using navigation controls.
1656  bool SliderCurrentAccumDirty; // Has the accumulated slider delta changed since last time we tried to apply it?
1658  float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
1659  float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
1660  float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
1661  float DisabledAlphaBackup; // Backup for style.Alpha for BeginDisabled()
1664  float TooltipSlowDelay; // Time before slow tooltips appears (FIXME: This is temporary until we merge in tooltip timer+priority work)
1665  ImVector<char> ClipboardHandlerData; // If no custom clipboard handler is defined
1666  ImVector<ImGuiID> MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once
1667 
1668  // Platform support
1669  ImVec2 PlatformImePos; // Cursor position request & last passed to the OS Input Method Editor
1671  char PlatformLocaleDecimalPoint; // '.' or *localeconv()->decimal_point
1672 
1673  // Settings
1675  float SettingsDirtyTimer; // Save .ini Settings to memory when time reaches zero
1676  ImGuiTextBuffer SettingsIniData; // In memory .ini settings
1677  ImVector<ImGuiSettingsHandler> SettingsHandlers; // List of .ini settings handlers
1678  ImChunkStream<ImGuiWindowSettings> SettingsWindows; // ImGuiWindow .ini settings entries
1679  ImChunkStream<ImGuiTableSettings> SettingsTables; // ImGuiTable .ini settings entries
1680  ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
1681  ImGuiID HookIdNext; // Next available HookId
1682 
1683  // Capture/Logging
1684  bool LogEnabled; // Currently capturing
1685  ImGuiLogType LogType; // Capture target
1686  ImFileHandle LogFile; // If != NULL log to stdout/ file
1687  ImGuiTextBuffer LogBuffer; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
1688  const char* LogNextPrefix;
1689  const char* LogNextSuffix;
1694  int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
1695 
1696  // Debug Tools
1697  bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
1698  ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
1701 
1702  // Misc
1703  float FramerateSecPerFrame[120]; // Calculate estimate of framerate for user over the last 2 seconds.
1707  int WantCaptureMouseNextFrame; // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags
1710  char TempBuffer[1024 * 3 + 1]; // Temporary text buffer
1711 
1712  ImGuiContext(ImFontAtlas* shared_font_atlas)
1713  {
1714  Initialized = false;
1715  FontAtlasOwnedByContext = shared_font_atlas ? false : true;
1716  Font = NULL;
1717  FontSize = FontBaseSize = 0.0f;
1718  IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
1719  Time = 0.0f;
1720  FrameCount = 0;
1723  GcCompactAll = false;
1724  TestEngineHookItems = false;
1725  TestEngine = NULL;
1726 
1727  WindowsActiveCount = 0;
1728  CurrentWindow = NULL;
1729  HoveredWindow = NULL;
1731  MovingWindow = NULL;
1732  WheelingWindow = NULL;
1733  WheelingWindowTimer = 0.0f;
1734 
1735  DebugHookIdInfo = 0;
1737  HoveredIdAllowOverlap = false;
1739  HoveredIdDisabled = false;
1741  ActiveId = 0;
1742  ActiveIdIsAlive = 0;
1743  ActiveIdTimer = 0.0f;
1744  ActiveIdIsJustActivated = false;
1745  ActiveIdAllowOverlap = false;
1750  ActiveIdUsingMouseWheel = false;
1751  ActiveIdUsingNavDirMask = 0x00;
1754  ActiveIdClickOffset = ImVec2(-1, -1);
1755  ActiveIdWindow = NULL;
1757  ActiveIdMouseButton = -1;
1762  LastActiveId = 0;
1763  LastActiveIdTimer = 0.0f;
1764 
1766 
1767  NavWindow = NULL;
1774  NavIdTabCounter = INT_MAX;
1775  NavIdIsAlive = false;
1776  NavMousePosDirty = false;
1777  NavDisableHighlight = true;
1778  NavDisableMouseHover = false;
1779  NavAnyRequest = false;
1780  NavInitRequest = false;
1781  NavInitRequestFromMove = false;
1782  NavInitResultId = 0;
1783  NavMoveSubmitted = false;
1784  NavMoveScoringItems = false;
1785  NavMoveForwardToNextFrame = false;
1792 
1795  NavWindowingToggleLayer = false;
1796 
1800  TabFocusPressed = false;
1801 
1802  DimBgRatio = 0.0f;
1804 
1808  DragDropMouseButton = -1;
1809  DragDropTargetId = 0;
1816 
1817  CurrentTable = NULL;
1818  CurrentTableStackIdx = -1;
1819  CurrentTabBar = NULL;
1820 
1821  TempInputId = 0;
1824  ColorEditLastColor = 0;
1825  SliderCurrentAccum = 0.0f;
1826  SliderCurrentAccumDirty = false;
1827  DragCurrentAccumDirty = false;
1828  DragCurrentAccum = 0.0f;
1829  DragSpeedDefaultRatio = 1.0f / 100.0f;
1830  DisabledAlphaBackup = 0.0f;
1831  DisabledStackSize = 0;
1834  TooltipSlowDelay = 0.50f;
1835 
1836  PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX);
1838 
1839  SettingsLoaded = false;
1840  SettingsDirtyTimer = 0.0f;
1841  HookIdNext = 0;
1842 
1843  LogEnabled = false;
1845  LogNextPrefix = LogNextSuffix = NULL;
1846  LogFile = NULL;
1847  LogLinePosY = FLT_MAX;
1848  LogLineFirstItem = false;
1849  LogDepthRef = 0;
1851 
1852  DebugItemPickerActive = false;
1854 
1855  memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
1859  memset(TempBuffer, 0, sizeof(TempBuffer));
1860  }
1861 };
1862 
1863 //-----------------------------------------------------------------------------
1864 // [SECTION] ImGuiWindowTempData, ImGuiWindow
1865 //-----------------------------------------------------------------------------
1866 
1867 // Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow.
1868 // (That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered..)
1869 // (This doesn't need a constructor because we zero-clear it as part of ImGuiWindow and all frame-temporary data are setup on Begin)
1871 {
1872  // Layout
1873  ImVec2 CursorPos; // Current emitting position, in absolute coordinates.
1875  ImVec2 CursorStartPos; // Initial position after Begin(), generally ~ window position + WindowPadding.
1876  ImVec2 CursorMaxPos; // Used to implicitly calculate ContentSize at the beginning of next frame, for scrolling range and auto-resize. Always growing during the frame.
1877  ImVec2 IdealMaxPos; // Used to implicitly calculate ContentSizeIdeal at the beginning of next frame, for auto-resize only. Always growing during the frame.
1880  float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
1882  ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
1883  ImVec1 ColumnsOffset; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
1885 
1886  // Keyboard/Gamepad navigation
1887  ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
1888  short NavLayersActiveMask; // Which layers have been written to (result from previous frame)
1889  short NavLayersActiveMaskNext;// Which layers have been written to (accumulator for current frame)
1890  ImGuiID NavFocusScopeIdCurrent; // Current focus scope ID while appending
1892  bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f)
1893 
1894  // Miscellaneous
1895  bool MenuBarAppending; // FIXME: Remove this
1896  ImVec2 MenuBarOffset; // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs.
1897  ImGuiMenuColumns MenuColumns; // Simplified columns storage for menu items measurement
1898  int TreeDepth; // Current tree depth.
1899  ImU32 TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
1901  ImGuiStorage* StateStorage; // Current persistent per-window storage (store e.g. tree node open/close state)
1902  ImGuiOldColumns* CurrentColumns; // Current columns set
1903  int CurrentTableIdx; // Current table index (into g.Tables)
1905  ImGuiLayoutType ParentLayoutType; // Layout type of parent window at the time of Begin()
1906  int FocusCounterTabStop; // (Legacy Focus/Tabbing system) Same, but only count widgets which you can Tab through.
1907 
1908  // Local parameters stacks
1909  // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
1910  float ItemWidth; // Current item width (>0.0: width in pixels, <0.0: align xx pixels to the right of window).
1911  float TextWrapPos; // Current text wrap pos.
1912  ImVector<float> ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth)
1913  ImVector<float> TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos)
1914 };
1915 
1916 // Storage for one window
1918 {
1919  char* Name; // Window name, owned by the window.
1920  ImGuiID ID; // == ImHashStr(Name)
1921  ImGuiWindowFlags Flags; // See enum ImGuiWindowFlags_
1922  ImVec2 Pos; // Position (always rounded-up to nearest pixel)
1923  ImVec2 Size; // Current size (==SizeFull or collapsed title bar size)
1924  ImVec2 SizeFull; // Size when non collapsed
1925  ImVec2 ContentSize; // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding.
1927  ImVec2 ContentSizeExplicit; // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize().
1928  ImVec2 WindowPadding; // Window padding at the time of Begin().
1929  float WindowRounding; // Window rounding at the time of Begin(). May be clamped lower to avoid rendering artifacts with title bar, menu bar etc.
1930  float WindowBorderSize; // Window border size at the time of Begin().
1931  int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)!
1932  ImGuiID MoveId; // == window->GetID("#MOVE")
1933  ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window)
1936  ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
1937  ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
1938  ImVec2 ScrollTargetEdgeSnapDist; // 0.0f = no snapping, >0.0f snapping threshold
1939  ImVec2 ScrollbarSizes; // Size taken by each scrollbars on their smaller axis. Pay attention! ScrollbarSizes.x == width of the vertical scrollbar, ScrollbarSizes.y = height of the horizontal scrollbar.
1940  bool ScrollbarX, ScrollbarY; // Are scrollbars visible?
1941  bool Active; // Set to true on Begin(), unless Collapsed
1943  bool WriteAccessed; // Set to true when any widget access the current window
1944  bool Collapsed; // Set when collapsing window to become only title-bar
1946  bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed)
1947  bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
1948  bool Hidden; // Do not display (== HiddenFrames*** > 0)
1949  bool IsFallbackWindow; // Set on the "Debug##Default" window.
1950  bool HasCloseButton; // Set when the window has a close button (p_open != NULL)
1951  signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3)
1952  short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
1953  short BeginOrderWithinParent; // Begin() order within immediate parent window, if we are a child window. Otherwise 0.
1954  short BeginOrderWithinContext; // Begin() order within entire imgui context. This is mostly used for debugging submission order related issues.
1955  short FocusOrder; // Order within WindowsFocusOrder[], altered when windows are focused.
1956  ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
1957  ImS8 AutoFitFramesX, AutoFitFramesY;
1961  ImS8 HiddenFramesCanSkipItems; // Hide the window for N frames
1962  ImS8 HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size
1963  ImS8 HiddenFramesForRenderOnly; // Hide the window until frame N at Render() time only
1964  ImS8 DisableInputsFrames; // Disable window interactions for N frames
1965  ImGuiCond SetWindowPosAllowFlags : 8; // store acceptable condition flags for SetNextWindowPos() use.
1966  ImGuiCond SetWindowSizeAllowFlags : 8; // store acceptable condition flags for SetNextWindowSize() use.
1967  ImGuiCond SetWindowCollapsedAllowFlags : 8; // store acceptable condition flags for SetNextWindowCollapsed() use.
1968  ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
1969  ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0, 0) when positioning from top-left corner; ImVec2(0.5f, 0.5f) for centering; ImVec2(1, 1) for bottom right.
1970 
1971  ImVector<ImGuiID> IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure)
1972  ImGuiWindowTempData DC; // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
1973 
1974  // The best way to understand what those rectangles are is to use the 'Metrics->Tools->Show Windows Rectangles' viewer.
1975  // The main 'OuterRect', omitted as a field, is window->Rect().
1976  ImRect OuterRectClipped; // == Window->Rect() just after setup in Begin(). == window->Rect() for root window.
1977  ImRect InnerRect; // Inner rectangle (omit title bar, menu bar, scroll bar)
1978  ImRect InnerClipRect; // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect.
1979  ImRect WorkRect; // Initially covers the whole scrolling region. Reduced by containers e.g columns/tables when active. Shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentRegionRect over time (from 1.71+ onward).
1980  ImRect ParentWorkRect; // Backup of WorkRect before entering a container such as columns/tables. Used by e.g. SpanAllColumns functions to easily access. Stacked containers are responsible for maintaining this. // FIXME-WORKRECT: Could be a stack?
1981  ImRect ClipRect; // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back().
1982  ImRect ContentRegionRect; // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on.
1983  ImVec2ih HitTestHoleSize; // Define an optional rectangular hole where mouse will pass-through the window.
1985 
1986  int LastFrameActive; // Last frame number the window was Active.
1987  float LastTimeActive; // Last timestamp the window was Active (using float as we don't need high precision there)
1991  float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale()
1992  int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
1993 
1994  ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
1996  ImGuiWindow* ParentWindow; // If we are a child _or_ popup _or_ docked window, this is pointing to our parent. Otherwise NULL.
1997  ImGuiWindow* RootWindow; // Point to ourself or first ancestor that is not a child window. Doesn't cross through popups/dock nodes.
1998  ImGuiWindow* RootWindowPopupTree; // Point to ourself or first ancestor that is not a child window. Cross through popups parent<>child.
1999  ImGuiWindow* RootWindowForTitleBarHighlight; // Point to ourself or first ancestor which will display TitleBgActive color when this window is active.
2000  ImGuiWindow* RootWindowForNav; // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
2001 
2002  ImGuiWindow* NavLastChildNavWindow; // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.)
2003  ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1)
2004  ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space
2005 
2006  int MemoryDrawListIdxCapacity; // Backup of last idx/vtx count, so when waking up the window we can preallocate and avoid iterative alloc/copy
2008  bool MemoryCompacted; // Set when window extraneous data have been garbage collected
2009 
2010 public:
2011  ImGuiWindow(ImGuiContext* context, const char* name);
2012  ~ImGuiWindow();
2013 
2014  ImGuiID GetID(const char* str, const char* str_end = NULL);
2015  ImGuiID GetID(const void* ptr);
2016  ImGuiID GetID(int n);
2017  ImGuiID GetIDNoKeepAlive(const char* str, const char* str_end = NULL);
2018  ImGuiID GetIDNoKeepAlive(const void* ptr);
2019  ImGuiID GetIDNoKeepAlive(int n);
2020  ImGuiID GetIDFromRectangle(const ImRect& r_abs);
2021 
2022  // We don't use g.FontSize because the window may be != g.CurrentWidow.
2023  ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
2024  float CalcFontSize() const { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; }
2025  float TitleBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; }
2026  ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
2027  float MenuBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; }
2028  ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
2029 };
2030 
2031 //-----------------------------------------------------------------------------
2032 // [SECTION] Tab bar, Tab item support
2033 //-----------------------------------------------------------------------------
2034 
2035 // Extend ImGuiTabBarFlags_
2037 {
2038  ImGuiTabBarFlags_DockNode = 1 << 20, // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around]
2040  ImGuiTabBarFlags_SaveSettings = 1 << 22 // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs
2041 };
2042 
2043 // Extend ImGuiTabItemFlags_
2045 {
2047  ImGuiTabItemFlags_NoCloseButton = 1 << 20, // Track whether p_open was set or not (we'll need this info on the next frame to recompute ContentWidth during layout)
2048  ImGuiTabItemFlags_Button = 1 << 21 // Used by TabItemButton, change the tab item behavior to mimic a button
2049 };
2050 
2051 // Storage for one active tab item (sizeof() 40 bytes)
2053 {
2057  int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance
2058  float Offset; // Position relative to beginning of tab
2059  float Width; // Width currently displayed
2060  float ContentWidth; // Width of label, stored during BeginTabItem() call
2061  ImS32 NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
2062  ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable
2063  ImS16 IndexDuringLayout; // Index only used during TabBarLayout()
2064  bool WantClose; // Marked as closed by SetTabItemClosed()
2065 
2066  ImGuiTabItem() { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; }
2067 };
2068 
2069 // Storage for a tab bar (sizeof() 152 bytes)
2071 {
2074  ImGuiID ID; // Zero for tab-bars used by docking
2075  ImGuiID SelectedTabId; // Selected tab/window
2076  ImGuiID NextSelectedTabId; // Next selected tab/window. Will also trigger a scrolling animation
2077  ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview)
2082  float PrevTabsContentsHeight; // Record the height of contents submitted below the tab bar
2083  float WidthAllTabs; // Actual width of all tabs (locked during layout)
2084  float WidthAllTabsIdeal; // Ideal width if all tabs were visible and not clipped
2096  bool TabsAddedNew; // Set to true when a new tab item or button has been added to the tab bar during last frame
2097  ImS16 TabsActiveCount; // Number of tabs submitted this frame.
2098  ImS16 LastTabItemIdx; // Index of last BeginTabItem() tab for use by EndTabItem()
2100  ImVec2 FramePadding; // style.FramePadding locked at the time of BeginTabBar()
2102  ImGuiTextBuffer TabsNames; // For non-docking tab bar we re-append names in a contiguous buffer.
2103 
2104  ImGuiTabBar();
2105  int GetTabOrder(const ImGuiTabItem* tab) const { return Tabs.index_from_ptr(tab); }
2106  const char* GetTabName(const ImGuiTabItem* tab) const
2107  {
2108  IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size);
2109  return TabsNames.Buf.Data + tab->NameOffset;
2110  }
2111 };
2112 
2113 //-----------------------------------------------------------------------------
2114 // [SECTION] Table support
2115 //-----------------------------------------------------------------------------
2116 
2117 #define IM_COL32_DISABLE IM_COL32(0,0,0,1) // Special sentinel code which cannot be used as a regular color.
2118 #define IMGUI_TABLE_MAX_COLUMNS 64 // sizeof(ImU64) * 8. This is solely because we frequently encode columns set in a ImU64.
2119 #define IMGUI_TABLE_MAX_DRAW_CHANNELS (4 + 64 * 2) // See TableSetupDrawChannels()
2120 
2121 // Our current column maximum is 64 but we may raise that in the future.
2124 
2125 // [Internal] sizeof() ~ 104
2126 // We use the terminology "Enabled" to refer to a column that is not Hidden by user/api.
2127 // We use the terminology "Clipped" to refer to a column that is out of sight because of scrolling/clipping.
2128 // This is in contrast with some user-facing api such as IsItemVisible() / IsRectVisible() which use "Visible" to mean "not clipped".
2130 {
2131  ImGuiTableColumnFlags Flags; // Flags after some patching (not directly same as provided by user). See ImGuiTableColumnFlags_
2132  float WidthGiven; // Final/actual width visible == (MaxX - MinX), locked in TableUpdateLayout(). May be > WidthRequest to honor minimum width, may be < WidthRequest to honor shrinking columns down in tight space.
2133  float MinX; // Absolute positions
2134  float MaxX;
2135  float WidthRequest; // Master width absolute value when !(Flags & _WidthStretch). When Stretch this is derived every frame from StretchWeight in TableUpdateLayout()
2136  float WidthAuto; // Automatic width
2137  float StretchWeight; // Master width weight when (Flags & _WidthStretch). Often around ~1.0f initially.
2138  float InitStretchWeightOrWidth; // Value passed to TableSetupColumn(). For Width it is a content width (_without padding_).
2139  ImRect ClipRect; // Clipping rectangle for the column
2140  ImGuiID UserID; // Optional, value passed to TableSetupColumn()
2141  float WorkMinX; // Contents region min ~(MinX + CellPaddingX + CellSpacingX1) == cursor start position when entering column
2142  float WorkMaxX; // Contents region max ~(MaxX - CellPaddingX - CellSpacingX2)
2143  float ItemWidth; // Current item width for the column, preserved across rows
2144  float ContentMaxXFrozen; // Contents maximum position for frozen rows (apart from headers), from which we can infer content width.
2146  float ContentMaxXHeadersUsed; // Contents maximum position for headers rows (regardless of freezing). TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls
2148  ImS16 NameOffset; // Offset into parent ColumnsNames[]
2149  ImGuiTableColumnIdx DisplayOrder; // Index within Table's IndexToDisplayOrder[] (column may be reordered by users)
2150  ImGuiTableColumnIdx IndexWithinEnabledSet; // Index within enabled/visible set (<= IndexToDisplayOrder)
2151  ImGuiTableColumnIdx PrevEnabledColumn; // Index of prev enabled/visible column within Columns[], -1 if first enabled/visible column
2152  ImGuiTableColumnIdx NextEnabledColumn; // Index of next enabled/visible column within Columns[], -1 if last enabled/visible column
2153  ImGuiTableColumnIdx SortOrder; // Index of this column within sort specs, -1 if not sorting on this column, 0 for single-sort, may be >0 on multi-sort
2154  ImGuiTableDrawChannelIdx DrawChannelCurrent; // Index within DrawSplitter.Channels[]
2155  ImGuiTableDrawChannelIdx DrawChannelFrozen; // Draw channels for frozen rows (often headers)
2156  ImGuiTableDrawChannelIdx DrawChannelUnfrozen; // Draw channels for unfrozen rows
2157  bool IsEnabled; // IsUserEnabled && (Flags & ImGuiTableColumnFlags_Disabled) == 0
2158  bool IsUserEnabled; // Is the column not marked Hidden by the user? (unrelated to being off view, e.g. clipped by scrolling).
2160  bool IsVisibleX; // Is actually in view (e.g. overlapping the host window clipping rectangle, not scrolled).
2162  bool IsRequestOutput; // Return value for TableSetColumnIndex() / TableNextColumn(): whether we request user to output contents or not.
2163  bool IsSkipItems; // Do we want item submissions to this column to be completely ignored (no layout will happen).
2165  ImS8 NavLayerCurrent; // ImGuiNavLayer in 1 byte
2166  ImU8 AutoFitQueue; // Queue of 8 values for the next 8 frames to request auto-fit
2167  ImU8 CannotSkipItemsQueue; // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem
2168  ImU8 SortDirection : 2; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending
2169  ImU8 SortDirectionsAvailCount : 2; // Number of available sort directions (0 to 3)
2170  ImU8 SortDirectionsAvailMask : 4; // Mask of available sort directions (1-bit each)
2171  ImU8 SortDirectionsAvailList; // Ordered of available sort directions (2-bits each)
2172 
2174  {
2175  memset(this, 0, sizeof(*this));
2176  StretchWeight = WidthRequest = -1.0f;
2177  NameOffset = -1;
2180  SortOrder = -1;
2183  }
2184 };
2185 
2186 // Transient cell data stored per row.
2187 // sizeof() ~ 6
2189 {
2190  ImU32 BgColor; // Actual color
2191  ImGuiTableColumnIdx Column; // Column number
2192 };
2193 
2194 // FIXME-TABLE: more transient data could be stored in a per-stacked table structure: DrawSplitter, SortSpecs, incoming RowData
2196 {
2199  void* RawData; // Single allocation to hold Columns[], DisplayOrderToIndex[] and RowCellData[]
2200  ImGuiTableTempData* TempData; // Transient data while table is active. Point within g.CurrentTableStack[]
2201  ImSpan<ImGuiTableColumn> Columns; // Point within RawData[]
2202  ImSpan<ImGuiTableColumnIdx> DisplayOrderToIndex; // Point within RawData[]. Store display order of columns (when not reordered, the values are 0...Count-1)
2203  ImSpan<ImGuiTableCellData> RowCellData; // Point within RawData[]. Store cells background requests for current row.
2204  ImU64 EnabledMaskByDisplayOrder; // Column DisplayOrder -> IsEnabled map
2205  ImU64 EnabledMaskByIndex; // Column Index -> IsEnabled map (== not hidden by user/api) in a format adequate for iterating column without touching cold data
2206  ImU64 VisibleMaskByIndex; // Column Index -> IsVisibleX|IsVisibleY map (== not hidden by user/api && not hidden by scrolling/cliprect)
2207  ImU64 RequestOutputMaskByIndex; // Column Index -> IsVisible || AutoFit (== expect user to submit items)
2208  ImGuiTableFlags SettingsLoadedFlags; // Which data were loaded from the .ini file (e.g. when order is not altered we won't save order)
2209  int SettingsOffset; // Offset in g.SettingsTables
2211  int ColumnsCount; // Number of columns declared in BeginTable()
2214  ImS16 InstanceCurrent; // Count of BeginTable() calls with same ID in the same frame (generally 0). This is a little bit similar to BeginCount for a window, but multiple table with same ID look are multiple tables, they are just synched.
2215  ImS16 InstanceInteracted; // Mark which instance (generally 0) of the same ID is being interacted with
2216  float RowPosY1;
2217  float RowPosY2;
2218  float RowMinHeight; // Height submitted to TableNextRow()
2221  ImGuiTableRowFlags RowFlags : 16; // Current row flags, see ImGuiTableRowFlags_
2223  int RowBgColorCounter; // Counter for alternating background colors (can be fast-forwarded by e.g clipper), not same as CurrentRow because header rows typically don't increase this.
2224  ImU32 RowBgColor[2]; // Background color override for current row.
2227  float BorderX1;
2228  float BorderX2;
2232  float CellPaddingX; // Padding from each borders
2234  float CellSpacingX1; // Spacing between non-bordered cells
2236  float LastOuterHeight; // Outer height from last frame
2237  float LastFirstRowHeight; // Height of first row from last frame
2238  float InnerWidth; // User value passed to BeginTable(), see comments at the top of BeginTable() for details.
2239  float ColumnsGivenWidth; // Sum of current column width
2240  float ColumnsAutoFitWidth; // Sum of ideal column width in order nothing to be clipped, used for auto-fitting and content width submission in outer window
2242  float ResizeLockMinContentsX2; // Lock minimum contents width while resizing down in order to not create feedback loops. But we allow growing the table.
2243  float RefScale; // Reference scale to be able to rescale columns on font/dpi changes.
2244  ImRect OuterRect; // Note: for non-scrolling table, OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable().
2245  ImRect InnerRect; // InnerRect but without decoration. As with OuterRect, for non-scrolling tables, InnerRect.Max.y is
2248  ImRect BgClipRect; // We use this to cpu-clip cell background color fill
2249  ImRect Bg0ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG0/1 channel. This tends to be == OuterWindow->ClipRect at BeginTable() because output in BG0/BG1 is cpu-clipped
2250  ImRect Bg2ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG2 channel. This tends to be a correct, tight-fit, because output to BG2 are done by widgets relying on regular ClipRect.
2251  ImRect HostClipRect; // This is used to check if we can eventually merge our columns draw calls into the current draw call of the current window.
2252  ImRect HostBackupInnerClipRect; // Backup of InnerWindow->ClipRect during PushTableBackground()/PopTableBackground()
2253  ImGuiWindow* OuterWindow; // Parent window for the table
2254  ImGuiWindow* InnerWindow; // Window holding the table data (== OuterWindow or a child window)
2255  ImGuiTextBuffer ColumnsNames; // Contiguous buffer holding columns names
2256  ImDrawListSplitter* DrawSplitter; // Shortcut to TempData->DrawSplitter while in table. Isolate draw commands per columns to avoid switching clip rect constantly
2258  ImVector<ImGuiTableColumnSortSpecs> SortSpecsMulti; // FIXME-OPT: Using a small-vector pattern would be good.
2259  ImGuiTableSortSpecs SortSpecs; // Public facing sorts specs, this is what we return in TableGetSortSpecs()
2260  ImGuiTableColumnIdx SortSpecsCount;
2261  ImGuiTableColumnIdx ColumnsEnabledCount; // Number of enabled columns (<= ColumnsCount)
2262  ImGuiTableColumnIdx ColumnsEnabledFixedCount; // Number of enabled columns (<= ColumnsCount)
2263  ImGuiTableColumnIdx DeclColumnsCount; // Count calls to TableSetupColumn()
2264  ImGuiTableColumnIdx HoveredColumnBody; // Index of column whose visible region is being hovered. Important: == ColumnsCount when hovering empty region after the right-most column!
2265  ImGuiTableColumnIdx HoveredColumnBorder; // Index of column whose right-border is being hovered (for resizing).
2266  ImGuiTableColumnIdx AutoFitSingleColumn; // Index of single column requesting auto-fit.
2267  ImGuiTableColumnIdx ResizedColumn; // Index of column being resized. Reset when InstanceCurrent==0.
2268  ImGuiTableColumnIdx LastResizedColumn; // Index of column being resized from previous frame.
2269  ImGuiTableColumnIdx HeldHeaderColumn; // Index of column header being held.
2270  ImGuiTableColumnIdx ReorderColumn; // Index of column being reordered. (not cleared)
2271  ImGuiTableColumnIdx ReorderColumnDir; // -1 or +1
2272  ImGuiTableColumnIdx LeftMostEnabledColumn; // Index of left-most non-hidden column.
2273  ImGuiTableColumnIdx RightMostEnabledColumn; // Index of right-most non-hidden column.
2274  ImGuiTableColumnIdx LeftMostStretchedColumn; // Index of left-most stretched column.
2275  ImGuiTableColumnIdx RightMostStretchedColumn; // Index of right-most stretched column.
2276  ImGuiTableColumnIdx ContextPopupColumn; // Column right-clicked on, of -1 if opening context menu from a neutral/empty spot
2277  ImGuiTableColumnIdx FreezeRowsRequest; // Requested frozen rows count
2278  ImGuiTableColumnIdx FreezeRowsCount; // Actual frozen row count (== FreezeRowsRequest, or == 0 when no scrolling offset)
2279  ImGuiTableColumnIdx FreezeColumnsRequest; // Requested frozen columns count
2280  ImGuiTableColumnIdx FreezeColumnsCount; // Actual frozen columns count (== FreezeColumnsRequest, or == 0 when no scrolling offset)
2281  ImGuiTableColumnIdx RowCellDataCurrent; // Index of current RowCellData[] entry in current row
2282  ImGuiTableDrawChannelIdx DummyDrawChannel; // Redirect non-visible columns here.
2283  ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent; // For Selectable() and other widgets drawing across columns after the freezing line. Index within DrawSplitter.Channels[]
2284  ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen;
2285  bool IsLayoutLocked; // Set by TableUpdateLayout() which is called when beginning the first row.
2286  bool IsInsideRow; // Set when inside TableBeginRow()/TableEndRow().
2289  bool IsUsingHeaders; // Set when the first row had the ImGuiTableRowFlags_Headers flag.
2290  bool IsContextPopupOpen; // Set when default context menu is open (also see: ContextPopupColumn, InstanceInteracted).
2292  bool IsSettingsDirty; // Set when table settings have changed and needs to be reported into ImGuiTableSetttings data.
2293  bool IsDefaultDisplayOrder; // Set when display order is unchanged from default (DisplayOrder contains 0...Count-1)
2296  bool IsUnfrozenRows; // Set when we got past the frozen row.
2297  bool IsDefaultSizingPolicy; // Set if user didn't explicitly set a sizing policy in BeginTable()
2299  bool HostSkipItems; // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis
2300 
2301  IMGUI_API ImGuiTable() { memset(this, 0, sizeof(*this)); LastFrameActive = -1; }
2303 };
2304 
2305 // Transient data that are only needed between BeginTable() and EndTable(), those buffers are shared (1 per level of stacked table).
2306 // - Accessing those requires chasing an extra pointer so for very frequently used data we leave them in the main table structure.
2307 // - We also leave out of this structure data that tend to be particularly useful for debugging/metrics.
2309 {
2310  int TableIndex; // Index in g.Tables.Buf[] pool
2311  float LastTimeActive; // Last timestamp this structure was used
2312 
2313  ImVec2 UserOuterSize; // outer_size.x passed to BeginTable()
2315 
2316  ImRect HostBackupWorkRect; // Backup of InnerWindow->WorkRect at the end of BeginTable()
2317  ImRect HostBackupParentWorkRect; // Backup of InnerWindow->ParentWorkRect at the end of BeginTable()
2318  ImVec2 HostBackupPrevLineSize; // Backup of InnerWindow->DC.PrevLineSize at the end of BeginTable()
2319  ImVec2 HostBackupCurrLineSize; // Backup of InnerWindow->DC.CurrLineSize at the end of BeginTable()
2320  ImVec2 HostBackupCursorMaxPos; // Backup of InnerWindow->DC.CursorMaxPos at the end of BeginTable()
2321  ImVec1 HostBackupColumnsOffset; // Backup of OuterWindow->DC.ColumnsOffset at the end of BeginTable()
2322  float HostBackupItemWidth; // Backup of OuterWindow->DC.ItemWidth at the end of BeginTable()
2323  int HostBackupItemWidthStackSize;//Backup of OuterWindow->DC.ItemWidthStack.Size at the end of BeginTable()
2324 
2325  IMGUI_API ImGuiTableTempData() { memset(this, 0, sizeof(*this)); LastTimeActive = -1.0f; }
2326 };
2327 
2328 // sizeof() ~ 12
2330 {
2333  ImGuiTableColumnIdx Index;
2334  ImGuiTableColumnIdx DisplayOrder;
2335  ImGuiTableColumnIdx SortOrder;
2337  ImU8 IsEnabled : 1; // "Visible" in ini file
2339 
2341  {
2342  WidthOrWeight = 0.0f;
2343  UserID = 0;
2344  Index = -1;
2345  DisplayOrder = SortOrder = -1;
2347  IsEnabled = 1;
2348  IsStretch = 0;
2349  }
2350 };
2351 
2352 // This is designed to be stored in a single ImChunkStream (1 header followed by N ImGuiTableColumnSettings, etc.)
2354 {
2355  ImGuiID ID; // Set to 0 to invalidate/delete the setting
2356  ImGuiTableFlags SaveFlags; // Indicate data we want to save using the Resizable/Reorderable/Sortable/Hideable flags (could be using its own flags..)
2357  float RefScale; // Reference scale to be able to rescale columns on font/dpi changes.
2358  ImGuiTableColumnIdx ColumnsCount;
2359  ImGuiTableColumnIdx ColumnsCountMax; // Maximum number of columns this settings instance can store, we can recycle a settings instance with lower number of columns but not higher
2360  bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
2361 
2362  ImGuiTableSettings() { memset(this, 0, sizeof(*this)); }
2364 };
2365 
2366 //-----------------------------------------------------------------------------
2367 // [SECTION] ImGui internal API
2368 // No guarantee of forward compatibility here!
2369 //-----------------------------------------------------------------------------
2370 
2371 namespace ImGui
2372 {
2373  // Windows
2374  // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
2375  // If this ever crash because g.CurrentWindow is NULL it means that either
2376  // - ImGui::NewFrame() has never been called, which is illegal.
2377  // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
2381  IMGUI_API ImGuiWindow* FindWindowByName(const char* name);
2384  IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy);
2385  IMGUI_API bool IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below);
2387  IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
2388  IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
2389  IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
2390  IMGUI_API void SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size);
2391 
2392  // Windows: Display Order and Focus Order
2393  IMGUI_API void FocusWindow(ImGuiWindow* window);
2394  IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window);
2398 
2399  // Fonts, drawing
2400  IMGUI_API void SetCurrentFont(ImFont* font);
2401  inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
2402  inline ImDrawList* GetForegroundDrawList(ImGuiWindow* window) { IM_UNUSED(window); return GetForegroundDrawList(); } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches.
2403  IMGUI_API ImDrawList* GetBackgroundDrawList(ImGuiViewport* viewport); // get background draw list for the given viewport. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents.
2404  IMGUI_API ImDrawList* GetForegroundDrawList(ImGuiViewport* viewport); // get foreground draw list for the given viewport. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
2405 
2406  // Init
2407  IMGUI_API void Initialize(ImGuiContext* context);
2408  IMGUI_API void Shutdown(ImGuiContext* context); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
2409 
2410  // NewFrame
2415 
2416  // Generic context hooks
2418  IMGUI_API void RemoveContextHook(ImGuiContext* context, ImGuiID hook_to_remove);
2420 
2421  // Settings
2424  IMGUI_API void ClearIniSettings();
2428  IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
2429 
2430  // Scrolling
2431  IMGUI_API void SetNextWindowScroll(const ImVec2& scroll); // Use -1.0f on one axis to leave as-is
2432  IMGUI_API void SetScrollX(ImGuiWindow* window, float scroll_x);
2433  IMGUI_API void SetScrollY(ImGuiWindow* window, float scroll_y);
2434  IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio);
2435  IMGUI_API void SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio);
2436 
2437  // Early work-in-progress API (ScrollToItem() will become public)
2438  IMGUI_API void ScrollToItem(ImGuiScrollFlags flags = 0);
2439  IMGUI_API void ScrollToRect(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0);
2440  IMGUI_API ImVec2 ScrollToRectEx(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0);
2441 //#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2443 //#endif
2444 
2445  // Basic Accessors
2446  inline ImGuiID GetItemID() { ImGuiContext& g = *GImGui; return g.LastItemData.ID; } // Get ID of last item (~~ often same ImGui::GetID(label) beforehand)
2449  inline ImGuiID GetActiveID() { ImGuiContext& g = *GImGui; return g.ActiveId; }
2450  inline ImGuiID GetFocusID() { ImGuiContext& g = *GImGui; return g.NavId; }
2451  IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
2452  IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow* window);
2453  IMGUI_API void ClearActiveID();
2455  IMGUI_API void SetHoveredID(ImGuiID id);
2456  IMGUI_API void KeepAliveID(ImGuiID id);
2457  IMGUI_API void MarkItemEdited(ImGuiID id); // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function.
2458  IMGUI_API void PushOverrideID(ImGuiID id); // Push given value as-is at the top of the ID stack (whereas PushID combines old and new hashes)
2459  IMGUI_API ImGuiID GetIDWithSeed(const char* str_id_begin, const char* str_id_end, ImGuiID seed);
2460 
2461  // Basic Helpers for widget code
2462  IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = -1.0f);
2463  IMGUI_API void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f);
2464  IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL, ImGuiItemFlags extra_flags = 0);
2465  IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id);
2466  IMGUI_API void ItemInputable(ImGuiWindow* window, ImGuiID id);
2467  IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id);
2468  IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
2469  IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
2470  IMGUI_API void PushMultiItemsWidths(int components, float width_full);
2471  IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
2473  IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
2474 
2475  // Parameter stacks
2476  IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
2477  IMGUI_API void PopItemFlag();
2478 
2479 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2480  // Currently refactoring focus/nav/tabbing system
2481  // If you have old/custom copy-and-pasted widgets that used FocusableItemRegister():
2482  // (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool tab_focused = FocusableItemRegister(...)'
2483  // (Old) IMGUI_VERSION_NUM >= 18209: using 'ItemAdd(..., ImGuiItemAddFlags_Focusable)' and 'bool tab_focused = (GetItemStatusFlags() & ImGuiItemStatusFlags_Focused) != 0'
2484  // (New) IMGUI_VERSION_NUM >= 18413: using 'ItemAdd(..., ImGuiItemFlags_Inputable)' and 'bool tab_focused = (GetItemStatusFlags() & ImGuiItemStatusFlags_FocusedTabbing) != 0 || g.NavActivateInputId == id' (WIP)
2485  // Widget code are simplified as there's no need to call FocusableItemUnregister() while managing the transition from regular widget to TempInputText()
2486  inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) { IM_ASSERT(0); IM_UNUSED(window); IM_UNUSED(id); return false; } // -> pass ImGuiItemAddFlags_Inputable flag to ItemAdd()
2487  inline void FocusableItemUnregister(ImGuiWindow* window) { IM_ASSERT(0); IM_UNUSED(window); } // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem
2488 #endif
2489 
2490  // Logging/Capture
2491  IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
2492  IMGUI_API void LogToBuffer(int auto_open_depth = -1); // Start logging/capturing to internal buffer
2493  IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
2494  IMGUI_API void LogSetNextTextDecoration(const char* prefix, const char* suffix);
2495 
2496  // Popups, Modals, Tooltips
2497  IMGUI_API bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags);
2499  IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup);
2500  IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
2502  IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
2503  IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
2504  IMGUI_API void BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags);
2508  IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy);
2509 
2510  // Menus
2511  IMGUI_API bool BeginViewportSideBar(const char* name, ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags);
2512  IMGUI_API bool BeginMenuEx(const char* label, const char* icon, bool enabled = true);
2513  IMGUI_API bool MenuItemEx(const char* label, const char* icon, const char* shortcut = NULL, bool selected = false, bool enabled = true);
2514 
2515  // Combos
2516  IMGUI_API bool BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags);
2518  IMGUI_API void EndComboPreview();
2519 
2520  // Gamepad/Keyboard Navigation
2521  IMGUI_API void NavInitWindow(ImGuiWindow* window, bool force_reinit);
2524  IMGUI_API void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags);
2525  IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags);
2531  IMGUI_API ImVec2 GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f);
2532  IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
2533  IMGUI_API void ActivateItem(ImGuiID id); // Remotely activate a button, checkbox, tree node etc. given its unique ID. activation is queued and processed on the next frame when the item is encountered again.
2534  IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
2535 
2536  // Focus Scope (WIP)
2537  // This is generally used to identify a selection set (multiple of which may be in the same window), as selection
2538  // patterns generally need to react (e.g. clear selection) when landing on an item of the set.
2539  IMGUI_API void PushFocusScope(ImGuiID id);
2540  IMGUI_API void PopFocusScope();
2541  inline ImGuiID GetFocusedFocusScope() { ImGuiContext& g = *GImGui; return g.NavFocusScopeId; } // Focus scope which is actually active
2542  inline ImGuiID GetFocusScope() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.NavFocusScopeIdCurrent; } // Focus scope we are outputting into, set by PushFocusScope()
2543 
2544  // Inputs
2545  // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
2548  inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
2549  inline bool IsActiveIdUsingNavInput(ImGuiNavInput input) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; }
2550  inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; IM_ASSERT(key < 64); return (g.ActiveIdUsingKeyInputMask & ((ImU64)1 << key)) != 0; }
2551  IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
2552  inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { ImGuiContext& g = *GImGui; const int key_index = g.IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; }
2553  inline bool IsNavInputDown(ImGuiNavInput n) { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; }
2554  inline bool IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm) { return (GetNavInputAmount(n, rm) > 0.0f); }
2556 
2557  // Drag and Drop
2558  IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
2559  IMGUI_API void ClearDragDrop();
2561 
2562  // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API)
2563  IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect& clip_rect);
2564  IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiOldColumnFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
2565  IMGUI_API void EndColumns(); // close columns
2566  IMGUI_API void PushColumnClipRect(int column_index);
2569  IMGUI_API ImGuiID GetColumnsID(const char* str_id, int count);
2571  IMGUI_API float GetColumnOffsetFromNorm(const ImGuiOldColumns* columns, float offset_norm);
2572  IMGUI_API float GetColumnNormFromOffset(const ImGuiOldColumns* columns, float offset);
2573 
2574  // Tables: Candidates for public API
2575  IMGUI_API void TableOpenContextMenu(int column_n = -1);
2576  IMGUI_API void TableSetColumnWidth(int column_n, float width);
2577  IMGUI_API void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs);
2578  IMGUI_API int TableGetHoveredColumn(); // May use (TableGetColumnFlags() & ImGuiTableColumnFlags_IsHovered) instead. Return hovered column. return -1 when table is not hovered. return columns_count if the unused space at the right of visible columns is hovered.
2582 
2583  // Tables: Internals
2586  IMGUI_API bool BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f);
2587  IMGUI_API void TableBeginInitMemory(ImGuiTable* table, int columns_count);
2590  IMGUI_API void TableUpdateLayout(ImGuiTable* table);
2593  IMGUI_API void TableDrawBorders(ImGuiTable* table);
2601  IMGUI_API void TableBeginRow(ImGuiTable* table);
2602  IMGUI_API void TableEndRow(ImGuiTable* table);
2603  IMGUI_API void TableBeginCell(ImGuiTable* table, int column_n);
2604  IMGUI_API void TableEndCell(ImGuiTable* table);
2605  IMGUI_API ImRect TableGetCellBgRect(const ImGuiTable* table, int column_n);
2606  IMGUI_API const char* TableGetColumnName(const ImGuiTable* table, int column_n);
2607  IMGUI_API ImGuiID TableGetColumnResizeID(const ImGuiTable* table, int column_n, int instance_no = 0);
2608  IMGUI_API float TableGetMaxColumnWidth(const ImGuiTable* table, int column_n);
2609  IMGUI_API void TableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n);
2611  IMGUI_API void TableRemove(ImGuiTable* table);
2615 
2616  // Tables: Settings
2617  IMGUI_API void TableLoadSettings(ImGuiTable* table);
2618  IMGUI_API void TableSaveSettings(ImGuiTable* table);
2622  IMGUI_API ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count);
2624 
2625  // Tab Bars
2626  IMGUI_API bool BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags);
2628  IMGUI_API void TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id);
2629  IMGUI_API void TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
2630  IMGUI_API void TabBarQueueReorder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int offset);
2631  IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, ImVec2 mouse_pos);
2633  IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags);
2634  IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button);
2635  IMGUI_API void TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col);
2636  IMGUI_API void TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible, bool* out_just_closed, bool* out_text_clipped);
2637 
2638  // Render helpers
2639  // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
2640  // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally)
2641  IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
2642  IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
2643  IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
2644  IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
2645  IMGUI_API void RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known);
2646  IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
2647  IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
2648  IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0);
2649  IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
2650  IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
2651 
2652  // Render helpers (those functions don't access any ImGui state!)
2653  IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
2654  IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
2655  IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
2656  IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
2657  IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
2658  IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
2659  IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding);
2660 
2661 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
2662  // [1.71: 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while]
2663  inline void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale=1.0f) { ImGuiWindow* window = GetCurrentWindow(); RenderArrow(window->DrawList, pos, GetColorU32(ImGuiCol_Text), dir, scale); }
2665 #endif
2666 
2667  // Widgets
2668  IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
2669  IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0);
2670  IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos);
2671  IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos);
2672  IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0);
2673  IMGUI_API void Scrollbar(ImGuiAxis axis);
2674  IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float avail_v, float contents_v, ImDrawFlags flags);
2675  IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec2& padding, const ImVec4& bg_col, const ImVec4& tint_col);
2678  IMGUI_API ImGuiID GetWindowResizeCornerID(ImGuiWindow* window, int n); // 0..3: corners
2681  IMGUI_API bool CheckboxFlags(const char* label, ImS64* flags, ImS64 flags_value);
2682  IMGUI_API bool CheckboxFlags(const char* label, ImU64* flags, ImU64 flags_value);
2683 
2684  // Widgets low-level behaviors
2685  IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
2686  IMGUI_API bool DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags);
2687  IMGUI_API bool SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb);
2688  IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
2689  IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
2690  IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextItemOpen() data, if any. May return true when logging
2692 
2693  // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
2694  // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
2695  // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); "
2696  template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API float ScaleRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size);
2697  template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API T ScaleValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size);
2698  template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, ImGuiSliderFlags flags);
2699  template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb);
2700  template<typename T, typename SIGNED_T> IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v);
2701  template<typename T> IMGUI_API bool CheckboxFlagsT(const char* label, T* flags, T flags_value);
2702 
2703  // Data type helpers
2705  IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format);
2706  IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg_1, const void* arg_2);
2707  IMGUI_API bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format);
2708  IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void* arg_1, const void* arg_2);
2709  IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max);
2710 
2711  // InputText
2712  IMGUI_API bool InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
2713  IMGUI_API bool TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags);
2714  IMGUI_API bool TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format, const void* p_clamp_min = NULL, const void* p_clamp_max = NULL);
2715  inline bool TempInputIsActive(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); }
2716  inline ImGuiInputTextState* GetInputTextState(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active
2717 
2718  // Color
2719  IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
2720  IMGUI_API void ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags);
2721  IMGUI_API void ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags);
2722 
2723  // Plot
2724  IMGUI_API int PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size);
2725 
2726  // Shade functions (write over already created vertices)
2727  IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1);
2728  IMGUI_API void ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp);
2729 
2730  // Garbage collection
2734 
2735  // Debug Tools
2736  IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
2737  IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
2740 
2741  IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
2742  IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end);
2744  IMGUI_API void DebugNodeDrawList(ImGuiWindow* window, const ImDrawList* draw_list, const char* label);
2745  IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, const ImDrawList* draw_list, const ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb);
2746  IMGUI_API void DebugNodeFont(ImFont* font);
2747  IMGUI_API void DebugNodeStorage(ImGuiStorage* storage, const char* label);
2748  IMGUI_API void DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label);
2749  IMGUI_API void DebugNodeTable(ImGuiTable* table);
2751  IMGUI_API void DebugNodeWindow(ImGuiWindow* window, const char* label);
2753  IMGUI_API void DebugNodeWindowsList(ImVector<ImGuiWindow*>* windows, const char* label);
2754  IMGUI_API void DebugNodeViewport(ImGuiViewportP* viewport);
2755  IMGUI_API void DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb);
2756 
2757 } // namespace ImGui
2758 
2759 
2760 //-----------------------------------------------------------------------------
2761 // [SECTION] ImFontAtlas internal API
2762 //-----------------------------------------------------------------------------
2763 
2764 // This structure is likely to evolve as we add support for incremental atlas updates
2766 {
2768 };
2769 
2770 // Helper for font builder
2773 IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
2774 IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
2776 IMGUI_API void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned char in_marker_pixel_value);
2777 IMGUI_API void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned int in_marker_pixel_value);
2778 IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
2779 IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
2780 
2781 //-----------------------------------------------------------------------------
2782 // [SECTION] Test Engine specific hooks (imgui_test_engine)
2783 //-----------------------------------------------------------------------------
2784 
2785 #ifdef IMGUI_ENABLE_TEST_ENGINE
2786 extern void ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
2787 extern void ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
2788 extern void ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
2789 extern const char* ImGuiTestEngine_FindItemDebugLabel(ImGuiContext* ctx, ImGuiID id);
2790 
2791 #define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID) // Register item bounding box
2792 #define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS) // Register item label and status flags (optional)
2793 #define IMGUI_TEST_ENGINE_LOG(_FMT,...) if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log
2794 #else
2795 #define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) ((void)0)
2796 #endif
2797 
2798 //-----------------------------------------------------------------------------
2799 
2800 #if defined(__clang__)
2801 #pragma clang diagnostic pop
2802 #elif defined(__GNUC__)
2803 #pragma GCC diagnostic pop
2804 #endif
2805 
2806 #ifdef _MSC_VER
2807 #pragma warning (pop)
2808 #endif
2809 
2810 #endif // #ifndef IMGUI_DISABLE
ImVector< ImGuiStackLevelInfo > Results
Definition: imgui_internal.h:1430
Definition: imgui_internal.h:1195
float CursorAnim
Definition: imgui_internal.h:1017
bool ShowDrawCmdMesh
Definition: imgui_internal.h:1396
IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn *column)
ImGuiTableColumnIdx ColumnsCountMax
Definition: imgui_internal.h:2359
Definition: imgui_internal.h:1097
~ImPool()
Definition: imgui_internal.h:621
ImGuiActivateFlags NavNextActivateFlags
Definition: imgui_internal.h:1561
ImU16 OffsetIcon
Definition: imgui_internal.h:992
Definition: imgui_internal.h:1113
float LastActiveIdTimer
Definition: imgui_internal.h:1526
ImGuiTableColumnIdx SortOrder
Definition: imgui_internal.h:2335
IMGUI_API void ColorPickerOptionsPopup(const float *ref_col, ImGuiColorEditFlags flags)
ImRect InnerRect
Definition: imgui_internal.h:1977
Definition: imgui_internal.h:2070
Definition: imgui_internal.h:700
Definition: imgui_internal.h:741
ImGuiWindow * NavWindowingTargetAnim
Definition: imgui_internal.h:1594
Definition: imgui.h:2545
void(* ClearAllFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler)
Definition: imgui_internal.h:1375
IMGUI_API ImGuiID AddContextHook(ImGuiContext *context, const ImGuiContextHook *hook)
ImSpan< ImGuiTableCellData > RowCellData
Definition: imgui_internal.h:2203
ImGuiComboFlagsPrivate_
Definition: imgui_internal.h:806
IMGUI_API void BringWindowToDisplayBack(ImGuiWindow *window)
bool NavHasScroll
Definition: imgui_internal.h:1892
IMGUI_API bool IsItemToggledSelection()
Definition: imgui.h:1054
ImGuiID HookId
Definition: imgui_internal.h:1444
bool HoveredIdDisabled
Definition: imgui_internal.h:1501
void CursorClamp()
Definition: imgui_internal.h:1034
float GetArea() const
Definition: imgui_internal.h:490
ImVec2 CursorPosPrevLine
Definition: imgui_internal.h:1874
bool IsSettingsDirty
Definition: imgui_internal.h:2292
Definition: imgui_internal.h:1258
ImGuiScrollFlags NavMoveScrollFlags
Definition: imgui_internal.h:1580
ImGuiTabBarFlagsPrivate_
Definition: imgui_internal.h:2036
ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v)
Definition: imgui_internal.h:954
float FramerateSecPerFrame[120]
Definition: imgui_internal.h:1703
ImVec2 PrevLineSize
Definition: imgui_internal.h:1879
ImRect ParentWorkRect
Definition: imgui_internal.h:1980
IMGUI_API const char * ImStreolRange(const char *str, const char *str_end)
bool IsLayoutLocked
Definition: imgui_internal.h:2285
IMGUI_API ImGuiID TableGetColumnResizeID(const ImGuiTable *table, int column_n, int instance_no=0)
float CellPaddingY
Definition: imgui_internal.h:2233
ImVec2 PlatformImeLastPos
Definition: imgui_internal.h:1670
float WidthAuto
Definition: imgui_internal.h:2136
ImGuiID DragDropAcceptIdPrev
Definition: imgui_internal.h:1624
T * end()
Definition: imgui_internal.h:661
IMGUI_API void TableUpdateColumnsWeightFromWidth(ImGuiTable *table)
int GetUndoAvailCount() const
Definition: imgui_internal.h:1028
ImGuiNextItemDataFlags Flags
Definition: imgui_internal.h:1102
int FrameCount
Definition: imgui_internal.h:1468
int GetBufSize() const
Definition: imgui_internal.h:636
static bool ImCharIsBlankW(unsigned int c)
Definition: imgui_internal.h:327
IMGUI_API void TableLoadSettings(ImGuiTable *table)
unsigned int ImU32
Definition: imgui.h:230
int ImGuiOldColumnFlags
Definition: imgui_internal.h:149
#define IM_FREE(_PTR)
Definition: imgui.h:1680
short SizeOfStyleVarStack
Definition: imgui_internal.h:1129
bool IsInitializing
Definition: imgui_internal.h:2287
ImGuiLastItemData LastItemData
Definition: imgui_internal.h:1531
char TempBuffer[1024 *3+1]
Definition: imgui_internal.h:1710
unsigned char DragDropPayloadBufLocal[16]
Definition: imgui_internal.h:1628
Definition: imgui_internal.h:1221
ImVector< ImGuiColorMod > ColorStack
Definition: imgui_internal.h:1535
Definition: imgui_internal.h:935
void * GetSpanPtrBegin(int n)
Definition: imgui_internal.h:602
bool ScrollbarY
Definition: imgui_internal.h:1940
bool TempInputIsActive(ImGuiID id)
Definition: imgui_internal.h:2715
ImGuiInputSource ActiveIdSource
Definition: imgui_internal.h:1519
IMGUI_API void RenderArrowPointingAt(ImDrawList *draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
ImGuiInputSource
Definition: imgui_internal.h:889
ImGuiContextHookType Type
Definition: imgui_internal.h:1445
const T * end() const
Definition: imgui_internal.h:580
IMGUI_API void PushFocusScope(ImGuiID id)
ImGuiStyleMod(ImGuiStyleVar idx, int v)
Definition: imgui_internal.h:952
IMGUI_API void TableBeginInitMemory(ImGuiTable *table, int columns_count)
ImRect MenuBarRect() const
Definition: imgui_internal.h:2028
ImChunkStream< ImGuiWindowSettings > SettingsWindows
Definition: imgui_internal.h:1678
bool IsContextPopupOpen
Definition: imgui_internal.h:2290
ImGuiID HoveredIdPreviousFrame
Definition: imgui_internal.h:1497
int GetSelectionEnd() const
Definition: imgui_internal.h:1039
void Add(const ImRect &r)
Definition: imgui_internal.h:499
ImGuiStackLevelInfo()
Definition: imgui_internal.h:1421
char * BasePtr
Definition: imgui_internal.h:592
Definition: imgui_internal.h:1196
void Reserve(int n, size_t sz, int a=4)
Definition: imgui_internal.h:599
ImVec2 CalcWorkRectPos(const ImVec2 &off_min) const
Definition: imgui_internal.h:1342
IMGUI_API void TablePopBackgroundChannel()
IMGUI_API void ClearDragDrop()
int CurrentTableIdx
Definition: imgui_internal.h:1903
ImGuiID DragDropHoldJustPressedId
Definition: imgui_internal.h:1626
IMGUI_API void DebugNodeWindowSettings(ImGuiWindowSettings *settings)
float ScrollingRectMaxX
Definition: imgui_internal.h:2090
IMGUI_API void TableOpenContextMenu(int column_n=-1)
ImGuiCond CollapsedCond
Definition: imgui_internal.h:1076
ImGuiID NavFocusScopeId
Definition: imgui_internal.h:1550
IMGUI_API void NavMoveRequestCancel()
ImGuiNavItemData NavMoveResultLocal
Definition: imgui_internal.h:1588
IMGUI_API void RenderTextEllipsis(ImDrawList *draw_list, const ImVec2 &pos_min, const ImVec2 &pos_max, float clip_max_x, float ellipsis_max_x, const char *text, const char *text_end, const ImVec2 *text_size_if_known)
ImPoolIdx FreeIdx
Definition: imgui_internal.h:617
float DragSpeedDefaultRatio
Definition: imgui_internal.h:1659
ImVec2 PosPivotVal
Definition: imgui_internal.h:1078
ImGuiSeparatorFlags_
Definition: imgui_internal.h:838
bool DragDropWithinSource
Definition: imgui_internal.h:1613
Definition: imgui_internal.h:1273
Definition: imgui.h:2107
T * GetByIndex(ImPoolIdx n)
Definition: imgui_internal.h:623
bool ShowWindowsRects
Definition: imgui_internal.h:1393
ImRect TitleBarRect() const
Definition: imgui_internal.h:2026
ImRect NavRect
Definition: imgui_internal.h:1119
void * SizeCallbackUserData
Definition: imgui_internal.h:1085
float ColorEditLastHue
Definition: imgui_internal.h:1650
Definition: imgui_internal.h:896
IMGUI_API void TableBeginApplyRequests(ImGuiTable *table)
Definition: imgui_internal.h:871
ImGuiLayoutType LayoutType
Definition: imgui_internal.h:1904
IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void *output, const void *arg_1, const void *arg_2)
ImU8 IsStretch
Definition: imgui_internal.h:2338
IMGUI_API bool CloseButton(ImGuiID id, const ImVec2 &pos)
Definition: imgui_internal.h:1204
ImGuiID NavActivatePressedId
Definition: imgui_internal.h:1553
bool WantLayout
Definition: imgui_internal.h:2094
ImGuiPopupData()
Definition: imgui_internal.h:1054
int offset_from_ptr(const T *p)
Definition: imgui_internal.h:662
ImRect Rect
Definition: imgui_internal.h:1118
ImVec2 BackupCursorPos
Definition: imgui_internal.h:961
Definition: imgui_internal.h:849
ImS8 HiddenFramesCannotSkipItems
Definition: imgui_internal.h:1962
ImVector< ImGuiPopupData > BeginPopupStack
Definition: imgui_internal.h:1542
ImGuiID DragDropAcceptIdCurr
Definition: imgui_internal.h:1623
IMGUI_API void NavMoveRequestApplyResult()
IMGUI_API void RenderMouseCursor(ImDrawList *draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2 &size, const ImVec2 &uv0, const ImVec2 &uv1, const ImVec2 &padding, const ImVec4 &bg_col, const ImVec4 &tint_col)
Definition: imgui_internal.h:1359
ImU64 RequestOutputMaskByIndex
Definition: imgui_internal.h:2207
bool BackupActiveIdPreviousFrameIsAlive
Definition: imgui_internal.h:981
IMGUI_API void DebugNodeFont(ImFont *font)
ImVec2 GetTR() const
Definition: imgui_internal.h:492
ImRect PreviewRect
Definition: imgui_internal.h:960
bool IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm)
Definition: imgui_internal.h:2554
const char * TypeName
Definition: imgui_internal.h:1373
T * Data
Definition: imgui.h:1702
float HostBackupItemWidth
Definition: imgui_internal.h:2322
int index_from_ptr(const T *it) const
Definition: imgui.h:1756
int Index
Definition: imgui_internal.h:1159
IMGUI_API const char * TableGetColumnName(int column_n=-1)
float x
Definition: imgui.h:277
ImGuiTabItem()
Definition: imgui_internal.h:2066
float FontSize
Definition: imgui_internal.h:1464
Definition: imgui_internal.h:1062
Definition: imgui_internal.h:1440
bool Hidden
Definition: imgui_internal.h:1948
ImS16 NameOffset
Definition: imgui_internal.h:2148
Definition: imgui_internal.h:1264
Definition: imgui_internal.h:1229
IMGUI_API void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs)
Definition: imgui_internal.h:905
IMGUI_API bool TabBarProcessReorder(ImGuiTabBar *tab_bar)
float DistCenter
Definition: imgui_internal.h:1241
Definition: imgui_internal.h:650
int CurrentRow
Definition: imgui_internal.h:2212
ImGuiOldColumnFlags_
Definition: imgui_internal.h:1253
Definition: imgui_internal.h:758
int WantCaptureMouseNextFrame
Definition: imgui_internal.h:1707
ImGuiWindow * TabFocusRequestCurrWindow
Definition: imgui_internal.h:1601
static float ImSign(float x)
Definition: imgui_internal.h:404
int TabFocusRequestNextCounterTabStop
Definition: imgui_internal.h:1604
ImGuiDragDropFlags DragDropAcceptFlags
Definition: imgui_internal.h:1621
ImGuiTableColumnIdx RowCellDataCurrent
Definition: imgui_internal.h:2281
bool CursorFollow
Definition: imgui_internal.h:1018
ImU64 EnabledMaskByDisplayOrder
Definition: imgui_internal.h:2204
Definition: imgui_internal.h:1266
bool Active
Definition: imgui_internal.h:1941
ImGuiCond OpenCond
Definition: imgui_internal.h:1105
ImRect HostBackupParentWorkRect
Definition: imgui_internal.h:2317
ImRect NavScoringRect
Definition: imgui_internal.h:1585
Definition: imgui_internal.h:1269
float OffMinX
Definition: imgui_internal.h:1291
ImVec2 OpenMousePos
Definition: imgui_internal.h:1052
ImGuiID GetItemID()
Definition: imgui_internal.h:2446
ImGuiPayload DragDropPayload
Definition: imgui_internal.h:1618
ImGuiLogType LogType
Definition: imgui_internal.h:1685
ImVec2 ActiveIdClickOffset
Definition: imgui_internal.h:1517
Definition: imgui_internal.h:937
IMGUI_API ImGuiID GetHoveredID()
Definition: imgui_internal.h:879
Definition: imgui_internal.h:797
signed char ImS8
Definition: imgui.h:225
int ImGuiNextItemDataFlags
Definition: imgui_internal.h:153
ImRect GetWorkRect() const
Definition: imgui_internal.h:1348
#define IM_FMTLIST(FMT)
Definition: imgui.h:106
Definition: imgui.h:2292
ImGuiTableColumn()
Definition: imgui_internal.h:2173
Definition: imgui.h:965
IMGUI_API ImGuiTable * TableFindByID(ImGuiID id)
ImRect Rect() const
Definition: imgui_internal.h:2023
ImVec2 BackupCursorMaxPos
Definition: imgui_internal.h:962
IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth)
bool TabFocusPressed
Definition: imgui_internal.h:1605
Definition: imgui_internal.h:1063
IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow *window, ImGuiWindowFlags flags, ImGuiWindow *parent_window)
ImGuiID NavActivateId
Definition: imgui_internal.h:1551
void(* ReadLineFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler, void *entry, const char *line)
Definition: imgui_internal.h:1378
Definition: imgui_internal.h:1064
IMGUI_API void RenderTextClipped(const ImVec2 &pos_min, const ImVec2 &pos_max, const char *text, const char *text_end, const ImVec2 *text_size_if_known, const ImVec2 &align=ImVec2(0, 0), const ImRect *clip_rect=NULL)
ImRect WorkRect
Definition: imgui_internal.h:2246
float DragCurrentAccum
Definition: imgui_internal.h:1658
ImVec2 Scroll
Definition: imgui_internal.h:1934
float ContentMaxXFrozen
Definition: imgui_internal.h:2144
IMGUI_API void TabBarRemoveTab(ImGuiTabBar *tab_bar, ImGuiID tab_id)
ImGuiTableColumnFlags Flags
Definition: imgui_internal.h:2131
signed long long ImS64
Definition: imgui.h:239
bool IsRequestOutput
Definition: imgui_internal.h:2162
int BackupInt[2]
Definition: imgui_internal.h:951
ImU8 Data[8]
Definition: imgui_internal.h:920
ImGuiNextItemData()
Definition: imgui_internal.h:1108
void ClearFlags()
Definition: imgui_internal.h:1090
IMGUI_API ImGuiID GetIDWithSeed(const char *str_id_begin, const char *str_id_end, ImGuiID seed)
ImVector< ImU32 > Storage
Definition: imgui_internal.h:549
ImGuiSizeCallback SizeCallback
Definition: imgui_internal.h:1084
ImGuiID NavActivateDownId
Definition: imgui_internal.h:1552
bool ActiveIdUsingMouseWheel
Definition: imgui_internal.h:1513
short DisabledStackSize
Definition: imgui_internal.h:1662
ImDrawList * DrawLists[2]
Definition: imgui_internal.h:1329
IMGUI_API bool SliderBehavior(const ImRect &bb, ImGuiID id, ImGuiDataType data_type, void *p_v, const void *p_min, const void *p_max, const char *format, ImGuiSliderFlags flags, ImRect *out_grab_bb)
IMGUI_API ImGuiWindowSettings * FindOrCreateWindowSettings(const char *name)
T * DataEnd
Definition: imgui_internal.h:563
void ScrollToBringRectIntoView(ImGuiWindow *window, const ImRect &rect)
Definition: imgui_internal.h:2442
Definition: imgui_internal.h:2046
T * next_chunk(T *p)
Definition: imgui_internal.h:659
Definition: imgui_internal.h:808
void ClearFreeMemory()
Definition: imgui_internal.h:725
bool MemoryCompacted
Definition: imgui_internal.h:2298
ImGuiTableColumnIdx ContextPopupColumn
Definition: imgui_internal.h:2276
bool ShowStackTool
Definition: imgui_internal.h:1392
bool IsActiveIdUsingNavDir(ImGuiDir dir)
Definition: imgui_internal.h:2548
ImGuiID QueryId
Definition: imgui_internal.h:1429
float BackupFloat[2]
Definition: imgui_internal.h:951
ImGuiNavHighlightFlags_
Definition: imgui_internal.h:1192
ImGuiInputTextFlags Flags
Definition: imgui_internal.h:1021
float CellSpacingX1
Definition: imgui_internal.h:2234
Definition: imgui_internal.h:1260
Definition: imgui_internal.h:788
Definition: imgui_internal.h:1223
ImVector< ImGuiViewportP * > Viewports
Definition: imgui_internal.h:1545
IMGUI_API void DebugNodeTable(ImGuiTable *table)
ImVec2 CursorPos
Definition: imgui_internal.h:1873
Definition: imgui_internal.h:1172
float TitleBarHeight() const
Definition: imgui_internal.h:2025
ImVector< ImGuiID > MenusIdSubmittedThisFrame
Definition: imgui_internal.h:1666
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
T * Add()
Definition: imgui_internal.h:628
void ClearBit(int n)
Definition: imgui_internal.h:554
Definition: imgui_internal.h:778
IMGUI_API char * ImStrdupcpy(char *dst, size_t *p_dst_size, const char *str)
ImVec2 WorkSize
Definition: imgui.h:2818
#define IM_DRAWLIST_ARCFAST_TABLE_SIZE
Definition: imgui_internal.h:694
Definition: imgui_internal.h:779
ImVec2 OpenPopupPos
Definition: imgui_internal.h:1051
ImRect BgClipRect
Definition: imgui_internal.h:2248
ImGuiTableColumnIdx HeldHeaderColumn
Definition: imgui_internal.h:2269
Definition: imgui_internal.h:824
Definition: imgui_internal.h:1173
ImRect OuterRectClipped
Definition: imgui_internal.h:1976
IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio=0.5f)
Definition: imgui_internal.h:897
Definition: imgui_internal.h:1217
ImU64 VisibleMaskByIndex
Definition: imgui_internal.h:2206
void swap(ImChunkStream< T > &rhs)
Definition: imgui_internal.h:664
ImGuiStorage WindowsById
Definition: imgui_internal.h:1483
ImVec2 CursorStartPos
Definition: imgui_internal.h:1875
ImVector< ImGuiGroupData > GroupStack
Definition: imgui_internal.h:1540
bool IsKeyPressedMap(ImGuiKey key, bool repeat=true)
Definition: imgui_internal.h:2552
ImVec4 BackupValue
Definition: imgui_internal.h:944
short SizeOfFontStack
Definition: imgui_internal.h:1130
IMGUI_API void ShowFontAtlas(ImFontAtlas *atlas)
void ClearFlags()
Definition: imgui_internal.h:1109
ImVector< ImFont * > FontStack
Definition: imgui_internal.h:1537
IMGUI_API void SetScrollX(float scroll_x)
ImS8 DisableInputsFrames
Definition: imgui_internal.h:1964
IMGUI_API ImRect TableGetCellBgRect(const ImGuiTable *table, int column_n)
int GetSize()
Definition: imgui_internal.h:640
Definition: imgui_internal.h:458
bool ActiveIdNoClearOnFocusLoss
Definition: imgui_internal.h:1509
ImVec2 WorkPos
Definition: imgui.h:2817
ImGuiID NavJustMovedToId
Definition: imgui_internal.h:1557
Definition: imgui_internal.h:948
bool Overlaps(const ImRect &r) const
Definition: imgui_internal.h:497
Definition: imgui_internal.h:2038
Definition: imgui_internal.h:1206
IMGUI_API bool BeginMenuEx(const char *label, const char *icon, bool enabled=true)
Definition: imgui_internal.h:913
IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow *window)
float WidthGiven
Definition: imgui_internal.h:2132
void Clear()
Definition: imgui_internal.h:724
ImVec1()
Definition: imgui_internal.h:461
IMGUI_API ImDrawList * GetForegroundDrawList()
#define IM_FMTARGS(FMT)
Definition: imgui.h:105
ImGuiComboPreviewData()
Definition: imgui_internal.h:967
IMGUI_API bool BeginTableEx(const char *name, ImGuiID id, int columns_count, ImGuiTableFlags flags=0, const ImVec2 &outer_size=ImVec2(0, 0), float inner_width=0.0f)
float CurrLineTextBaseOffset
Definition: imgui_internal.h:1880
ImGuiStorage StateStorage
Definition: imgui_internal.h:1989
IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow *window)
float OffMaxX
Definition: imgui_internal.h:1291
Definition: imgui.h:1340
float HostCursorMaxPosX
Definition: imgui_internal.h:1294
int TreeDepth
Definition: imgui_internal.h:1898
bool ActiveIdPreviousFrameHasBeenEditedBefore
Definition: imgui_internal.h:1523
float BackupPrevLineTextBaseOffset
Definition: imgui_internal.h:964
IMGUI_API void TableEndRow(ImGuiTable *table)
ImVec2 GetBL() const
Definition: imgui_internal.h:493
ImVec2ih()
Definition: imgui_internal.h:469
IMGUI_API void UpdateMouseMovingWindowNewFrame()
IMGUI_API void PopFocusScope()
ImGuiDir NavMoveDirForDebug
Definition: imgui_internal.h:1583
float RowPosY2
Definition: imgui_internal.h:2217
Definition: imgui_internal.h:2052
ImGuiTableColumnIdx Column
Definition: imgui_internal.h:2191
ImVector< ImGuiContextHook > Hooks
Definition: imgui_internal.h:1680
Definition: imgui_internal.h:1230
int NavScoringDebugCount
Definition: imgui_internal.h:1586
Definition: imgui_internal.h:1440
ImVector< char > ClipboardHandlerData
Definition: imgui_internal.h:1665
bool ActiveIdIsJustActivated
Definition: imgui_internal.h:1507
ImGuiID NavActivateInputId
Definition: imgui_internal.h:1554
bool IsDefaultSizingPolicy
Definition: imgui_internal.h:2297
bool WriteAccessed
Definition: imgui_internal.h:1943
int ImGuiActivateFlags
Definition: imgui_internal.h:146
static T ImClamp(T v, T mn, T mx)
Definition: imgui_internal.h:417
short SizeOfColorStack
Definition: imgui_internal.h:1128
ImGuiID ID
Definition: imgui_internal.h:2054
bool EmitItem
Definition: imgui_internal.h:983
bool TestBit(int n) const
Definition: imgui_internal.h:552
static ImVec2 ImMul(const ImVec2 &lhs, const ImVec2 &rhs)
Definition: imgui_internal.h:440
ImVec2 SizeVal
Definition: imgui_internal.h:1079
IMGUI_API void RenderCheckMark(ImDrawList *draw_list, ImVec2 pos, ImU32 col, float sz)
ImVec1 ColumnsOffset
Definition: imgui_internal.h:1883
IMGUI_API void SetActiveIdUsingNavAndKeys()
IMGUI_API ImGuiID GetID(const char *str_id)
void(* ImGuiContextHookCallback)(ImGuiContext *ctx, ImGuiContextHook *hook)
Definition: imgui_internal.h:1439
bool ActiveIdHasBeenEditedThisFrame
Definition: imgui_internal.h:1512
ImGuiItemStatusFlags GetItemStatusFlags()
Definition: imgui_internal.h:2447
ImRect NavInitResultRectRel
Definition: imgui_internal.h:1575
void clear()
Definition: imgui_internal.h:654
int Index
Definition: imgui_internal.h:1152
int GetAliveCount() const
Definition: imgui_internal.h:635
Definition: imgui_internal.h:908
bool Appearing
Definition: imgui_internal.h:1947
Definition: imgui_internal.h:891
ImS8 AutoFitChildAxises
Definition: imgui_internal.h:1958
Definition: imgui_internal.h:1006
bool IsResetAllRequest
Definition: imgui_internal.h:2294
bool NavHideHighlightOneFrame
Definition: imgui_internal.h:1891
IMGUI_API void BeginColumns(const char *str_id, int count, ImGuiOldColumnFlags flags=0)
IMGUI_API void RenderRectFilledWithHole(ImDrawList *draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding)
short SizeOfGroupStack
Definition: imgui_internal.h:1132
IMGUI_API ImVec2 GetContentRegionMaxAbs()
int TableIndex
Definition: imgui_internal.h:2310
#define IM_MSVC_RUNTIME_CHECKS_RESTORE
Definition: imgui.h:115
Definition: imgui.h:2639
short SizeOfItemFlagsStack
Definition: imgui_internal.h:1133
ImFont * Font
Definition: imgui_internal.h:1463
IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void *arg_1, const void *arg_2)
IMGUI_API int DataTypeFormatString(char *buf, int buf_size, ImGuiDataType data_type, const void *p_data, const char *format)
void Add(const ImVec2 &p)
Definition: imgui_internal.h:498
T * GetByKey(ImGuiID key)
Definition: imgui_internal.h:622
void TranslateY(float dy)
Definition: imgui_internal.h:504
ImDrawList DrawListInst
Definition: imgui_internal.h:1995
float CurrTabsContentsHeight
Definition: imgui_internal.h:2081
int ImGuiLayoutType
Definition: imgui_internal.h:142
Definition: imgui_internal.h:2047
void ClipWith(const ImRect &r)
Definition: imgui_internal.h:505
ImVec2 ScrollTarget
Definition: imgui_internal.h:1936
float DistAxial
Definition: imgui_internal.h:1242
int ImGuiNavMoveFlags
Definition: imgui_internal.h:152
voidpf void uLong size
Definition: ioapi.h:39
float HoveredIdNotActiveTimer
Definition: imgui_internal.h:1503
IMGUI_API void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags)
bool Contains(const ImRect &r) const
Definition: imgui_internal.h:496
float MinX
Definition: imgui_internal.h:2133
Definition: imgui_internal.h:1187
int MemoryDrawListIdxCapacity
Definition: imgui_internal.h:2006
ImGuiWindow * OuterWindow
Definition: imgui_internal.h:2253
bool LogEnabled
Definition: imgui_internal.h:1684
bool IsNavInputDown(ImGuiNavInput n)
Definition: imgui_internal.h:2553
Definition: imgui.h:275
ImGuiMenuColumns()
Definition: imgui_internal.h:998
ImGuiID GetFocusedFocusScope()
Definition: imgui_internal.h:2541
bool Edited
Definition: imgui_internal.h:1020
ImVector< ImGuiTabItem > Tabs
Definition: imgui_internal.h:2072
ImGuiAxis
Definition: imgui_internal.h:876
IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char *pixels, int x, int y, int w, int h, int stride)
float WidthAllTabs
Definition: imgui_internal.h:2083
ImGuiID FocusScopeId
Definition: imgui_internal.h:1237
ImPoolIdx GetIndex(const T *p) const
Definition: imgui_internal.h:624
ImGuiLayoutType BackupLayout
Definition: imgui_internal.h:965
ImGuiTableColumnIdx FreezeRowsRequest
Definition: imgui_internal.h:2277
int MemoryDrawListVtxCapacity
Definition: imgui_internal.h:2007
IMGUI_API int ImParseFormatPrecision(const char *format, int default_value)
IMGUI_API bool ButtonEx(const char *label, const ImVec2 &size_arg=ImVec2(0, 0), ImGuiButtonFlags flags=0)
ImGuiWindowSettings()
Definition: imgui_internal.h:1367
ImGuiTableSettings()
Definition: imgui_internal.h:2362
ImGuiWindow * TabFocusRequestNextWindow
Definition: imgui_internal.h:1602
Definition: imgui_internal.h:761
int NavIdTabCounter
Definition: imgui_internal.h:1564
Definition: imgui_internal.h:841
ImGuiNavMoveFlags NavMoveFlags
Definition: imgui_internal.h:1579
IMGUI_API void SetWindowHitTestHole(ImGuiWindow *window, const ImVec2 &pos, const ImVec2 &size)
ImVec2 ContentSizeVal
Definition: imgui_internal.h:1080
ImVec2 ScrollMax
Definition: imgui_internal.h:1935
bool HoveredIdAllowOverlap
Definition: imgui_internal.h:1498
char * dst
Definition: lz4.h:464
ImRect HostBackupInnerClipRect
Definition: imgui_internal.h:2252
ImGuiWindowTempData DC
Definition: imgui_internal.h:1972
bool IsPreserveWidthAuto
Definition: imgui_internal.h:2164
float ItemWidth
Definition: imgui_internal.h:2143
bool SettingsLoaded
Definition: imgui_internal.h:1674
Definition: imgui.h:1351
ImVec2 FramePadding
Definition: imgui.h:1782
short NavLayersActiveMaskNext
Definition: imgui_internal.h:1889
IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas *atlas, void *stbrp_context_opaque)
IMGUI_API void UpdateHoveredWindowAndCaptureFlags()
ImGuiTableColumnSettings * GetColumnSettings()
Definition: imgui_internal.h:2363
float PrevLineTextBaseOffset
Definition: imgui_internal.h:1881
float RefScale
Definition: imgui_internal.h:2357
Definition: imgui.h:1119
#define STB_TEXTEDIT_UNDOSTATECOUNT
Definition: imgui_internal.h:183
Definition: imgui_internal.h:886
ImVec2ih(const ImVec2 &rhs)
Definition: imgui_internal.h:471
Definition: imgui_internal.h:823
ImU16 Spacing
Definition: imgui_internal.h:991
Definition: imgui_internal.h:1143
ImRect WorkRect
Definition: imgui_internal.h:1979
ImVec4 ColorPickerRef
Definition: imgui_internal.h:1653
Definition: imgui_internal.h:1060
ImGuiNextWindowData NextWindowData
Definition: imgui_internal.h:1532
ImDrawListSplitter DrawSplitter
Definition: imgui_internal.h:2314
Definition: imgui_internal.h:1186
ImRect InnerRect
Definition: imgui_internal.h:2245
ImSpan()
Definition: imgui_internal.h:566
IMGUI_API ImGuiID ImHashStr(const char *data, size_t data_size=0, ImU32 seed=0)
ImVector< ImGuiTableTempData > TablesTempDataStack
Definition: imgui_internal.h:1634
ImGuiLastItemData()
Definition: imgui_internal.h:1122
ImGuiScrollFlags_
Definition: imgui_internal.h:1178
IMGUI_API ImVec2 ScrollToRectEx(ImGuiWindow *window, const ImRect &rect, ImGuiScrollFlags flags=0)
ImVec2 BuildWorkOffsetMax
Definition: imgui_internal.h:1336
static bool ImIsPowerOfTwo(int v)
Definition: imgui_internal.h:303
ImVec2 BackupCursorPosPrevLine
Definition: imgui_internal.h:963
ImU32 ActiveIdUsingNavDirMask
Definition: imgui_internal.h:1514
ImChunkStream< ImGuiTableSettings > SettingsTables
Definition: imgui_internal.h:1679
IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled)
IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar *tab_bar, const ImGuiTabItem *tab, ImVec2 mouse_pos)
IMGUI_API bool BeginDragDropTargetCustom(const ImRect &bb, ImGuiID id)
IMGUI_API void SetCurrentFont(ImFont *font)
void * Ptr
Definition: imgui_internal.h:1158
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
ImVector< ImDrawChannel > DrawChannelsTempMergeBuffer
Definition: imgui_internal.h:1636
IMGUI_API bool BeginTabBarEx(ImGuiTabBar *tab_bar, const ImRect &bb, ImGuiTabBarFlags flags)
ImGuiTreeNodeFlagsPrivate_
Definition: imgui_internal.h:833
ImVec2 Pos
Definition: imgui_internal.h:1922
#define IM_ARRAYSIZE(_ARR)
Definition: imgui.h:89
static float ImLog(float x)
Definition: imgui_internal.h:399
float NavWindowingHighlightAlpha
Definition: imgui_internal.h:1597
ImGuiContextHookType
Definition: imgui_internal.h:1440
bool NavIdIsAlive
Definition: imgui_internal.h:1565
float GetWidth() const
Definition: imgui_internal.h:488
ImVec2 HostBackupCurrLineSize
Definition: imgui_internal.h:2319
float HoveredIdTimer
Definition: imgui_internal.h:1502
bool IsFirstFrame
Definition: imgui_internal.h:1287
static float ImFloor(float f)
Definition: imgui_internal.h:433
IMGUI_API void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas *atlas, int x, int y, int w, int h, const char *in_str, char in_marker_char, unsigned char in_marker_pixel_value)
bool NavMoveSubmitted
Definition: imgui_internal.h:1576
ImVec2 MenuBarOffsetMinVal
Definition: imgui_internal.h:1087
float CalcFontSize() const
Definition: imgui_internal.h:2024
int LastActiveFrame
Definition: imgui_internal.h:1427
Definition: imgui_internal.h:798
Definition: imgui_internal.h:1214
ImS8 HiddenFramesForRenderOnly
Definition: imgui_internal.h:1963
ImVector< ImGuiOldColumns > ColumnsStorage
Definition: imgui_internal.h:1990
void Remove(ImGuiID key, ImPoolIdx idx)
Definition: imgui_internal.h:630
ImS8 NavLayerCurrent
Definition: imgui_internal.h:2165
Definition: imgui_internal.h:1211
int index_from_ptr(const T *it) const
Definition: imgui_internal.h:583
Definition: imgui_internal.h:1440
float ItemSpacingY
Definition: imgui_internal.h:2099
float ContentMaxXUnfrozen
Definition: imgui_internal.h:2145
bool HoveredIdPreviousFrameUsingMouseWheel
Definition: imgui_internal.h:1500
int LastFrameVisible
Definition: imgui_internal.h:2056
ImRect SizeConstraintRect
Definition: imgui_internal.h:1083
float ItemWidthDefault
Definition: imgui_internal.h:1988
ImGuiPlotType
Definition: imgui_internal.h:883
ImGuiWindow * HoveredWindow
Definition: imgui_internal.h:1487
ImGuiInputReadMode
Definition: imgui_internal.h:901
ImGuiItemFlags InFlags
Definition: imgui_internal.h:1116
ImGuiTableColumnIdx SortOrder
Definition: imgui_internal.h:2153
ImGuiNavMoveFlags_
Definition: imgui_internal.h:1209
ImGuiID PopupId
Definition: imgui_internal.h:1956
static float ImFloorSigned(float f)
Definition: imgui_internal.h:434
ImGuiTextBuffer SettingsIniData
Definition: imgui_internal.h:1676
void ClipWithFull(const ImRect &r)
Definition: imgui_internal.h:506
T * ptr_from_offset(int off)
Definition: imgui_internal.h:663
Definition: imgui_internal.h:791
ImGuiWindow * CurrentWindow
Definition: imgui_internal.h:1486
IMGUI_API void TextEx(const char *text, const char *text_end=NULL, ImGuiTextFlags flags=0)
IMGUI_API bool ItemHoverable(const ImRect &bb, ImGuiID id)
ImGuiContextHook()
Definition: imgui_internal.h:1450
bool IsResetDisplayOrderRequest
Definition: imgui_internal.h:2295
Definition: imgui_internal.h:1174
Definition: imgui_internal.h:533
ImVector< ImGuiItemFlags > ItemFlagsStack
Definition: imgui_internal.h:1539
Definition: imgui_internal.h:1183
float WindowBorderSize
Definition: imgui_internal.h:1930
short BeginOrderWithinParent
Definition: imgui_internal.h:1953
IM_MSVC_RUNTIME_CHECKS_RESTORE IMGUI_API ImVec2 ImBezierCubicCalc(const ImVec2 &p1, const ImVec2 &p2, const ImVec2 &p3, const ImVec2 &p4, float t)
ImGuiNavLayer NavLayer
Definition: imgui_internal.h:1563
int BufCapacityA
Definition: imgui_internal.h:1014
IMGUI_API int TableGetHoveredColumn()
void set(T *data, T *data_end)
Definition: imgui_internal.h:571
bool SelectedAllMouseLock
Definition: imgui_internal.h:1019
IMGUI_API void TableSetupDrawChannels(ImGuiTable *table)
Definition: imgui_internal.h:1061
ImRect ClipRect
Definition: imgui_internal.h:1981
IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas *atlas, ImFont *font, ImFontConfig *font_config, float ascent, float descent)
ImSpanAllocator()
Definition: imgui_internal.h:598
IMGUI_API void PushColumnsBackground()
ImVec2 SizeFull
Definition: imgui_internal.h:1924
void * UserData
Definition: imgui_internal.h:1381
IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor)
int ImGuiItemFlags
Definition: imgui_internal.h:147
IMGUI_API void DebugNodeWindow(ImGuiWindow *window, const char *label)
ImGuiWindow * GetCurrentWindowRead()
Definition: imgui_internal.h:2378
IMGUI_API void UpdateMouseMovingWindowEndFrame()
ImVec2 ScrollTargetEdgeSnapDist
Definition: imgui_internal.h:1938
IMGUI_API int ImStrlenW(const ImWchar *str)
IMGUI_API int ImTextCountUtf8BytesFromChar(const char *in_text, const char *in_text_end)
ImVec2 TexUvWhitePixel
Definition: imgui_internal.h:702
Definition: imgui.h:2035
IMGUI_API void TableBeginCell(ImGuiTable *table, int column_n)
short TooltipOverrideCount
Definition: imgui_internal.h:1663
IMGUI_API void BringWindowToFocusFront(ImGuiWindow *window)
ImVector< unsigned char > DragDropPayloadBufHeap
Definition: imgui_internal.h:1627
static ImVec2 ImRotate(const ImVec2 &v, float cos_a, float sin_a)
Definition: imgui_internal.h:438
float ColumnsGivenWidth
Definition: imgui_internal.h:2239
ImGuiTableColumnIdx ResizedColumn
Definition: imgui_internal.h:2267
IMGUI_API ImGuiOldColumns * FindOrCreateColumns(ImGuiWindow *window, ImGuiID id)
IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, const ImVec2 &p)
ImVector< ImGuiStyleMod > StyleVarStack
Definition: imgui_internal.h:1536
bool WantApply
Definition: imgui_internal.h:1365
float FontSize
Definition: imgui_internal.h:704
ImVector< ImGuiWindowStackData > CurrentWindowStack
Definition: imgui_internal.h:1482
bool IsEnabled
Definition: imgui_internal.h:2157
ImGuiTableDrawChannelIdx DrawChannelUnfrozen
Definition: imgui_internal.h:2156
IMGUI_API void SetItemUsingMouseWheel()
int GetCursorPos() const
Definition: imgui_internal.h:1037
IMGUI_API ImGuiTableSettings * TableSettingsCreate(ImGuiID id, int columns_count)
IMGUI_API ImVec2 ImBezierCubicClosestPoint(const ImVec2 &p1, const ImVec2 &p2, const ImVec2 &p3, const ImVec2 &p4, const ImVec2 &p, int num_segments)
IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow *window, const ImRect &clip_rect)
static T ImLerp(T a, T b, float t)
Definition: imgui_internal.h:418
IMGUI_API void ClosePopupsOverWindow(ImGuiWindow *ref_window, bool restore_focus_to_window_under_popup)
voidpf void * buf
Definition: ioapi.h:39
IMGUI_API T RoundScalarWithFormatT(const char *format, ImGuiDataType data_type, T v)
ImGuiID ActiveIdPreviousFrame
Definition: imgui_internal.h:1521
IMGUI_API ImGuiKeyModFlags GetMergedKeyModFlags()
ImGuiCol Col
Definition: imgui_internal.h:943
ImRect ContentRegionRect
Definition: imgui_internal.h:1982
IMGUI_API bool TempInputScalar(const ImRect &bb, ImGuiID id, const char *label, ImGuiDataType data_type, void *p_data, const char *format, const void *p_clamp_min=NULL, const void *p_clamp_max=NULL)
ImGuiID SelectedTabId
Definition: imgui_internal.h:2075
bool NavDisableMouseHover
Definition: imgui_internal.h:1568
float GetHeight() const
Definition: imgui_internal.h:489
ImGuiStyleMod(ImGuiStyleVar idx, float v)
Definition: imgui_internal.h:953
ImGuiID NavJustMovedToFocusScopeId
Definition: imgui_internal.h:1558
float WindowRounding
Definition: imgui_internal.h:1929
bool FocusableItemRegister(ImGuiWindow *window, ImGuiID id)
Definition: imgui_internal.h:2486
IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2 &ref_pos, const ImVec2 &size, ImGuiDir *last_dir, const ImRect &r_outer, const ImRect &r_avoid, ImGuiPopupPositionPolicy policy)
ImGuiID ReorderRequestTabId
Definition: imgui_internal.h:2091
Definition: imgui_internal.h:854
float BackupCurrLineTextBaseOffset
Definition: imgui_internal.h:979
ImGuiLastItemData ParentLastItemDataBackup
Definition: imgui_internal.h:1146
Definition: imgui_internal.h:789
IMGUI_API void SetHoveredID(ImGuiID id)
Definition: imgui.h:2049
Definition: imgui_internal.h:1228
Definition: imgui_internal.h:787
ImRect DisplayRect
Definition: imgui_internal.h:1120
IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold=-1.0f)
ImRect GetBuildWorkRect() const
Definition: imgui_internal.h:1349
ImGuiID TempInputId
Definition: imgui_internal.h:1648
IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow *window, ImGuiNavMoveFlags move_flags)
ImVec1 HostBackupColumnsOffset
Definition: imgui_internal.h:2321
IMGUI_API void MarkIniSettingsDirty()
IMGUI_API void ClearIniSettings()
ImGuiWindow * Window
Definition: imgui_internal.h:1047
ImVec2 HostBackupPrevLineSize
Definition: imgui_internal.h:2318
ImS32 NameOffset
Definition: imgui_internal.h:2061
ImVec2 WindowsHoverPadding
Definition: imgui_internal.h:1485
~ImGuiViewportP()
Definition: imgui_internal.h:1339
IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char *label, const char *label_end=NULL)
Definition: imgui_internal.h:815
ImU64 EnabledMaskByIndex
Definition: imgui_internal.h:2205
IMGUI_API void ShadeVertsLinearUV(ImDrawList *draw_list, int vert_start_idx, int vert_end_idx, const ImVec2 &a, const ImVec2 &b, const ImVec2 &uv_a, const ImVec2 &uv_b, bool clamp)
ImDrawListSplitter Splitter
Definition: imgui_internal.h:1299
short BeginOrderWithinContext
Definition: imgui_internal.h:1954
ImGuiStyle Style
Definition: imgui_internal.h:1462
Definition: imgui_internal.h:827
int SettingsOffset
Definition: imgui_internal.h:1992
Definition: imgui_internal.h:828
ImVec1 BackupIndent
Definition: imgui_internal.h:976
ImRect GetMainRect() const
Definition: imgui_internal.h:1347
ImGuiActivateFlags_
Definition: imgui_internal.h:1169
ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent
Definition: imgui_internal.h:2283
ImRect ClipRect
Definition: imgui_internal.h:2139
int ImGuiTooltipFlags
Definition: imgui_internal.h:158
IMGUI_API const char * FindRenderedTextEnd(const char *text, const char *text_end=NULL)
Definition: imgui_internal.h:1184
T * begin()
Definition: imgui_internal.h:577
Definition: imgui_internal.h:906
Definition: imgui_internal.h:1414
ImGuiStorage Map
Definition: imgui_internal.h:616
void Clear()
Definition: imgui_internal.h:627
ImGuiTableFlags SaveFlags
Definition: imgui_internal.h:2356
void * GetSpanPtrEnd(int n)
Definition: imgui_internal.h:603
ImS16 InstanceCurrent
Definition: imgui_internal.h:2214
Definition: imgui_internal.h:1198
ImVector< char > TextA
Definition: imgui_internal.h:1011
ImGuiInputTextState * GetInputTextState(ImGuiID id)
Definition: imgui_internal.h:2716
int GetRedoAvailCount() const
Definition: imgui_internal.h:1029
ImGuiID DragDropTargetId
Definition: imgui_internal.h:1620
int CurrFrameVisible
Definition: imgui_internal.h:2078
void FocusableItemUnregister(ImGuiWindow *window)
Definition: imgui_internal.h:2487
ImGuiTableColumnIdx LeftMostStretchedColumn
Definition: imgui_internal.h:2274
Definition: imgui_internal.h:1150
Definition: imgui.h:2134
ImU8 IsEnabled
Definition: imgui_internal.h:2337
Definition: imgui.h:2397
int size() const
Definition: imgui_internal.h:656
IMGUI_API ImU64 ImFileGetSize(ImFileHandle file)
ImU32 ColorEditLastColor
Definition: imgui_internal.h:1652
bool Collapsed
Definition: imgui_internal.h:1364
ImGuiInputTextCallback UserCallback
Definition: imgui_internal.h:1022
ImVec2 ScrollVal
Definition: imgui_internal.h:1081
char PlatformLocaleDecimalPoint
Definition: imgui_internal.h:1671
ImRect Bg2ClipRectForDrawCmd
Definition: imgui_internal.h:2250
IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect &rect_rel)
IMGUI_API void GcCompactTransientMiscBuffers()
ImU32 TotalWidth
Definition: imgui_internal.h:989
IMGUI_API void MarkItemEdited(ImGuiID id)
Definition: imgui_internal.h:958
Definition: imgui_internal.h:1219
ImGuiTableColumnIdx LastResizedColumn
Definition: imgui_internal.h:2268
Definition: imgui_internal.h:753
bool Contains(const T *p) const
Definition: imgui_internal.h:626
Definition: imgui.h:262
ImU8 SortDirection
Definition: imgui_internal.h:2168
ImStb::STB_TexteditState Stb
Definition: imgui_internal.h:1016
ImGuiTableDrawChannelIdx DrawChannelCurrent
Definition: imgui_internal.h:2154
IMGUI_API void TableRemove(ImGuiTable *table)
ImPool< ImGuiTable > Tables
Definition: imgui_internal.h:1633
IMGUI_API void PopColumnsBackground()
Definition: imgui_internal.h:895
Definition: imgui_internal.h:742
bool ActiveIdHasBeenPressedBefore
Definition: imgui_internal.h:1510
ImGuiID ID
Definition: imgui_internal.h:1920
ImVec2 IdealMaxPos
Definition: imgui_internal.h:1877
IMGUI_API const char * ImParseFormatFindEnd(const char *format)
Definition: imgui_internal.h:1440
ImGuiTabItemFlags Flags
Definition: imgui_internal.h:2055
Definition: imgui.h:2741
ImRect HostInitialClipRect
Definition: imgui_internal.h:1295
IMGUI_API const char * ImStrSkipBlank(const char *str)
float RowMinHeight
Definition: imgui_internal.h:2218
ImVec2 BuildWorkOffsetMin
Definition: imgui_internal.h:1335
IMGUI_API bool DragBehavior(ImGuiID id, ImGuiDataType data_type, void *p_v, float v_speed, const void *p_min, const void *p_max, const char *format, ImGuiSliderFlags flags)
IMGUI_API void TableDrawBorders(ImGuiTable *table)
IMGUI_API ImGuiTableSettings * TableGetBoundSettings(ImGuiTable *table)
ImVec2 ContentSizeIdeal
Definition: imgui_internal.h:1926
bool Collapsed
Definition: imgui_internal.h:1944
IMGUI_API void TableSortSpecsBuild(ImGuiTable *table)
bool NavDisableHighlight
Definition: imgui_internal.h:1567
T * end()
Definition: imgui_internal.h:579
ImGuiKeyModFlags NavJustMovedToKeyMods
Definition: imgui_internal.h:1559
#define IM_ASSERT(_EXPR)
Definition: imgui.h:87
bool IsInverted() const
Definition: imgui_internal.h:508
ImGuiID ActiveIdIsAlive
Definition: imgui_internal.h:1505
ImU16 OffsetLabel
Definition: imgui_internal.h:993
Definition: imgui_internal.h:746
IMGUI_API float GetColumnNormFromOffset(const ImGuiOldColumns *columns, float offset)
IMGUI_API ImGuiTableSettings * TableSettingsFindByID(ImGuiID id)
void(* ImGuiSizeCallback)(ImGuiSizeCallbackData *data)
Definition: imgui.h:255
ImVector< ImGuiPopupData > OpenPopupStack
Definition: imgui_internal.h:1541
float ContentWidth
Definition: imgui_internal.h:2060
#define IMGUI_API
Definition: imgui.h:78
IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T *v, float v_speed, T v_min, T v_max, const char *format, ImGuiSliderFlags flags)
IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawList *draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
void SetArenaBasePtr(void *base_ptr)
Definition: imgui_internal.h:601
int LastFrameActive
Definition: imgui_internal.h:1986
IMGUI_API bool TabItemEx(ImGuiTabBar *tab_bar, const char *label, bool *p_open, ImGuiTabItemFlags flags)
ImVec2 CurrLineSize
Definition: imgui_internal.h:1878
IMGUI_API ImRect GetWindowScrollbarRect(ImGuiWindow *window, ImGuiAxis axis)
ImGuiTableColumnIdx Index
Definition: imgui_internal.h:2333
Definition: imgui_internal.h:892
Definition: imgui_internal.h:1182
bool MemoryCompacted
Definition: imgui_internal.h:2008
IMGUI_API bool SliderBehaviorT(const ImRect &bb, ImGuiID id, ImGuiDataType data_type, T *v, T v_min, T v_max, const char *format, ImGuiSliderFlags flags, ImRect *out_grab_bb)
#define ImFabs(X)
Definition: imgui_internal.h:387
Definition: imgui_internal.h:1156
Definition: imgui_internal.h:547
int ShowTablesRectsType
Definition: imgui_internal.h:1399
ImWchar16 ImWchar
Definition: imgui.h:250
IMGUI_API void TabBarQueueReorder(ImGuiTabBar *tab_bar, const ImGuiTabItem *tab, int offset)
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond=0)
float WidthAllTabsIdeal
Definition: imgui_internal.h:2084
Definition: imgui_internal.h:760
bool ActiveIdHasBeenEditedBefore
Definition: imgui_internal.h:1511
ImVector< char > InitialTextA
Definition: imgui_internal.h:1012
ImGuiID NavFocusScopeIdCurrent
Definition: imgui_internal.h:1890
Definition: imgui_internal.h:2308
bool GcCompactAll
Definition: imgui_internal.h:1474
IMGUI_API bool BeginChildEx(const char *name, ImGuiID id, const ImVec2 &size_arg, bool border, ImGuiWindowFlags flags)
Definition: imgui_internal.h:1213
ImGuiLogType
Definition: imgui_internal.h:866
IMGUI_API ImDrawList * GetBackgroundDrawList()
int CurLenW
Definition: imgui_internal.h:1009
ImVec2 ContentSize
Definition: imgui_internal.h:1925
ImVec2 GetSize() const
Definition: imgui_internal.h:487
IMGUI_API void TableGcCompactTransientBuffers(ImGuiTable *table)
ImRect BarRect
Definition: imgui_internal.h:2080
bool IsVisibleX
Definition: imgui_internal.h:2160
float NavInputs[ImGuiNavInput_COUNT]
Definition: imgui.h:1897
const char * LogNextPrefix
Definition: imgui_internal.h:1688
float Width
Definition: imgui_internal.h:1103
ImVec2 GetBR() const
Definition: imgui_internal.h:494
Definition: imgui_internal.h:1326
ImGuiMouseCursor MouseCursor
Definition: imgui_internal.h:1609
Definition: imgui_internal.h:1265
ImGuiID GetActiveID()
Definition: imgui_internal.h:2449
IMGUI_API void DebugNodeTabBar(ImGuiTabBar *tab_bar, const char *label)
bool WithinEndChild
Definition: imgui_internal.h:1473
Definition: imgui_internal.h:757
IMGUI_API int ImStrnicmp(const char *str1, const char *str2, size_t count)
bool WantClose
Definition: imgui_internal.h:2064
Definition: imgui_internal.h:747
void ClearText()
Definition: imgui_internal.h:1026
ImGuiTableColumnIdx FreezeColumnsRequest
Definition: imgui_internal.h:2279
static void ImSwap(T &a, T &b)
Definition: imgui_internal.h:419
ImVector< ImDrawList * > Layers[2]
Definition: imgui_internal.h:722
IMGUI_API bool DataTypeApplyOpFromText(const char *buf, const char *initial_value_buf, ImGuiDataType data_type, void *p_data, const char *format)
Definition: imgui_internal.h:825
IMGUI_API ImU64 ImFileRead(void *data, ImU64 size, ImU64 count, ImFileHandle file)
Definition: imgui_internal.h:1071
ImGuiTabBarFlags Flags
Definition: imgui_internal.h:2073
IMGUI_API void SetWindowPos(const ImVec2 &pos, ImGuiCond cond=0)
void SelectAll()
Definition: imgui_internal.h:1040
ImGuiID BackupActiveIdIsAlive
Definition: imgui_internal.h:980
char * Name
Definition: imgui_internal.h:1919
static float ImLengthSqr(const ImVec2 &lhs)
Definition: imgui_internal.h:430
ImU32 ActiveIdUsingNavInputMask
Definition: imgui_internal.h:1515
Definition: imgui_internal.h:1067
IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList *draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding=0.0f, ImDrawFlags flags=0)
Definition: imgui_internal.h:2195
static float ImDot(const ImVec2 &a, const ImVec2 &b)
Definition: imgui_internal.h:437
IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow *window)
Definition: imgui_internal.h:1222
Definition: imgui_internal.h:1095
ImGuiWindow * NavWindowingListWindow
Definition: imgui_internal.h:1595
ImGuiNavLayer
Definition: imgui_internal.h:1226
bool WithinFrameScopeWithImplicitWindow
Definition: imgui_internal.h:1472
int GetDrawListCount() const
Definition: imgui_internal.h:726
int StackLevel
Definition: imgui_internal.h:1428
void ImBitArraySetBit(ImU32 *arr, int n)
Definition: imgui_internal.h:516
IMGUI_API float ScaleRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size)
ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen
Definition: imgui_internal.h:2284
bool ActiveIdAllowOverlap
Definition: imgui_internal.h:1508
ImU8 SortDirectionsAvailCount
Definition: imgui_internal.h:2169
IMGUI_API bool ButtonBehavior(const ImRect &bb, ImGuiID id, bool *out_hovered, bool *out_held, ImGuiButtonFlags flags=0)
Definition: imgui.h:1387
IMGUI_API void ImStrncpy(char *dst, const char *src, size_t count)
ImVec2 PosVal
Definition: imgui_internal.h:1077
ImVector< ImGuiShrinkWidthItem > ShrinkWidthBuffer
Definition: imgui_internal.h:1642
IMGUI_API void DebugNodeDrawList(ImGuiWindow *window, const ImDrawList *draw_list, const char *label)
Definition: imgui_internal.h:1205
ImGuiTableColumnIdx HoveredColumnBorder
Definition: imgui_internal.h:2265
IMGUI_API int ImStricmp(const char *str1, const char *str2)
IMGUI_API void RenderText(ImVec2 pos, const char *text, const char *text_end=NULL, bool hide_text_after_hash=true)
double Time
Definition: imgui_internal.h:1467
IMGUI_API void ItemInputable(ImGuiWindow *window, ImGuiID id)
ImDrawListFlags InitialFlags
Definition: imgui_internal.h:708
int FrameCountRendered
Definition: imgui_internal.h:1470
Definition: imgui_internal.h:971
IMGUI_API void OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags=ImGuiPopupFlags_None)
int GetTabOrder(const ImGuiTabItem *tab) const
Definition: imgui_internal.h:2105
bool Contains(const ImVec2 &p) const
Definition: imgui_internal.h:495
ImGuiID ID
Definition: imgui_internal.h:2074
IMGUI_API void SetWindowSize(const ImVec2 &size, ImGuiCond cond=0)
Definition: imgui_internal.h:1259
IMGUI_API void FocusWindow(ImGuiWindow *window)
float NavWindowingTimer
Definition: imgui_internal.h:1596
Definition: imgui_internal.h:1256
IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate)
Definition: imgui_internal.h:560
ImVec2 FramePadding
Definition: imgui_internal.h:2100
bool IsBeingResized
Definition: imgui_internal.h:1288
void Expand(const float amount)
Definition: imgui_internal.h:500
void TranslateX(float dx)
Definition: imgui_internal.h:503
#define IM_COL32(R, G, B, A)
Definition: imgui.h:2234
ImGuiTableColumnIdx FreezeRowsCount
Definition: imgui_internal.h:2278
ImPoolIdx AliveCount
Definition: imgui_internal.h:618
int CurrentTableStackIdx
Definition: imgui_internal.h:1632
IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void *data_id, const void *data_id_end)
void Floor()
Definition: imgui_internal.h:507
ImGuiWindow * RootWindowForNav
Definition: imgui_internal.h:2000
IMGUI_API void TableSettingsInstallHandler(ImGuiContext *context)
ImRect Bg0ClipRectForDrawCmd
Definition: imgui_internal.h:2249
ImVec4 ClipRectFullscreen
Definition: imgui_internal.h:707
ImS16 BeginOrder
Definition: imgui_internal.h:2062
IMGUI_API const char * ImStrchrRange(const char *str_begin, const char *str_end, char c)
IMGUI_API bool ImTriangleContainsPoint(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, const ImVec2 &p)
IMGUI_API bool IsWindowChildOf(ImGuiWindow *window, ImGuiWindow *potential_parent, bool popup_hierarchy)
ImGuiNextWindowDataFlags Flags
Definition: imgui_internal.h:1073
Definition: imgui_internal.h:848
ImFont * GetDefaultFont()
Definition: imgui_internal.h:2401
ImGuiTableColumnSortSpecs SortSpecsSingle
Definition: imgui_internal.h:2257
ImU32 NextTotalWidth
Definition: imgui_internal.h:990
ImSpan< ImGuiTableColumn > Columns
Definition: imgui_internal.h:2201
ImS16 IndexDuringLayout
Definition: imgui_internal.h:2063
ImGuiKeyModFlags NavMoveKeyMods
Definition: imgui_internal.h:1581
ImGuiID UserID
Definition: imgui_internal.h:2140
ImGuiNavLayer NavLayerCurrent
Definition: imgui_internal.h:1887
int LastFrameActive
Definition: imgui_internal.h:2210
ImGuiTableColumnIdx ColumnsCount
Definition: imgui_internal.h:2358
const ImVec4 * TexUvLines
Definition: imgui_internal.h:714
Definition: imgui_internal.h:1390
ImGuiTooltipFlags_
Definition: imgui_internal.h:852
ImGuiTableColumnIdx DeclColumnsCount
Definition: imgui_internal.h:2263
ImGuiWindow * NavLastChildNavWindow
Definition: imgui_internal.h:2002
IMGUI_API bool SplitterBehavior(const ImRect &bb, ImGuiID id, ImGuiAxis axis, float *size1, float *size2, float min_size1, float min_size2, float hover_extend=0.0f, float hover_visibility_delay=0.0f)
ImVector< float > ItemWidthStack
Definition: imgui_internal.h:1912
ImGuiItemStatusFlags_
Definition: imgui_internal.h:751
IMGUI_API ImGuiTableTempData()
Definition: imgui_internal.h:2325
IMGUI_API void BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags)
float FontWindowScale
Definition: imgui_internal.h:1991
ImVec2ih(short _x, short _y)
Definition: imgui_internal.h:470
float Offset
Definition: imgui_internal.h:2058
IMGUI_API float TableGetMaxColumnWidth(const ImGuiTable *table, int column_n)
ImGuiNextItemData NextItemData
Definition: imgui_internal.h:1530
Definition: imgui_internal.h:1257
IMGUI_API void RenderArrow(ImDrawList *draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale=1.0f)
Definition: imgui_internal.h:885
Definition: imgui.h:1823
Definition: imgui_internal.h:863
int Offsets[CHUNKS]
Definition: imgui_internal.h:595
IMGUI_API bool TempInputText(const ImRect &bb, ImGuiID id, const char *label, char *buf, int buf_size, ImGuiInputTextFlags flags)
ImGuiID ID
Definition: imgui_internal.h:1115
static T ImMax(T lhs, T rhs)
Definition: imgui_internal.h:416
ImGuiTableColumnIdx AutoFitSingleColumn
Definition: imgui_internal.h:2266
ImGuiWindow * Window
Definition: imgui_internal.h:1235
Definition: imgui.h:1118
const char * ScanFmt
Definition: imgui_internal.h:929
ImFileHandle LogFile
Definition: imgui_internal.h:1686
Definition: imgui_internal.h:987
static T ImAddClampOverflow(T a, T b, T mn, T mx)
Definition: imgui_internal.h:420
int ImGuiNavDirSourceFlags
Definition: imgui_internal.h:151
IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas *atlas)
IMGUI_API void TableSetColumnWidthAutoSingle(ImGuiTable *table, int column_n)
ImGuiWindow * RootWindowPopupTree
Definition: imgui_internal.h:1998
Definition: imgui_internal.h:840
void * TestEngine
Definition: imgui_internal.h:1476
float ResizeLockMinContentsX2
Definition: imgui_internal.h:2242
ImU32 BgColor
Definition: imgui_internal.h:2190
ImGuiID DebugHookIdInfo
Definition: imgui_internal.h:1495
ImVec2 PlatformImePos
Definition: imgui_internal.h:1669
void Clear()
Definition: imgui_internal.h:551
void ClearBit(int n)
Definition: imgui_internal.h:541
ImGuiStackTool DebugStackTool
Definition: imgui_internal.h:1700
Definition: imgui_internal.h:740
void CursorAnimReset()
Definition: imgui_internal.h:1033
ImVector< ImWchar > TextW
Definition: imgui_internal.h:1010
IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow *window, ImGuiAxis axis)
Definition: imgui_internal.h:777
IMGUI_API void LogSetNextTextDecoration(const char *prefix, const char *suffix)
short y
Definition: imgui_internal.h:468
IMGUI_API ImVec2 ImBezierQuadraticCalc(const ImVec2 &p1, const ImVec2 &p2, const ImVec2 &p3, float t)
IMGUI_API void TablePushBackgroundChannel()
ImGuiCond SizeCond
Definition: imgui_internal.h:1075
IMGUI_API void DebugNodeViewport(ImGuiViewportP *viewport)
Definition: imgui_internal.h:755
ImGuiViewportP()
Definition: imgui_internal.h:1338
IMGUI_API void ScrollToRect(ImGuiWindow *window, const ImRect &rect, ImGuiScrollFlags flags=0)
void SetBit(int n)
Definition: imgui_internal.h:553
int LogDepthToExpand
Definition: imgui_internal.h:1693
Definition: imgui_internal.h:1180
Definition: imgui_internal.h:745
IMGUI_API void PopItemFlag()
Definition: imgui_internal.h:799
signed int ImS32
Definition: imgui.h:229
IMGUI_API void TableMergeDrawChannels(ImGuiTable *table)
ImGuiID VisibleTabId
Definition: imgui_internal.h:2077
ImS8 ImGuiTableColumnIdx
Definition: imgui_internal.h:2122
ImDrawDataBuilder DrawDataBuilder
Definition: imgui_internal.h:1331
ImU32 BorderColorLight
Definition: imgui_internal.h:2226
int ImGuiScrollFlags
Definition: imgui_internal.h:155
unsigned int ImGuiID
Definition: imgui.h:224
ImGuiTableFlags Flags
Definition: imgui_internal.h:2198
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void *user_data=NULL)
ImDrawList * DrawList
Definition: imgui_internal.h:1994
IMGUI_API void TableDrawContextMenu(ImGuiTable *table)
bool NavMoveScoringItems
Definition: imgui_internal.h:1577
ImU64 ActiveIdUsingKeyInputMask
Definition: imgui_internal.h:1516
static float ImInvLength(const ImVec2 &lhs, float fail_value)
Definition: imgui_internal.h:432
Definition: imgui_internal.h:1917
IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio=0.5f)
bool LogLineFirstItem
Definition: imgui_internal.h:1691
IMGUI_API ImGuiTabItem * TabBarFindTabByID(ImGuiTabBar *tab_bar, ImGuiID tab_id)
ImVector< ImGuiWindow * > WindowsTempSortBuffer
Definition: imgui_internal.h:1481
Definition: imgui_internal.h:738
Definition: imgui_internal.h:941
IMGUI_API bool CheckboxFlagsT(const char *label, T *flags, T flags_value)
bool Initialized
Definition: imgui_internal.h:1459
bool NavWindowingToggleLayer
Definition: imgui_internal.h:1598
bool NavInitRequest
Definition: imgui_internal.h:1572
Definition: imgui_internal.h:1212
bool WantCollapseToggle
Definition: imgui_internal.h:1945
ImGuiWindow * ActiveIdPreviousFrameWindow
Definition: imgui_internal.h:1524
IMGUI_API void ImTriangleBarycentricCoords(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, const ImVec2 &p, float &out_u, float &out_v, float &out_w)
float ScrollingRectMinX
Definition: imgui_internal.h:2089
IMGUI_API bool ScrollbarEx(const ImRect &bb, ImGuiID id, ImGuiAxis axis, float *p_scroll_v, float avail_v, float contents_v, ImDrawFlags flags)
Definition: imgui.h:2013
IMGUI_API void DebugNodeStorage(ImGuiStorage *storage, const char *label)
float FramerateSecPerFrameAccum
Definition: imgui_internal.h:1706
int WantCaptureKeyboardNextFrame
Definition: imgui_internal.h:1708
int CurrIdx
Definition: imgui_internal.h:594
ImGuiTableSortSpecs SortSpecs
Definition: imgui_internal.h:2259
ImGuiMetricsConfig DebugMetricsConfig
Definition: imgui_internal.h:1699
float z
Definition: imgui.h:277
IMGUI_API void RenderTextClippedEx(ImDrawList *draw_list, const ImVec2 &pos_min, const ImVec2 &pos_max, const char *text, const char *text_end, const ImVec2 *text_size_if_known, const ImVec2 &align=ImVec2(0, 0), const ImRect *clip_rect=NULL)
char Desc[58]
Definition: imgui_internal.h:1419
ImGuiOldColumnFlags Flags
Definition: imgui_internal.h:1286
ImU16 OffsetShortcut
Definition: imgui_internal.h:994
ImGuiTableColumnIdx PrevEnabledColumn
Definition: imgui_internal.h:2151
Definition: imgui_internal.h:870
IMGUI_API void RenderRectFilledRangeH(ImDrawList *draw_list, const ImRect &rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding)
void DebugDrawItemRect(ImU32 col=IM_COL32(255, 0, 0, 255))
Definition: imgui_internal.h:2738
int ColumnsCount
Definition: imgui_internal.h:2211
ImGuiPtrOrIndex(void *ptr)
Definition: imgui_internal.h:1161
int FramerateSecPerFrameCount
Definition: imgui_internal.h:1705
ImS8 HiddenFramesCanSkipItems
Definition: imgui_internal.h:1961
void(* ApplyAllFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler)
Definition: imgui_internal.h:1379
const char * LogNextSuffix
Definition: imgui_internal.h:1689
bool SliderCurrentAccumDirty
Definition: imgui_internal.h:1656
Definition: imgui_internal.h:829
short NavLayersActiveMask
Definition: imgui_internal.h:1888
ImGuiInputTextState InputTextState
Definition: imgui_internal.h:1646
IMGUI_API bool NavMoveRequestButNoResultYet()
ImGuiWindow * ParentWindow
Definition: imgui_internal.h:1996
IMGUI_API void SetNextWindowScroll(const ImVec2 &scroll)
Definition: imgui.h:2812
bool NavMoveForwardToNextFrame
Definition: imgui_internal.h:1578
ImGuiID HookIdNext
Definition: imgui_internal.h:1681
ImBitArray()
Definition: imgui_internal.h:536
float w
Definition: imgui.h:277
ImVec2 Size
Definition: imgui.h:2816
int CurrentColumn
Definition: imgui_internal.h:2213
int LastFrameSelected
Definition: imgui_internal.h:2057
ImRect()
Definition: imgui_internal.h:481
ImGuiTableColumnIdx ReorderColumn
Definition: imgui_internal.h:2270
int LogDepthRef
Definition: imgui_internal.h:1692
ImGuiID ChildId
Definition: imgui_internal.h:1933
IMGUI_API ~ImGuiTable()
Definition: imgui_internal.h:2302
Definition: imgui_internal.h:1203
float InitStretchWeightOrWidth
Definition: imgui_internal.h:2138
IMGUI_API bool IsWindowNavFocusable(ImGuiWindow *window)
ImGuiTableColumnIdx IndexWithinEnabledSet
Definition: imgui_internal.h:2150
IMGUI_API void TableUpdateBorders(ImGuiTable *table)
IMGUI_API T ScaleValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size)
float ColumnsAutoFitWidth
Definition: imgui_internal.h:2240
bool TextAIsValid
Definition: imgui_internal.h:1013
Definition: imgui_internal.h:793
IMGUI_API bool IsWindowAbove(ImGuiWindow *potential_above, ImGuiWindow *potential_below)
IMGUI_API void PushOverrideID(ImGuiID id)
Definition: imgui_internal.h:756
size_t Size
Definition: imgui_internal.h:926
IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow *under_this_window, ImGuiWindow *ignore_window)
float ScrollingAnim
Definition: imgui_internal.h:2085
ImGuiStackTool()
Definition: imgui_internal.h:1432
void(* ImGuiErrorLogCallback)(void *user_data, const char *fmt,...)
Definition: imgui_internal.h:160
Definition: imgui.h:955
static T ImSubClampOverflow(T a, T b, T mn, T mx)
Definition: imgui_internal.h:421
float DragDropAcceptIdCurrRectSurface
Definition: imgui_internal.h:1622
ImGuiTableFlags SettingsLoadedFlags
Definition: imgui_internal.h:2208
float SliderCurrentAccum
Definition: imgui_internal.h:1655
ImGuiID NavId
Definition: imgui_internal.h:1549
IMGUI_API void TableFixColumnSortDirection(ImGuiTable *table, ImGuiTableColumn *column)
const char * Name
Definition: imgui_internal.h:927
ImGuiOldColumnFlags Flags
Definition: imgui_internal.h:1277
ImGuiWindow * HoveredWindowUnderMovingWindow
Definition: imgui_internal.h:1488
ImVector< ImGuiWindow * > WindowsFocusOrder
Definition: imgui_internal.h:1480
ImGuiID ID
Definition: imgui_internal.h:1008
IMGUI_API void * ImFileLoadToMemory(const char *filename, const char *mode, size_t *out_file_size=NULL, int padding_bytes=0)
Definition: imgui_internal.h:862
ImVec2ih HitTestHoleOffset
Definition: imgui_internal.h:1984
ImGuiSelectableFlagsPrivate_
Definition: imgui_internal.h:819
IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas *atlas)
int DragDropMouseButton
Definition: imgui_internal.h:1617
float PrevTabsContentsHeight
Definition: imgui_internal.h:2082
static bool ImCharIsBlankA(char c)
Definition: imgui_internal.h:326
IMGUI_API float TableGetHeaderRowHeight()
ImGuiStackSizes StackSizesOnBegin
Definition: imgui_internal.h:1147
bool ShowTablesRects
Definition: imgui_internal.h:1395
float DimBgRatio
Definition: imgui_internal.h:1608
ImGuiActivateFlags NavActivateFlags
Definition: imgui_internal.h:1555
Definition: imgui_internal.h:822
IMGUI_API void SetScrollY(float scroll_y)
IMGUI_API bool IsClippedEx(const ImRect &bb, ImGuiID id)
int GetSelectionStart() const
Definition: imgui_internal.h:1038
IMGUI_API void CallContextHooks(ImGuiContext *context, ImGuiContextHookType type)
IMGUI_API int ImTextStrFromUtf8(ImWchar *out_buf, int out_buf_size, const char *in_text, const char *in_text_end, const char **in_remaining=NULL)
Definition: imgui_internal.h:842
ImGuiItemFlags_
Definition: imgui_internal.h:736
static int ImModPositive(int a, int b)
Definition: imgui_internal.h:436
bool SkipItems
Definition: imgui_internal.h:1946
Definition: imgui.h:1334
IMGUI_API void LogRenderedText(const ImVec2 *ref_pos, const char *text, const char *text_end=NULL)
Definition: imgui_internal.h:843
signed char ResizeBorderHeld
Definition: imgui_internal.h:1951
Definition: imgui_internal.h:1267
ImGuiTableColumnIdx DisplayOrder
Definition: imgui_internal.h:2149
ImGuiTableColumnIdx LeftMostEnabledColumn
Definition: imgui_internal.h:2272
int GetArenaSizeInBytes()
Definition: imgui_internal.h:600
ImVector< ImGuiPtrOrIndex > CurrentTabBarStack
Definition: imgui_internal.h:1641
ImGuiID NextSelectedTabId
Definition: imgui_internal.h:2076
Definition: imgui_internal.h:2039
bool DragCurrentAccumDirty
Definition: imgui_internal.h:1657
ImVec4 ToVec4() const
Definition: imgui_internal.h:509
IMGUI_API void Scrollbar(ImGuiAxis axis)
short SizeOfDisabledStack
Definition: imgui_internal.h:1135
IMGUI_API void NavInitWindow(ImGuiWindow *window, bool force_reinit)
#define IM_MSVC_RUNTIME_CHECKS_OFF
Definition: imgui.h:114
bool TabsAddedNew
Definition: imgui_internal.h:2096
ImVec2 Max
Definition: imgui_internal.h:479
IMGUI_API ImU64 ImFileWrite(const void *data, ImU64 size, ImU64 count, ImFileHandle file)
int size() const
Definition: imgui_internal.h:572
float ScrollingTargetDistToVisibility
Definition: imgui_internal.h:2087
ImVector< ImGuiID > IDStack
Definition: imgui_internal.h:1971
IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding=0.0f)
Definition: imgui_internal.h:880
IMGUI_API void ItemSize(const ImVec2 &size, float text_baseline_y=-1.0f)
IMGUI_API ImGuiID GetWindowResizeCornerID(ImGuiWindow *window, int n)
short x
Definition: imgui_internal.h:468
const T * begin() const
Definition: imgui_internal.h:578
ImGuiTabItemFlagsPrivate_
Definition: imgui_internal.h:2044
IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags=0)
ImGuiTableColumnIdx NextEnabledColumn
Definition: imgui_internal.h:2152
IMGUI_API bool IsDragDropPayloadBeingAccepted()
IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
T * GetOrAddByKey(ImGuiID key)
Definition: imgui_internal.h:625
IMGUI_API void TableSaveSettings(ImGuiTable *table)
ImVec2 GetCenter() const
Definition: imgui_internal.h:486
FILE * ImFileHandle
Definition: imgui_internal.h:372
void(* WriteAllFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler, ImGuiTextBuffer *out_buf)
Definition: imgui_internal.h:1380
int PrevFrameVisible
Definition: imgui_internal.h:2079
float InnerWidth
Definition: imgui_internal.h:2238
Definition: imgui_internal.h:2129
IM_MSVC_RUNTIME_CHECKS_RESTORE bool ImBitArrayTestBit(const ImU32 *arr, int n)
Definition: imgui_internal.h:514
ImGuiWindow * InnerWindow
Definition: imgui_internal.h:2254
ImVec2ih HitTestHoleSize
Definition: imgui_internal.h:1983
Definition: imgui_internal.h:878
bool IsVisibleY
Definition: imgui_internal.h:2161
bool HasSelection() const
Definition: imgui_internal.h:1035
void ImBitArraySetBitRange(ImU32 *arr, int n, int n2)
Definition: imgui_internal.h:517
ImGuiID GetFocusID()
Definition: imgui_internal.h:2450
Definition: imgui_internal.h:2765
ImDrawData DrawDataP
Definition: imgui_internal.h:1330
Definition: imgui_internal.h:1283
ImGuiDragDropFlags DragDropSourceFlags
Definition: imgui_internal.h:1615
IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar *in_text, const ImWchar *in_text_end)
ImVec2 Min
Definition: imgui_internal.h:478
Definition: imgui_internal.h:872
int OpenFrameCount
Definition: imgui_internal.h:1049
float OffsetNormBeforeResize
Definition: imgui_internal.h:1276
ImRect HostBackupParentWorkRect
Definition: imgui_internal.h:1297
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border=true, float rounding=0.0f)
ImRect(float x1, float y1, float x2, float y2)
Definition: imgui_internal.h:484
IMGUI_API float CalcWrapWidthForPos(const ImVec2 &pos, float wrap_pos_x)
Definition: imgui_internal.h:1440
ImRect InnerClipRect
Definition: imgui_internal.h:2247
IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList *out_draw_list, const ImDrawList *draw_list, const ImDrawCmd *draw_cmd, bool show_mesh, bool show_aabb)
ImVec2 WorkOffsetMin
Definition: imgui_internal.h:1333
int ImGuiSeparatorFlags
Definition: imgui_internal.h:156
ImGuiTableColumnIdx RightMostEnabledColumn
Definition: imgui_internal.h:2273
ImGuiStorage * StateStorage
Definition: imgui_internal.h:1901
bool BackupHoveredIdIsAlive
Definition: imgui_internal.h:982
ImU8 SortDirectionsAvailMask
Definition: imgui_internal.h:2170
ImGuiWindow * Window
Definition: imgui_internal.h:1145
ImVec2ih Size
Definition: imgui_internal.h:1363
float MaxX
Definition: imgui_internal.h:2134
IMGUI_API int ImTextStrToUtf8(char *out_buf, int out_buf_size, const ImWchar *in_text, const ImWchar *in_text_end)
Definition: imgui_internal.h:1189
IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem *items, int count, float width_excess)
int HostBackupItemWidthStackSize
Definition: imgui_internal.h:2323
void Translate(const ImVec2 &d)
Definition: imgui_internal.h:502
#define IM_FLOOR(_VAL)
Definition: imgui_internal.h:237
float ContentMaxXHeadersUsed
Definition: imgui_internal.h:2146
ImVec2 BackupCursorPos
Definition: imgui_internal.h:974
IMGUI_API int ImFormatString(char *buf, size_t buf_size, const char *fmt,...) IM_FMTARGS(3)
Definition: imgui_internal.h:1194
ImGuiWindow * NavWindowingTarget
Definition: imgui_internal.h:1593
bool ShowDrawCmdBoundingBoxes
Definition: imgui_internal.h:1397
Definition: imgui_internal.h:802
float ScrollingTarget
Definition: imgui_internal.h:2086
ImVec2 WorkOffsetMax
Definition: imgui_internal.h:1334
float WheelingWindowTimer
Definition: imgui_internal.h:1492
bool NavAnyRequest
Definition: imgui_internal.h:1571
IMGUI_API bool InputTextEx(const char *label, const char *hint, char *buf, int buf_size, const ImVec2 &size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
IMGUI_API void Initialize(ImGuiContext *context)
ImVec2 ScrollTargetCenterRatio
Definition: imgui_internal.h:1937
Definition: imgui_internal.h:743
void UpdateWorkRect()
Definition: imgui_internal.h:1344
static int ImAbs(int x)
Definition: imgui_internal.h:401
ImGuiTableColumnIdx FreezeColumnsCount
Definition: imgui_internal.h:2280
bool OpenVal
Definition: imgui_internal.h:1106
int ImPoolIdx
Definition: imgui_internal.h:611
bool CollapsedVal
Definition: imgui_internal.h:1082
void SetBit(int n)
Definition: imgui_internal.h:540
Definition: imgui_internal.h:1220
IMGUI_API const ImWchar * ImStrbolW(const ImWchar *buf_mid_line, const ImWchar *buf_begin)
Definition: imgui_internal.h:1100
int ImGuiNextWindowDataFlags
Definition: imgui_internal.h:154
float DisabledAlphaBackup
Definition: imgui_internal.h:1661
bool HostSkipItems
Definition: imgui_internal.h:2299
ImRect HostBackupWorkRect
Definition: imgui_internal.h:2316
short BeginCount
Definition: imgui_internal.h:1952
IMGUI_API void Shutdown(ImGuiContext *context)
IMGUI_API ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2 &p1, const ImVec2 &p2, const ImVec2 &p3, const ImVec2 &p4, const ImVec2 &p, float tess_tol)
Definition: imgui_internal.h:1440
Definition: imgui_internal.h:1066
Definition: imgui_internal.h:466
IMGUI_API void RenderTextWrapped(ImVec2 pos, const char *text, const char *text_end, float wrap_width)
signed short ImS16
Definition: imgui.h:227
Definition: imgui_internal.h:1125
IMGUI_API bool ArrowButtonEx(const char *str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags=0)
ImU32 TreeJumpToParentOnPopMask
Definition: imgui_internal.h:1899
int WindowsActiveCount
Definition: imgui_internal.h:1484
ImGuiID OpenParentId
Definition: imgui_internal.h:1050
ImGuiTableDrawChannelIdx DrawChannelFrozen
Definition: imgui_internal.h:2155
ImVec2 Pos
Definition: imgui.h:2815
ImGuiTableColumnIdx ReorderColumnDir
Definition: imgui_internal.h:2271
float WorkMinX
Definition: imgui_internal.h:2141
ImGuiMetricsConfig()
Definition: imgui_internal.h:1401
ImVec2 HostBackupCursorMaxPos
Definition: imgui_internal.h:2320
IMGUI_API char * ImStrdup(const char *str)
ImU8 ImGuiTableDrawChannelIdx
Definition: imgui_internal.h:2123
IMGUI_API float GetColumnOffsetFromNorm(const ImGuiOldColumns *columns, float offset_norm)
ImVec2 CursorMaxPos
Definition: imgui_internal.h:1876
IMGUI_API ImVec2 GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor=0.0f, float fast_factor=0.0f)
ImVec2 MouseLastValidPos
Definition: imgui_internal.h:1645
ImRect HostClipRect
Definition: imgui_internal.h:2251
IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul=1.0f)
unsigned char ImU8
Definition: imgui.h:226
float StretchWeight
Definition: imgui_internal.h:2137
IMGUI_API const char * ImStristr(const char *haystack, const char *haystack_end, const char *needle, const char *needle_end)
ImGuiTextBuffer ColumnsNames
Definition: imgui_internal.h:2255
Definition: imgui_internal.h:868
Definition: imgui_internal.h:2188
bool DragDropActive
Definition: imgui_internal.h:1612
ImVector< ImGuiOldColumnData > Columns
Definition: imgui_internal.h:1298
Definition: imgui.h:1457
float WidthOrWeight
Definition: imgui_internal.h:2331
IMGUI_API bool ItemAdd(const ImRect &bb, ImGuiID id, const ImRect *nav_bb=NULL, ImGuiItemFlags extra_flags=0)
int WantTextInputNextFrame
Definition: imgui_internal.h:1709
float ContentMaxXHeadersIdeal
Definition: imgui_internal.h:2147
int GetMapSize() const
Definition: imgui_internal.h:637
float y
Definition: imgui.h:277
ImGuiID GetFocusScope()
Definition: imgui_internal.h:2542
ImVector< ImFont * > Fonts
Definition: imgui.h:2720
ImVec2 ContentSizeExplicit
Definition: imgui_internal.h:1927
ImFont InputTextPasswordFont
Definition: imgui_internal.h:1647
ImGuiDir NavMoveClipDir
Definition: imgui_internal.h:1584
float HostIndentX
Definition: imgui_internal.h:2229
IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2 &a, const ImVec2 &b, const ImVec2 &p)
float ScrollingSpeed
Definition: imgui_internal.h:2088
ImGuiID HoveredId
Definition: imgui_internal.h:1496
IMGUI_API void NavMoveRequestResolveWithLastItem()
ImGuiWindow * ActiveIdWindow
Definition: imgui_internal.h:1518
ImVec2 BackupCursorPos
Definition: imgui_internal.h:2101
float OuterPaddingX
Definition: imgui_internal.h:2231
#define IM_UNUSED(_VAR)
Definition: imgui.h:90
float CurveTessellationTol
Definition: imgui_internal.h:705
ImGuiNextWindowData()
Definition: imgui_internal.h:1089
int RowBgColorCounter
Definition: imgui_internal.h:2223
bool TestEngineHookItems
Definition: imgui_internal.h:1475
IMGUI_API void RenderBullet(ImDrawList *draw_list, ImVec2 pos, ImU32 col)
ImGuiNavItemData NavMoveResultOther
Definition: imgui_internal.h:1590
IMGUI_API void TableBeginRow(ImGuiTable *table)
bool MenuBarAppending
Definition: imgui_internal.h:1895
Definition: imgui_internal.h:1233
IMGUI_API void LogToBuffer(int auto_open_depth=-1)
ImS8 AutoFitFramesY
Definition: imgui_internal.h:1957
ImFont * Font
Definition: imgui_internal.h:703
ImGuiDir AutoPosLastDirection
Definition: imgui_internal.h:1960
ImVec2 WheelingWindowRefMousePos
Definition: imgui_internal.h:1491
bool ActiveIdPreviousFrameIsAlive
Definition: imgui_internal.h:1522
ImGuiItemFlags GetItemFlags()
Definition: imgui_internal.h:2448
ImGuiTableColumnIdx HoveredColumnBody
Definition: imgui_internal.h:2264
float MenuBarHeight() const
Definition: imgui_internal.h:2027
T * Data
Definition: imgui_internal.h:562
ImGuiSliderFlagsPrivate_
Definition: imgui_internal.h:812
ImGuiID ID
Definition: imgui_internal.h:2197
IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags)
bool AutoFitOnlyGrows
Definition: imgui_internal.h:1959
Definition: imgui.h:1596
IMGUI_API void TableUpdateLayout(ImGuiTable *table)
ImGuiTableDrawChannelIdx DummyDrawChannel
Definition: imgui_internal.h:2282
ImGuiSettingsHandler()
Definition: imgui_internal.h:1383
Definition: imgui.h:2342
bool IsUnfrozenRows
Definition: imgui_internal.h:2296
ImGuiWindow * RootWindow
Definition: imgui_internal.h:1997
bool DebugItemPickerActive
Definition: imgui_internal.h:1697
static float ImSaturate(float f)
Definition: imgui_internal.h:429
void SetBitRange(int n, int n2)
Definition: imgui_internal.h:542
ImGuiDataTypePrivate_
Definition: imgui_internal.h:933
IMGUI_API void ColorEditOptionsPopup(const float *col, ImGuiColorEditFlags flags)
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)
ImU32 RowBgColor[2]
Definition: imgui_internal.h:2224
ImGuiID UserID
Definition: imgui_internal.h:2332
IMGUI_API void TableGcCompactSettings()
ImRect RectRel
Definition: imgui_internal.h:1238
short SizeOfFocusScopeStack
Definition: imgui_internal.h:1131
float OffsetNorm
Definition: imgui_internal.h:1275
Definition: imgui.h:1768
IMGUI_API void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas *atlas, int x, int y, int w, int h, const char *in_str, char in_marker_char, unsigned int in_marker_pixel_value)
ImGuiTableColumnIdx ColumnsEnabledFixedCount
Definition: imgui_internal.h:2262
ImGuiID ID
Definition: imgui_internal.h:1236
Definition: imgui_internal.h:835
Definition: imgui_internal.h:2353
int FrameCountEnded
Definition: imgui_internal.h:1469
bool HoveredIdUsingMouseWheel
Definition: imgui_internal.h:1499
float LastTimeActive
Definition: imgui_internal.h:2311
ImVec2 BackupCurrLineSize
Definition: imgui_internal.h:978
Definition: imgui_internal.h:1870
IMGUI_API void ColorTooltip(const char *text, const float *col, ImGuiColorEditFlags flags)
bool IsSkipItems
Definition: imgui_internal.h:2163
IMGUI_API bool BeginViewportSideBar(const char *name, ImGuiViewport *viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags)
Definition: imgui_internal.h:1255
IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags)
ImGuiTableRowFlags LastRowFlags
Definition: imgui_internal.h:2222
ImGuiStackSizes()
Definition: imgui_internal.h:1137
const char int mode
Definition: ioapi.h:38
void * RawData
Definition: imgui_internal.h:2199
ImVector< ImGuiWindow * > Windows
Definition: imgui_internal.h:1479
int chunk_size(const T *p)
Definition: imgui_internal.h:660
int Count
Definition: imgui_internal.h:1290
float FontBaseSize
Definition: imgui_internal.h:1465
bool ShowWindowsBeginOrder
Definition: imgui_internal.h:1394
int FocusCounterTabStop
Definition: imgui_internal.h:1906
T * TryGetMapData(ImPoolIdx n)
Definition: imgui_internal.h:638
ImU16 OffsetMark
Definition: imgui_internal.h:995
void IM_DELETE(T *p)
Definition: imgui.h:1683
bool VisibleTabWasSubmitted
Definition: imgui_internal.h:2095
char * GetName()
Definition: imgui_internal.h:1368
float ArcFastRadiusCutoff
Definition: imgui_internal.h:712
ImGuiInputTextFlagsPrivate_
Definition: imgui_internal.h:774
Definition: imgui_internal.h:801
bool NavMousePosDirty
Definition: imgui_internal.h:1566
ImGuiPtrOrIndex(int index)
Definition: imgui_internal.h:1162
Definition: imgui.h:2523
float Width
Definition: imgui_internal.h:1153
Definition: imgui.h:1642
short SizeOfBeginPopupStack
Definition: imgui_internal.h:1134
ImVec2 MenuBarOffset
Definition: imgui_internal.h:1896
const char * PrintFmt
Definition: imgui_internal.h:928
Definition: imgui_internal.h:794
IMGUI_API bool BeginComboPreview()
IMGUI_API bool BeginComboPopup(ImGuiID popup_id, const ImRect &bb, ImGuiComboFlags flags)
float x
Definition: imgui.h:264
static float ImPow(float x, float y)
Definition: imgui_internal.h:397
float RefScale
Definition: imgui_internal.h:2243
ImS16 LastTabItemIdx
Definition: imgui_internal.h:2098
void Clear()
Definition: imgui_internal.h:1245
ImVector< char > Buf
Definition: imgui_internal.h:652
bool IsSettingsRequestLoad
Definition: imgui_internal.h:2291
Definition: imgui_internal.h:759
ImVector< ImGuiSettingsHandler > SettingsHandlers
Definition: imgui_internal.h:1677
ImGuiID FocusScopeId
Definition: imgui_internal.h:1104
float x
Definition: imgui_internal.h:460
ImGuiNavItemData NavMoveResultLocalVisible
Definition: imgui_internal.h:1589
ImRect DragDropTargetRect
Definition: imgui_internal.h:1619
bool empty() const
Definition: imgui_internal.h:655
void swap(ImVector< T > &rhs)
Definition: imgui.h:1735
Definition: imgui_internal.h:796
ImRect InnerClipRect
Definition: imgui_internal.h:1978
float HostCursorPosY
Definition: imgui_internal.h:1293
IMGUI_API float TableGetColumnWidthAuto(ImGuiTable *table, ImGuiTableColumn *column)
IMGUI_API void BringWindowToDisplayFront(ImGuiWindow *window)
IMGUI_API void TableSetColumnWidth(int column_n, float width)
IMGUI_API void TabBarCloseTab(ImGuiTabBar *tab_bar, ImGuiTabItem *tab)
ImGuiID NavJustTabbedId
Definition: imgui_internal.h:1556
short SizeOfIDStack
Definition: imgui_internal.h:1127
ImSpan< ImGuiTableColumnIdx > DisplayOrderToIndex
Definition: imgui_internal.h:2202
IMGUI_API void RemoveContextHook(ImGuiContext *context, ImGuiID hook_to_remove)
void Create(int sz)
Definition: imgui_internal.h:550
ImU8 AutoFitQueue
Definition: imgui_internal.h:2166
Definition: imgui_internal.h:590
ImGuiInputTextState()
Definition: imgui_internal.h:1025
bool IsActiveIdUsingNavInput(ImGuiNavInput input)
Definition: imgui_internal.h:2549
Definition: imgui_internal.h:800
int TabFocusRequestCurrCounterTabStop
Definition: imgui_internal.h:1603
float MinColumnWidth
Definition: imgui_internal.h:2230
ImGuiNavDirSourceFlags_
Definition: imgui_internal.h:1201
bool IsInsideRow
Definition: imgui_internal.h:2286
ImGuiMenuColumns MenuColumns
Definition: imgui_internal.h:1897
ImGuiDir NavMoveDir
Definition: imgui_internal.h:1582
ImVec2 BackupCursorMaxPos
Definition: imgui_internal.h:975
Definition: imgui_internal.h:1181
Definition: imgui_internal.h:918
IMGUI_API void TableEndCell(ImGuiTable *table)
int ShowWindowsRectsType
Definition: imgui_internal.h:1398
void * UserCallbackData
Definition: imgui_internal.h:1023
float LogLinePosY
Definition: imgui_internal.h:1690
Definition: imgui_internal.h:792
Definition: imgui_internal.h:790
Definition: imgui_internal.h:1457
bool DragDropWithinTarget
Definition: imgui_internal.h:1614
ImGuiLayoutType ParentLayoutType
Definition: imgui_internal.h:1905
ImGuiWindow * MovingWindow
Definition: imgui_internal.h:1489
void ClearSelection()
Definition: imgui_internal.h:1036
ImGuiTable * GetCurrentTable()
Definition: imgui_internal.h:2584
IMGUI_API void TableSortSpecsSanitize(ImGuiTable *table)
float ColorEditLastSat
Definition: imgui_internal.h:1651
IMGUI_API ImFileHandle ImFileOpen(const char *filename, const char *mode)
#define IM_MEMALIGN(_OFF, _ALIGN)
Definition: imgui_internal.h:234
IMGUI_API void ImStrTrimBlanks(char *str)
void GetSpan(int n, ImSpan< T > *span)
Definition: imgui_internal.h:605
ImVec1 BackupGroupOffset
Definition: imgui_internal.h:977
Definition: imgui_internal.h:936
ImS8 QueryFrameCount
Definition: imgui_internal.h:1417
ImGuiID LastActiveId
Definition: imgui_internal.h:1525
Definition: imgui_internal.h:1044
bool TestBit(int n) const
Definition: imgui_internal.h:539
Definition: imgui_internal.h:924
Definition: imgui_internal.h:1218
Definition: imgui_internal.h:1440
Definition: imgui_internal.h:1268
bool IsUserEnabledNextFrame
Definition: imgui_internal.h:2159
Definition: imgui_internal.h:814
IMGUI_API int ImTextCharFromUtf8(unsigned int *out_char, const char *in_text, const char *in_text_end)
Definition: imgui_internal.h:754
Definition: imgui.h:1302
void Expand(const ImVec2 &amount)
Definition: imgui_internal.h:501
IMGUI_API void PushMultiItemsWidths(int components, float width_full)
ImVector< float > TextWrapPosStack
Definition: imgui_internal.h:1913
float WorkMaxX
Definition: imgui_internal.h:2142
IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow *window)
ImVec1(float _x)
Definition: imgui_internal.h:462
ImGuiStyleVar VarIdx
Definition: imgui_internal.h:950
bool HasCloseButton
Definition: imgui_internal.h:1950
ImGuiTableColumnIdx DisplayOrder
Definition: imgui_internal.h:2334
Definition: imgui_internal.h:1096
ImGuiLayoutType_
Definition: imgui_internal.h:860
Definition: imgui_internal.h:904
int DragDropSourceFrameCount
Definition: imgui_internal.h:1616
IMGUI_API void ActivateItem(ImGuiID id)
ImGuiButtonFlagsPrivate_
Definition: imgui_internal.h:783
short FocusOrder
Definition: imgui_internal.h:1955
Definition: imgui_internal.h:744
void set(T *data, int size)
Definition: imgui_internal.h:570
ImGuiColorEditFlags ColorEditOptions
Definition: imgui_internal.h:1649
int(* ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data)
Definition: imgui.h:254
ImVec1 Indent
Definition: imgui_internal.h:1882
float RowPosY1
Definition: imgui_internal.h:2216
ImVector< ImGuiID > FocusScopeStack
Definition: imgui_internal.h:1538
ImGuiNextWindowDataFlags_
Definition: imgui_internal.h:1057
int ActiveIdMouseButton
Definition: imgui_internal.h:1520
float CellSpacingX2
Definition: imgui_internal.h:2235
ImGuiID ID
Definition: imgui_internal.h:1285
ImGuiTableColumnIdx SortSpecsCount
Definition: imgui_internal.h:2260
ImGuiCond PosCond
Definition: imgui_internal.h:1074
ImGuiID Owner
Definition: imgui_internal.h:1446
ImDrawListSplitter * DrawSplitter
Definition: imgui_internal.h:2256
Definition: imgui_internal.h:826
ImGuiItemFlags InFlags
Definition: imgui_internal.h:1239
Definition: imgui_internal.h:893
int Size
Definition: imgui.h:1700
ImVec2 ScrollbarSizes
Definition: imgui_internal.h:1939
float TooltipSlowDelay
Definition: imgui_internal.h:1664
float BorderX1
Definition: imgui_internal.h:2227
Definition: imgui_internal.h:720
Definition: imgui_internal.h:739
ImVec2 UserOuterSize
Definition: imgui_internal.h:2313
ImGuiID PopupId
Definition: imgui_internal.h:1046
IMGUI_API void DebugRenderViewportThumbnail(ImDrawList *draw_list, ImGuiViewportP *viewport, const ImRect &bb)
ImGuiOldColumnData()
Definition: imgui_internal.h:1280
Definition: imgui_internal.h:785
float y
Definition: imgui.h:264
float DistBox
Definition: imgui_internal.h:1240
ImGuiID DebugItemPickerBreakId
Definition: imgui_internal.h:1698
IMGUI_API int ImTextCountCharsFromUtf8(const char *in_text, const char *in_text_end)
ImGuiTextBuffer LogBuffer
Definition: imgui_internal.h:1687
unsigned short ImU16
Definition: imgui.h:228
static float ImLinearSweep(float current, float target, float speed)
Definition: imgui_internal.h:439
IMGUI_API ImVec2 CalcWindowNextAutoFitSize(ImGuiWindow *window)
IMGUI_API ImGuiWindowSettings * FindWindowSettings(ImGuiID id)
int NavTabbingInputableRemaining
Definition: imgui_internal.h:1587
float Width
Definition: imgui_internal.h:2059
IMGUI_API float GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode)
ImU8 CannotSkipItemsQueue
Definition: imgui_internal.h:2167
static ImGuiID ImHash(const void *data, int size, ImU32 seed=0)
Definition: imgui_internal.h:293
ImVec2 SetWindowPosPivot
Definition: imgui_internal.h:1969
int DrawListsLastFrame[2]
Definition: imgui_internal.h:1328
Definition: imgui_internal.h:855
IMGUI_API void PushColumnClipRect(int column_index)
ImRect HostBackupClipRect
Definition: imgui_internal.h:1296
ImGuiTextBuffer TabsNames
Definition: imgui_internal.h:2102
Definition: imgui_internal.h:907
IMGUI_API void NavInitRequestApplyResult()
ImS16 InstanceInteracted
Definition: imgui_internal.h:2215
ImDrawListSharedData DrawListSharedData
Definition: imgui_internal.h:1466
const T & operator[](int i) const
Definition: imgui_internal.h:575
ImGuiTable * CurrentTable
Definition: imgui_internal.h:1631
float ScrollX
Definition: imgui_internal.h:1015
voidpf uLong offset
Definition: ioapi.h:42
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h)
ImGuiID ID
Definition: imgui_internal.h:2355
ImGuiID ID
Definition: imgui_internal.h:1416
ImGuiWindow * SourceWindow
Definition: imgui_internal.h:1048
IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow *window)
IMGUI_API void ClearActiveID()
ImS16 ReorderRequestOffset
Definition: imgui_internal.h:2092
Definition: imgui_internal.h:1197
Definition: imgui_internal.h:1171
int CurrOff
Definition: imgui_internal.h:593
ImGuiTableRowFlags RowFlags
Definition: imgui_internal.h:2221
IMGUI_API void TabItemBackground(ImDrawList *draw_list, const ImRect &bb, ImGuiTabItemFlags flags, ImU32 col)
bool QuerySuccess
Definition: imgui_internal.h:1418
Definition: imgui_internal.h:2329
Definition: imgui_internal.h:1215
ImGuiOldColumns()
Definition: imgui_internal.h:1301
ImVec2 CalcWorkRectSize(const ImVec2 &off_min, const ImVec2 &off_max) const
Definition: imgui_internal.h:1343
ImVector< T > Buf
Definition: imgui_internal.h:615
IMGUI_API void ClosePopupsExceptModals()
void Reserve(int capacity)
Definition: imgui_internal.h:631
IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat=true)
ImGuiTableColumnIdx RightMostStretchedColumn
Definition: imgui_internal.h:2275
float ActiveIdTimer
Definition: imgui_internal.h:1506
IMGUI_API void RenderNavHighlight(const ImRect &bb, ImGuiID id, ImGuiNavHighlightFlags flags=ImGuiNavHighlightFlags_TypeDefault)
bool WithinFrameScope
Definition: imgui_internal.h:1471
ImGuiTabBar * CurrentTabBar
Definition: imgui_internal.h:1639
Definition: imgui_internal.h:1185
ImGuiIO IO
Definition: imgui_internal.h:1461
ImVec2 GetTL() const
Definition: imgui_internal.h:491
IMGUI_API ImGuiContext * GImGui
bool WasActive
Definition: imgui_internal.h:1942
IMGUI_API const char * ImParseFormatTrimDecorations(const char *format, char *buf, size_t buf_size)
ImGuiItemStatusFlags StatusFlags
Definition: imgui_internal.h:1117
IMGUI_API const ImFontBuilderIO * ImFontAtlasGetBuilderForStbTruetype()
T * alloc_chunk(size_t sz)
Definition: imgui_internal.h:657
IMGUI_API ImGuiID GetColumnsID(const char *str_id, int count)
ImGuiID TypeHash
Definition: imgui_internal.h:1374
bool IsDefaultDisplayOrder
Definition: imgui_internal.h:2293
int ImGuiNavHighlightFlags
Definition: imgui_internal.h:150
Definition: imgui_internal.h:1188
void SetAllBits()
Definition: imgui_internal.h:538
float ItemWidth
Definition: imgui_internal.h:1910
bool IsUserEnabled
Definition: imgui_internal.h:2158
ImFontAtlas * Fonts
Definition: imgui.h:1844
ImGuiComboPreviewData ComboPreviewData
Definition: imgui_internal.h:1654
Definition: imgui_internal.h:1442
int FramerateSecPerFrameIdx
Definition: imgui_internal.h:1704
Definition: imgui_internal.h:1440
IMGUI_API void EndComboPreview()
ImGuiTableColumnSettings()
Definition: imgui_internal.h:2340
ImGuiTableTempData * TempData
Definition: imgui_internal.h:2200
IMGUI_API void DebugNodeTableSettings(ImGuiTableSettings *settings)
IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b)
ImGuiID WindowID
Definition: imgui_internal.h:973
float RowIndentOffsetX
Definition: imgui_internal.h:2220
float ImTriangleArea(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c)
Definition: imgui_internal.h:452
void(* ReadInitFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler)
Definition: imgui_internal.h:1376
ImRect OuterRect
Definition: imgui_internal.h:2244
IMGUI_API bool MenuItemEx(const char *label, const char *icon, const char *shortcut=NULL, bool selected=false, bool enabled=true)
Definition: imgui_internal.h:914
ImVector< ImGuiTableColumnSortSpecs > SortSpecsMulti
Definition: imgui_internal.h:2258
float SettingsDirtyTimer
Definition: imgui_internal.h:1675
ImGuiWindow * GetCurrentWindow()
Definition: imgui_internal.h:2379
int SettingsOffset
Definition: imgui_internal.h:2209
float LastOuterHeight
Definition: imgui_internal.h:2236
Definition: imgui_internal.h:613
int LogDepthToExpandDefault
Definition: imgui_internal.h:1694
int size_in_bytes() const
Definition: imgui_internal.h:573
float ResizedColumnNextWidth
Definition: imgui_internal.h:2241
void ClearFreeMemory()
Definition: imgui_internal.h:1027
IMGUI_API void TreePushOverrideID(ImGuiID id)
IMGUI_API const char * ImParseFormatFindStart(const char *format)
ImPool()
Definition: imgui_internal.h:620
ImU8 SortDirection
Definition: imgui_internal.h:2336
float RowTextBaseline
Definition: imgui_internal.h:2219
Definition: imgui_internal.h:894
IMGUI_API void DebugNodeColumns(ImGuiOldColumns *columns)
ImGuiTextFlags_
Definition: imgui_internal.h:846
IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2 &pos)
int Current
Definition: imgui_internal.h:1289
IMGUI_API const char * ImTextCharToUtf8(char out_buf[5], unsigned int c)
bool IsSortSpecsDirty
Definition: imgui_internal.h:2288
IMGUI_API const ImGuiDataTypeInfo * DataTypeGetInfo(ImGuiDataType data_type)
ImGuiWindowFlags Flags
Definition: imgui_internal.h:1921
Definition: imgui_internal.h:476
IMGUI_API ImGuiWindowSettings * CreateNewWindowSettings(const char *name)
int ImGuiTextFlags
Definition: imgui_internal.h:157
IMGUI_API ImVec2 TabItemCalcSize(const char *label, bool has_close_button)
ImGuiID ID
Definition: imgui_internal.h:1361
bool WantApply
Definition: imgui_internal.h:2360
ImGuiID ActiveId
Definition: imgui_internal.h:1504
void Remove(ImGuiID key, const T *p)
Definition: imgui_internal.h:629
static int ImUpperPowerOfTwo(int v)
Definition: imgui_internal.h:305
ImVector< ImGuiWindow * > ChildWindows
Definition: imgui_internal.h:1900
float ScrollbarClickDeltaToGrabCenter
Definition: imgui_internal.h:1660
Definition: imgui_internal.h:1065
ImGuiOldColumns * CurrentColumns
Definition: imgui_internal.h:1902
ImGuiNavItemData()
Definition: imgui_internal.h:1244
float CellPaddingX
Definition: imgui_internal.h:2232
Definition: imgui_internal.h:2048
ImGuiItemFlags CurrentItemFlags
Definition: imgui_internal.h:1529
IMGUI_API void ScrollToItem(ImGuiScrollFlags flags=0)
void * UserData
Definition: imgui_internal.h:1448
T * begin()
Definition: imgui_internal.h:658
ImSpan(T *data, T *data_end)
Definition: imgui_internal.h:568
IMGUI_API ImGuiID ImHashData(const void *data, size_t data_size, ImU32 seed=0)
IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow *window)
ImVec1 GroupOffset
Definition: imgui_internal.h:1884
Definition: imgui_internal.h:1371
IMGUI_API ImGuiWindow * FindWindowByID(ImGuiID id)
Definition: imgui_internal.h:786
IMGUI_API void DebugNodeWindowsList(ImVector< ImGuiWindow * > *windows, const char *label)
void * ImTextureID
Definition: imgui.h:213
Definition: imgui_internal.h:869
void ImBitArrayClearBit(ImU32 *arr, int n)
Definition: imgui_internal.h:515
Definition: imgui_internal.h:1059
const char * GetTabName(const ImGuiTabItem *tab) const
Definition: imgui_internal.h:2106
ImGuiContext(ImFontAtlas *shared_font_atlas)
Definition: imgui_internal.h:1712
IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void *user_data=NULL)
bool FontAtlasOwnedByContext
Definition: imgui_internal.h:1460
ImRect(const ImVec4 &v)
Definition: imgui_internal.h:483
IMGUI_API void TableResetSettings(ImGuiTable *table)
ImVector< float > TablesLastTimeActive
Definition: imgui_internal.h:1635
T & operator[](int i)
Definition: imgui_internal.h:574
Definition: imgui_internal.h:903
ImVec2 Size
Definition: imgui_internal.h:1923
float LastTimeActive
Definition: imgui_internal.h:1987
bool NavInitRequestFromMove
Definition: imgui_internal.h:1573
bool IsActiveIdUsingKey(ImGuiKey key)
Definition: imgui_internal.h:2550
int NameBufLen
Definition: imgui_internal.h:1931
IMGUI_API void KeepAliveID(ImGuiID id)
float LineMinY
Definition: imgui_internal.h:1292
void DebugStartItemPicker()
Definition: imgui_internal.h:2739
IMGUI_API bool ImFileClose(ImFileHandle file)
IMGUI_API bool CheckboxFlags(const char *label, int *flags, int flags_value)
ImGuiWindow * RootWindowForTitleBarHighlight
Definition: imgui_internal.h:1999
int ImGuiItemStatusFlags
Definition: imgui_internal.h:148
ImGuiTableColumnIdx ColumnsEnabledCount
Definition: imgui_internal.h:2261
bool IsUsingHeaders
Definition: imgui_internal.h:2289
IMGUI_API ImGuiWindow * FindWindowByName(const char *name)
Definition: imgui_internal.h:318
ImGuiContextHookCallback Callback
Definition: imgui_internal.h:1447
ImU8 SortDirectionsAvailList
Definition: imgui_internal.h:2171
IMGUI_API ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
bool(* FontBuilder_Build)(ImFontAtlas *atlas)
Definition: imgui_internal.h:2767
ImGuiWindow * NavWindow
Definition: imgui_internal.h:1548
int Sizes[CHUNKS]
Definition: imgui_internal.h:596
IMGUI_API void TabItemLabelAndCloseButton(ImDrawList *draw_list, const ImRect &bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char *label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible, bool *out_just_closed, bool *out_text_clipped)
ImU32 BorderColorStrong
Definition: imgui_internal.h:2225
float LineMaxY
Definition: imgui_internal.h:1292
ImVec2ih Pos
Definition: imgui_internal.h:1362
IMGUI_API ImGuiWindow * GetTopMostPopupModal()
Definition: imgui_internal.h:762
float WidthRequest
Definition: imgui_internal.h:2135
ImRect(const ImVec2 &min, const ImVec2 &max)
Definition: imgui_internal.h:482
ImS16 TabsActiveCount
Definition: imgui_internal.h:2097
ImVector< char > Buf
Definition: imgui.h:2109
Definition: imgui_internal.h:1425
ImGuiNextItemDataFlags_
Definition: imgui_internal.h:1093
ImGuiID MoveId
Definition: imgui_internal.h:1932
ImGuiInputSource NavInputSource
Definition: imgui_internal.h:1562
static T ImMin(T lhs, T rhs)
Definition: imgui_internal.h:415
IMGUI_API void EndColumns()
float BorderX2
Definition: imgui_internal.h:2228
IMGUI_API void FlattenIntoSingleLayer()
ImPool< ImGuiTabBar > TabBars
Definition: imgui_internal.h:1640
int DragDropAcceptFrameCount
Definition: imgui_internal.h:1625
IMGUI_API ImGuiID GetWindowResizeBorderID(ImGuiWindow *window, ImGuiDir dir)
void ClearAllBits()
Definition: imgui_internal.h:537
float TextWrapPos
Definition: imgui_internal.h:1911
ImGuiID NavInitResultId
Definition: imgui_internal.h:1574
#define IM_PLACEMENT_NEW(_PTR)
Definition: imgui.h:1681
bool IsFallbackWindow
Definition: imgui_internal.h:1949
IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void *p_data, const void *p_min, const void *p_max)
IMGUI_API bool IsPopupOpen(const char *str_id, ImGuiPopupFlags flags=0)
Definition: imgui_internal.h:2040
IMGUI_API void StartMouseMovingWindow(ImGuiWindow *window)
ImVec2 SetWindowPosVal
Definition: imgui_internal.h:1968
IMGUI_API int PlotEx(ImGuiPlotType plot_type, const char *label, float(*values_getter)(void *data, int idx), void *data, int values_count, int values_offset, const char *overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
ImGuiWindow * WheelingWindow
Definition: imgui_internal.h:1490
int KeyMap[ImGuiKey_COUNT]
Definition: imgui.h:1839
ImRect ClipRect
Definition: imgui_internal.h:1278
float LastFirstRowHeight
Definition: imgui_internal.h:2237
float CircleSegmentMaxError
Definition: imgui_internal.h:706
float BgAlphaVal
Definition: imgui_internal.h:1086
IMGUI_API ImGuiTable()
Definition: imgui_internal.h:2301
IMGUI_API ImGuiSettingsHandler * FindSettingsHandler(const char *type_name)
Definition: imgui_internal.h:915
ImFont * FontDefault
Definition: imgui.h:1847
IMGUI_API int ImFormatStringV(char *buf, size_t buf_size, const char *fmt, va_list args) IM_FMTLIST(3)
ImSpan(T *data, int size)
Definition: imgui_internal.h:567
#define IM_NEW(_TYPE)
Definition: imgui.h:1682
ImS8 BeginCount
Definition: imgui_internal.h:2093
IMGUI_API void TableSetColumnWidthAutoAll(ImGuiTable *table)
ImGuiID NavNextActivateId
Definition: imgui_internal.h:1560
ImVec2 WindowPadding
Definition: imgui_internal.h:1928
ImGuiPopupPositionPolicy
Definition: imgui_internal.h:911
static float ImRsqrt(float x)
Definition: imgui_internal.h:409
Definition: imgui_internal.h:1216

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)