mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Made mouse drag distance calculation more robust to invalid mouse position. (#1845)
This commit is contained in:
		
							
								
								
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -3418,7 +3418,8 @@ static void ImGui::UpdateMouseInputs() | ||||
|         { | ||||
|             if (g.Time - g.IO.MouseClickedTime[i] < g.IO.MouseDoubleClickTime) | ||||
|             { | ||||
|                 if (ImLengthSqr(g.IO.MousePos - g.IO.MouseClickedPos[i]) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist) | ||||
|                 ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); | ||||
|                 if (ImLengthSqr(delta_from_click_pos) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist) | ||||
|                     g.IO.MouseDoubleClicked[i] = true; | ||||
|                 g.IO.MouseClickedTime[i] = -FLT_MAX;    // so the third click isn't turned into a double-click | ||||
|             } | ||||
| @@ -3432,10 +3433,11 @@ static void ImGui::UpdateMouseInputs() | ||||
|         } | ||||
|         else if (g.IO.MouseDown[i]) | ||||
|         { | ||||
|             ImVec2 mouse_delta = g.IO.MousePos - g.IO.MouseClickedPos[i]; | ||||
|             g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, mouse_delta.x < 0.0f ? -mouse_delta.x : mouse_delta.x); | ||||
|             g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, mouse_delta.y < 0.0f ? -mouse_delta.y : mouse_delta.y); | ||||
|             g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(mouse_delta)); | ||||
|             // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold | ||||
|             ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); | ||||
|             g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(delta_from_click_pos)); | ||||
|             g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x); | ||||
|             g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y); | ||||
|         } | ||||
|         if (g.IO.MouseClicked[i]) // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation | ||||
|             g.NavDisableMouseHover = false; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user