mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 12:41:06 +01:00 
			
		
		
		
	Nav: Fix regression 93f02ee + Internals: Remove ImGuiNavReadMode_Pressed, ImGuiNavReadMode_Released.
				
					
				
			Toward using keys.
This commit is contained in:
		| @@ -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); } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user