@ -4046,6 +4046,18 @@ static void UpdateAliasKey(ImGuiKey key, bool v, float analog_value)
key_data - > AnalogValue = analog_value ;
}
// [Internal] Do not use directly (should read io.KeyMods instead)
static ImGuiModFlags GetMergedModFlags ( )
{
ImGuiContext & g = * GImGui ;
ImGuiModFlags key_mods = ImGuiModFlags_None ;
if ( g . IO . KeyCtrl ) { key_mods | = ImGuiModFlags_Ctrl ; }
if ( g . IO . KeyShift ) { key_mods | = ImGuiModFlags_Shift ; }
if ( g . IO . KeyAlt ) { key_mods | = ImGuiModFlags_Alt ; }
if ( g . IO . KeySuper ) { key_mods | = ImGuiModFlags_Super ; }
return key_mods ;
}
static void ImGui : : UpdateKeyboardInputs ( )
{
ImGuiContext & g = * GImGui ;
@ -4086,10 +4098,10 @@ static void ImGui::UpdateKeyboardInputs()
}
if ( io . BackendUsingLegacyKeyArrays = = 1 )
{
io . KeysData [ ImGuiKey_ModCtrl ] . Down = io . KeyCtrl ;
io . KeysData [ ImGuiKey_ModShift ] . Down = io . KeyShift ;
io . KeysData [ ImGuiKey_ModAlt ] . Down = io . KeyAlt ;
io . KeysData [ ImGuiKey_ModSuper ] . Down = io . KeySuper ;
GetKeyData ( ImGuiKey_ModCtrl ) - > Down = io . KeyCtrl ;
GetKeyData ( ImGuiKey_ModShift ) - > Down = io . KeyShift ;
GetKeyData ( ImGuiKey_ModAlt ) - > Down = io . KeyAlt ;
GetKeyData ( ImGuiKey_ModSuper ) - > Down = io . KeySuper ;
}
}
@ -4382,18 +4394,6 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
io . WantTextInput = ( g . WantTextInputNextFrame ! = - 1 ) ? ( g . WantTextInputNextFrame ! = 0 ) : false ;
}
// [Internal] Do not use directly (can read io.KeyMods instead)
ImGuiModFlags ImGui : : GetMergedModFlags ( )
{
ImGuiContext & g = * GImGui ;
ImGuiModFlags key_mods = ImGuiModFlags_None ;
if ( g . IO . KeyCtrl ) { key_mods | = ImGuiModFlags_Ctrl ; }
if ( g . IO . KeyShift ) { key_mods | = ImGuiModFlags_Shift ; }
if ( g . IO . KeyAlt ) { key_mods | = ImGuiModFlags_Alt ; }
if ( g . IO . KeySuper ) { key_mods | = ImGuiModFlags_Super ; }
return key_mods ;
}
void ImGui : : NewFrame ( )
{
IM_ASSERT ( GImGui ! = NULL & & " No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ? " ) ;
@ -7778,8 +7778,8 @@ static const char* const GKeyNames[] =
" GamepadL1 " , " GamepadR1 " , " GamepadL2 " , " GamepadR2 " , " GamepadL3 " , " GamepadR3 " ,
" GamepadLStickLeft " , " GamepadLStickRight " , " GamepadLStickUp " , " GamepadLStickDown " ,
" GamepadRStickLeft " , " GamepadRStickRight " , " GamepadRStickUp " , " GamepadRStickDown " ,
" ModCtrl " , " ModShift " , " ModAlt " , " ModSuper " ,
" MouseLeft " , " MouseRight " , " MouseMiddle " , " MouseX1 " , " MouseX2 " , " MouseWheelX " , " MouseWheelY " ,
" ModCtrl " , " ModShift " , " ModAlt " , " ModSuper " ,
} ;
IM_STATIC_ASSERT ( ImGuiKey_NamedKey_COUNT = = IM_ARRAYSIZE ( GKeyNames ) ) ;
@ -8146,33 +8146,33 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
{
ImGuiKey key = e - > Key . Key ;
IM_ASSERT ( key ! = ImGuiKey_None ) ;
const int keydata_index = ( key - ImGuiKey_KeysData_OFFSET ) ;
ImGuiKeyData * keydata = & io . KeysData [ keydata_index ] ;
e - > IgnoredAsSame = ( keydata - > Down = = e - > Key . Down & & keydata - > AnalogValue = = e - > Key . AnalogValue ) ;
const int key_ data_index = ( key - ImGuiKey_KeysData_OFFSET ) ;
ImGuiKeyData * key_ data = & io . KeysData [ key_ data_index ] ;
e - > IgnoredAsSame = ( key_ data - > Down = = e - > Key . Down & & key_ data - > AnalogValue = = e - > Key . AnalogValue ) ;
if ( ! e - > IgnoredAsSame )
{
// Trickling Rule: Stop processing queued events if we got multiple action on the same button
if ( trickle_fast_inputs & & keydata - > Down ! = e - > Key . Down & & ( key_changed_mask . TestBit ( keydata_index ) | | text_inputted | | mouse_button_changed ! = 0 ) )
if ( trickle_fast_inputs & & key_ data - > Down ! = e - > Key . Down & & ( key_changed_mask . TestBit ( key_ data_index ) | | text_inputted | | mouse_button_changed ! = 0 ) )
break ;
keydata - > Down = e - > Key . Down ;
keydata - > AnalogValue = e - > Key . AnalogValue ;
key_ data - > Down = e - > Key . Down ;
key_ data - > AnalogValue = e - > Key . AnalogValue ;
key_changed = true ;
key_changed_mask . SetBit ( keydata_index ) ;
key_changed_mask . SetBit ( key_ data_index ) ;
if ( key = = ImGuiKey_ModCtrl | | key = = ImGuiKey_ModShift | | key = = ImGuiKey_ModAlt | | key = = ImGuiKey_ModSuper )
{
if ( key = = ImGuiKey_ModCtrl ) { io . KeyCtrl = keydata - > Down ; }
if ( key = = ImGuiKey_ModShift ) { io . KeyShift = keydata - > Down ; }
if ( key = = ImGuiKey_ModAlt ) { io . KeyAlt = keydata - > Down ; }
if ( key = = ImGuiKey_ModSuper ) { io . KeySuper = keydata - > Down ; }
if ( key = = ImGuiKey_ModCtrl ) { io . KeyCtrl = key_ data - > Down ; }
if ( key = = ImGuiKey_ModShift ) { io . KeyShift = key_ data - > Down ; }
if ( key = = ImGuiKey_ModAlt ) { io . KeyAlt = key_ data - > Down ; }
if ( key = = ImGuiKey_ModSuper ) { io . KeySuper = key_ data - > Down ; }
io . KeyMods = GetMergedModFlags ( ) ;
}
// Allow legacy code using io.KeysDown[GetKeyIndex()] with new backends
# ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
io . KeysDown [ key ] = keydata - > Down ;
io . KeysDown [ key ] = key_ data - > Down ;
if ( io . KeyMap [ key ] ! = - 1 )
io . KeysDown [ io . KeyMap [ key ] ] = keydata - > Down ;
io . KeysDown [ io . KeyMap [ key ] ] = key_ data - > Down ;
# endif
}
}