@ -434,6 +434,11 @@ CODE
- inputs ( internals ) : Shortcut ( ) , SetShortcutRouting ( ) : swapped last two parameters order in function signatures :
- old : Shortcut ( ImGuiKeyChord key_chord , ImGuiID owner_id = 0 , ImGuiInputFlags flags = 0 ) ;
- new : Shortcut ( ImGuiKeyChord key_chord , ImGuiInputFlags flags = 0 , ImGuiID owner_id = 0 ) ;
- inputs ( internals ) : owner - aware versions of IsKeyPressed ( ) , IsKeyChordPressed ( ) , IsMouseClicked ( ) : swapped last two parameters order in function signatures .
- old : IsKeyPressed ( ImGuiKey key , ImGuiID owner_id , ImGuiInputFlags flags = 0 ) ;
- new : IsKeyPressed ( ImGuiKey key , ImGuiInputFlags flags , ImGuiID owner_id = 0 ) ;
- old : IsMouseClicked ( ImGuiMouseButton button , ImGuiID owner_id , ImGuiInputFlags flags = 0 ) ;
- new : IsMouseClicked ( ImGuiMouseButton button , ImGuiInputFlags flags , ImGuiID owner_id = 0 ) ;
for various reasons those changes makes sense . They are being made because making some of those API public .
only past users of imgui_internal . h with the extra parameters will be affected . Added asserts for valid flags in various functions to detect _some_ misuses , BUT NOT ALL .
- 2024 / 05 / 16 ( 1.90 .7 ) - inputs : on macOS X , Cmd and Ctrl keys are now automatically swapped by io . AddKeyEvent ( ) as this naturally align with how macOS X uses those keys .
@ -8749,11 +8754,11 @@ bool ImGui::IsKeyDown(ImGuiKey key, ImGuiID owner_id)
bool ImGui : : IsKeyPressed ( ImGuiKey key , bool repeat )
{
return IsKeyPressed ( key , ImGuiKeyOwner_Any , repeat ? ImGuiInputFlags_Repeat : ImGuiInputFlags_None ) ;
return IsKeyPressed ( key , repeat ? ImGuiInputFlags_Repeat : ImGuiInputFlags_None , ImGuiKeyOwner_Any ) ;
}
// Important: unless legacy IsKeyPressed(ImGuiKey, bool repeat=true) which DEFAULT to repeat, this requires EXPLICIT repeat.
bool ImGui : : IsKeyPressed ( ImGuiKey key , ImGuiID owner_id , ImGuiInputFlags flags )
bool ImGui : : IsKeyPressed ( ImGuiKey key , ImGuiInputFlags flags , ImGuiID owner_id )
{
const ImGuiKeyData * key_data = GetKeyData ( key ) ;
if ( ! key_data - > Down ) // In theory this should already be encoded as (DownDuration < 0.0f), but testing this facilitates eating mechanism (until we finish work on key ownership)
@ -8826,7 +8831,7 @@ bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat)
return IsMouseClicked ( button , ImGuiKeyOwner_Any , repeat ? ImGuiInputFlags_Repeat : ImGuiInputFlags_None ) ;
}
bool ImGui : : IsMouseClicked ( ImGuiMouseButton button , ImGuiID owner_id , ImGuiInputFlags flags )
bool ImGui : : IsMouseClicked ( ImGuiMouseButton button , ImGuiInputFlags flags , ImGuiID owner_id )
{
ImGuiContext & g = * GImGui ;
IM_ASSERT ( button > = 0 & & button < IM_ARRAYSIZE ( g . IO . MouseDown ) ) ;
@ -9652,7 +9657,7 @@ bool ImGui::IsKeyChordPressed(ImGuiKeyChord key_chord)
}
// This is equivalent to comparing KeyMods + doing a IsKeyPressed()
bool ImGui : : IsKeyChordPressed ( ImGuiKeyChord key_chord , ImGuiID owner_id , ImGuiInputFlags flags )
bool ImGui : : IsKeyChordPressed ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id )
{
ImGuiContext & g = * GImGui ;
key_chord = FixupKeyChord ( key_chord ) ;
@ -9664,7 +9669,7 @@ bool ImGui::IsKeyChordPressed(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiIn
ImGuiKey key = ( ImGuiKey ) ( key_chord & ~ ImGuiMod_Mask_ ) ;
if ( key = = ImGuiKey_None )
key = ConvertSingleModFlagToKey ( mods ) ;
if ( ! IsKeyPressed ( key , owner_id , ( flags & ImGuiInputFlags_RepeatMask_ ) ) )
if ( ! IsKeyPressed ( key , ( flags & ImGuiInputFlags_RepeatMask_ ) , owner_id ) )
return false ;
return true ;
}
@ -9699,7 +9704,7 @@ bool ImGui::Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID own
if ( ( flags & ImGuiInputFlags_Repeat ) ! = 0 & & ( flags & ImGuiInputFlags_RepeatUntilMask_ ) = = 0 )
flags | = ImGuiInputFlags_RepeatUntilKeyModsChange ;
if ( ! IsKeyChordPressed ( key_chord , owner_id , flags ) )
if ( ! IsKeyChordPressed ( key_chord , flags , owner_id ) )
return false ;
IM_ASSERT ( ( flags & ~ ImGuiInputFlags_SupportedByShortcut ) = = 0 ) ; // Passing flags not supported by this function!
return true ;
@ -12130,9 +12135,9 @@ static void ImGui::NavUpdate()
if ( g . NavId ! = 0 & & ! g . NavDisableHighlight & & ! g . NavWindowingTarget & & g . NavWindow & & ! ( g . NavWindow - > Flags & ImGuiWindowFlags_NoNavInputs ) )
{
const bool activate_down = ( nav_keyboard_active & & IsKeyDown ( ImGuiKey_Space , ImGuiKeyOwner_NoOwner ) ) | | ( nav_gamepad_active & & IsKeyDown ( ImGuiKey_NavGamepadActivate , ImGuiKeyOwner_NoOwner ) ) ;
const bool activate_pressed = activate_down & & ( ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_Space , ImGuiKeyOwner_NoOwner ) ) | | ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_NavGamepadActivate , ImGuiKeyOwner_NoOwner ) ) ) ;
const bool activate_pressed = activate_down & & ( ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_Space , 0 , ImGuiKeyOwner_NoOwner ) ) | | ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_NavGamepadActivate , 0 , ImGuiKeyOwner_NoOwner ) ) ) ;
const bool input_down = ( nav_keyboard_active & & ( IsKeyDown ( ImGuiKey_Enter , ImGuiKeyOwner_NoOwner ) | | IsKeyDown ( ImGuiKey_KeypadEnter , ImGuiKeyOwner_NoOwner ) ) ) | | ( nav_gamepad_active & & IsKeyDown ( ImGuiKey_NavGamepadInput , ImGuiKeyOwner_NoOwner ) ) ;
const bool input_pressed = input_down & & ( ( nav_keyboard_active & & ( IsKeyPressed ( ImGuiKey_Enter , ImGuiKeyOwner_NoOwner ) | | IsKeyPressed ( ImGuiKey_KeypadEnter , ImGuiKeyOwner_NoOwner ) ) ) | | ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_NavGamepadInput , ImGuiKeyOwner_NoOwner ) ) ) ;
const bool input_pressed = input_down & & ( ( nav_keyboard_active & & ( IsKeyPressed ( ImGuiKey_Enter , 0 , ImGuiKeyOwner_NoOwner ) | | IsKeyPressed ( ImGuiKey_KeypadEnter , 0 , ImGuiKeyOwner_NoOwner ) ) ) | | ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_NavGamepadInput , 0 , ImGuiKeyOwner_NoOwner ) ) ) ;
if ( g . ActiveId = = 0 & & activate_pressed )
{
g . NavActivateId = g . NavId ;
@ -12306,10 +12311,10 @@ void ImGui::NavUpdateCreateMoveRequest()
if ( window & & ! g . NavWindowingTarget & & ! ( window - > Flags & ImGuiWindowFlags_NoNavInputs ) )
{
const ImGuiInputFlags repeat_mode = ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateNavMove ;
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Left ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadLeft , ImGuiKeyOwner_NoOwner , repeat_mode ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_LeftArrow , ImGuiKeyOwner_NoOwner , repeat_mode ) ) ) ) { g . NavMoveDir = ImGuiDir_Left ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Right ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadRight , ImGuiKeyOwner_NoOwner , repeat_mode ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_RightArrow , ImGuiKeyOwner_NoOwner , repeat_mode ) ) ) ) { g . NavMoveDir = ImGuiDir_Right ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Up ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadUp , ImGuiKeyOwner_NoOwner , repeat_mode ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_UpArrow , ImGuiKeyOwner_NoOwner , repeat_mode ) ) ) ) { g . NavMoveDir = ImGuiDir_Up ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Down ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadDown , ImGuiKeyOwner_NoOwner , repeat_mode ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_DownArrow , ImGuiKeyOwner_NoOwner , repeat_mode ) ) ) ) { g . NavMoveDir = ImGuiDir_Down ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Left ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadLeft , repeat_mode , ImGuiKeyOwner_NoOwner ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_LeftArrow , repeat_mode , ImGuiKeyOwner_NoOwner ) ) ) ) { g . NavMoveDir = ImGuiDir_Left ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Right ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadRight , repeat_mode , ImGuiKeyOwner_NoOwner ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_RightArrow , repeat_mode , ImGuiKeyOwner_NoOwner ) ) ) ) { g . NavMoveDir = ImGuiDir_Right ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Up ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadUp , repeat_mode , ImGuiKeyOwner_NoOwner ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_UpArrow , repeat_mode , ImGuiKeyOwner_NoOwner ) ) ) ) { g . NavMoveDir = ImGuiDir_Up ; }
if ( ! IsActiveIdUsingNavDir ( ImGuiDir_Down ) & & ( ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_GamepadDpadDown , repeat_mode , ImGuiKeyOwner_NoOwner ) ) | | ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_DownArrow , repeat_mode , ImGuiKeyOwner_NoOwner ) ) ) ) { g . NavMoveDir = ImGuiDir_Down ; }
}
g . NavMoveClipDir = g . NavMoveDir ;
g . NavScoringNoClipRect = ImRect ( + FLT_MAX , + FLT_MAX , - FLT_MAX , - FLT_MAX ) ;
@ -12405,7 +12410,7 @@ void ImGui::NavUpdateCreateTabbingRequest()
if ( window = = NULL | | g . NavWindowingTarget ! = NULL | | ( window - > Flags & ImGuiWindowFlags_NoNavInputs ) )
return ;
const bool tab_pressed = IsKeyPressed ( ImGuiKey_Tab , ImGuiKeyOwner_NoOwner , ImGuiInputFlags_Repeat ) & & ! g . IO . KeyCtrl & & ! g . IO . KeyAlt ;
const bool tab_pressed = IsKeyPressed ( ImGuiKey_Tab , ImGuiInputFlags_Repeat , ImGuiKeyOwner_NoOwner ) & & ! g . IO . KeyCtrl & & ! g . IO . KeyAlt ;
if ( ! tab_pressed )
return ;
@ -12543,7 +12548,7 @@ static void ImGui::NavUpdateCancelRequest()
ImGuiContext & g = * GImGui ;
const bool nav_gamepad_active = ( g . IO . ConfigFlags & ImGuiConfigFlags_NavEnableGamepad ) ! = 0 & & ( g . IO . BackendFlags & ImGuiBackendFlags_HasGamepad ) ! = 0 ;
const bool nav_keyboard_active = ( g . IO . ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard ) ! = 0 ;
if ( ! ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_Escape , ImGuiKeyOwner_NoOwner ) ) & & ! ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_NavGamepadCancel , ImGuiKeyOwner_NoOwner ) ) )
if ( ! ( nav_keyboard_active & & IsKeyPressed ( ImGuiKey_Escape , 0 , ImGuiKeyOwner_NoOwner ) ) & & ! ( nav_gamepad_active & & IsKeyPressed ( ImGuiKey_NavGamepadCancel , 0 , ImGuiKeyOwner_NoOwner ) ) )
return ;
IMGUI_DEBUG_LOG_NAV ( " [nav] NavUpdateCancelRequest() \n " ) ;
@ -12594,8 +12599,8 @@ static float ImGui::NavUpdatePageUpPageDown()
const bool page_up_held = IsKeyDown ( ImGuiKey_PageUp , ImGuiKeyOwner_NoOwner ) ;
const bool page_down_held = IsKeyDown ( ImGuiKey_PageDown , ImGuiKeyOwner_NoOwner ) ;
const bool home_pressed = IsKeyPressed ( ImGuiKey_Home , ImGuiKeyOwner_NoOwner , ImGuiInputFlags_Repeat ) ;
const bool end_pressed = IsKeyPressed ( ImGuiKey_End , ImGuiKeyOwner_NoOwner , ImGuiInputFlags_Repeat ) ;
const bool home_pressed = IsKeyPressed ( ImGuiKey_Home , ImGuiInputFlags_Repeat , ImGuiKeyOwner_NoOwner ) ;
const bool end_pressed = IsKeyPressed ( ImGuiKey_End , ImGuiInputFlags_Repeat , ImGuiKeyOwner_NoOwner ) ;
if ( page_up_held = = page_down_held & & home_pressed = = end_pressed ) // Proceed if either (not both) are pressed, otherwise early out
return 0.0f ;
@ -12605,9 +12610,9 @@ static float ImGui::NavUpdatePageUpPageDown()
if ( window - > DC . NavLayersActiveMask = = 0x00 & & window - > DC . NavWindowHasScrollY )
{
// Fallback manual-scroll when window has no navigable item
if ( IsKeyPressed ( ImGuiKey_PageUp , ImGuiKeyOwner_NoOwner , ImGuiInputFlags_Repeat ) )
if ( IsKeyPressed ( ImGuiKey_PageUp , ImGuiInputFlags_Repeat , ImGuiKeyOwner_NoOwner ) )
SetScrollY ( window , window - > Scroll . y - window - > InnerRect . GetHeight ( ) ) ;
else if ( IsKeyPressed ( ImGuiKey_PageDown , ImGuiKeyOwner_NoOwner , ImGuiInputFlags_Repeat ) )
else if ( IsKeyPressed ( ImGuiKey_PageDown , ImGuiInputFlags_Repeat , ImGuiKeyOwner_NoOwner ) )
SetScrollY ( window , window - > Scroll . y + window - > InnerRect . GetHeight ( ) ) ;
else if ( home_pressed )
SetScrollY ( window , 0.0f ) ;
@ -12802,7 +12807,7 @@ static void ImGui::NavUpdateWindowing()
const bool nav_keyboard_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard ) ! = 0 ;
const bool keyboard_next_window = allow_windowing & & g . ConfigNavWindowingKeyNext & & Shortcut ( g . ConfigNavWindowingKeyNext , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways , owner_id ) ;
const bool keyboard_prev_window = allow_windowing & & g . ConfigNavWindowingKeyPrev & & Shortcut ( g . ConfigNavWindowingKeyPrev , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways , owner_id ) ;
const bool start_windowing_with_gamepad = allow_windowing & & nav_gamepad_active & & ! g . NavWindowingTarget & & IsKeyPressed ( ImGuiKey_NavGamepadMenu , 0 , ImGuiInputFlags_None ) ;
const bool start_windowing_with_gamepad = allow_windowing & & nav_gamepad_active & & ! g . NavWindowingTarget & & IsKeyPressed ( ImGuiKey_NavGamepadMenu , ImGuiInputFlags_None ) ;
const bool start_windowing_with_keyboard = allow_windowing & & ! g . NavWindowingTarget & & ( keyboard_next_window | | keyboard_prev_window ) ; // Note: enabled even without NavEnableKeyboard!
if ( start_windowing_with_gamepad | | start_windowing_with_keyboard )
if ( ImGuiWindow * window = g . NavWindow ? g . NavWindow : FindWindowNavFocusable ( g . WindowsFocusOrder . Size - 1 , - INT_MAX , - 1 ) )
@ -12861,7 +12866,7 @@ static void ImGui::NavUpdateWindowing()
// Keyboard: Press and Release ALT to toggle menu layer
const ImGuiKey windowing_toggle_keys [ ] = { ImGuiKey_LeftAlt , ImGuiKey_RightAlt } ;
for ( ImGuiKey windowing_toggle_key : windowing_toggle_keys )
if ( nav_keyboard_active & & IsKeyPressed ( windowing_toggle_key , ImGuiKeyOwner_NoOwner ) )
if ( nav_keyboard_active & & IsKeyPressed ( windowing_toggle_key , 0 , ImGuiKeyOwner_NoOwner ) )
{
g . NavWindowingToggleLayer = true ;
g . NavWindowingToggleKey = windowing_toggle_key ;