summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsizanoen1 <msizanoen@qtmlabs.xyz>2023-04-17 18:27:18 +0700
committerMarge Bot <marge-bot@gnome.org>2023-05-03 08:53:36 +0000
commit3f85158b85f66e003c5fecd3314bb178799f9b0c (patch)
treed1a9cf56138000e0902c24f6cb95b31ff24110fd
parent4048562961c461c33ab7dfcb1bdd9066004a9a11 (diff)
downloadmutter-3f85158b85f66e003c5fecd3314bb178799f9b0c.tar.gz
surface-actor: Queue rectangles of update region separately
This aims to help reduce the amount of pixels redrawn on the screen in case the damage rectangle is partially occluded by another surface. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2965>
-rw-r--r--src/compositor/meta-surface-actor.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c
index fcd94b86d..1bc58667a 100644
--- a/src/compositor/meta-surface-actor.c
+++ b/src/compositor/meta-surface-actor.c
@@ -412,10 +412,17 @@ meta_surface_actor_update_area (MetaSurfaceActor *self,
if (!cairo_region_is_empty (intersection))
{
- cairo_rectangle_int_t damage_rect;
+ int i, n_rectangles;
+
+ n_rectangles = cairo_region_num_rectangles (intersection);
+ for (i = 0; i < n_rectangles; i++)
+ {
+ cairo_rectangle_int_t rect;
+
+ cairo_region_get_rectangle (intersection, i, &rect);
+ clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (self), &rect);
+ }
- cairo_region_get_extents (intersection, &damage_rect);
- clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (self), &damage_rect);
repaint_scheduled = TRUE;
}