From d9784e524ed4a77cfb2af93c4f584c83b09e1e20 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 12 Aug 2023 18:48:25 +0200 Subject: [PATCH] Attempt to make the MacOS mouse more precise. --- src/device/mouse.c | 21 +++++++++++++++++++++ src/include/86box/mouse.h | 3 +++ src/qt/macos_event_filter.mm | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/device/mouse.c b/src/device/mouse.c index 0f994ff27..4a3ffaec5 100644 --- a/src/device/mouse.c +++ b/src/device/mouse.c @@ -379,6 +379,18 @@ atomic_double_add(_Atomic double *var, double val) atomic_store(var, temp); } +void +mouse_scale_fx(double x) +{ + atomic_double_add(&mouse_x, ((double) x) * mouse_sensitivity); +} + +void +mouse_scale_fy(double y) +{ + atomic_double_add(&mouse_y, ((double) y) * mouse_sensitivity); +} + void mouse_scale_x(int x) { @@ -391,6 +403,15 @@ mouse_scale_y(int y) atomic_double_add(&mouse_y, ((double) y) * mouse_sensitivity); } +void +mouse_scalef(double x, double y) +{ + pclog("DPI = %lf (%lfx%lf)\n", plat_get_dpi(), monitors[0].mon_res_x, monitors[0].mon_res_y); + + mouse_scale_fx(x); + mouse_scale_fy(y); +} + void mouse_scale(int x, int y) { diff --git a/src/include/86box/mouse.h b/src/include/86box/mouse.h index 5133ddfbc..e24494d74 100644 --- a/src/include/86box/mouse.h +++ b/src/include/86box/mouse.h @@ -85,8 +85,11 @@ extern void mouse_subtract_coords(int *delta_x, int *delta_y, int *o_ extern int mouse_moved(void); extern int mouse_state_changed(void); extern int mouse_mbut_changed(void); +extern void mouse_scale_fx(double x); +extern void mouse_scale_fy(double y); extern void mouse_scale_x(int x); extern void mouse_scale_y(int y); +extern void mouse_scalef(double x, double y); extern void mouse_scale(int x, int y); extern void mouse_set_z(int z); extern void mouse_clear_z(void); diff --git a/src/qt/macos_event_filter.mm b/src/qt/macos_event_filter.mm index 5e276679f..ff4e7c4d2 100644 --- a/src/qt/macos_event_filter.mm +++ b/src/qt/macos_event_filter.mm @@ -33,7 +33,7 @@ CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, || [event type] == NSEventTypeLeftMouseDragged || [event type] == NSEventTypeRightMouseDragged || [event type] == NSEventTypeOtherMouseDragged) { - mouse_scale([event deltaX], [event deltaY]); + mouse_scalef((double) [event deltaX], (double) [event deltaY]); return true; } if ([event type] == NSEventTypeScrollWheel) {