From c2710bd4e8f00cb4738a16c5c4f7da15c55b277a Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Wed, 10 Dec 2025 14:23:35 -0500 Subject: [PATCH] Don't apply SDL_HINT_MOUSE_DPI_SCALE_CURSORS on Wayland Wayland cursors are surfaces sized in scaled points, so this hint wouldn't change the size, just prevent larger backbuffers from being used to draw sharper scaled cursors. --- src/video/wayland/SDL_waylandmouse.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/video/wayland/SDL_waylandmouse.c b/src/video/wayland/SDL_waylandmouse.c index 2d97266347..1801924897 100644 --- a/src/video/wayland/SDL_waylandmouse.c +++ b/src/video/wayland/SDL_waylandmouse.c @@ -1025,21 +1025,6 @@ typedef struct Wayland_PointerObject bool is_pointer; } Wayland_PointerObject; -static float Wayland_GetCursorScale(SDL_WindowData *focus) -{ - SDL_VideoData *viddata = SDL_GetVideoDevice()->internal; - - if (!SDL_GetHintBoolean(SDL_HINT_MOUSE_DPI_SCALE_CURSORS, false)) { - return 1.0f; - } - - // If viewports aren't available, the scale is always 1.0. - if (viddata->viewporter && focus) { - return (float)focus->scale_factor; - } - return 1.0f; -} - static void Wayland_CursorStateSetCursor(SDL_WaylandCursorState *state, const Wayland_PointerObject *obj, SDL_WindowData *focus, Uint32 serial, SDL_Cursor *cursor) { SDL_VideoData *viddata = SDL_GetVideoDevice()->internal; @@ -1094,14 +1079,16 @@ static void Wayland_CursorStateSetCursor(SDL_WaylandCursorState *state, const Wa return; } - state->scale = Wayland_GetCursorScale(focus); + // If viewports aren't available, the scale is always 1.0. + state->scale = viddata->viewporter && focus ? focus->scale_factor : 1.0; if (!Wayland_GetSystemCursor(cursor_data, state, &dst_width, &hot_x, &hot_y)) { return; } dst_height = dst_width; } else { - state->scale = Wayland_GetCursorScale(focus); + // If viewports aren't available, the scale is always 1.0. + state->scale = viddata->viewporter && focus ? focus->scale_factor : 1.0; dst_width = cursor_data->cursor_data.custom.width; dst_height = cursor_data->cursor_data.custom.height; hot_x = cursor_data->cursor_data.custom.hot_x;