From cea0e304992afb84bc381b13d09f140157c29a68 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Thu, 21 Jun 2012 13:35:35 +0200 Subject: [PATCH] Fixed cursor centering using wrong mode. --- readme.html | 1 + src/input.c | 28 ++++++++++++---------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/readme.html b/readme.html index 58324228..086f18f5 100644 --- a/readme.html +++ b/readme.html @@ -319,6 +319,7 @@ version of GLFW.

  • Bugfix: The default OpenGL version in the glfwinfo test was set to 1.1
  • Bugfix: The OpenGL profile and forward-compatibility window parameters were not saved after context creation
  • Bugfix: The FSAA test did not check for the availability of GL_ARB_multisample
  • +
  • Bugfix: Cursor centering upon leaving captured cursor mode was reported before the mode was changed to non-captured
  • [Cocoa] Added support for OpenGL 3.2 core profile in 10.7 Lion and above
  • [Cocoa] Added support for joysticks
  • [Cocoa] Postponed menu creation to first window creation
  • diff --git a/src/input.c b/src/input.c index ac37af0d..90ada563 100644 --- a/src/input.c +++ b/src/input.c @@ -35,37 +35,33 @@ // Sets the cursor mode for the specified window //======================================================================== -static void setCursorMode(_GLFWwindow* window, int mode) +static void setCursorMode(_GLFWwindow* window, int newMode) { - int centerPosX, centerPosY; + int oldMode, centerPosX, centerPosY; - if (mode != GLFW_CURSOR_NORMAL && - mode != GLFW_CURSOR_HIDDEN && - mode != GLFW_CURSOR_CAPTURED) + if (newMode != GLFW_CURSOR_NORMAL && + newMode != GLFW_CURSOR_HIDDEN && + newMode != GLFW_CURSOR_CAPTURED) { _glfwSetError(GLFW_INVALID_ENUM, NULL); return; } - if (window->cursorMode == mode) + oldMode = window->cursorMode; + if (oldMode == newMode) return; centerPosX = window->width / 2; centerPosY = window->height / 2; - if (mode == GLFW_CURSOR_CAPTURED) + if (oldMode == GLFW_CURSOR_CAPTURED || newMode == GLFW_CURSOR_CAPTURED) _glfwPlatformSetMouseCursorPos(window, centerPosX, centerPosY); - else if (window->cursorMode == GLFW_CURSOR_CAPTURED) - { - _glfwPlatformSetMouseCursorPos(window, centerPosX, centerPosY); - _glfwInputCursorMotion(window, - centerPosX - window->cursorPosX, - centerPosY - window->cursorPosY); - } - _glfwPlatformSetCursorMode(window, mode); + _glfwPlatformSetCursorMode(window, newMode); + window->cursorMode = newMode; - window->cursorMode = mode; + if (oldMode == GLFW_CURSOR_CAPTURED) + _glfwInputCursorMotion(window, window->cursorPosX, window->cursorPosY); }