diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-04-28 18:10:49 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-06-28 16:45:04 +0200 |
commit | c478b3bb4fb3bb73b2dc99217401fc2d78958a1b (patch) | |
tree | a47c0db97735101e55d8e3c09bf024915571d0ae | |
parent | 768ec15ea072df21dd6caeb2507d41223ade9116 (diff) | |
download | mutter-c478b3bb4fb3bb73b2dc99217401fc2d78958a1b.tar.gz |
compositor: Do not optimize obscured areas away in paint volumes
This optimization was presumably added before Clutter was able to
invalidate selected regions of an actor. Paint volumes are supposed
to be invariable as long as the actor conditions don't change.
Stacking of other actors shouldn't affect the paint volume, so it's
actually wrong to optimize those areas away here.
-rw-r--r-- | src/compositor/meta-shaped-texture.c | 37 |
1 files changed, 1 insertions, 36 deletions
diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c index 0240c067c..6f4d3acbb 100644 --- a/src/compositor/meta-shaped-texture.c +++ b/src/compositor/meta-shaped-texture.c @@ -695,45 +695,10 @@ effective_unobscured_region (MetaShapedTexture *self) } static gboolean -get_unobscured_bounds (MetaShapedTexture *self, - cairo_rectangle_int_t *unobscured_bounds) -{ - cairo_region_t *unobscured_region = effective_unobscured_region (self); - - if (unobscured_region) - { - cairo_region_get_extents (unobscured_region, unobscured_bounds); - return TRUE; - } - else - return FALSE; -} - -static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *actor, ClutterPaintVolume *volume) { - MetaShapedTexture *self = META_SHAPED_TEXTURE (actor); - ClutterActorBox box; - cairo_rectangle_int_t unobscured_bounds; - - if (!clutter_actor_has_allocation (actor)) - return FALSE; - - clutter_actor_get_allocation_box (actor, &box); - - if (get_unobscured_bounds (self, &unobscured_bounds)) - { - box.x1 = MAX (unobscured_bounds.x, box.x1); - box.x2 = MIN (unobscured_bounds.x + unobscured_bounds.width, box.x2); - box.y1 = MAX (unobscured_bounds.y, box.y1); - box.y2 = MIN (unobscured_bounds.y + unobscured_bounds.height, box.y2); - } - box.x2 = MAX (box.x2, box.x1); - box.y2 = MAX (box.y2, box.y1); - - clutter_paint_volume_union_box (volume, &box); - return TRUE; + return clutter_paint_volume_set_from_allocation (volume, actor); } void |