@ -1491,7 +1491,7 @@ void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value)
if ( key = = ImGuiKey_None | | ! AppAcceptingEvents )
if ( key = = ImGuiKey_None | | ! AppAcceptingEvents )
return ;
return ;
ImGuiContext & g = * Ctx ;
ImGuiContext & g = * Ctx ;
IM_ASSERT ( ImGui : : IsNamedKeyOrModKey ( key ) ) ; // Backend needs to pass a valid ImGuiKey_ constant. 0..511 values are legacy native key codes which are not accepted by this API.
IM_ASSERT ( ImGui : : IsNamedKeyOrMod ( key ) ) ; // Backend needs to pass a valid ImGuiKey_ constant. 0..511 values are legacy native key codes which are not accepted by this API.
IM_ASSERT ( ImGui : : IsAliasKey ( key ) = = false ) ; // Backend cannot submit ImGuiKey_MouseXXX values they are automatically inferred from AddMouseXXX() events.
IM_ASSERT ( ImGui : : IsAliasKey ( key ) = = false ) ; // Backend cannot submit ImGuiKey_MouseXXX values they are automatically inferred from AddMouseXXX() events.
// MacOS: swap Cmd(Super) and Ctrl
// MacOS: swap Cmd(Super) and Ctrl
@ -8250,6 +8250,8 @@ ImGuiID ImGui::GetID(const void* ptr_id)
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// [SECTION] INPUTS
// [SECTION] INPUTS
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// - GetModForModKey() [Internal]
// - FixupKeyChord() [Internal]
// - GetKeyData() [Internal]
// - GetKeyData() [Internal]
// - GetKeyIndex() [Internal]
// - GetKeyIndex() [Internal]
// - GetKeyName()
// - GetKeyName()
@ -8311,21 +8313,25 @@ ImGuiID ImGui::GetID(const void* ptr_id)
// - Shortcut() [Internal]
// - Shortcut() [Internal]
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
static ImGuiKeyChord GetModForModKey ( ImGuiKey key )
{
if ( key = = ImGuiKey_LeftCtrl | | key = = ImGuiKey_RightCtrl )
return ImGuiMod_Ctrl ;
if ( key = = ImGuiKey_LeftShift | | key = = ImGuiKey_RightShift )
return ImGuiMod_Shift ;
if ( key = = ImGuiKey_LeftAlt | | key = = ImGuiKey_RightAlt )
return ImGuiMod_Alt ;
if ( key = = ImGuiKey_LeftSuper | | key = = ImGuiKey_RightSuper )
return ImGuiMod_Super ;
return ImGuiMod_None ;
}
ImGuiKeyChord ImGui : : FixupKeyChord ( ImGuiKeyChord key_chord )
ImGuiKeyChord ImGui : : FixupKeyChord ( ImGuiKeyChord key_chord )
{
{
// Add ImGuiMod_XXXX when a corresponding ImGuiKey_LeftXXX/ImGuiKey_RightXXX is specified.
// Add ImGuiMod_XXXX when a corresponding ImGuiKey_LeftXXX/ImGuiKey_RightXXX is specified.
ImGuiKey key = ( ImGuiKey ) ( key_chord & ~ ImGuiMod_Mask_ ) ;
ImGuiKey key = ( ImGuiKey ) ( key_chord & ~ ImGuiMod_Mask_ ) ;
if ( IsModKey ( key ) )
if ( IsModKey ( key ) )
{
key_chord | = GetModForModKey ( 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 ;
}
return key_chord ;
return key_chord ;
}
}
@ -8386,8 +8392,10 @@ IM_STATIC_ASSERT(ImGuiKey_NamedKey_COUNT == IM_ARRAYSIZE(GKeyNames));
const char * ImGui : : GetKeyName ( ImGuiKey key )
const char * ImGui : : GetKeyName ( ImGuiKey key )
{
{
if ( key = = ImGuiKey_None )
return " None " ;
# ifdef IMGUI_DISABLE_OBSOLETE_KEYIO
# ifdef IMGUI_DISABLE_OBSOLETE_KEYIO
IM_ASSERT ( ( IsNamedKeyOrModKey ( key ) | | key = = ImGuiKey_None ) & & " Support for user key indices was dropped in favor of ImGuiKey. Please update backend and user code. " ) ;
IM_ASSERT ( IsNamedKeyOrMod ( key ) & & " Support for user key indices was dropped in favor of ImGuiKey. Please update backend and user code. " ) ;
# else
# else
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
if ( IsLegacyKey ( key ) )
if ( IsLegacyKey ( key ) )
@ -8398,8 +8406,6 @@ const char* ImGui::GetKeyName(ImGuiKey key)
key = ( ImGuiKey ) g . IO . KeyMap [ key ] ;
key = ( ImGuiKey ) g . IO . KeyMap [ key ] ;
}
}
# endif
# endif
if ( key = = ImGuiKey_None )
return " None " ;
if ( key & ImGuiMod_Mask_ )
if ( key & ImGuiMod_Mask_ )
key = ConvertSingleModFlagToKey ( key ) ;
key = ConvertSingleModFlagToKey ( key ) ;
if ( ! IsNamedKey ( key ) )
if ( ! IsNamedKey ( key ) )
@ -8408,16 +8414,24 @@ const char* ImGui::GetKeyName(ImGuiKey key)
return GKeyNames [ key - ImGuiKey_NamedKey_BEGIN ] ;
return GKeyNames [ key - ImGuiKey_NamedKey_BEGIN ] ;
}
}
// Return untranslated names: on macOS, Cmd key will show as Ctrl, Ctrl key will show as super.
// Lifetime of return value: valid until next call to same function.
const char * ImGui : : GetKeyChordName ( ImGuiKeyChord key_chord )
const char * ImGui : : GetKeyChordName ( ImGuiKeyChord key_chord )
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
key_chord = FixupKeyChord ( key_chord ) ;
// Return "Ctrl+LeftShift" instead of "Ctrl+Shift+LeftShift"
const ImGuiKey key = ( ImGuiKey ) ( key_chord & ~ ImGuiMod_Mask_ ) ;
if ( IsModKey ( key ) )
key_chord & = ~ GetModForModKey ( key ) ;
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+ " : " " ,
( key_chord & ImGuiMod_Alt ) ? " Alt+ " : " " ,
( key_chord & ImGuiMod_Alt ) ? " Alt+ " : " " ,
( key_chord & ImGuiMod_Super ) ? " Super+ " : " " ,
( key_chord & ImGuiMod_Super ) ? " Super+ " : " " ,
GetKeyName ( ( ImGuiKey ) ( key_chord & ~ ImGuiMod_Mask_ ) ) ) ;
( key ! = ImGuiKey_None | | key_chord = = ImGuiKey_None ) ? GetKeyName ( key ) : " " ) ;
if ( key = = ImGuiKey_None & & key_chord ! = 0 & & g . TempKeychordName [ 0 ] ) // Remove trailing '+'
g . TempKeychordName [ strlen ( g . TempKeychordName ) - 1 ] = 0 ;
return g . TempKeychordName ;
return g . TempKeychordName ;
}
}
@ -9524,7 +9538,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
ImGuiID ImGui : : GetKeyOwner ( ImGuiKey key )
ImGuiID ImGui : : GetKeyOwner ( ImGuiKey key )
{
{
if ( ! IsNamedKeyOrModKey ( key ) )
if ( ! IsNamedKeyOrMod ( key ) )
return ImGuiKeyOwner_None ;
return ImGuiKeyOwner_None ;
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
@ -9544,7 +9558,7 @@ ImGuiID ImGui::GetKeyOwner(ImGuiKey key)
// All paths are also testing for key not being locked, for the rare cases that key have been locked with using ImGuiInputFlags_LockXXX flags.
// All paths are also testing for key not being locked, for the rare cases that key have been locked with using ImGuiInputFlags_LockXXX flags.
bool ImGui : : TestKeyOwner ( ImGuiKey key , ImGuiID owner_id )
bool ImGui : : TestKeyOwner ( ImGuiKey key , ImGuiID owner_id )
{
{
if ( ! IsNamedKeyOrModKey ( key ) )
if ( ! IsNamedKeyOrMod ( key ) )
return true ;
return true ;
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
@ -9578,7 +9592,7 @@ bool ImGui::TestKeyOwner(ImGuiKey key, ImGuiID owner_id)
void ImGui : : SetKeyOwner ( ImGuiKey key , ImGuiID owner_id , ImGuiInputFlags flags )
void ImGui : : SetKeyOwner ( ImGuiKey key , ImGuiID owner_id , ImGuiInputFlags flags )
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
IM_ASSERT ( IsNamedKeyOrModKey ( key ) & & ( owner_id ! = ImGuiKeyOwner_Any | | ( flags & ( ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease ) ) ) ) ; // Can only use _Any with _LockXXX flags (to eat a key away without an ID to retrieve it)
IM_ASSERT ( IsNamedKeyOrMod ( key ) & & ( owner_id ! = ImGuiKeyOwner_Any | | ( flags & ( ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease ) ) ) ) ; // Can only use _Any with _LockXXX flags (to eat a key away without an ID to retrieve it)
IM_ASSERT ( ( flags & ~ ImGuiInputFlags_SupportedBySetKeyOwner ) = = 0 ) ; // Passing flags not supported by this function!
IM_ASSERT ( ( flags & ~ ImGuiInputFlags_SupportedBySetKeyOwner ) = = 0 ) ; // Passing flags not supported by this function!
//IMGUI_DEBUG_LOG("SetKeyOwner(%s, owner_id=0x%08X, flags=%08X)\n", GetKeyName(key), owner_id, flags);
//IMGUI_DEBUG_LOG("SetKeyOwner(%s, owner_id=0x%08X, flags=%08X)\n", GetKeyName(key), owner_id, flags);