Browse Source

Bugfix: Fix cursor getting stuck when attempting to drag scene handles on macOS

bearishsun 6 years ago
parent
commit
248fdb9ff1
1 changed files with 6 additions and 2 deletions
  1. 6 2
      Source/EditorScript/Wrappers/BsScriptSceneHandles.cpp

+ 6 - 2
Source/EditorScript/Wrappers/BsScriptSceneHandles.cpp

@@ -44,7 +44,8 @@ namespace bs
 
 
 		SPtr<RenderWindow> parentWindow = mParentWidget->getParentWindow()->getRenderWindow();
 		SPtr<RenderWindow> parentWindow = mParentWidget->getParentWindow()->getRenderWindow();
 
 
-		Vector2I windowPos = parentWindow->screenToWindowPos(Cursor::instance().getScreenPosition());
+		Vector2I screenPos = Cursor::instance().getScreenPosition();
+		Vector2I windowPos = parentWindow->screenToWindowPos(screenPos);
 		const RenderWindowProperties& rwProps = parentWindow->getProperties();
 		const RenderWindowProperties& rwProps = parentWindow->getProperties();
 
 
 		INT32 maxWidth = std::max(0, (INT32)rwProps.width - 1);
 		INT32 maxWidth = std::max(0, (INT32)rwProps.width - 1);
@@ -64,7 +65,10 @@ namespace bs
 		windowPos += offset;
 		windowPos += offset;
 
 
 		Vector2I wrappedScreenPos = parentWindow->windowToScreenPos(windowPos);
 		Vector2I wrappedScreenPos = parentWindow->windowToScreenPos(windowPos);
-		Cursor::instance().setScreenPosition(wrappedScreenPos);
+
+		// This check is important for macOS, where continuously setting the position will freeze the cursor in place
+		if(wrappedScreenPos != screenPos)
+			Cursor::instance().setScreenPosition(wrappedScreenPos);
 
 
 		return offset;
 		return offset;
 	}
 	}