60 lines
2.5 KiB
Diff
60 lines
2.5 KiB
Diff
From 41130b08eb104b8071833e0ee745b57cf6143795 Mon Sep 17 00:00:00 2001
|
|
From: Robert Mader <robert.mader@posteo.de>
|
|
Date: Fri, 6 Mar 2020 13:42:04 +0100
|
|
Subject: [PATCH 40/48] surface-actor: Add culling offset for geometry scale
|
|
|
|
This fixes a case that was overlooked in
|
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1036 - when we
|
|
have a geometry scale > 1 and Wayland subsurfaces that have an offset
|
|
to their parent surface (which is often the case when the toplevel surface
|
|
includes decoration/shadows etc.), we have to add extra offset to their
|
|
opaque regions so they match their 'visible' location.
|
|
|
|
This is necessary as `meta_cullable_cull_out_children` moves the coordinate
|
|
system during culling, but does not know about geometry scale.
|
|
|
|
Also, remove the redundant check for `window_actor` - we only hit this code
|
|
path if a `window_actor` culls out its children.
|
|
|
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1108
|
|
---
|
|
src/compositor/meta-surface-actor.c | 13 ++++++++-----
|
|
1 file changed, 8 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c
|
|
index 41aa5a26d..c328fab73 100644
|
|
--- a/src/compositor/meta-surface-actor.c
|
|
+++ b/src/compositor/meta-surface-actor.c
|
|
@@ -282,7 +282,8 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
|
MetaWindowActor *window_actor;
|
|
cairo_region_t *scaled_opaque_region;
|
|
cairo_region_t *opaque_region;
|
|
- int geometry_scale = 1;
|
|
+ int geometry_scale;
|
|
+ float x, y;
|
|
|
|
opaque_region = meta_shaped_texture_get_opaque_region (priv->texture);
|
|
if (opaque_region)
|
|
@@ -305,12 +306,14 @@ meta_surface_actor_cull_out (MetaCullable *cullable,
|
|
return;
|
|
}
|
|
|
|
- window_actor =
|
|
- meta_window_actor_from_actor (CLUTTER_ACTOR (surface_actor));
|
|
- if (window_actor)
|
|
- geometry_scale = meta_window_actor_get_geometry_scale (window_actor);
|
|
+ window_actor = meta_window_actor_from_actor (CLUTTER_ACTOR (surface_actor));
|
|
+ geometry_scale = meta_window_actor_get_geometry_scale (window_actor);
|
|
+ clutter_actor_get_position (CLUTTER_ACTOR (surface_actor), &x, &y);
|
|
|
|
+ cairo_region_translate (opaque_region, x, y);
|
|
scaled_opaque_region = meta_region_scale (opaque_region, geometry_scale);
|
|
+ cairo_region_translate (scaled_opaque_region, -x, -y);
|
|
+ cairo_region_translate (opaque_region, -x, -y);
|
|
|
|
if (unobscured_region)
|
|
cairo_region_subtract (unobscured_region, scaled_opaque_region);
|
|
--
|
|
2.26.0.rc2
|
|
|