|
|
|
@ -8115,6 +8115,26 @@ bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max) |
|
|
|
|
// - 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) |
|
|
|
|
{ |
|
|
|
|
ImGuiContext& g = *ctx; |
|
|
|
@ -8198,8 +8218,7 @@ const char* ImGui::GetKeyName(ImGuiKey key) |
|
|
|
|
const char* ImGui::GetKeyChordName(ImGuiKeyChord key_chord) |
|
|
|
|
{ |
|
|
|
|
ImGuiContext& g = *GImGui; |
|
|
|
|
if (key_chord & ImGuiMod_Shortcut) |
|
|
|
|
key_chord = ConvertShortcutMod(key_chord); |
|
|
|
|
key_chord = FixupKeyChord(&g, key_chord); |
|
|
|
|
ImFormatString(g.TempKeychordName, IM_ARRAYSIZE(g.TempKeychordName), "%s%s%s%s%s", |
|
|
|
|
(key_chord & ImGuiMod_Ctrl) ? "Ctrl+" : "", |
|
|
|
|
(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(owner_id != ImGuiKeyOwner_Any && owner_id != ImGuiKeyOwner_None); |
|
|
|
|
|
|
|
|
|
if (key_chord & ImGuiMod_Shortcut) |
|
|
|
|
key_chord = ConvertShortcutMod(key_chord); |
|
|
|
|
// Convert ImGuiMod_Shortcut and add ImGuiMod_XXXX when a corresponding ImGuiKey_LeftXXX/ImGuiKey_RightXXX is specified.
|
|
|
|
|
key_chord = FixupKeyChord(&g, key_chord); |
|
|
|
|
|
|
|
|
|
// [DEBUG] Debug break requested by user
|
|
|
|
|
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.
|
|
|
|
|
bool ImGui::TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id) |
|
|
|
|
{ |
|
|
|
|
ImGuiContext& g = *GImGui; |
|
|
|
|
const ImGuiID routing_id = GetRoutingIdFromOwnerId(owner_id); |
|
|
|
|
if (key_chord & ImGuiMod_Shortcut) |
|
|
|
|
key_chord = ConvertShortcutMod(key_chord); |
|
|
|
|
key_chord = FixupKeyChord(&g, key_chord); |
|
|
|
|
ImGuiKeyRoutingData* routing_data = GetShortcutRoutingData(key_chord); // FIXME: Could avoid creating entry.
|
|
|
|
|
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) |
|
|
|
|
{ |
|
|
|
|
ImGuiContext& g = *GImGui; |
|
|
|
|
if (key_chord & ImGuiMod_Shortcut) |
|
|
|
|
key_chord = ConvertShortcutMod(key_chord); |
|
|
|
|
key_chord = FixupKeyChord(&g, key_chord); |
|
|
|
|
ImGuiKey mods = (ImGuiKey)(key_chord & ImGuiMod_Mask_); |
|
|
|
|
if (g.IO.KeyMods != mods) |
|
|
|
|
return false; |
|
|
|
|