diff --git a/src/win32_platform.h b/src/win32_platform.h index 857289e6..0fa37170 100644 --- a/src/win32_platform.h +++ b/src/win32_platform.h @@ -154,6 +154,7 @@ typedef struct _GLFWwindowWin32 // Various platform specific internal variables GLboolean cursorCentered; GLboolean cursorInside; + GLboolean cursorHidden; int oldCursorX, oldCursorY; } _GLFWwindowWin32; diff --git a/src/win32_window.c b/src/win32_window.c index cfaced67..0379c4d6 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -54,20 +54,30 @@ static void hideCursor(_GLFWwindow* window) ReleaseCapture(); ClipCursor(NULL); - ShowCursor(TRUE); + + if (window->win32.cursorHidden) + { + ShowCursor(TRUE); + window->win32.cursorHidden = GL_FALSE; + } if (GetCursorPos(&pos)) { if (WindowFromPoint(pos) == window->win32.handle) SetCursor(NULL); -} + } } // Capture mouse cursor // static void captureCursor(_GLFWwindow* window) { - ShowCursor(FALSE); + if (!window->win32.cursorHidden) + { + ShowCursor(FALSE); + window->win32.cursorHidden = GL_TRUE; + } + updateClipRect(window); SetCapture(window->win32.handle); } @@ -80,7 +90,12 @@ static void showCursor(_GLFWwindow* window) ReleaseCapture(); ClipCursor(NULL); - ShowCursor(TRUE); + + if (window->win32.cursorHidden) + { + ShowCursor(TRUE); + window->win32.cursorHidden = GL_FALSE; + } if (GetCursorPos(&pos)) {