diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index bbcaa9290d..5d78c209cc 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -238,7 +238,11 @@ static void SDLCALL SDL_MouseIntegerModeChanged(void *userdata, const char *name { SDL_Mouse *mouse = (SDL_Mouse *)userdata; - mouse->integer_mode = SDL_GetStringBoolean(hint, false); + if (hint && *hint) { + mouse->integer_mode = (Uint8)SDL_atoi(hint); + } else { + mouse->integer_mode = 0; + } } // Public functions @@ -730,7 +734,7 @@ static void SDL_PrivateSendMouseMotion(Uint64 timestamp, SDL_Window *window, SDL y *= mouse->normal_speed_scale; } } - if (mouse->integer_mode) { + if (mouse->integer_mode >= 1) { // Accumulate the fractional relative motion and only process the integer portion mouse->xrel_frac = SDL_modff(mouse->xrel_frac + x, &x); mouse->yrel_frac = SDL_modff(mouse->yrel_frac + y, &y); @@ -741,7 +745,7 @@ static void SDL_PrivateSendMouseMotion(Uint64 timestamp, SDL_Window *window, SDL y = (mouse->last_y + yrel); ConstrainMousePosition(mouse, window, &x, &y); } else { - if (mouse->integer_mode) { + if (mouse->integer_mode >= 1) { // Discard the fractional component from absolute coordinates x = SDL_truncf(x); y = SDL_truncf(y); @@ -1019,7 +1023,7 @@ void SDL_SendMouseWheel(Uint64 timestamp, SDL_Window *window, SDL_MouseID mouseI } // Accumulate fractional wheel motion if integer mode is enabled - if (mouse->integer_mode) { + if (mouse->integer_mode >= 2) { mouse->wheel_x_frac = SDL_modff(mouse->wheel_x_frac + x, &x); mouse->wheel_y_frac = SDL_modff(mouse->wheel_y_frac + y, &y); } diff --git a/src/events/SDL_mouse_c.h b/src/events/SDL_mouse_c.h index dc8c78b51a..8d8cf63676 100644 --- a/src/events/SDL_mouse_c.h +++ b/src/events/SDL_mouse_c.h @@ -104,7 +104,7 @@ typedef struct float wheel_y_frac; double click_motion_x; double click_motion_y; - bool integer_mode; + Uint8 integer_mode; bool has_position; bool relative_mode; bool relative_mode_warp_motion;