clutter/actor: Invalidate paint volumes of clones when ours changes

Turns out ClutterClones need a bit of extra handling as always, there's
currently nothing that invalidates a clones paint volume when the source
actors paint volume changes.

Since ClutterClones get_paint_volume() implementation simply takes the
source actors paint volume and returns that, we should make sure they
are kept in sync and invalidate the clones paint volume as soon as the
source actor gets its PV invalidated.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1829>
This commit is contained in:
Jonas Dreßler 2021-04-15 15:33:26 +02:00 committed by Marge Bot
parent af958e0650
commit 2be30a3482

View File

@ -1500,9 +1500,28 @@ queue_update_stage_views (ClutterActor *actor)
}
}
static void queue_update_paint_volume (ClutterActor *actor);
static void
queue_update_paint_volume_on_clones (ClutterActor *self)
{
ClutterActorPrivate *priv = self->priv;
GHashTableIter iter;
gpointer key;
if (priv->clones == NULL)
return;
g_hash_table_iter_init (&iter, priv->clones);
while (g_hash_table_iter_next (&iter, &key, NULL))
queue_update_paint_volume (key);
}
void
queue_update_paint_volume (ClutterActor *actor)
{
queue_update_paint_volume_on_clones (actor);
while (actor)
{
actor->priv->needs_paint_volume_update = TRUE;