From bed2d9e7876064c70b87fe2f2cd4f5fa65b1082e Mon Sep 17 00:00:00 2001 From: Adel Gadllah Date: Thu, 29 Sep 2011 15:31:30 +0200 Subject: [PATCH] ClutterActor: Add clutter_actor_has_effects Adds an efficent way to query whether an actor has any applied effects. https://bugzilla.gnome.org/show_bug.cgi?id=660471 --- clutter/clutter-actor-meta-private.h | 2 ++ clutter/clutter-actor-meta.c | 21 +++++++++++++++++++++ clutter/clutter-actor.c | 22 ++++++++++++++++++++++ clutter/clutter-effect.h | 2 ++ 4 files changed, 47 insertions(+) diff --git a/clutter/clutter-actor-meta-private.h b/clutter/clutter-actor-meta-private.h index d539bdb78..661c352a5 100644 --- a/clutter/clutter-actor-meta-private.h +++ b/clutter/clutter-actor-meta-private.h @@ -75,6 +75,8 @@ void _clutter_meta_group_clear_metas (ClutterMetaGroup *group ClutterActorMeta * _clutter_meta_group_get_meta (ClutterMetaGroup *group, const gchar *name); +gboolean _clutter_meta_group_has_metas_no_internal (ClutterMetaGroup *group); + GList * _clutter_meta_group_get_metas_no_internal (ClutterMetaGroup *group); void _clutter_meta_group_clear_metas_no_internal (ClutterMetaGroup *group); diff --git a/clutter/clutter-actor-meta.c b/clutter/clutter-actor-meta.c index 0ebb9c886..cd3511774 100644 --- a/clutter/clutter-actor-meta.c +++ b/clutter/clutter-actor-meta.c @@ -552,6 +552,27 @@ _clutter_meta_group_get_metas_no_internal (ClutterMetaGroup *group) return g_list_reverse (ret); } +/* + * _clutter_meta_group_has_metas_no_internal: + * @group: a #ClutterMetaGroup + * + * Returns whether the group has any metas that have an internal priority. + * + * Return value: %TRUE if metas with internal priority exist + * %FALSE otherwise + */ +gboolean +_clutter_meta_group_has_metas_no_internal (ClutterMetaGroup *group) +{ + GList *l; + + for (l = group->meta; l; l = l->next) + if (_clutter_actor_meta_is_internal (l->data)) + return TRUE; + + return FALSE; +} + /* * _clutter_meta_group_clear_metas: * @group: a #ClutterMetaGroup diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index 523e845c1..76882f958 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -12452,6 +12452,28 @@ clutter_actor_has_overlaps (ClutterActor *self) return CLUTTER_ACTOR_GET_CLASS (self)->has_overlaps (self); } +/** + * clutter_actor_has_effects: + * @self: A #ClutterActor + * + * Returns whether the actor has any effects applied. + * + * Return value: %TRUE if the actor has any effects, + * %FALSE otherwise + * + * Since: 1.10 + */ +gboolean +clutter_actor_has_effects (ClutterActor *self) +{ + g_return_val_if_fail (CLUTTER_IS_ACTOR (self), TRUE); + + if (self->priv->effects == NULL) + return FALSE; + + return _clutter_meta_group_has_metas_no_internal (self->priv->effects); +} + gint _clutter_actor_get_n_children (ClutterActor *self) { diff --git a/clutter/clutter-effect.h b/clutter/clutter-effect.h index 6453ddb62..6f00c15ac 100644 --- a/clutter/clutter-effect.h +++ b/clutter/clutter-effect.h @@ -126,6 +126,8 @@ ClutterEffect *clutter_actor_get_effect (ClutterActor *self, const gchar *name); void clutter_actor_clear_effects (ClutterActor *self); +gboolean clutter_actor_has_effects (ClutterActor *self); + G_END_DECLS #endif /* __CLUTTER_EFFECT_H__ */