Skip to content

Commit 962dedd

Browse files
committed
GDI fixes on mouse events
1 parent bc443a9 commit 962dedd

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/implem/gdi/gdi_backend.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <assert.h>
1919

2020
#include <windows.h>
21+
#include <windowsx.h>
2122

2223
#include "../hashtable.h"
2324
#include "../event.h"
@@ -273,7 +274,7 @@ _gdi_mouse_event_button(
273274
case WM_MBUTTONUP:
274275
return BUTTON_MIDDLE;
275276
case WM_MOUSEWHEEL:
276-
if ((wparam & 0xFFFF0000) > 0) { return BUTTON_WHEEL_UP; }
277+
if (GET_WHEEL_DELTA_WPARAM(wparam) > 0) { return BUTTON_WHEEL_UP; }
277278
else { return BUTTON_WHEEL_DOWN; }
278279
default:
279280
assert(!"Unhandled mouse event button");
@@ -424,8 +425,8 @@ _gdi_window_proc(
424425
case WM_SIZE:
425426
w = gdi_backend_get_window(hwnd);
426427
if (w != NULL) {
427-
w->base.width = (lparam & 0x0000FFFF);
428-
w->base.height = (lparam & 0xFFFF0000) >> 16;
428+
w->base.width = LOWORD(lparam);
429+
w->base.height = HIWORD(lparam);
429430
evt.type = EVENT_RESIZE;
430431
evt.time = gdi_get_time();
431432
evt.target = (void *)w;
@@ -438,8 +439,8 @@ _gdi_window_proc(
438439
case WM_MOVE:
439440
w = gdi_backend_get_window(hwnd);
440441
if (w != NULL) {
441-
w->base.x = (lparam & 0x0000FFFF);
442-
w->base.y = (lparam & 0xFFFF0000) >> 16;
442+
w->base.x = LOWORD(lparam);
443+
w->base.y = HIWORD(lparam);
443444
evt.type = EVENT_MOVE;
444445
evt.time = gdi_get_time();
445446
evt.target = (void *)w;
@@ -505,8 +506,15 @@ _gdi_window_proc(
505506
evt.type = EVENT_BUTTON;
506507
evt.time = gdi_get_time();
507508
evt.target = (void *)w;
508-
evt.desc.button.x = (lparam & 0x0000FFFF);
509-
evt.desc.button.y = (lparam & 0xFFFF0000) >> 16;
509+
if (msg == WM_MOUSEWHEEL) {
510+
POINT pt = { .x = GET_X_LPARAM(lparam), .y = GET_Y_LPARAM(lparam) };
511+
ScreenToClient(hwnd, &pt);
512+
evt.desc.button.x = pt.x;
513+
evt.desc.button.y = pt.y;
514+
} else {
515+
evt.desc.button.x = GET_X_LPARAM(lparam);
516+
evt.desc.button.y = GET_Y_LPARAM(lparam);
517+
}
510518
evt.desc.button.button = _gdi_mouse_event_button(msg, wparam, lparam);
511519
evt.desc.button.state = _gdi_mouse_event_state(msg, wparam, lparam);
512520
event_notify(gdi_back->listener, &evt);
@@ -519,8 +527,8 @@ _gdi_window_proc(
519527
evt.type = EVENT_CURSOR;
520528
evt.time = gdi_get_time();
521529
evt.target = (void *)w;
522-
evt.desc.cursor.x = (lparam & 0x0000FFFF);
523-
evt.desc.cursor.y = (lparam & 0xFFFF0000) >> 16;
530+
evt.desc.cursor.x = GET_X_LPARAM(lparam);
531+
evt.desc.cursor.y = GET_Y_LPARAM(lparam);
524532
event_notify(gdi_back->listener, &evt);
525533
}
526534
return 0;
@@ -530,8 +538,6 @@ _gdi_window_proc(
530538
default:
531539
return DefWindowProc(hwnd, msg, wparam, lparam);
532540
}
533-
534-
assert(!"Unhandled event");
535541
}
536542

537543
#else

0 commit comments

Comments
 (0)