mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Inputs, Tooltip: Rework stationary timer logic as it broke on high-framerates with lower rate of mouse inputs. (#1485)
This commit is contained in:
		
							
								
								
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -8619,14 +8619,12 @@ static void ImGui::UpdateMouseInputs() | ||||
|     else | ||||
|         io.MouseDelta = ImVec2(0.0f, 0.0f); | ||||
|  | ||||
|     // Update stationary timer. Only reset on 2 successive moving frames. | ||||
|     // FIXME: May need to expose threshold or treat touch inputs differently. | ||||
|     // Update stationary timer. | ||||
|     // FIXME: May need to rework again to have some tolerance for occasional small movement, while being functional on high-framerates. | ||||
|     const float mouse_stationary_threshold = (io.MouseSource == ImGuiMouseSource_Mouse) ? 2.0f : 3.0f; // Slightly higher threshold for ImGuiMouseSource_TouchScreen/ImGuiMouseSource_Pen, may need rework. | ||||
|     g.MouseMovingFrames = (ImLengthSqr(io.MouseDelta) >= mouse_stationary_threshold * mouse_stationary_threshold) ? (g.MouseMovingFrames + 1) : 0; | ||||
|     if (g.MouseMovingFrames == 0) | ||||
|         g.MouseStationaryTimer += io.DeltaTime; | ||||
|     else if (g.MouseMovingFrames > 1) | ||||
|         g.MouseStationaryTimer = 0.0f; | ||||
|     const bool mouse_stationary = (ImLengthSqr(io.MouseDelta) <= mouse_stationary_threshold * mouse_stationary_threshold); | ||||
|     g.MouseStationaryTimer = mouse_stationary ? (g.MouseStationaryTimer + io.DeltaTime) : 0.0f; | ||||
|     //IMGUI_DEBUG_LOG("%.4f\n", g.MouseStationaryTimer); | ||||
|  | ||||
|     // If mouse moved we re-enable mouse hovering in case it was disabled by gamepad/keyboard. In theory should use a >0.0f threshold but would need to reset in everywhere we set this to true. | ||||
|     if (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user