diff options
author | msizanoen1 <msizanoen@qtmlabs.xyz> | 2023-04-17 18:27:18 +0700 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2023-05-03 08:53:36 +0000 |
commit | 3f85158b85f66e003c5fecd3314bb178799f9b0c (patch) | |
tree | d1a9cf56138000e0902c24f6cb95b31ff24110fd | |
parent | 4048562961c461c33ab7dfcb1bdd9066004a9a11 (diff) | |
download | mutter-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.c | 13 |
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; } |