From a3e8fd49e64144b4b951206a5bd8b9e6abefb2a5 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 8 Nov 2021 09:58:11 -0800 Subject: [PATCH] Cancel any accumulated mouse wheel motion in the opposite direction when the wheel direction changes Fixes https://github.com/libsdl-org/SDL/issues/2912 --- src/events/SDL_mouse.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index 155110ce27..fb8e362274 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -623,20 +623,38 @@ SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, float x, float y, S return 0; } + if (x > 0.0f) { + if (mouse->accumulated_wheel_x < 0.0f) { + mouse->accumulated_wheel_x = 0.0f; + } + } else if (x < 0.0f) { + if (mouse->accumulated_wheel_x > 0.0f) { + mouse->accumulated_wheel_x = 0.0f; + } + } mouse->accumulated_wheel_x += x; - if (mouse->accumulated_wheel_x > 0) { + if (mouse->accumulated_wheel_x > 0.0f) { integral_x = (int)SDL_floor(mouse->accumulated_wheel_x); - } else if (mouse->accumulated_wheel_x < 0) { + } else if (mouse->accumulated_wheel_x < 0.0f) { integral_x = (int)SDL_ceil(mouse->accumulated_wheel_x); } else { integral_x = 0; } mouse->accumulated_wheel_x -= integral_x; + if (y > 0.0f) { + if (mouse->accumulated_wheel_y < 0.0f) { + mouse->accumulated_wheel_y = 0.0f; + } + } else if (y < 0.0f) { + if (mouse->accumulated_wheel_y > 0.0f) { + mouse->accumulated_wheel_y = 0.0f; + } + } mouse->accumulated_wheel_y += y; - if (mouse->accumulated_wheel_y > 0) { + if (mouse->accumulated_wheel_y > 0.0f) { integral_y = (int)SDL_floor(mouse->accumulated_wheel_y); - } else if (mouse->accumulated_wheel_y < 0) { + } else if (mouse->accumulated_wheel_y < 0.0f) { integral_y = (int)SDL_ceil(mouse->accumulated_wheel_y); } else { integral_y = 0;