From 81571203f12c3fbd8c7cb8bc6446587a43d3895b Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Mon, 20 Feb 2023 18:32:53 +0100 Subject: [PATCH] cursorsource: fix scaling with Xwayland Before this commit, the device pixel ratio of the cursor was set to ignore the Xwayland scale override, while the size of the cursor surface was scaled. This change removes the scaling of the cursor surface size, to make the cursor be no longer cut off in rendering. BUG: 466094 --- src/cursorsource.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cursorsource.cpp b/src/cursorsource.cpp index c02a04abc5..e82f4db913 100644 --- a/src/cursorsource.cpp +++ b/src/cursorsource.cpp @@ -6,6 +6,7 @@ #include "cursorsource.h" #include "cursor.h" +#include "wayland/clientconnection.h" #include "wayland/shmclientbuffer.h" #include "wayland/surface_interface.h" @@ -143,6 +144,10 @@ void SurfaceCursorSource::update(KWaylandServer::SurfaceInterface *surface, cons m_hotspot = QPoint(); m_surface = nullptr; } else { + // TODO Plasma 6: once Xwayland cursor scaling can be done correctly, remove this + // scaling is intentionally applied "wrong" here to make the cursor stay a consistent size even with un-scaled Xwayland: + // - the device pixel ratio of the image is not multiplied by scaleOverride + // - the surface size is scaled up with scaleOverride, to un-do the scaling done elsewhere auto buffer = qobject_cast(surface->buffer()); if (buffer) { m_image = buffer->data().copy(); @@ -150,7 +155,7 @@ void SurfaceCursorSource::update(KWaylandServer::SurfaceInterface *surface, cons } else { m_image = QImage(); } - m_size = surface->size().toSize(); + m_size = (surface->size() * surface->client()->scaleOverride()).toSize(); m_hotspot = hotspot; m_surface = surface; }