From f07d5f580b23d8a1249717b5864de8a47edcf835 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 17 Apr 2007 00:19:21 +0000 Subject: [PATCH 1/1] 2007-04-17 Emmanuele Bassi * configure.ac: Branch for development; bump to 0.3.0, to match Clutter core version; require clutter-glx backend. * clutter-gtk/clutter-gtk.c: Include the GLX backend specific functions; add an "embedded" read-only property, which signals whether the widget has successfully embedded the stage window; use the new clutter_glx_get_stage_window() function. * examples/gtk-clutter-test.c: Port to the new event API. --- ChangeLog | 12 +++++++++ clutter-gtk/clutter-gtk.c | 61 ++++++++++++++++++++++++++++++++++++------- configure.ac | 6 ++--- examples/gtk-clutter-test.c | 13 +++++---- 4 files changed, 73 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index c767f7b..08dd4ab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-04-17 Emmanuele Bassi + + * configure.ac: Branch for development; bump to 0.3.0, to + match Clutter core version; require clutter-glx backend. + + * clutter-gtk/clutter-gtk.c: Include the GLX backend specific + functions; add an "embedded" read-only property, which signals + whether the widget has successfully embedded the stage window; + use the new clutter_glx_get_stage_window() function. + + * examples/gtk-clutter-test.c: Port to the new event API. + 2007-03-23 Ross Burton * configure.ac: diff --git a/clutter-gtk/clutter-gtk.c b/clutter-gtk/clutter-gtk.c index 25489b0..59f8154 100644 --- a/clutter-gtk/clutter-gtk.c +++ b/clutter-gtk/clutter-gtk.c @@ -42,6 +42,7 @@ #include #include +#include #include "clutter-gtk.h" @@ -51,7 +52,15 @@ struct _GtkClutterPrivate { ClutterActor *stage; - gboolean embedded; + + guint is_embedded : 1; +}; + +enum +{ + PROP_0, + + PROP_EMBEDDED }; G_DEFINE_TYPE (GtkClutter, gtk_clutter, GTK_TYPE_SOCKET); @@ -104,32 +113,66 @@ gtk_clutter_size_request (GtkWidget *widget, static void gtk_clutter_map (GtkWidget *widget) { - GtkClutterPrivate *priv; + GtkSocket *socket = GTK_SOCKET (widget); + GtkClutterPrivate *priv = GTK_CLUTTER (widget)->priv; + ClutterStage *stage = CLUTTER_STAGE (priv->stage); - priv = GTK_CLUTTER (widget)->priv; + if (!priv->is_embedded) + { + g_object_ref (widget); + + gtk_socket_add_id (socket, clutter_glx_get_stage_window (stage)); + priv->is_embedded = TRUE; - if (priv->embedded == FALSE) { - gtk_socket_add_id (GTK_SOCKET (widget), - clutter_stage_get_xwindow (CLUTTER_STAGE(priv->stage))); - priv->embedded = TRUE; - } + g_object_notify (G_OBJECT (widget), "embedded"); + g_object_unref (widget); + } GTK_WIDGET_CLASS (gtk_clutter_parent_class)->map (widget); } static void +gtk_clutter_get_property (GObject *gobject, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkClutter *gtk_clutter = GTK_CLUTTER (gobject); + + switch (prop_id) + { + case PROP_EMBEDDED: + g_value_set_boolean (value, gtk_clutter->priv->is_embedded); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); + break; + } +} + +static void gtk_clutter_class_init (GtkClutterClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + gobject_class->get_property = gtk_clutter_get_property; + object_class->destroy = gtk_clutter_destroy; widget_class->size_request = gtk_clutter_size_request; widget_class->size_allocate = gtk_clutter_size_allocate; widget_class->map = gtk_clutter_map; + g_object_class_install_property (gobject_class, + PROP_EMBEDDED, + g_param_spec_boolean ("embedded", + "Embedded", + "Whether the stage has been successfully embedded", + FALSE, + G_PARAM_READABLE)); + g_type_class_add_private (gobject_class, sizeof (GtkClutterPrivate)); } @@ -143,7 +186,7 @@ gtk_clutter_init (GtkClutter *clutter) gtk_widget_set_double_buffered (GTK_WIDGET (clutter), FALSE); priv->stage = clutter_stage_get_default (); - priv->embedded = FALSE; + priv->is_embedded = FALSE; } /** diff --git a/configure.ac b/configure.ac index dc5526f..646c0db 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # An odd micro number indicates in-progress development, (eg. from CVS) # An even micro number indicates a released version. m4_define([clutter_major_version], [0]) -m4_define([clutter_minor_version], [1]) +m4_define([clutter_minor_version], [3]) m4_define([clutter_micro_version], [0]) m4_define([clutter_version], @@ -67,9 +67,9 @@ AC_FUNC_MALLOC AC_FUNC_MMAP AC_CHECK_FUNCS([memset munmap strcasecmp strdup]) -CLUTTER_REQUIRED=0.2.2 +CLUTTER_REQUIRED=0.3.0 -PKG_CHECK_MODULES(CLUTTER, clutter-0.2 >= $CLUTTER_REQUIRED) +PKG_CHECK_MODULES(CLUTTER, clutter-glx-0.3 >= $CLUTTER_REQUIRED) AC_SUBST(CLUTTER_CFLAGS) AC_SUBST(CLUTTER_LIBS) diff --git a/examples/gtk-clutter-test.c b/examples/gtk-clutter-test.c index 56c198c..f1929bc 100644 --- a/examples/gtk-clutter-test.c +++ b/examples/gtk-clutter-test.c @@ -28,15 +28,14 @@ input_cb (ClutterStage *stage, { if (event->type == CLUTTER_BUTTON_PRESS) { - ClutterButtonEvent *bev = (ClutterButtonEvent *) event; - ClutterActor *e; + ClutterActor *actor; + gint x, y; - e = clutter_stage_get_actor_at_pos (stage, - clutter_button_event_x (bev), - clutter_button_event_y (bev)); + clutter_event_get_coords (event, &x, &y); - if (e) - clutter_actor_hide(e); + actor = clutter_stage_get_actor_at_pos (stage, x, y); + if (actor) + clutter_actor_hide (actor); } else if (event->type == CLUTTER_KEY_PRESS) { -- 1.7.9.5