mirror of https://github.com/encounter/SDL.git
Fixed bug 4255 - SDL_GetGlobalMouseState() returns incorrect Y on secondary display
Julian Raschke I use an open Mac laptop with an additional external monitor. The coordinate spaces from SDL_GetGlobalMouseState() and SDL_GetWindowPosition() match on the primary display, but not on the secondary display. Cocoa window coordinates are vertically flipped in relation to the primary display: https://github.com/spurious/SDL-mirror/blob/release-2.0.8/src/video/cocoa/SDL_cocoawindow.m#L219-L222 However, Cocoa_GetGlobalMouseState inverts the cursor Y coordinate per-display: https://github.com/spurious/SDL-mirror/blob/release-2.0.8/src/video/cocoa/SDL_cocoamouse.m#L320-L323 Suggested fix: Replace the for-loop with this simpler calculation: *x = (int) cocoaLocation.x; *y = (int) (CGDisplayPixelsHigh(kCGDirectMainDisplay) - cocoaLocation.y);
This commit is contained in:
parent
5e13087b0f
commit
d4c0f498db
|
@ -315,14 +315,8 @@ Cocoa_GetGlobalMouseState(int *x, int *y)
|
||||||
const NSPoint cocoaLocation = [NSEvent mouseLocation];
|
const NSPoint cocoaLocation = [NSEvent mouseLocation];
|
||||||
Uint32 retval = 0;
|
Uint32 retval = 0;
|
||||||
|
|
||||||
for (NSScreen *screen in [NSScreen screens]) {
|
*x = (int) cocoaLocation.x;
|
||||||
NSRect frame = [screen frame];
|
*y = (int) (CGDisplayPixelsHigh(kCGDirectMainDisplay) - cocoaLocation.y);
|
||||||
if (NSMouseInRect(cocoaLocation, frame, NO)) {
|
|
||||||
*x = (int) cocoaLocation.x;
|
|
||||||
*y = (int) ((frame.origin.y + frame.size.height) - cocoaLocation.y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
retval |= (cocoaButtons & (1 << 0)) ? SDL_BUTTON_LMASK : 0;
|
retval |= (cocoaButtons & (1 << 0)) ? SDL_BUTTON_LMASK : 0;
|
||||||
retval |= (cocoaButtons & (1 << 1)) ? SDL_BUTTON_RMASK : 0;
|
retval |= (cocoaButtons & (1 << 1)) ? SDL_BUTTON_RMASK : 0;
|
||||||
|
|
Loading…
Reference in New Issue