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