clutter/actor: Update absolute_origin_changed inside set_allocation()
When manipulating the allocation of a ClutterActor from an allocate() vfunc override, clutter_actor_set_allocation() is used to let Clutter know about the changes. If the actors allocation or its absolute origin did not change before that, this can also affect the actors absolute_origin_changed property used by the children to detect changes to their absolute position. So fix this bug (which luckily didn't seem to affect us so far) and set priv->absolute_origin_changed to TRUE in case the origin changes inside clutter_actor_set_allocation_internal(). Since this function is always called when our allocation changes, we no longer need to update absolute_origin_changed in clutter_actor_allocate() now. Since a change to the absolute origin always affects the resource scale, too, we also need to move that check from clutter_actor_allocate() here to make sure we update the resource scale. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1247
This commit is contained in:
parent
9f121a211d
commit
0a37c32a72
@ -2603,6 +2603,11 @@ clutter_actor_set_allocation_internal (ClutterActor *self,
|
|||||||
priv->needs_height_request = FALSE;
|
priv->needs_height_request = FALSE;
|
||||||
priv->needs_allocation = FALSE;
|
priv->needs_allocation = FALSE;
|
||||||
|
|
||||||
|
priv->absolute_origin_changed |= x1_changed || y1_changed;
|
||||||
|
|
||||||
|
if (priv->absolute_origin_changed || x2_changed || y2_changed)
|
||||||
|
priv->needs_compute_resource_scale = TRUE;
|
||||||
|
|
||||||
if (x1_changed ||
|
if (x1_changed ||
|
||||||
y1_changed ||
|
y1_changed ||
|
||||||
x2_changed ||
|
x2_changed ||
|
||||||
@ -10146,9 +10151,8 @@ clutter_actor_allocate (ClutterActor *self,
|
|||||||
? priv->parent->priv->absolute_origin_changed
|
? priv->parent->priv->absolute_origin_changed
|
||||||
: FALSE;
|
: FALSE;
|
||||||
|
|
||||||
priv->absolute_origin_changed |= origin_changed;
|
stage_allocation_changed =
|
||||||
|
priv->absolute_origin_changed || origin_changed || size_changed;
|
||||||
stage_allocation_changed = priv->absolute_origin_changed || size_changed;
|
|
||||||
|
|
||||||
/* If we get an allocation "out of the blue"
|
/* If we get an allocation "out of the blue"
|
||||||
* (we did not queue relayout), then we want to
|
* (we did not queue relayout), then we want to
|
||||||
@ -10171,9 +10175,6 @@ clutter_actor_allocate (ClutterActor *self,
|
|||||||
if (CLUTTER_ACTOR_IS_MAPPED (self))
|
if (CLUTTER_ACTOR_IS_MAPPED (self))
|
||||||
self->priv->needs_paint_volume_update = TRUE;
|
self->priv->needs_paint_volume_update = TRUE;
|
||||||
|
|
||||||
if (stage_allocation_changed)
|
|
||||||
priv->needs_compute_resource_scale = TRUE;
|
|
||||||
|
|
||||||
if (!stage_allocation_changed)
|
if (!stage_allocation_changed)
|
||||||
{
|
{
|
||||||
/* If the actor didn't move but needs_allocation is set, we just
|
/* If the actor didn't move but needs_allocation is set, we just
|
||||||
|
Loading…
Reference in New Issue
Block a user