From f37f82ccf9bf8b11c35f04e51b5705abbc047596 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Thu, 1 May 2014 18:00:41 +0100 Subject: [PATCH] drm: Don't use the cursor overlay if the scale doesn't match 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 9d293bc1..44413081 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))