Cocoa mouse code: Replaced NSPointInRect with NSMouseInRect (thanks Eric Wasylishen!) Fixes bug #3312.
authorAlex Szpakowski <slime73@gmail.com>
Sun, 01 May 2016 21:41:30 -0300
changeset 10159 d41acf6379f6
parent 10158 941261e0db9f
child 10160 63efcc489846
Cocoa mouse code: Replaced NSPointInRect with NSMouseInRect (thanks Eric Wasylishen!) Fixes bug #3312.
src/video/cocoa/SDL_cocoamouse.m
src/video/cocoa/SDL_cocoamousetap.m
src/video/cocoa/SDL_cocoawindow.m
--- 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;
         }
     }