[mutter/gbsneto/content: 9/10] 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: 9/10] wayland: Don't scale input and opaque regions
- Date: Thu, 22 Aug 2019 08:18:43 +0000 (UTC)
commit c781b09b237b18caad2f8df53a1c713dc97ede0a
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 | 26 +++++++++++---------------
2 files changed, 28 insertions(+), 22 deletions(-)
---
diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c
index c7256c3b8..79c621214 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
@@ -249,17 +250,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, scaled_opaque_region);
+ if (clip_region)
+ cairo_region_subtract (clip_region, scaled_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..15d00cd9b 100644
--- a/src/wayland/meta-wayland-actor-surface.c
+++ b/src/wayland/meta-wayland-actor-surface.c
@@ -160,13 +160,12 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
if (surface->input_region)
{
- cairo_region_t *scaled_input_region;
+ cairo_region_t *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);
+ input_region = cairo_region_copy (surface->input_region);
+ cairo_region_intersect_rectangle (input_region, &surface_rect);
+ meta_surface_actor_set_input_region (surface_actor, input_region);
+ cairo_region_destroy (input_region);
}
else
{
@@ -175,15 +174,12 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
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);
+ cairo_region_t *opaque_region;
+
+ opaque_region = cairo_region_copy (surface->opaque_region);
+ cairo_region_intersect_rectangle (opaque_region, &surface_rect);
+ meta_surface_actor_set_opaque_region (surface_actor, opaque_region);
+ cairo_region_destroy (opaque_region);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]