From 7b6907f67866f993bac51516ce4352a868c7256c Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Sat, 14 Feb 2009 17:47:55 -0500 Subject: Don't forget to transform coordinates for the grab surface. --- wayland-system-compositor.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/wayland-system-compositor.c b/wayland-system-compositor.c index 9ba4ea3..90d61bf 100644 --- a/wayland-system-compositor.c +++ b/wayland-system-compositor.c @@ -849,14 +849,26 @@ const static struct wl_compositor_interface compositor_interface = { compositor_commit }; +static void +wlsc_surface_transform(struct wlsc_surface *surface, + int32_t x, int32_t y, int32_t *sx, int32_t *sy) +{ + /* Transform to surface coordinates. */ + *sx = (x - surface->map.x) * surface->width / surface->map.width; + *sy = (y - surface->map.y) * surface->height / surface->map.height; +} + static struct wlsc_surface * pick_surface(struct wlsc_input_device *device, int32_t *sx, int32_t *sy) { struct wlsc_compositor *ec = device->ec; struct wlsc_surface *es; - if (device->grab > 0) + if (device->grab > 0) { + wlsc_surface_transform(device->grab_surface, + device->x, device->y, sx, sy); return device->grab_surface; + } es = container_of(ec->surface_list.prev, struct wlsc_surface, link); @@ -865,10 +877,7 @@ pick_surface(struct wlsc_input_device *device, int32_t *sx, int32_t *sy) device->x < es->map.x + es->map.width && es->map.y <= device->y && device->y < es->map.y + es->map.height) { - /* Transform to surface coordinates. */ - *sx = (device->x - es->map.x) * es->width / es->map.width; - *sy = (device->y - es->map.y) * es->height / es->map.height; - + wlsc_surface_transform(es, device->x, device->y, sx, sy); return es; } -- cgit v1.2.3