diff --git a/base/sources/backends/android_system.c b/base/sources/backends/android_system.c index 5c1014ed..fe01201b 100644 --- a/base/sources/backends/android_system.c +++ b/base/sources/backends/android_system.c @@ -212,7 +212,7 @@ static void touchInput(AInputEvent *event) { case AMOTION_EVENT_ACTION_SCROLL: if (id == 0) { float scroll = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_VSCROLL, 0); - iron_internal_mouse_trigger_scroll(-(int)scroll); + iron_internal_mouse_trigger_scroll(-scroll); } break; } diff --git a/base/sources/backends/linux_system.c b/base/sources/backends/linux_system.c index 478b8ca6..afe6a18b 100644 --- a/base/sources/backends/linux_system.c +++ b/base/sources/backends/linux_system.c @@ -947,10 +947,10 @@ static bool _handle_messages() { break; // Button4 and Button5 provide mouse wheel events because why not case Button4: - iron_internal_mouse_trigger_scroll(-1); + iron_internal_mouse_trigger_scroll(-1.0); break; case Button5: - iron_internal_mouse_trigger_scroll(1); + iron_internal_mouse_trigger_scroll(1.0); break; // button 6 and 7 seem to be horizontal scrolling, which is not exposed in Iron's api at the moment case Button6: diff --git a/base/sources/backends/macos_system.m b/base/sources/backends/macos_system.m index 2fb9bf6f..18eda29d 100644 --- a/base/sources/backends/macos_system.m +++ b/base/sources/backends/macos_system.m @@ -382,7 +382,7 @@ static int getMouseY(NSEvent *event) { } - (void)scrollWheel:(NSEvent *)theEvent { - int delta = [theEvent deltaY]; + float delta = [theEvent deltaY]; iron_internal_mouse_trigger_scroll(-delta); } diff --git a/base/sources/backends/wasm_system.c b/base/sources/backends/wasm_system.c index 0376d2ca..d130b78c 100644 --- a/base/sources/backends/wasm_system.c +++ b/base/sources/backends/wasm_system.c @@ -100,7 +100,7 @@ __attribute__((export_name("_mousemove"))) void _mousemove(int x, int y) { iron_internal_mouse_trigger_move(x, y); } -__attribute__((export_name("_wheel"))) void _wheel(int delta) { +__attribute__((export_name("_wheel"))) void _wheel(float delta) { iron_internal_mouse_trigger_scroll(delta); } diff --git a/base/sources/backends/windows_system.c b/base/sources/backends/windows_system.c index 679584ec..0136541b 100644 --- a/base/sources/backends/windows_system.c +++ b/base/sources/backends/windows_system.c @@ -554,7 +554,7 @@ LRESULT WINAPI IronWindowsMessageProcedure(HWND hWnd, UINT msg, WPARAM wParam, L iron_internal_mouse_trigger_release(HIWORD(wParam) + 2, mouseX, mouseY); break; case WM_MOUSEWHEEL: - iron_internal_mouse_trigger_scroll(GET_WHEEL_DELTA_WPARAM(wParam) / -120); + iron_internal_mouse_trigger_scroll(GET_WHEEL_DELTA_WPARAM(wParam) / -120.0); break; case WM_POINTERDOWN: pointerId = GET_POINTERID_WPARAM(wParam); diff --git a/base/sources/iron.h b/base/sources/iron.h index 19faa7fb..5b4ed77a 100644 --- a/base/sources/iron.h +++ b/base/sources/iron.h @@ -220,7 +220,7 @@ void (*iron_key_up)(int); void (*iron_mouse_down)(int, int, int); void (*iron_mouse_up)(int, int, int); void (*iron_mouse_move)(int, int, int, int); -void (*iron_mouse_wheel)(int); +void (*iron_mouse_wheel)(float); void (*iron_touch_down)(int, int, int); void (*iron_touch_up)(int, int, int); void (*iron_touch_move)(int, int, int); @@ -498,7 +498,7 @@ void _mouse_move(int x, int y, int mx, int my, void *data) { #endif } -void _mouse_wheel(int delta, void *data) { +void _mouse_wheel(float delta, void *data) { iron_mouse_wheel(delta); if (ui_get_current()) ui_mouse_wheel(ui_get_current(), delta); @@ -782,7 +782,7 @@ void iron_set_mouse_move_callback(void (*callback)(int, int, int, int)) { iron_mouse_set_move_callback(_mouse_move, NULL); } -void iron_set_mouse_wheel_callback(void (*callback)(int)) { +void iron_set_mouse_wheel_callback(void (*callback)(float)) { iron_mouse_wheel = callback; iron_mouse_set_scroll_callback(_mouse_wheel, NULL); } diff --git a/base/sources/iron_system.c b/base/sources/iron_system.c index 5b7550ac..cea04a42 100644 --- a/base/sources/iron_system.c +++ b/base/sources/iron_system.c @@ -349,7 +349,7 @@ static void (*mouse_release_callback)(int /*button*/, int /*x*/, int /*y*/, void static void *mouse_release_callback_data = NULL; static void (*mouse_move_callback)(int /*x*/, int /*y*/, int /*movementX*/, int /*movementY*/, void * /*data*/) = NULL; static void *mouse_move_callback_data = NULL; -static void (*mouse_scroll_callback)(int /*delta*/, void * /*data*/) = NULL; +static void (*mouse_scroll_callback)(float /*delta*/, void * /*data*/) = NULL; static void *mouse_scroll_callback_data = NULL; void iron_mouse_set_press_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data) { @@ -367,7 +367,7 @@ void iron_mouse_set_move_callback(void (*value)(int /*x*/, int /*y*/, int /*move mouse_move_callback_data = data; } -void iron_mouse_set_scroll_callback(void (*value)(int /*delta*/, void * /*data*/), void *data) { +void iron_mouse_set_scroll_callback(void (*value)(float /*delta*/, void * /*data*/), void *data) { mouse_scroll_callback = value; mouse_scroll_callback_data = data; } @@ -378,7 +378,7 @@ void iron_internal_mouse_trigger_release(int button, int x, int y) { } } -void iron_internal_mouse_trigger_scroll(int delta) { +void iron_internal_mouse_trigger_scroll(float delta) { if (mouse_scroll_callback != NULL) { mouse_scroll_callback(delta, mouse_scroll_callback_data); } diff --git a/base/sources/iron_system.h b/base/sources/iron_system.h index 0274b8b1..78f63517 100644 --- a/base/sources/iron_system.h +++ b/base/sources/iron_system.h @@ -322,7 +322,7 @@ void iron_internal_keyboard_trigger_key_press(unsigned character); void iron_mouse_set_press_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data); void iron_mouse_set_release_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data); void iron_mouse_set_move_callback(void (*value)(int /*x*/, int /*y*/, int /*movement_x*/, int /*movement_y*/, void * /*data*/), void *data); -void iron_mouse_set_scroll_callback(void (*value)(int /*delta*/, void * /*data*/), void *data); +void iron_mouse_set_scroll_callback(void (*value)(float /*delta*/, void * /*data*/), void *data); bool iron_mouse_can_lock(void); bool iron_mouse_is_locked(void); void iron_mouse_lock(); @@ -335,7 +335,7 @@ void iron_mouse_get_position(int *x, int *y); void iron_internal_mouse_trigger_press(int button, int x, int y); void iron_internal_mouse_trigger_release(int button, int x, int y); void iron_internal_mouse_trigger_move(int x, int y); -void iron_internal_mouse_trigger_scroll(int delta); +void iron_internal_mouse_trigger_scroll(float delta); void iron_internal_mouse_window_activated(); void iron_internal_mouse_window_deactivated(); void iron_pen_set_press_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/)); diff --git a/base/sources/iron_ui.c b/base/sources/iron_ui.c index 56bfcfe9..cf0240e5 100644 --- a/base/sources/iron_ui.c +++ b/base/sources/iron_ui.c @@ -2371,7 +2371,7 @@ void ui_mouse_up(ui_t *ui, int button, int x, int y) { ui_deselect_text(ui); } -void ui_mouse_wheel(ui_t *ui, int delta) { +void ui_mouse_wheel(ui_t *ui, float delta) { ui->input_wheel_delta = delta; } diff --git a/base/sources/iron_ui.h b/base/sources/iron_ui.h index 8a3e8753..15a3dff3 100644 --- a/base/sources/iron_ui.h +++ b/base/sources/iron_ui.h @@ -318,7 +318,7 @@ void ui_set_hovered_tab_name(char *name); void ui_mouse_down(ui_t *ui, int button, int x, int y); // Input events void ui_mouse_move(ui_t *ui, int x, int y, int movement_x, int movement_y); void ui_mouse_up(ui_t *ui, int button, int x, int y); -void ui_mouse_wheel(ui_t *ui, int delta); +void ui_mouse_wheel(ui_t *ui, float delta); void ui_pen_down(ui_t *ui, int x, int y, float pressure); void ui_pen_up(ui_t *ui, int x, int y, float pressure); void ui_pen_move(ui_t *ui, int x, int y, float pressure); diff --git a/base/sources/ts/input.ts b/base/sources/ts/input.ts index 55212f81..37eb09f5 100644 --- a/base/sources/ts/input.ts +++ b/base/sources/ts/input.ts @@ -142,7 +142,7 @@ function mouse_move_listener(x: i32, y: i32, movement_x: i32, movement_y: i32) { mouse_moved = true; } -function mouse_wheel_listener(delta: i32) { +function mouse_wheel_listener(delta: f32) { mouse_wheel_delta = delta; } @@ -183,8 +183,8 @@ function mouse_on_touch_move(index: i32, x: i32, y: i32) { mouse_pinch_dist = math_sqrt(dx * dx + dy * dy); mouse_pinch_total += last_dist != 0 ? last_dist - mouse_pinch_dist : 0; if (!mouse_pinch_started) { - mouse_wheel_delta = mouse_pinch_total / 10; - if (mouse_wheel_delta != 0) { + mouse_wheel_delta = mouse_pinch_total / 10.0; + if (mouse_wheel_delta != 0.0) { mouse_pinch_total = 0.0; } } diff --git a/base/sources/ts/iron.ts b/base/sources/ts/iron.ts index 6e8e1d56..67a1f43a 100644 --- a/base/sources/ts/iron.ts +++ b/base/sources/ts/iron.ts @@ -192,7 +192,7 @@ declare function iron_set_keyboard_up_callback(callback: (code: i32) => void): v declare function iron_set_mouse_down_callback(callback: (button: i32, x: i32, y: i32) => void): void; declare function iron_set_mouse_up_callback(callback: (button: i32, x: i32, y: i32) => void): void; declare function iron_set_mouse_move_callback(callback: (x: i32, y: i32, mx: i32, my: i32) => void): void; -declare function iron_set_mouse_wheel_callback(callback: (button: i32) => void): void; +declare function iron_set_mouse_wheel_callback(callback: (delta: f32) => void): void; declare function iron_set_touch_down_callback(callback: (index: i32, x: i32, y: i32) => void): void; declare function iron_set_touch_up_callback(callback: (index: i32, x: i32, y: i32) => void): void; declare function iron_set_touch_move_callback(callback: (index: i32, x: i32, y: i32) => void): void; diff --git a/base/sources/ts/sys.ts b/base/sources/ts/sys.ts index 09e564f1..44836a4f 100644 --- a/base/sources/ts/sys.ts +++ b/base/sources/ts/sys.ts @@ -186,7 +186,7 @@ function sys_mouse_move_callback(x: i32, y: i32, mx: i32, my: i32) { mouse_move_listener(x, y, mx, my); } -function sys_mouse_wheel_callback(delta: i32) { +function sys_mouse_wheel_callback(delta: f32) { mouse_wheel_listener(delta); }