Update the Viewport example
authorEmmanuele Bassi <ebassi@linux.intel.com>
Mon, 22 Jun 2009 14:43:03 +0000 (15:43 +0100)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Mon, 22 Jun 2009 14:43:03 +0000 (15:43 +0100)
The GtkClutterViewport example shows how to use the newly added
support for the Zoomable interface inside the Viewport actor.

It's a pretty trivial implementation, but it should be enough
to show how it's done.

examples/gtk-clutter-viewport.c

index 3c67178..09b8912 100644 (file)
@@ -10,20 +10,31 @@ on_load_finished (ClutterTexture *texture,
                   const GError   *error,
                   gpointer        user_data)
 {
+  if (error)
+    g_warning ("Unable to load texture: %s", error->message);
+
   if (timer)
     g_print ("%s: load time: %.3f secs\n",
              G_STRLOC,
              g_timer_elapsed (timer, NULL));
 }
 
+static void
+on_size_change (ClutterTexture *texture,
+                gint            width,
+                gint            height)
+{
+  g_print ("%s: tex.size = %d, %d\n", G_STRLOC, width, height);
+}
+
 int
 main (int argc, char *argv[])
 {
   ClutterActor    *stage, *viewport, *tex;
   ClutterColor     stage_color = { 0x61, 0x64, 0x8c, 0xff };
-  GtkWidget       *window, *embed; 
-  GtkWidget       *table, *scrollbar;
-  GtkAdjustment   *h_adjustment, *v_adjustment;
+  GtkWidget       *window, *embed;
+  GtkWidget       *table, *scrollbar, *slider;
+  GtkAdjustment   *h_adjustment, *v_adjustment, *z_adjustment;
 
   g_thread_init (NULL);
   gdk_threads_init ();
@@ -35,7 +46,7 @@ main (int argc, char *argv[])
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
-  table = gtk_table_new (2, 2, FALSE);
+  table = gtk_table_new (3, 2, FALSE);
   gtk_container_add (GTK_CONTAINER (window), table);
   gtk_widget_show (table);
 
@@ -65,7 +76,10 @@ main (int argc, char *argv[])
       GError *error = NULL;
 
       tex = clutter_texture_new ();
-      g_object_set (G_OBJECT (tex), "load-async", TRUE, NULL);
+      clutter_texture_set_load_async (CLUTTER_TEXTURE (tex), TRUE);
+      g_signal_connect (tex,
+                        "size-change", G_CALLBACK (on_size_change),
+                        NULL);
       g_signal_connect (tex,
                         "load-finished", G_CALLBACK (on_load_finished),
                         NULL);
@@ -111,6 +125,17 @@ main (int argc, char *argv[])
                     0, 0);
   gtk_widget_show (scrollbar);
 
+  z_adjustment =
+    gtk_clutter_zoomable_get_adjustment (GTK_CLUTTER_ZOOMABLE (viewport));
+
+  slider = gtk_hscale_new (z_adjustment);
+  gtk_table_attach (GTK_TABLE (table), slider,
+                    0, 1,
+                    2, 3,
+                    GTK_EXPAND | GTK_FILL, 0,
+                    0, 0);
+  gtk_widget_show (slider);
+
   gtk_widget_show (window);
 
   gtk_main();