From 802a9e2f9685bbf9faf238b25e5b4ce6d15b5164 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 2 Jun 2024 02:05:44 +0200 Subject: [PATCH] improve cursor lock click checks --- src/wndproc.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/wndproc.c b/src/wndproc.c index 86a9c4c..b2ebd71 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -842,6 +842,9 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam y = (DWORD)((y - g_ddraw.render.viewport.y) * g_ddraw.mouse.unscale_y); } + x = min(x, g_ddraw.width - 1); + y = min(y, g_ddraw.height - 1); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); @@ -927,8 +930,25 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (!g_config.devmode && !g_mouse_locked) { - int x = (DWORD)((GET_X_LPARAM(lParam) - g_ddraw.render.viewport.x) * g_ddraw.mouse.unscale_x); - int y = (DWORD)((GET_Y_LPARAM(lParam) - g_ddraw.render.viewport.y) * g_ddraw.mouse.unscale_y); + int x = GET_X_LPARAM(lParam); + int y = GET_Y_LPARAM(lParam); + + if (x > g_ddraw.render.viewport.x + g_ddraw.render.viewport.width || + x < g_ddraw.render.viewport.x || + y > g_ddraw.render.viewport.y + g_ddraw.render.viewport.height || + y < g_ddraw.render.viewport.y) + { + x = g_ddraw.width / 2; + y = g_ddraw.height / 2; + } + else + { + x = (DWORD)((x - g_ddraw.render.viewport.x) * g_ddraw.mouse.unscale_x); + y = (DWORD)((y - g_ddraw.render.viewport.y) * g_ddraw.mouse.unscale_y); + } + + x = min(x, g_ddraw.width - 1); + y = min(y, g_ddraw.height - 1); InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); InterlockedExchange((LONG*)&g_ddraw.cursor.y, y);