[PATCH weston] drm: Don't use the cursor overlay if the scale doesn't match

Neil Roberts neil at linux.intel.com
Thu May 1 10:00:41 PDT 2014


If the scale for the cursor surface doesn't match that of the output
then we shouldn't use the cursor overlay because otherwise it will be
drawn at the wrong size. This problem is particularly noticable with
multiple pointers because it randomly alternates between drawing one
cursor or the other at a larger size depending on which one gets put
in the cursor overlay.
---
 src/compositor-drm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 9d293bc..4441308 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -953,12 +953,15 @@ drm_output_prepare_cursor_view(struct weston_output *output_base,
 {
 	struct drm_compositor *c =
 		(struct drm_compositor *) output_base->compositor;
+	struct weston_buffer_viewport *viewport = &ev->surface->buffer_viewport;
 	struct drm_output *output = (struct drm_output *) output_base;
 
 	if (c->gbm == NULL)
 		return NULL;
 	if (output->base.transform != WL_OUTPUT_TRANSFORM_NORMAL)
 		return NULL;
+	if (viewport->buffer.scale != output_base->current_scale)
+		return NULL;
 	if (output->cursor_view)
 		return NULL;
 	if (ev->output_mask != (1u << output_base->id))
-- 
1.9.0



More information about the wayland-devel mailing list