mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-14 17:07:01 +00:00
Shortcut: fixed single mod-key Shortcut from working e.g. Shortcut(ImGuiKey_LeftCtrl)
This commit is contained in:
parent
f1960b60c1
commit
7194756370
@ -66,6 +66,8 @@ Other changes:
|
|||||||
update stopped setting default values. (#7232) [@GrigoryGraborenko]
|
update stopped setting default values. (#7232) [@GrigoryGraborenko]
|
||||||
- Backends: WebGPU: Fixed pipeline layout leak. (#7245) [@rajveermalviya]
|
- Backends: WebGPU: Fixed pipeline layout leak. (#7245) [@rajveermalviya]
|
||||||
- Backends: OpenGL3: Backup and restore GL_PIXEL_UNPACK_BUFFER. (#7253)
|
- Backends: OpenGL3: Backup and restore GL_PIXEL_UNPACK_BUFFER. (#7253)
|
||||||
|
- Internals: Various improvements related to yet unpublicized shortcut routing and input ownerhip
|
||||||
|
systems.
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
34
imgui.cpp
34
imgui.cpp
@ -8115,6 +8115,26 @@ bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max)
|
|||||||
// - Shortcut() [Internal]
|
// - Shortcut() [Internal]
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ImGuiKeyChord ImGui::FixupKeyChord(ImGuiContext* ctx, ImGuiKeyChord key_chord)
|
||||||
|
{
|
||||||
|
// Convert ImGuiMod_Shortcut and add ImGuiMod_XXXX when a corresponding ImGuiKey_LeftXXX/ImGuiKey_RightXXX is specified.
|
||||||
|
ImGuiKey key = (ImGuiKey)(key_chord & ~ImGuiMod_Mask_);
|
||||||
|
if (IsModKey(key))
|
||||||
|
{
|
||||||
|
if (key == ImGuiKey_LeftCtrl || key == ImGuiKey_RightCtrl)
|
||||||
|
key_chord |= ImGuiMod_Ctrl;
|
||||||
|
if (key == ImGuiKey_LeftShift || key == ImGuiKey_RightShift)
|
||||||
|
key_chord |= ImGuiMod_Shift;
|
||||||
|
if (key == ImGuiKey_LeftAlt || key == ImGuiKey_RightAlt)
|
||||||
|
key_chord |= ImGuiMod_Alt;
|
||||||
|
if (key == ImGuiKey_LeftSuper || key == ImGuiKey_RightSuper)
|
||||||
|
key_chord |= ImGuiMod_Super;
|
||||||
|
}
|
||||||
|
if (key_chord & ImGuiMod_Shortcut)
|
||||||
|
return (key_chord & ~ImGuiMod_Shortcut) | (ctx->IO.ConfigMacOSXBehaviors ? ImGuiMod_Super : ImGuiMod_Ctrl);
|
||||||
|
return key_chord;
|
||||||
|
}
|
||||||
|
|
||||||
ImGuiKeyData* ImGui::GetKeyData(ImGuiContext* ctx, ImGuiKey key)
|
ImGuiKeyData* ImGui::GetKeyData(ImGuiContext* ctx, ImGuiKey key)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *ctx;
|
ImGuiContext& g = *ctx;
|
||||||
@ -8198,8 +8218,7 @@ const char* ImGui::GetKeyName(ImGuiKey key)
|
|||||||
const char* ImGui::GetKeyChordName(ImGuiKeyChord key_chord)
|
const char* ImGui::GetKeyChordName(ImGuiKeyChord key_chord)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
if (key_chord & ImGuiMod_Shortcut)
|
key_chord = FixupKeyChord(&g, key_chord);
|
||||||
key_chord = ConvertShortcutMod(key_chord);
|
|
||||||
ImFormatString(g.TempKeychordName, IM_ARRAYSIZE(g.TempKeychordName), "%s%s%s%s%s",
|
ImFormatString(g.TempKeychordName, IM_ARRAYSIZE(g.TempKeychordName), "%s%s%s%s%s",
|
||||||
(key_chord & ImGuiMod_Ctrl) ? "Ctrl+" : "",
|
(key_chord & ImGuiMod_Ctrl) ? "Ctrl+" : "",
|
||||||
(key_chord & ImGuiMod_Shift) ? "Shift+" : "",
|
(key_chord & ImGuiMod_Shift) ? "Shift+" : "",
|
||||||
@ -8420,8 +8439,8 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
|
|||||||
IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiInputFlags_RouteMask_)); // Check that only 1 routing flag is used
|
IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiInputFlags_RouteMask_)); // Check that only 1 routing flag is used
|
||||||
IM_ASSERT(owner_id != ImGuiKeyOwner_Any && owner_id != ImGuiKeyOwner_None);
|
IM_ASSERT(owner_id != ImGuiKeyOwner_Any && owner_id != ImGuiKeyOwner_None);
|
||||||
|
|
||||||
if (key_chord & ImGuiMod_Shortcut)
|
// Convert ImGuiMod_Shortcut and add ImGuiMod_XXXX when a corresponding ImGuiKey_LeftXXX/ImGuiKey_RightXXX is specified.
|
||||||
key_chord = ConvertShortcutMod(key_chord);
|
key_chord = FixupKeyChord(&g, key_chord);
|
||||||
|
|
||||||
// [DEBUG] Debug break requested by user
|
// [DEBUG] Debug break requested by user
|
||||||
if (g.DebugBreakInShortcutRouting == key_chord)
|
if (g.DebugBreakInShortcutRouting == key_chord)
|
||||||
@ -8489,9 +8508,9 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
|
|||||||
// Note: this cannot be turned into GetShortcutRouting() because we do the owner_id->routing_id translation, name would be more misleading.
|
// Note: this cannot be turned into GetShortcutRouting() because we do the owner_id->routing_id translation, name would be more misleading.
|
||||||
bool ImGui::TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id)
|
bool ImGui::TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id)
|
||||||
{
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
const ImGuiID routing_id = GetRoutingIdFromOwnerId(owner_id);
|
const ImGuiID routing_id = GetRoutingIdFromOwnerId(owner_id);
|
||||||
if (key_chord & ImGuiMod_Shortcut)
|
key_chord = FixupKeyChord(&g, key_chord);
|
||||||
key_chord = ConvertShortcutMod(key_chord);
|
|
||||||
ImGuiKeyRoutingData* routing_data = GetShortcutRoutingData(key_chord); // FIXME: Could avoid creating entry.
|
ImGuiKeyRoutingData* routing_data = GetShortcutRoutingData(key_chord); // FIXME: Could avoid creating entry.
|
||||||
return routing_data->RoutingCurr == routing_id;
|
return routing_data->RoutingCurr == routing_id;
|
||||||
}
|
}
|
||||||
@ -9422,8 +9441,7 @@ bool ImGui::IsKeyChordPressed(ImGuiKeyChord key_chord)
|
|||||||
bool ImGui::IsKeyChordPressed(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags flags)
|
bool ImGui::IsKeyChordPressed(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
if (key_chord & ImGuiMod_Shortcut)
|
key_chord = FixupKeyChord(&g, key_chord);
|
||||||
key_chord = ConvertShortcutMod(key_chord);
|
|
||||||
ImGuiKey mods = (ImGuiKey)(key_chord & ImGuiMod_Mask_);
|
ImGuiKey mods = (ImGuiKey)(key_chord & ImGuiMod_Mask_);
|
||||||
if (g.IO.KeyMods != mods)
|
if (g.IO.KeyMods != mods)
|
||||||
return false;
|
return false;
|
||||||
|
@ -3159,7 +3159,8 @@ namespace ImGui
|
|||||||
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 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 ImGuiKeyChord ConvertShortcutMod(ImGuiKeyChord key_chord) { ImGuiContext& g = *GImGui; IM_ASSERT_PARANOID(key_chord & ImGuiMod_Shortcut); return (key_chord & ~ImGuiMod_Shortcut) | (g.IO.ConfigMacOSXBehaviors ? ImGuiMod_Super : ImGuiMod_Ctrl); }
|
inline bool IsModKey(ImGuiKey key) { return key >= ImGuiKey_LeftCtrl && key <= ImGuiKey_RightSuper; }
|
||||||
|
ImGuiKeyChord FixupKeyChord(ImGuiContext* ctx, ImGuiKeyChord key_chord);
|
||||||
inline ImGuiKey ConvertSingleModFlagToKey(ImGuiContext* ctx, ImGuiKey key)
|
inline ImGuiKey ConvertSingleModFlagToKey(ImGuiContext* ctx, ImGuiKey key)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *ctx;
|
ImGuiContext& g = *ctx;
|
||||||
|
Loading…
Reference in New Issue
Block a user