Added tracking of cursor visibility.

master
Camilla Berglund ago%!(EXTRA string=12 years)
parent 608109c249
commit 6164eb603b
  1. 1
      src/win32_platform.h
  2. 23
      src/win32_window.c

@ -154,6 +154,7 @@ typedef struct _GLFWwindowWin32
// Various platform specific internal variables // Various platform specific internal variables
GLboolean cursorCentered; GLboolean cursorCentered;
GLboolean cursorInside; GLboolean cursorInside;
GLboolean cursorHidden;
int oldCursorX, oldCursorY; int oldCursorX, oldCursorY;
} _GLFWwindowWin32; } _GLFWwindowWin32;

@ -54,20 +54,30 @@ static void hideCursor(_GLFWwindow* window)
ReleaseCapture(); ReleaseCapture();
ClipCursor(NULL); ClipCursor(NULL);
ShowCursor(TRUE);
if (window->win32.cursorHidden)
{
ShowCursor(TRUE);
window->win32.cursorHidden = GL_FALSE;
}
if (GetCursorPos(&pos)) if (GetCursorPos(&pos))
{ {
if (WindowFromPoint(pos) == window->win32.handle) if (WindowFromPoint(pos) == window->win32.handle)
SetCursor(NULL); SetCursor(NULL);
} }
} }
// Capture mouse cursor // Capture mouse cursor
// //
static void captureCursor(_GLFWwindow* window) static void captureCursor(_GLFWwindow* window)
{ {
ShowCursor(FALSE); if (!window->win32.cursorHidden)
{
ShowCursor(FALSE);
window->win32.cursorHidden = GL_TRUE;
}
updateClipRect(window); updateClipRect(window);
SetCapture(window->win32.handle); SetCapture(window->win32.handle);
} }
@ -80,7 +90,12 @@ static void showCursor(_GLFWwindow* window)
ReleaseCapture(); ReleaseCapture();
ClipCursor(NULL); ClipCursor(NULL);
ShowCursor(TRUE);
if (window->win32.cursorHidden)
{
ShowCursor(TRUE);
window->win32.cursorHidden = GL_FALSE;
}
if (GetCursorPos(&pos)) if (GetCursorPos(&pos))
{ {

Loading…
Cancel
Save