@ -611,7 +611,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 = IsNavInputTest ( ImGuiNavInput_Activate , ( flags & ImGuiButtonFlags_Repeat ) ? ImGuiNavReadMode_Repeat : ImGuiNavReadMode_Pressed ) ;
bool nav_activated_by_inputs = ( flags & ImGuiButtonFlags_Repeat ) ? IsNavInputTest ( ImGuiNavInput_Activate , ImGuiNavReadMode_Repeat ) : IsNavInputPressed ( ImGuiNavInput_Activate ) ;
if ( nav_activated_by_code | | nav_activated_by_inputs )
{
// Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button.
@ -2789,25 +2789,27 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ
g . SliderCurrentAccumDirty = false ;
}
const ImVec2 input_delta2 = GetNavInputAmount2d ( ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad , ImGuiNavReadMode_RepeatFast , 0.0f , 0.0f ) ;
const ImVec2 input_delta2 = GetNavInputAmount2d ( ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad , ImGuiNavReadMode_RepeatFast ) ;
float input_delta = ( axis = = ImGuiAxis_X ) ? input_delta2 . x : - input_delta2 . y ;
if ( input_delta ! = 0.0f )
{
const bool tweak_slow = IsNavInputDown ( ImGuiNavInput_TweakSlow ) ;
const bool tweak_fast = IsNavInputDown ( ImGuiNavInput_TweakFast ) ;
const int decimal_precision = is_floating_point ? ImParseFormatPrecision ( format , 3 ) : 0 ;
if ( decimal_precision > 0 )
{
input_delta / = 100.0f ; // Gamepad/keyboard tweak speeds in % of slider bounds
if ( IsNavInputDown ( ImGuiNavInput_TweakSlow ) )
if ( tweak_slow )
input_delta / = 10.0f ;
}
else
{
if ( ( v_range > = - 100.0f & & v_range < = 100.0f ) | | IsNavInputDown ( ImGuiNavInput_TweakSlow ) )
if ( ( v_range > = - 100.0f & & v_range < = 100.0f ) | | tweak_slow )
input_delta = ( ( input_delta < 0.0f ) ? - 1.0f : + 1.0f ) / ( float ) v_range ; // Gamepad/keyboard tweak speeds in integer steps
else
input_delta / = 100.0f ;
}
if ( IsNavInputDown ( ImGuiNavInput_TweakFast ) )
if ( tweak_fast )
input_delta * = 10.0f ;
g . SliderCurrentAccum + = input_delta ;
@ -4340,8 +4342,8 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
// We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful.
const bool is_enter_pressed = IsKeyPressed ( ImGuiKey_Enter ) | | IsKeyPressed ( ImGuiKey_KeypadEnter ) ;
const bool is_validate_nav = ( IsNavInputTest ( ImGuiNavInput_Activate , ImGuiNavReadMode_Pressed ) & & ! IsKeyPressed ( ImGuiKey_Space ) ) | | IsNavInputTest ( ImGuiNavInput_Input , ImGuiNavReadMode_Pressed ) ;
const bool is_cancel = IsKeyPressed ( ImGuiKey_Escape ) | | IsNavInputTest ( ImGuiNavInput_Cancel , ImGuiNavReadMode_Pressed ) ;
const bool is_validate_nav = ( IsNavInputPressed ( ImGuiNavInput_Activate ) & & ! IsKeyPressed ( ImGuiKey_Space ) ) | | IsNavInputPressed ( ImGuiNavInput_Input ) ;
const bool is_cancel = IsKeyPressed ( ImGuiKey_Escape ) | | IsNavInputPressed ( ImGuiNavInput_Cancel ) ;
if ( IsKeyPressed ( ImGuiKey_LeftArrow ) ) { state - > OnKeyPressed ( ( is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT ) | k_mask ) ; }
else if ( IsKeyPressed ( ImGuiKey_RightArrow ) ) { state - > OnKeyPressed ( ( is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT ) | k_mask ) ; }