Move global data to library struct.  Simplify semantics.  Update
changelog.

Related to #1028.
This commit is contained in:
Camilla Löwy 2017-08-22 20:40:07 +02:00
parent 80e4922b5e
commit ce5e649d3b
3 changed files with 23 additions and 12 deletions

View File

@ -224,6 +224,8 @@ information on what to include when reporting a bug.
- [Cocoa] Bugfix: Full screen framebuffer was incorrectly sized for some video
modes (#682)
- [Cocoa] Bugfix: A string object for IME was updated non-idiomatically (#1050)
- [Cocoa] Bugfix: A hidden or disabled cursor would become visible when a user
notification was shown (#971,#1028)
- [WGL] Added support for `WGL_EXT_colorspace` for OpenGL ES contexts
- [WGL] Added support for `WGL_ARB_create_context_no_error`
- [GLX] Added support for `GLX_ARB_create_context_no_error`

View File

@ -102,6 +102,7 @@ typedef struct _GLFWlibraryNS
CGEventSourceRef eventSource;
id delegate;
id autoreleasePool;
GLFWbool cursorHidden;
TISInputSourceRef inputSource;
IOHIDManagerRef hidManager;
id unicodeData;

View File

@ -88,18 +88,26 @@ static GLFWbool cursorInClientArea(_GLFWwindow* window)
return [window->ns.view mouse:pos inRect:[window->ns.view frame]];
}
// Updates cursor visibility
// Hides the cursor if not already hidden
//
static void setCursorVisibility(_GLFWwindow* window, BOOL makeVisible)
static void hideCursor(_GLFWwindow* window)
{
static BOOL isCursorVisible = YES;
if (makeVisible && !isCursorVisible)
[NSCursor unhide];
else if (!makeVisible && isCursorVisible)
if (!_glfw.ns.cursorHidden)
{
[NSCursor hide];
_glfw.ns.cursorHidden = GLFW_TRUE;
}
}
isCursorVisible = makeVisible;
// Shows the cursor if not already shown
//
static void showCursor(_GLFWwindow* window)
{
if (_glfw.ns.cursorHidden)
{
[NSCursor unhide];
_glfw.ns.cursorHidden = GLFW_FALSE;
}
}
// Updates the cursor image according to its cursor mode
@ -108,7 +116,7 @@ static void updateCursorImage(_GLFWwindow* window)
{
if (window->cursorMode == GLFW_CURSOR_NORMAL)
{
setCursorVisibility(window, YES);
showCursor(window);
if (window->cursor)
[(NSCursor*) window->cursor->ns.object set];
@ -116,7 +124,7 @@ static void updateCursorImage(_GLFWwindow* window)
[[NSCursor arrowCursor] set];
}
else
setCursorVisibility(window, NO);
hideCursor(window);
}
// Transforms the specified y-coordinate between the CG display and NS screen
@ -525,7 +533,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
- (void)mouseExited:(NSEvent *)event
{
if (window->cursorMode == GLFW_CURSOR_HIDDEN)
setCursorVisibility(window, YES);
showCursor(window);
_glfwInputCursorEnter(window, GLFW_FALSE);
}
@ -533,7 +541,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
- (void)mouseEntered:(NSEvent *)event
{
if (window->cursorMode == GLFW_CURSOR_HIDDEN)
setCursorVisibility(window, NO);
hideCursor(window);
_glfwInputCursorEnter(window, GLFW_TRUE);
}