[mutter/gbsneto/content: 11/12] wayland: Don't scale input and opaque regions



commit bef6d3c6e710bc175a814c3adf898c577a0caa31
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Fri Jul 12 13:56:14 2019 -0300

    wayland: Don't scale input and opaque regions
    
    Leave them at surface coordinates and let MetaSurfaceActor
    and MetaShapedTexture handle the interactions between buffer
    and geometry scale.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/409

 src/compositor/meta-surface-actor.c      | 24 +++++++++++++------
 src/wayland/meta-wayland-actor-surface.c | 40 ++------------------------------
 2 files changed, 19 insertions(+), 45 deletions(-)
---
diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c
index b68eb5eee..7a2c4e84e 100644
--- a/src/compositor/meta-surface-actor.c
+++ b/src/compositor/meta-surface-actor.c
@@ -22,6 +22,7 @@
 #include "clutter/clutter.h"
 #include "compositor/meta-cullable.h"
 #include "compositor/meta-shaped-texture-private.h"
+#include "compositor/region-utils.h"
 #include "meta/meta-shaped-texture.h"
 
 typedef struct _MetaSurfaceActorPrivate
@@ -245,17 +246,26 @@ meta_surface_actor_cull_out (MetaCullable   *cullable,
 
   if (opacity == 0xff)
     {
+      cairo_region_t *scaled_opaque_region;
       cairo_region_t *opaque_region;
+      double geometry_scale;
 
       opaque_region = meta_shaped_texture_get_opaque_region (priv->texture);
 
-      if (opaque_region)
-        {
-          if (unobscured_region)
-            cairo_region_subtract (unobscured_region, opaque_region);
-          if (clip_region)
-            cairo_region_subtract (clip_region, opaque_region);
-        }
+      if (!opaque_region)
+        return;
+
+      clutter_actor_get_scale (CLUTTER_ACTOR (surface_actor),
+                               &geometry_scale,
+                               NULL);
+      scaled_opaque_region = meta_region_scale (opaque_region, geometry_scale);
+
+      if (unobscured_region)
+        cairo_region_subtract (unobscured_region, opaque_region);
+      if (clip_region)
+        cairo_region_subtract (clip_region, opaque_region);
+
+      cairo_region_destroy (scaled_opaque_region);
     }
 }
 
diff --git a/src/wayland/meta-wayland-actor-surface.c b/src/wayland/meta-wayland-actor-surface.c
index bf964dcae..4f3548ad9 100644
--- a/src/wayland/meta-wayland-actor-surface.c
+++ b/src/wayland/meta-wayland-actor-surface.c
@@ -140,7 +140,6 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
   MetaSurfaceActor *surface_actor;
   MetaShapedTexture *stex;
   GList *l;
-  cairo_rectangle_int_t surface_rect;
   int geometry_scale;
 
   surface_actor = priv->actor;
@@ -153,43 +152,8 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
                            geometry_scale,
                            geometry_scale);
 
-  surface_rect = (cairo_rectangle_int_t) {
-    .width = meta_wayland_surface_get_width (surface) * geometry_scale,
-    .height = meta_wayland_surface_get_height (surface) * geometry_scale,
-  };
-
-  if (surface->input_region)
-    {
-      cairo_region_t *scaled_input_region;
-
-      scaled_input_region = meta_region_scale (surface->input_region,
-                                               geometry_scale);
-      cairo_region_intersect_rectangle (scaled_input_region, &surface_rect);
-      meta_surface_actor_set_input_region (surface_actor, scaled_input_region);
-      cairo_region_destroy (scaled_input_region);
-    }
-  else
-    {
-      meta_surface_actor_set_input_region (surface_actor, NULL);
-    }
-
-  if (surface->opaque_region)
-    {
-      cairo_region_t *scaled_opaque_region;
-
-      /* Wayland surface coordinate space -> stage coordinate space */
-      scaled_opaque_region = meta_region_scale (surface->opaque_region,
-                                                geometry_scale);
-      cairo_region_intersect_rectangle (scaled_opaque_region, &surface_rect);
-      meta_surface_actor_set_opaque_region (surface_actor,
-                                            scaled_opaque_region);
-      cairo_region_destroy (scaled_opaque_region);
-    }
-  else
-    {
-      meta_surface_actor_set_opaque_region (surface_actor, NULL);
-    }
-
+  meta_surface_actor_set_input_region (surface_actor, surface->input_region);
+  meta_surface_actor_set_opaque_region (surface_actor, surface->opaque_region);
   meta_surface_actor_set_transform (surface_actor, surface->buffer_transform);
 
   if (surface->viewport.has_src_rect)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]