Cancel any accumulated mouse wheel motion in the opposite direction when the wheel direction changes Fixes https://github.com/libsdl-org/SDL/issues/2912
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index 155110c..fb8e362 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;