Update for Clutter 1.0 API changes
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 20 May 2009 15:45:49 +0000 (16:45 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 20 May 2009 15:45:49 +0000 (16:45 +0100)
* Move everything to float

* Rework the map/unmap handling

clutter-gtk/gtk-clutter-embed.c
clutter-gtk/gtk-clutter-viewport.c
examples/gtk-clutter-events.c
examples/gtk-clutter-test.c
examples/gtk-clutter-viewport.c

index c40caf1..185f3f6 100644 (file)
@@ -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
index 4adcae4..a15e5dc 100644 (file)
@@ -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;
 
index 9673aeb..0396f86 100644 (file)
@@ -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};
 
index 5b7f025..9667c78 100644 (file)
@@ -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);
     }
index 0125b41..f653424 100644 (file)
@@ -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));