From f948d66c3ccb993250da8aa860e6be4626f6d014 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 20 May 2009 16:45:49 +0100 Subject: [PATCH] Update for Clutter 1.0 API changes * Move everything to float * Rework the map/unmap handling --- clutter-gtk/gtk-clutter-embed.c | 71 ++++++++++++++++++++++++++++++------ clutter-gtk/gtk-clutter-viewport.c | 10 ++--- examples/gtk-clutter-events.c | 6 +-- examples/gtk-clutter-test.c | 4 +- examples/gtk-clutter-viewport.c | 2 +- 5 files changed, 71 insertions(+), 22 deletions(-) diff --git a/clutter-gtk/gtk-clutter-embed.c b/clutter-gtk/gtk-clutter-embed.c index c40caf1..185f3f6 100644 --- a/clutter-gtk/gtk-clutter-embed.c +++ b/clutter-gtk/gtk-clutter-embed.c @@ -153,9 +153,6 @@ gtk_clutter_embed_realize (GtkWidget *widget) GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv; GdkWindowAttr attributes; int attributes_mask; - - /* we must realize the stage to get it ready for embedding */ - clutter_actor_realize (priv->stage); #ifdef HAVE_CLUTTER_GTK_X11 { @@ -165,6 +162,12 @@ gtk_clutter_embed_realize (GtkWidget *widget) /* We need to use the colormap from the Clutter visual */ xvinfo = clutter_x11_get_stage_visual (CLUTTER_STAGE (priv->stage)); + if (xvinfo == None) + { + g_critical ("Unable to retrieve the XVisualInfo from Clutter"); + return; + } + visual = gdk_x11_screen_lookup_visual (gtk_widget_get_screen (widget), xvinfo->visualid); colormap = gdk_colormap_new (visual, FALSE); @@ -214,15 +217,27 @@ gtk_clutter_embed_realize (GtkWidget *widget) GDK_WINDOW_HWND (widget->window)); #endif /* HAVE_CLUTTER_GTK_{X11,WIN32} */ + clutter_actor_realize (priv->stage); + if (GTK_WIDGET_VISIBLE (widget)) clutter_actor_show (priv->stage); - clutter_actor_queue_redraw (CLUTTER_ACTOR (priv->stage)); - gtk_clutter_embed_send_configure (GTK_CLUTTER_EMBED (widget)); } static void +gtk_clutter_embed_unrealize (GtkWidget *widget) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv; + + clutter_actor_unmap (priv->stage); + clutter_actor_hide (priv->stage); + clutter_actor_unrealize (priv->stage); + + GTK_WIDGET_CLASS (gtk_clutter_embed_parent_class)->unrealize (widget); +} + +static void gtk_clutter_embed_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { @@ -360,17 +375,47 @@ gtk_clutter_embed_map_event (GtkWidget *widget, GdkEventAny *event) { GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv; + GtkWidgetClass *parent_class; + gboolean res = FALSE; - /* The backend wont get the XEvent as we go strait to do_event(). - * So we have to make sure we set the event here. - */ - CLUTTER_ACTOR_SET_FLAGS (priv->stage, CLUTTER_ACTOR_MAPPED); + parent_class = GTK_WIDGET_CLASS (gtk_clutter_embed_parent_class); + if (parent_class->map_event) + res = parent_class->map_event (widget, event); - return FALSE; + clutter_actor_map (priv->stage); + + return res; +} + +static gboolean +gtk_clutter_embed_unmap_event (GtkWidget *widget, + GdkEventAny *event) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv; + GtkWidgetClass *parent_class; + gboolean res = FALSE; + + parent_class = GTK_WIDGET_CLASS (gtk_clutter_embed_parent_class); + if (parent_class->unmap_event) + res = parent_class->unmap_event (widget, event); + + clutter_actor_unmap (priv->stage); + + return res; +} + +static void +gtk_clutter_embed_unmap (GtkWidget *widget) +{ + GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv; + + clutter_actor_unmap (priv->stage); + + GTK_WIDGET_CLASS (gtk_clutter_embed_parent_class)->unmap (widget); } static gboolean -gtk_clutter_embed_focus_in (GtkWidget *widget, +gtk_clutter_embed_focus_in (GtkWidget *widget, GdkEventFocus *event) { GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv; @@ -479,8 +524,10 @@ gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass) widget_class->style_set = gtk_clutter_embed_style_set; widget_class->size_allocate = gtk_clutter_embed_size_allocate; widget_class->realize = gtk_clutter_embed_realize; + widget_class->unrealize = gtk_clutter_embed_unrealize; widget_class->show = gtk_clutter_embed_show; widget_class->hide = gtk_clutter_embed_hide; + widget_class->unmap = gtk_clutter_embed_unmap; widget_class->expose_event = gtk_clutter_embed_expose_event; widget_class->button_press_event = gtk_clutter_embed_button_event; widget_class->button_release_event = gtk_clutter_embed_button_event; @@ -489,6 +536,7 @@ gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass) widget_class->motion_notify_event = gtk_clutter_embed_motion_notify_event; widget_class->expose_event = gtk_clutter_embed_expose_event; widget_class->map_event = gtk_clutter_embed_map_event; + widget_class->unmap_event = gtk_clutter_embed_unmap_event; widget_class->focus_in_event = gtk_clutter_embed_focus_in; widget_class->focus_out_event = gtk_clutter_embed_focus_out; widget_class->scroll_event = gtk_clutter_embed_scroll_event; @@ -502,6 +550,7 @@ gtk_clutter_embed_init (GtkClutterEmbed *embed) embed->priv = priv = GTK_CLUTTER_EMBED_GET_PRIVATE (embed); GTK_WIDGET_SET_FLAGS (embed, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (embed, GTK_NO_WINDOW); /* disable double-buffering: it's automatically provided * by OpenGL diff --git a/clutter-gtk/gtk-clutter-viewport.c b/clutter-gtk/gtk-clutter-viewport.c index 4adcae4..a15e5dc 100644 --- a/clutter-gtk/gtk-clutter-viewport.c +++ b/clutter-gtk/gtk-clutter-viewport.c @@ -184,7 +184,7 @@ viewport_reclamp_adjustment (GtkAdjustment *adjustment) static gboolean viewport_set_hadjustment_values (GtkClutterViewport *viewport, - guint width) + gfloat width) { GtkClutterViewportPrivate *priv = viewport->priv; GtkAdjustment *h_adjust = priv->h_adjustment; @@ -214,7 +214,7 @@ viewport_set_hadjustment_values (GtkClutterViewport *viewport, static gboolean viewport_set_vadjustment_values (GtkClutterViewport *viewport, - guint height) + gfloat height) { GtkClutterViewportPrivate *priv = viewport->priv; GtkAdjustment *v_adjust = priv->v_adjustment; @@ -272,7 +272,7 @@ connect_adjustment (GtkClutterViewport *viewport, GtkClutterViewportPrivate *priv = viewport->priv; GtkAdjustment **adj_p; gboolean value_changed = FALSE; - guint width, height; + gfloat width, height; adj_p = (orientation == GTK_ORIENTATION_HORIZONTAL) ? &priv->h_adjustment : &priv->v_adjustment; @@ -533,8 +533,8 @@ gtk_clutter_viewport_allocate (ClutterActor *actor, NULL, NULL, &alloc_width, &alloc_height); - child_allocation.x1 = clutter_actor_get_xu (priv->child); - child_allocation.y1 = clutter_actor_get_yu (priv->child); + child_allocation.x1 = clutter_actor_get_x (priv->child); + child_allocation.y1 = clutter_actor_get_y (priv->child); child_allocation.x2 = child_allocation.x1 + alloc_width; child_allocation.y2 = child_allocation.y1 + alloc_height; diff --git a/examples/gtk-clutter-events.c b/examples/gtk-clutter-events.c index 9673aeb..0396f86 100644 --- a/examples/gtk-clutter-events.c +++ b/examples/gtk-clutter-events.c @@ -74,11 +74,11 @@ on_stage_capture (ClutterActor *actor, { if (event->type == CLUTTER_BUTTON_RELEASE) { - gint x, y; + gfloat x, y; clutter_event_get_coords (event, &x, &y); - g_print ("Event captured at (%d, %d)\n", x, y); + g_print ("Event captured at (%.2f, %.2f)\n", x, y); } return FALSE; @@ -102,7 +102,7 @@ main (gint argc, gchar **argv) GtkWidget *widget, *vbox, *hbox, *button, *label, *box; ClutterActor *actor; GdkPixbuf *pixbuf = NULL; - guint width, height; + gfloat width, height; ClutterColor stage_color = {255, 255, 255, 255}; ClutterColor text_color = {0, 0, 0, 255}; diff --git a/examples/gtk-clutter-test.c b/examples/gtk-clutter-test.c index 5b7f025..9667c78 100644 --- a/examples/gtk-clutter-test.c +++ b/examples/gtk-clutter-test.c @@ -30,11 +30,11 @@ input_cb (ClutterStage *stage, if (event->type == CLUTTER_BUTTON_PRESS) { ClutterActor *a; - gint x, y; + gfloat x, y; clutter_event_get_coords (event, &x, &y); - a = clutter_stage_get_actor_at_pos (stage, x, y); + a = clutter_stage_get_actor_at_pos (stage, CLUTTER_PICK_ALL, x, y); if (a && (CLUTTER_IS_TEXTURE (a) || CLUTTER_IS_CLONE (a))) clutter_actor_hide (a); } diff --git a/examples/gtk-clutter-viewport.c b/examples/gtk-clutter-viewport.c index 0125b41..f653424 100644 --- a/examples/gtk-clutter-viewport.c +++ b/examples/gtk-clutter-viewport.c @@ -83,7 +83,7 @@ main (int argc, char *argv[]) G_STRLOC, g_timer_elapsed (timer, NULL)); - g_print ("%s: tex.size = %d, %d\n", + g_print ("%s: tex.size = %.2f, %.2f\n", G_STRLOC, clutter_actor_get_width (tex), clutter_actor_get_height (tex)); -- 1.7.9.5