Cocoa mouse code: Replaced NSPointInRect with NSMouseInRect (thanks Eric Wasylishen!) Fixes bug #3312.

Alex Szpakowski 2016-05-01 21:41:30 -03:00
parent d383502657
commit b15efce277
3 changed files with 7 additions and 14 deletions

View File

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

View File

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

View File

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