summaryrefslogtreecommitdiff
path: root/clutter
diff options
context:
space:
mode:
authorSam Spilsbury <sam@endlessm.com>2018-09-02 22:17:43 +0800
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2018-09-18 19:39:12 +0000
commita8a3c1017fd8604f4f7db272a867ae17b0214cf7 (patch)
tree56822fcd2b95e07b46e9ee24de073cbcb609f9ed /clutter
parent5d19aee23a55a642517ec43b116e4452ab0c6cf1 (diff)
downloadmutter-a8a3c1017fd8604f4f7db272a867ae17b0214cf7.tar.gz
actor: Also recompute paint volume if we recently dropped effects
Otherwise we'll be stuck with the same paint volume on the last frame of the given effect, which could be wrong.
Diffstat (limited to 'clutter')
-rw-r--r--clutter/clutter/clutter-actor.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 843e04abb..e70892308 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -841,6 +841,7 @@ struct _ClutterActorPrivate
guint needs_x_expand : 1;
guint needs_y_expand : 1;
guint needs_paint_volume_update : 1;
+ guint had_effects_on_last_paint_volume_update : 1;
};
enum
@@ -17557,23 +17558,33 @@ _clutter_actor_has_active_paint_volume_override_effects (ClutterActor *self)
static ClutterPaintVolume *
_clutter_actor_get_paint_volume_mutable (ClutterActor *self)
{
+ gboolean has_paint_volume_override_effects;
ClutterActorPrivate *priv;
priv = self->priv;
+ has_paint_volume_override_effects = _clutter_actor_has_active_paint_volume_override_effects (self);
+
if (priv->paint_volume_valid)
{
/* If effects are applied, the actor paint volume
* needs to be recomputed on each paint, since those
* paint volumes could change over the duration of the
- * effect. */
+ * effect.
+ *
+ * We also need to update the paint volume if we went
+ * from having effects to not having effects on the last
+ * paint volume update. */
if (!priv->needs_paint_volume_update &&
priv->current_effect == NULL &&
- !_clutter_actor_has_active_paint_volume_override_effects (self))
+ !has_paint_volume_override_effects &&
+ !priv->had_effects_on_last_paint_volume_update)
return &priv->paint_volume;
clutter_paint_volume_free (&priv->paint_volume);
}
+ priv->had_effects_on_last_paint_volume_update = has_paint_volume_override_effects;
+
if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume))
{
priv->paint_volume_valid = TRUE;