Keep cursor centered in window while captured.

Previously, cmd-tabbing out would result in the cursor position maybe
ending up outside the window, so if one cmd-tabbed back in with the
cursor still outside, any click would go outside the window and cause
it to lose focus. Not really a good thing. So, this is a bit of a hack,
but it works.
This commit is contained in:
Noel Cower 2013-04-16 16:35:14 -06:00
parent 94853a3a05
commit 1f148f2bd6

View File

@ -48,6 +48,16 @@
@implementation GLFWWindowDelegate @implementation GLFWWindowDelegate
static void resetMouseCursor(_GLFWwindow *window)
{
if (window->cursorMode == GLFW_CURSOR_CAPTURED)
{
int width, height;
_glfwPlatformGetWindowSize(window, &width, &height);
_glfwPlatformSetCursorPos(window, width / 2, height / 2);
}
}
- (id)initWithGlfwWindow:(_GLFWwindow *)initWindow - (id)initWithGlfwWindow:(_GLFWwindow *)initWindow
{ {
self = [super init]; self = [super init];
@ -70,6 +80,8 @@
int width, height; int width, height;
_glfwPlatformGetWindowSize(window, &width, &height); _glfwPlatformGetWindowSize(window, &width, &height);
_glfwInputWindowSize(window, width, height); _glfwInputWindowSize(window, width, height);
resetMouseCursor(window);
} }
- (void)windowDidMove:(NSNotification *)notification - (void)windowDidMove:(NSNotification *)notification
@ -79,6 +91,8 @@
int x, y; int x, y;
_glfwPlatformGetWindowPos(window, &x, &y); _glfwPlatformGetWindowPos(window, &x, &y);
_glfwInputWindowPos(window, x, y); _glfwInputWindowPos(window, x, y);
resetMouseCursor(window);
} }
- (void)windowDidMiniaturize:(NSNotification *)notification - (void)windowDidMiniaturize:(NSNotification *)notification
@ -94,6 +108,8 @@
- (void)windowDidBecomeKey:(NSNotification *)notification - (void)windowDidBecomeKey:(NSNotification *)notification
{ {
_glfwInputWindowFocus(window, GL_TRUE); _glfwInputWindowFocus(window, GL_TRUE);
resetMouseCursor(window);
} }
- (void)windowDidResignKey:(NSNotification *)notification - (void)windowDidResignKey:(NSNotification *)notification