Update the Viewport example
[clutter-gtk] / examples / gtk-clutter-viewport.c
index 37c2980..09b8912 100644 (file)
@@ -3,17 +3,42 @@
 
 #include <clutter-gtk/clutter-gtk.h>
 
+static GTimer *timer = NULL;
+
+static void
+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[])
 {
-  ClutterTimeline *timeline;
   ClutterActor    *stage, *viewport, *tex;
   ClutterColor     stage_color = { 0x61, 0x64, 0x8c, 0xff };
-  GtkWidget       *window, *embed; 
-  GtkWidget       *table, *scrollbar;
-  GtkAdjustment   *h_adjustment, *v_adjustment;
-  gint             i;
-  ClutterColor     col2 = { 0, };
+  GtkWidget       *window, *embed;
+  GtkWidget       *table, *scrollbar, *slider;
+  GtkAdjustment   *h_adjustment, *v_adjustment, *z_adjustment;
+
+  g_thread_init (NULL);
+  gdk_threads_init ();
+  clutter_threads_init ();
 
   if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
     g_error ("Unable to initialize GtkClutter");
@@ -21,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);
 
@@ -38,11 +63,11 @@ main (int argc, char *argv[])
   stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed));
   clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
 
-  viewport = gtk_clutter_viewport_new (NULL, NULL);
+  viewport = gtk_clutter_viewport_new (NULL, NULL, NULL);
   clutter_actor_set_size (viewport, 320, 240);
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), viewport);
 
-  if (argc < 1)
+  if (argc < 2)
     tex = gtk_clutter_texture_new_from_stock (embed,
                                               GTK_STOCK_DIALOG_INFO,
                                               GTK_ICON_SIZE_DIALOG);
@@ -50,12 +75,32 @@ main (int argc, char *argv[])
     {
       GError *error = NULL;
 
-      tex = clutter_texture_new_from_file (argv[1], &error);
+      tex = clutter_texture_new ();
+      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);
+
+      timer = g_timer_new ();
+
+      clutter_texture_set_from_file (CLUTTER_TEXTURE (tex), argv[1], &error);
       if (error)
         {
           g_warning ("Unable to open `%s': %s", argv[1], error->message);
           g_error_free (error);
         }
+      else
+        g_print ("%s: load time: %.3f secs\n",
+                 G_STRLOC,
+                 g_timer_elapsed (timer, NULL));
+
+      g_print ("%s: tex.size = %.2f, %.2f\n",
+               G_STRLOC,
+               clutter_actor_get_width (tex),
+               clutter_actor_get_height (tex));
     }
 
   clutter_container_add_actor (CLUTTER_CONTAINER (viewport), tex); 
@@ -80,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();