@ -2739,14 +2739,14 @@ ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInput
{
ImVec2 delta ( 0.0f , 0.0f ) ;
if ( dir_sources & ImGuiNavDirSourceFlags_Keyboard )
delta + = ImVec2 ( GetNavInputAmount ( ImGuiNavInput_KeyRight , mode ) - GetNavInputAmount ( ImGuiNavInput_KeyLeft , mode ) , GetNavInputAmount ( ImGuiNavInput_KeyDown , mode ) - GetNavInputAmount ( ImGuiNavInput_KeyUp , mode ) ) ;
delta + = ImVec2 ( GetNavInputAmount ( ImGuiNavInput_KeyRight _ , mode ) - GetNavInputAmount ( ImGuiNavInput_KeyLeft _ , mode ) , GetNavInputAmount ( ImGuiNavInput_KeyDown _ , mode ) - GetNavInputAmount ( ImGuiNavInput_KeyUp _ , mode ) ) ;
if ( dir_sources & ImGuiNavDirSourceFlags_PadDPad )
delta + = ImVec2 ( GetNavInputAmount ( ImGuiNavInput_ Pad DpadRight, mode ) - GetNavInputAmount ( ImGuiNavInput_ Pad DpadLeft, mode ) , GetNavInputAmount ( ImGuiNavInput_ Pad DpadDown, mode ) - GetNavInputAmount ( ImGuiNavInput_ Pad DpadUp, mode ) ) ;
delta + = ImVec2 ( GetNavInputAmount ( ImGuiNavInput_ DpadRight, mode ) - GetNavInputAmount ( ImGuiNavInput_ DpadLeft, mode ) , GetNavInputAmount ( ImGuiNavInput_ DpadDown, mode ) - GetNavInputAmount ( ImGuiNavInput_ DpadUp, mode ) ) ;
if ( dir_sources & ImGuiNavDirSourceFlags_PadLStick )
delta + = ImVec2 ( GetNavInputAmount ( ImGuiNavInput_ Pad LStickRight, mode ) - GetNavInputAmount ( ImGuiNavInput_ Pad LStickLeft, mode ) , GetNavInputAmount ( ImGuiNavInput_ Pad LStickDown, mode ) - GetNavInputAmount ( ImGuiNavInput_ Pad LStickUp, mode ) ) ;
if ( slow_factor ! = 0.0f & & IsNavInputDown ( ImGuiNavInput_ Pad TweakSlow) )
delta + = ImVec2 ( GetNavInputAmount ( ImGuiNavInput_ LStickRight, mode ) - GetNavInputAmount ( ImGuiNavInput_ LStickLeft, mode ) , GetNavInputAmount ( ImGuiNavInput_ LStickDown, mode ) - GetNavInputAmount ( ImGuiNavInput_ LStickUp, mode ) ) ;
if ( slow_factor ! = 0.0f & & IsNavInputDown ( ImGuiNavInput_ TweakSlow) )
delta * = slow_factor ;
if ( fast_factor ! = 0.0f & & IsNavInputDown ( ImGuiNavInput_ Pad TweakFast) )
if ( fast_factor ! = 0.0f & & IsNavInputDown ( ImGuiNavInput_ TweakFast) )
delta * = fast_factor ;
return delta ;
}
@ -2773,7 +2773,7 @@ static void ImGui::NavUpdateWindowing()
ImGuiWindow * apply_focus_window = NULL ;
bool apply_toggle_layer = false ;
bool start_windowing_with_gamepad = ! g . NavWindowingTarget & & IsNavInputPressed ( ImGuiNavInput_ Pad Menu, ImGuiInputReadMode_Pressed ) ;
bool start_windowing_with_gamepad = ! g . NavWindowingTarget & & IsNavInputPressed ( ImGuiNavInput_ Menu, ImGuiInputReadMode_Pressed ) ;
bool start_windowing_with_keyboard = ! g . NavWindowingTarget & & g . IO . KeyCtrl & & IsKeyPressedMap ( ImGuiKey_Tab ) & & ( g . IO . NavFlags & ImGuiNavFlags_EnableKeyboard ) ;
if ( start_windowing_with_gamepad | | start_windowing_with_keyboard )
if ( ImGuiWindow * window = g . NavWindow ? g . NavWindow : FindWindowNavigable ( g . Windows . Size - 1 , - INT_MAX , - 1 ) )
@ -2792,7 +2792,7 @@ static void ImGui::NavUpdateWindowing()
g . NavWindowingHighlightAlpha = ImMax ( g . NavWindowingHighlightAlpha , ImSaturate ( ( g . NavWindowingHighlightTimer - 0.20f ) / 0.05f ) ) ;
// Select window to focus
const int focus_change_dir = ( int ) IsNavInputPressed ( ImGuiNavInput_ Pad FocusPrev, ImGuiInputReadMode_RepeatSlow ) - ( int ) IsNavInputPressed ( ImGuiNavInput_ Pad FocusNext, ImGuiInputReadMode_RepeatSlow ) ;
const int focus_change_dir = ( int ) IsNavInputPressed ( ImGuiNavInput_ FocusPrev, ImGuiInputReadMode_RepeatSlow ) - ( int ) IsNavInputPressed ( ImGuiNavInput_ FocusNext, ImGuiInputReadMode_RepeatSlow ) ;
if ( focus_change_dir ! = 0 )
{
NavUpdateWindowingHighlightWindow ( focus_change_dir ) ;
@ -2800,7 +2800,7 @@ static void ImGui::NavUpdateWindowing()
}
// Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered front-most)
if ( ! IsNavInputDown ( ImGuiNavInput_ Pad Menu) )
if ( ! IsNavInputDown ( ImGuiNavInput_ Menu) )
{
g . NavWindowingToggleLayer & = ( g . NavWindowingHighlightAlpha < 1.0f ) ; // Once button was held long enough we don't consider it a tap-to-toggle-layer press anymore.
if ( g . NavWindowingToggleLayer & & g . NavWindow )
@ -2824,7 +2824,7 @@ static void ImGui::NavUpdateWindowing()
// Keyboard: Press and Release ALT to toggle menu layer
// FIXME: We lack an explicit IO variable for "is the imgui window focused", so compare mouse validity to detect the common case of back-end clearing releases all keys on ALT-TAB
if ( ( g . ActiveId = = 0 | | g . ActiveIdAllowOverlap ) & & IsNavInputPressed ( ImGuiNavInput_KeyMenu , ImGuiInputReadMode_Released ) )
if ( ( g . ActiveId = = 0 | | g . ActiveIdAllowOverlap ) & & IsNavInputPressed ( ImGuiNavInput_KeyMenu _ , ImGuiInputReadMode_Released ) )
if ( IsMousePosValid ( & g . IO . MousePos ) = = IsMousePosValid ( & g . IO . MousePosPrev ) )
apply_toggle_layer = true ;
@ -3003,7 +3003,7 @@ static void ImGui::NavUpdate()
g . IO . NavVisible = ( g . IO . NavActive & & g . NavId ! = 0 & & ! g . NavDisableHighlight ) | | ( g . NavWindowingTarget ! = NULL ) | | g . NavInitRequest ;
// Process NavCancel input (to close a popup, get back to parent, clear focus)
if ( IsNavInputPressed ( ImGuiNavInput_ Pad Cancel, ImGuiInputReadMode_Pressed ) )
if ( IsNavInputPressed ( ImGuiNavInput_ Cancel, ImGuiInputReadMode_Pressed ) )
{
if ( g . ActiveId ! = 0 )
{
@ -3045,15 +3045,15 @@ static void ImGui::NavUpdate()
g . NavActivateId = g . NavActivateDownId = g . NavActivatePressedId = g . NavInputId = 0 ;
if ( g . NavId ! = 0 & & ! g . NavDisableHighlight & & ! g . NavWindowingTarget & & g . NavWindow & & ! ( g . NavWindow - > Flags & ImGuiWindowFlags_NoNavInputs ) )
{
bool activate_down = IsNavInputDown ( ImGuiNavInput_ Pad Activate) ;
bool activate_pressed = activate_down & & IsNavInputPressed ( ImGuiNavInput_ Pad Activate, ImGuiInputReadMode_Pressed ) ;
bool activate_down = IsNavInputDown ( ImGuiNavInput_ Activate) ;
bool activate_pressed = activate_down & & IsNavInputPressed ( ImGuiNavInput_ Activate, ImGuiInputReadMode_Pressed ) ;
if ( g . ActiveId = = 0 & & activate_pressed )
g . NavActivateId = g . NavId ;
if ( ( g . ActiveId = = 0 | | g . ActiveId = = g . NavId ) & & activate_down )
g . NavActivateDownId = g . NavId ;
if ( ( g . ActiveId = = 0 | | g . ActiveId = = g . NavId ) & & activate_pressed )
g . NavActivatePressedId = g . NavId ;
if ( ( g . ActiveId = = 0 | | g . ActiveId = = g . NavId ) & & IsNavInputPressed ( ImGuiNavInput_ Pad Input, ImGuiInputReadMode_Pressed ) )
if ( ( g . ActiveId = = 0 | | g . ActiveId = = g . NavId ) & & IsNavInputPressed ( ImGuiNavInput_ Input, ImGuiInputReadMode_Pressed ) )
g . NavInputId = g . NavId ;
}
if ( g . NavWindow & & ( g . NavWindow - > Flags & ImGuiWindowFlags_NoNavInputs ) )
@ -3074,10 +3074,10 @@ static void ImGui::NavUpdate()
g . NavMoveDir = ImGuiDir_None ;
if ( g . NavWindow & & ! g . NavWindowingTarget & & allowed_dir_flags & & ! ( g . NavWindow - > Flags & ImGuiWindowFlags_NoNavInputs ) )
{
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Left ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ Pad DpadLeft, ImGuiNavInput_KeyLeft , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Left ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Right ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ Pad DpadRight, ImGuiNavInput_KeyRight , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Right ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Up ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ Pad DpadUp, ImGuiNavInput_KeyUp , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Up ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Down ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ Pad DpadDown, ImGuiNavInput_KeyDown , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Down ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Left ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ DpadLeft, ImGuiNavInput_KeyLeft _ , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Left ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Right ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ DpadRight, ImGuiNavInput_KeyRight _ , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Right ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Up ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ DpadUp, ImGuiNavInput_KeyUp _ , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Up ;
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Down ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_ DpadDown, ImGuiNavInput_KeyDown _ , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Down ;
}
}
else
@ -7478,7 +7478,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
if ( g . NavActivateDownId = = id )
{
bool nav_activated_by_code = ( g . NavActivateId = = id ) ;
bool nav_activated_by_inputs = IsNavInputPressed ( ImGuiNavInput_ Pad Activate, ( flags & ImGuiButtonFlags_Repeat ) ? ImGuiInputReadMode_Repeat : ImGuiInputReadMode_Pressed ) ;
bool nav_activated_by_inputs = IsNavInputPressed ( ImGuiNavInput_ Activate, ( flags & ImGuiButtonFlags_Repeat ) ? ImGuiInputReadMode_Repeat : ImGuiInputReadMode_Pressed ) ;
if ( nav_activated_by_code | | nav_activated_by_inputs )
pressed = true ;
if ( nav_activated_by_code | | nav_activated_by_inputs | | g . ActiveId = = id )
@ -8548,7 +8548,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v
clicked_t = SliderBehaviorCalcRatioFromValue ( * v , v_min , v_max , power , linear_zero_pos ) ;
if ( decimal_precision = = 0 & & ! is_non_linear )
{
if ( fabsf ( v_max - v_min ) < = 100.0f | | IsNavInputDown ( ImGuiNavInput_ Pad TweakSlow) )
if ( fabsf ( v_max - v_min ) < = 100.0f | | IsNavInputDown ( ImGuiNavInput_ TweakSlow) )
delta = ( ( delta < 0.0f ) ? - 1.0f : + 1.0f ) / ( v_max - v_min ) ; // Gamepad/keyboard tweak speeds in integer steps
else
delta / = 100.0f ;
@ -8556,10 +8556,10 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v
else
{
delta / = 100.0f ; // Gamepad/keyboard tweak speeds in % of slider bounds
if ( IsNavInputDown ( ImGuiNavInput_ Pad TweakSlow) )
if ( IsNavInputDown ( ImGuiNavInput_ TweakSlow) )
delta / = 10.0f ;
}
if ( IsNavInputDown ( ImGuiNavInput_ Pad TweakFast) )
if ( IsNavInputDown ( ImGuiNavInput_ TweakFast) )
delta * = 10.0f ;
set_new_value = true ;
if ( ( clicked_t > = 1.0f & & delta > 0.0f ) | | ( clicked_t < = 0.0f & & delta < 0.0f ) ) // This is to avoid applying the saturation when already past the limits