From c2710bd4e8f00cb4738a16c5c4f7da15c55b277a Mon Sep 17 00:00:00 2001
From: Frank Praznik <[EMAIL REDACTED]>
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 2d97266347138..1801924897ef5 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;