From 4453ee7266944e82bce30a5d84e15d94db83df0b Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 21 Nov 2011 14:53:14 +0000 Subject: [PATCH] actor: Provide Container::raise/lower implementations --- clutter/clutter-actor.c | 67 +++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index e1372e918..b78881941 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -9239,8 +9239,8 @@ clutter_actor_set_anchor_point_from_gravity (ClutterActor *self, } static void -actor_add_actor (ClutterContainer *container, - ClutterActor *actor) +container_add_actor (ClutterContainer *container, + ClutterActor *actor) { clutter_actor_add_child (CLUTTER_ACTOR (container), actor); clutter_actor_queue_relayout (CLUTTER_ACTOR (container)); @@ -9249,8 +9249,8 @@ actor_add_actor (ClutterContainer *container, } static void -actor_remove_actor (ClutterContainer *container, - ClutterActor *actor) +container_remove_actor (ClutterContainer *container, + ClutterActor *actor) { g_object_ref (actor); @@ -9279,9 +9279,9 @@ foreach_cb (ClutterActor *actor, } static void -actor_foreach (ClutterContainer *container, - ClutterCallback callback, - gpointer user_data) +container_foreach (ClutterContainer *container, + ClutterCallback callback, + gpointer user_data) { ForeachClosure clos; @@ -9293,12 +9293,59 @@ actor_foreach (ClutterContainer *container, &clos); } +static void +container_raise (ClutterContainer *container, + ClutterActor *child, + ClutterActor *sibling) +{ + ClutterActor *self = CLUTTER_ACTOR (container); + ClutterActorPrivate *priv = self->priv; + + priv->children = g_list_remove (priv->children, child); + + if (sibling == NULL) + priv->children = g_list_append (priv->children, child); + else + { + gint index_ = g_list_index (priv->children, sibling) + 1; + + priv->children = g_list_insert (priv->children, child, index_); + } + + clutter_actor_queue_relayout (self); +} + +static void +container_lower (ClutterContainer *container, + ClutterActor *child, + ClutterActor *sibling) +{ + ClutterActor *self = CLUTTER_ACTOR (container); + ClutterActorPrivate *priv = self->priv; + + priv->children = g_list_remove (priv->children, child); + + if (sibling == NULL) + priv->children = g_list_prepend (priv->children, child); + else + { + gint index_ = g_list_index (priv->children, sibling); + + priv->children = g_list_insert (priv->children, child, index_); + } + + clutter_actor_queue_relayout (self); +} + static void clutter_container_iface_init (ClutterContainerIface *iface) { - iface->add = actor_add_actor; - iface->remove = actor_remove_actor; - iface->foreach = actor_foreach; + iface->add = container_add_actor; + iface->remove = container_remove_actor; + iface->foreach = container_foreach; + + iface->raise = container_raise; + iface->lower = container_lower; } typedef enum