summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-04-28 18:10:49 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-06-28 16:45:04 +0200
commitc478b3bb4fb3bb73b2dc99217401fc2d78958a1b (patch)
treea47c0db97735101e55d8e3c09bf024915571d0ae
parent768ec15ea072df21dd6caeb2507d41223ade9116 (diff)
downloadmutter-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.c37
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