From: Emmanuele Bassi Date: Fri, 11 Apr 2008 15:41:44 +0000 (+0000) Subject: 2008-04-11 Emmanuele Bassi X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=8fdd9efa03506eb876c6102dac134e8293432f74;p=clutter-gtk 2008-04-11 Emmanuele Bassi * clutter-gtk/gtk-clutter-embed.c: (clutter_container_iface_init): Make GtkClutterEmbed implement ClutterContainer, and proxy all virtual functions to the embedded Stage. * examples/gtk-clutter-test.c: (main): Add the group straight to the GtkClutterEmbed widget to test the Container interface implementation. --- diff --git a/ChangeLog b/ChangeLog index f745b24..e6e2835 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,17 @@ 2008-04-11 Emmanuele Bassi * clutter-gtk/gtk-clutter-embed.c: + (clutter_container_iface_init): Make GtkClutterEmbed implement + ClutterContainer, and proxy all virtual functions to the + embedded Stage. + + * examples/gtk-clutter-test.c: (main): Add the group straight + to the GtkClutterEmbed widget to test the Container interface + implementation. + +2008-04-11 Emmanuele Bassi + + * clutter-gtk/gtk-clutter-embed.c: (gtk_clutter_init): Call gtk_init_check(); this is safe, because multiple calls to gtk_init() are safe. diff --git a/clutter-gtk/gtk-clutter-embed.c b/clutter-gtk/gtk-clutter-embed.c index ef2e08b..55d3e5b 100644 --- a/clutter-gtk/gtk-clutter-embed.c +++ b/clutter-gtk/gtk-clutter-embed.c @@ -42,17 +42,25 @@ #include -#include -#include - #include #include #include + +#include +#include +#include + #include #include "gtk-clutter-embed.h" -G_DEFINE_TYPE (GtkClutterEmbed, gtk_clutter_embed, GTK_TYPE_WIDGET); +static void clutter_container_iface_init (ClutterContainerIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GtkClutterEmbed, + gtk_clutter_embed, + GTK_TYPE_WIDGET, + G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER, + clutter_container_iface_init)); #define GTK_CLUTTER_EMBED_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_CLUTTER_EMBED, GtkClutterEmbedPrivate)) @@ -251,6 +259,85 @@ gtk_clutter_embed_map_event (GtkWidget *widget, } static void +gtk_clutter_embed_add (ClutterContainer *container, + ClutterActor *actor) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (container)->priv; + ClutterContainer *stage = CLUTTER_CONTAINER (priv->stage); + + clutter_container_add_actor (stage, actor); + g_signal_emit_by_name (container, "actor-added", actor); +} + +static void +gtk_clutter_embed_remove (ClutterContainer *container, + ClutterActor *actor) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (container)->priv; + ClutterContainer *stage = CLUTTER_CONTAINER (priv->stage); + + g_object_ref (actor); + + clutter_container_remove_actor (stage, actor); + g_signal_emit_by_name (container, "actor-removed", actor); + + g_object_unref (actor); +} + +static void +gtk_clutter_embed_foreach (ClutterContainer *container, + ClutterCallback callback, + gpointer callback_data) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (container)->priv; + ClutterContainer *stage = CLUTTER_CONTAINER (priv->stage); + + clutter_container_foreach (stage, callback, callback_data); +} + +static void +gtk_clutter_embed_raise (ClutterContainer *container, + ClutterActor *child, + ClutterActor *sibling) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (container)->priv; + ClutterContainer *stage = CLUTTER_CONTAINER (priv->stage); + + clutter_container_raise_child (stage, child, sibling); +} + +static void +gtk_clutter_embed_lower (ClutterContainer *container, + ClutterActor *child, + ClutterActor *sibling) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (container)->priv; + ClutterContainer *stage = CLUTTER_CONTAINER (priv->stage); + + clutter_container_lower_child (stage, child, sibling); +} + +static void +gtk_clutter_embed_sort_depth_order (ClutterContainer *container) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (container)->priv; + ClutterContainer *stage = CLUTTER_CONTAINER (priv->stage); + + clutter_container_sort_depth_order (stage); +} + +static void +clutter_container_iface_init (ClutterContainerIface *iface) +{ + iface->add = gtk_clutter_embed_add; + iface->remove = gtk_clutter_embed_remove; + iface->foreach = gtk_clutter_embed_foreach; + iface->raise = gtk_clutter_embed_raise; + iface->lower = gtk_clutter_embed_lower; + iface->sort_depth_order = gtk_clutter_embed_sort_depth_order; +} + +static void gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); diff --git a/examples/gtk-clutter-test.c b/examples/gtk-clutter-test.c index 7df3fb5..59e606c 100644 --- a/examples/gtk-clutter-test.c +++ b/examples/gtk-clutter-test.c @@ -165,7 +165,7 @@ main (int argc, char *argv[]) #endif /* create a new group to hold multiple actors in a group */ - oh->group = CLUTTER_GROUP (clutter_group_new()); + oh->group = CLUTTER_GROUP (clutter_group_new ()); for (i = 0; i < NHANDS; i++) { @@ -175,7 +175,7 @@ main (int argc, char *argv[]) if (i == 0) oh->hand[i] = clutter_texture_new_from_pixbuf (pixbuf); else - oh->hand[i] = clutter_clone_texture_new (CLUTTER_TEXTURE(oh->hand[0])); + oh->hand[i] = clutter_clone_texture_new (CLUTTER_TEXTURE (oh->hand[0])); #else ClutterColor colour = { 255, 0, 0, 255 }; @@ -196,7 +196,8 @@ main (int argc, char *argv[]) } /* Add the group to the stage */ - clutter_group_add (CLUTTER_GROUP (stage), CLUTTER_ACTOR(oh->group)); + clutter_container_add_actor (CLUTTER_CONTAINER (clutter), + CLUTTER_ACTOR (oh->group)); g_signal_connect (stage, "button-press-event", G_CALLBACK (input_cb),