[mutter] clutter/actor: Invalidate stage-views on transformation changes
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter/actor: Invalidate stage-views on transformation changes
- Date: Tue, 30 Jun 2020 18:17:31 +0000 (UTC)
commit df4eeff6f2c8f94807e3fff9b63a8322ae4df49a
Author: Jonas Dreßler <verdre v0yd nl>
Date: Sat Mar 21 17:28:52 2020 +0100
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
clutter/clutter/clutter-actor.c | 50 ++++++++++++++++++++++++++---------------
1 file changed, 32 insertions(+), 18 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 052c84a166..7d3738ada1 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -2523,21 +2523,33 @@ clutter_actor_notify_if_geometry_changed (ClutterActor *self,
}
static void
-absolute_allocation_changed (ClutterActor *actor)
+absolute_geometry_changed (ClutterActor *actor)
{
queue_update_stage_views (actor);
}
static ClutterActorTraverseVisitFlags
-absolute_allocation_changed_cb (ClutterActor *actor,
- int depth,
- gpointer user_data)
+absolute_geometry_changed_cb (ClutterActor *actor,
+ int depth,
+ gpointer user_data)
{
- absolute_allocation_changed (actor);
+ absolute_geometry_changed (actor);
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 >
* clutter_actor_set_allocation_internal:
* @self: a #ClutterActor
@@ -2587,7 +2599,7 @@ clutter_actor_set_allocation_internal (ClutterActor *self,
priv->absolute_origin_changed |= x1_changed || y1_changed;
if (priv->absolute_origin_changed || x2_changed || y2_changed)
- absolute_allocation_changed (self);
+ absolute_geometry_changed (self);
if (x1_changed ||
y1_changed ||
@@ -2597,7 +2609,7 @@ clutter_actor_set_allocation_internal (ClutterActor *self,
CLUTTER_NOTE (LAYOUT, "Allocation for '%s' changed",
_clutter_actor_get_debug_name (self));
- priv->transform_valid = FALSE;
+ transform_changed (self);
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->pivot = *pivot;
- self->priv->transform_valid = FALSE;
+ transform_changed (self);
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->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]);
@@ -4506,7 +4518,8 @@ clutter_actor_set_translation_internal (ClutterActor *self,
else
g_assert_not_reached ();
- self->priv->transform_valid = FALSE;
+ transform_changed (self);
+
clutter_actor_queue_redraw (self);
g_object_notify_by_pspec (obj, pspec);
}
@@ -4638,7 +4651,7 @@ clutter_actor_set_rotation_angle_internal (ClutterActor *self,
else
g_assert_not_reached ();
- self->priv->transform_valid = FALSE;
+ transform_changed (self);
clutter_actor_queue_redraw (self);
@@ -4763,7 +4776,8 @@ clutter_actor_set_scale_factor_internal (ClutterActor *self,
else
g_assert_not_reached ();
- self->priv->transform_valid = FALSE;
+ transform_changed (self);
+
clutter_actor_queue_redraw (self);
g_object_notify_by_pspec (obj, pspec);
}
@@ -9507,7 +9521,7 @@ clutter_actor_allocate (ClutterActor *self,
{
_clutter_actor_traverse (self,
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
- absolute_allocation_changed_cb,
+ absolute_geometry_changed_cb,
NULL,
NULL);
}
@@ -9565,7 +9579,7 @@ clutter_actor_allocate (ClutterActor *self,
{
_clutter_actor_traverse (self,
CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST,
- absolute_allocation_changed_cb,
+ absolute_geometry_changed_cb,
NULL,
NULL);
}
@@ -11186,7 +11200,7 @@ clutter_actor_set_z_position_internal (ClutterActor *self,
{
info->z_position = z_position;
- self->priv->transform_valid = FALSE;
+ transform_changed (self);
clutter_actor_queue_redraw (self);
@@ -14658,7 +14672,7 @@ clutter_actor_set_transform_internal (ClutterActor *self,
info->transform = *transform;
info->transform_set = !cogl_matrix_is_identity (&info->transform);
- self->priv->transform_valid = FALSE;
+ transform_changed (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 */
clutter_actor_iter_init (&iter, self);
while (clutter_actor_iter_next (&iter, &child))
- child->priv->transform_valid = FALSE;
+ transform_changed (child);
clutter_actor_queue_redraw (self);
@@ -19753,5 +19767,5 @@ clutter_actor_invalidate_transform (ClutterActor *self)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
- self->priv->transform_valid = FALSE;
+ transform_changed (self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]