Cocoa mouse code: Replaced NSPointInRect with NSMouseInRect (thanks Eric Wasylishen!) Fixes bug #3312.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m
index 82bdc48..aa753fc 100644
--- a/src/video/cocoa/SDL_cocoamouse.m
+++ b/src/video/cocoa/SDL_cocoamouse.m
@@ -316,7 +316,7 @@ Cocoa_GetGlobalMouseState(int *x, int *y)
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 @@ Cocoa_HandleMouseEvent(_THIS, NSEvent *event)
/* 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;
}
}
diff --git a/src/video/cocoa/SDL_cocoamousetap.m b/src/video/cocoa/SDL_cocoamousetap.m
index f1bd0e8..2075e2c 100644
--- a/src/video/cocoa/SDL_cocoamousetap.m
+++ b/src/video/cocoa/SDL_cocoamousetap.m
@@ -96,7 +96,7 @@ Cocoa_MouseTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event
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 @@ Cocoa_MouseTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event
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);
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index 0c89a46..4435d8d 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -839,14 +839,7 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
/* 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;
}
}