|
|
|
@ -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))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|