From d3f30d9ece3ad9b10bee03efa69dee825d775a46 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 9 Jul 2019 12:29:37 -0300 Subject: [PATCH] wayland/actor-surface: Set geometry scale in surface actor Now that MetaShapedTexture is a ClutterContent implemetation that is aware of its own buffer scale, it is possible to simplify the event translation routines. Set the geometry scale in MetaSurfaceActor, and stop adjusting the surface scale when translating points. Also remove the now obsoleted meta_wayland_actor_surface_calculate_scale() function. https://gitlab.gnome.org/GNOME/mutter/merge_requests/409 --- src/wayland/meta-wayland-actor-surface.c | 20 ++++---------------- src/wayland/meta-wayland-actor-surface.h | 4 +--- src/wayland/meta-wayland-shell-surface.c | 12 ++++++------ src/wayland/meta-wayland-surface.c | 2 -- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/wayland/meta-wayland-actor-surface.c b/src/wayland/meta-wayland-actor-surface.c index 979422bae..bf964dcae 100644 --- a/src/wayland/meta-wayland-actor-surface.c +++ b/src/wayland/meta-wayland-actor-surface.c @@ -104,7 +104,7 @@ meta_wayland_actor_surface_queue_frame_callbacks (MetaWaylandActorSurface *actor wl_list_init (&pending->frame_callback_list); } -static double +double meta_wayland_actor_surface_get_geometry_scale (MetaWaylandActorSurface *actor_surface) { MetaWaylandSurfaceRole *surface_role = @@ -128,21 +128,6 @@ meta_wayland_actor_surface_get_geometry_scale (MetaWaylandActorSurface *actor_su } } -double -meta_wayland_actor_surface_calculate_scale (MetaWaylandActorSurface *actor_surface) -{ - MetaWaylandSurfaceRole *surface_role = - META_WAYLAND_SURFACE_ROLE (actor_surface); - MetaWaylandSurface *surface = - meta_wayland_surface_role_get_surface (surface_role); - double geometry_scale; - - geometry_scale = - meta_wayland_actor_surface_get_geometry_scale (actor_surface); - - return geometry_scale / (double) surface->scale; -} - static void meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor_surface) { @@ -164,6 +149,9 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor /* Wayland surface coordinate space -> stage coordinate space */ geometry_scale = meta_wayland_actor_surface_get_geometry_scale (actor_surface); + clutter_actor_set_scale (CLUTTER_ACTOR (surface_actor), + geometry_scale, + geometry_scale); surface_rect = (cairo_rectangle_int_t) { .width = meta_wayland_surface_get_width (surface) * geometry_scale, diff --git a/src/wayland/meta-wayland-actor-surface.h b/src/wayland/meta-wayland-actor-surface.h index 444b3b178..aa9f8fa5a 100644 --- a/src/wayland/meta-wayland-actor-surface.h +++ b/src/wayland/meta-wayland-actor-surface.h @@ -37,9 +37,7 @@ struct _MetaWaylandActorSurfaceClass }; void meta_wayland_actor_surface_sync_actor_state (MetaWaylandActorSurface *actor_surface); - -double meta_wayland_actor_surface_calculate_scale (MetaWaylandActorSurface *actor_surface); - +double meta_wayland_actor_surface_get_geometry_scale (MetaWaylandActorSurface *actor_surface); MetaSurfaceActor * meta_wayland_actor_surface_get_actor (MetaWaylandActorSurface *actor_surface); void meta_wayland_actor_surface_reset_actor (MetaWaylandActorSurface *actor_surface); diff --git a/src/wayland/meta-wayland-shell-surface.c b/src/wayland/meta-wayland-shell-surface.c index f8354ab7c..3ebfdd284 100644 --- a/src/wayland/meta-wayland-shell-surface.c +++ b/src/wayland/meta-wayland-shell-surface.c @@ -153,8 +153,7 @@ meta_wayland_shell_surface_surface_commit (MetaWaylandSurfaceRole *surface_role MetaWaylandSurfaceRoleClass *surface_role_class; MetaWindow *window; MetaWaylandBuffer *buffer; - CoglTexture *texture; - double scale; + double geometry_scale; surface_role_class = META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_shell_surface_parent_class); @@ -168,11 +167,12 @@ meta_wayland_shell_surface_surface_commit (MetaWaylandSurfaceRole *surface_role if (!window) return; - scale = meta_wayland_actor_surface_calculate_scale (actor_surface); - texture = meta_wayland_surface_get_texture (surface); + geometry_scale = meta_wayland_actor_surface_get_geometry_scale (actor_surface); - window->buffer_rect.width = cogl_texture_get_width (texture) * scale; - window->buffer_rect.height = cogl_texture_get_height (texture) * scale; + window->buffer_rect.width = + meta_wayland_surface_get_width (surface) * geometry_scale; + window->buffer_rect.height = + meta_wayland_surface_get_height (surface) * geometry_scale; } static void diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index f9cc118b6..787265f33 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -1584,8 +1584,6 @@ meta_wayland_surface_get_relative_coordinates (MetaWaylandSurface *surface, CLUTTER_ACTOR (meta_wayland_surface_get_actor (surface)); clutter_actor_transform_stage_point (actor, abs_x, abs_y, sx, sy); - *sx /= surface->scale; - *sy /= surface->scale; } }