18
18
#include <assert.h>
19
19
20
20
#include <windows.h>
21
+ #include <windowsx.h>
21
22
22
23
#include "../hashtable.h"
23
24
#include "../event.h"
@@ -273,7 +274,7 @@ _gdi_mouse_event_button(
273
274
case WM_MBUTTONUP :
274
275
return BUTTON_MIDDLE ;
275
276
case WM_MOUSEWHEEL :
276
- if ((wparam & 0xFFFF0000 ) > 0 ) { return BUTTON_WHEEL_UP ; }
277
+ if (GET_WHEEL_DELTA_WPARAM (wparam ) > 0 ) { return BUTTON_WHEEL_UP ; }
277
278
else { return BUTTON_WHEEL_DOWN ; }
278
279
default :
279
280
assert (!"Unhandled mouse event button" );
@@ -424,8 +425,8 @@ _gdi_window_proc(
424
425
case WM_SIZE :
425
426
w = gdi_backend_get_window (hwnd );
426
427
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 ) ;
429
430
evt .type = EVENT_RESIZE ;
430
431
evt .time = gdi_get_time ();
431
432
evt .target = (void * )w ;
@@ -438,8 +439,8 @@ _gdi_window_proc(
438
439
case WM_MOVE :
439
440
w = gdi_backend_get_window (hwnd );
440
441
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 ) ;
443
444
evt .type = EVENT_MOVE ;
444
445
evt .time = gdi_get_time ();
445
446
evt .target = (void * )w ;
@@ -505,8 +506,15 @@ _gdi_window_proc(
505
506
evt .type = EVENT_BUTTON ;
506
507
evt .time = gdi_get_time ();
507
508
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
+ }
510
518
evt .desc .button .button = _gdi_mouse_event_button (msg , wparam , lparam );
511
519
evt .desc .button .state = _gdi_mouse_event_state (msg , wparam , lparam );
512
520
event_notify (gdi_back -> listener , & evt );
@@ -519,8 +527,8 @@ _gdi_window_proc(
519
527
evt .type = EVENT_CURSOR ;
520
528
evt .time = gdi_get_time ();
521
529
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 ) ;
524
532
event_notify (gdi_back -> listener , & evt );
525
533
}
526
534
return 0 ;
@@ -530,8 +538,6 @@ _gdi_window_proc(
530
538
default :
531
539
return DefWindowProc (hwnd , msg , wparam , lparam );
532
540
}
533
-
534
- assert (!"Unhandled event" );
535
541
}
536
542
537
543
#else
0 commit comments