Steppable 0.0.1
A CAS project written from scratch in C++
Loading...
Searching...
No Matches
imgui_internal.h
1// dear imgui, v1.91.0 WIP
2// (internal structures/api)
3
4// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility.
5
6/*
7
8Index of this file:
9
10// [SECTION] Header mess
11// [SECTION] Forward declarations
12// [SECTION] Context pointer
13// [SECTION] STB libraries includes
14// [SECTION] Macros
15// [SECTION] Generic helpers
16// [SECTION] ImDrawList support
17// [SECTION] Data types support
18// [SECTION] Widgets support: flags, enums, data structures
19// [SECTION] Popup support
20// [SECTION] Inputs support
21// [SECTION] Clipper support
22// [SECTION] Navigation support
23// [SECTION] Typing-select support
24// [SECTION] Columns support
25// [SECTION] Box-select support
26// [SECTION] Multi-select support
27// [SECTION] Docking support
28// [SECTION] Viewport support
29// [SECTION] Settings support
30// [SECTION] Localization support
31// [SECTION] Metrics, Debug tools
32// [SECTION] Generic context hooks
33// [SECTION] ImGuiContext (main imgui context)
34// [SECTION] ImGuiWindowTempData, ImGuiWindow
35// [SECTION] Tab bar, Tab item support
36// [SECTION] Table support
37// [SECTION] ImGui internal API
38// [SECTION] ImFontAtlas internal API
39// [SECTION] Test Engine specific hooks (imgui_test_engine)
40
41*/
42
43#pragma once
44#ifndef IMGUI_DISABLE
45
46//-----------------------------------------------------------------------------
47// [SECTION] Header mess
48//-----------------------------------------------------------------------------
49
50#ifndef IMGUI_VERSION
51#include "imgui.h"
52#endif
53
54#include <stdio.h> // FILE*, sscanf
55#include <stdlib.h> // NULL, malloc, free, qsort, atoi, atof
56#include <math.h> // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf
57#include <limits.h> // INT_MIN, INT_MAX
58
59// Enable SSE intrinsics if available
60#if (defined __SSE__ || defined __x86_64__ || defined _M_X64 || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1))) && !defined(IMGUI_DISABLE_SSE)
61#define IMGUI_ENABLE_SSE
62#include <immintrin.h>
63#endif
64
65// Visual Studio warnings
66#ifdef _MSC_VER
67#pragma warning (push)
68#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)
69#pragma warning (disable: 26812) // The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). [MSVC Static Analyzer)
70#pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
71#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
72#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types
73#endif
74#endif
75
76// Clang/GCC warnings with -Weverything
77#if defined(__clang__)
78#pragma clang diagnostic push
79#if __has_warning("-Wunknown-warning-option")
80#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx'
81#endif
82#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
83#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants ok, for ImFloor()
84#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h
85#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h
86#pragma clang diagnostic ignored "-Wold-style-cast"
87#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
88#pragma clang diagnostic ignored "-Wdouble-promotion"
89#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
90#pragma clang diagnostic ignored "-Wmissing-noreturn" // warning: function 'xxx' could be declared with attribute 'noreturn'
91#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion"// warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
92#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" // warning: 'xxx' is an unsafe pointer used for buffer access
93#elif defined(__GNUC__)
94#pragma GCC diagnostic push
95#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
96#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
97#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
98#endif
99
100// In 1.89.4, we moved the implementation of "courtesy maths operators" from imgui_internal.h in imgui.h
101// As they are frequently requested, we do not want to encourage to many people using imgui_internal.h
102#if defined(IMGUI_DEFINE_MATH_OPERATORS) && !defined(IMGUI_DEFINE_MATH_OPERATORS_IMPLEMENTED)
103#error Please '#define IMGUI_DEFINE_MATH_OPERATORS' _BEFORE_ including imgui.h!
104#endif
105
106// Legacy defines
107#ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Renamed in 1.74
108#error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
109#endif
110#ifdef IMGUI_DISABLE_MATH_FUNCTIONS // Renamed in 1.74
111#error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
112#endif
113
114// Enable stb_truetype by default unless FreeType is enabled.
115// You can compile with both by defining both IMGUI_ENABLE_FREETYPE and IMGUI_ENABLE_STB_TRUETYPE together.
116#ifndef IMGUI_ENABLE_FREETYPE
117#define IMGUI_ENABLE_STB_TRUETYPE
118#endif
119
120//-----------------------------------------------------------------------------
121// [SECTION] Forward declarations
122//-----------------------------------------------------------------------------
123
124struct ImBitVector; // Store 1-bit per value
125struct ImRect; // An axis-aligned rectangle (2 points)
126struct ImDrawDataBuilder; // Helper to build a ImDrawData instance
127struct ImDrawListSharedData; // Data shared between all ImDrawList instances
128struct ImGuiBoxSelectState; // Box-selection state (currently used by multi-selection, could potentially be used by others)
129struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it
130struct ImGuiContext; // Main Dear ImGui context
131struct ImGuiContextHook; // Hook for extensions like ImGuiTestEngine
132struct ImGuiDataVarInfo; // Variable information (e.g. to access style variables from an enum)
133struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
134struct ImGuiDockContext; // Docking system context
135struct ImGuiDockRequest; // Docking system dock/undock queued request
136struct ImGuiDockNode; // Docking system node (hold a list of Windows OR two child dock nodes)
137struct ImGuiDockNodeSettings; // Storage for a dock node in .ini file (we preserve those even if the associated dock node isn't active during the session)
138struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
139struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
140struct ImGuiInputTextDeactivateData;// Short term storage to backup text of a deactivating InputText() while another is stealing active id
141struct ImGuiLastItemData; // Status storage for last submitted items
142struct ImGuiLocEntry; // A localization entry.
143struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
144struct ImGuiMultiSelectState; // Multi-selection persistent state (for focused selection).
145struct ImGuiMultiSelectTempData; // Multi-selection temporary state (while traversing).
146struct ImGuiNavItemData; // Result of a gamepad/keyboard directional navigation move query result
147struct ImGuiMetricsConfig; // Storage for ShowMetricsWindow() and DebugNodeXXX() functions
148struct ImGuiNextWindowData; // Storage for SetNextWindow** functions
149struct ImGuiNextItemData; // Storage for SetNextItem** functions
150struct ImGuiOldColumnData; // Storage data for a single column for legacy Columns() api
151struct ImGuiOldColumns; // Storage data for a columns set for legacy Columns() api
152struct ImGuiPopupData; // Storage for current popup stack
153struct ImGuiSettingsHandler; // Storage for one type registered in the .ini file
154struct ImGuiStackSizes; // Storage of stack sizes for debugging/asserting
155struct ImGuiStyleMod; // Stacked style modifier, backup of modified data so we can restore it
156struct ImGuiTabBar; // Storage for a tab bar
157struct ImGuiTabItem; // Storage for a tab item (within a tab bar)
158struct ImGuiTable; // Storage for a table
159struct ImGuiTableHeaderData; // Storage for TableAngledHeadersRow()
160struct ImGuiTableColumn; // Storage for one column of a table
161struct ImGuiTableInstanceData; // Storage for one instance of a same table
162struct ImGuiTableTempData; // Temporary storage for one table (one per table in the stack), shared between tables.
163struct ImGuiTableSettings; // Storage for a table .ini settings
164struct ImGuiTableColumnsSettings; // Storage for a column .ini settings
165struct ImGuiTreeNodeStackData; // Temporary storage for TreeNode().
166struct ImGuiTypingSelectState; // Storage for GetTypingSelectRequest()
167struct ImGuiTypingSelectRequest; // Storage for GetTypingSelectRequest() (aimed to be public)
168struct ImGuiWindow; // Storage for one window
169struct ImGuiWindowDockStyle; // Storage for window-style data which needs to be stored for docking purpose
170struct 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)
171struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
172
173// Enumerations
174// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
175enum ImGuiLocKey : int; // -> enum ImGuiLocKey // Enum: a localization entry for translation.
176typedef int ImGuiDataAuthority; // -> enum ImGuiDataAuthority_ // Enum: for storing the source authority (dock node vs window) of a field
177typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
178
179// Flags
180typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
181typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags
182typedef int ImGuiFocusRequestFlags; // -> enum ImGuiFocusRequestFlags_ // Flags: for FocusWindow();
183typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for g.LastItemData.StatusFlags
184typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
185typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight()
186typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests
187typedef int ImGuiNextItemDataFlags; // -> enum ImGuiNextItemDataFlags_ // Flags: for SetNextItemXXX() functions
188typedef int ImGuiNextWindowDataFlags; // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions
189typedef int ImGuiScrollFlags; // -> enum ImGuiScrollFlags_ // Flags: for ScrollToItem() and navigation requests
190typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx()
191typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx()
192typedef int ImGuiTooltipFlags; // -> enum ImGuiTooltipFlags_ // Flags: for BeginTooltipEx()
193typedef int ImGuiTypingSelectFlags; // -> enum ImGuiTypingSelectFlags_ // Flags: for GetTypingSelectRequest()
194typedef int ImGuiWindowRefreshFlags; // -> enum ImGuiWindowRefreshFlags_ // Flags: for SetNextWindowRefreshPolicy()
195
196typedef void (*ImGuiErrorLogCallback)(void* user_data, const char* fmt, ...);
197
198//-----------------------------------------------------------------------------
199// [SECTION] Context pointer
200// See implementation of this variable in imgui.cpp for comments and details.
201//-----------------------------------------------------------------------------
202
203#ifndef GImGui
204extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer
205#endif
206
207//-------------------------------------------------------------------------
208// [SECTION] STB libraries includes
209//-------------------------------------------------------------------------
210
211namespace ImStb
212{
213
214#undef IMSTB_TEXTEDIT_STRING
215#undef IMSTB_TEXTEDIT_CHARTYPE
216#define IMSTB_TEXTEDIT_STRING ImGuiInputTextState
217#define IMSTB_TEXTEDIT_CHARTYPE ImWchar
218#define IMSTB_TEXTEDIT_GETWIDTH_NEWLINE (-1.0f)
219#define IMSTB_TEXTEDIT_UNDOSTATECOUNT 99
220#define IMSTB_TEXTEDIT_UNDOCHARCOUNT 999
221#include "imstb_textedit.h"
222
223} // namespace ImStb
224
225//-----------------------------------------------------------------------------
226// [SECTION] Macros
227//-----------------------------------------------------------------------------
228
229// Internal Drag and Drop payload types. String starting with '_' are reserved for Dear ImGui.
230#define IMGUI_PAYLOAD_TYPE_WINDOW "_IMWINDOW" // Payload == ImGuiWindow*
231
232// Debug Printing Into TTY
233// (since IMGUI_VERSION_NUM >= 18729: IMGUI_DEBUG_LOG was reworked into IMGUI_DEBUG_PRINTF (and removed framecount from it). If you were using a #define IMGUI_DEBUG_LOG please rename)
234#ifndef IMGUI_DEBUG_PRINTF
235#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
236#define IMGUI_DEBUG_PRINTF(_FMT,...) printf(_FMT, __VA_ARGS__)
237#else
238#define IMGUI_DEBUG_PRINTF(_FMT,...) ((void)0)
239#endif
240#endif
241
242// Debug Logging for ShowDebugLogWindow(). This is designed for relatively rare events so please don't spam.
243#ifndef IMGUI_DISABLE_DEBUG_TOOLS
244#define IMGUI_DEBUG_LOG(...) ImGui::DebugLog(__VA_ARGS__)
245#else
246#define IMGUI_DEBUG_LOG(...) ((void)0)
247#endif
248#define IMGUI_DEBUG_LOG_ACTIVEID(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
249#define IMGUI_DEBUG_LOG_FOCUS(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
250#define IMGUI_DEBUG_LOG_POPUP(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
251#define IMGUI_DEBUG_LOG_NAV(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
252#define IMGUI_DEBUG_LOG_SELECTION(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
253#define IMGUI_DEBUG_LOG_CLIPPER(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventClipper) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
254#define IMGUI_DEBUG_LOG_IO(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
255#define IMGUI_DEBUG_LOG_INPUTROUTING(...) do{if (g.DebugLogFlags & ImGuiDebugLogFlags_EventInputRouting)IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
256#define IMGUI_DEBUG_LOG_DOCKING(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventDocking) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
257#define IMGUI_DEBUG_LOG_VIEWPORT(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventViewport) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
258
259// Static Asserts
260#define IM_STATIC_ASSERT(_COND) static_assert(_COND, "")
261
262// "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much.
263// 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.
264//#define IMGUI_DEBUG_PARANOID
265#ifdef IMGUI_DEBUG_PARANOID
266#define IM_ASSERT_PARANOID(_EXPR) IM_ASSERT(_EXPR)
267#else
268#define IM_ASSERT_PARANOID(_EXPR)
269#endif
270
271// Error handling
272// 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.
273#ifndef IM_ASSERT_USER_ERROR
274#define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG) // Recoverable User Error
275#endif
276
277// Misc Macros
278#define IM_PI 3.14159265358979323846f
279#ifdef _WIN32
280#define IM_NEWLINE "\r\n" // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
281#else
282#define IM_NEWLINE "\n"
283#endif
284#ifndef IM_TABSIZE // Until we move this to runtime and/or add proper tab support, at least allow users to compile-time override
285#define IM_TABSIZE (4)
286#endif
287#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
288#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose
289#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255
290#define IM_TRUNC(_VAL) ((float)(int)(_VAL)) // ImTrunc() is not inlined in MSVC debug builds
291#define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) //
292#define IM_STRINGIFY_HELPER(_X) #_X
293#define IM_STRINGIFY(_X) IM_STRINGIFY_HELPER(_X) // Preprocessor idiom to stringify e.g. an integer.
294#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
295#define IM_FLOOR IM_TRUNC
296#endif
297
298// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
299#ifdef _MSC_VER
300#define IMGUI_CDECL __cdecl
301#else
302#define IMGUI_CDECL
303#endif
305// Warnings
306#if defined(_MSC_VER) && !defined(__clang__)
307#define IM_MSVC_WARNING_SUPPRESS(XXXX) __pragma(warning(suppress: XXXX))
308#else
309#define IM_MSVC_WARNING_SUPPRESS(XXXX)
310#endif
311
312// Debug Tools
313// Use 'Metrics/Debugger->Tools->Item Picker' to break into the call-stack of a specific item.
314// This will call IM_DEBUG_BREAK() which you may redefine yourself. See https://github.com/scottt/debugbreak for more reference.
315#ifndef IM_DEBUG_BREAK
316#if defined (_MSC_VER)
317#define IM_DEBUG_BREAK() __debugbreak()
318#elif defined(__clang__)
319#define IM_DEBUG_BREAK() __builtin_debugtrap()
320#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
321#define IM_DEBUG_BREAK() __asm__ volatile("int3;nop")
322#elif defined(__GNUC__) && defined(__thumb__)
323#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xde01")
324#elif defined(__GNUC__) && defined(__arm__) && !defined(__thumb__)
325#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xe7f001f0")
326#else
327#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!
328#endif
329#endif // #ifndef IM_DEBUG_BREAK
330
331// Format specifiers, printing 64-bit hasn't been decently standardized...
332// In a real application you should be using PRId64 and PRIu64 from <inttypes.h> (non-windows) and on Windows define them yourself.
333#if defined(_MSC_VER) && !defined(__clang__)
334#define IM_PRId64 "I64d"
335#define IM_PRIu64 "I64u"
336#define IM_PRIX64 "I64X"
337#else
338#define IM_PRId64 "lld"
339#define IM_PRIu64 "llu"
340#define IM_PRIX64 "llX"
341#endif
342
343//-----------------------------------------------------------------------------
344// [SECTION] Generic helpers
345// Note that the ImXXX helpers functions are lower-level than ImGui functions.
346// ImGui functions or the ImGui context are never called/used from other ImXXX functions.
347//-----------------------------------------------------------------------------
348// - Helpers: Hashing
349// - Helpers: Sorting
350// - Helpers: Bit manipulation
351// - Helpers: String
352// - Helpers: Formatting
353// - Helpers: UTF-8 <> wchar conversions
354// - Helpers: ImVec2/ImVec4 operators
355// - Helpers: Maths
356// - Helpers: Geometry
357// - Helper: ImVec1
358// - Helper: ImVec2ih
359// - Helper: ImRect
360// - Helper: ImBitArray
361// - Helper: ImBitVector
362// - Helper: ImSpan<>, ImSpanAllocator<>
363// - Helper: ImPool<>
364// - Helper: ImChunkStream<>
365// - Helper: ImGuiTextIndex
366// - Helper: ImGuiStorage
367//-----------------------------------------------------------------------------
368
369// Helpers: Hashing
370IMGUI_API ImGuiID ImHashData(const void* data, size_t data_size, ImGuiID seed = 0);
371IMGUI_API ImGuiID ImHashStr(const char* data, size_t data_size = 0, ImGuiID seed = 0);
373// Helpers: Sorting
374#ifndef ImQsort
375static inline void ImQsort(void* base, size_t count, size_t size_of_element, int(IMGUI_CDECL *compare_func)(void const*, void const*)) { if (count > 1) qsort(base, count, size_of_element, compare_func); }
376#endif
377
378// Helpers: Color Blending
379IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b);
380
381// Helpers: Bit manipulation
382static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
383static inline bool ImIsPowerOfTwo(ImU64 v) { return v != 0 && (v & (v - 1)) == 0; }
384static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
385
386// Helpers: String
387IMGUI_API int ImStricmp(const char* str1, const char* str2); // Case insensitive compare.
388IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count); // Case insensitive compare to a certain count.
389IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count); // Copy to a certain count and always zero terminate (strncpy doesn't).
390IMGUI_API char* ImStrdup(const char* str); // Duplicate a string.
391IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str); // Copy in provided buffer, recreate buffer if needed.
392IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c); // Find first occurrence of 'c' in string range.
393IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line
394IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end); // Find a substring in a string range.
395IMGUI_API void ImStrTrimBlanks(char* str); // Remove leading and trailing blanks from a buffer.
396IMGUI_API const char* ImStrSkipBlank(const char* str); // Find first non-blank character.
397IMGUI_API int ImStrlenW(const ImWchar* str); // Computer string length (ImWchar string)
398IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line (ImWchar string)
399IM_MSVC_RUNTIME_CHECKS_OFF
400static inline char ImToUpper(char c) { return (c >= 'a' && c <= 'z') ? c &= ~32 : c; }
401static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; }
402static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; }
403IM_MSVC_RUNTIME_CHECKS_RESTORE
404
405// Helpers: Formatting
406IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3);
407IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
408IMGUI_API void ImFormatStringToTempBuffer(const char** out_buf, const char** out_buf_end, const char* fmt, ...) IM_FMTARGS(3);
409IMGUI_API void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end, const char* fmt, va_list args) IM_FMTLIST(3);
410IMGUI_API const char* ImParseFormatFindStart(const char* format);
411IMGUI_API const char* ImParseFormatFindEnd(const char* format);
412IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size);
413IMGUI_API void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out, size_t fmt_out_size);
414IMGUI_API const char* ImParseFormatSanitizeForScanning(const char* fmt_in, char* fmt_out, size_t fmt_out_size);
415IMGUI_API int ImParseFormatPrecision(const char* format, int default_value);
416
417// Helpers: UTF-8 <> wchar conversions
418IMGUI_API const char* ImTextCharToUtf8(char out_buf[5], unsigned int c); // return out_buf
419IMGUI_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
420IMGUI_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
421IMGUI_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
422IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count)
423IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end); // return number of bytes to express one char in UTF-8
424IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8
425IMGUI_API const char* ImTextFindPreviousUtf8Codepoint(const char* in_text_start, const char* in_text_curr); // return previous UTF-8 code-point.
426IMGUI_API int ImTextCountLines(const char* in_text, const char* in_text_end); // return number of lines taken by text. trailing carriage return doesn't count as an extra line.
427
428// Helpers: File System
429#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
430#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
431typedef void* ImFileHandle;
432static inline ImFileHandle ImFileOpen(const char*, const char*) { return NULL; }
433static inline bool ImFileClose(ImFileHandle) { return false; }
434static inline ImU64 ImFileGetSize(ImFileHandle) { return (ImU64)-1; }
435static inline ImU64 ImFileRead(void*, ImU64, ImU64, ImFileHandle) { return 0; }
436static inline ImU64 ImFileWrite(const void*, ImU64, ImU64, ImFileHandle) { return 0; }
437#endif
438#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
439typedef FILE* ImFileHandle;
440IMGUI_API ImFileHandle ImFileOpen(const char* filename, const char* mode);
441IMGUI_API bool ImFileClose(ImFileHandle file);
442IMGUI_API ImU64 ImFileGetSize(ImFileHandle file);
443IMGUI_API ImU64 ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file);
444IMGUI_API ImU64 ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file);
445#else
446#define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions
447#endif
448IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0);
449
450// Helpers: Maths
451IM_MSVC_RUNTIME_CHECKS_OFF
452// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
453#ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
454#define ImFabs(X) fabsf(X)
455#define ImSqrt(X) sqrtf(X)
456#define ImFmod(X, Y) fmodf((X), (Y))
457#define ImCos(X) cosf(X)
458#define ImSin(X) sinf(X)
459#define ImAcos(X) acosf(X)
460#define ImAtan2(Y, X) atan2f((Y), (X))
461#define ImAtof(STR) atof(STR)
462#define ImCeil(X) ceilf(X)
463static inline float ImPow(float x, float y) { return powf(x, y); } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision
464static inline double ImPow(double x, double y) { return pow(x, y); }
465static inline float ImLog(float x) { return logf(x); } // DragBehaviorT/SliderBehaviorT uses ImLog with either float/double and need the precision
466static inline double ImLog(double x) { return log(x); }
467static inline int ImAbs(int x) { return x < 0 ? -x : x; }
468static inline float ImAbs(float x) { return fabsf(x); }
469static inline double ImAbs(double x) { return fabs(x); }
470static 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
471static inline double ImSign(double x) { return (x < 0.0) ? -1.0 : (x > 0.0) ? 1.0 : 0.0; }
472#ifdef IMGUI_ENABLE_SSE
473static inline float ImRsqrt(float x) { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(x))); }
474#else
475static inline float ImRsqrt(float x) { return 1.0f / sqrtf(x); }
476#endif
477static inline double ImRsqrt(double x) { return 1.0 / sqrt(x); }
478#endif
479// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double
480// (Exceptionally using templates here but we could also redefine them for those types)
481template<typename T> static inline T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; }
482template<typename T> static inline T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; }
483template<typename T> static inline T ImClamp(T v, T mn, T mx) { return (v < mn) ? mn : (v > mx) ? mx : v; }
484template<typename T> static inline T ImLerp(T a, T b, float t) { return (T)(a + (b - a) * t); }
485template<typename T> static inline void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
486template<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; }
487template<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; }
488// - Misc maths helpers
489static 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); }
490static 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); }
491static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2&mn, const 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); }
492static 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); }
493static 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); }
494static 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); }
495static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; }
496static inline float ImLengthSqr(const ImVec2& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y); }
497static inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); }
498static 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; }
499static inline float ImTrunc(float f) { return (float)(int)(f); }
500static inline ImVec2 ImTrunc(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
501static inline float ImFloor(float f) { return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf()
502static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2(ImFloor(v.x), ImFloor(v.y)); }
503static inline int ImModPositive(int a, int b) { return (a + b) % b; }
504static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; }
505static 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); }
506static 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; }
507static inline float ImLinearRemapClamp(float s0, float s1, float d0, float d1, float x) { return ImSaturate((x - s0) / (s1 - s0)) * (d1 - d0) + d0; }
508static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
509static inline bool ImIsFloatAboveGuaranteedIntegerPrecision(float f) { return f <= -16777216 || f >= 16777216; }
510static inline float ImExponentialMovingAverage(float avg, float sample, int n) { avg -= avg / n; avg += sample / n; return avg; }
511IM_MSVC_RUNTIME_CHECKS_RESTORE
512
513// Helpers: Geometry
514IMGUI_API ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t);
515IMGUI_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
516IMGUI_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
517IMGUI_API ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, float t);
518IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
519IMGUI_API bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
520IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
521IMGUI_API void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w);
522inline 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; }
523inline bool ImTriangleIsClockwise(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ((b.x - a.x) * (c.y - b.y)) - ((c.x - b.x) * (b.y - a.y)) > 0.0f; }
524
525// Helper: ImVec1 (1D vector)
526// (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches)
527IM_MSVC_RUNTIME_CHECKS_OFF
528struct ImVec1
529{
530 float x;
531 constexpr ImVec1() : x(0.0f) { }
532 constexpr ImVec1(float _x) : x(_x) { }
533};
534
535// Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage)
537{
538 short x, y;
539 constexpr ImVec2ih() : x(0), y(0) {}
540 constexpr ImVec2ih(short _x, short _y) : x(_x), y(_y) {}
541 constexpr explicit ImVec2ih(const ImVec2& rhs) : x((short)rhs.x), y((short)rhs.y) {}
542};
543
544// Helper: ImRect (2D axis aligned bounding-box)
545// NB: we can't rely on ImVec2 math operators being available here!
546struct IMGUI_API ImRect
547{
548 ImVec2 Min; // Upper-left
549 ImVec2 Max; // Lower-right
550
551 constexpr ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {}
552 constexpr ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {}
553 constexpr ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {}
554 constexpr ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {}
555
556 ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
557 ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
558 float GetWidth() const { return Max.x - Min.x; }
559 float GetHeight() const { return Max.y - Min.y; }
560 float GetArea() const { return (Max.x - Min.x) * (Max.y - Min.y); }
561 ImVec2 GetTL() const { return Min; } // Top-left
562 ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right
563 ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left
564 ImVec2 GetBR() const { return Max; } // Bottom-right
565 bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; }
566 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; }
567 bool ContainsWithPad(const ImVec2& p, const ImVec2& pad) const { return p.x >= Min.x - pad.x && p.y >= Min.y - pad.y && p.x < Max.x + pad.x && p.y < Max.y + pad.y; }
568 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; }
569 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; }
570 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; }
571 void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; }
572 void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; }
573 void Translate(const ImVec2& d) { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; }
574 void TranslateX(float dx) { Min.x += dx; Max.x += dx; }
575 void TranslateY(float dy) { Min.y += dy; Max.y += dy; }
576 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.
577 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.
578 void Floor() { Min.x = IM_TRUNC(Min.x); Min.y = IM_TRUNC(Min.y); Max.x = IM_TRUNC(Max.x); Max.y = IM_TRUNC(Max.y); }
579 bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; }
580 ImVec4 ToVec4() const { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
581};
582
583// Helper: ImBitArray
584#define IM_BITARRAY_TESTBIT(_ARRAY, _N) ((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0) // Macro version of ImBitArrayTestBit(): ensure args have side-effect or are costly!
585#define IM_BITARRAY_CLEARBIT(_ARRAY, _N) ((_ARRAY[(_N) >> 5] &= ~((ImU32)1 << ((_N) & 31)))) // Macro version of ImBitArrayClearBit(): ensure args have side-effect or are costly!
586inline size_t ImBitArrayGetStorageSizeInBytes(int bitcount) { return (size_t)((bitcount + 31) >> 5) << 2; }
587inline void ImBitArrayClearAllBits(ImU32* arr, int bitcount){ memset(arr, 0, ImBitArrayGetStorageSizeInBytes(bitcount)); }
588inline bool ImBitArrayTestBit(const ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; }
589inline void ImBitArrayClearBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; }
590inline void ImBitArraySetBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; }
591inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on range [n..n2)
592{
593 n2--;
594 while (n <= n2)
595 {
596 int a_mod = (n & 31);
597 int b_mod = (n2 > (n | 31) ? 31 : (n2 & 31)) + 1;
598 ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1);
599 arr[n >> 5] |= mask;
600 n = (n + 32) & ~31;
601 }
602}
603
604typedef ImU32* ImBitArrayPtr; // Name for use in structs
605
606// Helper: ImBitArray class (wrapper over ImBitArray functions)
607// Store 1-bit per value.
608template<int BITCOUNT, int OFFSET = 0>
610{
611 ImU32 Storage[(BITCOUNT + 31) >> 5];
613 void ClearAllBits() { memset(Storage, 0, sizeof(Storage)); }
614 void SetAllBits() { memset(Storage, 255, sizeof(Storage)); }
615 bool TestBit(int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return IM_BITARRAY_TESTBIT(Storage, n); }
616 void SetBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArraySetBit(Storage, n); }
617 void ClearBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArrayClearBit(Storage, n); }
618 void SetBitRange(int n, int n2) { n += OFFSET; n2 += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT && n2 > n && n2 <= BITCOUNT); ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2)
619 bool operator[](int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return IM_BITARRAY_TESTBIT(Storage, n); }
620};
621
622// Helper: ImBitVector
623// Store 1-bit per value.
624struct IMGUI_API ImBitVector
625{
627 void Create(int sz) { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); }
628 void Clear() { Storage.clear(); }
629 bool TestBit(int n) const { IM_ASSERT(n < (Storage.Size << 5)); return IM_BITARRAY_TESTBIT(Storage.Data, n); }
630 void SetBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); }
631 void ClearBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); }
632};
633IM_MSVC_RUNTIME_CHECKS_RESTORE
634
635// Helper: ImSpan<>
636// Pointing to a span of data we don't own.
637template<typename T>
638struct ImSpan
639{
642
643 // Constructors, destructor
644 inline ImSpan() { Data = DataEnd = NULL; }
645 inline ImSpan(T* data, int size) { Data = data; DataEnd = data + size; }
646 inline ImSpan(T* data, T* data_end) { Data = data; DataEnd = data_end; }
647
648 inline void set(T* data, int size) { Data = data; DataEnd = data + size; }
649 inline void set(T* data, T* data_end) { Data = data; DataEnd = data_end; }
650 inline int size() const { return (int)(ptrdiff_t)(DataEnd - Data); }
651 inline int size_in_bytes() const { return (int)(ptrdiff_t)(DataEnd - Data) * (int)sizeof(T); }
652 inline T& operator[](int i) { T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; }
653 inline const T& operator[](int i) const { const T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; }
654
655 inline T* begin() { return Data; }
656 inline const T* begin() const { return Data; }
657 inline T* end() { return DataEnd; }
658 inline const T* end() const { return DataEnd; }
659
660 // Utilities
661 inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < DataEnd); const ptrdiff_t off = it - Data; return (int)off; }
662};
663
664// Helper: ImSpanAllocator<>
665// Facilitate storing multiple chunks into a single large block (the "arena")
666// - Usage: call Reserve() N times, allocate GetArenaSizeInBytes() worth, pass it to SetArenaBasePtr(), call GetSpan() N times to retrieve the aligned ranges.
667template<int CHUNKS>
669{
670 char* BasePtr;
673 int Offsets[CHUNKS];
674 int Sizes[CHUNKS];
675
676 ImSpanAllocator() { memset(this, 0, sizeof(*this)); }
677 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; }
678 inline int GetArenaSizeInBytes() { return CurrOff; }
679 inline void SetArenaBasePtr(void* base_ptr) { BasePtr = (char*)base_ptr; }
680 inline void* GetSpanPtrBegin(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n]); }
681 inline void* GetSpanPtrEnd(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n] + Sizes[n]); }
682 template<typename T>
683 inline void GetSpan(int n, ImSpan<T>* span) { span->set((T*)GetSpanPtrBegin(n), (T*)GetSpanPtrEnd(n)); }
684};
685
686// Helper: ImPool<>
687// Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer,
688// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object.
689typedef int ImPoolIdx;
690template<typename T>
691struct ImPool
692{
693 ImVector<T> Buf; // Contiguous data
694 ImGuiStorage Map; // ID->Index
695 ImPoolIdx FreeIdx; // Next free idx to use
696 ImPoolIdx AliveCount; // Number of active/alive items (for display purpose)
697
699 ~ImPool() { Clear(); }
700 T* GetByKey(ImGuiID key) { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; }
701 T* GetByIndex(ImPoolIdx n) { return &Buf[n]; }
702 ImPoolIdx GetIndex(const T* p) const { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); }
703 T* GetOrAddByKey(ImGuiID key) { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); }
704 bool Contains(const T* p) const { return (p >= Buf.Data && p < Buf.Data + Buf.Size); }
705 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; }
706 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]; }
707 void Remove(ImGuiID key, const T* p) { Remove(key, GetIndex(p)); }
708 void Remove(ImGuiID key, ImPoolIdx idx) { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); AliveCount--; }
709 void Reserve(int capacity) { Buf.reserve(capacity); Map.Data.reserve(capacity); }
710
711 // To iterate a ImPool: for (int n = 0; n < pool.GetMapSize(); n++) if (T* t = pool.TryGetMapData(n)) { ... }
712 // Can be avoided if you know .Remove() has never been called on the pool, or AliveCount == GetMapSize()
713 int GetAliveCount() const { return AliveCount; } // Number of active/alive items in the pool (for display purpose)
714 int GetBufSize() const { return Buf.Size; }
715 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
716 T* TryGetMapData(ImPoolIdx n) { int idx = Map.Data[n].val_i; if (idx == -1) return NULL; return GetByIndex(idx); }
717};
718
719// Helper: ImChunkStream<>
720// Build and iterate a contiguous stream of variable-sized structures.
721// This is used by Settings to store persistent data while reducing allocation count.
722// We store the chunk size first, and align the final size on 4 bytes boundaries.
723// The tedious/zealous amount of casting is to avoid -Wcast-align warnings.
724template<typename T>
726{
728
729 void clear() { Buf.clear(); }
730 bool empty() const { return Buf.Size == 0; }
731 int size() const { return Buf.Size; }
732 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); }
733 T* begin() { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); }
734 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; }
735 int chunk_size(const T* p) { return ((const int*)p)[-1]; }
736 T* end() { return (T*)(void*)(Buf.Data + Buf.Size); }
737 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; }
738 T* ptr_from_offset(int off) { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); }
739 void swap(ImChunkStream<T>& rhs) { rhs.Buf.swap(Buf); }
740};
741
742// Helper: ImGuiTextIndex
743// Maintain a line index for a text buffer. This is a strong candidate to be moved into the public API.
745{
747 int EndOffset = 0; // Because we don't own text buffer we need to maintain EndOffset (may bake in LineOffsets?)
748
749 void clear() { LineOffsets.clear(); EndOffset = 0; }
750 int size() { return LineOffsets.Size; }
751 const char* get_line_begin(const char* base, int n) { return base + LineOffsets[n]; }
752 const char* get_line_end(const char* base, int n) { return base + (n + 1 < LineOffsets.Size ? (LineOffsets[n + 1] - 1) : EndOffset); }
753 void append(const char* base, int old_size, int new_size);
754};
755
756// Helper: ImGuiStorage
757IMGUI_API ImGuiStoragePair* ImLowerBound(ImGuiStoragePair* in_begin, ImGuiStoragePair* in_end, ImGuiID key);
758//-----------------------------------------------------------------------------
759// [SECTION] ImDrawList support
760//-----------------------------------------------------------------------------
761
762// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
763// Estimation of number of circle segment based on error is derived using method described in https://stackoverflow.com/a/2244088/15194693
764// Number of segments (N) is calculated using equation:
765// N = ceil ( pi / acos(1 - error / r) ) where r > 0, error <= r
766// Our equation is significantly simpler that one in the post thanks for choosing segment that is
767// perpendicular to X axis. Follow steps in the article from this starting condition and you will
768// will get this result.
769//
770// Rendering circles with an odd number of segments, while mathematically correct will produce
771// asymmetrical results on the raster grid. Therefore we're rounding N to next even number (7->8, 8->8, 9->10 etc.)
772#define IM_ROUNDUP_TO_EVEN(_V) ((((_V) + 1) / 2) * 2)
773#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 4
774#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512
775#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)
776
777// Raw equation from IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC rewritten for 'r' and 'error'.
778#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(_N,_MAXERROR) ((_MAXERROR) / (1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))))
779#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_ERROR(_N,_RAD) ((1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))) / (_RAD))
780
781// ImDrawList: Lookup table size for adaptive arc drawing, cover full circle.
782#ifndef IM_DRAWLIST_ARCFAST_TABLE_SIZE
783#define IM_DRAWLIST_ARCFAST_TABLE_SIZE 48 // Number of samples in lookup table.
784#endif
785#define IM_DRAWLIST_ARCFAST_SAMPLE_MAX IM_DRAWLIST_ARCFAST_TABLE_SIZE // Sample index _PathArcToFastEx() for 360 angle.
786
787// Data shared between all ImDrawList instances
788// 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.
789struct IMGUI_API ImDrawListSharedData
790{
791 ImVec2 TexUvWhitePixel; // UV of white pixel in the atlas
792 ImFont* Font; // Current/default font (optional, for simplified AddText overload)
793 float FontSize; // Current/default font size (optional, for simplified AddText overload)
794 float FontScale; // Current/default font scale (== FontSize / Font->FontSize)
795 float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo()
796 float CircleSegmentMaxError; // Number of circle segments to use per pixel of radius for AddCircle() etc
797 ImVec4 ClipRectFullscreen; // Value for PushClipRectFullscreen()
798 ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
799
800 // [Internal] Temp write buffer
802
803 // [Internal] Lookup tables
804 ImVec2 ArcFastVtx[IM_DRAWLIST_ARCFAST_TABLE_SIZE]; // Sample points on the quarter of the circle.
805 float ArcFastRadiusCutoff; // Cutoff radius after which arc drawing will fallback to slower PathArcTo()
806 ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius before we calculate it dynamically (to avoid calculation overhead)
807 const ImVec4* TexUvLines; // UV of anti-aliased lines in the atlas
808
810 void SetCircleTessellationMaxError(float max_error);
811};
812
814{
815 ImVector<ImDrawList*>* Layers[2]; // Pointers to global layers for: regular, tooltip. LayersP[0] is owned by DrawData.
817
818 ImDrawDataBuilder() { memset(this, 0, sizeof(*this)); }
819};
820
821//-----------------------------------------------------------------------------
822// [SECTION] Data types support
823//-----------------------------------------------------------------------------
824
826{
827 ImGuiDataType Type;
828 ImU32 Count; // 1+
829 ImU32 Offset; // Offset in parent structure
830 void* GetVarPtr(void* parent) const { return (void*)((unsigned char*)parent + Offset); }
831};
832
834{
835 ImU8 Data[8]; // Opaque storage to fit any data up to ImGuiDataType_COUNT
836};
837
838// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
840{
841 size_t Size; // Size in bytes
842 const char* Name; // Short descriptive name for the type, for debugging
843 const char* PrintFmt; // Default printf format for the type
844 const char* ScanFmt; // Default scanf format for the type
845};
846
847// Extend ImGuiDataType_
848enum ImGuiDataTypePrivate_
849{
850 ImGuiDataType_String = ImGuiDataType_COUNT + 1,
851 ImGuiDataType_Pointer,
852 ImGuiDataType_ID,
853};
854
855//-----------------------------------------------------------------------------
856// [SECTION] Widgets support: flags, enums, data structures
857//-----------------------------------------------------------------------------
858
859// Extend ImGuiItemFlags
860// - input: PushItemFlag() manipulates g.CurrentItemFlags, ItemAdd() calls may add extra flags.
861// - output: stored in g.LastItemData.InFlags
862enum ImGuiItemFlagsPrivate_
863{
864 // Controlled by user
865 ImGuiItemFlags_Disabled = 1 << 10, // false // Disable interactions (DOES NOT affect visuals, see BeginDisabled()/EndDisabled() for full disable feature, and github #211).
866 ImGuiItemFlags_ReadOnly = 1 << 11, // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
867 ImGuiItemFlags_MixedValue = 1 << 12, // 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)
868 ImGuiItemFlags_NoWindowHoverableCheck = 1 << 13, // false // Disable hoverable check in ItemHoverable()
869 ImGuiItemFlags_AllowOverlap = 1 << 14, // false // Allow being overlapped by another widget. Not-hovered to Hovered transition deferred by a frame.
870
871 // Controlled by widget code
872 ImGuiItemFlags_Inputable = 1 << 20, // false // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature.
873 ImGuiItemFlags_HasSelectionUserData = 1 << 21, // false // Set by SetNextItemSelectionUserData()
874 ImGuiItemFlags_IsMultiSelect = 1 << 22, // false // Set by SetNextItemSelectionUserData()
875
876 ImGuiItemFlags_Default_ = ImGuiItemFlags_AutoClosePopups, // Please don't change, use PushItemFlag() instead.
877
878 // Obsolete
879 //ImGuiItemFlags_SelectableDontClosePopup = !ImGuiItemFlags_AutoClosePopups, // Can't have a redirect as we inverted the behavior
880};
881
882// Status flags for an already submitted item
883// - output: stored in g.LastItemData.StatusFlags
884enum ImGuiItemStatusFlags_
885{
886 ImGuiItemStatusFlags_None = 0,
887 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)
888 ImGuiItemStatusFlags_HasDisplayRect = 1 << 1, // g.LastItemData.DisplayRect is valid
889 ImGuiItemStatusFlags_Edited = 1 << 2, // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
890 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.
891 ImGuiItemStatusFlags_ToggledOpen = 1 << 4, // Set when TreeNode() reports toggling their open state.
892 ImGuiItemStatusFlags_HasDeactivated = 1 << 5, // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag.
893 ImGuiItemStatusFlags_Deactivated = 1 << 6, // Only valid if ImGuiItemStatusFlags_HasDeactivated is set.
894 ImGuiItemStatusFlags_HoveredWindow = 1 << 7, // Override the HoveredWindow test to allow cross-window hover testing.
895 ImGuiItemStatusFlags_Visible = 1 << 8, // [WIP] Set when item is overlapping the current clipping rectangle (Used internally. Please don't use yet: API/system will change as we refactor Itemadd()).
896 ImGuiItemStatusFlags_HasClipRect = 1 << 9, // g.LastItemData.ClipRect is valid.
897 ImGuiItemStatusFlags_HasShortcut = 1 << 10, // g.LastItemData.Shortcut valid. Set by SetNextItemShortcut() -> ItemAdd().
898
899 // Additional status + semantic for ImGuiTestEngine
900#ifdef IMGUI_ENABLE_TEST_ENGINE
901 ImGuiItemStatusFlags_Openable = 1 << 20, // Item is an openable (e.g. TreeNode)
902 ImGuiItemStatusFlags_Opened = 1 << 21, // Opened status
903 ImGuiItemStatusFlags_Checkable = 1 << 22, // Item is a checkable (e.g. CheckBox, MenuItem)
904 ImGuiItemStatusFlags_Checked = 1 << 23, // Checked status
905 ImGuiItemStatusFlags_Inputable = 1 << 24, // Item is a text-inputable (e.g. InputText, SliderXXX, DragXXX)
906#endif
907};
908
909// Extend ImGuiHoveredFlags_
910enum ImGuiHoveredFlagsPrivate_
911{
912 ImGuiHoveredFlags_DelayMask_ = ImGuiHoveredFlags_DelayNone | ImGuiHoveredFlags_DelayShort | ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay,
913 ImGuiHoveredFlags_AllowedMaskForIsWindowHovered = ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_NoPopupHierarchy | ImGuiHoveredFlags_DockHierarchy | ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_Stationary,
914 ImGuiHoveredFlags_AllowedMaskForIsItemHovered = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped | ImGuiHoveredFlags_AllowWhenDisabled | ImGuiHoveredFlags_NoNavOverride | ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayMask_,
915};
916
917// Extend ImGuiInputTextFlags_
918enum ImGuiInputTextFlagsPrivate_
919{
920 // [Internal]
921 ImGuiInputTextFlags_Multiline = 1 << 26, // For internal use by InputTextMultiline()
922 ImGuiInputTextFlags_NoMarkEdited = 1 << 27, // For internal use by functions using InputText() before reformatting data
923 ImGuiInputTextFlags_MergedItem = 1 << 28, // For internal use by TempInputText(), will skip calling ItemAdd(). Require bounding-box to strictly match.
924 ImGuiInputTextFlags_LocalizeDecimalPoint= 1 << 29, // For internal use by InputScalar() and TempInputScalar()
925};
926
927// Extend ImGuiButtonFlags_
928enum ImGuiButtonFlagsPrivate_
929{
930 ImGuiButtonFlags_PressedOnClick = 1 << 4, // return true on click (mouse down event)
931 ImGuiButtonFlags_PressedOnClickRelease = 1 << 5, // [Default] return true on click + release on same item <-- this is what the majority of Button are using
932 ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 6, // return true on click + release even if the release event is not done while hovering the item
933 ImGuiButtonFlags_PressedOnRelease = 1 << 7, // return true on release (default requires click+release)
934 ImGuiButtonFlags_PressedOnDoubleClick = 1 << 8, // return true on double-click (default requires click+release)
935 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)
936 ImGuiButtonFlags_Repeat = 1 << 10, // hold to repeat
937 ImGuiButtonFlags_FlattenChildren = 1 << 11, // allow interactions even if a child window is overlapping
938 ImGuiButtonFlags_AllowOverlap = 1 << 12, // require previous frame HoveredId to either match id or be null before being usable.
939 ImGuiButtonFlags_DontClosePopups = 1 << 13, // disable automatically closing parent popup on press // [UNUSED]
940 //ImGuiButtonFlags_Disabled = 1 << 14, // disable interactions -> use BeginDisabled() or ImGuiItemFlags_Disabled
941 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
942 ImGuiButtonFlags_NoKeyModifiers = 1 << 16, // disable mouse interaction if a key modifier is held
943 ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
944 ImGuiButtonFlags_NoNavFocus = 1 << 18, // don't override navigation focus when activated (FIXME: this is essentially used every time an item uses ImGuiItemFlags_NoNav, but because legacy specs don't requires LastItemData to be set ButtonBehavior(), we can't poll g.LastItemData.InFlags)
945 ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, // don't report as hovered when nav focus is on this item
946 ImGuiButtonFlags_NoSetKeyOwner = 1 << 20, // don't set key/input owner on the initial click (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!)
947 ImGuiButtonFlags_NoTestKeyOwner = 1 << 21, // don't test key/input owner when polling the key (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!)
948 ImGuiButtonFlags_PressedOnMask_ = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold,
949 ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease,
950};
951
952// Extend ImGuiComboFlags_
953enum ImGuiComboFlagsPrivate_
954{
955 ImGuiComboFlags_CustomPreview = 1 << 20, // enable BeginComboPreview()
956};
957
958// Extend ImGuiSliderFlags_
959enum ImGuiSliderFlagsPrivate_
960{
961 ImGuiSliderFlags_Vertical = 1 << 20, // Should this slider be orientated vertically?
962 ImGuiSliderFlags_ReadOnly = 1 << 21, // Consider using g.NextItemData.ItemFlags |= ImGuiItemFlags_ReadOnly instead.
963};
964
965// Extend ImGuiSelectableFlags_
966enum ImGuiSelectableFlagsPrivate_
967{
968 // NB: need to be in sync with last value of ImGuiSelectableFlags_
969 ImGuiSelectableFlags_NoHoldingActiveID = 1 << 20,
970 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.
971 ImGuiSelectableFlags_SelectOnClick = 1 << 22, // Override button behavior to react on Click (default is Click+Release)
972 ImGuiSelectableFlags_SelectOnRelease = 1 << 23, // Override button behavior to react on Release (default is Click+Release)
973 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)
974 ImGuiSelectableFlags_SetNavIdOnHover = 1 << 25, // Set Nav/Focus ID on mouse hover (used by MenuItem)
975 ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 26, // Disable padding each side with ItemSpacing * 0.5f
976 ImGuiSelectableFlags_NoSetKeyOwner = 1 << 27, // Don't set key/input owner on the initial click (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!)
977};
978
979// Extend ImGuiTreeNodeFlags_
980enum ImGuiTreeNodeFlagsPrivate_
981{
982 ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 28,// FIXME-WIP: Hard-coded for CollapsingHeader()
983 ImGuiTreeNodeFlags_UpsideDownArrow = 1 << 29,// FIXME-WIP: Turn Down arrow into an Up arrow, but reversed trees (#6517)
984};
985
986enum ImGuiSeparatorFlags_
987{
988 ImGuiSeparatorFlags_None = 0,
989 ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
990 ImGuiSeparatorFlags_Vertical = 1 << 1,
991 ImGuiSeparatorFlags_SpanAllColumns = 1 << 2, // Make separator cover all columns of a legacy Columns() set.
992};
993
994// Flags for FocusWindow(). This is not called ImGuiFocusFlags to avoid confusion with public-facing ImGuiFocusedFlags.
995// FIXME: Once we finishing replacing more uses of GetTopMostPopupModal()+IsWindowWithinBeginStackOf()
996// and FindBlockingModal() with this, we may want to change the flag to be opt-out instead of opt-in.
997enum ImGuiFocusRequestFlags_
998{
999 ImGuiFocusRequestFlags_None = 0,
1000 ImGuiFocusRequestFlags_RestoreFocusedChild = 1 << 0, // Find last focused child (if any) and focus it instead.
1001 ImGuiFocusRequestFlags_UnlessBelowModal = 1 << 1, // Do not set focus if the window is below a modal.
1002};
1003
1004enum ImGuiTextFlags_
1005{
1006 ImGuiTextFlags_None = 0,
1007 ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0,
1008};
1009
1010enum ImGuiTooltipFlags_
1011{
1012 ImGuiTooltipFlags_None = 0,
1013 ImGuiTooltipFlags_OverridePrevious = 1 << 1, // Clear/ignore previously submitted tooltip (defaults to append)
1014};
1015
1016// FIXME: this is in development, not exposed/functional as a generic feature yet.
1017// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
1018enum ImGuiLayoutType_
1019{
1020 ImGuiLayoutType_Horizontal = 0,
1021 ImGuiLayoutType_Vertical = 1
1022};
1023
1024enum ImGuiLogType
1025{
1026 ImGuiLogType_None = 0,
1027 ImGuiLogType_TTY,
1028 ImGuiLogType_File,
1029 ImGuiLogType_Buffer,
1030 ImGuiLogType_Clipboard,
1031};
1032
1033// X/Y enums are fixed to 0/1 so they may be used to index ImVec2
1034enum ImGuiAxis
1035{
1036 ImGuiAxis_None = -1,
1037 ImGuiAxis_X = 0,
1038 ImGuiAxis_Y = 1
1039};
1040
1041enum ImGuiPlotType
1042{
1043 ImGuiPlotType_Lines,
1044 ImGuiPlotType_Histogram,
1045};
1046
1047// Stacked color modifier, backup of modified data so we can restore it
1049{
1050 ImGuiCol Col;
1052};
1053
1054// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable.
1056{
1057 ImGuiStyleVar VarIdx;
1058 union { int BackupInt[2]; float BackupFloat[2]; };
1059 ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; }
1060 ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; }
1061 ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; }
1062};
1063
1064// Storage data for BeginComboPreview()/EndComboPreview()
1076
1077// Stacked storage data for BeginGroup()/EndGroup()
1094
1095// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper.
1096struct IMGUI_API ImGuiMenuColumns
1097{
1100 ImU16 Spacing;
1101 ImU16 OffsetIcon; // Always zero for now
1102 ImU16 OffsetLabel; // Offsets are locked in Update()
1105 ImU16 Widths[4]; // Width of: Icon, Label, Shortcut, Mark (accumulators for current frame)
1106
1107 ImGuiMenuColumns() { memset(this, 0, sizeof(*this)); }
1108 void Update(float spacing, bool window_reappearing);
1109 float DeclColumns(float w_icon, float w_label, float w_shortcut, float w_mark);
1110 void CalcNextTotalWidth(bool update_offsets);
1111};
1112
1113// Internal temporary state for deactivating InputText() instances.
1115{
1116 ImGuiID ID; // widget id owning the text state (which just got deactivated)
1117 ImVector<char> TextA; // text buffer
1118
1119 ImGuiInputTextDeactivatedState() { memset(this, 0, sizeof(*this)); }
1120 void ClearFreeMemory() { ID = 0; TextA.clear(); }
1121};
1122// Internal state of the currently focused/edited text input box
1123// For a given item ID, access with ImGui::GetInputTextState()
1124struct IMGUI_API ImGuiInputTextState
1125{
1126 ImGuiContext* Ctx; // parent UI context (needs to be set explicitly by parent).
1127 ImGuiID ID; // widget id owning the text state
1128 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.
1129 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.
1130 ImVector<char> TextA; // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity.
1131 ImVector<char> InitialTextA; // value to revert to when pressing Escape = backup of end-user buffer at the time of focus (in UTF-8, unaltered)
1132 bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
1133 int BufCapacityA; // end-user buffer capacity
1134 float ScrollX; // horizontal scrolling/offset
1135 ImStb::STB_TexteditState Stb; // state for stb_textedit.h
1136 float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately
1137 bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!)
1138 bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
1139 bool Edited; // edited this frame
1140 ImGuiInputTextFlags Flags; // copy of InputText() flags. may be used to check if e.g. ImGuiInputTextFlags_Password is set.
1141 bool ReloadUserBuf; // force a reload of user buf so it may be modified externally. may be automatic in future version.
1142 int ReloadSelectionStart; // POSITIONS ARE IN IMWCHAR units *NOT* UTF-8 this is why this is not exposed yet.
1144
1145 ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
1146 void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
1147 void ClearFreeMemory() { TextW.clear(); TextA.clear(); InitialTextA.clear(); }
1148 int GetUndoAvailCount() const { return Stb.undostate.undo_point; }
1149 int GetRedoAvailCount() const { return IMSTB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; }
1150 void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation
1151
1152 // Cursor & Selection
1153 void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
1154 void CursorClamp() { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); }
1155 bool HasSelection() const { return Stb.select_start != Stb.select_end; }
1156 void ClearSelection() { Stb.select_start = Stb.select_end = Stb.cursor; }
1157 int GetCursorPos() const { return Stb.cursor; }
1158 int GetSelectionStart() const { return Stb.select_start; }
1159 int GetSelectionEnd() const { return Stb.select_end; }
1160 void SelectAll() { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; }
1161
1162 // Reload user buf (WIP #2890)
1163 // If you modify underlying user-passed const char* while active you need to call this (InputText V2 may lift this)
1164 // strcpy(my_buf, "hello");
1165 // if (ImGuiInputTextState* state = ImGui::GetInputTextState(id)) // id may be ImGui::GetItemID() is last item
1166 // state->ReloadUserBufAndSelectAll();
1170
1171};
1172
1173enum ImGuiWindowRefreshFlags_
1174{
1175 ImGuiWindowRefreshFlags_None = 0,
1176 ImGuiWindowRefreshFlags_TryToAvoidRefresh = 1 << 0, // [EXPERIMENTAL] Try to keep existing contents, USER MUST NOT HONOR BEGIN() RETURNING FALSE AND NOT APPEND.
1177 ImGuiWindowRefreshFlags_RefreshOnHover = 1 << 1, // [EXPERIMENTAL] Always refresh on hover
1178 ImGuiWindowRefreshFlags_RefreshOnFocus = 1 << 2, // [EXPERIMENTAL] Always refresh on focus
1179 // Refresh policy/frequency, Load Balancing etc.
1180};
1181
1182enum ImGuiNextWindowDataFlags_
1183{
1184 ImGuiNextWindowDataFlags_None = 0,
1185 ImGuiNextWindowDataFlags_HasPos = 1 << 0,
1186 ImGuiNextWindowDataFlags_HasSize = 1 << 1,
1187 ImGuiNextWindowDataFlags_HasContentSize = 1 << 2,
1188 ImGuiNextWindowDataFlags_HasCollapsed = 1 << 3,
1189 ImGuiNextWindowDataFlags_HasSizeConstraint = 1 << 4,
1190 ImGuiNextWindowDataFlags_HasFocus = 1 << 5,
1191 ImGuiNextWindowDataFlags_HasBgAlpha = 1 << 6,
1192 ImGuiNextWindowDataFlags_HasScroll = 1 << 7,
1193 ImGuiNextWindowDataFlags_HasChildFlags = 1 << 8,
1194 ImGuiNextWindowDataFlags_HasRefreshPolicy = 1 << 9,
1195 ImGuiNextWindowDataFlags_HasViewport = 1 << 10,
1196 ImGuiNextWindowDataFlags_HasDock = 1 << 11,
1197 ImGuiNextWindowDataFlags_HasWindowClass = 1 << 12,
1198};
1199
1200// Storage for SetNexWindow** functions
1202{
1203 ImGuiNextWindowDataFlags Flags;
1204 ImGuiCond PosCond;
1205 ImGuiCond SizeCond;
1206 ImGuiCond CollapsedCond;
1207 ImGuiCond DockCond;
1213 ImGuiChildFlags ChildFlags;
1217 ImGuiSizeCallback SizeCallback;
1219 float BgAlphaVal; // Override background alpha
1220 ImGuiID ViewportId;
1221 ImGuiID DockId;
1223 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?)
1224 ImGuiWindowRefreshFlags RefreshFlagsVal;
1225
1226 ImGuiNextWindowData() { memset(this, 0, sizeof(*this)); }
1227 inline void ClearFlags() { Flags = ImGuiNextWindowDataFlags_None; }
1228};
1229
1230enum ImGuiNextItemDataFlags_
1231{
1232 ImGuiNextItemDataFlags_None = 0,
1233 ImGuiNextItemDataFlags_HasWidth = 1 << 0,
1234 ImGuiNextItemDataFlags_HasOpen = 1 << 1,
1235 ImGuiNextItemDataFlags_HasShortcut = 1 << 2,
1236 ImGuiNextItemDataFlags_HasRefVal = 1 << 3,
1237};
1238
1240{
1241 ImGuiNextItemDataFlags Flags;
1242 ImGuiItemFlags ItemFlags; // Currently only tested/used for ImGuiItemFlags_AllowOverlap and ImGuiItemFlags_HasSelectionUserData.
1243 // Non-flags members are NOT cleared by ItemAdd() meaning they are still valid during NavProcessItem()
1244 ImGuiID FocusScopeId; // Set by SetNextItemSelectionUserData()
1245 ImGuiSelectionUserData SelectionUserData; // Set by SetNextItemSelectionUserData() (note that NULL/0 is a valid value, we use -1 == ImGuiSelectionUserData_Invalid to mark invalid values)
1246 float Width; // Set by SetNextItemWidth()
1247 ImGuiKeyChord Shortcut; // Set by SetNextItemShortcut()
1248 ImGuiInputFlags ShortcutFlags; // Set by SetNextItemShortcut()
1249 bool OpenVal; // Set by SetNextItemOpen()
1250 ImU8 OpenCond; // Set by SetNextItemOpen()
1251 ImGuiDataTypeStorage RefVal; // Not exposed yet, for ImGuiInputTextFlags_ParseEmptyAsRefVal
1252
1253 ImGuiNextItemData() { memset(this, 0, sizeof(*this)); SelectionUserData = -1; }
1254 inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; ItemFlags = ImGuiItemFlags_None; } // Also cleared manually by ItemAdd()!
1255};
1256
1257// Status storage for the last submitted item
1259{
1260 ImGuiID ID;
1261 ImGuiItemFlags InFlags; // See ImGuiItemFlags_
1262 ImGuiItemStatusFlags StatusFlags; // See ImGuiItemStatusFlags_
1263 ImRect Rect; // Full rectangle
1264 ImRect NavRect; // Navigation scoring rectangle (not displayed)
1265 // Rarely used fields are not explicitly cleared, only valid when the corresponding ImGuiItemStatusFlags ar set.
1266 ImRect DisplayRect; // Display rectangle. ONLY VALID IF (StatusFlags & ImGuiItemStatusFlags_HasDisplayRect) is set.
1267 ImRect ClipRect; // Clip rectangle at the time of submitting item. ONLY VALID IF (StatusFlags & ImGuiItemStatusFlags_HasClipRect) is set..
1268 ImGuiKeyChord Shortcut; // Shortcut at the time of submitting item. ONLY VALID IF (StatusFlags & ImGuiItemStatusFlags_HasShortcut) is set..
1269
1270 ImGuiLastItemData() { memset(this, 0, sizeof(*this)); }
1271};
1272
1273// Store data emitted by TreeNode() for usage by TreePop()
1274// - To implement ImGuiTreeNodeFlags_NavLeftJumpsBackHere: store the minimum amount of data
1275// which we can't infer in TreePop(), to perform the equivalent of NavApplyItemToResult().
1276// Only stored when the node is a potential candidate for landing on a Left arrow jump.
1278{
1279 ImGuiID ID;
1280 ImGuiTreeNodeFlags TreeFlags;
1281 ImGuiItemFlags InFlags; // Used for nav landing
1282 ImRect NavRect; // Used for nav landing
1283};
1284
1285struct IMGUI_API ImGuiStackSizes
1286{
1296
1297 ImGuiStackSizes() { memset(this, 0, sizeof(*this)); }
1298 void SetToContextState(ImGuiContext* ctx);
1299 void CompareWithContextState(ImGuiContext* ctx);
1300};
1301
1302// Data saved for each window pushed into the stack
1304{
1307 ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
1308 bool DisabledOverrideReenable; // Non-child window override disabled flag
1309};
1310
1312{
1314 float Width;
1316};
1317
1319{
1320 void* Ptr; // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool.
1321 int Index; // Usually index in a main pool.
1322
1323 ImGuiPtrOrIndex(void* ptr) { Ptr = ptr; Index = -1; }
1324 ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; }
1325};
1326
1327//-----------------------------------------------------------------------------
1328// [SECTION] Popup support
1329//-----------------------------------------------------------------------------
1330
1331enum ImGuiPopupPositionPolicy
1332{
1333 ImGuiPopupPositionPolicy_Default,
1334 ImGuiPopupPositionPolicy_ComboBox,
1335 ImGuiPopupPositionPolicy_Tooltip,
1336};
1337
1338// Storage for popup stacks (g.OpenPopupStack and g.BeginPopupStack)
1340{
1341 ImGuiID PopupId; // Set on OpenPopup()
1342 ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup()
1343 ImGuiWindow* RestoreNavWindow;// Set on OpenPopup(), a NavWindow that will be restored on popup close
1344 int ParentNavLayer; // Resolved on BeginPopup(). Actually a ImGuiNavLayer type (declared down below), initialized to -1 which is not part of an enum, but serves well-enough as "not any of layers" value
1345 int OpenFrameCount; // Set on OpenPopup()
1346 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)
1347 ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
1348 ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup
1349
1350 ImGuiPopupData() { memset(this, 0, sizeof(*this)); ParentNavLayer = OpenFrameCount = -1; }
1351};
1352
1353//-----------------------------------------------------------------------------
1354// [SECTION] Inputs support
1355//-----------------------------------------------------------------------------
1356
1357// Bit array for named keys
1358typedef ImBitArray<ImGuiKey_NamedKey_COUNT, -ImGuiKey_NamedKey_BEGIN> ImBitArrayForNamedKeys;
1359
1360// [Internal] Key ranges
1361#define ImGuiKey_LegacyNativeKey_BEGIN 0
1362#define ImGuiKey_LegacyNativeKey_END 512
1363#define ImGuiKey_Keyboard_BEGIN (ImGuiKey_NamedKey_BEGIN)
1364#define ImGuiKey_Keyboard_END (ImGuiKey_GamepadStart)
1365#define ImGuiKey_Gamepad_BEGIN (ImGuiKey_GamepadStart)
1366#define ImGuiKey_Gamepad_END (ImGuiKey_GamepadRStickDown + 1)
1367#define ImGuiKey_Mouse_BEGIN (ImGuiKey_MouseLeft)
1368#define ImGuiKey_Mouse_END (ImGuiKey_MouseWheelY + 1)
1369#define ImGuiKey_Aliases_BEGIN (ImGuiKey_Mouse_BEGIN)
1370#define ImGuiKey_Aliases_END (ImGuiKey_Mouse_END)
1371
1372// [Internal] Named shortcuts for Navigation
1373#define ImGuiKey_NavKeyboardTweakSlow ImGuiMod_Ctrl
1374#define ImGuiKey_NavKeyboardTweakFast ImGuiMod_Shift
1375#define ImGuiKey_NavGamepadTweakSlow ImGuiKey_GamepadL1
1376#define ImGuiKey_NavGamepadTweakFast ImGuiKey_GamepadR1
1377#define ImGuiKey_NavGamepadActivate ImGuiKey_GamepadFaceDown
1378#define ImGuiKey_NavGamepadCancel ImGuiKey_GamepadFaceRight
1379#define ImGuiKey_NavGamepadMenu ImGuiKey_GamepadFaceLeft
1380#define ImGuiKey_NavGamepadInput ImGuiKey_GamepadFaceUp
1381
1382enum ImGuiInputEventType
1383{
1384 ImGuiInputEventType_None = 0,
1385 ImGuiInputEventType_MousePos,
1386 ImGuiInputEventType_MouseWheel,
1387 ImGuiInputEventType_MouseButton,
1388 ImGuiInputEventType_MouseViewport,
1389 ImGuiInputEventType_Key,
1390 ImGuiInputEventType_Text,
1391 ImGuiInputEventType_Focus,
1392 ImGuiInputEventType_COUNT
1393};
1394
1395enum ImGuiInputSource
1396{
1397 ImGuiInputSource_None = 0,
1398 ImGuiInputSource_Mouse, // Note: may be Mouse or TouchScreen or Pen. See io.MouseSource to distinguish them.
1399 ImGuiInputSource_Keyboard,
1400 ImGuiInputSource_Gamepad,
1401 ImGuiInputSource_COUNT
1402};
1403
1404// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension?
1405// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor'
1406struct ImGuiInputEventMousePos { float PosX, PosY; ImGuiMouseSource MouseSource; };
1407struct ImGuiInputEventMouseWheel { float WheelX, WheelY; ImGuiMouseSource MouseSource; };
1408struct ImGuiInputEventMouseButton { int Button; bool Down; ImGuiMouseSource MouseSource; };
1410struct ImGuiInputEventKey { ImGuiKey Key; bool Down; float AnalogValue; };
1411struct ImGuiInputEventText { unsigned int Char; };
1413
1415{
1416 ImGuiInputEventType Type;
1417 ImGuiInputSource Source;
1418 ImU32 EventId; // Unique, sequential increasing integer to identify an event (if you need to correlate them to other data).
1419 union
1420 {
1421 ImGuiInputEventMousePos MousePos; // if Type == ImGuiInputEventType_MousePos
1422 ImGuiInputEventMouseWheel MouseWheel; // if Type == ImGuiInputEventType_MouseWheel
1423 ImGuiInputEventMouseButton MouseButton; // if Type == ImGuiInputEventType_MouseButton
1424 ImGuiInputEventMouseViewport MouseViewport; // if Type == ImGuiInputEventType_MouseViewport
1425 ImGuiInputEventKey Key; // if Type == ImGuiInputEventType_Key
1426 ImGuiInputEventText Text; // if Type == ImGuiInputEventType_Text
1427 ImGuiInputEventAppFocused AppFocused; // if Type == ImGuiInputEventType_Focus
1428 };
1430
1431 ImGuiInputEvent() { memset(this, 0, sizeof(*this)); }
1432};
1433
1434// Input function taking an 'ImGuiID owner_id' argument defaults to (ImGuiKeyOwner_Any == 0) aka don't test ownership, which matches legacy behavior.
1435#define ImGuiKeyOwner_Any ((ImGuiID)0) // Accept key that have an owner, UNLESS a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease.
1436#define ImGuiKeyOwner_NoOwner ((ImGuiID)-1) // Require key to have no owner.
1437//#define ImGuiKeyOwner_None ImGuiKeyOwner_NoOwner // We previously called this 'ImGuiKeyOwner_None' but it was inconsistent with our pattern that _None values == 0 and quite dangerous. Also using _NoOwner makes the IsKeyPressed() calls more explicit.
1438
1439typedef ImS16 ImGuiKeyRoutingIndex;
1440
1441// Routing table entry (sizeof() == 16 bytes)
1443{
1444 ImGuiKeyRoutingIndex NextEntryIndex;
1445 ImU16 Mods; // Technically we'd only need 4-bits but for simplify we store ImGuiMod_ values which need 16-bits.
1446 ImU8 RoutingCurrScore; // [DEBUG] For debug display
1447 ImU8 RoutingNextScore; // Lower is better (0: perfect score)
1450
1452};
1453
1454// Routing table: maintain a desired owner for each possible key-chord (key + mods), and setup owner in NewFrame() when mods are matching.
1455// Stored in main context (1 instance)
1457{
1458 ImGuiKeyRoutingIndex Index[ImGuiKey_NamedKey_COUNT]; // Index of first entry in Entries[]
1460 ImVector<ImGuiKeyRoutingData> EntriesNext; // Double-buffer to avoid reallocation (could use a shared buffer)
1461
1463 void Clear() { for (int n = 0; n < IM_ARRAYSIZE(Index); n++) Index[n] = -1; Entries.clear(); EntriesNext.clear(); }
1464};
1465
1466// This extends ImGuiKeyData but only for named keys (legacy keys don't support the new features)
1467// Stored in main context (1 per named key). In the future it might be merged into ImGuiKeyData.
1469{
1470 ImGuiID OwnerCurr;
1471 ImGuiID OwnerNext;
1472 bool LockThisFrame; // Reading this key requires explicit owner id (until end of frame). Set by ImGuiInputFlags_LockThisFrame.
1473 bool LockUntilRelease; // Reading this key requires explicit owner id (until key is released). Set by ImGuiInputFlags_LockUntilRelease. When this is true LockThisFrame is always true as well.
1474
1475 ImGuiKeyOwnerData() { OwnerCurr = OwnerNext = ImGuiKeyOwner_NoOwner; LockThisFrame = LockUntilRelease = false; }
1476};
1477
1478// Extend ImGuiInputFlags_
1479// Flags for extended versions of IsKeyPressed(), IsMouseClicked(), Shortcut(), SetKeyOwner(), SetItemKeyOwner()
1480// Don't mistake with ImGuiInputTextFlags! (which is for ImGui::InputText() function)
1481enum ImGuiInputFlagsPrivate_
1482{
1483 // Flags for IsKeyPressed(), IsKeyChordPressed(), IsMouseClicked(), Shortcut()
1484 // - Repeat mode: Repeat rate selection
1485 ImGuiInputFlags_RepeatRateDefault = 1 << 1, // Repeat rate: Regular (default)
1486 ImGuiInputFlags_RepeatRateNavMove = 1 << 2, // Repeat rate: Fast
1487 ImGuiInputFlags_RepeatRateNavTweak = 1 << 3, // Repeat rate: Faster
1488 // - Repeat mode: Specify when repeating key pressed can be interrupted.
1489 // - In theory ImGuiInputFlags_RepeatUntilOtherKeyPress may be a desirable default, but it would break too many behavior so everything is opt-in.
1490 ImGuiInputFlags_RepeatUntilRelease = 1 << 4, // Stop repeating when released (default for all functions except Shortcut). This only exists to allow overriding Shortcut() default behavior.
1491 ImGuiInputFlags_RepeatUntilKeyModsChange = 1 << 5, // Stop repeating when released OR if keyboard mods are changed (default for Shortcut)
1492 ImGuiInputFlags_RepeatUntilKeyModsChangeFromNone = 1 << 6, // Stop repeating when released OR if keyboard mods are leaving the None state. Allows going from Mod+Key to Key by releasing Mod.
1493 ImGuiInputFlags_RepeatUntilOtherKeyPress = 1 << 7, // Stop repeating when released OR if any other keyboard key is pressed during the repeat
1494
1495 // Flags for SetKeyOwner(), SetItemKeyOwner()
1496 // - Locking key away from non-input aware code. Locking is useful to make input-owner-aware code steal keys from non-input-owner-aware code. If all code is input-owner-aware locking would never be necessary.
1497 ImGuiInputFlags_LockThisFrame = 1 << 20, // Further accesses to key data will require EXPLICIT owner ID (ImGuiKeyOwner_Any/0 will NOT accepted for polling). Cleared at end of frame.
1498 ImGuiInputFlags_LockUntilRelease = 1 << 21, // Further accesses to key data will require EXPLICIT owner ID (ImGuiKeyOwner_Any/0 will NOT accepted for polling). Cleared when the key is released or at end of each frame if key is released.
1499
1500 // - Condition for SetItemKeyOwner()
1501 ImGuiInputFlags_CondHovered = 1 << 22, // Only set if item is hovered (default to both)
1502 ImGuiInputFlags_CondActive = 1 << 23, // Only set if item is active (default to both)
1503 ImGuiInputFlags_CondDefault_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive,
1504
1505 // [Internal] Mask of which function support which flags
1506 ImGuiInputFlags_RepeatRateMask_ = ImGuiInputFlags_RepeatRateDefault | ImGuiInputFlags_RepeatRateNavMove | ImGuiInputFlags_RepeatRateNavTweak,
1507 ImGuiInputFlags_RepeatUntilMask_ = ImGuiInputFlags_RepeatUntilRelease | ImGuiInputFlags_RepeatUntilKeyModsChange | ImGuiInputFlags_RepeatUntilKeyModsChangeFromNone | ImGuiInputFlags_RepeatUntilOtherKeyPress,
1508 ImGuiInputFlags_RepeatMask_ = ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateMask_ | ImGuiInputFlags_RepeatUntilMask_,
1509 ImGuiInputFlags_CondMask_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive,
1510 ImGuiInputFlags_RouteTypeMask_ = ImGuiInputFlags_RouteActive | ImGuiInputFlags_RouteFocused | ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteAlways,
1511 ImGuiInputFlags_RouteOptionsMask_ = ImGuiInputFlags_RouteOverFocused | ImGuiInputFlags_RouteOverActive | ImGuiInputFlags_RouteUnlessBgFocused | ImGuiInputFlags_RouteFromRootWindow,
1512 ImGuiInputFlags_SupportedByIsKeyPressed = ImGuiInputFlags_RepeatMask_,
1513 ImGuiInputFlags_SupportedByIsMouseClicked = ImGuiInputFlags_Repeat,
1514 ImGuiInputFlags_SupportedByShortcut = ImGuiInputFlags_RepeatMask_ | ImGuiInputFlags_RouteTypeMask_ | ImGuiInputFlags_RouteOptionsMask_,
1515 ImGuiInputFlags_SupportedBySetNextItemShortcut = ImGuiInputFlags_RepeatMask_ | ImGuiInputFlags_RouteTypeMask_ | ImGuiInputFlags_RouteOptionsMask_ | ImGuiInputFlags_Tooltip,
1516 ImGuiInputFlags_SupportedBySetKeyOwner = ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease,
1517 ImGuiInputFlags_SupportedBySetItemKeyOwner = ImGuiInputFlags_SupportedBySetKeyOwner | ImGuiInputFlags_CondMask_,
1518};
1519
1520//-----------------------------------------------------------------------------
1521// [SECTION] Clipper support
1522//-----------------------------------------------------------------------------
1523
1524// Note that Max is exclusive, so perhaps should be using a Begin/End convention.
1526{
1527 int Min;
1528 int Max;
1529 bool PosToIndexConvert; // Begin/End are absolute position (will be converted to indices later)
1530 ImS8 PosToIndexOffsetMin; // Add to Min after converting to indices
1531 ImS8 PosToIndexOffsetMax; // Add to Min after converting to indices
1532
1533 static ImGuiListClipperRange FromIndices(int min, int max) { ImGuiListClipperRange r = { min, max, false, 0, 0 }; return r; }
1534 static ImGuiListClipperRange FromPositions(float y1, float y2, int off_min, int off_max) { ImGuiListClipperRange r = { (int)y1, (int)y2, true, (ImS8)off_min, (ImS8)off_max }; return r; }
1535};
1536
1537// Temporary clipper data, buffers shared/reused between instances
1549
1550//-----------------------------------------------------------------------------
1551// [SECTION] Navigation support
1552//-----------------------------------------------------------------------------
1553
1554enum ImGuiActivateFlags_
1555{
1556 ImGuiActivateFlags_None = 0,
1557 ImGuiActivateFlags_PreferInput = 1 << 0, // Favor activation that requires keyboard text input (e.g. for Slider/Drag). Default for Enter key.
1558 ImGuiActivateFlags_PreferTweak = 1 << 1, // Favor activation for tweaking with arrows or gamepad (e.g. for Slider/Drag). Default for Space key and if keyboard is not used.
1559 ImGuiActivateFlags_TryToPreserveState = 1 << 2, // Request widget to preserve state if it can (e.g. InputText will try to preserve cursor/selection)
1560 ImGuiActivateFlags_FromTabbing = 1 << 3, // Activation requested by a tabbing request
1561 ImGuiActivateFlags_FromShortcut = 1 << 4, // Activation requested by an item shortcut via SetNextItemShortcut() function.
1562};
1563
1564// Early work-in-progress API for ScrollToItem()
1565enum ImGuiScrollFlags_
1566{
1567 ImGuiScrollFlags_None = 0,
1568 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]
1569 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]
1570 ImGuiScrollFlags_KeepVisibleCenterX = 1 << 2, // If item is not visible: scroll to make the item centered on X axis [rarely used]
1571 ImGuiScrollFlags_KeepVisibleCenterY = 1 << 3, // If item is not visible: scroll to make the item centered on Y axis
1572 ImGuiScrollFlags_AlwaysCenterX = 1 << 4, // Always center the result item on X axis [rarely used]
1573 ImGuiScrollFlags_AlwaysCenterY = 1 << 5, // Always center the result item on Y axis [default for Y axis for appearing window)
1574 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).
1575 ImGuiScrollFlags_MaskX_ = ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleCenterX | ImGuiScrollFlags_AlwaysCenterX,
1576 ImGuiScrollFlags_MaskY_ = ImGuiScrollFlags_KeepVisibleEdgeY | ImGuiScrollFlags_KeepVisibleCenterY | ImGuiScrollFlags_AlwaysCenterY,
1577};
1578
1579enum ImGuiNavHighlightFlags_
1580{
1581 ImGuiNavHighlightFlags_None = 0,
1582 ImGuiNavHighlightFlags_Compact = 1 << 1, // Compact highlight, no padding
1583 ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse.
1584 ImGuiNavHighlightFlags_NoRounding = 1 << 3,
1585};
1586
1587enum ImGuiNavMoveFlags_
1588{
1589 ImGuiNavMoveFlags_None = 0,
1590 ImGuiNavMoveFlags_LoopX = 1 << 0, // On failed request, restart from opposite side
1591 ImGuiNavMoveFlags_LoopY = 1 << 1,
1592 ImGuiNavMoveFlags_WrapX = 1 << 2, // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left)
1593 ImGuiNavMoveFlags_WrapY = 1 << 3, // This is not super useful but provided for completeness
1594 ImGuiNavMoveFlags_WrapMask_ = ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_WrapY,
1595 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)
1596 ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, // Store alternate result in NavMoveResultLocalVisible that only comprise elements that are already fully visible (used by PageUp/PageDown)
1597 ImGuiNavMoveFlags_ScrollToEdgeY = 1 << 6, // Force scrolling to min/max (used by Home/End) // FIXME-NAV: Aim to remove or reword, probably unnecessary
1598 ImGuiNavMoveFlags_Forwarded = 1 << 7,
1599 ImGuiNavMoveFlags_DebugNoResult = 1 << 8, // Dummy scoring for debug purpose, don't apply result
1600 ImGuiNavMoveFlags_FocusApi = 1 << 9, // Requests from focus API can land/focus/activate items even if they are marked with _NoTabStop (see NavProcessItemForTabbingRequest() for details)
1601 ImGuiNavMoveFlags_IsTabbing = 1 << 10, // == Focus + Activate if item is Inputable + DontChangeNavHighlight
1602 ImGuiNavMoveFlags_IsPageMove = 1 << 11, // Identify a PageDown/PageUp request.
1603 ImGuiNavMoveFlags_Activate = 1 << 12, // Activate/select target item.
1604 ImGuiNavMoveFlags_NoSelect = 1 << 13, // Don't trigger selection by not setting g.NavJustMovedTo
1605 ImGuiNavMoveFlags_NoSetNavHighlight = 1 << 14, // Do not alter the visible state of keyboard vs mouse nav highlight
1606 ImGuiNavMoveFlags_NoClearActiveId = 1 << 15, // (Experimental) Do not clear active id when applying move result
1607};
1608
1609enum ImGuiNavLayer
1610{
1611 ImGuiNavLayer_Main = 0, // Main scrolling layer
1612 ImGuiNavLayer_Menu = 1, // Menu layer (access with Alt)
1613 ImGuiNavLayer_COUNT
1614};
1615
1616// Storage for navigation query/results
1618{
1619 ImGuiWindow* Window; // Init,Move // Best candidate window (result->ItemWindow->RootWindowForNav == request->Window)
1620 ImGuiID ID; // Init,Move // Best candidate item ID
1621 ImGuiID FocusScopeId; // Init,Move // Best candidate focus scope ID
1622 ImRect RectRel; // Init,Move // Best candidate bounding box in window relative space
1623 ImGuiItemFlags InFlags; // ????,Move // Best candidate item flags
1624 float DistBox; // Move // Best candidate box distance to current NavId
1625 float DistCenter; // Move // Best candidate center distance to current NavId
1626 float DistAxial; // Move // Best candidate axial distance to current NavId
1627 ImGuiSelectionUserData SelectionUserData;//I+Mov // Best candidate SetNextItemSelectionUserData() value. Valid if (InFlags & ImGuiItemFlags_HasSelectionUserData)
1628
1630 void Clear() { Window = NULL; ID = FocusScopeId = 0; InFlags = 0; SelectionUserData = -1; DistBox = DistCenter = DistAxial = FLT_MAX; }
1631};
1632
1633// Storage for PushFocusScope()
1635{
1636 ImGuiID ID;
1637 ImGuiID WindowID;
1638};
1639
1640//-----------------------------------------------------------------------------
1641// [SECTION] Typing-select support
1642//-----------------------------------------------------------------------------
1643
1644// Flags for GetTypingSelectRequest()
1645enum ImGuiTypingSelectFlags_
1646{
1647 ImGuiTypingSelectFlags_None = 0,
1648 ImGuiTypingSelectFlags_AllowBackspace = 1 << 0, // Backspace to delete character inputs. If using: ensure GetTypingSelectRequest() is not called more than once per frame (filter by e.g. focus state)
1649 ImGuiTypingSelectFlags_AllowSingleCharMode = 1 << 1, // Allow "single char" search mode which is activated when pressing the same character multiple times.
1650};
1651
1652// Returned by GetTypingSelectRequest(), designed to eventually be public.
1654{
1655 ImGuiTypingSelectFlags Flags; // Flags passed to GetTypingSelectRequest()
1657 const char* SearchBuffer; // Search buffer contents (use full string. unless SingleCharMode is set, in which case use SingleCharSize).
1658 bool SelectRequest; // Set when buffer was modified this frame, requesting a selection.
1659 bool SingleCharMode; // Notify when buffer contains same character repeated, to implement special mode. In this situation it preferred to not display any on-screen search indication.
1660 ImS8 SingleCharSize; // Length in bytes of first letter codepoint (1 for ascii, 2-4 for UTF-8). If (SearchBufferLen==RepeatCharSize) only 1 letter has been input.
1661};
1662
1663// Storage for GetTypingSelectRequest()
1665{
1667 char SearchBuffer[64]; // Search buffer: no need to make dynamic as this search is very transient.
1668 ImGuiID FocusScope;
1670 float LastRequestTime = 0.0f;
1671 bool SingleCharModeLock = false; // After a certain single char repeat count we lock into SingleCharMode. Two benefits: 1) buffer never fill, 2) we can provide an immediate SingleChar mode without timer elapsing.
1672
1673 ImGuiTypingSelectState() { memset(this, 0, sizeof(*this)); }
1674 void Clear() { SearchBuffer[0] = 0; SingleCharModeLock = false; } // We preserve remaining data for easier debugging
1675};
1676
1677//-----------------------------------------------------------------------------
1678// [SECTION] Columns support
1679//-----------------------------------------------------------------------------
1680
1681// Flags for internal's BeginColumns(). This is an obsolete API. Prefer using BeginTable() nowadays!
1682enum ImGuiOldColumnFlags_
1683{
1684 ImGuiOldColumnFlags_None = 0,
1685 ImGuiOldColumnFlags_NoBorder = 1 << 0, // Disable column dividers
1686 ImGuiOldColumnFlags_NoResize = 1 << 1, // Disable resizing columns when clicking on the dividers
1687 ImGuiOldColumnFlags_NoPreserveWidths = 1 << 2, // Disable column width preservation when adjusting columns
1688 ImGuiOldColumnFlags_NoForceWithinWindow = 1 << 3, // Disable forcing columns to fit within window
1689 ImGuiOldColumnFlags_GrowParentContentsSize = 1 << 4, // Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
1690
1691 // Obsolete names (will be removed)
1692#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
1693 //ImGuiColumnsFlags_None = ImGuiOldColumnFlags_None,
1694 //ImGuiColumnsFlags_NoBorder = ImGuiOldColumnFlags_NoBorder,
1695 //ImGuiColumnsFlags_NoResize = ImGuiOldColumnFlags_NoResize,
1696 //ImGuiColumnsFlags_NoPreserveWidths = ImGuiOldColumnFlags_NoPreserveWidths,
1697 //ImGuiColumnsFlags_NoForceWithinWindow = ImGuiOldColumnFlags_NoForceWithinWindow,
1698 //ImGuiColumnsFlags_GrowParentContentsSize = ImGuiOldColumnFlags_GrowParentContentsSize,
1699#endif
1700};
1701
1703{
1704 float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
1706 ImGuiOldColumnFlags Flags; // Not exposed
1708
1709 ImGuiOldColumnData() { memset(this, 0, sizeof(*this)); }
1710};
1711
1713{
1714 ImGuiID ID;
1715 ImGuiOldColumnFlags Flags;
1720 float OffMinX, OffMaxX; // Offsets from HostWorkRect.Min.x
1722 float HostCursorPosY; // Backup of CursorPos at the time of BeginColumns()
1723 float HostCursorMaxPosX; // Backup of CursorMaxPos at the time of BeginColumns()
1724 ImRect HostInitialClipRect; // Backup of ClipRect at the time of BeginColumns()
1725 ImRect HostBackupClipRect; // Backup of ClipRect during PushColumnsBackground()/PopColumnsBackground()
1726 ImRect HostBackupParentWorkRect;//Backup of WorkRect at the time of BeginColumns()
1729
1730 ImGuiOldColumns() { memset(this, 0, sizeof(*this)); }
1731};
1732
1733//-----------------------------------------------------------------------------
1734// [SECTION] Box-select support
1735//-----------------------------------------------------------------------------
1736
1738{
1739 // Active box-selection data (persistent, 1 active at a time)
1740 ImGuiID ID;
1743 bool IsStartedFromVoid; // Starting click was not from an item.
1745 ImGuiKeyChord KeyMods : 16; // Latched key-mods for box-select logic.
1746 ImVec2 StartPosRel; // Start position in window-contents relative space (to support scrolling)
1747 ImVec2 EndPosRel; // End position in window-contents relative space
1748 ImVec2 ScrollAccum; // Scrolling accumulator (to behave at high-frame spaces)
1750
1751 // Temporary/Transient data
1752 bool UnclipMode; // (Temp/Transient, here in hot area). Set/cleared by the BeginMultiSelect()/EndMultiSelect() owning active box-select.
1753 ImRect UnclipRect; // Rectangle where ItemAdd() clipping may be temporarily disabled. Need support by multi-select supporting widgets.
1754 ImRect BoxSelectRectPrev; // Selection rectangle in absolute coordinates (derived every frame from BoxSelectStartPosRel and MousePos)
1756
1757 ImGuiBoxSelectState() { memset(this, 0, sizeof(*this)); }
1758};
1759
1760//-----------------------------------------------------------------------------
1761// [SECTION] Multi-select support
1762//-----------------------------------------------------------------------------
1763
1764// We always assume that -1 is an invalid value (which works for indices and pointers)
1765#define ImGuiSelectionUserData_Invalid ((ImGuiSelectionUserData)-1)
1766
1767// Temporary storage for multi-select
1769{
1770 ImGuiMultiSelectIO IO; // MUST BE FIRST FIELD. Requests are set and returned by BeginMultiSelect()/EndMultiSelect() + written to by user during the loop.
1772 ImGuiID FocusScopeId; // Copied from g.CurrentFocusScopeId (unless another selection scope was pushed manually)
1773 ImGuiMultiSelectFlags Flags;
1777 ImGuiKeyChord KeyMods;
1778 ImS8 LoopRequestSetAll; // -1: no operation, 0: clear all, 1: select all.
1779 bool IsEndIO; // Set when switching IO from BeginMultiSelect() to EndMultiSelect() state.
1780 bool IsFocused; // Set if currently focusing the selection scope (any item of the selection). May be used if you have custom shortcut associated to selection.
1781 bool IsKeyboardSetRange; // Set by BeginMultiSelect() when using Shift+Navigation. Because scrolling may be affected we can't afford a frame of lag with Shift+Navigation.
1783 bool RangeSrcPassedBy; // Set by the item that matches RangeSrcItem.
1784 bool RangeDstPassedBy; // Set by the item that matches NavJustMovedToId when IsSetRange is set.
1785 ImGuiSelectionUserData BoxSelectLastitem; // Copy of last submitted item data, used to merge output ranges.
1786
1788 void Clear() { size_t io_sz = sizeof(IO); ClearIO(); memset((void*)(&IO + 1), 0, sizeof(*this) - io_sz); } // Zero-clear except IO as we preserve IO.Requests[] buffer allocation.
1789 void ClearIO() { IO.Requests.resize(0); IO.RangeSrcItem = IO.NavIdItem = ImGuiSelectionUserData_Invalid; IO.NavIdSelected = IO.RangeSrcReset = false; }
1790};
1791
1792// Persistent storage for multi-select (as long as selection is alive)
1794{
1796 ImGuiID ID;
1797 int LastFrameActive; // Last used frame-count, for GC.
1798 int LastSelectionSize; // Set by BeginMultiSelect() based on optional info provided by user. May be -1 if unknown.
1799 ImS8 RangeSelected; // -1 (don't have) or true/false
1800 ImS8 NavIdSelected; // -1 (don't have) or true/false
1801 ImGuiSelectionUserData RangeSrcItem; //
1802 ImGuiSelectionUserData NavIdItem; // SetNextItemSelectionUserData() value for NavId (if part of submitted items)
1803
1804 ImGuiMultiSelectState() { Window = NULL; ID = 0; LastFrameActive = LastSelectionSize = 0; RangeSelected = NavIdSelected = -1; RangeSrcItem = NavIdItem = ImGuiSelectionUserData_Invalid; }
1805};
1806
1807//-----------------------------------------------------------------------------
1808// [SECTION] Docking support
1809//-----------------------------------------------------------------------------
1810
1811#define DOCKING_HOST_DRAW_CHANNEL_BG 0 // Dock host: background fill
1812#define DOCKING_HOST_DRAW_CHANNEL_FG 1 // Dock host: decorations and contents
1813
1814#ifdef IMGUI_HAS_DOCK
1815
1816// Extend ImGuiDockNodeFlags_
1817enum ImGuiDockNodeFlagsPrivate_
1818{
1819 // [Internal]
1820 ImGuiDockNodeFlags_DockSpace = 1 << 10, // Saved // A dockspace is a node that occupy space within an existing user window. Otherwise the node is floating and create its own window.
1821 ImGuiDockNodeFlags_CentralNode = 1 << 11, // Saved // The central node has 2 main properties: stay visible when empty, only use "remaining" spaces from its neighbor.
1822 ImGuiDockNodeFlags_NoTabBar = 1 << 12, // Saved // Tab bar is completely unavailable. No triangle in the corner to enable it back.
1823 ImGuiDockNodeFlags_HiddenTabBar = 1 << 13, // Saved // Tab bar is hidden, with a triangle in the corner to show it again (NB: actual tab-bar instance may be destroyed as this is only used for single-window tab bar)
1824 ImGuiDockNodeFlags_NoWindowMenuButton = 1 << 14, // Saved // Disable window/docking menu (that one that appears instead of the collapse button)
1825 ImGuiDockNodeFlags_NoCloseButton = 1 << 15, // Saved // Disable close button
1826 ImGuiDockNodeFlags_NoResizeX = 1 << 16, // //
1827 ImGuiDockNodeFlags_NoResizeY = 1 << 17, // //
1828 ImGuiDockNodeFlags_DockedWindowsInFocusRoute= 1 << 18, // // Any docked window will be automatically be focus-route chained (window->ParentWindowForFocusRoute set to this) so Shortcut() in this window can run when any docked window is focused.
1829 // Disable docking/undocking actions in this dockspace or individual node (existing docked nodes will be preserved)
1830 // Those are not exposed in public because the desirable sharing/inheriting/copy-flag-on-split behaviors are quite difficult to design and understand.
1831 // The two public flags ImGuiDockNodeFlags_NoDockingOverCentralNode/ImGuiDockNodeFlags_NoDockingSplit don't have those issues.
1832 ImGuiDockNodeFlags_NoDockingSplitOther = 1 << 19, // // Disable this node from splitting other windows/nodes.
1833 ImGuiDockNodeFlags_NoDockingOverMe = 1 << 20, // // Disable other windows/nodes from being docked over this node.
1834 ImGuiDockNodeFlags_NoDockingOverOther = 1 << 21, // // Disable this node from being docked over another window or non-empty node.
1835 ImGuiDockNodeFlags_NoDockingOverEmpty = 1 << 22, // // Disable this node from being docked over an empty node (e.g. DockSpace with no other windows)
1836 ImGuiDockNodeFlags_NoDocking = ImGuiDockNodeFlags_NoDockingOverMe | ImGuiDockNodeFlags_NoDockingOverOther | ImGuiDockNodeFlags_NoDockingOverEmpty | ImGuiDockNodeFlags_NoDockingSplit | ImGuiDockNodeFlags_NoDockingSplitOther,
1837 // Masks
1838 ImGuiDockNodeFlags_SharedFlagsInheritMask_ = ~0,
1839 ImGuiDockNodeFlags_NoResizeFlagsMask_ = ImGuiDockNodeFlags_NoResize | ImGuiDockNodeFlags_NoResizeX | ImGuiDockNodeFlags_NoResizeY,
1840 // When splitting, those local flags are moved to the inheriting child, never duplicated
1841 ImGuiDockNodeFlags_LocalFlagsTransferMask_ = ImGuiDockNodeFlags_NoDockingSplit | ImGuiDockNodeFlags_NoResizeFlagsMask_ | ImGuiDockNodeFlags_AutoHideTabBar | ImGuiDockNodeFlags_CentralNode | ImGuiDockNodeFlags_NoTabBar | ImGuiDockNodeFlags_HiddenTabBar | ImGuiDockNodeFlags_NoWindowMenuButton | ImGuiDockNodeFlags_NoCloseButton,
1842 ImGuiDockNodeFlags_SavedFlagsMask_ = ImGuiDockNodeFlags_NoResizeFlagsMask_ | ImGuiDockNodeFlags_DockSpace | ImGuiDockNodeFlags_CentralNode | ImGuiDockNodeFlags_NoTabBar | ImGuiDockNodeFlags_HiddenTabBar | ImGuiDockNodeFlags_NoWindowMenuButton | ImGuiDockNodeFlags_NoCloseButton,
1843};
1844
1845// Store the source authority (dock node vs window) of a field
1846enum ImGuiDataAuthority_
1847{
1848 ImGuiDataAuthority_Auto,
1849 ImGuiDataAuthority_DockNode,
1850 ImGuiDataAuthority_Window,
1851};
1852
1853enum ImGuiDockNodeState
1854{
1855 ImGuiDockNodeState_Unknown,
1856 ImGuiDockNodeState_HostWindowHiddenBecauseSingleWindow,
1857 ImGuiDockNodeState_HostWindowHiddenBecauseWindowsAreResizing,
1858 ImGuiDockNodeState_HostWindowVisible,
1859};
1860
1861// sizeof() 156~192
1862struct IMGUI_API ImGuiDockNode
1863{
1864 ImGuiID ID;
1865 ImGuiDockNodeFlags SharedFlags; // (Write) Flags shared by all nodes of a same dockspace hierarchy (inherited from the root node)
1866 ImGuiDockNodeFlags LocalFlags; // (Write) Flags specific to this node
1867 ImGuiDockNodeFlags LocalFlagsInWindows; // (Write) Flags specific to this node, applied from windows
1868 ImGuiDockNodeFlags MergedFlags; // (Read) Effective flags (== SharedFlags | LocalFlagsInNode | LocalFlagsInWindows)
1869 ImGuiDockNodeState State;
1871 ImGuiDockNode* ChildNodes[2]; // [Split node only] Child nodes (left/right or top/bottom). Consider switching to an array.
1872 ImVector<ImGuiWindow*> Windows; // Note: unordered list! Iterate TabBar->Tabs for user-order.
1874 ImVec2 Pos; // Current position
1875 ImVec2 Size; // Current size
1876 ImVec2 SizeRef; // [Split node only] Last explicitly written-to size (overridden when using a splitter affecting the node), used to calculate Size.
1877 ImGuiAxis SplitAxis; // [Split node only] Split axis (X or Y)
1878 ImGuiWindowClass WindowClass; // [Root node only]
1880
1882 ImGuiWindow* VisibleWindow; // Generally point to window which is ID is == SelectedTabID, but when CTRL+Tabbing this can be a different window.
1883 ImGuiDockNode* CentralNode; // [Root node only] Pointer to central node.
1884 ImGuiDockNode* OnlyNodeWithWindows; // [Root node only] Set when there is a single visible node within the hierarchy.
1885 int CountNodeWithWindows; // [Root node only]
1886 int LastFrameAlive; // Last frame number the node was updated or kept alive explicitly with DockSpace() + ImGuiDockNodeFlags_KeepAliveOnly
1887 int LastFrameActive; // Last frame number the node was updated.
1888 int LastFrameFocused; // Last frame number the node was focused.
1889 ImGuiID LastFocusedNodeId; // [Root node only] Which of our child docking node (any ancestor in the hierarchy) was last focused.
1890 ImGuiID SelectedTabId; // [Leaf node only] Which of our tab/window is selected.
1891 ImGuiID WantCloseTabId; // [Leaf node only] Set when closing a specific tab/window.
1892 ImGuiID RefViewportId; // Reference viewport ID from visible window when HostWindow == NULL.
1893 ImGuiDataAuthority AuthorityForPos :3;
1894 ImGuiDataAuthority AuthorityForSize :3;
1895 ImGuiDataAuthority AuthorityForViewport :3;
1896 bool IsVisible :1; // Set to false when the node is hidden (usually disabled as it has no active window)
1897 bool IsFocused :1;
1899 bool HasCloseButton :1; // Provide space for a close button (if any of the docked window has one). Note that button may be hidden on window without one.
1902 bool WantCloseAll :1; // Set when closing all tabs at once.
1904 bool WantMouseMove :1; // After a node extraction we need to transition toward moving the newly created host window
1907
1908 ImGuiDockNode(ImGuiID id);
1910 bool IsRootNode() const { return ParentNode == NULL; }
1911 bool IsDockSpace() const { return (MergedFlags & ImGuiDockNodeFlags_DockSpace) != 0; }
1912 bool IsFloatingNode() const { return ParentNode == NULL && (MergedFlags & ImGuiDockNodeFlags_DockSpace) == 0; }
1913 bool IsCentralNode() const { return (MergedFlags & ImGuiDockNodeFlags_CentralNode) != 0; }
1914 bool IsHiddenTabBar() const { return (MergedFlags & ImGuiDockNodeFlags_HiddenTabBar) != 0; } // Hidden tab bar can be shown back by clicking the small triangle
1915 bool IsNoTabBar() const { return (MergedFlags & ImGuiDockNodeFlags_NoTabBar) != 0; } // Never show a tab bar
1916 bool IsSplitNode() const { return ChildNodes[0] != NULL; }
1917 bool IsLeafNode() const { return ChildNodes[0] == NULL; }
1918 bool IsEmpty() const { return ChildNodes[0] == NULL && Windows.Size == 0; }
1919 ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
1920
1921 void SetLocalFlags(ImGuiDockNodeFlags flags) { LocalFlags = flags; UpdateMergedFlags(); }
1923};
1924
1925// List of colors that are stored at the time of Begin() into Docked Windows.
1926// We currently store the packed colors in a simple array window->DockStyle.Colors[].
1927// A better solution may involve appending into a log of colors in ImGuiContext + store offsets into those arrays in ImGuiWindow,
1928// but it would be more complex as we'd need to double-buffer both as e.g. drop target may refer to window from last frame.
1929enum ImGuiWindowDockStyleCol
1930{
1931 ImGuiWindowDockStyleCol_Text,
1932 ImGuiWindowDockStyleCol_TabHovered,
1933 ImGuiWindowDockStyleCol_TabFocused,
1934 ImGuiWindowDockStyleCol_TabSelected,
1935 ImGuiWindowDockStyleCol_TabSelectedOverline,
1936 ImGuiWindowDockStyleCol_TabDimmed,
1937 ImGuiWindowDockStyleCol_TabDimmedSelected,
1938 ImGuiWindowDockStyleCol_TabDimmedSelectedOverline,
1939 ImGuiWindowDockStyleCol_COUNT
1940};
1941
1942// We don't store style.Alpha: dock_node->LastBgColor embeds it and otherwise it would only affect the docking tab, which intuitively I would say we don't want to.
1944{
1945 ImU32 Colors[ImGuiWindowDockStyleCol_COUNT];
1946};
1947
1949{
1950 ImGuiStorage Nodes; // Map ID -> ImGuiDockNode*: Active nodes
1954 ImGuiDockContext() { memset(this, 0, sizeof(*this)); }
1955};
1956
1957#endif // #ifdef IMGUI_HAS_DOCK
1958
1959//-----------------------------------------------------------------------------
1960// [SECTION] Viewport support
1961//-----------------------------------------------------------------------------
1962
1963// ImGuiViewport Private/Internals fields (cardinal sin: we are using inheritance!)
1964// Every instance of ImGuiViewport is in fact a ImGuiViewportP.
1966{
1967 ImGuiWindow* Window; // Set when the viewport is owned by a window (and ImGuiViewportFlags_CanHostOtherWindows is NOT set)
1968 int Idx;
1969 int LastFrameActive; // Last frame number this viewport was activated by a window
1970 int LastFocusedStampCount; // Last stamp number from when a window hosted by this viewport was focused (by comparing this value between two viewport we have an implicit viewport z-order we use as fallback)
1973 float Alpha; // Window opacity (when dragging dockable windows/viewports we make them transparent)
1975 bool LastFocusedHadNavWindow;// Instead of maintaining a LastFocusedWindow (which may harder to correctly maintain), we merely store weither NavWindow != NULL last time the viewport was focused.
1977 int BgFgDrawListsLastFrame[2]; // Last frame number the background (0) and foreground (1) draw lists were used
1978 ImDrawList* BgFgDrawLists[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.
1980 ImDrawDataBuilder DrawDataBuilder; // Temporary data while building final ImDrawData
1984 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!)
1985 ImVec2 WorkOffsetMax; // Work Area: Offset from Pos+Size to bottom-right corner of Work Area. Generally (0,0) or (0,-status_bar_height).
1986 ImVec2 BuildWorkOffsetMin; // Work Area: Offset being built during current frame. Generally >= 0.0f.
1987 ImVec2 BuildWorkOffsetMax; // Work Area: Offset being built during current frame. Generally <= 0.0f.
1988
1990 ~ImGuiViewportP() { if (BgFgDrawLists[0]) IM_DELETE(BgFgDrawLists[0]); if (BgFgDrawLists[1]) IM_DELETE(BgFgDrawLists[1]); }
1992
1993 // 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)
1994 ImVec2 CalcWorkRectPos(const ImVec2& off_min) const { return ImVec2(Pos.x + off_min.x, Pos.y + off_min.y); }
1995 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)); }
1997
1998 // Helpers to retrieve ImRect (we don't need to store BuildWorkRect as every access tend to change it, hence the code asymmetry)
1999 ImRect GetMainRect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
2000 ImRect GetWorkRect() const { return ImRect(WorkPos.x, WorkPos.y, WorkPos.x + WorkSize.x, WorkPos.y + WorkSize.y); }
2001 ImRect GetBuildWorkRect() const { ImVec2 pos = CalcWorkRectPos(BuildWorkOffsetMin); ImVec2 size = CalcWorkRectSize(BuildWorkOffsetMin, BuildWorkOffsetMax); return ImRect(pos.x, pos.y, pos.x + size.x, pos.y + size.y); }
2002};
2003
2004//-----------------------------------------------------------------------------
2005// [SECTION] Settings support
2006//-----------------------------------------------------------------------------
2007
2008// Windows data saved in imgui.ini file
2009// Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily.
2010// (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure)
2012{
2013 ImGuiID ID;
2014 ImVec2ih Pos; // NB: Settings position are stored RELATIVE to the viewport! Whereas runtime ones are absolute positions.
2017 ImGuiID ViewportId;
2018 ImGuiID DockId; // ID of last known DockNode (even if the DockNode is invisible because it has only 1 active window), or 0 if none.
2019 ImGuiID ClassId; // ID of window class if specified
2020 short DockOrder; // Order of the last time the window was visible within its DockNode. This is used to reorder windows that are reappearing on the same frame. Same value between windows that were active and windows that were none are possible.
2023 bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
2024 bool WantDelete; // Set to invalidate/delete the settings entry
2025
2026 ImGuiWindowSettings() { memset(this, 0, sizeof(*this)); DockOrder = -1; }
2027 char* GetName() { return (char*)(this + 1); }
2028};
2029
2031{
2032 const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']'
2033 ImGuiID TypeHash; // == ImHashStr(TypeName)
2034 void (*ClearAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Clear all settings data
2035 void (*ReadInitFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called before reading (in registration order)
2036 void* (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name); // Read: Called when entering into a new ini entry e.g. "[Window][Name]"
2037 void (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry
2038 void (*ApplyAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called after reading (in registration order)
2039 void (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf); // Write: Output every entries into 'out_buf'
2041
2042 ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
2043};
2044
2045//-----------------------------------------------------------------------------
2046// [SECTION] Localization support
2047//-----------------------------------------------------------------------------
2048
2049// This is experimental and not officially supported, it'll probably fall short of features, if/when it does we may backtrack.
2050enum ImGuiLocKey : int
2051{
2052 ImGuiLocKey_VersionStr,
2053 ImGuiLocKey_TableSizeOne,
2054 ImGuiLocKey_TableSizeAllFit,
2055 ImGuiLocKey_TableSizeAllDefault,
2056 ImGuiLocKey_TableResetOrder,
2057 ImGuiLocKey_WindowingMainMenuBar,
2058 ImGuiLocKey_WindowingPopup,
2059 ImGuiLocKey_WindowingUntitled,
2060 ImGuiLocKey_CopyLink,
2061 ImGuiLocKey_DockingHideTabBar,
2062 ImGuiLocKey_DockingHoldShiftToDock,
2063 ImGuiLocKey_DockingDragToUndockOrMoveNode,
2064 ImGuiLocKey_COUNT
2065};
2066
2068{
2069 ImGuiLocKey Key;
2070 const char* Text;
2071};
2072
2073
2074//-----------------------------------------------------------------------------
2075// [SECTION] Metrics, Debug Tools
2076//-----------------------------------------------------------------------------
2077
2078enum ImGuiDebugLogFlags_
2079{
2080 // Event types
2081 ImGuiDebugLogFlags_None = 0,
2082 ImGuiDebugLogFlags_EventActiveId = 1 << 0,
2083 ImGuiDebugLogFlags_EventFocus = 1 << 1,
2084 ImGuiDebugLogFlags_EventPopup = 1 << 2,
2085 ImGuiDebugLogFlags_EventNav = 1 << 3,
2086 ImGuiDebugLogFlags_EventClipper = 1 << 4,
2087 ImGuiDebugLogFlags_EventSelection = 1 << 5,
2088 ImGuiDebugLogFlags_EventIO = 1 << 6,
2089 ImGuiDebugLogFlags_EventInputRouting = 1 << 7,
2090 ImGuiDebugLogFlags_EventDocking = 1 << 8,
2091 ImGuiDebugLogFlags_EventViewport = 1 << 9,
2092
2093 ImGuiDebugLogFlags_EventMask_ = ImGuiDebugLogFlags_EventActiveId | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav | ImGuiDebugLogFlags_EventClipper | ImGuiDebugLogFlags_EventSelection | ImGuiDebugLogFlags_EventIO | ImGuiDebugLogFlags_EventInputRouting | ImGuiDebugLogFlags_EventDocking | ImGuiDebugLogFlags_EventViewport,
2094 ImGuiDebugLogFlags_OutputToTTY = 1 << 20, // Also send output to TTY
2095 ImGuiDebugLogFlags_OutputToTestEngine = 1 << 21, // Also send output to Test Engine
2096};
2097
2104
2106{
2107 int TotalAllocCount; // Number of call to MemAlloc().
2109 ImS16 LastEntriesIdx; // Current index in buffer
2110 ImGuiDebugAllocEntry LastEntriesBuf[6]; // Track last 6 frames that had allocations
2111
2112 ImGuiDebugAllocInfo() { memset(this, 0, sizeof(*this)); }
2113};
2114
2132
2134{
2135 ImGuiID ID;
2136 ImS8 QueryFrameCount; // >= 1: Query in progress
2137 bool QuerySuccess; // Obtained result from DebugHookIdInfo()
2138 ImGuiDataType DataType : 8;
2139 char Desc[57]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?) FIXME: Now that we added CTRL+C this should be fixed.
2140
2141 ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); }
2142};
2143
2144// State for ID Stack tool queries
2146{
2148 int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level
2149 ImGuiID QueryId; // ID to query details for
2153
2154 ImGuiIDStackTool() { memset(this, 0, sizeof(*this)); CopyToClipboardLastTime = -FLT_MAX; }
2155};
2156
2157//-----------------------------------------------------------------------------
2158// [SECTION] Generic context hooks
2159//-----------------------------------------------------------------------------
2160
2161typedef void (*ImGuiContextHookCallback)(ImGuiContext* ctx, ImGuiContextHook* hook);
2162enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiContextHookType_NewFramePost, ImGuiContextHookType_EndFramePre, ImGuiContextHookType_EndFramePost, ImGuiContextHookType_RenderPre, ImGuiContextHookType_RenderPost, ImGuiContextHookType_Shutdown, ImGuiContextHookType_PendingRemoval_ };
2163
2165{
2166 ImGuiID HookId; // A unique ID assigned by AddContextHook()
2167 ImGuiContextHookType Type;
2168 ImGuiID Owner;
2169 ImGuiContextHookCallback Callback;
2171
2172 ImGuiContextHook() { memset(this, 0, sizeof(*this)); }
2173};
2174
2175//-----------------------------------------------------------------------------
2176// [SECTION] ImGuiContext (main Dear ImGui context)
2177//-----------------------------------------------------------------------------
2178
2180{
2182 bool FontAtlasOwnedByContext; // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it.
2186 ImGuiConfigFlags ConfigFlagsCurrFrame; // = g.IO.ConfigFlags at the time of NewFrame()
2187 ImGuiConfigFlags ConfigFlagsLastFrame;
2188 ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
2189 float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
2190 float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
2191 float FontScale; // == FontSize / Font->FontSize
2192 float CurrentDpiScale; // Current window/viewport DpiScale == CurrentViewport->DpiScale
2194 double Time;
2199 bool WithinFrameScope; // Set by NewFrame(), cleared by EndFrame()
2200 bool WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed
2201 bool WithinEndChild; // Set within EndChild()
2202 bool GcCompactAll; // Request full GC
2203 bool TestEngineHookItems; // Will call test engine hooks: ImGuiTestEngineHook_ItemAdd(), ImGuiTestEngineHook_ItemInfo(), ImGuiTestEngineHook_Log()
2204 void* TestEngine; // Test engine user data
2205 char ContextName[16]; // Storage for a context name (to facilitate debugging multi-context setups)
2206
2207 // Inputs
2208 ImVector<ImGuiInputEvent> InputEventsQueue; // Input events which will be trickled/written into IO structure.
2209 ImVector<ImGuiInputEvent> InputEventsTrail; // Past input events processed in NewFrame(). This is to allow domain-specific application to access e.g mouse/pen trail.
2212
2213 // Windows state
2214 ImVector<ImGuiWindow*> Windows; // Windows, sorted in display order, back to front
2215 ImVector<ImGuiWindow*> WindowsFocusOrder; // Root windows, sorted in focus order, back to front.
2216 ImVector<ImGuiWindow*> WindowsTempSortBuffer; // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child
2218 ImGuiStorage WindowsById; // Map window's ImGuiID to ImGuiWindow*
2219 int WindowsActiveCount; // Number of unique windows submitted by frame
2220 ImVec2 WindowsHoverPadding; // Padding around resizable windows for which hovering on counts as hovering the window == ImMax(style.TouchExtraPadding, WINDOWS_HOVER_PADDING).
2221 ImGuiID DebugBreakInWindow; // Set to break in Begin() call.
2222 ImGuiWindow* CurrentWindow; // Window being drawn into
2223 ImGuiWindow* HoveredWindow; // Window the mouse is hovering. Will typically catch mouse inputs.
2224 ImGuiWindow* HoveredWindowUnderMovingWindow; // Hovered window ignoring MovingWindow. Only set if MovingWindow is set.
2225 ImGuiWindow* HoveredWindowBeforeClear; // Window the mouse is hovering. Filled even with _NoMouse. This is currently useful for multi-context compositors.
2226 ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actual window that is moved is generally MovingWindow->RootWindowDockTree.
2227 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.
2229 int WheelingWindowStartFrame; // This may be set one frame before WheelingWindow is != NULL
2234
2235 // Item/widgets state and tracking information
2236 ImGuiID DebugHookIdInfo; // Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool [next HoveredId/ActiveId to not pull in an extra cache-line]
2237 ImGuiID HoveredId; // Hovered widget, filled during the frame
2239 float HoveredIdTimer; // Measure contiguous hovering time
2240 float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active
2242 bool HoveredIdIsDisabled; // 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.
2243 bool ItemUnclipByLog; // Disable ItemAdd() clipping, essentially a memory-locality friendly copy of LogEnabled
2244 ImGuiID ActiveId; // Active widget
2245 ImGuiID ActiveIdIsAlive; // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
2247 bool ActiveIdIsJustActivated; // Set at the time of activation for one frame
2248 bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
2249 bool ActiveIdNoClearOnFocusLoss; // Disable losing active id if the active id window gets unfocused.
2250 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.
2251 bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state.
2255 ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
2257 ImGuiInputSource ActiveIdSource; // Activating source: ImGuiInputSource_Mouse OR ImGuiInputSource_Keyboard OR ImGuiInputSource_Gamepad
2262 ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation.
2263 float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
2264
2265 // Key/Input Ownership + Shortcut Routing system
2266 // - The idea is that instead of "eating" a given key, we can link to an owner.
2267 // - Input query can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_NoOwner (== -1) or a custom ID.
2268 // - Routing is requested ahead of time for a given chord (Key + Mods) and granted in NewFrame().
2269 double LastKeyModsChangeTime; // Record the last time key mods changed (affect repeat delay when using shortcut logic)
2270 double LastKeyModsChangeFromNoneTime; // Record the last time key mods changed away from being 0 (affect repeat delay when using shortcut logic)
2271 double LastKeyboardKeyPressTime; // Record the last time a keyboard key (ignore mouse/gamepad ones) was pressed.
2272 ImBitArrayForNamedKeys KeysMayBeCharInput; // Lookup to tell if a key can emit char input, see IsKeyChordPotentiallyCharInput(). sizeof() = 20 bytes
2273 ImGuiKeyOwnerData KeysOwnerData[ImGuiKey_NamedKey_COUNT];
2275 ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it)
2276 bool ActiveIdUsingAllKeyboardKeys; // Active widget will want to read all keyboard keys inputs. (this is a shortcut for not taking ownership of 100+ keys, frequently used by drag operations)
2277 ImGuiKeyChord DebugBreakInShortcutRouting; // Set to break in SetShortcutRouting()/Shortcut() calls.
2278#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
2279 ImU32 ActiveIdUsingNavInputMask; // If you used this. Since (IMGUI_VERSION_NUM >= 18804) : 'g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);' becomes 'SetKeyOwner(ImGuiKey_Escape, g.ActiveId) and/or SetKeyOwner(ImGuiKey_NavGamepadCancel, g.ActiveId);'
2280#endif
2281
2282 // Next window/item data
2283 ImGuiID CurrentFocusScopeId; // Value for currently appending items == g.FocusScopeStack.back(). Not to be mistaken with g.NavFocusScopeId.
2284 ImGuiItemFlags CurrentItemFlags; // Value for currently appending items == g.ItemFlagsStack.back()
2285 ImGuiID DebugLocateId; // Storage for DebugLocateItemOnHover() feature: this is read by ItemAdd() so we keep it in a hot/cached location
2286 ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions
2287 ImGuiLastItemData LastItemData; // Storage for last submitted item (setup by ItemAdd)
2288 ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
2290
2291 // Shared stacks
2292 ImGuiCol DebugFlashStyleColorIdx; // (Keep close to ColorStack to share cache line)
2293 ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
2294 ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
2295 ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
2296 ImVector<ImGuiFocusScopeData> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - inherited by BeginChild(), pushed into by Begin()
2297 ImVector<ImGuiItemFlags> ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
2298 ImVector<ImGuiGroupData> GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
2299 ImVector<ImGuiPopupData> OpenPopupStack; // Which popups are open (persistent)
2300 ImVector<ImGuiPopupData> BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame)
2302
2303 // Viewports
2304 ImVector<ImGuiViewportP*> Viewports; // Active viewports (always 1+, and generally 1 unless multi-viewports are enabled). Each viewports hold their copy of ImDrawData.
2305 ImGuiViewportP* CurrentViewport; // We track changes of viewport (happening in Begin) so we can call Platform_OnChangedViewport()
2307 ImGuiViewportP* MouseLastHoveredViewport; // Last known viewport that was hovered by mouse (even if we are not hovering any viewport any more) + honoring the _NoInputs flag.
2309 ImGuiPlatformMonitor FallbackMonitor; // Virtual monitor used as fallback if backend doesn't provide monitor information.
2310 ImRect PlatformMonitorsFullWorkRect; // Bounding box of all platform monitors
2311 int ViewportCreatedCount; // Unique sequential creation counter (mostly for testing/debugging)
2312 int PlatformWindowsCreatedCount; // Unique sequential creation counter (mostly for testing/debugging)
2313 int ViewportFocusedStampCount; // Every time the front-most window changes, we stamp its viewport with an incrementing counter
2314
2315 // Gamepad/keyboard Navigation
2316 ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusedWindow'
2317 ImGuiID NavId; // Focused item for navigation
2318 ImGuiID NavFocusScopeId; // Focused focus scope (e.g. selection code often wants to "clear other items" when landing on an item of the same scope)
2319 ImGuiNavLayer NavLayer; // Focused layer (main scrolling layer, or menu/title bar layer)
2320 ImGuiID NavActivateId; // ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey_Space) || IsKeyDown(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItem()
2321 ImGuiID NavActivateDownId; // ~~ IsKeyDown(ImGuiKey_Space) || IsKeyDown(ImGuiKey_Enter) || IsKeyDown(ImGuiKey_NavGamepadActivate) ? NavId : 0
2322 ImGuiID NavActivatePressedId; // ~~ IsKeyPressed(ImGuiKey_Space) || IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_NavGamepadActivate) ? NavId : 0 (no repeat)
2323 ImGuiActivateFlags NavActivateFlags;
2324 ImVector<ImGuiFocusScopeData> NavFocusRoute; // Reversed copy focus scope stack for NavId (should contains NavFocusScopeId). This essentially follow the window->ParentWindowForFocusRoute chain.
2327 ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame.
2328 ImGuiActivateFlags NavNextActivateFlags;
2329 ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS CAN ONLY BE ImGuiInputSource_Keyboard or ImGuiInputSource_Mouse
2330 ImGuiSelectionUserData NavLastValidSelectionUserData; // Last valid data passed to SetNextItemSelectionUser(), or -1. For current window. Not reset when focusing an item that doesn't have selection data.
2331 bool NavIdIsAlive; // Nav widget has been seen this frame ~~ NavRectRel is valid
2332 bool NavMousePosDirty; // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default)
2333 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)
2334 bool NavDisableMouseHover; // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again.
2335
2336 // Navigation: Init & Move Requests
2337 bool NavAnyRequest; // ~~ NavMoveRequest || NavInitRequest this is to perform early out in ItemAdd()
2338 bool NavInitRequest; // Init request for appearing window to select first item
2340 ImGuiNavItemData NavInitResult; // Init request result (first item of the window, or one for which SetItemDefaultFocus() was called)
2341 bool NavMoveSubmitted; // Move request submitted, will process result on next NewFrame()
2342 bool NavMoveScoringItems; // Move request submitted, still scoring incoming items
2344 ImGuiNavMoveFlags NavMoveFlags;
2345 ImGuiScrollFlags NavMoveScrollFlags;
2346 ImGuiKeyChord NavMoveKeyMods;
2347 ImGuiDir NavMoveDir; // Direction of the move request (left/right/up/down)
2349 ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename?
2350 ImRect NavScoringRect; // Rectangle used for scoring, in screen space. Based of window->NavRectRel[], modified for directional navigation scoring.
2351 ImRect NavScoringNoClipRect; // Some nav operations (such as PageUp/PageDown) enforce a region which clipper will attempt to always keep submitted
2352 int NavScoringDebugCount; // Metrics for debugging
2353 int NavTabbingDir; // Generally -1 or +1, 0 when tabbing without a nav id
2354 int NavTabbingCounter; // >0 when counting items for tabbing
2355 ImGuiNavItemData NavMoveResultLocal; // Best move request candidate within NavWindow
2356 ImGuiNavItemData NavMoveResultLocalVisible; // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
2357 ImGuiNavItemData NavMoveResultOther; // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
2358 ImGuiNavItemData NavTabbingResultFirst; // First tabbing request candidate within NavWindow and flattened hierarchy
2359
2360 // Navigation: record of last move request
2361 ImGuiID NavJustMovedFromFocusScopeId; // Just navigated from this focus scope id (result of a successfully MoveRequest).
2362 ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest).
2363 ImGuiID NavJustMovedToFocusScopeId; // Just navigated to this focus scope id (result of a successfully MoveRequest).
2365 bool NavJustMovedToIsTabbing; // Copy of ImGuiNavMoveFlags_IsTabbing. Maybe we should store whole flags.
2366 bool NavJustMovedToHasSelectionData; // Copy of move result's InFlags & ImGuiItemFlags_HasSelectionUserData). Maybe we should just store ImGuiNavItemData.
2367
2368 // Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
2369 ImGuiKeyChord ConfigNavWindowingKeyNext; // = ImGuiMod_Ctrl | ImGuiKey_Tab (or ImGuiMod_Super | ImGuiKey_Tab on OS X). For reconfiguration (see #4828)
2370 ImGuiKeyChord ConfigNavWindowingKeyPrev; // = ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Tab (or ImGuiMod_Super | ImGuiMod_Shift | ImGuiKey_Tab on OS X)
2371 ImGuiWindow* NavWindowingTarget; // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most!
2372 ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f, so the fade-out can stay on it.
2373 ImGuiWindow* NavWindowingListWindow; // Internal window actually listing the CTRL+Tab contents
2380
2381 // Render
2382 float DimBgRatio; // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list)
2383
2384 // Drag and Drop
2386 bool DragDropWithinSource; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source.
2387 bool DragDropWithinTarget; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target.
2388 ImGuiDragDropFlags DragDropSourceFlags;
2392 ImRect DragDropTargetRect; // Store rectangle of current target candidate (we favor small targets when overlapping)
2393 ImRect DragDropTargetClipRect; // Store ClipRect at the time of item's drawing
2395 ImGuiDragDropFlags DragDropAcceptFlags;
2396 float DragDropAcceptIdCurrRectSurface; // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
2397 ImGuiID DragDropAcceptIdCurr; // Target item id (set at the time of accepting the payload)
2398 ImGuiID DragDropAcceptIdPrev; // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
2399 int DragDropAcceptFrameCount; // Last time a target expressed a desire to accept the source
2400 ImGuiID DragDropHoldJustPressedId; // Set when holding a payload just made ButtonBehavior() return a press.
2401 ImVector<unsigned char> DragDropPayloadBufHeap; // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size
2402 unsigned char DragDropPayloadBufLocal[16]; // Local buffer for small payloads
2403
2404 // Clipper
2407
2408 // Tables
2410 ImGuiID DebugBreakInTable; // Set to break in BeginTable() call.
2411 int TablesTempDataStacked; // Temporary table data size (because we leave previous instances undestructed, we generally don't use TablesTempData.Size)
2412 ImVector<ImGuiTableTempData> TablesTempData; // Temporary table data (buffers reused/shared across instances, support nesting)
2413 ImPool<ImGuiTable> Tables; // Persistent table data
2414 ImVector<float> TablesLastTimeActive; // Last used timestamp of each tables (SOA, for efficient GC)
2416
2417 // Tab bars
2422
2423 // Multi-Select state
2426 int MultiSelectTempDataStacked; // Temporary multi-select data size (because we leave previous instances undestructed, we generally don't use MultiSelectTempData.Size)
2429
2430 // Hover Delay system
2433 float HoverItemDelayTimer; // Currently used by IsItemHovered()
2434 float HoverItemDelayClearTimer; // Currently used by IsItemHovered(): grace time before g.TooltipHoverTimer gets cleared.
2435 ImGuiID HoverItemUnlockedStationaryId; // Mouse has once been stationary on this item. Only reset after departing the item.
2436 ImGuiID HoverWindowUnlockedStationaryId; // Mouse has once been stationary on this window. Only reset after departing the window.
2437
2438 // Mouse state
2439 ImGuiMouseCursor MouseCursor;
2440 float MouseStationaryTimer; // Time the mouse has been stationary (with some loose heuristic)
2442
2443 // Widget state
2447 ImGuiID TempInputId; // Temporary text input when CTRL+clicking on a slider, etc.
2451 ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets
2452 ImGuiID ColorEditCurrentID; // Set temporarily while inside of the parent-most ColorEdit4/ColorPicker4 (because they call each others).
2453 ImGuiID ColorEditSavedID; // ID we are saving/restoring HS for
2454 float ColorEditSavedHue; // Backup of last Hue associated to LastColor, so we can restore Hue in lossy RGB<>HSV round trips
2455 float ColorEditSavedSat; // Backup of last Saturation associated to LastColor, so we can restore Saturation in lossy RGB<>HSV round trips
2456 ImU32 ColorEditSavedColor; // RGB value with alpha set to 0.
2457 ImVec4 ColorPickerRef; // Initial/reference color at the time of opening the color picker.
2459 ImRect WindowResizeBorderExpectedRect; // Expected border rect, switch to relative edit if moving
2461 short ScrollbarSeekMode; // 0: relative, -1/+1: prev/next page.
2462 float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
2464 float SliderCurrentAccum; // Accumulated slider delta when using navigation controls.
2465 bool SliderCurrentAccumDirty; // Has the accumulated slider delta changed since last time we tried to apply it?
2467 float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
2468 float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
2469 float DisabledAlphaBackup; // Backup for style.Alpha for BeginDisabled()
2473 ImVector<char> ClipboardHandlerData; // If no custom clipboard handler is defined
2474 ImVector<ImGuiID> MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once
2475 ImGuiTypingSelectState TypingSelectState; // State for GetTypingSelectRequest()
2476
2477 // Platform support
2478 ImGuiPlatformImeData PlatformImeData; // Data updated by current frame
2479 ImGuiPlatformImeData PlatformImeDataPrev; // Previous frame data. When changed we call the io.PlatformSetImeDataFn() handler.
2481
2482 // Extensions
2483 // FIXME: We could provide an API to register one slot in an array held in ImGuiContext?
2486
2487 // Settings
2489 float SettingsDirtyTimer; // Save .ini Settings to memory when time reaches zero
2490 ImGuiTextBuffer SettingsIniData; // In memory .ini settings
2491 ImVector<ImGuiSettingsHandler> SettingsHandlers; // List of .ini settings handlers
2492 ImChunkStream<ImGuiWindowSettings> SettingsWindows; // ImGuiWindow .ini settings entries
2493 ImChunkStream<ImGuiTableSettings> SettingsTables; // ImGuiTable .ini settings entries
2494 ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
2495 ImGuiID HookIdNext; // Next available HookId
2496
2497 // Localization
2498 const char* LocalizationTable[ImGuiLocKey_COUNT];
2499
2500 // Capture/Logging
2501 bool LogEnabled; // Currently capturing
2502 ImGuiLogType LogType; // Capture target
2503 ImFileHandle LogFile; // If != NULL log to stdout/ file
2504 ImGuiTextBuffer LogBuffer; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
2505 const char* LogNextPrefix;
2506 const char* LogNextSuffix;
2511 int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
2512
2513 // Debug Tools
2514 // (some of the highly frequently used data are interleaved in other structures above: DebugBreakXXX fields, DebugHookIdInfo, DebugLocateId etc.)
2515 ImGuiDebugLogFlags DebugLogFlags;
2518 ImGuiDebugLogFlags DebugLogAutoDisableFlags;
2520 ImU8 DebugLocateFrames; // For DebugLocateItemOnHover(). This is used together with DebugLocateId which is in a hot/cached spot above.
2521 bool DebugBreakInLocateId; // Debug break in ItemAdd() call for g.DebugLocateId.
2522 ImGuiKeyChord DebugBreakKeyChord; // = ImGuiKey_Pause
2523 ImS8 DebugBeginReturnValueCullDepth; // Cycle between 0..9 then wrap around.
2524 bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
2526 ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
2532 ImGuiDockNode* DebugHoveredDockNode; // Hovered dock node.
2533
2534 // Misc
2535 float FramerateSecPerFrame[60]; // Calculate estimate of framerate for user over the last 60 frames..
2539 int WantCaptureMouseNextFrame; // Explicit capture override via SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard(). Default to -1.
2542 ImVector<char> TempBuffer; // Temporary text buffer
2544
2545 ImGuiContext(ImFontAtlas* shared_font_atlas)
2546 {
2547 IO.Ctx = this;
2548 InputTextState.Ctx = this;
2549
2550 Initialized = false;
2551 ConfigFlagsCurrFrame = ConfigFlagsLastFrame = ImGuiConfigFlags_None;
2552 FontAtlasOwnedByContext = shared_font_atlas ? false : true;
2553 Font = NULL;
2555 IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
2556 Time = 0.0f;
2557 FrameCount = 0;
2560 GcCompactAll = false;
2561 TestEngineHookItems = false;
2562 TestEngine = NULL;
2563 memset(ContextName, 0, sizeof(ContextName));
2564
2565 InputEventsNextMouseSource = ImGuiMouseSource_Mouse;
2567
2569 CurrentWindow = NULL;
2570 HoveredWindow = NULL;
2573 MovingWindow = NULL;
2574 WheelingWindow = NULL;
2577
2578 DebugHookIdInfo = 0;
2580 HoveredIdAllowOverlap = false;
2581 HoveredIdIsDisabled = false;
2583 ItemUnclipByLog = false;
2584 ActiveId = 0;
2585 ActiveIdIsAlive = 0;
2586 ActiveIdTimer = 0.0f;
2588 ActiveIdAllowOverlap = false;
2593 ActiveIdFromShortcut = false;
2594 ActiveIdClickOffset = ImVec2(-1, -1);
2595 ActiveIdWindow = NULL;
2596 ActiveIdSource = ImGuiInputSource_None;
2602 LastActiveId = 0;
2603 LastActiveIdTimer = 0.0f;
2604
2606
2609#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
2611#endif
2612
2614 CurrentItemFlags = ImGuiItemFlags_None;
2615 DebugShowGroupRects = false;
2616
2617 CurrentViewport = NULL;
2622
2623 NavWindow = NULL;
2625 NavLayer = ImGuiNavLayer_Main;
2627 NavActivateFlags = NavNextActivateFlags = ImGuiActivateFlags_None;
2630 NavInputSource = ImGuiInputSource_Keyboard;
2631 NavLastValidSelectionUserData = ImGuiSelectionUserData_Invalid;
2632 NavIdIsAlive = false;
2633 NavMousePosDirty = false;
2634 NavDisableHighlight = true;
2635 NavDisableMouseHover = false;
2636
2637 NavAnyRequest = false;
2638 NavInitRequest = false;
2639 NavInitRequestFromMove = false;
2640 NavMoveSubmitted = false;
2641 NavMoveScoringItems = false;
2643 NavMoveFlags = ImGuiNavMoveFlags_None;
2644 NavMoveScrollFlags = ImGuiScrollFlags_None;
2645 NavMoveKeyMods = ImGuiMod_None;
2646 NavMoveDir = NavMoveDirForDebug = NavMoveClipDir = ImGuiDir_None;
2648 NavTabbingDir = 0;
2650
2652 NavJustMovedToKeyMods = ImGuiMod_None;
2655
2656 // All platforms use Ctrl+Tab but Ctrl<>Super are swapped on Mac...
2657 // FIXME: Because this value is stored, it annoyingly interfere with toggling io.ConfigMacOSXBehaviors updating this..
2658 ConfigNavWindowingKeyNext = IO.ConfigMacOSXBehaviors ? (ImGuiMod_Super | ImGuiKey_Tab) : (ImGuiMod_Ctrl | ImGuiKey_Tab);
2659 ConfigNavWindowingKeyPrev = IO.ConfigMacOSXBehaviors ? (ImGuiMod_Super | ImGuiMod_Shift | ImGuiKey_Tab) : (ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Tab);
2663 NavWindowingToggleKey = ImGuiKey_None;
2664
2665 DimBgRatio = 0.0f;
2666
2668 DragDropSourceFlags = ImGuiDragDropFlags_None;
2671 DragDropTargetId = 0;
2672 DragDropAcceptFlags = ImGuiDragDropFlags_None;
2678
2680
2681 CurrentTable = NULL;
2683 CurrentTabBar = NULL;
2684 CurrentMultiSelect = NULL;
2686
2689
2690 MouseCursor = ImGuiMouseCursor_Arrow;
2691 MouseStationaryTimer = 0.0f;
2692
2693 TempInputId = 0;
2694 memset(&DataTypeZeroValue, 0, sizeof(DataTypeZeroValue));
2696 ColorEditOptions = ImGuiColorEditFlags_DefaultOptions_;
2703 SliderGrabClickOffset = 0.0f;
2704 SliderCurrentAccum = 0.0f;
2706 DragCurrentAccumDirty = false;
2707 DragCurrentAccum = 0.0f;
2708 DragSpeedDefaultRatio = 1.0f / 100.0f;
2709 DisabledAlphaBackup = 0.0f;
2711 LockMarkEdited = 0;
2713
2714 PlatformImeData.InputPos = ImVec2(0.0f, 0.0f);
2715 PlatformImeDataPrev.InputPos = ImVec2(-1.0f, -1.0f); // Different to ensure initial submission
2717
2719
2720 SettingsLoaded = false;
2721 SettingsDirtyTimer = 0.0f;
2722 HookIdNext = 0;
2723
2724 memset(LocalizationTable, 0, sizeof(LocalizationTable));
2725
2726 LogEnabled = false;
2727 LogType = ImGuiLogType_None;
2729 LogFile = NULL;
2730 LogLinePosY = FLT_MAX;
2731 LogLineFirstItem = false;
2732 LogDepthRef = 0;
2734
2735 DebugLogFlags = ImGuiDebugLogFlags_OutputToTTY;
2736 DebugLocateId = 0;
2737 DebugLogAutoDisableFlags = ImGuiDebugLogFlags_None;
2741 DebugItemPickerActive = false;
2742 DebugItemPickerMouseButton = ImGuiMouseButton_Left;
2745 DebugFlashStyleColorIdx = ImGuiCol_COUNT;
2746 DebugHoveredDockNode = NULL;
2747
2748 // Same as DebugBreakClearData(). Those fields are scattered in their respective subsystem to stay in hot-data locations
2751 DebugBreakInLocateId = false;
2752 DebugBreakKeyChord = ImGuiKey_Pause;
2753 DebugBreakInShortcutRouting = ImGuiKey_None;
2754
2755 memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
2759 memset(TempKeychordName, 0, sizeof(TempKeychordName));
2760 }
2761};
2762
2763//-----------------------------------------------------------------------------
2764// [SECTION] ImGuiWindowTempData, ImGuiWindow
2765//-----------------------------------------------------------------------------
2766
2767// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow.
2768// (That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered..)
2769// (This doesn't need a constructor because we zero-clear it as part of ImGuiWindow and all frame-temporary data are setup on Begin)
2770struct IMGUI_API ImGuiWindowTempData
2771{
2772 // Layout
2773 ImVec2 CursorPos; // Current emitting position, in absolute coordinates.
2775 ImVec2 CursorStartPos; // Initial position after Begin(), generally ~ window position + WindowPadding.
2776 ImVec2 CursorMaxPos; // Used to implicitly calculate ContentSize at the beginning of next frame, for scrolling range and auto-resize. Always growing during the frame.
2777 ImVec2 IdealMaxPos; // Used to implicitly calculate ContentSizeIdeal at the beginning of next frame, for auto-resize only. Always growing during the frame.
2780 float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
2784 ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
2785 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.
2787 ImVec2 CursorStartPosLossyness;// Record the loss of precision of CursorStartPos due to really large scrolling amount. This is used by clipper to compensate and fix the most common use case of large scroll area.
2788
2789 // Keyboard/Gamepad navigation
2790 ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
2791 short NavLayersActiveMask; // Which layers have been written to (result from previous frame)
2792 short NavLayersActiveMaskNext;// Which layers have been written to (accumulator for current frame)
2793 bool NavIsScrollPushableX; // Set when current work location may be scrolled horizontally when moving left / right. This is generally always true UNLESS within a column.
2795 bool NavWindowHasScrollY; // Set per window when scrolling can be used (== ScrollMax.y > 0.0f)
2796
2797 // Miscellaneous
2798 bool MenuBarAppending; // FIXME: Remove this
2799 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.
2800 ImGuiMenuColumns MenuColumns; // Simplified columns storage for menu items measurement
2801 int TreeDepth; // Current tree depth.
2802 ImU32 TreeHasStackDataDepthMask; // Store whether given depth has ImGuiTreeNodeStackData data. Could be turned into a ImU64 if necessary.
2804 ImGuiStorage* StateStorage; // Current persistent per-window storage (store e.g. tree node open/close state)
2805 ImGuiOldColumns* CurrentColumns; // Current columns set
2806 int CurrentTableIdx; // Current table index (into g.Tables)
2807 ImGuiLayoutType LayoutType;
2808 ImGuiLayoutType ParentLayoutType; // Layout type of parent window at the time of Begin()
2810
2811 // Local parameters stacks
2812 // 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.
2813 float ItemWidth; // Current item width (>0.0: width in pixels, <0.0: align xx pixels to the right of window).
2814 float TextWrapPos; // Current text wrap pos.
2815 ImVector<float> ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth)
2816 ImVector<float> TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos)
2817};
2818
2819// Storage for one window
2820struct IMGUI_API ImGuiWindow
2821{
2822 ImGuiContext* Ctx; // Parent UI context (needs to be set explicitly by parent).
2823 char* Name; // Window name, owned by the window.
2824 ImGuiID ID; // == ImHashStr(Name)
2825 ImGuiWindowFlags Flags, FlagsPreviousFrame; // See enum ImGuiWindowFlags_
2826 ImGuiChildFlags ChildFlags; // Set when window is a child window. See enum ImGuiChildFlags_
2827 ImGuiWindowClass WindowClass; // Advanced users only. Set with SetNextWindowClass()
2828 ImGuiViewportP* Viewport; // Always set in Begin(). Inactive windows may have a NULL value here if their viewport was discarded.
2829 ImGuiID ViewportId; // We backup the viewport id (since the viewport may disappear or never be created if the window is inactive)
2830 ImVec2 ViewportPos; // We backup the viewport position (since the viewport may disappear or never be created if the window is inactive)
2831 int ViewportAllowPlatformMonitorExtend; // Reset to -1 every frame (index is guaranteed to be valid between NewFrame..EndFrame), only used in the Appearing frame of a tooltip/popup to enforce clamping to a given monitor
2832 ImVec2 Pos; // Position (always rounded-up to nearest pixel)
2833 ImVec2 Size; // Current size (==SizeFull or collapsed title bar size)
2834 ImVec2 SizeFull; // Size when non collapsed
2835 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.
2837 ImVec2 ContentSizeExplicit; // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize().
2838 ImVec2 WindowPadding; // Window padding at the time of Begin().
2839 float WindowRounding; // Window rounding at the time of Begin(). May be clamped lower to avoid rendering artifacts with title bar, menu bar etc.
2840 float WindowBorderSize; // Window border size at the time of Begin().
2841 float TitleBarHeight, MenuBarHeight; // Note that those used to be function before 2024/05/28. If you have old code calling TitleBarHeight() you can change it to TitleBarHeight.
2842 float DecoOuterSizeX1, DecoOuterSizeY1; // Left/Up offsets. Sum of non-scrolling outer decorations (X1 generally == 0.0f. Y1 generally = TitleBarHeight + MenuBarHeight). Locked during Begin().
2843 float DecoOuterSizeX2, DecoOuterSizeY2; // Right/Down offsets (X2 generally == ScrollbarSize.x, Y2 == ScrollbarSizes.y).
2844 float DecoInnerSizeX1, DecoInnerSizeY1; // Applied AFTER/OVER InnerRect. Specialized for Tables as they use specialized form of clipping and frozen rows/columns are inside InnerRect (and not part of regular decoration sizes).
2845 int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)!
2846 ImGuiID MoveId; // == window->GetID("#MOVE")
2847 ImGuiID TabId; // == window->GetID("#TAB")
2848 ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window)
2849 ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
2852 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)
2853 ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
2854 ImVec2 ScrollTargetEdgeSnapDist; // 0.0f = no snapping, >0.0f snapping threshold
2855 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.
2856 bool ScrollbarX, ScrollbarY; // Are scrollbars visible?
2858 bool Active; // Set to true on Begin(), unless Collapsed
2860 bool WriteAccessed; // Set to true when any widget access the current window
2861 bool Collapsed; // Set when collapsing window to become only title-bar
2863 bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed)
2864 bool SkipRefresh; // [EXPERIMENTAL] Reuse previous frame drawn contents, Begin() returns false.
2865 bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
2866 bool Hidden; // Do not display (== HiddenFrames*** > 0)
2867 bool IsFallbackWindow; // Set on the "Debug##Default" window.
2868 bool IsExplicitChild; // Set when passed _ChildWindow, left to false by BeginDocked()
2869 bool HasCloseButton; // Set when the window has a close button (p_open != NULL)
2870 signed char ResizeBorderHovered; // Current border being hovered for resize (-1: none, otherwise 0-3)
2871 signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3)
2872 short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
2873 short BeginCountPreviousFrame; // Number of Begin() during the previous frame
2874 short BeginOrderWithinParent; // Begin() order within immediate parent window, if we are a child window. Otherwise 0.
2875 short BeginOrderWithinContext; // Begin() order within entire imgui context. This is mostly used for debugging submission order related issues.
2876 short FocusOrder; // Order within WindowsFocusOrder[], altered when windows are focused.
2880 ImS8 HiddenFramesCanSkipItems; // Hide the window for N frames
2881 ImS8 HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size
2882 ImS8 HiddenFramesForRenderOnly; // Hide the window until frame N at Render() time only
2883 ImS8 DisableInputsFrames; // Disable window interactions for N frames
2884 ImGuiCond SetWindowPosAllowFlags : 8; // store acceptable condition flags for SetNextWindowPos() use.
2885 ImGuiCond SetWindowSizeAllowFlags : 8; // store acceptable condition flags for SetNextWindowSize() use.
2886 ImGuiCond SetWindowCollapsedAllowFlags : 8; // store acceptable condition flags for SetNextWindowCollapsed() use.
2887 ImGuiCond SetWindowDockAllowFlags : 8; // store acceptable condition flags for SetNextWindowDock() use.
2888 ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
2889 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.
2890
2891 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)
2892 ImGuiWindowTempData DC; // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
2893
2894 // The best way to understand what those rectangles are is to use the 'Metrics->Tools->Show Windows Rectangles' viewer.
2895 // The main 'OuterRect', omitted as a field, is window->Rect().
2896 ImRect OuterRectClipped; // == Window->Rect() just after setup in Begin(). == window->Rect() for root window.
2897 ImRect InnerRect; // Inner rectangle (omit title bar, menu bar, scroll bar)
2898 ImRect InnerClipRect; // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect.
2899 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).
2900 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?
2901 ImRect ClipRect; // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back().
2902 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.
2903 ImVec2ih HitTestHoleSize; // Define an optional rectangular hole where mouse will pass-through the window.
2905
2906 int LastFrameActive; // Last frame number the window was Active.
2907 int LastFrameJustFocused; // Last frame number the window was made Focused.
2908 float LastTimeActive; // Last timestamp the window was Active (using float as we don't need high precision there)
2912 float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale()
2914 int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
2915
2916 ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
2918 ImGuiWindow* ParentWindow; // If we are a child _or_ popup _or_ docked window, this is pointing to our parent. Otherwise NULL.
2920 ImGuiWindow* RootWindow; // Point to ourself or first ancestor that is not a child window. Doesn't cross through popups/dock nodes.
2921 ImGuiWindow* RootWindowPopupTree; // Point to ourself or first ancestor that is not a child window. Cross through popups parent<>child.
2922 ImGuiWindow* RootWindowDockTree; // Point to ourself or first ancestor that is not a child window. Cross through dock nodes.
2923 ImGuiWindow* RootWindowForTitleBarHighlight; // Point to ourself or first ancestor which will display TitleBgActive color when this window is active.
2924 ImGuiWindow* RootWindowForNav; // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
2925 ImGuiWindow* ParentWindowForFocusRoute; // Set to manual link a window to its logical parent so that Shortcut() chain are honoerd (e.g. Tool linked to Document)
2926
2927 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.)
2928 ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1)
2929 ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space
2930 ImVec2 NavPreferredScoringPosRel[ImGuiNavLayer_COUNT]; // Preferred X/Y position updated when moving on a given axis, reset to FLT_MAX.
2931 ImGuiID NavRootFocusScopeId; // Focus Scope ID at the time of Begin()
2932
2933 int MemoryDrawListIdxCapacity; // Backup of last idx/vtx count, so when waking up the window we can preallocate and avoid iterative alloc/copy
2935 bool MemoryCompacted; // Set when window extraneous data have been garbage collected
2936
2937 // Docking
2938 bool DockIsActive :1; // When docking artifacts are actually visible. When this is set, DockNode is guaranteed to be != NULL. ~~ (DockNode != NULL) && (DockNode->Windows.Size > 1).
2940 bool DockTabIsVisible :1; // Is our window visible this frame? ~~ is the corresponding tab selected?
2942 short DockOrder; // Order of the last time the window was visible within its DockNode. This is used to reorder windows that are reappearing on the same frame. Same value between windows that were active and windows that were none are possible.
2944 ImGuiDockNode* DockNode; // Which node are we docked into. Important: Prefer testing DockIsActive in many cases as this will still be set when the dock node is hidden.
2945 ImGuiDockNode* DockNodeAsHost; // Which node are we owning (for parent windows)
2946 ImGuiID DockId; // Backup of last valid DockNode->ID, so single window remember their dock node id even when they are not bound any more
2947 ImGuiItemStatusFlags DockTabItemStatusFlags;
2949
2950public:
2951 ImGuiWindow(ImGuiContext* context, const char* name);
2952 ~ImGuiWindow();
2953
2954 ImGuiID GetID(const char* str, const char* str_end = NULL);
2955 ImGuiID GetID(const void* ptr);
2956 ImGuiID GetID(int n);
2957 ImGuiID GetIDFromRectangle(const ImRect& r_abs);
2958
2959 // We don't use g.FontSize because the window may be != g.CurrentWindow.
2960 ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
2961 float CalcFontSize() const { ImGuiContext& g = *Ctx; float scale = g.FontBaseSize * FontWindowScale * FontDpiScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; }
2963 ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight; return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight); }
2964};
2965
2966//-----------------------------------------------------------------------------
2967// [SECTION] Tab bar, Tab item support
2968//-----------------------------------------------------------------------------
2969
2970// Extend ImGuiTabBarFlags_
2971enum ImGuiTabBarFlagsPrivate_
2972{
2973 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]
2974 ImGuiTabBarFlags_IsFocused = 1 << 21,
2975 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
2976};
2977
2978// Extend ImGuiTabItemFlags_
2979enum ImGuiTabItemFlagsPrivate_
2980{
2981 ImGuiTabItemFlags_SectionMask_ = ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing,
2982 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)
2983 ImGuiTabItemFlags_Button = 1 << 21, // Used by TabItemButton, change the tab item behavior to mimic a button
2984 ImGuiTabItemFlags_Unsorted = 1 << 22, // [Docking] Trailing tabs with the _Unsorted flag will be sorted based on the DockOrder of their Window.
2985};
2986
2987// Storage for one active tab item (sizeof() 48 bytes)
2989{
2990 ImGuiID ID;
2991 ImGuiTabItemFlags Flags;
2992 ImGuiWindow* Window; // When TabItem is part of a DockNode's TabBar, we hold on to a window.
2994 int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance
2995 float Offset; // Position relative to beginning of tab
2996 float Width; // Width currently displayed
2997 float ContentWidth; // Width of label, stored during BeginTabItem() call
2998 float RequestedWidth; // Width optionally requested by caller, -1.0f is unused
2999 ImS32 NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
3000 ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable
3001 ImS16 IndexDuringLayout; // Index only used during TabBarLayout(). Tabs gets reordered so 'Tabs[n].IndexDuringLayout == n' but may mismatch during additions.
3002 bool WantClose; // Marked as closed by SetTabItemClosed()
3003
3004 ImGuiTabItem() { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; RequestedWidth = -1.0f; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; }
3005};
3006
3007// Storage for a tab bar (sizeof() 152 bytes)
3008struct IMGUI_API ImGuiTabBar
3009{
3011 ImGuiTabBarFlags Flags;
3012 ImGuiID ID; // Zero for tab-bars used by docking
3013 ImGuiID SelectedTabId; // Selected tab/window
3014 ImGuiID NextSelectedTabId; // Next selected tab/window. Will also trigger a scrolling animation
3015 ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview)
3020 float PrevTabsContentsHeight; // Record the height of contents submitted below the tab bar
3021 float WidthAllTabs; // Actual width of all tabs (locked during layout)
3022 float WidthAllTabsIdeal; // Ideal width if all tabs were visible and not clipped
3036 bool TabsAddedNew; // Set to true when a new tab item or button has been added to the tab bar during last frame
3037 ImS16 TabsActiveCount; // Number of tabs submitted this frame.
3038 ImS16 LastTabItemIdx; // Index of last BeginTabItem() tab for use by EndTabItem()
3040 ImVec2 FramePadding; // style.FramePadding locked at the time of BeginTabBar()
3042 ImGuiTextBuffer TabsNames; // For non-docking tab bar we re-append names in a contiguous buffer.
3043
3044 ImGuiTabBar();
3045};
3046
3047//-----------------------------------------------------------------------------
3048// [SECTION] Table support
3049//-----------------------------------------------------------------------------
3050
3051#define IM_COL32_DISABLE IM_COL32(0,0,0,1) // Special sentinel code which cannot be used as a regular color.
3052#define IMGUI_TABLE_MAX_COLUMNS 512 // May be further lifted
3053
3054// Our current column maximum is 64 but we may raise that in the future.
3055typedef ImS16 ImGuiTableColumnIdx;
3056typedef ImU16 ImGuiTableDrawChannelIdx;
3057
3058// [Internal] sizeof() ~ 112
3059// We use the terminology "Enabled" to refer to a column that is not Hidden by user/api.
3060// We use the terminology "Clipped" to refer to a column that is out of sight because of scrolling/clipping.
3061// This is in contrast with some user-facing api such as IsItemVisible() / IsRectVisible() which use "Visible" to mean "not clipped".
3063{
3064 ImGuiTableColumnFlags Flags; // Flags after some patching (not directly same as provided by user). See ImGuiTableColumnFlags_
3065 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.
3066 float MinX; // Absolute positions
3067 float MaxX;
3068 float WidthRequest; // Master width absolute value when !(Flags & _WidthStretch). When Stretch this is derived every frame from StretchWeight in TableUpdateLayout()
3069 float WidthAuto; // Automatic width
3070 float StretchWeight; // Master width weight when (Flags & _WidthStretch). Often around ~1.0f initially.
3071 float InitStretchWeightOrWidth; // Value passed to TableSetupColumn(). For Width it is a content width (_without padding_).
3072 ImRect ClipRect; // Clipping rectangle for the column
3073 ImGuiID UserID; // Optional, value passed to TableSetupColumn()
3074 float WorkMinX; // Contents region min ~(MinX + CellPaddingX + CellSpacingX1) == cursor start position when entering column
3075 float WorkMaxX; // Contents region max ~(MaxX - CellPaddingX - CellSpacingX2)
3076 float ItemWidth; // Current item width for the column, preserved across rows
3077 float ContentMaxXFrozen; // Contents maximum position for frozen rows (apart from headers), from which we can infer content width.
3079 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
3081 ImS16 NameOffset; // Offset into parent ColumnsNames[]
3082 ImGuiTableColumnIdx DisplayOrder; // Index within Table's IndexToDisplayOrder[] (column may be reordered by users)
3083 ImGuiTableColumnIdx IndexWithinEnabledSet; // Index within enabled/visible set (<= IndexToDisplayOrder)
3084 ImGuiTableColumnIdx PrevEnabledColumn; // Index of prev enabled/visible column within Columns[], -1 if first enabled/visible column
3085 ImGuiTableColumnIdx NextEnabledColumn; // Index of next enabled/visible column within Columns[], -1 if last enabled/visible column
3086 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
3087 ImGuiTableDrawChannelIdx DrawChannelCurrent; // Index within DrawSplitter.Channels[]
3088 ImGuiTableDrawChannelIdx DrawChannelFrozen; // Draw channels for frozen rows (often headers)
3089 ImGuiTableDrawChannelIdx DrawChannelUnfrozen; // Draw channels for unfrozen rows
3090 bool IsEnabled; // IsUserEnabled && (Flags & ImGuiTableColumnFlags_Disabled) == 0
3091 bool IsUserEnabled; // Is the column not marked Hidden by the user? (unrelated to being off view, e.g. clipped by scrolling).
3093 bool IsVisibleX; // Is actually in view (e.g. overlapping the host window clipping rectangle, not scrolled).
3095 bool IsRequestOutput; // Return value for TableSetColumnIndex() / TableNextColumn(): whether we request user to output contents or not.
3096 bool IsSkipItems; // Do we want item submissions to this column to be completely ignored (no layout will happen).
3098 ImS8 NavLayerCurrent; // ImGuiNavLayer in 1 byte
3099 ImU8 AutoFitQueue; // Queue of 8 values for the next 8 frames to request auto-fit
3100 ImU8 CannotSkipItemsQueue; // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem
3101 ImU8 SortDirection : 2; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending
3102 ImU8 SortDirectionsAvailCount : 2; // Number of available sort directions (0 to 3)
3103 ImU8 SortDirectionsAvailMask : 4; // Mask of available sort directions (1-bit each)
3104 ImU8 SortDirectionsAvailList; // Ordered list of available sort directions (2-bits each, total 8-bits)
3105
3107 {
3108 memset(this, 0, sizeof(*this));
3109 StretchWeight = WidthRequest = -1.0f;
3110 NameOffset = -1;
3113 SortOrder = -1;
3114 SortDirection = ImGuiSortDirection_None;
3116 }
3117};
3118
3119// Transient cell data stored per row.
3120// sizeof() ~ 6 bytes
3122{
3123 ImU32 BgColor; // Actual color
3124 ImGuiTableColumnIdx Column; // Column number
3125};
3126
3127// Parameters for TableAngledHeadersRowEx()
3128// This may end up being refactored for more general purpose.
3129// sizeof() ~ 12 bytes
3131{
3132 ImGuiTableColumnIdx Index; // Column index
3136};
3137
3138// Per-instance data that needs preserving across frames (seemingly most others do not need to be preserved aside from debug needs. Does that means they could be moved to ImGuiTableTempData?)
3139// sizeof() ~ 24 bytes
3141{
3143 float LastOuterHeight; // Outer height from last frame
3144 float LastTopHeadersRowHeight; // Height of first consecutive header rows from last frame (FIXME: this is used assuming consecutive headers are in same frozen set)
3145 float LastFrozenHeight; // Height of frozen section from last frame
3146 int HoveredRowLast; // Index of row which was hovered last frame.
3147 int HoveredRowNext; // Index of row hovered this frame, set after encountering it.
3148
3150};
3151
3152// sizeof() ~ 592 bytes + heap allocs described in TableBeginInitMemory()
3153struct IMGUI_API ImGuiTable
3154{
3155 ImGuiID ID;
3156 ImGuiTableFlags Flags;
3157 void* RawData; // Single allocation to hold Columns[], DisplayOrderToIndex[] and RowCellData[]
3158 ImGuiTableTempData* TempData; // Transient data while table is active. Point within g.CurrentTableStack[]
3159 ImSpan<ImGuiTableColumn> Columns; // Point within RawData[]
3160 ImSpan<ImGuiTableColumnIdx> DisplayOrderToIndex; // Point within RawData[]. Store display order of columns (when not reordered, the values are 0...Count-1)
3161 ImSpan<ImGuiTableCellData> RowCellData; // Point within RawData[]. Store cells background requests for current row.
3162 ImBitArrayPtr EnabledMaskByDisplayOrder; // Column DisplayOrder -> IsEnabled map
3163 ImBitArrayPtr EnabledMaskByIndex; // Column Index -> IsEnabled map (== not hidden by user/api) in a format adequate for iterating column without touching cold data
3164 ImBitArrayPtr VisibleMaskByIndex; // Column Index -> IsVisibleX|IsVisibleY map (== not hidden by user/api && not hidden by scrolling/cliprect)
3165 ImGuiTableFlags SettingsLoadedFlags; // Which data were loaded from the .ini file (e.g. when order is not altered we won't save order)
3166 int SettingsOffset; // Offset in g.SettingsTables
3168 int ColumnsCount; // Number of columns declared in BeginTable()
3171 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.
3172 ImS16 InstanceInteracted; // Mark which instance (generally 0) of the same ID is being interacted with
3175 float RowMinHeight; // Height submitted to TableNextRow()
3176 float RowCellPaddingY; // Top and bottom padding. Reloaded during row change.
3179 ImGuiTableRowFlags RowFlags : 16; // Current row flags, see ImGuiTableRowFlags_
3180 ImGuiTableRowFlags LastRowFlags : 16;
3181 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.
3182 ImU32 RowBgColor[2]; // Background color override for current row.
3190 float CellPaddingX; // Padding from each borders. Locked in BeginTable()/Layout.
3191 float CellSpacingX1; // Spacing between non-bordered cells. Locked in BeginTable()/Layout.
3193 float InnerWidth; // User value passed to BeginTable(), see comments at the top of BeginTable() for details.
3194 float ColumnsGivenWidth; // Sum of current column width
3195 float ColumnsAutoFitWidth; // Sum of ideal column width in order nothing to be clipped, used for auto-fitting and content width submission in outer window
3196 float ColumnsStretchSumWeights; // Sum of weight of all enabled stretching columns
3198 float ResizeLockMinContentsX2; // Lock minimum contents width while resizing down in order to not create feedback loops. But we allow growing the table.
3199 float RefScale; // Reference scale to be able to rescale columns on font/dpi changes.
3200 float AngledHeadersHeight; // Set by TableAngledHeadersRow(), used in TableUpdateLayout()
3201 float AngledHeadersSlope; // Set by TableAngledHeadersRow(), used in TableUpdateLayout()
3202 ImRect OuterRect; // Note: for non-scrolling table, OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable().
3203 ImRect InnerRect; // InnerRect but without decoration. As with OuterRect, for non-scrolling tables, InnerRect.Max.y is
3206 ImRect BgClipRect; // We use this to cpu-clip cell background color fill, evolve during the frame as we cross frozen rows boundaries
3207 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
3208 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.
3209 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.
3210 ImRect HostBackupInnerClipRect; // Backup of InnerWindow->ClipRect during PushTableBackground()/PopTableBackground()
3211 ImGuiWindow* OuterWindow; // Parent window for the table
3212 ImGuiWindow* InnerWindow; // Window holding the table data (== OuterWindow or a child window)
3213 ImGuiTextBuffer ColumnsNames; // Contiguous buffer holding columns names
3214 ImDrawListSplitter* DrawSplitter; // Shortcut to TempData->DrawSplitter while in table. Isolate draw commands per columns to avoid switching clip rect constantly
3216 ImVector<ImGuiTableInstanceData> InstanceDataExtra; // FIXME-OPT: Using a small-vector pattern would be good.
3218 ImVector<ImGuiTableColumnSortSpecs> SortSpecsMulti; // FIXME-OPT: Using a small-vector pattern would be good.
3219 ImGuiTableSortSpecs SortSpecs; // Public facing sorts specs, this is what we return in TableGetSortSpecs()
3220 ImGuiTableColumnIdx SortSpecsCount;
3221 ImGuiTableColumnIdx ColumnsEnabledCount; // Number of enabled columns (<= ColumnsCount)
3222 ImGuiTableColumnIdx ColumnsEnabledFixedCount; // Number of enabled columns using fixed width (<= ColumnsCount)
3223 ImGuiTableColumnIdx DeclColumnsCount; // Count calls to TableSetupColumn()
3224 ImGuiTableColumnIdx AngledHeadersCount; // Count columns with angled headers
3225 ImGuiTableColumnIdx HoveredColumnBody; // Index of column whose visible region is being hovered. Important: == ColumnsCount when hovering empty region after the right-most column!
3226 ImGuiTableColumnIdx HoveredColumnBorder; // Index of column whose right-border is being hovered (for resizing).
3227 ImGuiTableColumnIdx HighlightColumnHeader; // Index of column which should be highlighted.
3228 ImGuiTableColumnIdx AutoFitSingleColumn; // Index of single column requesting auto-fit.
3229 ImGuiTableColumnIdx ResizedColumn; // Index of column being resized. Reset when InstanceCurrent==0.
3230 ImGuiTableColumnIdx LastResizedColumn; // Index of column being resized from previous frame.
3231 ImGuiTableColumnIdx HeldHeaderColumn; // Index of column header being held.
3232 ImGuiTableColumnIdx ReorderColumn; // Index of column being reordered. (not cleared)
3233 ImGuiTableColumnIdx ReorderColumnDir; // -1 or +1
3234 ImGuiTableColumnIdx LeftMostEnabledColumn; // Index of left-most non-hidden column.
3235 ImGuiTableColumnIdx RightMostEnabledColumn; // Index of right-most non-hidden column.
3236 ImGuiTableColumnIdx LeftMostStretchedColumn; // Index of left-most stretched column.
3237 ImGuiTableColumnIdx RightMostStretchedColumn; // Index of right-most stretched column.
3238 ImGuiTableColumnIdx ContextPopupColumn; // Column right-clicked on, of -1 if opening context menu from a neutral/empty spot
3239 ImGuiTableColumnIdx FreezeRowsRequest; // Requested frozen rows count
3240 ImGuiTableColumnIdx FreezeRowsCount; // Actual frozen row count (== FreezeRowsRequest, or == 0 when no scrolling offset)
3241 ImGuiTableColumnIdx FreezeColumnsRequest; // Requested frozen columns count
3242 ImGuiTableColumnIdx FreezeColumnsCount; // Actual frozen columns count (== FreezeColumnsRequest, or == 0 when no scrolling offset)
3243 ImGuiTableColumnIdx RowCellDataCurrent; // Index of current RowCellData[] entry in current row
3244 ImGuiTableDrawChannelIdx DummyDrawChannel; // Redirect non-visible columns here.
3245 ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent; // For Selectable() and other widgets drawing across columns after the freezing line. Index within DrawSplitter.Channels[]
3246 ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen;
3247 bool IsLayoutLocked; // Set by TableUpdateLayout() which is called when beginning the first row.
3248 bool IsInsideRow; // Set when inside TableBeginRow()/TableEndRow().
3251 bool IsUsingHeaders; // Set when the first row had the ImGuiTableRowFlags_Headers flag.
3252 bool IsContextPopupOpen; // Set when default context menu is open (also see: ContextPopupColumn, InstanceInteracted).
3253 bool DisableDefaultContextMenu; // Disable default context menu contents. You may submit your own using TableBeginContextMenuPopup()/EndPopup()
3255 bool IsSettingsDirty; // Set when table settings have changed and needs to be reported into ImGuiTableSetttings data.
3256 bool IsDefaultDisplayOrder; // Set when display order is unchanged from default (DisplayOrder contains 0...Count-1)
3259 bool IsUnfrozenRows; // Set when we got past the frozen row.
3260 bool IsDefaultSizingPolicy; // Set if user didn't explicitly set a sizing policy in BeginTable()
3263 bool HasScrollbarYCurr; // Whether ANY instance of this table had a vertical scrollbar during the current frame.
3264 bool HasScrollbarYPrev; // Whether ANY instance of this table had a vertical scrollbar during the previous.
3266 bool HostSkipItems; // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis
3267
3268 ImGuiTable() { memset(this, 0, sizeof(*this)); LastFrameActive = -1; }
3269 ~ImGuiTable() { IM_FREE(RawData); }
3270};
3271
3272// Transient data that are only needed between BeginTable() and EndTable(), those buffers are shared (1 per level of stacked table).
3273// - Accessing those requires chasing an extra pointer so for very frequently used data we leave them in the main table structure.
3274// - We also leave out of this structure data that tend to be particularly useful for debugging/metrics.
3275// FIXME-TABLE: more transient data could be stored in a stacked ImGuiTableTempData: e.g. SortSpecs.
3276// sizeof() ~ 136 bytes.
3277struct IMGUI_API ImGuiTableTempData
3278{
3279 int TableIndex; // Index in g.Tables.Buf[] pool
3280 float LastTimeActive; // Last timestamp this structure was used
3281 float AngledHeadersExtraWidth; // Used in EndTable()
3282 ImVector<ImGuiTableHeaderData> AngledHeadersRequests; // Used in TableAngledHeadersRow()
3283
3284 ImVec2 UserOuterSize; // outer_size.x passed to BeginTable()
3286
3287 ImRect HostBackupWorkRect; // Backup of InnerWindow->WorkRect at the end of BeginTable()
3288 ImRect HostBackupParentWorkRect; // Backup of InnerWindow->ParentWorkRect at the end of BeginTable()
3289 ImVec2 HostBackupPrevLineSize; // Backup of InnerWindow->DC.PrevLineSize at the end of BeginTable()
3290 ImVec2 HostBackupCurrLineSize; // Backup of InnerWindow->DC.CurrLineSize at the end of BeginTable()
3291 ImVec2 HostBackupCursorMaxPos; // Backup of InnerWindow->DC.CursorMaxPos at the end of BeginTable()
3292 ImVec1 HostBackupColumnsOffset; // Backup of OuterWindow->DC.ColumnsOffset at the end of BeginTable()
3293 float HostBackupItemWidth; // Backup of OuterWindow->DC.ItemWidth at the end of BeginTable()
3294 int HostBackupItemWidthStackSize;//Backup of OuterWindow->DC.ItemWidthStack.Size at the end of BeginTable()
3295
3296 ImGuiTableTempData() { memset(this, 0, sizeof(*this)); LastTimeActive = -1.0f; }
3297};
3298
3299// sizeof() ~ 12
3301{
3303 ImGuiID UserID;
3304 ImGuiTableColumnIdx Index;
3305 ImGuiTableColumnIdx DisplayOrder;
3306 ImGuiTableColumnIdx SortOrder;
3308 ImU8 IsEnabled : 1; // "Visible" in ini file
3309 ImU8 IsStretch : 1;
3310
3312 {
3313 WidthOrWeight = 0.0f;
3314 UserID = 0;
3315 Index = -1;
3316 DisplayOrder = SortOrder = -1;
3317 SortDirection = ImGuiSortDirection_None;
3318 IsEnabled = 1;
3319 IsStretch = 0;
3320 }
3321};
3322
3323// This is designed to be stored in a single ImChunkStream (1 header followed by N ImGuiTableColumnSettings, etc.)
3325{
3326 ImGuiID ID; // Set to 0 to invalidate/delete the setting
3327 ImGuiTableFlags SaveFlags; // Indicate data we want to save using the Resizable/Reorderable/Sortable/Hideable flags (could be using its own flags..)
3328 float RefScale; // Reference scale to be able to rescale columns on font/dpi changes.
3329 ImGuiTableColumnIdx ColumnsCount;
3330 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
3331 bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
3332
3333 ImGuiTableSettings() { memset(this, 0, sizeof(*this)); }
3335};
3336
3337//-----------------------------------------------------------------------------
3338// [SECTION] ImGui internal API
3339// No guarantee of forward compatibility here!
3340//-----------------------------------------------------------------------------
3341
3342namespace ImGui
3343{
3344 // Windows
3345 // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
3346 // If this ever crashes because g.CurrentWindow is NULL, it means that either:
3347 // - ImGui::NewFrame() has never been called, which is illegal.
3348 // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
3349 inline ImGuiWindow* GetCurrentWindowRead() { ImGuiContext& g = *GImGui; return g.CurrentWindow; }
3351 IMGUI_API ImGuiWindow* FindWindowByID(ImGuiID id);
3352 IMGUI_API ImGuiWindow* FindWindowByName(const char* name);
3353 IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window);
3354 IMGUI_API void UpdateWindowSkipRefresh(ImGuiWindow* window);
3355 IMGUI_API ImVec2 CalcWindowNextAutoFitSize(ImGuiWindow* window);
3356 IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy, bool dock_hierarchy);
3357 IMGUI_API bool IsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
3358 IMGUI_API bool IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below);
3359 IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window);
3360 IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
3361 IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
3362 IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
3363 IMGUI_API void SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size);
3365 inline void SetWindowParentWindowForFocusRoute(ImGuiWindow* window, ImGuiWindow* parent_window) { window->ParentWindowForFocusRoute = parent_window; } // You may also use SetNextWindowClass()'s FocusRouteParentWindowId field.
3366 inline ImRect WindowRectAbsToRel(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x - off.x, r.Min.y - off.y, r.Max.x - off.x, r.Max.y - off.y); }
3367 inline ImRect WindowRectRelToAbs(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x + off.x, r.Min.y + off.y, r.Max.x + off.x, r.Max.y + off.y); }
3368 inline ImVec2 WindowPosRelToAbs(ImGuiWindow* window, const ImVec2& p) { ImVec2 off = window->DC.CursorStartPos; return ImVec2(p.x + off.x, p.y + off.y); }
3369 inline ImVec2 WindowPosAbsToRel(ImGuiWindow* window, const ImVec2& p) { ImVec2 off = window->DC.CursorStartPos; return ImVec2(p.x - off.x, p.y - off.y); }
3370
3371 // Windows: Display Order and Focus Order
3372 IMGUI_API void FocusWindow(ImGuiWindow* window, ImGuiFocusRequestFlags flags = 0);
3373 IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window, ImGuiViewport* filter_viewport, ImGuiFocusRequestFlags flags);
3374 IMGUI_API void BringWindowToFocusFront(ImGuiWindow* window);
3375 IMGUI_API void BringWindowToDisplayFront(ImGuiWindow* window);
3376 IMGUI_API void BringWindowToDisplayBack(ImGuiWindow* window);
3377 IMGUI_API void BringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* above_window);
3378 IMGUI_API int FindWindowDisplayIndex(ImGuiWindow* window);
3380
3381 // Windows: Idle, Refresh Policies [EXPERIMENTAL]
3382 IMGUI_API void SetNextWindowRefreshPolicy(ImGuiWindowRefreshFlags flags);
3383
3384 // Fonts, drawing
3385 IMGUI_API void SetCurrentFont(ImFont* font);
3386 inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
3388 IMGUI_API void AddDrawListToDrawDataEx(ImDrawData* draw_data, ImVector<ImDrawList*>* out_list, ImDrawList* draw_list);
3389
3390 // Init
3391 IMGUI_API void Initialize();
3392 IMGUI_API void Shutdown(); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
3393
3394 // NewFrame
3395 IMGUI_API void UpdateInputEvents(bool trickle_fast_inputs);
3396 IMGUI_API void UpdateHoveredWindowAndCaptureFlags();
3397 IMGUI_API void FindHoveredWindowEx(const ImVec2& pos, bool find_first_and_in_any_viewport, ImGuiWindow** out_hovered_window, ImGuiWindow** out_hovered_window_under_moving_window);
3398 IMGUI_API void StartMouseMovingWindow(ImGuiWindow* window);
3399 IMGUI_API void StartMouseMovingWindowOrNode(ImGuiWindow* window, ImGuiDockNode* node, bool undock);
3400 IMGUI_API void UpdateMouseMovingWindowNewFrame();
3401 IMGUI_API void UpdateMouseMovingWindowEndFrame();
3402
3403 // Generic context hooks
3404 IMGUI_API ImGuiID AddContextHook(ImGuiContext* context, const ImGuiContextHook* hook);
3405 IMGUI_API void RemoveContextHook(ImGuiContext* context, ImGuiID hook_to_remove);
3406 IMGUI_API void CallContextHooks(ImGuiContext* context, ImGuiContextHookType type);
3407
3408 // Viewports
3409 IMGUI_API void TranslateWindowsInViewport(ImGuiViewportP* viewport, const ImVec2& old_pos, const ImVec2& new_pos);
3410 IMGUI_API void ScaleWindowsInViewport(ImGuiViewportP* viewport, float scale);
3411 IMGUI_API void DestroyPlatformWindow(ImGuiViewportP* viewport);
3412 IMGUI_API void SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport);
3413 IMGUI_API void SetCurrentViewport(ImGuiWindow* window, ImGuiViewportP* viewport);
3415 IMGUI_API ImGuiViewportP* FindHoveredViewportFromPlatformWindowStack(const ImVec2& mouse_platform_pos);
3416
3417 // Settings
3418 IMGUI_API void MarkIniSettingsDirty();
3419 IMGUI_API void MarkIniSettingsDirty(ImGuiWindow* window);
3420 IMGUI_API void ClearIniSettings();
3421 IMGUI_API void AddSettingsHandler(const ImGuiSettingsHandler* handler);
3422 IMGUI_API void RemoveSettingsHandler(const char* type_name);
3423 IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
3424
3425 // Settings - Windows
3426 IMGUI_API ImGuiWindowSettings* CreateNewWindowSettings(const char* name);
3427 IMGUI_API ImGuiWindowSettings* FindWindowSettingsByID(ImGuiID id);
3429 IMGUI_API void ClearWindowSettings(const char* name);
3430
3431 // Localization
3432 IMGUI_API void LocalizeRegisterEntries(const ImGuiLocEntry* entries, int count);
3433 inline const char* LocalizeGetMsg(ImGuiLocKey key) { ImGuiContext& g = *GImGui; const char* msg = g.LocalizationTable[key]; return msg ? msg : "*Missing Text*"; }
3434
3435 // Scrolling
3436 IMGUI_API void SetScrollX(ImGuiWindow* window, float scroll_x);
3437 IMGUI_API void SetScrollY(ImGuiWindow* window, float scroll_y);
3438 IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio);
3439 IMGUI_API void SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio);
3440
3441 // Early work-in-progress API (ScrollToItem() will become public)
3442 IMGUI_API void ScrollToItem(ImGuiScrollFlags flags = 0);
3443 IMGUI_API void ScrollToRect(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0);
3444 IMGUI_API ImVec2 ScrollToRectEx(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0);
3445//#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
3446 inline void ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& rect) { ScrollToRect(window, rect, ImGuiScrollFlags_KeepVisibleEdgeY); }
3447//#endif
3448
3449 // Basic Accessors
3450 inline ImGuiItemStatusFlags GetItemStatusFlags(){ ImGuiContext& g = *GImGui; return g.LastItemData.StatusFlags; }
3451 inline ImGuiItemFlags GetItemFlags() { ImGuiContext& g = *GImGui; return g.LastItemData.InFlags; }
3452 inline ImGuiID GetActiveID() { ImGuiContext& g = *GImGui; return g.ActiveId; }
3453 inline ImGuiID GetFocusID() { ImGuiContext& g = *GImGui; return g.NavId; }
3454 IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
3455 IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow* window);
3456 IMGUI_API void ClearActiveID();
3457 IMGUI_API ImGuiID GetHoveredID();
3458 IMGUI_API void SetHoveredID(ImGuiID id);
3459 IMGUI_API void KeepAliveID(ImGuiID id);
3460 IMGUI_API void MarkItemEdited(ImGuiID id); // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function.
3461 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)
3462 IMGUI_API ImGuiID GetIDWithSeed(const char* str_id_begin, const char* str_id_end, ImGuiID seed);
3463 IMGUI_API ImGuiID GetIDWithSeed(int n, ImGuiID seed);
3464
3465 // Basic Helpers for widget code
3466 IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = -1.0f);
3467 inline void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f) { ItemSize(bb.GetSize(), text_baseline_y); } // FIXME: This is a misleading API since we expect CursorPos to be bb.Min.
3468 IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL, ImGuiItemFlags extra_flags = 0);
3469 IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id, ImGuiItemFlags item_flags);
3470 IMGUI_API bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags = 0);
3471 IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id);
3472 IMGUI_API void SetLastItemData(ImGuiID item_id, ImGuiItemFlags in_flags, ImGuiItemStatusFlags status_flags, const ImRect& item_rect);
3473 IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
3474 IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
3475 IMGUI_API void PushMultiItemsWidths(int components, float width_full);
3476 IMGUI_API ImVec2 GetContentRegionMaxAbs();
3477 IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
3478
3479 // Parameter stacks (shared)
3480 IMGUI_API const ImGuiDataVarInfo* GetStyleVarInfo(ImGuiStyleVar idx);
3481 IMGUI_API void BeginDisabledOverrideReenable();
3482 IMGUI_API void EndDisabledOverrideReenable();
3483
3484 // Logging/Capture
3485 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.
3486 IMGUI_API void LogToBuffer(int auto_open_depth = -1); // Start logging/capturing to internal buffer
3487 IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
3488 IMGUI_API void LogSetNextTextDecoration(const char* prefix, const char* suffix);
3489
3490 // Childs
3491 IMGUI_API bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags);
3492
3493 // Popups, Modals
3494 IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_window_flags);
3495 IMGUI_API void OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags = ImGuiPopupFlags_None);
3496 IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup);
3497 IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
3498 IMGUI_API void ClosePopupsExceptModals();
3499 IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
3500 IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window);
3501 IMGUI_API ImGuiWindow* GetTopMostPopupModal();
3503 IMGUI_API ImGuiWindow* FindBlockingModal(ImGuiWindow* window);
3504 IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow* window);
3505 IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy);
3506
3507 // Tooltips
3508 IMGUI_API bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags);
3509 IMGUI_API bool BeginTooltipHidden();
3510
3511 // Menus
3512 IMGUI_API bool BeginViewportSideBar(const char* name, ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags);
3513 IMGUI_API bool BeginMenuEx(const char* label, const char* icon, bool enabled = true);
3514 IMGUI_API bool MenuItemEx(const char* label, const char* icon, const char* shortcut = NULL, bool selected = false, bool enabled = true);
3515
3516 // Combos
3517 IMGUI_API bool BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags);
3518 IMGUI_API bool BeginComboPreview();
3519 IMGUI_API void EndComboPreview();
3520
3521 // Gamepad/Keyboard Navigation
3522 IMGUI_API void NavInitWindow(ImGuiWindow* window, bool force_reinit);
3523 IMGUI_API void NavInitRequestApplyResult();
3524 IMGUI_API bool NavMoveRequestButNoResultYet();
3525 IMGUI_API void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags);
3526 IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags);
3528 IMGUI_API void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiTreeNodeStackData* tree_node_data);
3529 IMGUI_API void NavMoveRequestCancel();
3530 IMGUI_API void NavMoveRequestApplyResult();
3531 IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags);
3532 IMGUI_API void NavHighlightActivated(ImGuiID id);
3533 IMGUI_API void NavClearPreferredPosForAxis(ImGuiAxis axis);
3534 IMGUI_API void NavRestoreHighlightAfterMove();
3536 IMGUI_API void SetNavWindow(ImGuiWindow* window);
3537 IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
3538 IMGUI_API void SetNavFocusScope(ImGuiID focus_scope_id);
3539
3540 // Focus/Activation
3541 // This should be part of a larger set of API: FocusItem(offset = -1), FocusItemByID(id), ActivateItem(offset = -1), ActivateItemByID(id) etc. which are
3542 // much harder to design and implement than expected. I have a couple of private branches on this matter but it's not simple. For now implementing the easy ones.
3543 IMGUI_API void FocusItem(); // Focus last item (no selection/activation).
3544 IMGUI_API void ActivateItemByID(ImGuiID id); // Activate an item by ID (button, checkbox, tree node etc.). Activation is queued and processed on the next frame when the item is encountered again.
3545
3546 // Inputs
3547 // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
3548 inline bool IsNamedKey(ImGuiKey key) { return key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END; }
3549 inline bool IsNamedKeyOrMod(ImGuiKey key) { return (key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END) || key == ImGuiMod_Ctrl || key == ImGuiMod_Shift || key == ImGuiMod_Alt || key == ImGuiMod_Super; }
3550 inline bool IsLegacyKey(ImGuiKey key) { return key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_LegacyNativeKey_END; }
3551 inline bool IsKeyboardKey(ImGuiKey key) { return key >= ImGuiKey_Keyboard_BEGIN && key < ImGuiKey_Keyboard_END; }
3552 inline bool IsGamepadKey(ImGuiKey key) { return key >= ImGuiKey_Gamepad_BEGIN && key < ImGuiKey_Gamepad_END; }
3553 inline bool IsMouseKey(ImGuiKey key) { return key >= ImGuiKey_Mouse_BEGIN && key < ImGuiKey_Mouse_END; }
3554 inline bool IsAliasKey(ImGuiKey key) { return key >= ImGuiKey_Aliases_BEGIN && key < ImGuiKey_Aliases_END; }
3555 inline bool IsModKey(ImGuiKey key) { return key >= ImGuiKey_LeftCtrl && key <= ImGuiKey_RightSuper; }
3556 ImGuiKeyChord FixupKeyChord(ImGuiKeyChord key_chord);
3557 inline ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key)
3558 {
3559 if (key == ImGuiMod_Ctrl) return ImGuiKey_ReservedForModCtrl;
3560 if (key == ImGuiMod_Shift) return ImGuiKey_ReservedForModShift;
3561 if (key == ImGuiMod_Alt) return ImGuiKey_ReservedForModAlt;
3562 if (key == ImGuiMod_Super) return ImGuiKey_ReservedForModSuper;
3563 return key;
3564 }
3565
3566 IMGUI_API ImGuiKeyData* GetKeyData(ImGuiContext* ctx, ImGuiKey key);
3567 inline ImGuiKeyData* GetKeyData(ImGuiKey key) { ImGuiContext& g = *GImGui; return GetKeyData(&g, key); }
3568 IMGUI_API const char* GetKeyChordName(ImGuiKeyChord key_chord);
3569 inline ImGuiKey MouseButtonToKey(ImGuiMouseButton button) { IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); return (ImGuiKey)(ImGuiKey_MouseLeft + button); }
3570 IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
3571 IMGUI_API ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down);
3572 IMGUI_API float GetNavTweakPressedAmount(ImGuiAxis axis);
3573 IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
3574 IMGUI_API void GetTypematicRepeatRate(ImGuiInputFlags flags, float* repeat_delay, float* repeat_rate);
3575 IMGUI_API void TeleportMousePos(const ImVec2& pos);
3576 IMGUI_API void SetActiveIdUsingAllKeyboardKeys();
3577 inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
3578
3579 // [EXPERIMENTAL] Low-Level: Key/Input Ownership
3580 // - The idea is that instead of "eating" a given input, we can link to an owner id.
3581 // - Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead).
3582 // - Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_NoOwner (== -1) or a custom ID.
3583 // - Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0).
3584 // - Input ownership is automatically released on the frame after a key is released. Therefore:
3585 // - for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case).
3586 // - for ownership registration happening ahead of a down/press event, the SetKeyOwner() call needs to be made every frame (happens if e.g. claiming ownership on hover).
3587 // - SetItemKeyOwner() is a shortcut for common simple case. A custom widget will probably want to call SetKeyOwner() multiple times directly based on its interaction state.
3588 // - This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step.
3589 // Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved.
3590 IMGUI_API ImGuiID GetKeyOwner(ImGuiKey key);
3591 IMGUI_API void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 0);
3592 IMGUI_API void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags = 0);
3593 IMGUI_API void SetItemKeyOwner(ImGuiKey key, ImGuiInputFlags flags = 0); // Set key owner to last item if it is hovered or active. Equivalent to 'if (IsItemHovered() || IsItemActive()) { SetKeyOwner(key, GetItemID());'.
3594 IMGUI_API bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id); // Test that key is either not owned, either owned by 'owner_id'
3595 inline ImGuiKeyOwnerData* GetKeyOwnerData(ImGuiContext* ctx, ImGuiKey key) { if (key & ImGuiMod_Mask_) key = ConvertSingleModFlagToKey(key); IM_ASSERT(IsNamedKey(key)); return &ctx->KeysOwnerData[key - ImGuiKey_NamedKey_BEGIN]; }
3596
3597 // [EXPERIMENTAL] High-Level: Input Access functions w/ support for Key/Input Ownership
3598 // - Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag.
3599 // - Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0)
3600 // - Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'.
3601 // Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease.
3602 // - Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API.
3603 IMGUI_API bool IsKeyDown(ImGuiKey key, ImGuiID owner_id);
3604 IMGUI_API bool IsKeyPressed(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id = 0); // Important: when transitioning from old to new IsKeyPressed(): old API has "bool repeat = true", so would default to repeat. New API requiress explicit ImGuiInputFlags_Repeat.
3605 IMGUI_API bool IsKeyReleased(ImGuiKey key, ImGuiID owner_id);
3606 IMGUI_API bool IsKeyChordPressed(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id = 0);
3607 IMGUI_API bool IsMouseDown(ImGuiMouseButton button, ImGuiID owner_id);
3608 IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id = 0);
3609 IMGUI_API bool IsMouseReleased(ImGuiMouseButton button, ImGuiID owner_id);
3610 IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button, ImGuiID owner_id);
3611
3612 // Shortcut Testing & Routing
3613 // - Set Shortcut() and SetNextItemShortcut() in imgui.h
3614 // - When a policy (except for ImGuiInputFlags_RouteAlways *) is set, Shortcut() will register itself with SetShortcutRouting(),
3615 // allowing the system to decide where to route the input among other route-aware calls.
3616 // (* using ImGuiInputFlags_RouteAlways is roughly equivalent to calling IsKeyChordPressed(key) and bypassing route registration and check)
3617 // - When using one of the routing option:
3618 // - The default route is ImGuiInputFlags_RouteFocused (accept inputs if window is in focus stack. Deep-most focused window takes inputs. ActiveId takes inputs over deep-most focused window.)
3619 // - Routes are requested given a chord (key + modifiers) and a routing policy.
3620 // - Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame.
3621 // - Each route may be granted to a single owner. When multiple requests are made we have policies to select the winning route (e.g. deep most window).
3622 // - Multiple read sites may use the same owner id can all access the granted route.
3623 // - When owner_id is 0 we use the current Focus Scope ID as a owner ID in order to identify our location.
3624 // - You can chain two unrelated windows in the focus stack using SetWindowParentWindowForFocusRoute()
3625 // e.g. if you have a tool window associated to a document, and you want document shortcuts to run when the tool is focused.
3626 IMGUI_API bool Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id);
3627 IMGUI_API bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id); // owner_id needs to be explicit and cannot be 0
3628 IMGUI_API bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id);
3629 IMGUI_API ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord);
3630
3631 // Docking
3632 // (some functions are only declared in imgui.cpp, see Docking section)
3633 IMGUI_API void DockContextInitialize(ImGuiContext* ctx);
3634 IMGUI_API void DockContextShutdown(ImGuiContext* ctx);
3635 IMGUI_API void DockContextClearNodes(ImGuiContext* ctx, ImGuiID root_id, bool clear_settings_refs); // Use root_id==0 to clear all
3636 IMGUI_API void DockContextRebuildNodes(ImGuiContext* ctx);
3639 IMGUI_API void DockContextEndFrame(ImGuiContext* ctx);
3640 IMGUI_API ImGuiID DockContextGenNodeID(ImGuiContext* ctx);
3641 IMGUI_API void DockContextQueueDock(ImGuiContext* ctx, ImGuiWindow* target, ImGuiDockNode* target_node, ImGuiWindow* payload, ImGuiDir split_dir, float split_ratio, bool split_outer);
3642 IMGUI_API void DockContextQueueUndockWindow(ImGuiContext* ctx, ImGuiWindow* window);
3643 IMGUI_API void DockContextQueueUndockNode(ImGuiContext* ctx, ImGuiDockNode* node);
3644 IMGUI_API void DockContextProcessUndockWindow(ImGuiContext* ctx, ImGuiWindow* window, bool clear_persistent_docking_ref = true);
3645 IMGUI_API void DockContextProcessUndockNode(ImGuiContext* ctx, ImGuiDockNode* node);
3646 IMGUI_API bool DockContextCalcDropPosForDocking(ImGuiWindow* target, ImGuiDockNode* target_node, ImGuiWindow* payload_window, ImGuiDockNode* payload_node, ImGuiDir split_dir, bool split_outer, ImVec2* out_pos);
3647 IMGUI_API ImGuiDockNode*DockContextFindNodeByID(ImGuiContext* ctx, ImGuiID id);
3648 IMGUI_API void DockNodeWindowMenuHandler_Default(ImGuiContext* ctx, ImGuiDockNode* node, ImGuiTabBar* tab_bar);
3649 IMGUI_API bool DockNodeBeginAmendTabBar(ImGuiDockNode* node);
3650 IMGUI_API void DockNodeEndAmendTabBar();
3651 inline ImGuiDockNode* DockNodeGetRootNode(ImGuiDockNode* node) { while (node->ParentNode) node = node->ParentNode; return node; }
3652 inline bool DockNodeIsInHierarchyOf(ImGuiDockNode* node, ImGuiDockNode* parent) { while (node) { if (node == parent) return true; node = node->ParentNode; } return false; }
3653 inline int DockNodeGetDepth(const ImGuiDockNode* node) { int depth = 0; while (node->ParentNode) { node = node->ParentNode; depth++; } return depth; }
3654 inline ImGuiID DockNodeGetWindowMenuButtonId(const ImGuiDockNode* node) { return ImHashStr("#COLLAPSE", 0, node->ID); }
3656 IMGUI_API bool GetWindowAlwaysWantOwnTabBar(ImGuiWindow* window);
3657 IMGUI_API void BeginDocked(ImGuiWindow* window, bool* p_open);
3658 IMGUI_API void BeginDockableDragDropSource(ImGuiWindow* window);
3659 IMGUI_API void BeginDockableDragDropTarget(ImGuiWindow* window);
3660 IMGUI_API void SetWindowDock(ImGuiWindow* window, ImGuiID dock_id, ImGuiCond cond);
3661
3662 // Docking - Builder function needs to be generally called before the node is used/submitted.
3663 // - The DockBuilderXXX functions are designed to _eventually_ become a public API, but it is too early to expose it and guarantee stability.
3664 // - Do not hold on ImGuiDockNode* pointers! They may be invalidated by any split/merge/remove operation and every frame.
3665 // - To create a DockSpace() node, make sure to set the ImGuiDockNodeFlags_DockSpace flag when calling DockBuilderAddNode().
3666 // You can create dockspace nodes (attached to a window) _or_ floating nodes (carry its own window) with this API.
3667 // - DockBuilderSplitNode() create 2 child nodes within 1 node. The initial node becomes a parent node.
3668 // - If you intend to split the node immediately after creation using DockBuilderSplitNode(), make sure
3669 // to call DockBuilderSetNodeSize() beforehand. If you don't, the resulting split sizes may not be reliable.
3670 // - Call DockBuilderFinish() after you are done.
3671 IMGUI_API void DockBuilderDockWindow(const char* window_name, ImGuiID node_id);
3672 IMGUI_API ImGuiDockNode*DockBuilderGetNode(ImGuiID node_id);
3673 inline ImGuiDockNode* DockBuilderGetCentralNode(ImGuiID node_id) { ImGuiDockNode* node = DockBuilderGetNode(node_id); if (!node) return NULL; return DockNodeGetRootNode(node)->CentralNode; }
3674 IMGUI_API ImGuiID DockBuilderAddNode(ImGuiID node_id = 0, ImGuiDockNodeFlags flags = 0);
3675 IMGUI_API void DockBuilderRemoveNode(ImGuiID node_id); // Remove node and all its child, undock all windows
3676 IMGUI_API void DockBuilderRemoveNodeDockedWindows(ImGuiID node_id, bool clear_settings_refs = true);
3677 IMGUI_API void DockBuilderRemoveNodeChildNodes(ImGuiID node_id); // Remove all split/hierarchy. All remaining docked windows will be re-docked to the remaining root node (node_id).
3678 IMGUI_API void DockBuilderSetNodePos(ImGuiID node_id, ImVec2 pos);
3679 IMGUI_API void DockBuilderSetNodeSize(ImGuiID node_id, ImVec2 size);
3680 IMGUI_API ImGuiID DockBuilderSplitNode(ImGuiID node_id, ImGuiDir split_dir, float size_ratio_for_node_at_dir, ImGuiID* out_id_at_dir, ImGuiID* out_id_at_opposite_dir); // Create 2 child nodes in this parent node.
3681 IMGUI_API void DockBuilderCopyDockSpace(ImGuiID src_dockspace_id, ImGuiID dst_dockspace_id, ImVector<const char*>* in_window_remap_pairs);
3682 IMGUI_API void DockBuilderCopyNode(ImGuiID src_node_id, ImGuiID dst_node_id, ImVector<ImGuiID>* out_node_remap_pairs);
3683 IMGUI_API void DockBuilderCopyWindowSettings(const char* src_name, const char* dst_name);
3684 IMGUI_API void DockBuilderFinish(ImGuiID node_id);
3685
3686 // [EXPERIMENTAL] Focus Scope
3687 // This is generally used to identify a unique input location (for e.g. a selection set)
3688 // There is one per window (automatically set in Begin), but:
3689 // - Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set.
3690 // So in order to identify a set multiple lists in same window may each need a focus scope.
3691 // If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope()
3692 // - Shortcut routing also use focus scope as a default location identifier if an owner is not provided.
3693 // We don't use the ID Stack for this as it is common to want them separate.
3694 IMGUI_API void PushFocusScope(ImGuiID id);
3695 IMGUI_API void PopFocusScope();
3696 inline ImGuiID GetCurrentFocusScope() { ImGuiContext& g = *GImGui; return g.CurrentFocusScopeId; } // Focus scope we are outputting into, set by PushFocusScope()
3697
3698 // Drag and Drop
3699 IMGUI_API bool IsDragDropActive();
3700 IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
3701 IMGUI_API void ClearDragDrop();
3702 IMGUI_API bool IsDragDropPayloadBeingAccepted();
3703 IMGUI_API void RenderDragDropTargetRect(const ImRect& bb, const ImRect& item_clip_rect);
3704
3705 // Typing-Select API
3706 IMGUI_API ImGuiTypingSelectRequest* GetTypingSelectRequest(ImGuiTypingSelectFlags flags = ImGuiTypingSelectFlags_None);
3707 IMGUI_API int TypingSelectFindMatch(ImGuiTypingSelectRequest* req, int items_count, const char* (*get_item_name_func)(void*, int), void* user_data, int nav_item_idx);
3708 IMGUI_API int TypingSelectFindNextSingleCharMatch(ImGuiTypingSelectRequest* req, int items_count, const char* (*get_item_name_func)(void*, int), void* user_data, int nav_item_idx);
3709 IMGUI_API int TypingSelectFindBestLeadingMatch(ImGuiTypingSelectRequest* req, int items_count, const char* (*get_item_name_func)(void*, int), void* user_data);
3710
3711 // Box-Select API
3712 IMGUI_API bool BeginBoxSelect(ImGuiWindow* window, ImGuiID box_select_id, ImGuiMultiSelectFlags ms_flags);
3713 IMGUI_API void EndBoxSelect(const ImRect& scope_rect, ImGuiMultiSelectFlags ms_flags);
3714
3715 // Multi-Select API
3716 IMGUI_API void MultiSelectItemHeader(ImGuiID id, bool* p_selected, ImGuiButtonFlags* p_button_flags);
3717 IMGUI_API void MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed);
3718 inline ImGuiBoxSelectState* GetBoxSelectState(ImGuiID id) { ImGuiContext& g = *GImGui; return (id != 0 && g.BoxSelectState.ID == id && g.BoxSelectState.IsActive) ? &g.BoxSelectState : NULL; }
3719 inline ImGuiMultiSelectState* GetMultiSelectState(ImGuiID id) { ImGuiContext& g = *GImGui; return g.MultiSelectStorage.GetByKey(id); }
3720
3721 // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API)
3722 IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect& clip_rect);
3723 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().
3724 IMGUI_API void EndColumns(); // close columns
3725 IMGUI_API void PushColumnClipRect(int column_index);
3726 IMGUI_API void PushColumnsBackground();
3727 IMGUI_API void PopColumnsBackground();
3728 IMGUI_API ImGuiID GetColumnsID(const char* str_id, int count);
3729 IMGUI_API ImGuiOldColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id);
3730 IMGUI_API float GetColumnOffsetFromNorm(const ImGuiOldColumns* columns, float offset_norm);
3731 IMGUI_API float GetColumnNormFromOffset(const ImGuiOldColumns* columns, float offset);
3732
3733 // Tables: Candidates for public API
3734 IMGUI_API void TableOpenContextMenu(int column_n = -1);
3735 IMGUI_API void TableSetColumnWidth(int column_n, float width);
3736 IMGUI_API void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs);
3737 IMGUI_API int TableGetHoveredRow(); // Retrieve *PREVIOUS FRAME* hovered row. This difference with TableGetHoveredColumn() is the reason why this is not public yet.
3738 IMGUI_API float TableGetHeaderRowHeight();
3739 IMGUI_API float TableGetHeaderAngledMaxLabelWidth();
3740 IMGUI_API void TablePushBackgroundChannel();
3741 IMGUI_API void TablePopBackgroundChannel();
3742 IMGUI_API void TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label_width, const ImGuiTableHeaderData* data, int data_count);
3743
3744 // Tables: Internals
3745 inline ImGuiTable* GetCurrentTable() { ImGuiContext& g = *GImGui; return g.CurrentTable; }
3746 IMGUI_API ImGuiTable* TableFindByID(ImGuiID id);
3747 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);
3748 IMGUI_API void TableBeginInitMemory(ImGuiTable* table, int columns_count);
3749 IMGUI_API void TableBeginApplyRequests(ImGuiTable* table);
3750 IMGUI_API void TableSetupDrawChannels(ImGuiTable* table);
3751 IMGUI_API void TableUpdateLayout(ImGuiTable* table);
3752 IMGUI_API void TableUpdateBorders(ImGuiTable* table);
3753 IMGUI_API void TableUpdateColumnsWeightFromWidth(ImGuiTable* table);
3754 IMGUI_API void TableDrawBorders(ImGuiTable* table);
3755 IMGUI_API void TableDrawDefaultContextMenu(ImGuiTable* table, ImGuiTableFlags flags_for_section_to_display);
3756 IMGUI_API bool TableBeginContextMenuPopup(ImGuiTable* table);
3757 IMGUI_API void TableMergeDrawChannels(ImGuiTable* table);
3758 inline ImGuiTableInstanceData* TableGetInstanceData(ImGuiTable* table, int instance_no) { if (instance_no == 0) return &table->InstanceDataFirst; return &table->InstanceDataExtra[instance_no - 1]; }
3759 inline ImGuiID TableGetInstanceID(ImGuiTable* table, int instance_no) { return TableGetInstanceData(table, instance_no)->TableInstanceID; }
3760 IMGUI_API void TableSortSpecsSanitize(ImGuiTable* table);
3761 IMGUI_API void TableSortSpecsBuild(ImGuiTable* table);
3762 IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn* column);
3763 IMGUI_API void TableFixColumnSortDirection(ImGuiTable* table, ImGuiTableColumn* column);
3764 IMGUI_API float TableGetColumnWidthAuto(ImGuiTable* table, ImGuiTableColumn* column);
3765 IMGUI_API void TableBeginRow(ImGuiTable* table);
3766 IMGUI_API void TableEndRow(ImGuiTable* table);
3767 IMGUI_API void TableBeginCell(ImGuiTable* table, int column_n);
3768 IMGUI_API void TableEndCell(ImGuiTable* table);
3769 IMGUI_API ImRect TableGetCellBgRect(const ImGuiTable* table, int column_n);
3770 IMGUI_API const char* TableGetColumnName(const ImGuiTable* table, int column_n);
3771 IMGUI_API ImGuiID TableGetColumnResizeID(ImGuiTable* table, int column_n, int instance_no = 0);
3772 IMGUI_API float TableGetMaxColumnWidth(const ImGuiTable* table, int column_n);
3773 IMGUI_API void TableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n);
3774 IMGUI_API void TableSetColumnWidthAutoAll(ImGuiTable* table);
3775 IMGUI_API void TableRemove(ImGuiTable* table);
3776 IMGUI_API void TableGcCompactTransientBuffers(ImGuiTable* table);
3778 IMGUI_API void TableGcCompactSettings();
3779
3780 // Tables: Settings
3781 IMGUI_API void TableLoadSettings(ImGuiTable* table);
3782 IMGUI_API void TableSaveSettings(ImGuiTable* table);
3783 IMGUI_API void TableResetSettings(ImGuiTable* table);
3785 IMGUI_API void TableSettingsAddSettingsHandler();
3786 IMGUI_API ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count);
3787 IMGUI_API ImGuiTableSettings* TableSettingsFindByID(ImGuiID id);
3788
3789 // Tab Bars
3790 inline ImGuiTabBar* GetCurrentTabBar() { ImGuiContext& g = *GImGui; return g.CurrentTabBar; }
3791 IMGUI_API bool BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags);
3792 IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id);
3793 IMGUI_API ImGuiTabItem* TabBarFindTabByOrder(ImGuiTabBar* tab_bar, int order);
3795 IMGUI_API ImGuiTabItem* TabBarGetCurrentTab(ImGuiTabBar* tab_bar);
3796 inline int TabBarGetTabOrder(ImGuiTabBar* tab_bar, ImGuiTabItem* tab) { return tab_bar->Tabs.index_from_ptr(tab); }
3797 IMGUI_API const char* TabBarGetTabName(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
3798 IMGUI_API void TabBarAddTab(ImGuiTabBar* tab_bar, ImGuiTabItemFlags tab_flags, ImGuiWindow* window);
3799 IMGUI_API void TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id);
3800 IMGUI_API void TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
3801 IMGUI_API void TabBarQueueFocus(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
3802 IMGUI_API void TabBarQueueReorder(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, int offset);
3803 IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImVec2 mouse_pos);
3804 IMGUI_API bool TabBarProcessReorder(ImGuiTabBar* tab_bar);
3805 IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags, ImGuiWindow* docked_window);
3806 IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button_or_unsaved_marker);
3807 IMGUI_API ImVec2 TabItemCalcSize(ImGuiWindow* window);
3808 IMGUI_API void TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col);
3809 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);
3810
3811 // Render helpers
3812 // 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.
3813 // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally)
3814 IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
3815 IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
3816 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);
3817 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);
3818 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);
3819 IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
3820 IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
3821 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);
3822 IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_None); // Navigation highlight
3823 IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
3824 IMGUI_API void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
3825
3826 // Render helpers (those functions don't access any ImGui state!)
3827 IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
3828 IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
3829 IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
3830 IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
3831 IMGUI_API void RenderArrowDockMenu(ImDrawList* draw_list, ImVec2 p_min, float sz, ImU32 col);
3832 IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
3833 IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding);
3834 IMGUI_API ImDrawFlags CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold);
3835
3836 // Widgets
3837 IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
3838 IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0);
3839 IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0);
3840 IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2& image_size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& bg_col, const ImVec4& tint_col, ImGuiButtonFlags flags = 0);
3841 IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags, float thickness = 1.0f);
3842 IMGUI_API void SeparatorTextEx(ImGuiID id, const char* label, const char* label_end, float extra_width);
3843 IMGUI_API bool CheckboxFlags(const char* label, ImS64* flags, ImS64 flags_value);
3844 IMGUI_API bool CheckboxFlags(const char* label, ImU64* flags, ImU64 flags_value);
3845
3846 // Widgets: Window Decorations
3847 IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos);
3848 IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_node);
3849 IMGUI_API void Scrollbar(ImGuiAxis axis);
3850 IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags flags);
3851 IMGUI_API ImRect GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis);
3852 IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis);
3853 IMGUI_API ImGuiID GetWindowResizeCornerID(ImGuiWindow* window, int n); // 0..3: corners
3854 IMGUI_API ImGuiID GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir);
3855
3856 // Widgets low-level behaviors
3857 IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
3858 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);
3859 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);
3860 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, ImU32 bg_col = 0);
3861
3862 // Widgets: Tree Nodes
3863 IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiID storage_id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
3864 IMGUI_API void TreePushOverrideID(ImGuiID id);
3865 IMGUI_API bool TreeNodeGetOpen(ImGuiID storage_id);
3866 IMGUI_API void TreeNodeSetOpen(ImGuiID storage_id, bool open);
3867 IMGUI_API bool TreeNodeUpdateNextOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags); // Return open state. Consume previous SetNextItemOpen() data, if any. May return true when logging.
3868
3869 // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
3870 // 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).
3871 // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); "
3872 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);
3873 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);
3874 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);
3875 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);
3876 template<typename T> IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v);
3877 template<typename T> IMGUI_API bool CheckboxFlagsT(const char* label, T* flags, T flags_value);
3878
3879 // Data type helpers
3880 IMGUI_API const ImGuiDataTypeInfo* DataTypeGetInfo(ImGuiDataType data_type);
3881 IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format);
3882 IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg_1, const void* arg_2);
3883 IMGUI_API bool DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void* p_data, const char* format, void* p_data_when_empty = NULL);
3884 IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void* arg_1, const void* arg_2);
3885 IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max);
3886
3887 // InputText
3888 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);
3889 IMGUI_API void InputTextDeactivateHook(ImGuiID id);
3890 IMGUI_API bool TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags);
3891 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);
3892 inline bool TempInputIsActive(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); }
3893 inline ImGuiInputTextState* GetInputTextState(ImGuiID id) { ImGuiContext& g = *GImGui; return (id != 0 && g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active
3894 IMGUI_API void SetNextItemRefVal(ImGuiDataType data_type, void* p_data);
3895
3896 // Color
3897 IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
3898 IMGUI_API void ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags);
3899 IMGUI_API void ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags);
3900
3901 // Plot
3902 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, const ImVec2& size_arg);
3903
3904 // Shade functions (write over already created vertices)
3905 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);
3906 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);
3907 IMGUI_API void ShadeVertsTransformPos(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& pivot_in, float cos_a, float sin_a, const ImVec2& pivot_out);
3908
3909 // Garbage collection
3910 IMGUI_API void GcCompactTransientMiscBuffers();
3911 IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window);
3912 IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window);
3913
3914 // Debug Tools
3915 IMGUI_API void DebugAllocHook(ImGuiDebugAllocInfo* info, int frame_count, void* ptr, size_t size); // size >= 0 : alloc, size = -1 : free
3916 IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
3917 IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
3919 IMGUI_API void DebugDrawCursorPos(ImU32 col = IM_COL32(255, 0, 0, 255));
3920 IMGUI_API void DebugDrawLineExtents(ImU32 col = IM_COL32(255, 0, 0, 255));
3921 IMGUI_API void DebugDrawItemRect(ImU32 col = IM_COL32(255, 0, 0, 255));
3922 IMGUI_API void DebugTextUnformattedWithLocateItem(const char* line_begin, const char* line_end);
3923 IMGUI_API void DebugLocateItem(ImGuiID target_id); // Call sparingly: only 1 at the same time!
3924 IMGUI_API void DebugLocateItemOnHover(ImGuiID target_id); // Only call on reaction to a mouse Hover: because only 1 at the same time!
3925 IMGUI_API void DebugLocateItemResolveWithLastItem();
3926 IMGUI_API void DebugBreakClearData();
3927 IMGUI_API bool DebugBreakButton(const char* label, const char* description_of_location);
3928 IMGUI_API void DebugBreakButtonTooltip(bool keyboard_only, const char* description_of_location);
3929 IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
3930 IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end);
3931 IMGUI_API void DebugNodeColumns(ImGuiOldColumns* columns);
3932 IMGUI_API void DebugNodeDockNode(ImGuiDockNode* node, const char* label);
3933 IMGUI_API void DebugNodeDrawList(ImGuiWindow* window, ImGuiViewportP* viewport, const ImDrawList* draw_list, const char* label);
3934 IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, const ImDrawList* draw_list, const ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb);
3935 IMGUI_API void DebugNodeFont(ImFont* font);
3936 IMGUI_API void DebugNodeFontGlyph(ImFont* font, const ImFontGlyph* glyph);
3937 IMGUI_API void DebugNodeStorage(ImGuiStorage* storage, const char* label);
3938 IMGUI_API void DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label);
3939 IMGUI_API void DebugNodeTable(ImGuiTable* table);
3940 IMGUI_API void DebugNodeTableSettings(ImGuiTableSettings* settings);
3941 IMGUI_API void DebugNodeInputTextState(ImGuiInputTextState* state);
3943 IMGUI_API void DebugNodeMultiSelectState(ImGuiMultiSelectState* state);
3944 IMGUI_API void DebugNodeWindow(ImGuiWindow* window, const char* label);
3945 IMGUI_API void DebugNodeWindowSettings(ImGuiWindowSettings* settings);
3946 IMGUI_API void DebugNodeWindowsList(ImVector<ImGuiWindow*>* windows, const char* label);
3947 IMGUI_API void DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int windows_size, ImGuiWindow* parent_in_begin_stack);
3948 IMGUI_API void DebugNodeViewport(ImGuiViewportP* viewport);
3949 IMGUI_API void DebugRenderKeyboardPreview(ImDrawList* draw_list);
3950 IMGUI_API void DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb);
3951
3952 // Obsolete functions
3953#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
3954 inline void SetItemUsingMouseWheel() { SetItemKeyOwner(ImGuiKey_MouseWheelY); } // Changed in 1.89
3955 inline bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0) { return TreeNodeUpdateNextOpen(id, flags); } // Renamed in 1.89
3956
3957 //inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { IM_ASSERT(IsNamedKey(key)); return IsKeyPressed(key, repeat); } // Removed in 1.87: Mapping from named key is always identity!
3958
3959 // Refactored focus/nav/tabbing system in 1.82 and 1.84. If you have old/custom copy-and-pasted widgets which used FocusableItemRegister():
3960 // (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool tab_focused = FocusableItemRegister(...)'
3961 // (Old) IMGUI_VERSION_NUM >= 18209: using 'ItemAdd(..., ImGuiItemAddFlags_Focusable)' and 'bool tab_focused = (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_Focused) != 0'
3962 // (New) IMGUI_VERSION_NUM >= 18413: using 'ItemAdd(..., ImGuiItemFlags_Inputable)' and 'bool tab_focused = (g.NavActivateId == id && (g.NavActivateFlags & ImGuiActivateFlags_PreferInput))'
3963 //inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) // -> pass ImGuiItemAddFlags_Inputable flag to ItemAdd()
3964 //inline void FocusableItemUnregister(ImGuiWindow* window) // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem
3965#endif
3966
3967} // namespace ImGui
3968
3969
3970//-----------------------------------------------------------------------------
3971// [SECTION] ImFontAtlas internal API
3972//-----------------------------------------------------------------------------
3973
3974// This structure is likely to evolve as we add support for incremental atlas updates
3976{
3978};
3979
3980// Helper for font builder
3981#ifdef IMGUI_ENABLE_STB_TRUETYPE
3982IMGUI_API const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype();
3983#endif
3984IMGUI_API void ImFontAtlasUpdateConfigDataPointers(ImFontAtlas* atlas);
3985IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas);
3986IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
3987IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
3988IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas* atlas);
3989IMGUI_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);
3990IMGUI_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);
3991IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
3992IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
3993
3994//-----------------------------------------------------------------------------
3995// [SECTION] Test Engine specific hooks (imgui_test_engine)
3996//-----------------------------------------------------------------------------
3997
3998#ifdef IMGUI_ENABLE_TEST_ENGINE
3999extern void ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, ImGuiID id, const ImRect& bb, const ImGuiLastItemData* item_data); // item_data may be NULL
4000extern void ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
4001extern void ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
4002extern const char* ImGuiTestEngine_FindItemDebugLabel(ImGuiContext* ctx, ImGuiID id);
4003
4004// In IMGUI_VERSION_NUM >= 18934: changed IMGUI_TEST_ENGINE_ITEM_ADD(bb,id) to IMGUI_TEST_ENGINE_ITEM_ADD(id,bb,item_data);
4005#define IMGUI_TEST_ENGINE_ITEM_ADD(_ID,_BB,_ITEM_DATA) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemAdd(&g, _ID, _BB, _ITEM_DATA) // Register item bounding box
4006#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)
4007#define IMGUI_TEST_ENGINE_LOG(_FMT,...) if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log
4008#else
4009#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID) ((void)0)
4010#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) ((void)g)
4011#endif
4012
4013//-----------------------------------------------------------------------------
4014
4015#if defined(__clang__)
4016#pragma clang diagnostic pop
4017#elif defined(__GNUC__)
4018#pragma GCC diagnostic pop
4019#endif
4020
4021#ifdef _MSC_VER
4022#pragma warning (pop)
4023#endif
4024
4025#endif // #ifndef IMGUI_DISABLE
Definition imgui.cpp:1176
IMGUI_API void AddDrawListToDrawDataEx(ImDrawData *draw_data, ImVector< ImDrawList * > *out_list, ImDrawList *draw_list)
Definition imgui_draw.cpp:2214
IMGUI_API void ClosePopupsOverWindow(ImGuiWindow *ref_window, bool restore_focus_to_window_under_popup)
Definition imgui.cpp:11909
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)
Definition imgui.cpp:3613
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)
Definition imgui_widgets.cpp:2554
IMGUI_API void TableSortSpecsBuild(ImGuiTable *table)
Definition imgui_tables.cpp:2954
ImGuiWindow * GetCurrentWindowRead()
Definition imgui_internal.h:3349
const char * LocalizeGetMsg(ImGuiLocKey key)
Definition imgui_internal.h:3433
IMGUI_API ImGuiID DockBuilderSplitNode(ImGuiID node_id, ImGuiDir split_dir, float size_ratio_for_node_at_dir, ImGuiID *out_id_at_dir, ImGuiID *out_id_at_opposite_dir)
Definition imgui.cpp:19164
ImGuiKeyOwnerData * GetKeyOwnerData(ImGuiContext *ctx, ImGuiKey key)
Definition imgui_internal.h:3595
ImGuiBoxSelectState * GetBoxSelectState(ImGuiID id)
Definition imgui_internal.h:3718
IMGUI_API void TableResetSettings(ImGuiTable *table)
Definition imgui_tables.cpp:3597
IMGUI_API void SetLastItemData(ImGuiID item_id, ImGuiItemFlags in_flags, ImGuiItemStatusFlags status_flags, const ImRect &item_rect)
Definition imgui.cpp:4440
ImRect WindowRectAbsToRel(ImGuiWindow *window, const ImRect &r)
Definition imgui_internal.h:3366
IMGUI_API void SetScrollX(float scroll_x)
Definition imgui.cpp:11599
IMGUI_API bool TreeNodeGetOpen(ImGuiID storage_id)
Definition imgui_widgets.cpp:6310
IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
Definition imgui.cpp:11971
IMGUI_API void TableMergeDrawChannels(ImGuiTable *table)
Definition imgui_tables.cpp:2522
IMGUI_API bool ItemAdd(const ImRect &bb, ImGuiID id, const ImRect *nav_bb=NULL, ImGuiItemFlags extra_flags=0)
Definition imgui.cpp:10912
IMGUI_API ImVec2 ScrollToRectEx(ImGuiWindow *window, const ImRect &rect, ImGuiScrollFlags flags=0)
Definition imgui.cpp:11489
IMGUI_API float TableGetHeaderAngledMaxLabelWidth()
Definition imgui_tables.cpp:3013
IMGUI_API bool IsPopupOpen(const char *str_id, ImGuiPopupFlags flags=0)
Definition imgui.cpp:11806
IMGUI_API void RemoveSettingsHandler(const char *type_name)
Definition imgui.cpp:14623
IMGUI_API void DebugNodeWindowsListByBeginStackParent(ImGuiWindow **windows, int windows_size, ImGuiWindow *parent_in_begin_stack)
Definition imgui.cpp:21629
IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect &rect_rel)
Definition imgui.cpp:12370
ImRect WindowRectRelToAbs(ImGuiWindow *window, const ImRect &r)
Definition imgui_internal.h:3367
IMGUI_API void RenderArrowDockMenu(ImDrawList *draw_list, ImVec2 p_min, float sz, ImU32 col)
Definition imgui_draw.cpp:4313
IMGUI_API void DebugRenderKeyboardPreview(ImDrawList *draw_list)
Definition imgui.cpp:20220
IMGUI_API void SeparatorTextEx(ImGuiID id, const char *label, const char *label_end, float extra_width)
Definition imgui_widgets.cpp:1634
IMGUI_API void ActivateItemByID(ImGuiID id)
Definition imgui.cpp:8811
IMGUI_API void NavClearPreferredPosForAxis(ImGuiAxis axis)
Definition imgui.cpp:12364
IMGUI_API void BeginDockableDragDropTarget(ImGuiWindow *window)
Definition imgui.cpp:19592
IMGUI_API void TreeNodeSetOpen(ImGuiID storage_id, bool open)
Definition imgui_widgets.cpp:6317
IMGUI_API void ClearActiveID()
Definition imgui.cpp:4158
IMGUI_API ImGuiWindowSettings * FindWindowSettingsByID(ImGuiID id)
Definition imgui.cpp:14788
IMGUI_API bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags)
Definition imgui.cpp:11691
IMGUI_API ImGuiWindow * FindBlockingModal(ImGuiWindow *window)
Definition imgui.cpp:6948
IMGUI_API void DebugNodeTypingSelectState(ImGuiTypingSelectState *state)
Definition imgui_widgets.cpp:7145
IMGUI_API void Initialize()
Definition imgui.cpp:3827
ImGuiID GetCurrentFocusScope()
Definition imgui_internal.h:3696
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)
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_draw.cpp:4419
IMGUI_API void GetTypematicRepeatRate(ImGuiInputFlags flags, float *repeat_delay, float *repeat_rate)
Definition imgui.cpp:9248
IMGUI_API bool ItemHoverable(const ImRect &bb, ImGuiID id, ImGuiItemFlags item_flags)
Definition imgui.cpp:4347
bool IsNamedKey(ImGuiKey key)
Definition imgui_internal.h:3548
IMGUI_API ImGuiID AddContextHook(ImGuiContext *context, const ImGuiContextHook *hook)
Definition imgui.cpp:3976
IMGUI_API void BringWindowToDisplayFront(ImGuiWindow *window)
Definition imgui.cpp:7981
bool IsModKey(ImGuiKey key)
Definition imgui_internal.h:3555
IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2 &pos, ImGuiDockNode *dock_node)
Definition imgui_widgets.cpp:877
bool IsKeyboardKey(ImGuiKey key)
Definition imgui_internal.h:3551
IMGUI_API ImGuiID GetWindowResizeCornerID(ImGuiWindow *window, int n)
Definition imgui.cpp:6360
bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags=0)
Definition imgui_internal.h:3955
IMGUI_API void RenderDragDropTargetRect(const ImRect &bb, const ImRect &item_clip_rect)
Definition imgui.cpp:14274
IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow *window, const ImRect &clip_rect)
Definition imgui_tables.cpp:4052
IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList *out_draw_list, const ImDrawList *draw_list, const ImDrawCmd *draw_cmd, bool show_mesh, bool show_aabb)
Definition imgui.cpp:21314
IMGUI_API void DockContextEndFrame(ImGuiContext *ctx)
Definition imgui.cpp:16302
ImGuiKey MouseButtonToKey(ImGuiMouseButton button)
Definition imgui_internal.h:3569
ImGuiID GetActiveID()
Definition imgui_internal.h:3452
IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn *column)
Definition imgui_tables.cpp:2841
IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags)
Definition imgui.cpp:12801
ImGuiID GetFocusID()
Definition imgui_internal.h:3453
IMGUI_API void BeginDisabledOverrideReenable()
Definition imgui.cpp:8240
IMGUI_API void FocusWindow(ImGuiWindow *window, ImGuiFocusRequestFlags flags=0)
Definition imgui.cpp:8039
IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow *window)
Definition imgui.cpp:4098
IMGUI_API void PopColumnsBackground()
Definition imgui_tables.cpp:4201
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)
Definition imgui_tables.cpp:332
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, ImU32 bg_col=0)
Definition imgui_widgets.cpp:1700
IMGUI_API void SetWindowHiddenAndSkipItemsForCurrentFrame(ImGuiWindow *window)
Definition imgui.cpp:8550
IMGUI_API bool BeginTooltipHidden()
Definition imgui.cpp:13973
IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button)
Definition imgui.cpp:9664
IMGUI_API bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id)
Definition imgui.cpp:9524
IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat=false)
Definition imgui.cpp:9623
ImVec2 WindowPosAbsToRel(ImGuiWindow *window, const ImVec2 &p)
Definition imgui_internal.h:3369
IMGUI_API const ImGuiDataVarInfo * GetStyleVarInfo(ImGuiStyleVar idx)
Definition imgui.cpp:3375
IMGUI_API ImGuiWindowSettings * CreateNewWindowSettings(const char *name)
Definition imgui.cpp:14763
IMGUI_API const ImGuiPlatformMonitor * GetViewportPlatformMonitor(ImGuiViewport *viewport)
Definition imgui.cpp:15903
IMGUI_API void BeginColumns(const char *str_id, int count, ImGuiOldColumnFlags flags=0)
Definition imgui_tables.cpp:4239
IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow *window)
Definition imgui.cpp:12293
IMGUI_API void RenderCheckMark(ImDrawList *draw_list, ImVec2 pos, ImU32 col, float sz)
Definition imgui_draw.cpp:4283
IMGUI_API void TabBarRemoveTab(ImGuiTabBar *tab_bar, ImGuiID tab_id)
Definition imgui_widgets.cpp:9490
IMGUI_API void EndDisabledOverrideReenable()
Definition imgui.cpp:8250
IMGUI_API void TableUpdateBorders(ImGuiTable *table)
Definition imgui_tables.cpp:1279
IMGUI_API void BringWindowToDisplayBack(ImGuiWindow *window)
Definition imgui.cpp:7996
IMGUI_API void RenderRectFilledWithHole(ImDrawList *draw_list, const ImRect &outer, const ImRect &inner, ImU32 col, float rounding)
Definition imgui_draw.cpp:4388
IMGUI_API bool ScrollbarEx(const ImRect &bb, ImGuiID id, ImGuiAxis axis, ImS64 *p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags flags)
Definition imgui_widgets.cpp:963
IMGUI_API int TypingSelectFindNextSingleCharMatch(ImGuiTypingSelectRequest *req, int items_count, const char *(*get_item_name_func)(void *, int), void *user_data, int nav_item_idx)
Definition imgui_widgets.cpp:7102
IMGUI_API void FindHoveredWindowEx(const ImVec2 &pos, bool find_first_and_in_any_viewport, ImGuiWindow **out_hovered_window, ImGuiWindow **out_hovered_window_under_moving_window)
Definition imgui.cpp:5634
IMGUI_API void DebugTextUnformattedWithLocateItem(const char *line_begin, const char *line_end)
Definition imgui.cpp:21771
IMGUI_API void EndBoxSelect(const ImRect &scope_rect, ImGuiMultiSelectFlags ms_flags)
Definition imgui_widgets.cpp:7283
IMGUI_API const char * TableGetColumnName(int column_n=-1)
Definition imgui_tables.cpp:1685
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)
Definition imgui_widgets.cpp:3594
IMGUI_API ImGuiID GetKeyOwner(ImGuiKey key)
Definition imgui.cpp:10367
IMGUI_API void PushColumnsBackground()
Definition imgui_tables.cpp:4188
bool DockNodeIsInHierarchyOf(ImGuiDockNode *node, ImGuiDockNode *parent)
Definition imgui_internal.h:3652
IMGUI_API void DockContextInitialize(ImGuiContext *ctx)
Definition imgui.cpp:16176
ImGuiItemFlags GetItemFlags()
Definition imgui_internal.h:3451
IMGUI_API void UpdateMouseMovingWindowNewFrame()
Definition imgui.cpp:4663
IMGUI_API void NavHighlightActivated(ImGuiID id)
Definition imgui.cpp:12357
IMGUI_API void TableRemove(ImGuiTable *table)
Definition imgui_tables.cpp:3854
IMGUI_API bool NavMoveRequestButNoResultYet()
Definition imgui.cpp:12741
IMGUI_API void DockContextNewFrameUpdateDocking(ImGuiContext *ctx)
Definition imgui.cpp:16269
IMGUI_API void TableBeginInitMemory(ImGuiTable *table, int columns_count)
Definition imgui_tables.cpp:651
IMGUI_API void SetScrollY(float scroll_y)
Definition imgui.cpp:11605
IMGUI_API bool BeginViewportSideBar(const char *name, ImGuiViewport *viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags)
Definition imgui_widgets.cpp:8510
IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow *window, ImGuiAxis axis)
Definition imgui_widgets.cpp:909
IMGUI_API void MultiSelectItemHeader(ImGuiID id, bool *p_selected, ImGuiButtonFlags *p_button_flags)
Definition imgui_widgets.cpp:7566
IMGUI_API ImGuiID GetColumnsID(const char *str_id, int count)
Definition imgui_tables.cpp:4226
IMGUI_API void NavMoveRequestCancel()
Definition imgui.cpp:12793
IMGUI_API ImGuiKeyRoutingData * GetShortcutRoutingData(ImGuiKeyChord key_chord)
Definition imgui.cpp:9330
ImGuiID DockNodeGetWindowMenuButtonId(const ImGuiDockNode *node)
Definition imgui_internal.h:3654
IMGUI_API void RenderBullet(ImDrawList *draw_list, ImVec2 pos, ImU32 col)
Definition imgui_draw.cpp:4277
IMGUI_API void DockNodeWindowMenuHandler_Default(ImGuiContext *ctx, ImGuiDockNode *node, ImGuiTabBar *tab_bar)
Definition imgui.cpp:17613
IMGUI_API const char * GetKeyChordName(ImGuiKeyChord key_chord)
Definition imgui.cpp:9210
IMGUI_API void DebugNodeTableSettings(ImGuiTableSettings *settings)
Definition imgui_tables.cpp:3998
IMGUI_API bool IsKeyPressed(ImGuiKey key, bool repeat=true)
Definition imgui.cpp:9549
IMGUI_API ImGuiTableSettings * TableGetBoundSettings(ImGuiTable *table)
Definition imgui_tables.cpp:3582
IMGUI_API bool IsWindowWithinBeginStackOf(ImGuiWindow *window, ImGuiWindow *potential_parent)
Definition imgui.cpp:8305
IMGUI_API void TableSettingsAddSettingsHandler()
Definition imgui_tables.cpp:3832
IMGUI_API ImGuiTabItem * TabBarFindTabByOrder(ImGuiTabBar *tab_bar, int order)
Definition imgui_widgets.cpp:9430
IMGUI_API void ItemSize(const ImVec2 &size, float text_baseline_y=-1.0f)
Definition imgui.cpp:11034
IMGUI_API void DebugNodeMultiSelectState(ImGuiMultiSelectState *state)
Definition imgui_widgets.cpp:7842
IMGUI_API void LogToBuffer(int auto_open_depth=-1)
Definition imgui.cpp:14482
IMGUI_API bool TabItemEx(ImGuiTabBar *tab_bar, const char *label, bool *p_open, ImGuiTabItemFlags flags, ImGuiWindow *docked_window)
Definition imgui_widgets.cpp:9815
IMGUI_API void TableGcCompactSettings()
Definition imgui_tables.cpp:3888
bool TempInputIsActive(ImGuiID id)
Definition imgui_internal.h:3892
IMGUI_API bool CloseButton(ImGuiID id, const ImVec2 &pos)
Definition imgui_widgets.cpp:840
IMGUI_API void SetCurrentFont(ImFont *font)
Definition imgui.cpp:8146
ImGuiKeyChord FixupKeyChord(ImGuiKeyChord key_chord)
Definition imgui.cpp:9119
IMGUI_API void TablePopBackgroundChannel()
Definition imgui_tables.cpp:2426
IMGUI_API void TableDrawBorders(ImGuiTable *table)
Definition imgui_tables.cpp:2705
IMGUI_API void SetCurrentViewport(ImGuiWindow *window, ImGuiViewportP *viewport)
Definition imgui.cpp:15010
IMGUI_API void NavInitRequestApplyResult()
Definition imgui.cpp:13147
IMGUI_API ImGuiDockNode * DockContextFindNodeByID(ImGuiContext *ctx, ImGuiID id)
Definition imgui.cpp:16318
IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void *data_id, const void *data_id_end)
Definition imgui.cpp:21956
IMGUI_API void Scrollbar(ImGuiAxis axis)
Definition imgui_widgets.cpp:928
IMGUI_API void PushColumnClipRect(int column_index)
Definition imgui_tables.cpp:4176
ImGuiID TableGetInstanceID(ImGuiTable *table, int instance_no)
Definition imgui_internal.h:3759
IMGUI_API ImGuiTable * TableFindByID(ImGuiID id)
Definition imgui_tables.cpp:319
IMGUI_API ImGuiTypingSelectRequest * GetTypingSelectRequest(ImGuiTypingSelectFlags flags=ImGuiTypingSelectFlags_None)
Definition imgui_widgets.cpp:6977
IMGUI_API bool Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags=0)
Definition imgui.cpp:10524
IMGUI_API const char * TabBarGetTabName(ImGuiTabBar *tab_bar, ImGuiTabItem *tab)
Definition imgui_widgets.cpp:9458
IMGUI_API const ImGuiDataTypeInfo * DataTypeGetInfo(ImGuiDataType data_type)
Definition imgui_widgets.cpp:2183
ImGuiDockNode * GetWindowDockNode()
Definition imgui_internal.h:3655
IMGUI_API float TableGetHeaderRowHeight()
Definition imgui_tables.cpp:2997
IMGUI_API void NavUpdateCurrentWindowIsScrollPushableX()
Definition imgui.cpp:12590
IMGUI_API void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs)
Definition imgui_tables.cpp:2855
IMGUI_API bool TreeNodeUpdateNextOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags)
Definition imgui_widgets.cpp:6324
IMGUI_API ImGuiTabItem * TabBarFindMostRecentlySelectedTabForActiveWindow(ImGuiTabBar *tab_bar)
Definition imgui_widgets.cpp:9438
IMGUI_API void SetActiveIdUsingAllKeyboardKeys()
Definition imgui.cpp:5833
IMGUI_API bool DockNodeBeginAmendTabBar(ImGuiDockNode *node)
Definition imgui.cpp:17655
IMGUI_API void DebugLocateItem(ImGuiID target_id)
Definition imgui.cpp:21830
IMGUI_API int DataTypeFormatString(char *buf, int buf_size, ImGuiDataType data_type, const void *p_data, const char *format)
Definition imgui_widgets.cpp:2189
IMGUI_API void CallContextHooks(ImGuiContext *context, ImGuiContextHookType type)
Definition imgui.cpp:3997
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border=true, float rounding=0.0f)
Definition imgui.cpp:3670
IMGUI_API void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData *result, ImGuiTreeNodeStackData *tree_node_data)
Definition imgui.cpp:12781
IMGUI_API ImGuiTableSettings * TableSettingsCreate(ImGuiID id, int columns_count)
Definition imgui_tables.cpp:3562
IMGUI_API void BeginDocked(ImGuiWindow *window, bool *p_open)
Definition imgui.cpp:19434
IMGUI_API void ClosePopupsExceptModals()
Definition imgui.cpp:11956
IMGUI_API void DockContextShutdown(ImGuiContext *ctx)
Definition imgui.cpp:16195
IMGUI_API void SetWindowSize(const ImVec2 &size, ImGuiCond cond=0)
Definition imgui.cpp:8521
IMGUI_API bool ButtonBehavior(const ImRect &bb, ImGuiID id, bool *out_hovered, bool *out_held, ImGuiButtonFlags flags=0)
Definition imgui_widgets.cpp:510
int DockNodeGetDepth(const ImGuiDockNode *node)
Definition imgui_internal.h:3653
IMGUI_API void PopFocusScope()
Definition imgui.cpp:8753
IMGUI_API float CalcWrapWidthForPos(const ImVec2 &pos, float wrap_pos_x)
Definition imgui.cpp:4449
IMGUI_API void ScaleWindowsInViewport(ImGuiViewportP *viewport, float scale)
Definition imgui.cpp:15117
IMGUI_API void LogSetNextTextDecoration(const char *prefix, const char *suffix)
Definition imgui.cpp:14429
IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio=0.5f)
Definition imgui.cpp:11643
IMGUI_API bool IsDragDropPayloadBeingAccepted()
Definition imgui.cpp:14226
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)
Definition imgui_draw.cpp:2318
IMGUI_API void LocalizeRegisterEntries(const ImGuiLocEntry *entries, int count)
Definition imgui.cpp:14949
IMGUI_API void DockContextRebuildNodes(ImGuiContext *ctx)
Definition imgui.cpp:16213
IMGUI_API void TabBarQueueFocus(ImGuiTabBar *tab_bar, ImGuiTabItem *tab)
Definition imgui_widgets.cpp:9564
IMGUI_API void DebugNodeColumns(ImGuiOldColumns *columns)
Definition imgui.cpp:21110
IMGUI_API void SetNextItemRefVal(ImGuiDataType data_type, void *p_data)
Definition imgui_widgets.cpp:3634
IMGUI_API void MultiSelectItemFooter(ImGuiID id, bool *p_selected, bool *p_pressed)
Definition imgui_widgets.cpp:7635
IMGUI_API void TablePushBackgroundChannel()
Definition imgui_tables.cpp:2414
IMGUI_API ImGuiWindow * GetTopMostPopupModal()
Definition imgui.cpp:11816
IMGUI_API void TableEndRow(ImGuiTable *table)
Definition imgui_tables.cpp:1917
IMGUI_API void ColorEditOptionsPopup(const float *col, ImGuiColorEditFlags flags)
Definition imgui_widgets.cpp:6114
IMGUI_API void ColorPickerOptionsPopup(const float *ref_col, ImGuiColorEditFlags flags)
Definition imgui_widgets.cpp:6167
IMGUI_API ImGuiKeyData * GetKeyData(ImGuiContext *ctx, ImGuiKey key)
Definition imgui.cpp:9128
IMGUI_API bool IsWindowNavFocusable(ImGuiWindow *window)
Definition imgui.cpp:8426
IMGUI_API void TableFixColumnSortDirection(ImGuiTable *table, ImGuiTableColumn *column)
Definition imgui_tables.cpp:2829
IMGUI_API void PushMultiItemsWidths(int components, float width_full)
Definition imgui.cpp:11200
IMGUI_API bool BeginComboPopup(ImGuiID popup_id, const ImRect &bb, ImGuiComboFlags flags)
Definition imgui_widgets.cpp:1908
IMGUI_API void DebugBreakButtonTooltip(bool keyboard_only, const char *description_of_location)
Definition imgui.cpp:21060
IMGUI_API void UpdateMouseMovingWindowEndFrame()
Definition imgui.cpp:4726
IMGUI_API ImGuiViewportP * FindHoveredViewportFromPlatformWindowStack(const ImVec2 &mouse_platform_pos)
Definition imgui.cpp:15135
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)
Definition imgui.cpp:3567
IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar *tab_bar, ImGuiTabItem *tab, ImVec2 mouse_pos)
Definition imgui_widgets.cpp:9577
IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow *window)
Definition imgui.cpp:12272
IMGUI_API const char * FindRenderedTextEnd(const char *text, const char *text_end=NULL)
Definition imgui.cpp:3507
IMGUI_API void TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label_width, const ImGuiTableHeaderData *data, int data_count)
Definition imgui_tables.cpp:3249
IMGUI_API void DebugLocateItemOnHover(ImGuiID target_id)
Definition imgui.cpp:21839
IMGUI_API void TableSetColumnWidthAutoAll(ImGuiTable *table)
Definition imgui_tables.cpp:2360
IMGUI_API ImDrawList * GetForegroundDrawList(ImGuiViewport *viewport=NULL)
Definition imgui.cpp:4600
IMGUI_API void LogRenderedText(const ImVec2 *ref_pos, const char *text, const char *text_end=NULL)
Definition imgui.cpp:14353
IMGUI_API void BeginDockableDragDropSource(ImGuiWindow *window)
Definition imgui.cpp:19560
ImGuiMultiSelectState * GetMultiSelectState(ImGuiID id)
Definition imgui_internal.h:3719
IMGUI_API ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down)
Definition imgui.cpp:9272
IMGUI_API bool IsClippedEx(const ImRect &bb, ImGuiID id)
Definition imgui.cpp:4427
IMGUI_API bool CheckboxFlagsT(const char *label, T *flags, T flags_value)
bool IsMouseKey(ImGuiKey key)
Definition imgui_internal.h:3553
IMGUI_API void TableSetColumnWidthAutoSingle(ImGuiTable *table, int column_n)
Definition imgui_tables.cpp:2350
ImVec2 WindowPosRelToAbs(ImGuiWindow *window, const ImVec2 &p)
Definition imgui_internal.h:3368
IMGUI_API bool BeginBoxSelect(ImGuiWindow *window, ImGuiID box_select_id, ImGuiMultiSelectFlags ms_flags)
Definition imgui_widgets.cpp:7236
IMGUI_API void RenderArrow(ImDrawList *draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale=1.0f)
Definition imgui_draw.cpp:4246
IMGUI_API void DockContextNewFrameUpdateUndocking(ImGuiContext *ctx)
Definition imgui.cpp:16226
IMGUI_API void UpdateHoveredWindowAndCaptureFlags()
Definition imgui.cpp:4808
IMGUI_API float GetColumnOffsetFromNorm(const ImGuiOldColumns *columns, float offset_norm)
Definition imgui_tables.cpp:4072
IMGUI_API bool IsKeyDown(ImGuiKey key)
Definition imgui.cpp:9534
IMGUI_API ImGuiWindow * FindWindowByID(ImGuiID id)
Definition imgui.cpp:6040
IMGUI_API void MarkItemEdited(ImGuiID id)
Definition imgui.cpp:4178
ImFont * GetDefaultFont()
Definition imgui_internal.h:3386
IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow *window)
Definition imgui.cpp:4076
IMGUI_API void SetWindowHitTestHole(ImGuiWindow *window, const ImVec2 &pos, const ImVec2 &size)
Definition imgui.cpp:8543
IMGUI_API void ClearIniSettings()
Definition imgui.cpp:14641
IMGUI_API void KeepAliveID(ImGuiID id)
Definition imgui.cpp:10898
IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow *window, ImGuiWindowFlags flags, ImGuiWindow *parent_window)
Definition imgui.cpp:6890
IMGUI_API void DebugNodeDockNode(ImGuiDockNode *node, const char *label)
Definition imgui.cpp:21150
IMGUI_API int TypingSelectFindMatch(ImGuiTypingSelectRequest *req, int items_count, const char *(*get_item_name_func)(void *, int), void *user_data, int nav_item_idx)
Definition imgui_widgets.cpp:7087
bool IsLegacyKey(ImGuiKey key)
Definition imgui_internal.h:3550
IMGUI_API void SetItemKeyOwner(ImGuiKey key, ImGuiInputFlags flags=0)
Definition imgui.cpp:10452
IMGUI_API void NavMoveRequestApplyResult()
Definition imgui.cpp:13345
IMGUI_API void TabItemBackground(ImDrawList *draw_list, const ImRect &bb, ImGuiTabItemFlags flags, ImU32 col)
Definition imgui_widgets.cpp:10148
IMGUI_API ImGuiTableSettings * TableSettingsFindByID(ImGuiID id)
Definition imgui_tables.cpp:3571
IMGUI_API void ShadeVertsTransformPos(ImDrawList *draw_list, int vert_start_idx, int vert_end_idx, const ImVec2 &pivot_in, float cos_a, float sin_a, const ImVec2 &pivot_out)
Definition imgui_draw.cpp:2342
IMGUI_API void TableUpdateLayout(ImGuiTable *table)
Definition imgui_tables.cpp:799
IMGUI_API ImGuiTabItem * TabBarFindTabByID(ImGuiTabBar *tab_bar, ImGuiID tab_id)
Definition imgui_widgets.cpp:9420
IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow *window)
Definition imgui.cpp:12386
IMGUI_API void TableSortSpecsSanitize(ImGuiTable *table)
Definition imgui_tables.cpp:2888
IMGUI_API ImGuiTabItem * TabBarGetCurrentTab(ImGuiTabBar *tab_bar)
Definition imgui_widgets.cpp:9451
IMGUI_API void DebugNodeWindowsList(ImVector< ImGuiWindow * > *windows, const char *label)
Definition imgui.cpp:21615
IMGUI_API void DockContextProcessUndockWindow(ImGuiContext *ctx, ImGuiWindow *window, bool clear_persistent_docking_ref=true)
Definition imgui.cpp:16721
IMGUI_API void BringWindowToDisplayBehind(ImGuiWindow *window, ImGuiWindow *above_window)
Definition imgui.cpp:8010
IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth)
Definition imgui.cpp:14412
IMGUI_API ImGuiID TableGetColumnResizeID(ImGuiTable *table, int column_n, int instance_no=0)
Definition imgui_tables.cpp:1762
IMGUI_API void DockBuilderDockWindow(const char *window_name, ImGuiID node_id)
Definition imgui.cpp:18954
IMGUI_API bool BeginMenuEx(const char *label, const char *icon, bool enabled=true)
Definition imgui_widgets.cpp:8607
IMGUI_API void DebugNodeStorage(ImGuiStorage *storage, const char *label)
Definition imgui.cpp:21445
ImGuiItemStatusFlags GetItemStatusFlags()
Definition imgui_internal.h:3450
IMGUI_API void TableSetColumnWidth(int column_n, float width)
Definition imgui_tables.cpp:2267
bool IsActiveIdUsingNavDir(ImGuiDir dir)
Definition imgui_internal.h:3577
IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiID storage_id, ImGuiTreeNodeFlags flags, const char *label, const char *label_end=NULL)
Definition imgui_widgets.cpp:6387
IMGUI_API bool BeginDragDropTargetCustom(const ImRect &bb, ImGuiID id)
Definition imgui.cpp:14167
IMGUI_API void DockBuilderCopyNode(ImGuiID src_node_id, ImGuiID dst_node_id, ImVector< ImGuiID > *out_node_remap_pairs)
Definition imgui.cpp:19225
ImGuiInputTextState * GetInputTextState(ImGuiID id)
Definition imgui_internal.h:3893
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)
IMGUI_API ImGuiID DockBuilderAddNode(ImGuiID node_id=0, ImGuiDockNodeFlags flags=0)
Definition imgui.cpp:19014
IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void *user_data=NULL)
Definition imgui.cpp:10776
IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow *window, ImGuiNavMoveFlags move_flags)
Definition imgui.cpp:12815
IMGUI_API void DockNodeEndAmendTabBar()
Definition imgui.cpp:17671
void SetWindowParentWindowForFocusRoute(ImGuiWindow *window, ImGuiWindow *parent_window)
Definition imgui_internal.h:3365
IMGUI_API void ScrollToRect(ImGuiWindow *window, const ImRect &rect, ImGuiScrollFlags flags=0)
Definition imgui.cpp:11483
IMGUI_API ImDrawFlags CalcRoundingFlagsForRectInRect(const ImRect &r_in, const ImRect &r_outer, float threshold)
Definition imgui_draw.cpp:4404
IMGUI_API void RenderText(ImVec2 pos, const char *text, const char *text_end=NULL, bool hide_text_after_hash=true)
Definition imgui.cpp:3520
IMGUI_API bool IsWindowChildOf(ImGuiWindow *window, ImGuiWindow *potential_parent, bool popup_hierarchy, bool dock_hierarchy)
Definition imgui.cpp:8289
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_window_flags)
Definition imgui.cpp:12025
IMGUI_API void TableLoadSettings(ImGuiTable *table)
Definition imgui_tables.cpp:3660
IMGUI_API void TableSetupDrawChannels(ImGuiTable *table)
Definition imgui_tables.cpp:2454
IMGUI_API void StartMouseMovingWindowOrNode(ImGuiWindow *window, ImGuiDockNode *node, bool undock)
Definition imgui.cpp:4636
IMGUI_API ImVec2 CalcWindowNextAutoFitSize(ImGuiWindow *window)
Definition imgui.cpp:6283
IMGUI_API ImGuiWindowSettings * FindWindowSettingsByWindow(ImGuiWindow *window)
Definition imgui.cpp:14798
IMGUI_API void SetNavWindow(ImGuiWindow *window)
Definition imgui.cpp:12344
IMGUI_API void RenderTextWrapped(ImVec2 pos, const char *text, const char *text_end, float wrap_width)
Definition imgui.cpp:3546
IMGUI_API void DockContextQueueDock(ImGuiContext *ctx, ImGuiWindow *target, ImGuiDockNode *target_node, ImGuiWindow *payload, ImGuiDir split_dir, float split_ratio, bool split_outer)
Definition imgui.cpp:16522
IMGUI_API void DebugNodeViewport(ImGuiViewportP *viewport)
Definition imgui.cpp:21498
IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2 &image_size, const ImVec2 &uv0, const ImVec2 &uv1, const ImVec4 &bg_col, const ImVec4 &tint_col, ImGuiButtonFlags flags=0)
Definition imgui_widgets.cpp:1087
IMGUI_API ImVec2 TabItemCalcSize(const char *label, bool has_close_button_or_unsaved_marker)
Definition imgui_widgets.cpp:10131
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 ImRect TableGetCellBgRect(const ImGuiTable *table, int column_n)
Definition imgui_tables.cpp:1747
IMGUI_API ImGuiWindow * GetTopMostAndVisiblePopupModal()
Definition imgui.cpp:11827
IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void *arg_1, const void *arg_2)
Definition imgui_widgets.cpp:2321
IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow *under_this_window, ImGuiWindow *ignore_window, ImGuiViewport *filter_viewport, ImGuiFocusRequestFlags flags)
Definition imgui.cpp:8108
IMGUI_API void SetWindowPos(const ImVec2 &pos, ImGuiCond cond=0)
Definition imgui.cpp:8474
IMGUI_API void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags)
Definition imgui.cpp:12748
IMGUI_API void GcCompactTransientMiscBuffers()
Definition imgui.cpp:4062
IMGUI_API bool TabBarProcessReorder(ImGuiTabBar *tab_bar)
Definition imgui_widgets.cpp:9613
IMGUI_API void RemoveContextHook(ImGuiContext *context, ImGuiID hook_to_remove)
Definition imgui.cpp:3986
IMGUI_API ImGuiDockNode * DockBuilderGetNode(ImGuiID node_id)
Definition imgui.cpp:18980
IMGUI_API void UpdateWindowSkipRefresh(ImGuiWindow *window)
Definition imgui.cpp:6913
IMGUI_API void InputTextDeactivateHook(ImGuiID id)
Definition imgui_widgets.cpp:4249
IMGUI_API void TableSaveSettings(ImGuiTable *table)
Definition imgui_tables.cpp:3605
IMGUI_API void TextEx(const char *text, const char *text_end=NULL, ImGuiTextFlags flags=0)
Definition imgui_widgets.cpp:174
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void *user_data=NULL)
Definition imgui.cpp:10749
ImGuiTableInstanceData * TableGetInstanceData(ImGuiTable *table, int instance_no)
Definition imgui_internal.h:3758
IMGUI_API void UpdateInputEvents(bool trickle_fast_inputs)
Definition imgui.cpp:10233
IMGUI_API bool ArrowButtonEx(const char *str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags=0)
Definition imgui_widgets.cpp:805
int TabBarGetTabOrder(ImGuiTabBar *tab_bar, ImGuiTabItem *tab)
Definition imgui_internal.h:3796
IMGUI_API ImRect GetWindowScrollbarRect(ImGuiWindow *window, ImGuiAxis axis)
Definition imgui_widgets.cpp:915
IMGUI_API bool IsWindowContentHoverable(ImGuiWindow *window, ImGuiHoveredFlags flags=0)
Definition imgui.cpp:4199
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)
Definition imgui.cpp:3595
IMGUI_API ImGuiID GetIDWithSeed(const char *str_id_begin, const char *str_id_end, ImGuiID seed)
Definition imgui.cpp:8993
IMGUI_API bool IsKeyChordPressed(ImGuiKeyChord key_chord)
Definition imgui.cpp:10468
IMGUI_API bool CheckboxFlags(const char *label, int *flags, int flags_value)
Definition imgui_widgets.cpp:1253
IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2 &ref_pos, const ImVec2 &size, ImGuiDir *last_dir, const ImRect &r_outer, const ImRect &r_avoid, ImGuiPopupPositionPolicy policy)
Definition imgui.cpp:12197
ImGuiDockNode * DockNodeGetRootNode(ImGuiDockNode *node)
Definition imgui_internal.h:3651
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond=0)
Definition imgui.cpp:8556
IMGUI_API bool MenuItemEx(const char *label, const char *icon, const char *shortcut=NULL, bool selected=false, bool enabled=true)
Definition imgui_widgets.cpp:8840
IMGUI_API void TableBeginCell(ImGuiTable *table, int column_n)
Definition imgui_tables.cpp:2125
IMGUI_API void DockContextQueueUndockWindow(ImGuiContext *ctx, ImGuiWindow *window)
Definition imgui.cpp:16536
IMGUI_API void DebugDrawLineExtents(ImU32 col=IM_COL32(255, 0, 0, 255))
Definition imgui.cpp:21807
IMGUI_API void DockBuilderRemoveNodeChildNodes(ImGuiID node_id)
Definition imgui.cpp:19057
IMGUI_API void ScrollToItem(ImGuiScrollFlags flags=0)
Definition imgui.cpp:11476
IMGUI_API void DebugNodeInputTextState(ImGuiInputTextState *state)
Definition imgui_widgets.cpp:5248
IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate)
Definition imgui.cpp:9234
IMGUI_API void SetHoveredID(ImGuiID id)
Definition imgui.cpp:4163
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)
Definition imgui_widgets.cpp:10175
IMGUI_API ImGuiWindow * FindWindowByName(const char *name)
Definition imgui.cpp:6046
IMGUI_API void DockBuilderSetNodeSize(ImGuiID node_id, ImVec2 size)
Definition imgui.cpp:18996
IMGUI_API void SetWindowDock(ImGuiWindow *window, ImGuiID dock_id, ImGuiCond cond)
Definition imgui.cpp:18748
IMGUI_API void OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags=ImGuiPopupFlags_None)
Definition imgui.cpp:11854
IMGUI_API void TabBarCloseTab(ImGuiTabBar *tab_bar, ImGuiTabItem *tab)
Definition imgui_widgets.cpp:9500
IMGUI_API bool DebugBreakButton(const char *label, const char *description_of_location)
Definition imgui.cpp:21074
IMGUI_API bool BeginChildEx(const char *name, ImGuiID id, const ImVec2 &size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags)
Definition imgui.cpp:5879
IMGUI_API void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags=0)
Definition imgui.cpp:10420
ImGuiWindow * GetCurrentWindow()
Definition imgui_internal.h:3350
IMGUI_API bool IsWindowAbove(ImGuiWindow *potential_above, ImGuiWindow *potential_below)
Definition imgui.cpp:8318
IMGUI_API void ClearWindowSettings(const char *name)
Definition imgui.cpp:14807
IMGUI_API void DebugNodeTabBar(ImGuiTabBar *tab_bar, const char *label)
Definition imgui.cpp:21458
IMGUI_API bool TableBeginContextMenuPopup(ImGuiTable *table)
Definition imgui_tables.cpp:3410
IMGUI_API void TranslateWindowsInViewport(ImGuiViewportP *viewport, const ImVec2 &old_pos, const ImVec2 &new_pos)
Definition imgui.cpp:15098
bool IsAliasKey(ImGuiKey key)
Definition imgui_internal.h:3554
IMGUI_API void TableBeginRow(ImGuiTable *table)
Definition imgui_tables.cpp:1880
IMGUI_API void SetNextWindowRefreshPolicy(ImGuiWindowRefreshFlags flags)
Definition imgui.cpp:8692
IMGUI_API void ShowFontAtlas(ImFontAtlas *atlas)
Definition imgui.cpp:20348
IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h)
Definition imgui.cpp:11250
IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem *items, int count, float width_excess)
Definition imgui_widgets.cpp:1769
IMGUI_API void DebugDrawCursorPos(ImU32 col=IM_COL32(255, 0, 0, 255))
Definition imgui.cpp:21797
IMGUI_API void NavRestoreHighlightAfterMove()
Definition imgui.cpp:12872
IMGUI_API int TypingSelectFindBestLeadingMatch(ImGuiTypingSelectRequest *req, int items_count, const char *(*get_item_name_func)(void *, int), void *user_data)
Definition imgui_widgets.cpp:7127
IMGUI_API ImGuiWindow * FindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow *window)
Definition imgui.cpp:5356
bool IsGamepadKey(ImGuiKey key)
Definition imgui_internal.h:3552
IMGUI_API void DockBuilderSetNodePos(ImGuiID node_id, ImVec2 pos)
Definition imgui.cpp:18986
ImGuiDockNode * DockBuilderGetCentralNode(ImGuiID node_id)
Definition imgui_internal.h:3673
IMGUI_API int FindWindowDisplayIndex(ImGuiWindow *window)
Definition imgui.cpp:8032
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)
Definition imgui_draw.cpp:2294
IMGUI_API float TableGetMaxColumnWidth(const ImGuiTable *table, int column_n)
Definition imgui_tables.cpp:2218
IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags, float thickness=1.0f)
Definition imgui_widgets.cpp:1552
IMGUI_API void DebugDrawItemRect(ImU32 col=IM_COL32(255, 0, 0, 255))
Definition imgui.cpp:21820
IMGUI_API void DebugBreakClearData()
Definition imgui.cpp:21051
IMGUI_API T RoundScalarWithFormatT(const char *format, ImGuiDataType data_type, T v)
IMGUI_API void DestroyPlatformWindow(ImGuiViewportP *viewport)
Definition imgui.cpp:15913
IMGUI_API void PushOverrideID(ImGuiID id)
Definition imgui.cpp:8979
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)
IMGUI_API void PushFocusScope(ImGuiID id)
Definition imgui.cpp:8743
IMGUI_API bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id)
Definition imgui.cpp:10387
IMGUI_API ImGuiID DockContextGenNodeID(ImGuiContext *ctx)
Definition imgui.cpp:16323
IMGUI_API float GetNavTweakPressedAmount(ImGuiAxis axis)
Definition imgui.cpp:12956
IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold=-1.0f)
Definition imgui.cpp:9707
IMGUI_API int TableGetHoveredRow()
Definition imgui_tables.cpp:1782
IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio=0.5f)
Definition imgui.cpp:11637
IMGUI_API void FocusItem()
Definition imgui.cpp:8793
IMGUI_API void TabBarAddTab(ImGuiTabBar *tab_bar, ImGuiTabItemFlags tab_flags, ImGuiWindow *window)
Definition imgui_widgets.cpp:9470
IMGUI_API bool DataTypeApplyFromText(const char *buf, ImGuiDataType data_type, void *p_data, const char *format, void *p_data_when_empty=NULL)
Definition imgui_widgets.cpp:2264
IMGUI_API void TreePushOverrideID(ImGuiID id)
Definition imgui_widgets.cpp:6658
IMGUI_API void DockBuilderCopyWindowSettings(const char *src_name, const char *dst_name)
Definition imgui.cpp:19243
IMGUI_API float GetColumnNormFromOffset(const ImGuiOldColumns *columns, float offset)
Definition imgui_tables.cpp:4077
ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key)
Definition imgui_internal.h:3557
IMGUI_API ImGuiID GetHoveredID()
Definition imgui.cpp:4172
IMGUI_API void DebugNodeFontGlyph(ImFont *font, const ImFontGlyph *glyph)
Definition imgui.cpp:21434
IMGUI_API void ErrorCheckUsingSetCursorPosToExtendParentBoundaries()
Definition imgui.cpp:10608
IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow *window)
Definition imgui.cpp:4088
IMGUI_API void NavMoveRequestResolveWithLastItem(ImGuiNavItemData *result)
Definition imgui.cpp:12772
IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void *output, const void *arg_1, const void *arg_2)
Definition imgui_widgets.cpp:2212
IMGUI_API void DebugNodeWindowSettings(ImGuiWindowSettings *settings)
Definition imgui.cpp:21605
ImGuiTabBar * GetCurrentTabBar()
Definition imgui_internal.h:3790
bool IsNamedKeyOrMod(ImGuiKey key)
Definition imgui_internal.h:3549
IMGUI_API ImGuiSettingsHandler * FindSettingsHandler(const char *type_name)
Definition imgui.cpp:14630
IMGUI_API void SetNavFocusScope(ImGuiID focus_scope_id)
Definition imgui.cpp:8765
IMGUI_API void SetWindowViewport(ImGuiWindow *window, ImGuiViewportP *viewport)
Definition imgui.cpp:15029
IMGUI_API void DockContextClearNodes(ImGuiContext *ctx, ImGuiID root_id, bool clear_settings_refs)
Definition imgui.cpp:16203
IMGUI_API void ClearDragDrop()
Definition imgui.cpp:13957
IMGUI_API bool IsDragDropActive()
Definition imgui.cpp:13951
IMGUI_API float TableGetColumnWidthAuto(ImGuiTable *table, ImGuiTableColumn *column)
Definition imgui_tables.cpp:2250
IMGUI_API ImVec2 GetContentRegionMaxAbs()
Definition imgui.cpp:11308
IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding=0.0f)
Definition imgui.cpp:3683
IMGUI_API void DockBuilderRemoveNodeDockedWindows(ImGuiID node_id, bool clear_settings_refs=true)
Definition imgui.cpp:19127
IMGUI_API void RenderNavHighlight(const ImRect &bb, ImGuiID id, ImGuiNavHighlightFlags flags=ImGuiNavHighlightFlags_None)
Definition imgui.cpp:3695
IMGUI_API void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
Definition imgui.cpp:3727
IMGUI_API void AddSettingsHandler(const ImGuiSettingsHandler *handler)
Definition imgui.cpp:14616
IMGUI_API void DockBuilderCopyDockSpace(ImGuiID src_dockspace_id, ImGuiID dst_dockspace_id, ImVector< const char * > *in_window_remap_pairs)
Definition imgui.cpp:19277
IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void *p_data, const void *p_min, const void *p_max)
Definition imgui_widgets.cpp:2350
IMGUI_API void DebugNodeFont(ImFont *font)
Definition imgui.cpp:21344
IMGUI_API bool GetWindowAlwaysWantOwnTabBar(ImGuiWindow *window)
Definition imgui.cpp:19374
IMGUI_API void TableEndCell(ImGuiTable *table)
Definition imgui_tables.cpp:2180
IMGUI_API void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags=0)
Definition imgui.cpp:10437
IMGUI_API void NavInitWindow(ImGuiWindow *window, bool force_reinit)
Definition imgui.cpp:12888
IMGUI_API bool ButtonEx(const char *label, const ImVec2 &size_arg=ImVec2(0, 0), ImGuiButtonFlags flags=0)
Definition imgui_widgets.cpp:722
ImGuiTable * GetCurrentTable()
Definition imgui_internal.h:3745
IMGUI_API void TeleportMousePos(const ImVec2 &pos)
Definition imgui.cpp:9733
IMGUI_API bool IsMouseReleased(ImGuiMouseButton button)
Definition imgui.cpp:9650
IMGUI_API bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID owner_id)
Definition imgui.cpp:9439
IMGUI_API bool BeginTabBarEx(ImGuiTabBar *tab_bar, const ImRect &bb, ImGuiTabBarFlags flags)
Definition imgui_widgets.cpp:9041
void SetItemUsingMouseWheel()
Definition imgui_internal.h:3954
IMGUI_API bool TempInputText(const ImRect &bb, ImGuiID id, const char *label, char *buf, int buf_size, ImGuiInputTextFlags flags)
Definition imgui_widgets.cpp:3571
IMGUI_API void DebugLocateItemResolveWithLastItem()
Definition imgui.cpp:21856
IMGUI_API void DebugNodeTable(ImGuiTable *table)
Definition imgui_tables.cpp:3924
IMGUI_API void DockBuilderFinish(ImGuiID node_id)
Definition imgui.cpp:19357
IMGUI_API void TableUpdateColumnsWeightFromWidth(ImGuiTable *table)
Definition imgui_tables.cpp:2372
IMGUI_API void Shutdown()
Definition imgui.cpp:3884
void ScrollToBringRectIntoView(ImGuiWindow *window, const ImRect &rect)
Definition imgui_internal.h:3446
IMGUI_API ImGuiID GetWindowResizeBorderID(ImGuiWindow *window, ImGuiDir dir)
Definition imgui.cpp:6370
IMGUI_API bool IsMouseDown(ImGuiMouseButton button)
Definition imgui.cpp:9609
IMGUI_API void MarkIniSettingsDirty()
Definition imgui.cpp:14601
IMGUI_API bool BeginComboPreview()
Definition imgui_widgets.cpp:1982
IMGUI_API ImGuiOldColumns * FindOrCreateColumns(ImGuiWindow *window, ImGuiID id)
Definition imgui_tables.cpp:4213
IMGUI_API void RenderArrowPointingAt(ImDrawList *draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
Definition imgui_draw.cpp:4299
IMGUI_API void RenderRectFilledRangeH(ImDrawList *draw_list, const ImRect &rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding)
Definition imgui_draw.cpp:4328
IMGUI_API void DockBuilderRemoveNode(ImGuiID node_id)
Definition imgui.cpp:19037
IMGUI_API bool IsKeyReleased(ImGuiKey key)
Definition imgui.cpp:9594
IMGUI_API void TableGcCompactTransientBuffers(ImGuiTable *table)
Definition imgui_tables.cpp:3866
IMGUI_API void TableBeginApplyRequests(ImGuiTable *table)
Definition imgui_tables.cpp:673
IMGUI_API void DockContextQueueUndockNode(ImGuiContext *ctx, ImGuiDockNode *node)
Definition imgui.cpp:16544
IMGUI_API void DockContextProcessUndockNode(ImGuiContext *ctx, ImGuiDockNode *node)
Definition imgui.cpp:16737
IMGUI_API void DebugNodeDrawList(ImGuiWindow *window, ImGuiViewportP *viewport, const ImDrawList *draw_list, const char *label)
Definition imgui.cpp:21219
IMGUI_API void DebugRenderViewportThumbnail(ImDrawList *draw_list, ImGuiViewportP *viewport, const ImRect &bb)
Definition imgui.cpp:20151
IMGUI_API void DebugAllocHook(ImGuiDebugAllocInfo *info, int frame_count, void *ptr, size_t size)
Definition imgui.cpp:4496
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)
Definition imgui_widgets.cpp:4276
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)
Definition imgui_widgets.cpp:3147
IMGUI_API void EndColumns()
Definition imgui_tables.cpp:4374
IMGUI_API void TableOpenContextMenu(int column_n=-1)
Definition imgui_tables.cpp:3391
IMGUI_API void ColorTooltip(const char *text, const float *col, ImGuiColorEditFlags flags)
Definition imgui_widgets.cpp:6079
IMGUI_API bool DockContextCalcDropPosForDocking(ImGuiWindow *target, ImGuiDockNode *target_node, ImGuiWindow *payload_window, ImGuiDockNode *payload_node, ImGuiDir split_dir, bool split_outer, ImVec2 *out_pos)
Definition imgui.cpp:16779
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, const ImVec2 &size_arg)
Definition imgui_widgets.cpp:8181
IMGUI_API void DebugNodeWindow(ImGuiWindow *window, const char *label)
Definition imgui.cpp:21534
IMGUI_API void StartMouseMovingWindow(ImGuiWindow *window)
Definition imgui.cpp:4612
IMGUI_API void TabBarQueueReorder(ImGuiTabBar *tab_bar, ImGuiTabItem *tab, int offset)
Definition imgui_widgets.cpp:9569
IMGUI_API void EndComboPreview()
Definition imgui_widgets.cpp:2009
IMGUI_API void TableDrawDefaultContextMenu(ImGuiTable *table, ImGuiTableFlags flags_for_section_to_display)
Definition imgui_tables.cpp:3429
IMGUI_API void BringWindowToFocusFront(ImGuiWindow *window)
Definition imgui.cpp:7960
Definition imgui_internal.h:212
Definition imgui_internal.h:610
ImU32 Storage[(BITCOUNT+31) > > 5]
Definition imgui_internal.h:611
ImBitArray()
Definition imgui_internal.h:612
void ClearBit(int n)
Definition imgui_internal.h:617
void SetAllBits()
Definition imgui_internal.h:614
void SetBitRange(int n, int n2)
Definition imgui_internal.h:618
bool TestBit(int n) const
Definition imgui_internal.h:615
void SetBit(int n)
Definition imgui_internal.h:616
void ClearAllBits()
Definition imgui_internal.h:613
bool operator[](int n) const
Definition imgui_internal.h:619
Definition imgui_internal.h:625
void Create(int sz)
Definition imgui_internal.h:627
ImVector< ImU32 > Storage
Definition imgui_internal.h:626
void Clear()
Definition imgui_internal.h:628
bool TestBit(int n) const
Definition imgui_internal.h:629
void ClearBit(int n)
Definition imgui_internal.h:631
void SetBit(int n)
Definition imgui_internal.h:630
Definition imgui_internal.h:726
int size() const
Definition imgui_internal.h:731
T * begin()
Definition imgui_internal.h:733
int chunk_size(const T *p)
Definition imgui_internal.h:735
T * alloc_chunk(size_t sz)
Definition imgui_internal.h:732
T * ptr_from_offset(int off)
Definition imgui_internal.h:738
T * next_chunk(T *p)
Definition imgui_internal.h:734
void clear()
Definition imgui_internal.h:729
T * end()
Definition imgui_internal.h:736
int offset_from_ptr(const T *p)
Definition imgui_internal.h:737
ImVector< char > Buf
Definition imgui_internal.h:727
void swap(ImChunkStream< T > &rhs)
Definition imgui_internal.h:739
bool empty() const
Definition imgui_internal.h:730
Definition imgui.h:3024
Definition imgui_internal.h:814
ImVector< ImDrawList * > * Layers[2]
Definition imgui_internal.h:815
ImVector< ImDrawList * > LayerData1
Definition imgui_internal.h:816
ImDrawDataBuilder()
Definition imgui_internal.h:818
Definition imgui.h:3269
Definition imgui_internal.h:790
const ImVec4 * TexUvLines
Definition imgui_internal.h:807
float FontSize
Definition imgui_internal.h:793
float FontScale
Definition imgui_internal.h:794
ImVector< ImVec2 > TempBuffer
Definition imgui_internal.h:801
float CircleSegmentMaxError
Definition imgui_internal.h:796
ImDrawListSharedData()
Definition imgui_draw.cpp:398
ImFont * Font
Definition imgui_internal.h:792
float CurveTessellationTol
Definition imgui_internal.h:795
ImDrawListFlags InitialFlags
Definition imgui_internal.h:798
ImVec2 TexUvWhitePixel
Definition imgui_internal.h:791
ImVec2 ArcFastVtx[IM_DRAWLIST_ARCFAST_TABLE_SIZE]
Definition imgui_internal.h:804
ImVec4 ClipRectFullscreen
Definition imgui_internal.h:797
void SetCircleTessellationMaxError(float max_error)
Definition imgui_draw.cpp:409
ImU8 CircleSegmentCounts[64]
Definition imgui_internal.h:806
float ArcFastRadiusCutoff
Definition imgui_internal.h:805
Definition imgui.h:3074
Definition imgui.h:3129
Definition imgui.h:3388
ImVector< ImFont * > Fonts
Definition imgui.h:3471
Definition imgui_internal.h:3976
bool(* FontBuilder_Build)(ImFontAtlas *atlas)
Definition imgui_internal.h:3977
Definition imgui.h:3293
Definition imgui.h:3323
Definition imgui.h:3492
Definition imgui_internal.h:1738
ImGuiID ID
Definition imgui_internal.h:1740
ImGuiWindow * Window
Definition imgui_internal.h:1749
ImRect BoxSelectRectPrev
Definition imgui_internal.h:1754
ImGuiKeyChord KeyMods
Definition imgui_internal.h:1745
bool IsStartedFromVoid
Definition imgui_internal.h:1743
ImRect UnclipRect
Definition imgui_internal.h:1753
ImRect BoxSelectRectCurr
Definition imgui_internal.h:1755
ImVec2 ScrollAccum
Definition imgui_internal.h:1748
bool UnclipMode
Definition imgui_internal.h:1752
ImVec2 EndPosRel
Definition imgui_internal.h:1747
bool IsStarting
Definition imgui_internal.h:1742
ImGuiBoxSelectState()
Definition imgui_internal.h:1757
bool IsActive
Definition imgui_internal.h:1741
bool RequestClear
Definition imgui_internal.h:1744
ImVec2 StartPosRel
Definition imgui_internal.h:1746
Definition imgui_internal.h:1049
ImGuiCol Col
Definition imgui_internal.h:1050
ImVec4 BackupValue
Definition imgui_internal.h:1051
Definition imgui_internal.h:1066
ImGuiLayoutType BackupLayout
Definition imgui_internal.h:1072
ImRect PreviewRect
Definition imgui_internal.h:1067
ImVec2 BackupCursorPosPrevLine
Definition imgui_internal.h:1070
ImGuiComboPreviewData()
Definition imgui_internal.h:1074
float BackupPrevLineTextBaseOffset
Definition imgui_internal.h:1071
ImVec2 BackupCursorPos
Definition imgui_internal.h:1068
ImVec2 BackupCursorMaxPos
Definition imgui_internal.h:1069
Definition imgui_internal.h:2165
void * UserData
Definition imgui_internal.h:2170
ImGuiID Owner
Definition imgui_internal.h:2168
ImGuiContextHookType Type
Definition imgui_internal.h:2167
ImGuiContextHook()
Definition imgui_internal.h:2172
ImGuiContextHookCallback Callback
Definition imgui_internal.h:2169
ImGuiID HookId
Definition imgui_internal.h:2166
Definition imgui_internal.h:2180
ImGuiConfigFlags ConfigFlagsLastFrame
Definition imgui_internal.h:2187
ImVec4 DebugFlashStyleColorBackup
Definition imgui_internal.h:2528
ImGuiNavItemData NavInitResult
Definition imgui_internal.h:2340
bool DebugShowGroupRects
Definition imgui_internal.h:2289
ImGuiID DebugLocateId
Definition imgui_internal.h:2285
int WantCaptureKeyboardNextFrame
Definition imgui_internal.h:2540
int LogDepthToExpand
Definition imgui_internal.h:2510
int DragDropSourceFrameCount
Definition imgui_internal.h:2389
ImGuiID NavId
Definition imgui_internal.h:2317
bool FontAtlasOwnedByContext
Definition imgui_internal.h:2182
ImGuiDataTypeStorage DataTypeZeroValue
Definition imgui_internal.h:2448
float HoveredIdTimer
Definition imgui_internal.h:2239
ImGuiID DebugHookIdInfo
Definition imgui_internal.h:2236
ImGuiID NavActivateDownId
Definition imgui_internal.h:2321
ImGuiPlatformImeData PlatformImeData
Definition imgui_internal.h:2478
ImGuiID HoveredIdPreviousFrame
Definition imgui_internal.h:2238
ImGuiID HoverItemDelayId
Definition imgui_internal.h:2431
ImGuiID DebugBreakInWindow
Definition imgui_internal.h:2221
float FramerateSecPerFrame[60]
Definition imgui_internal.h:2535
ImGuiKeyChord ConfigNavWindowingKeyPrev
Definition imgui_internal.h:2370
int DragDropMouseButton
Definition imgui_internal.h:2390
ImVector< ImGuiPopupData > OpenPopupStack
Definition imgui_internal.h:2299
ImVector< ImGuiWindow * > Windows
Definition imgui_internal.h:2214
ImGuiID ColorEditCurrentID
Definition imgui_internal.h:2452
float FontBaseSize
Definition imgui_internal.h:2190
bool SettingsLoaded
Definition imgui_internal.h:2488
int ActiveIdMouseButton
Definition imgui_internal.h:2254
ImGuiViewportP * CurrentViewport
Definition imgui_internal.h:2305
ImGuiID ActiveId
Definition imgui_internal.h:2244
ImGuiNextWindowData NextWindowData
Definition imgui_internal.h:2288
ImGuiColorEditFlags ColorEditOptions
Definition imgui_internal.h:2451
int ViewportCreatedCount
Definition imgui_internal.h:2311
bool NavDisableHighlight
Definition imgui_internal.h:2333
bool DebugItemPickerActive
Definition imgui_internal.h:2524
bool HoveredIdAllowOverlap
Definition imgui_internal.h:2241
ImPool< ImGuiMultiSelectState > MultiSelectStorage
Definition imgui_internal.h:2428
ImChunkStream< ImGuiWindowSettings > SettingsWindows
Definition imgui_internal.h:2492
ImGuiNavLayer NavLayer
Definition imgui_internal.h:2319
ImGuiID NavJustMovedToId
Definition imgui_internal.h:2362
ImGuiTypingSelectState TypingSelectState
Definition imgui_internal.h:2475
ImVector< ImGuiWindow * > WindowsFocusOrder
Definition imgui_internal.h:2215
ImGuiDir NavMoveDir
Definition imgui_internal.h:2347
ImGuiSelectionUserData NavLastValidSelectionUserData
Definition imgui_internal.h:2330
char ContextName[16]
Definition imgui_internal.h:2205
ImVector< ImGuiWindow * > WindowsTempSortBuffer
Definition imgui_internal.h:2216
ImVec2 WindowsHoverPadding
Definition imgui_internal.h:2220
ImGuiDebugAllocInfo DebugAllocInfo
Definition imgui_internal.h:2531
float MouseStationaryTimer
Definition imgui_internal.h:2440
ImGuiID NavActivatePressedId
Definition imgui_internal.h:2322
bool LogEnabled
Definition imgui_internal.h:2501
ImGuiWindow * MovingWindow
Definition imgui_internal.h:2226
ImGuiKeyChord ConfigNavWindowingKeyNext
Definition imgui_internal.h:2369
ImVec2 ActiveIdClickOffset
Definition imgui_internal.h:2255
float ScrollbarClickDeltaToGrabCenter
Definition imgui_internal.h:2462
bool DragCurrentAccumDirty
Definition imgui_internal.h:2466
bool WindowResizeRelativeMode
Definition imgui_internal.h:2460
ImU8 DebugItemPickerMouseButton
Definition imgui_internal.h:2525
double Time
Definition imgui_internal.h:2194
ImGuiItemFlags CurrentItemFlags
Definition imgui_internal.h:2284
bool NavAnyRequest
Definition imgui_internal.h:2337
ImGuiDockNode * DebugHoveredDockNode
Definition imgui_internal.h:2532
bool ActiveIdUsingAllKeyboardKeys
Definition imgui_internal.h:2276
float CurrentDpiScale
Definition imgui_internal.h:2192
int FrameCountPlatformEnded
Definition imgui_internal.h:2197
ImGuiTextBuffer DebugLogBuf
Definition imgui_internal.h:2516
const char * LocalizationTable[ImGuiLocKey_COUNT]
Definition imgui_internal.h:2498
bool DragDropActive
Definition imgui_internal.h:2385
ImVector< ImGuiID > MenusIdSubmittedThisFrame
Definition imgui_internal.h:2474
ImGuiStyle Style
Definition imgui_internal.h:2185
ImGuiInputSource NavInputSource
Definition imgui_internal.h:2329
ImGuiWindow * WheelingWindow
Definition imgui_internal.h:2227
ImGuiInputSource ActiveIdSource
Definition imgui_internal.h:2257
ImGuiMetricsConfig DebugMetricsConfig
Definition imgui_internal.h:2529
bool NavWindowingToggleLayer
Definition imgui_internal.h:2376
ImGuiID HoveredId
Definition imgui_internal.h:2237
ImGuiPayload DragDropPayload
Definition imgui_internal.h:2391
float WheelingWindowReleaseTimer
Definition imgui_internal.h:2231
ImRect NavScoringRect
Definition imgui_internal.h:2350
ImVec2 WheelingAxisAvg
Definition imgui_internal.h:2233
ImGuiNextItemData NextItemData
Definition imgui_internal.h:2286
float DisabledAlphaBackup
Definition imgui_internal.h:2469
void * TestEngine
Definition imgui_internal.h:2204
float NavWindowingTimer
Definition imgui_internal.h:2374
ImGuiDebugLogFlags DebugLogFlags
Definition imgui_internal.h:2515
ImGuiDir NavMoveClipDir
Definition imgui_internal.h:2349
float SliderCurrentAccum
Definition imgui_internal.h:2464
bool NavMousePosDirty
Definition imgui_internal.h:2332
ImGuiLastItemData LastItemData
Definition imgui_internal.h:2287
ImS8 DebugBeginReturnValueCullDepth
Definition imgui_internal.h:2523
ImGuiID HoverItemUnlockedStationaryId
Definition imgui_internal.h:2435
bool ActiveIdPreviousFrameHasBeenEditedBefore
Definition imgui_internal.h:2260
int LogDepthToExpandDefault
Definition imgui_internal.h:2511
const char * LogNextPrefix
Definition imgui_internal.h:2505
ImGuiActivateFlags NavNextActivateFlags
Definition imgui_internal.h:2328
float DragDropAcceptIdCurrRectSurface
Definition imgui_internal.h:2396
ImGuiID HookIdNext
Definition imgui_internal.h:2495
short DisabledStackSize
Definition imgui_internal.h:2470
ImVector< ImGuiPopupData > BeginPopupStack
Definition imgui_internal.h:2300
ImVector< ImGuiPtrOrIndex > CurrentTabBarStack
Definition imgui_internal.h:2420
ImGuiScrollFlags NavMoveScrollFlags
Definition imgui_internal.h:2345
short LockMarkEdited
Definition imgui_internal.h:2471
float DragCurrentAccum
Definition imgui_internal.h:2467
ImGuiID HoverItemDelayIdPreviousFrame
Definition imgui_internal.h:2432
ImRect WindowResizeBorderExpectedRect
Definition imgui_internal.h:2459
int LogDepthRef
Definition imgui_internal.h:2509
int WheelingWindowScrolledFrame
Definition imgui_internal.h:2230
ImGuiContext(ImFontAtlas *shared_font_atlas)
Definition imgui_internal.h:2545
ImGuiTextIndex DebugLogIndex
Definition imgui_internal.h:2517
float NavWindowingHighlightAlpha
Definition imgui_internal.h:2375
bool ItemUnclipByLog
Definition imgui_internal.h:2243
ImGuiNavItemData NavMoveResultLocal
Definition imgui_internal.h:2355
ImGuiTextBuffer SettingsIniData
Definition imgui_internal.h:2490
double LastKeyModsChangeTime
Definition imgui_internal.h:2269
bool SliderCurrentAccumDirty
Definition imgui_internal.h:2465
bool DragDropWithinSource
Definition imgui_internal.h:2386
ImVector< ImGuiFocusScopeData > NavFocusRoute
Definition imgui_internal.h:2324
bool HoveredIdIsDisabled
Definition imgui_internal.h:2242
ImGuiInputTextDeactivatedState InputTextDeactivatedState
Definition imgui_internal.h:2445
ImGuiDragDropFlags DragDropSourceFlags
Definition imgui_internal.h:2388
ImVector< ImGuiTableTempData > TablesTempData
Definition imgui_internal.h:2412
bool NavJustMovedToHasSelectionData
Definition imgui_internal.h:2366
int FramerateSecPerFrameIdx
Definition imgui_internal.h:2536
int FrameCountRendered
Definition imgui_internal.h:2198
bool NavMoveSubmitted
Definition imgui_internal.h:2341
int FramerateSecPerFrameCount
Definition imgui_internal.h:2537
ImVector< ImGuiContextHook > Hooks
Definition imgui_internal.h:2494
ImGuiNavItemData NavMoveResultOther
Definition imgui_internal.h:2357
ImRect PlatformMonitorsFullWorkRect
Definition imgui_internal.h:2310
bool NavJustMovedToIsTabbing
Definition imgui_internal.h:2365
ImGuiID CurrentFocusScopeId
Definition imgui_internal.h:2283
ImFont InputTextPasswordFont
Definition imgui_internal.h:2446
ImGuiKeyChord DebugBreakKeyChord
Definition imgui_internal.h:2522
ImU32 ActiveIdUsingNavDirMask
Definition imgui_internal.h:2275
ImRect DragDropTargetClipRect
Definition imgui_internal.h:2393
ImGuiPlatformMonitor FallbackMonitor
Definition imgui_internal.h:2309
ImGuiWindow * HoveredWindow
Definition imgui_internal.h:2223
int MultiSelectTempDataStacked
Definition imgui_internal.h:2426
ImVec2 NavWindowingAccumDeltaPos
Definition imgui_internal.h:2378
ImDrawListSharedData DrawListSharedData
Definition imgui_internal.h:2193
bool Initialized
Definition imgui_internal.h:2181
float LastActiveIdTimer
Definition imgui_internal.h:2263
ImVec2 WheelingWindowWheelRemainder
Definition imgui_internal.h:2232
ImGuiDragDropFlags DragDropAcceptFlags
Definition imgui_internal.h:2395
bool GcCompactAll
Definition imgui_internal.h:2202
bool WithinFrameScope
Definition imgui_internal.h:2199
float DebugFlashStyleColorTime
Definition imgui_internal.h:2527
ImVector< ImGuiGroupData > GroupStack
Definition imgui_internal.h:2298
float NavHighlightActivatedTimer
Definition imgui_internal.h:2326
float SettingsDirtyTimer
Definition imgui_internal.h:2489
int WantCaptureMouseNextFrame
Definition imgui_internal.h:2539
ImGuiNavItemData NavTabbingResultFirst
Definition imgui_internal.h:2358
ImGuiTextBuffer LogBuffer
Definition imgui_internal.h:2504
ImGuiPlatformIO PlatformIO
Definition imgui_internal.h:2184
ImGuiViewportP * MouseViewport
Definition imgui_internal.h:2306
ImGuiID NavActivateId
Definition imgui_internal.h:2320
int DragDropAcceptFrameCount
Definition imgui_internal.h:2399
ImGuiLogType LogType
Definition imgui_internal.h:2502
ImVector< ImGuiShrinkWidthItem > ShrinkWidthBuffer
Definition imgui_internal.h:2421
ImGuiID DragDropHoldJustPressedId
Definition imgui_internal.h:2400
short ScrollbarSeekMode
Definition imgui_internal.h:2461
ImVector< ImGuiItemFlags > ItemFlagsStack
Definition imgui_internal.h:2297
ImGuiID LastActiveId
Definition imgui_internal.h:2262
ImU8 DebugLocateFrames
Definition imgui_internal.h:2520
const char * LogNextSuffix
Definition imgui_internal.h:2506
int ClipperTempDataStacked
Definition imgui_internal.h:2405
ImGuiID DebugItemPickerBreakId
Definition imgui_internal.h:2526
bool WithinEndChild
Definition imgui_internal.h:2201
ImGuiKeyOwnerData KeysOwnerData[ImGuiKey_NamedKey_COUNT]
Definition imgui_internal.h:2273
ImGuiMouseSource InputEventsNextMouseSource
Definition imgui_internal.h:2210
ImVector< ImFont * > FontStack
Definition imgui_internal.h:2295
int ViewportFocusedStampCount
Definition imgui_internal.h:2313
char TempKeychordName[64]
Definition imgui_internal.h:2543
void(* DockNodeWindowMenuHandler)(ImGuiContext *ctx, ImGuiDockNode *node, ImGuiTabBar *tab_bar)
Definition imgui_internal.h:2485
ImGuiID NavJustMovedFromFocusScopeId
Definition imgui_internal.h:2361
float LogLinePosY
Definition imgui_internal.h:2507
ImPool< ImGuiTabBar > TabBars
Definition imgui_internal.h:2419
float SliderGrabClickOffset
Definition imgui_internal.h:2463
ImGuiWindow * NavWindowingTarget
Definition imgui_internal.h:2371
ImGuiID ActiveIdIsAlive
Definition imgui_internal.h:2245
bool NavInitRequestFromMove
Definition imgui_internal.h:2339
float ColorEditSavedHue
Definition imgui_internal.h:2454
ImGuiIDStackTool DebugIDStackTool
Definition imgui_internal.h:2530
int WindowsActiveCount
Definition imgui_internal.h:2219
ImGuiDir NavMoveDirForDebug
Definition imgui_internal.h:2348
ImGuiID HoverWindowUnlockedStationaryId
Definition imgui_internal.h:2436
ImGuiWindow * ActiveIdWindow
Definition imgui_internal.h:2256
double LastKeyboardKeyPressTime
Definition imgui_internal.h:2271
ImVector< ImGuiWindowStackData > CurrentWindowStack
Definition imgui_internal.h:2217
ImRect DragDropTargetRect
Definition imgui_internal.h:2392
ImGuiID DebugBreakInTable
Definition imgui_internal.h:2410
ImGuiKeyRoutingTable KeysRoutingTable
Definition imgui_internal.h:2274
float ActiveIdTimer
Definition imgui_internal.h:2246
ImGuiComboPreviewData ComboPreviewData
Definition imgui_internal.h:2458
ImGuiWindow * HoveredWindowBeforeClear
Definition imgui_internal.h:2225
bool ActiveIdHasBeenPressedBefore
Definition imgui_internal.h:2250
int FrameCountEnded
Definition imgui_internal.h:2196
bool ActiveIdIsJustActivated
Definition imgui_internal.h:2247
ImVector< ImGuiViewportP * > Viewports
Definition imgui_internal.h:2304
ImGuiWindow * CurrentWindow
Definition imgui_internal.h:2222
ImVector< ImGuiListClipperData > ClipperTempData
Definition imgui_internal.h:2406
ImVector< float > TablesLastTimeActive
Definition imgui_internal.h:2414
ImGuiWindow * NavWindowingListWindow
Definition imgui_internal.h:2373
float HoverItemDelayClearTimer
Definition imgui_internal.h:2434
bool ActiveIdPreviousFrameIsAlive
Definition imgui_internal.h:2259
ImGuiWindow * NavWindowingTargetAnim
Definition imgui_internal.h:2372
ImU8 DebugLogAutoDisableFrames
Definition imgui_internal.h:2519
bool NavIdIsAlive
Definition imgui_internal.h:2331
int NavScoringDebugCount
Definition imgui_internal.h:2352
bool WithinFrameScopeWithImplicitWindow
Definition imgui_internal.h:2200
ImVector< char > ClipboardHandlerData
Definition imgui_internal.h:2473
ImBitArrayForNamedKeys KeysMayBeCharInput
Definition imgui_internal.h:2272
ImVector< char > TempBuffer
Definition imgui_internal.h:2542
bool LogLineFirstItem
Definition imgui_internal.h:2508
bool ActiveIdAllowOverlap
Definition imgui_internal.h:2248
ImGuiCol DebugFlashStyleColorIdx
Definition imgui_internal.h:2292
ImGuiMouseCursor MouseCursor
Definition imgui_internal.h:2439
bool ActiveIdFromShortcut
Definition imgui_internal.h:2253
ImGuiInputTextState InputTextState
Definition imgui_internal.h:2444
ImGuiID PlatformLastFocusedViewportId
Definition imgui_internal.h:2308
ImGuiID DragDropAcceptIdPrev
Definition imgui_internal.h:2398
int PlatformWindowsCreatedCount
Definition imgui_internal.h:2312
int FrameCount
Definition imgui_internal.h:2195
ImVec2 NavWindowingAccumDeltaSize
Definition imgui_internal.h:2379
ImGuiID PlatformImeViewport
Definition imgui_internal.h:2480
float FontScale
Definition imgui_internal.h:2191
ImVec2 MouseLastValidPos
Definition imgui_internal.h:2441
bool DragDropWithinTarget
Definition imgui_internal.h:2387
ImGuiID ColorEditSavedID
Definition imgui_internal.h:2453
ImVector< ImGuiStyleMod > StyleVarStack
Definition imgui_internal.h:2294
ImGuiID NavNextActivateId
Definition imgui_internal.h:2327
int TablesTempDataStacked
Definition imgui_internal.h:2411
float FramerateSecPerFrameAccum
Definition imgui_internal.h:2538
ImVector< ImDrawChannel > DrawChannelsTempMergeBuffer
Definition imgui_internal.h:2415
int WantTextInputNextFrame
Definition imgui_internal.h:2541
bool DebugBreakInLocateId
Definition imgui_internal.h:2521
ImGuiKey NavWindowingToggleKey
Definition imgui_internal.h:2377
ImGuiWindow * ActiveIdPreviousFrameWindow
Definition imgui_internal.h:2261
bool NavInitRequest
Definition imgui_internal.h:2338
unsigned char DragDropPayloadBufLocal[16]
Definition imgui_internal.h:2402
ImGuiID NavFocusScopeId
Definition imgui_internal.h:2318
float HoveredIdNotActiveTimer
Definition imgui_internal.h:2240
int BeginComboDepth
Definition imgui_internal.h:2450
float ColorEditSavedSat
Definition imgui_internal.h:2455
ImU32 ActiveIdUsingNavInputMask
Definition imgui_internal.h:2279
int BeginMenuDepth
Definition imgui_internal.h:2449
ImGuiDebugLogFlags DebugLogAutoDisableFlags
Definition imgui_internal.h:2518
int NavTabbingDir
Definition imgui_internal.h:2353
ImGuiWindow * HoveredWindowUnderMovingWindow
Definition imgui_internal.h:2224
bool ActiveIdHasBeenEditedBefore
Definition imgui_internal.h:2251
bool NavMoveForwardToNextFrame
Definition imgui_internal.h:2343
ImGuiViewportP * MouseLastHoveredViewport
Definition imgui_internal.h:2307
ImGuiPlatformImeData PlatformImeDataPrev
Definition imgui_internal.h:2479
ImGuiBoxSelectState BoxSelectState
Definition imgui_internal.h:2424
ImChunkStream< ImGuiTableSettings > SettingsTables
Definition imgui_internal.h:2493
int WheelingWindowStartFrame
Definition imgui_internal.h:2229
ImU32 InputEventsNextEventId
Definition imgui_internal.h:2211
ImGuiKeyChord NavMoveKeyMods
Definition imgui_internal.h:2346
ImGuiConfigFlags ConfigFlagsCurrFrame
Definition imgui_internal.h:2186
ImGuiTable * CurrentTable
Definition imgui_internal.h:2409
ImGuiStorage WindowsById
Definition imgui_internal.h:2218
ImGuiKeyChord NavJustMovedToKeyMods
Definition imgui_internal.h:2364
ImGuiMultiSelectTempData * CurrentMultiSelect
Definition imgui_internal.h:2425
ImGuiIO IO
Definition imgui_internal.h:2183
ImGuiDockContext DockContext
Definition imgui_internal.h:2484
ImVector< ImGuiSettingsHandler > SettingsHandlers
Definition imgui_internal.h:2491
ImRect NavScoringNoClipRect
Definition imgui_internal.h:2351
ImGuiTabBar * CurrentTabBar
Definition imgui_internal.h:2418
ImGuiWindow * NavWindow
Definition imgui_internal.h:2316
ImGuiActivateFlags NavActivateFlags
Definition imgui_internal.h:2323
bool TestEngineHookItems
Definition imgui_internal.h:2203
ImVec4 ColorPickerRef
Definition imgui_internal.h:2457
ImVector< ImGuiColorMod > ColorStack
Definition imgui_internal.h:2293
ImVector< ImGuiTreeNodeStackData > TreeNodeStack
Definition imgui_internal.h:2301
ImGuiNavItemData NavMoveResultLocalVisible
Definition imgui_internal.h:2356
ImGuiNavMoveFlags NavMoveFlags
Definition imgui_internal.h:2344
ImVector< ImGuiFocusScopeData > FocusScopeStack
Definition imgui_internal.h:2296
bool NavMoveScoringItems
Definition imgui_internal.h:2342
ImVector< ImGuiInputEvent > InputEventsQueue
Definition imgui_internal.h:2208
double LastKeyModsChangeFromNoneTime
Definition imgui_internal.h:2270
short TooltipOverrideCount
Definition imgui_internal.h:2472
bool ActiveIdHasBeenEditedThisFrame
Definition imgui_internal.h:2252
float HoverItemDelayTimer
Definition imgui_internal.h:2433
ImVec2 WheelingWindowRefMousePos
Definition imgui_internal.h:2228
ImVector< ImGuiInputEvent > InputEventsTrail
Definition imgui_internal.h:2209
float DragSpeedDefaultRatio
Definition imgui_internal.h:2468
bool ActiveIdNoClearOnFocusLoss
Definition imgui_internal.h:2249
ImFont * Font
Definition imgui_internal.h:2188
ImGuiID NavJustMovedToFocusScopeId
Definition imgui_internal.h:2363
ImGuiID TempInputId
Definition imgui_internal.h:2447
bool NavDisableMouseHover
Definition imgui_internal.h:2334
ImU32 ColorEditSavedColor
Definition imgui_internal.h:2456
ImGuiID DragDropAcceptIdCurr
Definition imgui_internal.h:2397
ImGuiKeyChord DebugBreakInShortcutRouting
Definition imgui_internal.h:2277
ImGuiID NavHighlightActivatedId
Definition imgui_internal.h:2325
int NavTabbingCounter
Definition imgui_internal.h:2354
float FontSize
Definition imgui_internal.h:2189
ImVector< unsigned char > DragDropPayloadBufHeap
Definition imgui_internal.h:2401
ImFileHandle LogFile
Definition imgui_internal.h:2503
float DimBgRatio
Definition imgui_internal.h:2382
ImGuiID ActiveIdPreviousFrame
Definition imgui_internal.h:2258
ImGuiID DragDropTargetId
Definition imgui_internal.h:2394
ImPool< ImGuiTable > Tables
Definition imgui_internal.h:2413
ImVector< ImGuiMultiSelectTempData > MultiSelectTempData
Definition imgui_internal.h:2427
Definition imgui_internal.h:840
size_t Size
Definition imgui_internal.h:841
const char * Name
Definition imgui_internal.h:842
const char * PrintFmt
Definition imgui_internal.h:843
const char * ScanFmt
Definition imgui_internal.h:844
Definition imgui_internal.h:834
ImU8 Data[8]
Definition imgui_internal.h:835
Definition imgui_internal.h:826
ImU32 Offset
Definition imgui_internal.h:829
void * GetVarPtr(void *parent) const
Definition imgui_internal.h:830
ImU32 Count
Definition imgui_internal.h:828
ImGuiDataType Type
Definition imgui_internal.h:827
Definition imgui_internal.h:2099
ImS16 FreeCount
Definition imgui_internal.h:2102
ImS16 AllocCount
Definition imgui_internal.h:2101
int FrameCount
Definition imgui_internal.h:2100
Definition imgui_internal.h:2106
ImGuiDebugAllocEntry LastEntriesBuf[6]
Definition imgui_internal.h:2110
int TotalAllocCount
Definition imgui_internal.h:2107
ImS16 LastEntriesIdx
Definition imgui_internal.h:2109
ImGuiDebugAllocInfo()
Definition imgui_internal.h:2112
int TotalFreeCount
Definition imgui_internal.h:2108
Definition imgui_internal.h:1949
ImVector< ImGuiDockRequest > Requests
Definition imgui_internal.h:1951
ImGuiDockContext()
Definition imgui_internal.h:1954
bool WantFullRebuild
Definition imgui_internal.h:1953
ImVector< ImGuiDockNodeSettings > NodesSettings
Definition imgui_internal.h:1952
ImGuiStorage Nodes
Definition imgui_internal.h:1950
Definition imgui.cpp:16072
Definition imgui_internal.h:1863
ImGuiID SelectedTabId
Definition imgui_internal.h:1890
bool IsBgDrawnThisFrame
Definition imgui_internal.h:1898
bool IsFocused
Definition imgui_internal.h:1897
ImVec2 SizeRef
Definition imgui_internal.h:1876
ImRect Rect() const
Definition imgui_internal.h:1919
ImGuiDataAuthority AuthorityForViewport
Definition imgui_internal.h:1895
bool IsDockSpace() const
Definition imgui_internal.h:1911
ImGuiDockNode * CentralNode
Definition imgui_internal.h:1883
bool HasCloseButton
Definition imgui_internal.h:1899
ImVec2 Pos
Definition imgui_internal.h:1874
ImGuiID LastFocusedNodeId
Definition imgui_internal.h:1889
ImGuiID WantCloseTabId
Definition imgui_internal.h:1891
ImGuiWindow * HostWindow
Definition imgui_internal.h:1881
bool WantHiddenTabBarToggle
Definition imgui_internal.h:1906
ImGuiDockNode * ParentNode
Definition imgui_internal.h:1870
ImGuiDockNode * ChildNodes[2]
Definition imgui_internal.h:1871
bool IsFloatingNode() const
Definition imgui_internal.h:1912
bool IsCentralNode() const
Definition imgui_internal.h:1913
ImVector< ImGuiWindow * > Windows
Definition imgui_internal.h:1872
ImGuiWindowClass WindowClass
Definition imgui_internal.h:1878
bool WantLockSizeOnce
Definition imgui_internal.h:1903
bool HasWindowMenuButton
Definition imgui_internal.h:1900
ImGuiID RefViewportId
Definition imgui_internal.h:1892
ImGuiDockNodeFlags MergedFlags
Definition imgui_internal.h:1868
bool IsNoTabBar() const
Definition imgui_internal.h:1915
void UpdateMergedFlags()
Definition imgui_internal.h:1922
ImGuiDockNodeFlags LocalFlagsInWindows
Definition imgui_internal.h:1867
int LastFrameAlive
Definition imgui_internal.h:1886
bool HasCentralNodeChild
Definition imgui_internal.h:1901
int LastFrameFocused
Definition imgui_internal.h:1888
ImVec2 Size
Definition imgui_internal.h:1875
bool IsHiddenTabBar() const
Definition imgui_internal.h:1914
bool IsEmpty() const
Definition imgui_internal.h:1918
ImGuiWindow * VisibleWindow
Definition imgui_internal.h:1882
bool IsVisible
Definition imgui_internal.h:1896
ImGuiTabBar * TabBar
Definition imgui_internal.h:1873
ImGuiDataAuthority AuthorityForSize
Definition imgui_internal.h:1894
ImU32 LastBgColor
Definition imgui_internal.h:1879
bool IsLeafNode() const
Definition imgui_internal.h:1917
ImGuiDockNodeFlags SharedFlags
Definition imgui_internal.h:1865
ImGuiDockNodeFlags LocalFlags
Definition imgui_internal.h:1866
bool WantCloseAll
Definition imgui_internal.h:1902
bool IsRootNode() const
Definition imgui_internal.h:1910
ImGuiID ID
Definition imgui_internal.h:1864
bool WantHiddenTabBarUpdate
Definition imgui_internal.h:1905
ImGuiDataAuthority AuthorityForPos
Definition imgui_internal.h:1893
int LastFrameActive
Definition imgui_internal.h:1887
int CountNodeWithWindows
Definition imgui_internal.h:1885
ImGuiDockNode(ImGuiID id)
Definition imgui.cpp:16829
ImGuiDockNode * OnlyNodeWithWindows
Definition imgui_internal.h:1884
bool WantMouseMove
Definition imgui_internal.h:1904
bool IsSplitNode() const
Definition imgui_internal.h:1916
ImGuiAxis SplitAxis
Definition imgui_internal.h:1877
ImGuiDockNodeState State
Definition imgui_internal.h:1869
void SetLocalFlags(ImGuiDockNodeFlags flags)
Definition imgui_internal.h:1921
Definition imgui.cpp:16033
Definition imgui_internal.h:1635
ImGuiID WindowID
Definition imgui_internal.h:1637
ImGuiID ID
Definition imgui_internal.h:1636
Definition imgui_internal.h:1079
ImVec1 BackupIndent
Definition imgui_internal.h:1084
float BackupCurrLineTextBaseOffset
Definition imgui_internal.h:1087
bool BackupIsSameLine
Definition imgui_internal.h:1091
bool BackupHoveredIdIsAlive
Definition imgui_internal.h:1090
ImVec2 BackupCursorPosPrevLine
Definition imgui_internal.h:1083
ImVec2 BackupCursorPos
Definition imgui_internal.h:1081
ImGuiID BackupActiveIdIsAlive
Definition imgui_internal.h:1088
ImVec2 BackupCursorMaxPos
Definition imgui_internal.h:1082
bool EmitItem
Definition imgui_internal.h:1092
ImGuiID WindowID
Definition imgui_internal.h:1080
ImVec2 BackupCurrLineSize
Definition imgui_internal.h:1086
ImVec1 BackupGroupOffset
Definition imgui_internal.h:1085
bool BackupActiveIdPreviousFrameIsAlive
Definition imgui_internal.h:1089
Definition imgui_internal.h:2146
ImVector< ImGuiStackLevelInfo > Results
Definition imgui_internal.h:2150
ImGuiIDStackTool()
Definition imgui_internal.h:2154
float CopyToClipboardLastTime
Definition imgui_internal.h:2152
int StackLevel
Definition imgui_internal.h:2148
bool CopyToClipboardOnCtrlC
Definition imgui_internal.h:2151
int LastActiveFrame
Definition imgui_internal.h:2147
ImGuiID QueryId
Definition imgui_internal.h:2149
Definition imgui.h:2280
ImFont * FontDefault
Definition imgui.h:2297
ImFontAtlas * Fonts
Definition imgui.h:2294
Definition imgui_internal.h:1412
bool Focused
Definition imgui_internal.h:1412
Definition imgui_internal.h:1410
bool Down
Definition imgui_internal.h:1410
float AnalogValue
Definition imgui_internal.h:1410
ImGuiKey Key
Definition imgui_internal.h:1410
Definition imgui_internal.h:1408
int Button
Definition imgui_internal.h:1408
bool Down
Definition imgui_internal.h:1408
ImGuiMouseSource MouseSource
Definition imgui_internal.h:1408
Definition imgui_internal.h:1406
float PosY
Definition imgui_internal.h:1406
float PosX
Definition imgui_internal.h:1406
ImGuiMouseSource MouseSource
Definition imgui_internal.h:1406
Definition imgui_internal.h:1409
ImGuiID HoveredViewportID
Definition imgui_internal.h:1409
Definition imgui_internal.h:1407
float WheelX
Definition imgui_internal.h:1407
float WheelY
Definition imgui_internal.h:1407
ImGuiMouseSource MouseSource
Definition imgui_internal.h:1407
Definition imgui_internal.h:1411
unsigned int Char
Definition imgui_internal.h:1411
ImGuiInputEvent()
Definition imgui_internal.h:1431
ImGuiInputEventType Type
Definition imgui_internal.h:1416
ImGuiInputEventAppFocused AppFocused
Definition imgui_internal.h:1427
ImGuiInputEventKey Key
Definition imgui_internal.h:1425
ImGuiInputEventMouseButton MouseButton
Definition imgui_internal.h:1423
ImGuiInputSource Source
Definition imgui_internal.h:1417
bool AddedByTestEngine
Definition imgui_internal.h:1429
ImGuiInputEventMouseWheel MouseWheel
Definition imgui_internal.h:1422
ImGuiInputEventMousePos MousePos
Definition imgui_internal.h:1421
ImGuiInputEventMouseViewport MouseViewport
Definition imgui_internal.h:1424
ImGuiInputEventText Text
Definition imgui_internal.h:1426
ImU32 EventId
Definition imgui_internal.h:1418
Definition imgui_internal.h:1115
ImVector< char > TextA
Definition imgui_internal.h:1117
ImGuiID ID
Definition imgui_internal.h:1116
void ClearFreeMemory()
Definition imgui_internal.h:1120
ImGuiInputTextDeactivatedState()
Definition imgui_internal.h:1119
Definition imgui_internal.h:1125
int GetCursorPos() const
Definition imgui_internal.h:1157
void CursorClamp()
Definition imgui_internal.h:1154
int BufCapacityA
Definition imgui_internal.h:1133
bool ReloadUserBuf
Definition imgui_internal.h:1141
ImGuiContext * Ctx
Definition imgui_internal.h:1126
ImGuiInputTextFlags Flags
Definition imgui_internal.h:1140
bool SelectedAllMouseLock
Definition imgui_internal.h:1138
int GetSelectionStart() const
Definition imgui_internal.h:1158
void ClearText()
Definition imgui_internal.h:1146
int GetUndoAvailCount() const
Definition imgui_internal.h:1148
int CurLenW
Definition imgui_internal.h:1128
ImStb::STB_TexteditState Stb
Definition imgui_internal.h:1135
void ReloadUserBufAndSelectAll()
Definition imgui_internal.h:1167
float ScrollX
Definition imgui_internal.h:1134
void CursorAnimReset()
Definition imgui_internal.h:1153
void ReloadUserBufAndMoveToEnd()
Definition imgui_internal.h:1169
void ReloadUserBufAndKeepSelection()
Definition imgui_internal.h:1168
int GetSelectionEnd() const
Definition imgui_internal.h:1159
void ClearFreeMemory()
Definition imgui_internal.h:1147
bool CursorFollow
Definition imgui_internal.h:1137
ImGuiID ID
Definition imgui_internal.h:1127
float CursorAnim
Definition imgui_internal.h:1136
int GetRedoAvailCount() const
Definition imgui_internal.h:1149
void ClearSelection()
Definition imgui_internal.h:1156
bool HasSelection() const
Definition imgui_internal.h:1155
int CurLenA
Definition imgui_internal.h:1128
ImVector< char > TextA
Definition imgui_internal.h:1130
void SelectAll()
Definition imgui_internal.h:1160
bool TextAIsValid
Definition imgui_internal.h:1132
ImVector< ImWchar > TextW
Definition imgui_internal.h:1129
ImGuiInputTextState()
Definition imgui_internal.h:1145
int ReloadSelectionStart
Definition imgui_internal.h:1142
ImVector< char > InitialTextA
Definition imgui_internal.h:1131
bool Edited
Definition imgui_internal.h:1139
int ReloadSelectionEnd
Definition imgui_internal.h:1143
Definition imgui.h:2272
Definition imgui_internal.h:1469
ImGuiKeyOwnerData()
Definition imgui_internal.h:1475
bool LockThisFrame
Definition imgui_internal.h:1472
bool LockUntilRelease
Definition imgui_internal.h:1473
ImGuiID OwnerCurr
Definition imgui_internal.h:1470
ImGuiID OwnerNext
Definition imgui_internal.h:1471
Definition imgui_internal.h:1443
ImGuiKeyRoutingData()
Definition imgui_internal.h:1451
ImU16 Mods
Definition imgui_internal.h:1445
ImU8 RoutingCurrScore
Definition imgui_internal.h:1446
ImGuiID RoutingNext
Definition imgui_internal.h:1449
ImU8 RoutingNextScore
Definition imgui_internal.h:1447
ImGuiKeyRoutingIndex NextEntryIndex
Definition imgui_internal.h:1444
ImGuiID RoutingCurr
Definition imgui_internal.h:1448
Definition imgui_internal.h:1457
ImGuiKeyRoutingTable()
Definition imgui_internal.h:1462
ImVector< ImGuiKeyRoutingData > Entries
Definition imgui_internal.h:1459
ImVector< ImGuiKeyRoutingData > EntriesNext
Definition imgui_internal.h:1460
ImGuiKeyRoutingIndex Index[ImGuiKey_NamedKey_COUNT]
Definition imgui_internal.h:1458
void Clear()
Definition imgui_internal.h:1463
Definition imgui_internal.h:1259
ImGuiID ID
Definition imgui_internal.h:1260
ImRect ClipRect
Definition imgui_internal.h:1267
ImGuiItemStatusFlags StatusFlags
Definition imgui_internal.h:1262
ImGuiItemFlags InFlags
Definition imgui_internal.h:1261
ImRect NavRect
Definition imgui_internal.h:1264
ImGuiKeyChord Shortcut
Definition imgui_internal.h:1268
ImGuiLastItemData()
Definition imgui_internal.h:1270
ImRect Rect
Definition imgui_internal.h:1263
ImRect DisplayRect
Definition imgui_internal.h:1266
ImGuiListClipperData()
Definition imgui_internal.h:1546
void Reset(ImGuiListClipper *clipper)
Definition imgui_internal.h:1547
float LossynessOffset
Definition imgui_internal.h:1541
int StepNo
Definition imgui_internal.h:1542
ImVector< ImGuiListClipperRange > Ranges
Definition imgui_internal.h:1544
int ItemsFrozen
Definition imgui_internal.h:1543
ImGuiListClipper * ListClipper
Definition imgui_internal.h:1540
Definition imgui_internal.h:1526
ImS8 PosToIndexOffsetMax
Definition imgui_internal.h:1531
static ImGuiListClipperRange FromPositions(float y1, float y2, int off_min, int off_max)
Definition imgui_internal.h:1534
int Max
Definition imgui_internal.h:1528
int Min
Definition imgui_internal.h:1527
ImS8 PosToIndexOffsetMin
Definition imgui_internal.h:1530
bool PosToIndexConvert
Definition imgui_internal.h:1529
static ImGuiListClipperRange FromIndices(int min, int max)
Definition imgui_internal.h:1533
Definition imgui.h:2737
Definition imgui_internal.h:2068
const char * Text
Definition imgui_internal.h:2070
ImGuiLocKey Key
Definition imgui_internal.h:2069
Definition imgui_internal.h:1097
ImU16 Widths[4]
Definition imgui_internal.h:1105
ImU32 TotalWidth
Definition imgui_internal.h:1098
ImU16 OffsetIcon
Definition imgui_internal.h:1101
ImU16 OffsetLabel
Definition imgui_internal.h:1102
ImU16 OffsetShortcut
Definition imgui_internal.h:1103
ImU32 NextTotalWidth
Definition imgui_internal.h:1099
ImGuiMenuColumns()
Definition imgui_internal.h:1107
ImU16 Spacing
Definition imgui_internal.h:1100
ImU16 OffsetMark
Definition imgui_internal.h:1104
Definition imgui_internal.h:2116
int ShowWindowsRectsType
Definition imgui_internal.h:2127
bool ShowDrawCmdBoundingBoxes
Definition imgui_internal.h:2123
bool ShowTextEncodingViewer
Definition imgui_internal.h:2124
bool ShowAtlasTintedWithTextColor
Definition imgui_internal.h:2125
bool ShowDebugLog
Definition imgui_internal.h:2117
bool ShowDrawCmdMesh
Definition imgui_internal.h:2122
int HighlightMonitorIdx
Definition imgui_internal.h:2129
int ShowTablesRectsType
Definition imgui_internal.h:2128
bool ShowIDStackTool
Definition imgui_internal.h:2118
bool ShowWindowsRects
Definition imgui_internal.h:2119
bool ShowTablesRects
Definition imgui_internal.h:2121
bool ShowWindowsBeginOrder
Definition imgui_internal.h:2120
bool ShowDockingNodes
Definition imgui_internal.h:2126
ImGuiID HighlightViewportID
Definition imgui_internal.h:2130
Definition imgui.h:2912
Definition imgui_internal.h:1794
ImGuiID ID
Definition imgui_internal.h:1796
ImGuiWindow * Window
Definition imgui_internal.h:1795
ImS8 RangeSelected
Definition imgui_internal.h:1799
ImGuiSelectionUserData RangeSrcItem
Definition imgui_internal.h:1801
ImGuiSelectionUserData NavIdItem
Definition imgui_internal.h:1802
ImGuiMultiSelectState()
Definition imgui_internal.h:1804
ImS8 NavIdSelected
Definition imgui_internal.h:1800
int LastFrameActive
Definition imgui_internal.h:1797
int LastSelectionSize
Definition imgui_internal.h:1798
Definition imgui_internal.h:1769
ImGuiMultiSelectIO IO
Definition imgui_internal.h:1770
ImS8 LoopRequestSetAll
Definition imgui_internal.h:1778
ImGuiID FocusScopeId
Definition imgui_internal.h:1772
bool IsFocused
Definition imgui_internal.h:1780
bool IsEndIO
Definition imgui_internal.h:1779
bool IsKeyboardSetRange
Definition imgui_internal.h:1781
bool NavIdPassedBy
Definition imgui_internal.h:1782
bool RangeDstPassedBy
Definition imgui_internal.h:1784
ImGuiID BoxSelectId
Definition imgui_internal.h:1776
ImGuiMultiSelectFlags Flags
Definition imgui_internal.h:1773
ImGuiMultiSelectTempData()
Definition imgui_internal.h:1787
bool RangeSrcPassedBy
Definition imgui_internal.h:1783
ImGuiMultiSelectState * Storage
Definition imgui_internal.h:1771
ImVec2 BackupCursorMaxPos
Definition imgui_internal.h:1775
ImVec2 ScopeRectMin
Definition imgui_internal.h:1774
void Clear()
Definition imgui_internal.h:1788
ImGuiKeyChord KeyMods
Definition imgui_internal.h:1777
void ClearIO()
Definition imgui_internal.h:1789
ImGuiSelectionUserData BoxSelectLastitem
Definition imgui_internal.h:1785
Definition imgui_internal.h:1618
ImGuiID ID
Definition imgui_internal.h:1620
float DistBox
Definition imgui_internal.h:1624
ImGuiSelectionUserData SelectionUserData
Definition imgui_internal.h:1627
ImGuiNavItemData()
Definition imgui_internal.h:1629
ImGuiItemFlags InFlags
Definition imgui_internal.h:1623
ImRect RectRel
Definition imgui_internal.h:1622
void Clear()
Definition imgui_internal.h:1630
float DistCenter
Definition imgui_internal.h:1625
ImGuiID FocusScopeId
Definition imgui_internal.h:1621
ImGuiWindow * Window
Definition imgui_internal.h:1619
float DistAxial
Definition imgui_internal.h:1626
Definition imgui_internal.h:1240
void ClearFlags()
Definition imgui_internal.h:1254
ImGuiNextItemData()
Definition imgui_internal.h:1253
ImGuiID FocusScopeId
Definition imgui_internal.h:1244
ImGuiKeyChord Shortcut
Definition imgui_internal.h:1247
ImGuiInputFlags ShortcutFlags
Definition imgui_internal.h:1248
ImGuiItemFlags ItemFlags
Definition imgui_internal.h:1242
bool OpenVal
Definition imgui_internal.h:1249
ImGuiNextItemDataFlags Flags
Definition imgui_internal.h:1241
float Width
Definition imgui_internal.h:1246
ImGuiDataTypeStorage RefVal
Definition imgui_internal.h:1251
ImU8 OpenCond
Definition imgui_internal.h:1250
ImGuiSelectionUserData SelectionUserData
Definition imgui_internal.h:1245
Definition imgui_internal.h:1202
ImGuiNextWindowData()
Definition imgui_internal.h:1226
ImVec2 ContentSizeVal
Definition imgui_internal.h:1211
bool CollapsedVal
Definition imgui_internal.h:1215
ImGuiCond DockCond
Definition imgui_internal.h:1207
ImGuiCond SizeCond
Definition imgui_internal.h:1205
ImVec2 PosPivotVal
Definition imgui_internal.h:1209
float BgAlphaVal
Definition imgui_internal.h:1219
ImGuiID ViewportId
Definition imgui_internal.h:1220
void * SizeCallbackUserData
Definition imgui_internal.h:1218
ImGuiWindowRefreshFlags RefreshFlagsVal
Definition imgui_internal.h:1224
ImRect SizeConstraintRect
Definition imgui_internal.h:1216
ImGuiChildFlags ChildFlags
Definition imgui_internal.h:1213
bool PosUndock
Definition imgui_internal.h:1214
ImGuiCond CollapsedCond
Definition imgui_internal.h:1206
void ClearFlags()
Definition imgui_internal.h:1227
ImGuiNextWindowDataFlags Flags
Definition imgui_internal.h:1203
ImGuiWindowClass WindowClass
Definition imgui_internal.h:1222
ImVec2 PosVal
Definition imgui_internal.h:1208
ImVec2 MenuBarOffsetMinVal
Definition imgui_internal.h:1223
ImGuiSizeCallback SizeCallback
Definition imgui_internal.h:1217
ImGuiCond PosCond
Definition imgui_internal.h:1204
ImVec2 ScrollVal
Definition imgui_internal.h:1212
ImGuiID DockId
Definition imgui_internal.h:1221
ImVec2 SizeVal
Definition imgui_internal.h:1210
Definition imgui_internal.h:1703
ImRect ClipRect
Definition imgui_internal.h:1707
ImGuiOldColumnData()
Definition imgui_internal.h:1709
float OffsetNorm
Definition imgui_internal.h:1704
float OffsetNormBeforeResize
Definition imgui_internal.h:1705
ImGuiOldColumnFlags Flags
Definition imgui_internal.h:1706
Definition imgui_internal.h:1713
ImDrawListSplitter Splitter
Definition imgui_internal.h:1728
float OffMaxX
Definition imgui_internal.h:1720
bool IsBeingResized
Definition imgui_internal.h:1717
float LineMinY
Definition imgui_internal.h:1721
float LineMaxY
Definition imgui_internal.h:1721
float OffMinX
Definition imgui_internal.h:1720
float HostCursorMaxPosX
Definition imgui_internal.h:1723
bool IsFirstFrame
Definition imgui_internal.h:1716
ImRect HostBackupClipRect
Definition imgui_internal.h:1725
ImRect HostInitialClipRect
Definition imgui_internal.h:1724
ImGuiOldColumnFlags Flags
Definition imgui_internal.h:1715
ImVector< ImGuiOldColumnData > Columns
Definition imgui_internal.h:1727
ImGuiOldColumns()
Definition imgui_internal.h:1730
int Count
Definition imgui_internal.h:1719
int Current
Definition imgui_internal.h:1718
float HostCursorPosY
Definition imgui_internal.h:1722
ImGuiID ID
Definition imgui_internal.h:1714
ImRect HostBackupParentWorkRect
Definition imgui_internal.h:1726
Definition imgui.h:2573
Definition imgui.h:3662
Definition imgui.h:3735
Definition imgui.h:3725
Definition imgui_internal.h:1340
int OpenFrameCount
Definition imgui_internal.h:1345
ImGuiID PopupId
Definition imgui_internal.h:1341
ImGuiPopupData()
Definition imgui_internal.h:1350
ImVec2 OpenPopupPos
Definition imgui_internal.h:1347
ImVec2 OpenMousePos
Definition imgui_internal.h:1348
ImGuiWindow * RestoreNavWindow
Definition imgui_internal.h:1343
ImGuiWindow * Window
Definition imgui_internal.h:1342
int ParentNavLayer
Definition imgui_internal.h:1344
ImGuiID OpenParentId
Definition imgui_internal.h:1346
ImGuiPtrOrIndex(void *ptr)
Definition imgui_internal.h:1323
int Index
Definition imgui_internal.h:1321
void * Ptr
Definition imgui_internal.h:1320
ImGuiPtrOrIndex(int index)
Definition imgui_internal.h:1324
Definition imgui_internal.h:2031
void(* ReadLineFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler, void *entry, const char *line)
Definition imgui_internal.h:2037
void(* ReadInitFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler)
Definition imgui_internal.h:2035
const char * TypeName
Definition imgui_internal.h:2032
void(* ClearAllFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler)
Definition imgui_internal.h:2034
void * UserData
Definition imgui_internal.h:2040
void(* ApplyAllFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler)
Definition imgui_internal.h:2038
void(* WriteAllFn)(ImGuiContext *ctx, ImGuiSettingsHandler *handler, ImGuiTextBuffer *out_buf)
Definition imgui_internal.h:2039
ImGuiSettingsHandler()
Definition imgui_internal.h:2042
ImGuiID TypeHash
Definition imgui_internal.h:2033
Definition imgui_internal.h:1312
float Width
Definition imgui_internal.h:1314
int Index
Definition imgui_internal.h:1313
float InitialWidth
Definition imgui_internal.h:1315
ImGuiDataType DataType
Definition imgui_internal.h:2138
ImS8 QueryFrameCount
Definition imgui_internal.h:2136
ImGuiStackLevelInfo()
Definition imgui_internal.h:2141
char Desc[57]
Definition imgui_internal.h:2139
ImGuiID ID
Definition imgui_internal.h:2135
bool QuerySuccess
Definition imgui_internal.h:2137
Definition imgui_internal.h:1286
short SizeOfStyleVarStack
Definition imgui_internal.h:1289
short SizeOfGroupStack
Definition imgui_internal.h:1292
short SizeOfFontStack
Definition imgui_internal.h:1290
short SizeOfBeginPopupStack
Definition imgui_internal.h:1294
short SizeOfDisabledStack
Definition imgui_internal.h:1295
short SizeOfFocusScopeStack
Definition imgui_internal.h:1291
ImGuiStackSizes()
Definition imgui_internal.h:1297
short SizeOfIDStack
Definition imgui_internal.h:1287
short SizeOfColorStack
Definition imgui_internal.h:1288
short SizeOfItemFlagsStack
Definition imgui_internal.h:1293
Definition imgui.h:2663
Definition imgui.h:2680
Definition imgui_internal.h:1056
ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v)
Definition imgui_internal.h:1061
int BackupInt[2]
Definition imgui_internal.h:1058
ImGuiStyleMod(ImGuiStyleVar idx, float v)
Definition imgui_internal.h:1060
ImGuiStyleVar VarIdx
Definition imgui_internal.h:1057
ImGuiStyleMod(ImGuiStyleVar idx, int v)
Definition imgui_internal.h:1059
float BackupFloat[2]
Definition imgui_internal.h:1058
Definition imgui.h:2197
Definition imgui_internal.h:3009
float PrevTabsContentsHeight
Definition imgui_internal.h:3020
ImGuiID ID
Definition imgui_internal.h:3012
ImVec2 BackupCursorPos
Definition imgui_internal.h:3041
float SeparatorMinX
Definition imgui_internal.h:3029
float ScrollingRectMaxX
Definition imgui_internal.h:3028
float ScrollingAnim
Definition imgui_internal.h:3023
ImGuiID VisibleTabId
Definition imgui_internal.h:3015
float ScrollingTarget
Definition imgui_internal.h:3024
float WidthAllTabs
Definition imgui_internal.h:3021
float ScrollingSpeed
Definition imgui_internal.h:3026
ImGuiID SelectedTabId
Definition imgui_internal.h:3013
ImVector< ImGuiTabItem > Tabs
Definition imgui_internal.h:3010
ImS16 LastTabItemIdx
Definition imgui_internal.h:3038
ImS16 TabsActiveCount
Definition imgui_internal.h:3037
bool TabsAddedNew
Definition imgui_internal.h:3036
ImGuiID ReorderRequestTabId
Definition imgui_internal.h:3031
ImRect BarRect
Definition imgui_internal.h:3018
int CurrFrameVisible
Definition imgui_internal.h:3016
ImGuiTabBar()
Definition imgui_widgets.cpp:8979
bool VisibleTabWasSubmitted
Definition imgui_internal.h:3035
ImVec2 FramePadding
Definition imgui_internal.h:3040
ImGuiTabBarFlags Flags
Definition imgui_internal.h:3011
float CurrTabsContentsHeight
Definition imgui_internal.h:3019
ImGuiID NextSelectedTabId
Definition imgui_internal.h:3014
float ScrollingTargetDistToVisibility
Definition imgui_internal.h:3025
int PrevFrameVisible
Definition imgui_internal.h:3017
float ScrollingRectMinX
Definition imgui_internal.h:3027
bool WantLayout
Definition imgui_internal.h:3034
float WidthAllTabsIdeal
Definition imgui_internal.h:3022
float SeparatorMaxX
Definition imgui_internal.h:3030
ImS8 BeginCount
Definition imgui_internal.h:3033
ImS16 ReorderRequestOffset
Definition imgui_internal.h:3032
float ItemSpacingY
Definition imgui_internal.h:3039
ImGuiTextBuffer TabsNames
Definition imgui_internal.h:3042
Definition imgui_internal.h:2989
float ContentWidth
Definition imgui_internal.h:2997
float Width
Definition imgui_internal.h:2996
ImGuiTabItem()
Definition imgui_internal.h:3004
ImS16 IndexDuringLayout
Definition imgui_internal.h:3001
float RequestedWidth
Definition imgui_internal.h:2998
int LastFrameVisible
Definition imgui_internal.h:2993
ImS32 NameOffset
Definition imgui_internal.h:2999
ImGuiTabItemFlags Flags
Definition imgui_internal.h:2991
bool WantClose
Definition imgui_internal.h:3002
ImS16 BeginOrder
Definition imgui_internal.h:3000
ImGuiWindow * Window
Definition imgui_internal.h:2992
ImGuiID ID
Definition imgui_internal.h:2990
float Offset
Definition imgui_internal.h:2995
int LastFrameSelected
Definition imgui_internal.h:2994
Definition imgui_internal.h:3122
ImU32 BgColor
Definition imgui_internal.h:3123
ImGuiTableColumnIdx Column
Definition imgui_internal.h:3124
Definition imgui_internal.h:3301
ImGuiTableColumnIdx SortOrder
Definition imgui_internal.h:3306
ImU8 IsEnabled
Definition imgui_internal.h:3308
ImGuiID UserID
Definition imgui_internal.h:3303
ImGuiTableColumnIdx DisplayOrder
Definition imgui_internal.h:3305
ImGuiTableColumnIdx Index
Definition imgui_internal.h:3304
ImU8 IsStretch
Definition imgui_internal.h:3309
ImU8 SortDirection
Definition imgui_internal.h:3307
ImGuiTableColumnSettings()
Definition imgui_internal.h:3311
float WidthOrWeight
Definition imgui_internal.h:3302
Definition imgui.h:2073
Definition imgui_internal.h:3063
float ContentMaxXHeadersIdeal
Definition imgui_internal.h:3080
ImS8 NavLayerCurrent
Definition imgui_internal.h:3098
bool IsUserEnabledNextFrame
Definition imgui_internal.h:3092
ImU8 AutoFitQueue
Definition imgui_internal.h:3099
bool IsUserEnabled
Definition imgui_internal.h:3091
float StretchWeight
Definition imgui_internal.h:3070
float ContentMaxXFrozen
Definition imgui_internal.h:3077
ImGuiTableColumnIdx DisplayOrder
Definition imgui_internal.h:3082
ImGuiTableColumnIdx PrevEnabledColumn
Definition imgui_internal.h:3084
bool IsPreserveWidthAuto
Definition imgui_internal.h:3097
float InitStretchWeightOrWidth
Definition imgui_internal.h:3071
float WidthAuto
Definition imgui_internal.h:3069
ImGuiID UserID
Definition imgui_internal.h:3073
ImGuiTableColumnFlags Flags
Definition imgui_internal.h:3064
ImU8 SortDirectionsAvailCount
Definition imgui_internal.h:3102
ImGuiTableDrawChannelIdx DrawChannelUnfrozen
Definition imgui_internal.h:3089
ImS16 NameOffset
Definition imgui_internal.h:3081
float WorkMaxX
Definition imgui_internal.h:3075
ImU8 SortDirection
Definition imgui_internal.h:3101
ImGuiTableDrawChannelIdx DrawChannelFrozen
Definition imgui_internal.h:3088
float WidthRequest
Definition imgui_internal.h:3068
float WidthGiven
Definition imgui_internal.h:3065
ImGuiTableColumnIdx IndexWithinEnabledSet
Definition imgui_internal.h:3083
ImGuiTableColumn()
Definition imgui_internal.h:3106
ImGuiTableColumnIdx NextEnabledColumn
Definition imgui_internal.h:3085
float MinX
Definition imgui_internal.h:3066
bool IsRequestOutput
Definition imgui_internal.h:3095
bool IsVisibleY
Definition imgui_internal.h:3094
float MaxX
Definition imgui_internal.h:3067
float ContentMaxXHeadersUsed
Definition imgui_internal.h:3079
bool IsSkipItems
Definition imgui_internal.h:3096
bool IsEnabled
Definition imgui_internal.h:3090
ImU8 CannotSkipItemsQueue
Definition imgui_internal.h:3100
ImU8 SortDirectionsAvailList
Definition imgui_internal.h:3104
ImRect ClipRect
Definition imgui_internal.h:3072
float WorkMinX
Definition imgui_internal.h:3074
float ContentMaxXUnfrozen
Definition imgui_internal.h:3078
ImGuiTableDrawChannelIdx DrawChannelCurrent
Definition imgui_internal.h:3087
ImGuiTableColumnIdx SortOrder
Definition imgui_internal.h:3086
ImU8 SortDirectionsAvailMask
Definition imgui_internal.h:3103
bool IsVisibleX
Definition imgui_internal.h:3093
float ItemWidth
Definition imgui_internal.h:3076
Definition imgui_internal.h:3131
ImU32 BgColor1
Definition imgui_internal.h:3135
ImGuiTableColumnIdx Index
Definition imgui_internal.h:3132
ImU32 TextColor
Definition imgui_internal.h:3133
ImU32 BgColor0
Definition imgui_internal.h:3134
Definition imgui_internal.h:3141
float LastOuterHeight
Definition imgui_internal.h:3143
float LastTopHeadersRowHeight
Definition imgui_internal.h:3144
float LastFrozenHeight
Definition imgui_internal.h:3145
ImGuiID TableInstanceID
Definition imgui_internal.h:3142
ImGuiTableInstanceData()
Definition imgui_internal.h:3149
int HoveredRowNext
Definition imgui_internal.h:3147
int HoveredRowLast
Definition imgui_internal.h:3146
Definition imgui_internal.h:3325
bool WantApply
Definition imgui_internal.h:3331
float RefScale
Definition imgui_internal.h:3328
ImGuiTableFlags SaveFlags
Definition imgui_internal.h:3327
ImGuiTableColumnIdx ColumnsCountMax
Definition imgui_internal.h:3330
ImGuiTableColumnSettings * GetColumnSettings()
Definition imgui_internal.h:3334
ImGuiTableSettings()
Definition imgui_internal.h:3333
ImGuiTableColumnIdx ColumnsCount
Definition imgui_internal.h:3329
ImGuiID ID
Definition imgui_internal.h:3326
Definition imgui.h:2063
Definition imgui_internal.h:3278
float LastTimeActive
Definition imgui_internal.h:3280
ImRect HostBackupWorkRect
Definition imgui_internal.h:3287
ImVec2 HostBackupCursorMaxPos
Definition imgui_internal.h:3291
ImVec2 HostBackupPrevLineSize
Definition imgui_internal.h:3289
ImDrawListSplitter DrawSplitter
Definition imgui_internal.h:3285
ImVec1 HostBackupColumnsOffset
Definition imgui_internal.h:3292
ImVector< ImGuiTableHeaderData > AngledHeadersRequests
Definition imgui_internal.h:3282
ImGuiTableTempData()
Definition imgui_internal.h:3296
ImVec2 UserOuterSize
Definition imgui_internal.h:3284
ImVec2 HostBackupCurrLineSize
Definition imgui_internal.h:3290
int HostBackupItemWidthStackSize
Definition imgui_internal.h:3294
float AngledHeadersExtraWidth
Definition imgui_internal.h:3281
float HostBackupItemWidth
Definition imgui_internal.h:3293
int TableIndex
Definition imgui_internal.h:3279
ImRect HostBackupParentWorkRect
Definition imgui_internal.h:3288
Definition imgui_internal.h:3154
bool IsUnfrozenRows
Definition imgui_internal.h:3259
float BorderX2
Definition imgui_internal.h:3186
ImGuiTableInstanceData InstanceDataFirst
Definition imgui_internal.h:3215
float OuterPaddingX
Definition imgui_internal.h:3189
bool IsSortSpecsDirty
Definition imgui_internal.h:3250
ImBitArrayPtr VisibleMaskByIndex
Definition imgui_internal.h:3164
ImRect BgClipRect
Definition imgui_internal.h:3206
ImGuiTableFlags SettingsLoadedFlags
Definition imgui_internal.h:3165
bool IsActiveIdInTable
Definition imgui_internal.h:3262
ImGuiTableColumnIdx LeftMostStretchedColumn
Definition imgui_internal.h:3236
bool IsLayoutLocked
Definition imgui_internal.h:3247
ImRect Bg0ClipRectForDrawCmd
Definition imgui_internal.h:3207
ImRect Bg2ClipRectForDrawCmd
Definition imgui_internal.h:3208
ImGuiTableColumnIdx HoveredColumnBorder
Definition imgui_internal.h:3226
ImGuiTableDrawChannelIdx DummyDrawChannel
Definition imgui_internal.h:3244
int CurrentRow
Definition imgui_internal.h:3169
ImGuiID ID
Definition imgui_internal.h:3155
bool HostSkipItems
Definition imgui_internal.h:3266
float RefScale
Definition imgui_internal.h:3199
ImU32 RowBgColor[2]
Definition imgui_internal.h:3182
bool IsInitializing
Definition imgui_internal.h:3249
ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent
Definition imgui_internal.h:3245
ImBitArrayPtr EnabledMaskByDisplayOrder
Definition imgui_internal.h:3162
bool IsResetAllRequest
Definition imgui_internal.h:3257
bool IsInsideRow
Definition imgui_internal.h:3248
ImBitArrayPtr EnabledMaskByIndex
Definition imgui_internal.h:3163
ImGuiTableColumnIdx AutoFitSingleColumn
Definition imgui_internal.h:3228
ImGuiTableColumnIdx ReorderColumnDir
Definition imgui_internal.h:3233
ImRect HostBackupInnerClipRect
Definition imgui_internal.h:3210
ImGuiTableColumnIdx HoveredColumnBody
Definition imgui_internal.h:3225
ImGuiTableColumnIdx RowCellDataCurrent
Definition imgui_internal.h:3243
float CellSpacingX1
Definition imgui_internal.h:3191
float ColumnsStretchSumWeights
Definition imgui_internal.h:3196
ImGuiTableColumnIdx RightMostStretchedColumn
Definition imgui_internal.h:3237
ImRect HostClipRect
Definition imgui_internal.h:3209
float RowPosY2
Definition imgui_internal.h:3174
bool IsSettingsDirty
Definition imgui_internal.h:3255
ImRect WorkRect
Definition imgui_internal.h:3204
float MinColumnWidth
Definition imgui_internal.h:3188
ImSpan< ImGuiTableColumnIdx > DisplayOrderToIndex
Definition imgui_internal.h:3160
ImGuiTableColumnIdx ColumnsEnabledCount
Definition imgui_internal.h:3221
bool IsContextPopupOpen
Definition imgui_internal.h:3252
float BorderX1
Definition imgui_internal.h:3185
float CellSpacingX2
Definition imgui_internal.h:3192
bool DisableDefaultContextMenu
Definition imgui_internal.h:3253
float CellPaddingX
Definition imgui_internal.h:3190
ImSpan< ImGuiTableCellData > RowCellData
Definition imgui_internal.h:3161
ImRect InnerClipRect
Definition imgui_internal.h:3205
ImSpan< ImGuiTableColumn > Columns
Definition imgui_internal.h:3159
int LastFrameActive
Definition imgui_internal.h:3167
ImRect InnerRect
Definition imgui_internal.h:3203
float AngledHeadersSlope
Definition imgui_internal.h:3201
int RowBgColorCounter
Definition imgui_internal.h:3181
ImRect OuterRect
Definition imgui_internal.h:3202
ImGuiTableColumnIdx SortSpecsCount
Definition imgui_internal.h:3220
ImGuiTableColumnIdx FreezeColumnsRequest
Definition imgui_internal.h:3241
ImS16 InstanceCurrent
Definition imgui_internal.h:3171
bool HasScrollbarYCurr
Definition imgui_internal.h:3263
float ColumnsAutoFitWidth
Definition imgui_internal.h:3195
void * RawData
Definition imgui_internal.h:3157
bool IsDefaultSizingPolicy
Definition imgui_internal.h:3260
ImGuiTableSortSpecs SortSpecs
Definition imgui_internal.h:3219
ImGuiTableTempData * TempData
Definition imgui_internal.h:3158
ImGuiTableColumnIdx RightMostEnabledColumn
Definition imgui_internal.h:3235
ImGuiTableColumnIdx DeclColumnsCount
Definition imgui_internal.h:3223
float ResizeLockMinContentsX2
Definition imgui_internal.h:3198
ImU32 BorderColorStrong
Definition imgui_internal.h:3183
int CurrentColumn
Definition imgui_internal.h:3170
bool IsActiveIdAliveBeforeTable
Definition imgui_internal.h:3261
bool IsUsingHeaders
Definition imgui_internal.h:3251
bool MemoryCompacted
Definition imgui_internal.h:3265
ImGuiTableColumnIdx HighlightColumnHeader
Definition imgui_internal.h:3227
bool IsDefaultDisplayOrder
Definition imgui_internal.h:3256
ImGuiTableColumnIdx FreezeRowsRequest
Definition imgui_internal.h:3239
ImGuiTableColumnIdx LeftMostEnabledColumn
Definition imgui_internal.h:3234
bool IsResetDisplayOrderRequest
Definition imgui_internal.h:3258
bool IsSettingsRequestLoad
Definition imgui_internal.h:3254
float ResizedColumnNextWidth
Definition imgui_internal.h:3197
bool HasScrollbarYPrev
Definition imgui_internal.h:3264
float RowCellPaddingY
Definition imgui_internal.h:3176
ImGuiWindow * OuterWindow
Definition imgui_internal.h:3211
ImVector< ImGuiTableColumnSortSpecs > SortSpecsMulti
Definition imgui_internal.h:3218
float RowIndentOffsetX
Definition imgui_internal.h:3178
ImS16 InstanceInteracted
Definition imgui_internal.h:3172
ImGuiTableFlags Flags
Definition imgui_internal.h:3156
ImU32 BorderColorLight
Definition imgui_internal.h:3184
~ImGuiTable()
Definition imgui_internal.h:3269
float InnerWidth
Definition imgui_internal.h:3193
ImGuiTableColumnSortSpecs SortSpecsSingle
Definition imgui_internal.h:3217
ImGuiWindow * InnerWindow
Definition imgui_internal.h:3212
float HostIndentX
Definition imgui_internal.h:3187
ImGuiTableColumnIdx LastResizedColumn
Definition imgui_internal.h:3230
ImGuiTableColumnIdx FreezeRowsCount
Definition imgui_internal.h:3240
ImGuiTable()
Definition imgui_internal.h:3268
ImGuiTableRowFlags LastRowFlags
Definition imgui_internal.h:3180
ImGuiTableColumnIdx FreezeColumnsCount
Definition imgui_internal.h:3242
ImGuiTableRowFlags RowFlags
Definition imgui_internal.h:3179
ImVector< ImGuiTableInstanceData > InstanceDataExtra
Definition imgui_internal.h:3216
ImGuiTableColumnIdx AngledHeadersCount
Definition imgui_internal.h:3224
float AngledHeadersHeight
Definition imgui_internal.h:3200
ImGuiTableColumnIdx ContextPopupColumn
Definition imgui_internal.h:3238
ImGuiTableColumnIdx ColumnsEnabledFixedCount
Definition imgui_internal.h:3222
ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen
Definition imgui_internal.h:3246
float ColumnsGivenWidth
Definition imgui_internal.h:3194
ImGuiTableColumnIdx ResizedColumn
Definition imgui_internal.h:3229
float RowMinHeight
Definition imgui_internal.h:3175
int SettingsOffset
Definition imgui_internal.h:3166
float RowTextBaseline
Definition imgui_internal.h:3177
ImGuiTableColumnIdx HeldHeaderColumn
Definition imgui_internal.h:3231
float RowPosY1
Definition imgui_internal.h:3173
ImGuiTextBuffer ColumnsNames
Definition imgui_internal.h:3213
ImGuiTableColumnIdx ReorderColumn
Definition imgui_internal.h:3232
ImDrawListSplitter * DrawSplitter
Definition imgui_internal.h:3214
int ColumnsCount
Definition imgui_internal.h:3168
Definition imgui.h:2643
Definition imgui_internal.h:745
int size()
Definition imgui_internal.h:750
const char * get_line_end(const char *base, int n)
Definition imgui_internal.h:752
void clear()
Definition imgui_internal.h:749
int EndOffset
Definition imgui_internal.h:747
void append(const char *base, int old_size, int new_size)
Definition imgui.cpp:2924
const char * get_line_begin(const char *base, int n)
Definition imgui_internal.h:751
ImVector< int > LineOffsets
Definition imgui_internal.h:746
Definition imgui_internal.h:1278
ImGuiID ID
Definition imgui_internal.h:1279
ImGuiItemFlags InFlags
Definition imgui_internal.h:1281
ImGuiTreeNodeFlags TreeFlags
Definition imgui_internal.h:1280
ImRect NavRect
Definition imgui_internal.h:1282
Definition imgui_internal.h:1654
bool SelectRequest
Definition imgui_internal.h:1658
ImGuiTypingSelectFlags Flags
Definition imgui_internal.h:1655
int SearchBufferLen
Definition imgui_internal.h:1656
const char * SearchBuffer
Definition imgui_internal.h:1657
bool SingleCharMode
Definition imgui_internal.h:1659
ImS8 SingleCharSize
Definition imgui_internal.h:1660
Definition imgui_internal.h:1665
int LastRequestFrame
Definition imgui_internal.h:1669
bool SingleCharModeLock
Definition imgui_internal.h:1671
void Clear()
Definition imgui_internal.h:1674
ImGuiTypingSelectRequest Request
Definition imgui_internal.h:1666
char SearchBuffer[64]
Definition imgui_internal.h:1667
float LastRequestTime
Definition imgui_internal.h:1670
ImGuiTypingSelectState()
Definition imgui_internal.h:1673
ImGuiID FocusScope
Definition imgui_internal.h:1668
Definition imgui_internal.h:1966
void UpdateWorkRect()
Definition imgui_internal.h:1996
int LastFrameActive
Definition imgui_internal.h:1969
ImGuiID LastNameHash
Definition imgui_internal.h:1971
int Idx
Definition imgui_internal.h:1968
short PlatformMonitor
Definition imgui_internal.h:1976
ImDrawList * BgFgDrawLists[2]
Definition imgui_internal.h:1978
~ImGuiViewportP()
Definition imgui_internal.h:1990
ImDrawDataBuilder DrawDataBuilder
Definition imgui_internal.h:1980
ImVec2 BuildWorkOffsetMax
Definition imgui_internal.h:1987
ImGuiWindow * Window
Definition imgui_internal.h:1967
ImVec2 CalcWorkRectSize(const ImVec2 &off_min, const ImVec2 &off_max) const
Definition imgui_internal.h:1995
void ClearRequestFlags()
Definition imgui_internal.h:1991
ImVec2 LastPos
Definition imgui_internal.h:1972
ImVec2 WorkOffsetMax
Definition imgui_internal.h:1985
ImGuiViewportP()
Definition imgui_internal.h:1989
float LastAlpha
Definition imgui_internal.h:1974
ImRect GetBuildWorkRect() const
Definition imgui_internal.h:2001
ImVec2 WorkOffsetMin
Definition imgui_internal.h:1984
float Alpha
Definition imgui_internal.h:1973
int BgFgDrawListsLastFrame[2]
Definition imgui_internal.h:1977
ImVec2 LastRendererSize
Definition imgui_internal.h:1983
ImDrawData DrawDataP
Definition imgui_internal.h:1979
ImVec2 LastPlatformPos
Definition imgui_internal.h:1981
ImRect GetMainRect() const
Definition imgui_internal.h:1999
ImRect GetWorkRect() const
Definition imgui_internal.h:2000
ImVec2 BuildWorkOffsetMin
Definition imgui_internal.h:1986
ImVec2 LastPlatformSize
Definition imgui_internal.h:1982
int LastFocusedStampCount
Definition imgui_internal.h:1970
bool LastFocusedHadNavWindow
Definition imgui_internal.h:1975
ImVec2 CalcWorkRectPos(const ImVec2 &off_min) const
Definition imgui_internal.h:1994
Definition imgui.h:3578
ImVec2 Pos
Definition imgui.h:3581
bool PlatformRequestMove
Definition imgui.h:3599
ImVec2 WorkPos
Definition imgui.h:3583
ImGuiViewport()
Definition imgui.h:3603
ImVec2 Size
Definition imgui.h:3582
ImVec2 WorkSize
Definition imgui.h:3584
bool PlatformRequestClose
Definition imgui.h:3601
bool PlatformRequestResize
Definition imgui.h:3600
Definition imgui.h:2557
Definition imgui_internal.h:1944
ImU32 Colors[ImGuiWindowDockStyleCol_COUNT]
Definition imgui_internal.h:1945
Definition imgui_internal.h:2012
ImVec2ih ViewportPos
Definition imgui_internal.h:2016
ImGuiID ViewportId
Definition imgui_internal.h:2017
bool WantDelete
Definition imgui_internal.h:2024
bool WantApply
Definition imgui_internal.h:2023
ImGuiID ID
Definition imgui_internal.h:2013
ImGuiWindowSettings()
Definition imgui_internal.h:2026
bool Collapsed
Definition imgui_internal.h:2021
char * GetName()
Definition imgui_internal.h:2027
ImVec2ih Size
Definition imgui_internal.h:2015
short DockOrder
Definition imgui_internal.h:2020
ImGuiID ClassId
Definition imgui_internal.h:2019
ImGuiID DockId
Definition imgui_internal.h:2018
bool IsChild
Definition imgui_internal.h:2022
ImVec2ih Pos
Definition imgui_internal.h:2014
Definition imgui_internal.h:1304
ImGuiLastItemData ParentLastItemDataBackup
Definition imgui_internal.h:1306
bool DisabledOverrideReenable
Definition imgui_internal.h:1308
ImGuiStackSizes StackSizesOnBegin
Definition imgui_internal.h:1307
ImGuiWindow * Window
Definition imgui_internal.h:1305
Definition imgui_internal.h:2771
bool NavHideHighlightOneFrame
Definition imgui_internal.h:2794
ImVec2 IdealMaxPos
Definition imgui_internal.h:2777
ImVec2 CurrLineSize
Definition imgui_internal.h:2778
ImVec1 Indent
Definition imgui_internal.h:2784
ImVec1 GroupOffset
Definition imgui_internal.h:2786
ImVec2 CursorMaxPos
Definition imgui_internal.h:2776
bool NavWindowHasScrollY
Definition imgui_internal.h:2795
bool IsSetPos
Definition imgui_internal.h:2783
float CurrLineTextBaseOffset
Definition imgui_internal.h:2780
ImVec2 CursorStartPosLossyness
Definition imgui_internal.h:2787
short NavLayersActiveMask
Definition imgui_internal.h:2791
ImVec2 CursorStartPos
Definition imgui_internal.h:2775
float TextWrapPos
Definition imgui_internal.h:2814
ImU32 ModalDimBgColor
Definition imgui_internal.h:2809
ImGuiLayoutType LayoutType
Definition imgui_internal.h:2807
float PrevLineTextBaseOffset
Definition imgui_internal.h:2781
short NavLayersActiveMaskNext
Definition imgui_internal.h:2792
ImU32 TreeHasStackDataDepthMask
Definition imgui_internal.h:2802
int CurrentTableIdx
Definition imgui_internal.h:2806
ImGuiMenuColumns MenuColumns
Definition imgui_internal.h:2800
ImGuiNavLayer NavLayerCurrent
Definition imgui_internal.h:2790
bool MenuBarAppending
Definition imgui_internal.h:2798
ImVector< float > TextWrapPosStack
Definition imgui_internal.h:2816
ImVec2 CursorPos
Definition imgui_internal.h:2773
ImVec2 PrevLineSize
Definition imgui_internal.h:2779
int TreeDepth
Definition imgui_internal.h:2801
float ItemWidth
Definition imgui_internal.h:2813
ImVector< float > ItemWidthStack
Definition imgui_internal.h:2815
ImVector< ImGuiWindow * > ChildWindows
Definition imgui_internal.h:2803
ImGuiOldColumns * CurrentColumns
Definition imgui_internal.h:2805
ImVec2 MenuBarOffset
Definition imgui_internal.h:2799
bool IsSameLine
Definition imgui_internal.h:2782
ImVec2 CursorPosPrevLine
Definition imgui_internal.h:2774
bool NavIsScrollPushableX
Definition imgui_internal.h:2793
ImGuiStorage * StateStorage
Definition imgui_internal.h:2804
ImGuiLayoutType ParentLayoutType
Definition imgui_internal.h:2808
ImVec1 ColumnsOffset
Definition imgui_internal.h:2785
Definition imgui_internal.h:2821
ImGuiWindowClass WindowClass
Definition imgui_internal.h:2827
int SettingsOffset
Definition imgui_internal.h:2914
ImVec2 ScrollbarSizes
Definition imgui_internal.h:2855
short BeginCount
Definition imgui_internal.h:2872
bool Collapsed
Definition imgui_internal.h:2861
ImRect TitleBarRect() const
Definition imgui_internal.h:2962
ImGuiContext * Ctx
Definition imgui_internal.h:2822
bool DockNodeIsVisible
Definition imgui_internal.h:2939
ImGuiCond SetWindowSizeAllowFlags
Definition imgui_internal.h:2885
ImRect InnerRect
Definition imgui_internal.h:2897
int ViewportAllowPlatformMonitorExtend
Definition imgui_internal.h:2831
ImS8 AutoFitFramesY
Definition imgui_internal.h:2877
int MemoryDrawListVtxCapacity
Definition imgui_internal.h:2934
ImVec2 Pos
Definition imgui_internal.h:2832
ImRect Rect() const
Definition imgui_internal.h:2960
bool Appearing
Definition imgui_internal.h:2865
ImGuiID ChildId
Definition imgui_internal.h:2848
float DecoOuterSizeX2
Definition imgui_internal.h:2843
short BeginCountPreviousFrame
Definition imgui_internal.h:2873
ImGuiID DockId
Definition imgui_internal.h:2946
ImVector< ImGuiID > IDStack
Definition imgui_internal.h:2891
int NameBufLen
Definition imgui_internal.h:2845
ImGuiID NavLastIds[ImGuiNavLayer_COUNT]
Definition imgui_internal.h:2928
ImGuiStorage StateStorage
Definition imgui_internal.h:2910
ImS8 DisableInputsFrames
Definition imgui_internal.h:2883
signed char ResizeBorderHeld
Definition imgui_internal.h:2871
ImGuiID PopupId
Definition imgui_internal.h:2849
ImGuiChildFlags ChildFlags
Definition imgui_internal.h:2826
ImGuiDockNode * DockNodeAsHost
Definition imgui_internal.h:2945
bool AutoFitOnlyGrows
Definition imgui_internal.h:2878
ImDrawList * DrawList
Definition imgui_internal.h:2916
bool WriteAccessed
Definition imgui_internal.h:2860
ImRect WorkRect
Definition imgui_internal.h:2899
bool WantCollapseToggle
Definition imgui_internal.h:2862
ImVec2 ScrollTargetCenterRatio
Definition imgui_internal.h:2853
bool Active
Definition imgui_internal.h:2858
ImGuiID GetIDFromRectangle(const ImRect &r_abs)
Definition imgui.cpp:8938
ImGuiCond SetWindowCollapsedAllowFlags
Definition imgui_internal.h:2886
bool Hidden
Definition imgui_internal.h:2866
float DecoOuterSizeX1
Definition imgui_internal.h:2842
ImVec2 SetWindowPosPivot
Definition imgui_internal.h:2889
ImRect DockTabItemRect
Definition imgui_internal.h:2948
ImVec2 WindowPadding
Definition imgui_internal.h:2838
float FontWindowScale
Definition imgui_internal.h:2912
ImGuiID ID
Definition imgui_internal.h:2824
ImRect InnerClipRect
Definition imgui_internal.h:2898
ImRect MenuBarRect() const
Definition imgui_internal.h:2963
bool ScrollbarX
Definition imgui_internal.h:2856
ImGuiWindow * RootWindowPopupTree
Definition imgui_internal.h:2921
ImGuiID NavRootFocusScopeId
Definition imgui_internal.h:2931
float ItemWidthDefault
Definition imgui_internal.h:2909
ImGuiWindow * ParentWindow
Definition imgui_internal.h:2918
ImS8 HiddenFramesForRenderOnly
Definition imgui_internal.h:2882
short FocusOrder
Definition imgui_internal.h:2876
ImVec2ih HitTestHoleOffset
Definition imgui_internal.h:2904
float FontDpiScale
Definition imgui_internal.h:2913
ImGuiID GetID(const char *str, const char *str_end=NULL)
Definition imgui.cpp:8901
ImGuiID MoveId
Definition imgui_internal.h:2846
float CalcFontSize() const
Definition imgui_internal.h:2961
ImVec2 ContentSize
Definition imgui_internal.h:2835
ImVec2 SetWindowPosVal
Definition imgui_internal.h:2888
ImS8 AutoFitFramesX
Definition imgui_internal.h:2877
int LastFrameActive
Definition imgui_internal.h:2906
ImGuiWindow * NavLastChildNavWindow
Definition imgui_internal.h:2927
ImGuiID TabId
Definition imgui_internal.h:2847
ImS8 HiddenFramesCannotSkipItems
Definition imgui_internal.h:2881
ImGuiWindowTempData DC
Definition imgui_internal.h:2892
ImVec2 ScrollTarget
Definition imgui_internal.h:2852
bool ViewportOwned
Definition imgui_internal.h:2857
ImGuiWindowFlags Flags
Definition imgui_internal.h:2825
signed char ResizeBorderHovered
Definition imgui_internal.h:2870
ImGuiWindow * ParentWindowForFocusRoute
Definition imgui_internal.h:2925
float WindowRounding
Definition imgui_internal.h:2839
ImVec2 Size
Definition imgui_internal.h:2833
ImGuiWindowFlags FlagsPreviousFrame
Definition imgui_internal.h:2825
bool SkipRefresh
Definition imgui_internal.h:2864
ImGuiCond SetWindowPosAllowFlags
Definition imgui_internal.h:2884
ImGuiWindow * RootWindowForNav
Definition imgui_internal.h:2924
ImRect ClipRect
Definition imgui_internal.h:2901
int MemoryDrawListIdxCapacity
Definition imgui_internal.h:2933
ImGuiDockNode * DockNode
Definition imgui_internal.h:2944
float DecoInnerSizeX1
Definition imgui_internal.h:2844
ImGuiWindow * ParentWindowInBeginStack
Definition imgui_internal.h:2919
short DockOrder
Definition imgui_internal.h:2942
ImVec2 ScrollTargetEdgeSnapDist
Definition imgui_internal.h:2854
float MenuBarHeight
Definition imgui_internal.h:2841
short BeginOrderWithinParent
Definition imgui_internal.h:2874
ImGuiDir AutoPosLastDirection
Definition imgui_internal.h:2879
ImVec2 ContentSizeExplicit
Definition imgui_internal.h:2837
ImDrawList DrawListInst
Definition imgui_internal.h:2917
ImVec2ih HitTestHoleSize
Definition imgui_internal.h:2903
bool IsExplicitChild
Definition imgui_internal.h:2868
ImVec2 ContentSizeIdeal
Definition imgui_internal.h:2836
ImRect NavRectRel[ImGuiNavLayer_COUNT]
Definition imgui_internal.h:2929
bool WasActive
Definition imgui_internal.h:2859
float TitleBarHeight
Definition imgui_internal.h:2841
char * Name
Definition imgui_internal.h:2823
ImGuiViewportP * Viewport
Definition imgui_internal.h:2828
float DecoInnerSizeY1
Definition imgui_internal.h:2844
ImVec2 ViewportPos
Definition imgui_internal.h:2830
ImVec2 Scroll
Definition imgui_internal.h:2850
ImGuiID ViewportId
Definition imgui_internal.h:2829
ImVec2 NavPreferredScoringPosRel[ImGuiNavLayer_COUNT]
Definition imgui_internal.h:2930
ImVec2 SizeFull
Definition imgui_internal.h:2834
ImRect OuterRectClipped
Definition imgui_internal.h:2896
bool SkipItems
Definition imgui_internal.h:2863
float DecoOuterSizeY1
Definition imgui_internal.h:2842
bool DockTabIsVisible
Definition imgui_internal.h:2940
ImGuiWindow(ImGuiContext *context, const char *name)
Definition imgui.cpp:4011
float WindowBorderSize
Definition imgui_internal.h:2840
float DecoOuterSizeY2
Definition imgui_internal.h:2843
ImGuiItemStatusFlags DockTabItemStatusFlags
Definition imgui_internal.h:2947
ImGuiWindowDockStyle DockStyle
Definition imgui_internal.h:2943
bool DockIsActive
Definition imgui_internal.h:2938
ImVector< ImGuiOldColumns > ColumnsStorage
Definition imgui_internal.h:2911
ImRect ParentWorkRect
Definition imgui_internal.h:2900
ImGuiWindow * RootWindowDockTree
Definition imgui_internal.h:2922
bool DockTabWantClose
Definition imgui_internal.h:2941
ImGuiWindow * RootWindowForTitleBarHighlight
Definition imgui_internal.h:2923
ImRect ContentRegionRect
Definition imgui_internal.h:2902
bool ScrollbarY
Definition imgui_internal.h:2856
float LastTimeActive
Definition imgui_internal.h:2908
bool HasCloseButton
Definition imgui_internal.h:2869
ImGuiCond SetWindowDockAllowFlags
Definition imgui_internal.h:2887
ImGuiWindow * RootWindow
Definition imgui_internal.h:2920
ImVec2 ScrollMax
Definition imgui_internal.h:2851
bool IsFallbackWindow
Definition imgui_internal.h:2867
ImS8 HiddenFramesCanSkipItems
Definition imgui_internal.h:2880
bool MemoryCompacted
Definition imgui_internal.h:2935
short BeginOrderWithinContext
Definition imgui_internal.h:2875
int LastFrameJustFocused
Definition imgui_internal.h:2907
Definition imgui_internal.h:692
T * GetByIndex(ImPoolIdx n)
Definition imgui_internal.h:701
bool Contains(const T *p) const
Definition imgui_internal.h:704
int GetAliveCount() const
Definition imgui_internal.h:713
T * TryGetMapData(ImPoolIdx n)
Definition imgui_internal.h:716
T * Add()
Definition imgui_internal.h:706
ImPoolIdx GetIndex(const T *p) const
Definition imgui_internal.h:702
T * GetOrAddByKey(ImGuiID key)
Definition imgui_internal.h:703
int GetBufSize() const
Definition imgui_internal.h:714
int GetMapSize() const
Definition imgui_internal.h:715
void Clear()
Definition imgui_internal.h:705
void Reserve(int capacity)
Definition imgui_internal.h:709
ImGuiStorage Map
Definition imgui_internal.h:694
void Remove(ImGuiID key, const T *p)
Definition imgui_internal.h:707
ImPool()
Definition imgui_internal.h:698
void Remove(ImGuiID key, ImPoolIdx idx)
Definition imgui_internal.h:708
~ImPool()
Definition imgui_internal.h:699
ImPoolIdx AliveCount
Definition imgui_internal.h:696
ImVector< T > Buf
Definition imgui_internal.h:693
T * GetByKey(ImGuiID key)
Definition imgui_internal.h:700
ImPoolIdx FreeIdx
Definition imgui_internal.h:695
Definition imgui_internal.h:547
bool Overlaps(const ImRect &r) const
Definition imgui_internal.h:568
bool IsInverted() const
Definition imgui_internal.h:579
ImVec2 GetTL() const
Definition imgui_internal.h:561
constexpr ImRect()
Definition imgui_internal.h:551
void TranslateX(float dx)
Definition imgui_internal.h:574
ImVec4 ToVec4() const
Definition imgui_internal.h:580
void ClipWithFull(const ImRect &r)
Definition imgui_internal.h:577
ImVec2 GetBL() const
Definition imgui_internal.h:563
void Add(const ImVec2 &p)
Definition imgui_internal.h:569
float GetHeight() const
Definition imgui_internal.h:559
constexpr ImRect(const ImVec4 &v)
Definition imgui_internal.h:553
void Translate(const ImVec2 &d)
Definition imgui_internal.h:573
constexpr ImRect(float x1, float y1, float x2, float y2)
Definition imgui_internal.h:554
bool ContainsWithPad(const ImVec2 &p, const ImVec2 &pad) const
Definition imgui_internal.h:567
void Floor()
Definition imgui_internal.h:578
ImVec2 Max
Definition imgui_internal.h:549
ImVec2 GetCenter() const
Definition imgui_internal.h:556
void Add(const ImRect &r)
Definition imgui_internal.h:570
void TranslateY(float dy)
Definition imgui_internal.h:575
void ClipWith(const ImRect &r)
Definition imgui_internal.h:576
void Expand(const ImVec2 &amount)
Definition imgui_internal.h:572
bool Contains(const ImVec2 &p) const
Definition imgui_internal.h:565
ImVec2 GetTR() const
Definition imgui_internal.h:562
float GetArea() const
Definition imgui_internal.h:560
ImVec2 GetBR() const
Definition imgui_internal.h:564
bool Contains(const ImRect &r) const
Definition imgui_internal.h:566
ImVec2 GetSize() const
Definition imgui_internal.h:557
void Expand(const float amount)
Definition imgui_internal.h:571
constexpr ImRect(const ImVec2 &min, const ImVec2 &max)
Definition imgui_internal.h:552
ImVec2 Min
Definition imgui_internal.h:548
float GetWidth() const
Definition imgui_internal.h:558
char * BasePtr
Definition imgui_internal.h:670
void GetSpan(int n, ImSpan< T > *span)
Definition imgui_internal.h:683
int Offsets[CHUNKS]
Definition imgui_internal.h:673
int CurrIdx
Definition imgui_internal.h:672
int GetArenaSizeInBytes()
Definition imgui_internal.h:678
void Reserve(int n, size_t sz, int a=4)
Definition imgui_internal.h:677
void * GetSpanPtrBegin(int n)
Definition imgui_internal.h:680
void * GetSpanPtrEnd(int n)
Definition imgui_internal.h:681
int CurrOff
Definition imgui_internal.h:671
void SetArenaBasePtr(void *base_ptr)
Definition imgui_internal.h:679
ImSpanAllocator()
Definition imgui_internal.h:676
int Sizes[CHUNKS]
Definition imgui_internal.h:674
Definition imgui_internal.h:639
void set(T *data, int size)
Definition imgui_internal.h:648
T * DataEnd
Definition imgui_internal.h:641
int size_in_bytes() const
Definition imgui_internal.h:651
T & operator[](int i)
Definition imgui_internal.h:652
ImSpan(T *data, int size)
Definition imgui_internal.h:645
T * end()
Definition imgui_internal.h:657
const T * end() const
Definition imgui_internal.h:658
ImSpan()
Definition imgui_internal.h:644
T * begin()
Definition imgui_internal.h:655
int index_from_ptr(const T *it) const
Definition imgui_internal.h:661
int size() const
Definition imgui_internal.h:650
T * Data
Definition imgui_internal.h:640
void set(T *data, T *data_end)
Definition imgui_internal.h:649
const T * begin() const
Definition imgui_internal.h:656
ImSpan(T *data, T *data_end)
Definition imgui_internal.h:646
const T & operator[](int i) const
Definition imgui_internal.h:653
Definition imgui_internal.h:323
Definition imgui_internal.h:529
constexpr ImVec1(float _x)
Definition imgui_internal.h:532
float x
Definition imgui_internal.h:530
constexpr ImVec1()
Definition imgui_internal.h:531
Definition imgui.h:293
float y
Definition imgui.h:294
float x
Definition imgui.h:294
Definition imgui_internal.h:537
short x
Definition imgui_internal.h:538
constexpr ImVec2ih(const ImVec2 &rhs)
Definition imgui_internal.h:541
constexpr ImVec2ih(short _x, short _y)
Definition imgui_internal.h:540
constexpr ImVec2ih()
Definition imgui_internal.h:539
short y
Definition imgui_internal.h:538
Definition imgui.h:306
float x
Definition imgui.h:307
float y
Definition imgui.h:307
float z
Definition imgui.h:307
float w
Definition imgui.h:307
Definition imgui.h:2125
int index_from_ptr(const T *it) const
Definition imgui.h:2184
void swap(ImVector< T > &rhs)
Definition imgui.h:2161
Untitled