|
@@ -1,4 +1,4 @@
|
|
|
-// dear imgui, v1.89 WIP
|
|
|
|
|
|
|
+// dear imgui, v1.89.1 WIP
|
|
|
// (internal structures/api)
|
|
// (internal structures/api)
|
|
|
|
|
|
|
|
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
|
|
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
|
|
@@ -26,6 +26,7 @@ Index of this file:
|
|
|
// [SECTION] Docking support
|
|
// [SECTION] Docking support
|
|
|
// [SECTION] Viewport support
|
|
// [SECTION] Viewport support
|
|
|
// [SECTION] Settings support
|
|
// [SECTION] Settings support
|
|
|
|
|
+// [SECTION] Localization support
|
|
|
// [SECTION] Metrics, Debug tools
|
|
// [SECTION] Metrics, Debug tools
|
|
|
// [SECTION] Generic context hooks
|
|
// [SECTION] Generic context hooks
|
|
|
// [SECTION] ImGuiContext (main imgui context)
|
|
// [SECTION] ImGuiContext (main imgui context)
|
|
@@ -121,6 +122,7 @@ struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDat
|
|
|
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
|
|
struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
|
|
|
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
|
|
struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
|
|
|
struct ImGuiLastItemData; // Status storage for last submitted items
|
|
struct ImGuiLastItemData; // Status storage for last submitted items
|
|
|
|
|
+struct ImGuiLocEntry; // A localization entry.
|
|
|
struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
|
|
struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
|
|
|
struct ImGuiNavItemData; // Result of a gamepad/keyboard directional navigation move query result
|
|
struct ImGuiNavItemData; // Result of a gamepad/keyboard directional navigation move query result
|
|
|
struct ImGuiMetricsConfig; // Storage for ShowMetricsWindow() and DebugNodeXXX() functions
|
|
struct ImGuiMetricsConfig; // Storage for ShowMetricsWindow() and DebugNodeXXX() functions
|
|
@@ -144,11 +146,15 @@ struct ImGuiWindow; // Storage for one window
|
|
|
struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame, in practice we currently keep it for each window)
|
|
struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame, in practice we currently keep it for each window)
|
|
|
struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
|
|
struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
|
|
|
|
|
|
|
|
|
|
+// Enumerations
|
|
|
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
|
|
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
|
|
|
|
|
+enum ImGuiLocKey : int; // -> enum ImGuiLocKey // Enum: a localization entry for translation.
|
|
|
typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
|
|
typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
|
|
|
|
|
+
|
|
|
|
|
+// Flags
|
|
|
typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
|
|
typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
|
|
|
typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags
|
|
typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags
|
|
|
-typedef int ImGuiInputFlags; // -> enum ImGuiInputFlags_ // Flags: for IsKeyPressedEx()
|
|
|
|
|
|
|
+typedef int ImGuiInputFlags; // -> enum ImGuiInputFlags_ // Flags: for IsKeyPressed(), IsMouseClicked(), SetKeyOwner(), SetItemKeyOwner() etc.
|
|
|
typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag(), g.LastItemData.InFlags
|
|
typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag(), g.LastItemData.InFlags
|
|
|
typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for g.LastItemData.StatusFlags
|
|
typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for g.LastItemData.StatusFlags
|
|
|
typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
|
|
typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
|
|
@@ -852,6 +858,8 @@ enum ImGuiButtonFlagsPrivate_
|
|
|
ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
|
|
ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
|
|
|
ImGuiButtonFlags_NoNavFocus = 1 << 18, // don't override navigation focus when activated (FIXME: this is essentially used everytime an item uses ImGuiItemFlags_NoNav, but because legacy specs don't requires LastItemData to be set ButtonBehavior(), we can't poll g.LastItemData.InFlags)
|
|
ImGuiButtonFlags_NoNavFocus = 1 << 18, // don't override navigation focus when activated (FIXME: this is essentially used everytime an item uses ImGuiItemFlags_NoNav, but because legacy specs don't requires LastItemData to be set ButtonBehavior(), we can't poll g.LastItemData.InFlags)
|
|
|
ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, // don't report as hovered when nav focus is on this item
|
|
ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, // don't report as hovered when nav focus is on this item
|
|
|
|
|
+ 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!)
|
|
|
|
|
+ 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!)
|
|
|
ImGuiButtonFlags_PressedOnMask_ = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold,
|
|
ImGuiButtonFlags_PressedOnMask_ = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold,
|
|
|
ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease,
|
|
ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease,
|
|
|
};
|
|
};
|
|
@@ -881,6 +889,7 @@ enum ImGuiSelectableFlagsPrivate_
|
|
|
ImGuiSelectableFlags_DrawHoveredWhenHeld = 1 << 25, // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
|
|
ImGuiSelectableFlags_DrawHoveredWhenHeld = 1 << 25, // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
|
|
|
ImGuiSelectableFlags_SetNavIdOnHover = 1 << 26, // Set Nav/Focus ID on mouse hover (used by MenuItem)
|
|
ImGuiSelectableFlags_SetNavIdOnHover = 1 << 26, // Set Nav/Focus ID on mouse hover (used by MenuItem)
|
|
|
ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 27, // Disable padding each side with ItemSpacing * 0.5f
|
|
ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 27, // Disable padding each side with ItemSpacing * 0.5f
|
|
|
|
|
+ ImGuiSelectableFlags_NoSetKeyOwner = 1 << 28, // Don't set key/input owner on the initial click (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!)
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// Extend ImGuiTreeNodeFlags_
|
|
// Extend ImGuiTreeNodeFlags_
|
|
@@ -1207,8 +1216,10 @@ typedef ImBitArray<ImGuiKey_NamedKey_COUNT, -ImGuiKey_NamedKey_BEGIN> ImBitAr
|
|
|
#define ImGuiKey_Keyboard_END (ImGuiKey_GamepadStart)
|
|
#define ImGuiKey_Keyboard_END (ImGuiKey_GamepadStart)
|
|
|
#define ImGuiKey_Gamepad_BEGIN (ImGuiKey_GamepadStart)
|
|
#define ImGuiKey_Gamepad_BEGIN (ImGuiKey_GamepadStart)
|
|
|
#define ImGuiKey_Gamepad_END (ImGuiKey_GamepadRStickDown + 1)
|
|
#define ImGuiKey_Gamepad_END (ImGuiKey_GamepadRStickDown + 1)
|
|
|
-#define ImGuiKey_Aliases_BEGIN (ImGuiKey_MouseLeft)
|
|
|
|
|
-#define ImGuiKey_Aliases_END (ImGuiKey_MouseWheelY + 1)
|
|
|
|
|
|
|
+#define ImGuiKey_Mouse_BEGIN (ImGuiKey_MouseLeft)
|
|
|
|
|
+#define ImGuiKey_Mouse_END (ImGuiKey_MouseWheelY + 1)
|
|
|
|
|
+#define ImGuiKey_Aliases_BEGIN (ImGuiKey_Mouse_BEGIN)
|
|
|
|
|
+#define ImGuiKey_Aliases_END (ImGuiKey_Mouse_END)
|
|
|
|
|
|
|
|
// [Internal] Named shortcuts for Navigation
|
|
// [Internal] Named shortcuts for Navigation
|
|
|
#define ImGuiKey_NavKeyboardTweakSlow ImGuiMod_Ctrl
|
|
#define ImGuiKey_NavKeyboardTweakSlow ImGuiMod_Ctrl
|
|
@@ -1270,17 +1281,94 @@ struct ImGuiInputEvent
|
|
|
ImGuiInputEvent() { memset(this, 0, sizeof(*this)); }
|
|
ImGuiInputEvent() { memset(this, 0, sizeof(*this)); }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-// Flags for IsKeyPressedEx(). In upcoming feature this will be used more (and IsKeyPressedEx() renamed)
|
|
|
|
|
|
|
+// Input function taking an 'ImGuiID owner_id' argument defaults to (ImGuiKeyOwner_Any == 0) aka don't test ownership, which matches legacy behavior.
|
|
|
|
|
+#define ImGuiKeyOwner_Any ((ImGuiID)0) // Accept key that have an owner, UNLESS a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease.
|
|
|
|
|
+#define ImGuiKeyOwner_None ((ImGuiID)-1) // Require key to have no owner.
|
|
|
|
|
+
|
|
|
|
|
+typedef ImS16 ImGuiKeyRoutingIndex;
|
|
|
|
|
+
|
|
|
|
|
+// Routing table entry (sizeof() == 16 bytes)
|
|
|
|
|
+struct ImGuiKeyRoutingData
|
|
|
|
|
+{
|
|
|
|
|
+ ImGuiKeyRoutingIndex NextEntryIndex;
|
|
|
|
|
+ ImU16 Mods; // Technically we'd only need 4 bits but for simplify we store ImGuiMod_ values which need 16 bits.
|
|
|
|
|
+ ImU8 RoutingNextScore; // Lower is better (0: perfect score)
|
|
|
|
|
+ ImGuiID RoutingCurr;
|
|
|
|
|
+ ImGuiID RoutingNext;
|
|
|
|
|
+
|
|
|
|
|
+ ImGuiKeyRoutingData() { NextEntryIndex = -1; Mods = 0; RoutingNextScore = 255; RoutingCurr = RoutingNext = ImGuiKeyOwner_None; }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// Routing table: maintain a desired owner for each possible key-chord (key + mods), and setup owner in NewFrame() when mods are matching.
|
|
|
|
|
+// Stored in main context (1 instance)
|
|
|
|
|
+struct ImGuiKeyRoutingTable
|
|
|
|
|
+{
|
|
|
|
|
+ ImGuiKeyRoutingIndex Index[ImGuiKey_NamedKey_COUNT]; // Index of first entry in Entries[]
|
|
|
|
|
+ ImVector<ImGuiKeyRoutingData> Entries;
|
|
|
|
|
+ ImVector<ImGuiKeyRoutingData> EntriesNext; // Double-buffer to avoid reallocation (could use a shared buffer)
|
|
|
|
|
+
|
|
|
|
|
+ ImGuiKeyRoutingTable() { Clear(); }
|
|
|
|
|
+ void Clear() { for (int n = 0; n < IM_ARRAYSIZE(Index); n++) Index[n] = -1; Entries.clear(); EntriesNext.clear(); }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// This extends ImGuiKeyData but only for named keys (legacy keys don't support the new features)
|
|
|
|
|
+// Stored in main context (1 per named key). In the future it might be merged into ImGuiKeyData.
|
|
|
|
|
+struct ImGuiKeyOwnerData
|
|
|
|
|
+{
|
|
|
|
|
+ ImGuiID OwnerCurr;
|
|
|
|
|
+ ImGuiID OwnerNext;
|
|
|
|
|
+ bool LockThisFrame; // Reading this key requires explicit owner id (until end of frame). Set by ImGuiInputFlags_LockThisFrame.
|
|
|
|
|
+ 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.
|
|
|
|
|
+
|
|
|
|
|
+ ImGuiKeyOwnerData() { OwnerCurr = OwnerNext = ImGuiKeyOwner_None; LockThisFrame = LockUntilRelease = false; }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// Flags for extended versions of IsKeyPressed(), IsMouseClicked(), Shortcut(), SetKeyOwner(), SetItemKeyOwner()
|
|
|
// Don't mistake with ImGuiInputTextFlags! (for ImGui::InputText() function)
|
|
// Don't mistake with ImGuiInputTextFlags! (for ImGui::InputText() function)
|
|
|
enum ImGuiInputFlags_
|
|
enum ImGuiInputFlags_
|
|
|
{
|
|
{
|
|
|
- // Flags for IsKeyPressedEx()
|
|
|
|
|
|
|
+ // Flags for IsKeyPressed(), IsMouseClicked(), Shortcut()
|
|
|
ImGuiInputFlags_None = 0,
|
|
ImGuiInputFlags_None = 0,
|
|
|
ImGuiInputFlags_Repeat = 1 << 0, // Return true on successive repeats. Default for legacy IsKeyPressed(). NOT Default for legacy IsMouseClicked(). MUST BE == 1.
|
|
ImGuiInputFlags_Repeat = 1 << 0, // Return true on successive repeats. Default for legacy IsKeyPressed(). NOT Default for legacy IsMouseClicked(). MUST BE == 1.
|
|
|
ImGuiInputFlags_RepeatRateDefault = 1 << 1, // Repeat rate: Regular (default)
|
|
ImGuiInputFlags_RepeatRateDefault = 1 << 1, // Repeat rate: Regular (default)
|
|
|
ImGuiInputFlags_RepeatRateNavMove = 1 << 2, // Repeat rate: Fast
|
|
ImGuiInputFlags_RepeatRateNavMove = 1 << 2, // Repeat rate: Fast
|
|
|
ImGuiInputFlags_RepeatRateNavTweak = 1 << 3, // Repeat rate: Faster
|
|
ImGuiInputFlags_RepeatRateNavTweak = 1 << 3, // Repeat rate: Faster
|
|
|
ImGuiInputFlags_RepeatRateMask_ = ImGuiInputFlags_RepeatRateDefault | ImGuiInputFlags_RepeatRateNavMove | ImGuiInputFlags_RepeatRateNavTweak,
|
|
ImGuiInputFlags_RepeatRateMask_ = ImGuiInputFlags_RepeatRateDefault | ImGuiInputFlags_RepeatRateNavMove | ImGuiInputFlags_RepeatRateNavTweak,
|
|
|
|
|
+
|
|
|
|
|
+ // Flags for SetItemKeyOwner()
|
|
|
|
|
+ ImGuiInputFlags_CondHovered = 1 << 4, // Only set if item is hovered (default to both)
|
|
|
|
|
+ ImGuiInputFlags_CondActive = 1 << 5, // Only set if item is active (default to both)
|
|
|
|
|
+ ImGuiInputFlags_CondDefault_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive,
|
|
|
|
|
+ ImGuiInputFlags_CondMask_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive,
|
|
|
|
|
+
|
|
|
|
|
+ // Flags for SetKeyOwner(), SetItemKeyOwner()
|
|
|
|
|
+ ImGuiInputFlags_LockThisFrame = 1 << 6, // Access to key data will require EXPLICIT owner ID (ImGuiKeyOwner_Any/0 will NOT accepted for polling). Cleared at end of frame. This is useful to make input-owner-aware code steal keys from non-input-owner-aware code.
|
|
|
|
|
+ ImGuiInputFlags_LockUntilRelease = 1 << 7, // Access 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. This is useful to make input-owner-aware code steal keys from non-input-owner-aware code.
|
|
|
|
|
+
|
|
|
|
|
+ // Routing policies for Shortcut() + low-level SetShortcutRouting()
|
|
|
|
|
+ // - The general idea is that several callers register interest in a shortcut, and only one owner gets it.
|
|
|
|
|
+ // - When a policy (other than _RouteAlways) is set, Shortcut() will register itself with SetShortcutRouting(),
|
|
|
|
|
+ // allowing the system to decide where to route the input among other route-aware calls.
|
|
|
|
|
+ // - Shortcut() uses ImGuiInputFlags_RouteFocused by default: meaning that a simple Shortcut() poll
|
|
|
|
|
+ // will register a route and only succeed when parent window is in the focus stack and if no-one
|
|
|
|
|
+ // with a higher priority is claiming the shortcut.
|
|
|
|
|
+ // - Using ImGuiInputFlags_RouteAlways is roughly equivalent to doing e.g. IsKeyPressed(key) + testing mods.
|
|
|
|
|
+ // - Priorities: GlobalHigh > Focused (when owner is active item) > Global > Focused (when focused window) > GlobalLow.
|
|
|
|
|
+ // - Can select only 1 policy among all available.
|
|
|
|
|
+ ImGuiInputFlags_RouteFocused = 1 << 8, // (Default) Register focused route: Accept inputs if window is in focus stack. Deep-most focused window takes inputs. ActiveId takes inputs over deep-most focused window.
|
|
|
|
|
+ ImGuiInputFlags_RouteGlobalLow = 1 << 9, // Register route globally (lowest priority: unless a focused window or active item registered the route) -> recommended Global priority.
|
|
|
|
|
+ ImGuiInputFlags_RouteGlobal = 1 << 10, // Register route globally (medium priority: unless an active item registered the route, e.g. CTRL+A registered by InputText).
|
|
|
|
|
+ ImGuiInputFlags_RouteGlobalHigh = 1 << 11, // Register route globally (highest priority: unlikely you need to use that: will interfere with every active items)
|
|
|
|
|
+ ImGuiInputFlags_RouteMask_ = ImGuiInputFlags_RouteFocused | ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteGlobalLow | ImGuiInputFlags_RouteGlobalHigh, // _Always not part of this!
|
|
|
|
|
+ ImGuiInputFlags_RouteAlways = 1 << 12, // Do not register route, poll keys directly.
|
|
|
|
|
+ ImGuiInputFlags_RouteUnlessBgFocused= 1 << 13, // Global routes will not be applied if underlying background/void is focused (== no Dear ImGui windows are focused). Useful for overlay applications.
|
|
|
|
|
+ ImGuiInputFlags_RouteExtraMask_ = ImGuiInputFlags_RouteAlways | ImGuiInputFlags_RouteUnlessBgFocused,
|
|
|
|
|
+
|
|
|
|
|
+ // [Internal] Mask of which function support which flags
|
|
|
|
|
+ ImGuiInputFlags_SupportedByIsKeyPressed = ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateMask_,
|
|
|
|
|
+ ImGuiInputFlags_SupportedByShortcut = ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateMask_ | ImGuiInputFlags_RouteMask_ | ImGuiInputFlags_RouteExtraMask_,
|
|
|
|
|
+ ImGuiInputFlags_SupportedBySetKeyOwner = ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease,
|
|
|
|
|
+ ImGuiInputFlags_SupportedBySetItemKeyOwner = ImGuiInputFlags_SupportedBySetKeyOwner | ImGuiInputFlags_CondMask_,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
@@ -1526,6 +1614,30 @@ struct ImGuiSettingsHandler
|
|
|
ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
|
|
ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
|
|
+// [SECTION] Localization support
|
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
|
|
+
|
|
|
|
|
+// This is experimental and not officially supported, it'll probably fall short of features, if/when it does we may backtrack.
|
|
|
|
|
+enum ImGuiLocKey : int
|
|
|
|
|
+{
|
|
|
|
|
+ ImGuiLocKey_TableSizeOne,
|
|
|
|
|
+ ImGuiLocKey_TableSizeAllFit,
|
|
|
|
|
+ ImGuiLocKey_TableSizeAllDefault,
|
|
|
|
|
+ ImGuiLocKey_TableResetOrder,
|
|
|
|
|
+ ImGuiLocKey_WindowingMainMenuBar,
|
|
|
|
|
+ ImGuiLocKey_WindowingPopup,
|
|
|
|
|
+ ImGuiLocKey_WindowingUntitled,
|
|
|
|
|
+ ImGuiLocKey_COUNT
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+struct ImGuiLocEntry
|
|
|
|
|
+{
|
|
|
|
|
+ ImGuiLocKey Key;
|
|
|
|
|
+ const char* Text;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] Metrics, Debug Tools
|
|
// [SECTION] Metrics, Debug Tools
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
@@ -1655,8 +1767,6 @@ struct ImGuiContext
|
|
|
ImGuiID HoveredId; // Hovered widget, filled during the frame
|
|
ImGuiID HoveredId; // Hovered widget, filled during the frame
|
|
|
ImGuiID HoveredIdPreviousFrame;
|
|
ImGuiID HoveredIdPreviousFrame;
|
|
|
bool HoveredIdAllowOverlap;
|
|
bool HoveredIdAllowOverlap;
|
|
|
- bool HoveredIdUsingMouseWheel; // Hovered widget will use mouse wheel. Blocks scrolling the underlying window.
|
|
|
|
|
- bool HoveredIdPreviousFrameUsingMouseWheel;
|
|
|
|
|
bool HoveredIdDisabled; // At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0.
|
|
bool HoveredIdDisabled; // At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0.
|
|
|
float HoveredIdTimer; // Measure contiguous hovering time
|
|
float HoveredIdTimer; // Measure contiguous hovering time
|
|
|
float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active
|
|
float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active
|
|
@@ -1680,15 +1790,22 @@ struct ImGuiContext
|
|
|
ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation.
|
|
ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation.
|
|
|
float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
|
|
float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
|
|
|
|
|
|
|
|
- // Input Ownership
|
|
|
|
|
|
|
+ // [EXPERIMENTAL] Key/Input Ownership + Shortcut Routing system
|
|
|
|
|
+ // - The idea is that instead of "eating" a given key, we can link to an owner.
|
|
|
|
|
+ // - Input query can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_None (== -1) or a custom ID.
|
|
|
|
|
+ // - Routing is requested ahead of time for a given chord (Key + Mods) and granted in NewFrame().
|
|
|
|
|
+ ImGuiKeyOwnerData KeysOwnerData[ImGuiKey_NamedKey_COUNT];
|
|
|
|
|
+ ImGuiKeyRoutingTable KeysRoutingTable;
|
|
|
ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it)
|
|
ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it)
|
|
|
- ImBitArrayForNamedKeys ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
|
|
|
|
|
|
|
+ bool ActiveIdUsingAllKeyboardKeys; // Active widget will want to read all keyboard keys inputs. (FIXME: This is a shortcut for not taking ownership of 100+ keys but perhaps best to not have the inconsistency)
|
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
|
- ImU32 ActiveIdUsingNavInputMask; // If you used this. Since (IMGUI_VERSION_NUM >= 18804) : 'g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);' becomes 'SetActiveIdUsingKey(ImGuiKey_Escape); SetActiveIdUsingKey(ImGuiKey_NavGamepadCancel);'
|
|
|
|
|
|
|
+ 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);'
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
// Next window/item data
|
|
// Next window/item data
|
|
|
|
|
+ ImGuiID CurrentFocusScopeId; // == g.FocusScopeStack.back()
|
|
|
ImGuiItemFlags CurrentItemFlags; // == g.ItemFlagsStack.back()
|
|
ImGuiItemFlags CurrentItemFlags; // == g.ItemFlagsStack.back()
|
|
|
|
|
+ ImGuiID DebugLocateId; // Storage for DebugLocateItemOnHover() feature: this is read by ItemAdd() so we keep it in a hot/cached location
|
|
|
ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions
|
|
ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions
|
|
|
ImGuiLastItemData LastItemData; // Storage for last submitted item (setup by ItemAdd)
|
|
ImGuiLastItemData LastItemData; // Storage for last submitted item (setup by ItemAdd)
|
|
|
ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
|
|
ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
|
|
@@ -1697,7 +1814,7 @@ struct ImGuiContext
|
|
|
ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
|
|
ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
|
|
|
ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
|
|
ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
|
|
|
ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
|
|
ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
|
|
|
- ImVector<ImGuiID> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - not inherited by Begin(), unless child window
|
|
|
|
|
|
|
+ ImVector<ImGuiID> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - inherited by BeginChild(), pushed into by Begin()
|
|
|
ImVector<ImGuiItemFlags>ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
|
|
ImVector<ImGuiItemFlags>ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
|
|
|
ImVector<ImGuiGroupData>GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
|
|
ImVector<ImGuiGroupData>GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
|
|
|
ImVector<ImGuiPopupData>OpenPopupStack; // Which popups are open (persistent)
|
|
ImVector<ImGuiPopupData>OpenPopupStack; // Which popups are open (persistent)
|
|
@@ -1754,6 +1871,8 @@ struct ImGuiContext
|
|
|
ImGuiNavItemData NavTabbingResultFirst; // First tabbing request candidate within NavWindow and flattened hierarchy
|
|
ImGuiNavItemData NavTabbingResultFirst; // First tabbing request candidate within NavWindow and flattened hierarchy
|
|
|
|
|
|
|
|
// Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
|
|
// Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
|
|
|
|
|
+ ImGuiKeyChord ConfigNavWindowingKeyNext; // = ImGuiMod_Ctrl | ImGuiKey_Tab, for reconfiguration (see #4828)
|
|
|
|
|
+ ImGuiKeyChord ConfigNavWindowingKeyPrev; // = ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Tab
|
|
|
ImGuiWindow* NavWindowingTarget; // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most!
|
|
ImGuiWindow* NavWindowingTarget; // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most!
|
|
|
ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f, so the fade-out can stay on it.
|
|
ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f, so the fade-out can stay on it.
|
|
|
ImGuiWindow* NavWindowingListWindow; // Internal window actually listing the CTRL+Tab contents
|
|
ImGuiWindow* NavWindowingListWindow; // Internal window actually listing the CTRL+Tab contents
|
|
@@ -1849,6 +1968,9 @@ struct ImGuiContext
|
|
|
ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
|
|
ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
|
|
|
ImGuiID HookIdNext; // Next available HookId
|
|
ImGuiID HookIdNext; // Next available HookId
|
|
|
|
|
|
|
|
|
|
+ // Localization
|
|
|
|
|
+ const char* LocalizationTable[ImGuiLocKey_COUNT];
|
|
|
|
|
+
|
|
|
// Capture/Logging
|
|
// Capture/Logging
|
|
|
bool LogEnabled; // Currently capturing
|
|
bool LogEnabled; // Currently capturing
|
|
|
ImGuiLogType LogType; // Capture target
|
|
ImGuiLogType LogType; // Capture target
|
|
@@ -1866,6 +1988,7 @@ struct ImGuiContext
|
|
|
ImGuiDebugLogFlags DebugLogFlags;
|
|
ImGuiDebugLogFlags DebugLogFlags;
|
|
|
ImGuiTextBuffer DebugLogBuf;
|
|
ImGuiTextBuffer DebugLogBuf;
|
|
|
ImGuiTextIndex DebugLogIndex;
|
|
ImGuiTextIndex DebugLogIndex;
|
|
|
|
|
+ ImU8 DebugLocateFrames; // For DebugLocateItemOnHover(). This is used together with DebugLocateId which is in a hot/cached spot above.
|
|
|
bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
|
|
bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
|
|
|
ImU8 DebugItemPickerMouseButton;
|
|
ImU8 DebugItemPickerMouseButton;
|
|
|
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
|
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
|
@@ -1908,7 +2031,6 @@ struct ImGuiContext
|
|
|
DebugHookIdInfo = 0;
|
|
DebugHookIdInfo = 0;
|
|
|
HoveredId = HoveredIdPreviousFrame = 0;
|
|
HoveredId = HoveredIdPreviousFrame = 0;
|
|
|
HoveredIdAllowOverlap = false;
|
|
HoveredIdAllowOverlap = false;
|
|
|
- HoveredIdUsingMouseWheel = HoveredIdPreviousFrameUsingMouseWheel = false;
|
|
|
|
|
HoveredIdDisabled = false;
|
|
HoveredIdDisabled = false;
|
|
|
HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f;
|
|
HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f;
|
|
|
ActiveId = 0;
|
|
ActiveId = 0;
|
|
@@ -1932,11 +2054,12 @@ struct ImGuiContext
|
|
|
LastActiveIdTimer = 0.0f;
|
|
LastActiveIdTimer = 0.0f;
|
|
|
|
|
|
|
|
ActiveIdUsingNavDirMask = 0x00;
|
|
ActiveIdUsingNavDirMask = 0x00;
|
|
|
- ActiveIdUsingKeyInputMask.ClearAllBits();
|
|
|
|
|
|
|
+ ActiveIdUsingAllKeyboardKeys = false;
|
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
|
ActiveIdUsingNavInputMask = 0x00;
|
|
ActiveIdUsingNavInputMask = 0x00;
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+ CurrentFocusScopeId = 0;
|
|
|
CurrentItemFlags = ImGuiItemFlags_None;
|
|
CurrentItemFlags = ImGuiItemFlags_None;
|
|
|
BeginMenuCount = 0;
|
|
BeginMenuCount = 0;
|
|
|
|
|
|
|
@@ -1966,6 +2089,8 @@ struct ImGuiContext
|
|
|
NavTabbingDir = 0;
|
|
NavTabbingDir = 0;
|
|
|
NavTabbingCounter = 0;
|
|
NavTabbingCounter = 0;
|
|
|
|
|
|
|
|
|
|
+ ConfigNavWindowingKeyNext = ImGuiMod_Ctrl | ImGuiKey_Tab;
|
|
|
|
|
+ ConfigNavWindowingKeyPrev = ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Tab;
|
|
|
NavWindowingTarget = NavWindowingTargetAnim = NavWindowingListWindow = NULL;
|
|
NavWindowingTarget = NavWindowingTargetAnim = NavWindowingListWindow = NULL;
|
|
|
NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
|
|
NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
|
|
|
NavWindowingToggleLayer = false;
|
|
NavWindowingToggleLayer = false;
|
|
@@ -2017,6 +2142,8 @@ struct ImGuiContext
|
|
|
SettingsDirtyTimer = 0.0f;
|
|
SettingsDirtyTimer = 0.0f;
|
|
|
HookIdNext = 0;
|
|
HookIdNext = 0;
|
|
|
|
|
|
|
|
|
|
+ memset(LocalizationTable, 0, sizeof(LocalizationTable));
|
|
|
|
|
+
|
|
|
LogEnabled = false;
|
|
LogEnabled = false;
|
|
|
LogType = ImGuiLogType_None;
|
|
LogType = ImGuiLogType_None;
|
|
|
LogNextPrefix = LogNextSuffix = NULL;
|
|
LogNextPrefix = LogNextSuffix = NULL;
|
|
@@ -2027,6 +2154,8 @@ struct ImGuiContext
|
|
|
LogDepthToExpand = LogDepthToExpandDefault = 2;
|
|
LogDepthToExpand = LogDepthToExpandDefault = 2;
|
|
|
|
|
|
|
|
DebugLogFlags = ImGuiDebugLogFlags_OutputToTTY;
|
|
DebugLogFlags = ImGuiDebugLogFlags_OutputToTTY;
|
|
|
|
|
+ DebugLocateId = 0;
|
|
|
|
|
+ DebugLocateFrames = 0;
|
|
|
DebugItemPickerActive = false;
|
|
DebugItemPickerActive = false;
|
|
|
DebugItemPickerMouseButton = ImGuiMouseButton_Left;
|
|
DebugItemPickerMouseButton = ImGuiMouseButton_Left;
|
|
|
DebugItemPickerBreakId = 0;
|
|
DebugItemPickerBreakId = 0;
|
|
@@ -2068,7 +2197,6 @@ struct IMGUI_API ImGuiWindowTempData
|
|
|
ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
|
|
ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
|
|
|
short NavLayersActiveMask; // Which layers have been written to (result from previous frame)
|
|
short NavLayersActiveMask; // Which layers have been written to (result from previous frame)
|
|
|
short NavLayersActiveMaskNext;// Which layers have been written to (accumulator for current frame)
|
|
short NavLayersActiveMaskNext;// Which layers have been written to (accumulator for current frame)
|
|
|
- ImGuiID NavFocusScopeIdCurrent; // Current focus scope ID while appending
|
|
|
|
|
bool NavHideHighlightOneFrame;
|
|
bool NavHideHighlightOneFrame;
|
|
|
bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f)
|
|
bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f)
|
|
|
|
|
|
|
@@ -2186,6 +2314,7 @@ struct IMGUI_API ImGuiWindow
|
|
|
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.)
|
|
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.)
|
|
|
ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1)
|
|
ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1)
|
|
|
ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space
|
|
ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space
|
|
|
|
|
+ ImGuiID NavRootFocusScopeId; // Focus Scope ID at the time of Begin()
|
|
|
|
|
|
|
|
int MemoryDrawListIdxCapacity; // Backup of last idx/vtx count, so when waking up the window we can preallocate and avoid iterative alloc/copy
|
|
int MemoryDrawListIdxCapacity; // Backup of last idx/vtx count, so when waking up the window we can preallocate and avoid iterative alloc/copy
|
|
|
int MemoryDrawListVtxCapacity;
|
|
int MemoryDrawListVtxCapacity;
|
|
@@ -2631,8 +2760,11 @@ namespace ImGui
|
|
|
IMGUI_API void RemoveSettingsHandler(const char* type_name);
|
|
IMGUI_API void RemoveSettingsHandler(const char* type_name);
|
|
|
IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
|
|
IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
|
|
|
|
|
|
|
|
|
|
+ // Localization
|
|
|
|
|
+ IMGUI_API void LocalizeRegisterEntries(const ImGuiLocEntry* entries, int count);
|
|
|
|
|
+ inline const char* LocalizeGetMsg(ImGuiLocKey key) { ImGuiContext& g = *GImGui; const char* msg = g.LocalizationTable[key]; return msg ? msg : "*Missing Text*"; }
|
|
|
|
|
+
|
|
|
// Scrolling
|
|
// Scrolling
|
|
|
- IMGUI_API void SetNextWindowScroll(const ImVec2& scroll); // Use -1.0f on one axis to leave as-is
|
|
|
|
|
IMGUI_API void SetScrollX(ImGuiWindow* window, float scroll_x);
|
|
IMGUI_API void SetScrollX(ImGuiWindow* window, float scroll_x);
|
|
|
IMGUI_API void SetScrollY(ImGuiWindow* window, float scroll_y);
|
|
IMGUI_API void SetScrollY(ImGuiWindow* window, float scroll_y);
|
|
|
IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio);
|
|
IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio);
|
|
@@ -2725,20 +2857,14 @@ namespace ImGui
|
|
|
IMGUI_API void SetNavWindow(ImGuiWindow* window);
|
|
IMGUI_API void SetNavWindow(ImGuiWindow* window);
|
|
|
IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
|
|
IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
|
|
|
|
|
|
|
|
- // Focus Scope (WIP)
|
|
|
|
|
- // This is generally used to identify a selection set (multiple of which may be in the same window), as selection
|
|
|
|
|
- // patterns generally need to react (e.g. clear selection) when landing on an item of the set.
|
|
|
|
|
- IMGUI_API void PushFocusScope(ImGuiID id);
|
|
|
|
|
- IMGUI_API void PopFocusScope();
|
|
|
|
|
- inline ImGuiID GetFocusedFocusScope() { ImGuiContext& g = *GImGui; return g.NavFocusScopeId; } // Focus scope which is actually active
|
|
|
|
|
- inline ImGuiID GetFocusScope() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.NavFocusScopeIdCurrent; } // Focus scope we are outputting into, set by PushFocusScope()
|
|
|
|
|
-
|
|
|
|
|
// Inputs
|
|
// Inputs
|
|
|
// FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
|
|
// FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
|
|
|
inline bool IsNamedKey(ImGuiKey key) { return key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END; }
|
|
inline bool IsNamedKey(ImGuiKey key) { return key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END; }
|
|
|
inline bool IsNamedKeyOrModKey(ImGuiKey key) { return (key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END) || key == ImGuiMod_Ctrl || key == ImGuiMod_Shift || key == ImGuiMod_Alt || key == ImGuiMod_Super; }
|
|
inline bool IsNamedKeyOrModKey(ImGuiKey key) { return (key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END) || key == ImGuiMod_Ctrl || key == ImGuiMod_Shift || key == ImGuiMod_Alt || key == ImGuiMod_Super; }
|
|
|
inline bool IsLegacyKey(ImGuiKey key) { return key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_LegacyNativeKey_END; }
|
|
inline bool IsLegacyKey(ImGuiKey key) { return key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_LegacyNativeKey_END; }
|
|
|
|
|
+ inline bool IsKeyboardKey(ImGuiKey key) { return key >= ImGuiKey_Keyboard_BEGIN && key < ImGuiKey_Keyboard_END; }
|
|
|
inline bool IsGamepadKey(ImGuiKey key) { return key >= ImGuiKey_Gamepad_BEGIN && key < ImGuiKey_Gamepad_END; }
|
|
inline bool IsGamepadKey(ImGuiKey key) { return key >= ImGuiKey_Gamepad_BEGIN && key < ImGuiKey_Gamepad_END; }
|
|
|
|
|
+ inline bool IsMouseKey(ImGuiKey key) { return key >= ImGuiKey_Mouse_BEGIN && key < ImGuiKey_Mouse_END; }
|
|
|
inline bool IsAliasKey(ImGuiKey key) { return key >= ImGuiKey_Aliases_BEGIN && key < ImGuiKey_Aliases_END; }
|
|
inline bool IsAliasKey(ImGuiKey key) { return key >= ImGuiKey_Aliases_BEGIN && key < ImGuiKey_Aliases_END; }
|
|
|
inline ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key)
|
|
inline ImGuiKey ConvertSingleModFlagToKey(ImGuiKey key)
|
|
|
{
|
|
{
|
|
@@ -2751,21 +2877,71 @@ namespace ImGui
|
|
|
|
|
|
|
|
IMGUI_API ImGuiKeyData* GetKeyData(ImGuiKey key);
|
|
IMGUI_API ImGuiKeyData* GetKeyData(ImGuiKey key);
|
|
|
IMGUI_API void GetKeyChordName(ImGuiKeyChord key_chord, char* out_buf, int out_buf_size);
|
|
IMGUI_API void GetKeyChordName(ImGuiKeyChord key_chord, char* out_buf, int out_buf_size);
|
|
|
- IMGUI_API void SetItemUsingMouseWheel();
|
|
|
|
|
- IMGUI_API void SetActiveIdUsingAllKeyboardKeys();
|
|
|
|
|
- inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
|
|
|
|
|
- inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; return g.ActiveIdUsingKeyInputMask[key]; }
|
|
|
|
|
- inline void SetActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; g.ActiveIdUsingKeyInputMask.SetBit(key); }
|
|
|
|
|
inline ImGuiKey MouseButtonToKey(ImGuiMouseButton button) { IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); return (ImGuiKey)(ImGuiKey_MouseLeft + button); }
|
|
inline ImGuiKey MouseButtonToKey(ImGuiMouseButton button) { IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); return (ImGuiKey)(ImGuiKey_MouseLeft + button); }
|
|
|
IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
|
|
IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
|
|
|
IMGUI_API ImVec2 GetKeyVector2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down);
|
|
IMGUI_API ImVec2 GetKeyVector2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down);
|
|
|
IMGUI_API float GetNavTweakPressedAmount(ImGuiAxis axis);
|
|
IMGUI_API float GetNavTweakPressedAmount(ImGuiAxis axis);
|
|
|
IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
|
|
IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
|
|
|
IMGUI_API void GetTypematicRepeatRate(ImGuiInputFlags flags, float* repeat_delay, float* repeat_rate);
|
|
IMGUI_API void GetTypematicRepeatRate(ImGuiInputFlags flags, float* repeat_delay, float* repeat_rate);
|
|
|
- IMGUI_API bool IsKeyPressedEx(ImGuiKey key, ImGuiInputFlags flags = 0);
|
|
|
|
|
-#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
|
|
|
- inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { IM_ASSERT(IsNamedKey(key)); return IsKeyPressed(key, repeat); } // [removed in 1.87]
|
|
|
|
|
-#endif
|
|
|
|
|
|
|
+ IMGUI_API void SetActiveIdUsingAllKeyboardKeys();
|
|
|
|
|
+ inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
|
|
|
|
|
+
|
|
|
|
|
+ // [EXPERIMENTAL] Low-Level: Key/Input Ownership
|
|
|
|
|
+ // - The idea is that instead of "eating" a given input, we can link to an owner id.
|
|
|
|
|
+ // - Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead).
|
|
|
|
|
+ // - Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_None (== -1) or a custom ID.
|
|
|
|
|
+ // - Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0).
|
|
|
|
|
+ // - Input ownership is automatically released on the frame after a key is released. Therefore:
|
|
|
|
|
+ // - for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case).
|
|
|
|
|
+ // - 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).
|
|
|
|
|
+ // - 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.
|
|
|
|
|
+ // - This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step.
|
|
|
|
|
+ // Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved.
|
|
|
|
|
+ IMGUI_API ImGuiID GetKeyOwner(ImGuiKey key);
|
|
|
|
|
+ IMGUI_API void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 0);
|
|
|
|
|
+ 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());'.
|
|
|
|
|
+ IMGUI_API bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id); // Test that key is either not owned, either owned by 'owner_id'
|
|
|
|
|
+ inline ImGuiKeyOwnerData* GetKeyOwnerData(ImGuiKey key) { if (key & ImGuiMod_Mask_) key = ConvertSingleModFlagToKey(key); IM_ASSERT(IsNamedKey(key)); return &GImGui->KeysOwnerData[key - ImGuiKey_NamedKey_BEGIN]; }
|
|
|
|
|
+
|
|
|
|
|
+ // [EXPERIMENTAL] High-Level: Input Access functions w/ support for Key/Input Ownership
|
|
|
|
|
+ // - Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag.
|
|
|
|
|
+ // - Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0)
|
|
|
|
|
+ // - Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'.
|
|
|
|
|
+ // Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease.
|
|
|
|
|
+ // - Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API.
|
|
|
|
|
+ IMGUI_API bool IsKeyDown(ImGuiKey key, ImGuiID owner_id);
|
|
|
|
|
+ IMGUI_API bool IsKeyPressed(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 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.
|
|
|
|
|
+ IMGUI_API bool IsKeyReleased(ImGuiKey key, ImGuiID owner_id);
|
|
|
|
|
+ IMGUI_API bool IsMouseDown(ImGuiMouseButton button, ImGuiID owner_id);
|
|
|
|
|
+ IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, ImGuiID owner_id, ImGuiInputFlags flags = 0);
|
|
|
|
|
+ IMGUI_API bool IsMouseReleased(ImGuiMouseButton button, ImGuiID owner_id);
|
|
|
|
|
+
|
|
|
|
|
+ // [EXPERIMENTAL] Shortcut Routing
|
|
|
|
|
+ // - ImGuiKeyChord = a ImGuiKey optionally OR-red with ImGuiMod_Alt/ImGuiMod_Ctrl/ImGuiMod_Shift/ImGuiMod_Super.
|
|
|
|
|
+ // ImGuiKey_C (accepted by functions taking ImGuiKey or ImGuiKeyChord)
|
|
|
|
|
+ // ImGuiKey_C | ImGuiMod_Ctrl (accepted by functions taking ImGuiKeyChord)
|
|
|
|
|
+ // ONLY ImGuiMod_XXX values are legal to 'OR' with an ImGuiKey. You CANNOT 'OR' two ImGuiKey values.
|
|
|
|
|
+ // - When using one of the routing flags (e.g. ImGuiInputFlags_RouteFocused): routes requested ahead of time given a chord (key + modifiers) and a routing policy.
|
|
|
|
|
+ // - Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame.
|
|
|
|
|
+ // - Route is granted to a single owner. When multiple requests are made we have policies to select the winning route.
|
|
|
|
|
+ // - Multiple read sites may use the same owner id and will all get the granted route.
|
|
|
|
|
+ // - For routing: when owner_id is 0 we use the current Focus Scope ID as a default owner in order to identify our location.
|
|
|
|
|
+ IMGUI_API bool Shortcut(ImGuiKeyChord key_chord, ImGuiID owner_id = 0, ImGuiInputFlags flags = 0);
|
|
|
|
|
+ IMGUI_API bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id = 0, ImGuiInputFlags flags = 0);
|
|
|
|
|
+ IMGUI_API bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id);
|
|
|
|
|
+ IMGUI_API ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord);
|
|
|
|
|
+
|
|
|
|
|
+ // [EXPERIMENTAL] Focus Scope
|
|
|
|
|
+ // This is generally used to identify a unique input location (for e.g. a selection set)
|
|
|
|
|
+ // There is one per window (automatically set in Begin), but:
|
|
|
|
|
+ // - Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set.
|
|
|
|
|
+ // So in order to identify a set multiple lists in same window may each need a focus scope.
|
|
|
|
|
+ // If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope()
|
|
|
|
|
+ // - Shortcut routing also use focus scope as a default location identifier if an owner is not provided.
|
|
|
|
|
+ // We don't use the ID Stack for this as it is common to want them separate.
|
|
|
|
|
+ IMGUI_API void PushFocusScope(ImGuiID id);
|
|
|
|
|
+ IMGUI_API void PopFocusScope();
|
|
|
|
|
+ inline ImGuiID GetCurrentFocusScope() { ImGuiContext& g = *GImGui; return g.CurrentFocusScopeId; } // Focus scope we are outputting into, set by PushFocusScope()
|
|
|
|
|
|
|
|
// Drag and Drop
|
|
// Drag and Drop
|
|
|
IMGUI_API bool IsDragDropActive();
|
|
IMGUI_API bool IsDragDropActive();
|
|
@@ -2952,6 +3128,9 @@ namespace ImGui
|
|
|
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
|
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
|
|
IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
|
IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
|
|
IMGUI_API void ErrorCheckUsingSetCursorPosToExtendParentBoundaries();
|
|
IMGUI_API void ErrorCheckUsingSetCursorPosToExtendParentBoundaries();
|
|
|
|
|
+ IMGUI_API void DebugLocateItem(ImGuiID target_id); // Call sparingly: only 1 at the same time!
|
|
|
|
|
+ IMGUI_API void DebugLocateItemOnHover(ImGuiID target_id); // Only call on reaction to a mouse Hover: because only 1 at the same time!
|
|
|
|
|
+ IMGUI_API void DebugLocateItemResolveWithLastItem();
|
|
|
inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(g.LastItemData.Rect.Min, g.LastItemData.Rect.Max, col); }
|
|
inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(g.LastItemData.Rect.Min, g.LastItemData.Rect.Max, col); }
|
|
|
inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
|
|
inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
|
|
|
IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
|
|
IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
|
|
@@ -2975,6 +3154,7 @@ namespace ImGui
|
|
|
|
|
|
|
|
// Obsolete functions
|
|
// Obsolete functions
|
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
|
|
|
+ inline void SetItemUsingMouseWheel() { SetItemKeyOwner(ImGuiKey_MouseWheelY); } // Changed in 1.89
|
|
|
inline bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0) { return TreeNodeUpdateNextOpen(id, flags); } // Renamed in 1.89
|
|
inline bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0) { return TreeNodeUpdateNextOpen(id, flags); } // Renamed in 1.89
|
|
|
|
|
|
|
|
// Refactored focus/nav/tabbing system in 1.82 and 1.84. If you have old/custom copy-and-pasted widgets that used FocusableItemRegister():
|
|
// Refactored focus/nav/tabbing system in 1.82 and 1.84. If you have old/custom copy-and-pasted widgets that used FocusableItemRegister():
|
|
@@ -2985,6 +3165,9 @@ namespace ImGui
|
|
|
inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) { IM_ASSERT(0); IM_UNUSED(window); IM_UNUSED(id); return false; } // -> pass ImGuiItemAddFlags_Inputable flag to ItemAdd()
|
|
inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) { IM_ASSERT(0); IM_UNUSED(window); IM_UNUSED(id); return false; } // -> pass ImGuiItemAddFlags_Inputable flag to ItemAdd()
|
|
|
inline void FocusableItemUnregister(ImGuiWindow* window) { IM_ASSERT(0); IM_UNUSED(window); } // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem
|
|
inline void FocusableItemUnregister(ImGuiWindow* window) { IM_ASSERT(0); IM_UNUSED(window); } // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem
|
|
|
#endif
|
|
#endif
|
|
|
|
|
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
|
|
|
+ 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!
|
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
} // namespace ImGui
|
|
} // namespace ImGui
|
|
|
|
|
|