diff --git a/readme.html b/readme.html index ea2d34da..fd788bae 100644 --- a/readme.html +++ b/readme.html @@ -846,6 +846,9 @@ their skills. Special thanks go out to:

  • Ralph Eastwood, for the initial design and implementation of the gamma correction API
  • +
  • GeO4d, for the implementation of cursor enter/leave notifications on + Win32.
  • +
  • Gerald Franz, who made GLFW compile under IRIX, and supplied patches for the X11 keyboard translation routine
  • diff --git a/src/win32_platform.h b/src/win32_platform.h index 82b8c9ca..aa551a09 100644 --- a/src/win32_platform.h +++ b/src/win32_platform.h @@ -268,6 +268,7 @@ typedef struct _GLFWwindowWin32 // Various platform specific internal variables int desiredRefreshRate; // Desired vertical monitor refresh rate GLboolean cursorCentered; + GLboolean cursorInside; int oldMouseX, oldMouseY; } _GLFWwindowWin32; diff --git a/src/win32_window.c b/src/win32_window.c index 0f3c67d0..66326278 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -1021,6 +1021,26 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, _glfwInputCursorMotion(window, x, y); } + if (!window->Win32.cursorInside) + { + TRACKMOUSEEVENT tme; + ZeroMemory(&tme, sizeof(tme)); + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = window->Win32.handle; + TrackMouseEvent(&tme); + + window->Win32.cursorInside = GL_TRUE; + _glfwInputCursorEnter(window, GL_TRUE); + } + + return 0; + } + + case WM_MOUSELEAVE: + { + window->Win32.cursorInside = GL_FALSE; + _glfwInputCursorEnter(window, GL_FALSE); return 0; }