Backport all patches to git master for various fixes inc (#1809717)
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user