Cocoa mouse code: Replaced NSPointInRect with NSMouseInRect (thanks Eric Wasylishen!) Fixes bug #3312.
--- a/src/video/cocoa/SDL_cocoamouse.m Sun May 01 19:51:10 2016 -0300
+++ b/src/video/cocoa/SDL_cocoamouse.m Sun May 01 21:41:30 2016 -0300
@@ -316,7 +316,7 @@
for (NSScreen *screen in [NSScreen screens]) {
NSRect frame = [screen frame];
- if (NSPointInRect(cocoaLocation, frame)) {
+ if (NSMouseInRect(cocoaLocation, frame, NO)) {
*x = (int) cocoaLocation.x;
*y = (int) ((frame.origin.y + frame.size.height) - cocoaLocation.y);
break;
@@ -398,7 +398,7 @@
/* Ignore events that aren't inside the client area (i.e. title bar.) */
if ([event window]) {
NSRect windowRect = [[[event window] contentView] frame];
- if (!NSPointInRect([event locationInWindow], windowRect)) {
+ if (!NSMouseInRect([event locationInWindow], windowRect, NO)) {
return;
}
}
--- a/src/video/cocoa/SDL_cocoamousetap.m Sun May 01 19:51:10 2016 -0300
+++ b/src/video/cocoa/SDL_cocoamousetap.m Sun May 01 21:41:30 2016 -0300
@@ -96,7 +96,7 @@
eventLocation = CGEventGetUnflippedLocation(event);
windowRect = [nswindow contentRectForFrameRect:[nswindow frame]];
- if (!NSPointInRect(NSPointFromCGPoint(eventLocation), windowRect)) {
+ if (!NSMouseInRect(NSPointFromCGPoint(eventLocation), windowRect, NO)) {
/* This is in CGs global screenspace coordinate system, which has a
* flipped Y.
@@ -109,10 +109,10 @@
newLocation.x = NSMaxX(windowRect) - 1.0;
}
- if (eventLocation.y < NSMinY(windowRect)) {
+ if (eventLocation.y <= NSMinY(windowRect)) {
newLocation.y -= (NSMinY(windowRect) - eventLocation.y + 1);
- } else if (eventLocation.y >= NSMaxY(windowRect)) {
- newLocation.y += (eventLocation.y - NSMaxY(windowRect) + 1);
+ } else if (eventLocation.y > NSMaxY(windowRect)) {
+ newLocation.y += (eventLocation.y - NSMaxY(windowRect));
}
CGWarpMouseCursorPosition(newLocation);
--- a/src/video/cocoa/SDL_cocoawindow.m Sun May 01 19:51:10 2016 -0300
+++ b/src/video/cocoa/SDL_cocoawindow.m Sun May 01 21:41:30 2016 -0300
@@ -839,14 +839,7 @@
/* Ignore events that aren't inside the client area (i.e. title bar.) */
if ([theEvent window]) {
NSRect windowRect = [[[theEvent window] contentView] frame];
-
- /* add one to size, since NSPointInRect is exclusive of the bottom
- edges, which mean it misses the top of the window by one pixel
- (as the origin is the bottom left). */
- windowRect.size.width += 1;
- windowRect.size.height += 1;
-
- if (!NSPointInRect([theEvent locationInWindow], windowRect)) {
+ if (!NSMouseInRect([theEvent locationInWindow], windowRect, NO)) {
return;
}
}