mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 21:14:35 +00:00
Restore cursor position on capture mode exit.
This commit is contained in:
parent
648c8e7371
commit
008376d450
21
src/input.c
21
src/input.c
@ -38,8 +38,7 @@
|
||||
//
|
||||
static void setCursorMode(_GLFWwindow* window, int newMode)
|
||||
{
|
||||
int width, height, oldMode;
|
||||
double centerPosX, centerPosY;
|
||||
int oldMode;
|
||||
|
||||
if (newMode != GLFW_CURSOR_NORMAL &&
|
||||
newMode != GLFW_CURSOR_HIDDEN &&
|
||||
@ -53,19 +52,21 @@ static void setCursorMode(_GLFWwindow* window, int newMode)
|
||||
if (oldMode == newMode)
|
||||
return;
|
||||
|
||||
_glfwPlatformGetWindowSize(window, &width, &height);
|
||||
if (oldMode == GLFW_CURSOR_CAPTURED)
|
||||
_glfwPlatformSetCursorPos(window, _glfw.cursorPosX, _glfw.cursorPosY);
|
||||
else if (newMode == GLFW_CURSOR_CAPTURED)
|
||||
{
|
||||
int width, height;
|
||||
|
||||
centerPosX = width / 2.0;
|
||||
centerPosY = height / 2.0;
|
||||
_glfw.cursorPosX = window->cursorPosX;
|
||||
_glfw.cursorPosY = window->cursorPosY;
|
||||
|
||||
if (oldMode == GLFW_CURSOR_CAPTURED || newMode == GLFW_CURSOR_CAPTURED)
|
||||
_glfwPlatformSetCursorPos(window, centerPosX, centerPosY);
|
||||
_glfwPlatformGetWindowSize(window, &width, &height);
|
||||
_glfwPlatformSetCursorPos(window, width / 2.0, height / 2.0);
|
||||
}
|
||||
|
||||
_glfwPlatformSetCursorMode(window, newMode);
|
||||
window->cursorMode = newMode;
|
||||
|
||||
if (oldMode == GLFW_CURSOR_CAPTURED)
|
||||
_glfwInputCursorMotion(window, window->cursorPosX, window->cursorPosY);
|
||||
}
|
||||
|
||||
// Set sticky keys mode for the specified window
|
||||
|
@ -291,6 +291,8 @@ struct _GLFWlibrary
|
||||
{
|
||||
_GLFWhints hints;
|
||||
|
||||
double cursorPosX, cursorPosY;
|
||||
|
||||
_GLFWwindow* windowListHead;
|
||||
_GLFWwindow* focusedWindow;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user