[PATCH v2 weston] compositor-drm: Use view transform in cursor plane setup

Derek Foreman derekf at osg.samsung.com
Tue Nov 24 09:39:38 PST 2015


Make sure a view's transform is viable for a cursor plane and
then actually apply it before setting the cursor plane location.

Now if a subsurface ends up in the cursor plane, the plane will be
properly positioned.

Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---

Change from V1:
Reject a surface if it has a transform any more complicated than a
translation.  (because cursor planes can't scale)

 src/compositor-drm.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index a84d869..6575847 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -1095,6 +1095,9 @@ drm_output_prepare_cursor_view(struct drm_output *output,
 		(struct drm_backend *)output->base.compositor->backend;
 	struct weston_buffer_viewport *viewport = &ev->surface->buffer_viewport;
 
+	if (ev->transform.enabled &&
+	    (ev->transform.matrix.type > WESTON_MATRIX_TRANSFORM_TRANSLATE))
+		return NULL;
 	if (b->gbm == NULL)
 		return NULL;
 	if (output->base.transform != WL_OUTPUT_TRANSFORM_NORMAL)
@@ -1166,7 +1169,7 @@ drm_output_set_cursor(struct drm_output *output)
 		(struct drm_backend *) output->base.compositor->backend;
 	EGLint handle;
 	struct gbm_bo *bo;
-	int x, y;
+	float x, y;
 
 	output->cursor_view = NULL;
 	if (ev == NULL) {
@@ -1192,8 +1195,7 @@ drm_output_set_cursor(struct drm_output *output)
 		}
 	}
 
-	x = (ev->geometry.x - output->base.x) * output->base.current_scale;
-	y = (ev->geometry.y - output->base.y) * output->base.current_scale;
+	weston_view_to_global_float(ev, 0, 0, &x, &y);
 	if (output->cursor_plane.x != x || output->cursor_plane.y != y) {
 		if (drmModeMoveCursor(b->drm.fd, output->crtc_id, x, y)) {
 			weston_log("failed to move cursor: %m\n");
-- 
2.6.2



More information about the wayland-devel mailing list