diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2015-03-25 17:18:35 +0800 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2015-07-16 11:54:14 +0800 |
commit | f01247d815074645ce4130cfb1cc0af606a6cb91 (patch) | |
tree | ec99caa7590763f8e597ba20658366cb04d5bb14 /src/wayland/meta-wayland-surface.c | |
parent | db6caa2c49e2c846f912f2f6d75036feee7e751b (diff) | |
download | mutter-f01247d815074645ce4130cfb1cc0af606a6cb91.tar.gz |
wayland: Fix calculation of window geometry when scaled
Take the surface actor scale into account when calculating the window
geometry.
https://bugzilla.gnome.org/show_bug.cgi?id=744934
Diffstat (limited to 'src/wayland/meta-wayland-surface.c')
-rw-r--r-- | src/wayland/meta-wayland-surface.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index e352e07ce..3eb0b0e9d 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -188,32 +188,35 @@ calculate_surface_window_geometry (MetaWaylandSurface *surface, float parent_x, float parent_y) { - ClutterActor *surface_actor = CLUTTER_ACTOR (surface->surface_actor); + MetaSurfaceActorWayland *surface_actor = + META_SURFACE_ACTOR_WAYLAND (surface->surface_actor); + MetaRectangle subsurface_rect; MetaRectangle geom; - float x, y; GList *l; /* Unmapped surfaces don't count. */ - if (!CLUTTER_ACTOR_IS_VISIBLE (surface_actor)) + if (!CLUTTER_ACTOR_IS_VISIBLE (CLUTTER_ACTOR (surface_actor))) return; if (!surface->buffer) return; - /* XXX: Is there a better way to do this using Clutter APIs? */ - clutter_actor_get_position (surface_actor, &x, &y); + meta_surface_actor_wayland_get_subsurface_rect (surface_actor, + &subsurface_rect); - geom.x = parent_x + x; - geom.y = parent_x + y; - geom.width = cogl_texture_get_width (surface->buffer->texture); - geom.height = cogl_texture_get_height (surface->buffer->texture); + geom.x = parent_x + subsurface_rect.x; + geom.y = parent_x + subsurface_rect.y; + geom.width = subsurface_rect.width; + geom.height = subsurface_rect.height; meta_rectangle_union (total_geometry, &geom, total_geometry); for (l = surface->subsurfaces; l != NULL; l = l->next) { MetaWaylandSurface *subsurface = l->data; - calculate_surface_window_geometry (subsurface, total_geometry, x, y); + calculate_surface_window_geometry (subsurface, total_geometry, + subsurface_rect.x, + subsurface_rect.y); } } |