clutter/actor: Invalidate stage-views on transformation changes
Since we now have the neccessary infrastructure to get notified about changes to the absolute transformation matrix, we can also invalidate the stage-views list on updates to this matrix. So rename absolute_allocation_changed() to absolute_geometry_changed() to make it clear this function is not only about allocations, and call that function recursively for all children on changes to the transformation matrix, too. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1343
This commit is contained in:
parent
64304b0b68
commit
df4eeff6f2
@ -2523,21 +2523,33 @@ clutter_actor_notify_if_geometry_changed (ClutterActor *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
absolute_allocation_changed (ClutterActor *actor)
|
absolute_geometry_changed (ClutterActor *actor)
|
||||||
{
|
{
|
||||||
queue_update_stage_views (actor);
|
queue_update_stage_views (actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ClutterActorTraverseVisitFlags
|
static ClutterActorTraverseVisitFlags
|
||||||
absolute_allocation_changed_cb (ClutterActor *actor,
|
absolute_geometry_changed_cb (ClutterActor *actor,
|
||||||
int depth,
|
int depth,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
absolute_allocation_changed (actor);
|
absolute_geometry_changed (actor);
|
||||||
|
|
||||||
return CLUTTER_ACTOR_TRAVERSE_VISIT_CONTINUE;
|
return CLUTTER_ACTOR_TRAVERSE_VISIT_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transform_changed (ClutterActor *actor)
|
||||||
|
{
|
||||||
|
actor->priv->transform_valid = FALSE;
|
||||||
|
|
||||||
|
_clutter_actor_traverse (actor,
|
||||||
|
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
|
||||||
|
absolute_geometry_changed_cb,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/*< private >
|
/*< private >
|
||||||
* clutter_actor_set_allocation_internal:
|
* clutter_actor_set_allocation_internal:
|
||||||
* @self: a #ClutterActor
|
* @self: a #ClutterActor
|
||||||
@ -2587,7 +2599,7 @@ clutter_actor_set_allocation_internal (ClutterActor *self,
|
|||||||
priv->absolute_origin_changed |= x1_changed || y1_changed;
|
priv->absolute_origin_changed |= x1_changed || y1_changed;
|
||||||
|
|
||||||
if (priv->absolute_origin_changed || x2_changed || y2_changed)
|
if (priv->absolute_origin_changed || x2_changed || y2_changed)
|
||||||
absolute_allocation_changed (self);
|
absolute_geometry_changed (self);
|
||||||
|
|
||||||
if (x1_changed ||
|
if (x1_changed ||
|
||||||
y1_changed ||
|
y1_changed ||
|
||||||
@ -2597,7 +2609,7 @@ clutter_actor_set_allocation_internal (ClutterActor *self,
|
|||||||
CLUTTER_NOTE (LAYOUT, "Allocation for '%s' changed",
|
CLUTTER_NOTE (LAYOUT, "Allocation for '%s' changed",
|
||||||
_clutter_actor_get_debug_name (self));
|
_clutter_actor_get_debug_name (self));
|
||||||
|
|
||||||
priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
g_object_notify_by_pspec (obj, obj_props[PROP_ALLOCATION]);
|
g_object_notify_by_pspec (obj, obj_props[PROP_ALLOCATION]);
|
||||||
|
|
||||||
@ -4456,7 +4468,7 @@ clutter_actor_set_pivot_point_internal (ClutterActor *self,
|
|||||||
info = _clutter_actor_get_transform_info (self);
|
info = _clutter_actor_get_transform_info (self);
|
||||||
info->pivot = *pivot;
|
info->pivot = *pivot;
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_PIVOT_POINT]);
|
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_PIVOT_POINT]);
|
||||||
|
|
||||||
@ -4472,7 +4484,7 @@ clutter_actor_set_pivot_point_z_internal (ClutterActor *self,
|
|||||||
info = _clutter_actor_get_transform_info (self);
|
info = _clutter_actor_get_transform_info (self);
|
||||||
info->pivot_z = pivot_z;
|
info->pivot_z = pivot_z;
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_PIVOT_POINT_Z]);
|
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_PIVOT_POINT_Z]);
|
||||||
|
|
||||||
@ -4506,7 +4518,8 @@ clutter_actor_set_translation_internal (ClutterActor *self,
|
|||||||
else
|
else
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
clutter_actor_queue_redraw (self);
|
clutter_actor_queue_redraw (self);
|
||||||
g_object_notify_by_pspec (obj, pspec);
|
g_object_notify_by_pspec (obj, pspec);
|
||||||
}
|
}
|
||||||
@ -4638,7 +4651,7 @@ clutter_actor_set_rotation_angle_internal (ClutterActor *self,
|
|||||||
else
|
else
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
clutter_actor_queue_redraw (self);
|
clutter_actor_queue_redraw (self);
|
||||||
|
|
||||||
@ -4763,7 +4776,8 @@ clutter_actor_set_scale_factor_internal (ClutterActor *self,
|
|||||||
else
|
else
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
clutter_actor_queue_redraw (self);
|
clutter_actor_queue_redraw (self);
|
||||||
g_object_notify_by_pspec (obj, pspec);
|
g_object_notify_by_pspec (obj, pspec);
|
||||||
}
|
}
|
||||||
@ -9507,7 +9521,7 @@ clutter_actor_allocate (ClutterActor *self,
|
|||||||
{
|
{
|
||||||
_clutter_actor_traverse (self,
|
_clutter_actor_traverse (self,
|
||||||
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
|
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
|
||||||
absolute_allocation_changed_cb,
|
absolute_geometry_changed_cb,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
@ -9565,7 +9579,7 @@ clutter_actor_allocate (ClutterActor *self,
|
|||||||
{
|
{
|
||||||
_clutter_actor_traverse (self,
|
_clutter_actor_traverse (self,
|
||||||
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
|
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
|
||||||
absolute_allocation_changed_cb,
|
absolute_geometry_changed_cb,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
@ -11186,7 +11200,7 @@ clutter_actor_set_z_position_internal (ClutterActor *self,
|
|||||||
{
|
{
|
||||||
info->z_position = z_position;
|
info->z_position = z_position;
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
clutter_actor_queue_redraw (self);
|
clutter_actor_queue_redraw (self);
|
||||||
|
|
||||||
@ -14658,7 +14672,7 @@ clutter_actor_set_transform_internal (ClutterActor *self,
|
|||||||
info->transform = *transform;
|
info->transform = *transform;
|
||||||
info->transform_set = !cogl_matrix_is_identity (&info->transform);
|
info->transform_set = !cogl_matrix_is_identity (&info->transform);
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
|
|
||||||
clutter_actor_queue_redraw (self);
|
clutter_actor_queue_redraw (self);
|
||||||
|
|
||||||
@ -19188,7 +19202,7 @@ clutter_actor_set_child_transform_internal (ClutterActor *self,
|
|||||||
/* we need to reset the transform_valid flag on each child */
|
/* we need to reset the transform_valid flag on each child */
|
||||||
clutter_actor_iter_init (&iter, self);
|
clutter_actor_iter_init (&iter, self);
|
||||||
while (clutter_actor_iter_next (&iter, &child))
|
while (clutter_actor_iter_next (&iter, &child))
|
||||||
child->priv->transform_valid = FALSE;
|
transform_changed (child);
|
||||||
|
|
||||||
clutter_actor_queue_redraw (self);
|
clutter_actor_queue_redraw (self);
|
||||||
|
|
||||||
@ -19753,5 +19767,5 @@ clutter_actor_invalidate_transform (ClutterActor *self)
|
|||||||
{
|
{
|
||||||
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
||||||
|
|
||||||
self->priv->transform_valid = FALSE;
|
transform_changed (self);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user