[mutter/gbsneto/content: 10/11] wayland: Don't scale input and opaque regions
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/content: 10/11] wayland: Don't scale input and opaque regions
- Date: Fri, 12 Jul 2019 17:37:08 +0000 (UTC)
commit 46b88fa9ea1d0c5fbd59f353e99deb7d12b83b5d
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]