Browse Source

Fixed cursor positioning on OS X.

Camilla Berglund 12 years ago
parent
commit
0b5de6dd28
1 changed files with 16 additions and 10 deletions
  1. 16 10
      src/cocoa_window.m

+ 16 - 10
src/cocoa_window.m

@@ -60,6 +60,15 @@ static void leaveFullscreenMode(_GLFWwindow* window)
     [window->ns.view exitFullScreenModeWithOptions:nil];
 }
 
+// Transforms the specified y-coordinate between the CG display and NS screen
+// coordinate systems
+//
+static float transformY(float y)
+{
+    const float height = CGDisplayBounds(CGMainDisplayID()).size.height;
+    return height - y;
+}
+
 
 //------------------------------------------------------------------------
 // Delegate for window related notifications
@@ -941,21 +950,18 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
 {
     if (window->monitor)
     {
-        CGPoint globalPoint = CGPointMake(x, y);
-        CGDisplayMoveCursorToPoint(CGMainDisplayID(), globalPoint);
+        CGDisplayMoveCursorToPoint(window->monitor->ns.displayID,
+                                   CGPointMake(x, y));
     }
     else
     {
         const NSRect contentRect =
             [window->ns.object contentRectForFrameRect:[window->ns.object frame]];
-        NSPoint localPoint = NSMakePoint(x, contentRect.size.height - y - 1);
-        NSPoint globalPoint = [window->ns.object convertBaseToScreen:localPoint];
-        CGPoint mainScreenOrigin = CGDisplayBounds(CGMainDisplayID()).origin;
-        double mainScreenHeight = CGDisplayBounds(CGMainDisplayID()).size.height;
-        CGPoint targetPoint = CGPointMake(globalPoint.x - mainScreenOrigin.x,
-                                          mainScreenHeight - globalPoint.y -
-                                            mainScreenOrigin.y);
-        CGDisplayMoveCursorToPoint(CGMainDisplayID(), targetPoint);
+        const NSPoint localPoint = NSMakePoint(x, contentRect.size.height - y - 1);
+        const NSPoint globalPoint = [window->ns.object convertBaseToScreen:localPoint];
+
+        CGWarpMouseCursorPosition(CGPointMake(globalPoint.x,
+                                              transformY(globalPoint.y)));
     }
 }