From b184a75c9e1107739c65668e6bb257c1f4c8bbc2 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Mon, 4 Feb 2019 18:41:33 +0100 Subject: [PATCH] win32 and SDL2: capture the mouse when the button is pressed --- src/input.c | 6 ++++++ src/win32screen.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/input.c b/src/input.c index d802731f..78cce44c 100644 --- a/src/input.c +++ b/src/input.c @@ -1299,11 +1299,17 @@ int Get_input(int sleep_time) break; case SDL_MOUSEBUTTONDOWN: +#ifdef USE_SDL2 + SDL_CaptureMouse(SDL_TRUE); +#endif Handle_mouse_click(&event.button); user_feedback_required = 1; break; case SDL_MOUSEBUTTONUP: +#ifdef USE_SDL2 + SDL_CaptureMouse(SDL_FALSE); +#endif Handle_mouse_release(&event.button); user_feedback_required = 1; break; diff --git a/src/win32screen.c b/src/win32screen.c index 808d8403..36ecf6e1 100644 --- a/src/win32screen.c +++ b/src/win32screen.c @@ -21,6 +21,7 @@ along with Grafx2; if not, see */ #include +#include #include #include #if defined(_MSC_VER) && _MSC_VER < 1900 @@ -208,32 +209,38 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP } return 0; case WM_LBUTTONDOWN: + SetCapture(hwnd); // capture mouse when the button is pressed Input_new_mouse_K |= 1; Move_cursor_with_constraints(0); user_feedback_required = 1; return 0; case WM_LBUTTONUP: + ReleaseCapture(); // Release mouse when the button is released Input_new_mouse_K &= ~1; Move_cursor_with_constraints(0); user_feedback_required = 1; return 0; // WM_LBUTTONDBLCLK case WM_RBUTTONDOWN: + SetCapture(hwnd); // capture mouse when the button is pressed Input_new_mouse_K |= 2; Move_cursor_with_constraints(0); user_feedback_required = 1; return 0; case WM_RBUTTONUP: + ReleaseCapture(); // Release mouse when the button is released Input_new_mouse_K &= ~2; Move_cursor_with_constraints(0); user_feedback_required = 1; return 0; // WM_RBUTTONDBLCLK case WM_MBUTTONDOWN: - //case WM_MBUTTONUP: Key = KEY_MOUSEMIDDLE|Get_Key_modifiers(); user_feedback_required = 1; return 0; + case WM_MBUTTONUP: + return 0; +// WM_MBUTTONDBLCLK case WM_MOUSEWHEEL: { short delta = HIWORD(wParam);