From 3f85158b85f66e003c5fecd3314bb178799f9b0c Mon Sep 17 00:00:00 2001 From: msizanoen1 Date: Mon, 17 Apr 2023 18:27:18 +0700 Subject: 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: --- src/compositor/meta-surface-actor.c | 13 ++++++++++--- 1 file 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; } -- cgit v1.2.1