Removed use of cursor rectangles.

Poor use of cursor rectangles broke Lion full screen and led to rect
reset loop.  Cursor image is now updated only with the existing
enter/exit detection NSTrackingArea.

Fixes #339.
Fixes #375.
This commit is contained in:
Camilla Berglund 2014-12-29 19:00:53 +01:00
parent e57da19d4a
commit e480c76a11

View File

@ -64,30 +64,19 @@ static void centerCursor(_GLFWwindow *window)
_glfwPlatformSetCursorPos(window, width / 2.0, height / 2.0);
}
// Get the cursor object that window uses in the specified cursor mode
//
static NSCursor* getModeCursor(_GLFWwindow* window)
{
if (window->cursorMode == GLFW_CURSOR_NORMAL)
{
if (window->cursor)
return (NSCursor*) window->cursor->ns.object;
else
return [NSCursor arrowCursor];
}
else
return (NSCursor*) _glfw.ns.cursor;
}
// Update the cursor to match the specified cursor mode
//
static void updateModeCursor(_GLFWwindow* window)
{
// This is required for the cursor to update if it's inside the window
[getModeCursor(window) set];
// This is required for the cursor to update if it's outside the window
[window->ns.object invalidateCursorRectsForView:window->ns.view];
if (window->cursorMode == GLFW_CURSOR_NORMAL)
{
if (window->cursor)
[(NSCursor*) window->cursor->ns.object set];
else
[[NSCursor arrowCursor] set];
}
else
[(NSCursor*) _glfw.ns.cursor set];
}
// Enter fullscreen mode
@ -476,10 +465,11 @@ static int translateKey(unsigned int key)
[trackingArea release];
}
NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
NSTrackingActiveInKeyWindow |
NSTrackingCursorUpdate |
NSTrackingInVisibleRect;
const NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
NSTrackingActiveInKeyWindow |
NSTrackingCursorUpdate |
NSTrackingInVisibleRect |
NSTrackingAssumeInside;
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
options:options
@ -570,11 +560,6 @@ static int translateKey(unsigned int key)
_glfwInputScroll(window, deltaX, deltaY);
}
- (void)resetCursorRects
{
[self addCursorRect:[self bounds] cursor:getModeCursor(window)];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
if ((NSDragOperationGeneric & [sender draggingSourceOperationMask])