diff options
-rw-r--r-- | clutter/clutter/clutter-actor.c | 25 | ||||
-rw-r--r-- | clutter/clutter/clutter-scroll-actor.c | 4 |
2 files changed, 23 insertions, 6 deletions
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index b689bf033..3559b4d64 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -4418,7 +4418,7 @@ clutter_actor_remove_child_internal (ClutterActor *self, g_object_unref (child); } -static const ClutterTransformInfo default_transform_info = { +static ClutterTransformInfo default_transform_info = { 0.0, /* rotation-x */ 0.0, /* rotation-y */ 0.0, /* rotation-z */ @@ -4432,12 +4432,27 @@ static const ClutterTransformInfo default_transform_info = { GRAPHENE_POINT_INIT_ZERO, /* pivot */ 0.f, /* pivot-z */ - COGL_MATRIX_INIT_IDENTITY, + { }, FALSE, /* transform */ - COGL_MATRIX_INIT_IDENTITY, + { }, FALSE, /* child-transform */ }; +static inline const ClutterTransformInfo * +get_default_transform_info (void) +{ + static gsize initialized = FALSE; + + if (G_UNLIKELY (g_once_init_enter (&initialized))) + { + cogl_matrix_init_identity (&default_transform_info.transform); + cogl_matrix_init_identity (&default_transform_info.child_transform); + g_once_init_leave (&initialized, TRUE); + } + + return &default_transform_info; +} + /*< private > * _clutter_actor_get_transform_info_or_defaults: * @self: a #ClutterActor @@ -4460,7 +4475,7 @@ _clutter_actor_get_transform_info_or_defaults (ClutterActor *self) if (info != NULL) return info; - return &default_transform_info; + return get_default_transform_info (); } static void @@ -4497,7 +4512,7 @@ _clutter_actor_get_transform_info (ClutterActor *self) { info = g_slice_new (ClutterTransformInfo); - *info = default_transform_info; + *info = *get_default_transform_info (); g_object_set_qdata_full (G_OBJECT (self), quark_actor_transform_info, info, diff --git a/clutter/clutter/clutter-scroll-actor.c b/clutter/clutter/clutter-scroll-actor.c index e06247dd4..289c81686 100644 --- a/clutter/clutter/clutter-scroll-actor.c +++ b/clutter/clutter/clutter-scroll-actor.c @@ -99,9 +99,11 @@ clutter_scroll_actor_set_scroll_to_internal (ClutterScrollActor *self, { ClutterScrollActorPrivate *priv = self->priv; ClutterActor *actor = CLUTTER_ACTOR (self); - CoglMatrix m = COGL_MATRIX_INIT_IDENTITY; + CoglMatrix m; float dx, dy; + cogl_matrix_init_identity (&m); + if (graphene_point_equal (&priv->scroll_to, point)) return; |