gtk-demo: Merge widgetbowl into fishbowl
authorBenjamin Otte <otte@redhat.com>
Tue, 24 Apr 2018 19:32:36 +0000 (21:32 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 24 Apr 2018 19:55:37 +0000 (21:55 +0200)
demos/gtk-demo/demo.gresource.xml
demos/gtk-demo/fishbowl.c
demos/gtk-demo/fishbowl.ui
demos/gtk-demo/gtkfishbowl.c
demos/gtk-demo/meson.build
demos/gtk-demo/widgetbowl.c [deleted file]

index a4f5f0fe4456e053ee4c79ce0f3d3e57b92c2f5d..0b6952d2370ed7173e4208d454f0df38f068e6d9 100644 (file)
     <file>expander.c</file>
     <file>filtermodel.c</file>
     <file>fishbowl.c</file>
-    <file>widgetbowl.c</file>
     <file>flowbox.c</file>
     <file>foreigndrawing.c</file>
     <file>font_features.c</file>
index fc410494156b800f010efafd1bcff09f4a40a2f9..5c0272707d0b3206526dff2c1e5a698a29e82fae 100644 (file)
@@ -8,6 +8,13 @@
 #include <gtk/gtk.h>
 
 #include "gtkfishbowl.h"
+#include "gtkgears.h"
+
+const char *const css =
+".blurred-button {"
+"  box-shadow: 0px 0px 5px 10px rgba(0, 0, 0, 0.5);"
+"}"
+"";
 
 char **icon_names = NULL;
 gsize n_icon_names = 0;
@@ -59,10 +66,187 @@ create_icon (void)
   return image;
 }
 
+static GtkWidget *
+create_button (void)
+{
+  return gtk_button_new_with_label ("Button");
+}
+
+static GtkWidget *
+create_blurred_button (void)
+{
+  GtkWidget *w = gtk_button_new ();
+
+  gtk_style_context_add_class (gtk_widget_get_style_context (w), "blurred-button");
+
+  return w;
+}
+
+static GtkWidget *
+create_font_button (void)
+{
+  return gtk_font_button_new ();
+}
+
+static GtkWidget *
+create_level_bar (void)
+{
+  GtkWidget *w = gtk_level_bar_new_for_interval (0, 100);
+
+  gtk_level_bar_set_value (GTK_LEVEL_BAR (w), 50);
+
+  /* Force them to be a bit larger */
+  gtk_widget_set_size_request (w, 200, -1);
+
+  return w;
+}
+
+static GtkWidget *
+create_spinner (void)
+{
+  GtkWidget *w = gtk_spinner_new ();
+
+  gtk_spinner_start (GTK_SPINNER (w));
+
+  return w;
+}
+
+static GtkWidget *
+create_spinbutton (void)
+{
+  GtkWidget *w = gtk_spin_button_new_with_range (0, 10, 1);
+
+  return w;
+}
+
+static GtkWidget *
+create_label (void)
+{
+  GtkWidget *w = gtk_label_new ("pLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.");
+
+  gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
+  gtk_label_set_max_width_chars (GTK_LABEL (w), 100);
+
+  return w;
+}
+
+static GtkWidget *
+create_video (void)
+{
+  GtkMediaStream *stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm");
+  GtkWidget *w = gtk_image_new_from_paintable (GDK_PAINTABLE (stream));
+  gtk_media_stream_set_loop (stream, TRUE);
+  gtk_media_stream_play (stream);
+  g_object_unref (stream);
+
+  return w;
+}
+
+static GtkWidget *
+create_gears (void)
+{
+  GtkWidget *w = gtk_gears_new ();
+
+  gtk_widget_set_size_request (w, 100, 100);
+
+  return w;
+}
+
+static GtkWidget *
+create_switch (void)
+{
+  GtkWidget *w = gtk_switch_new ();
+
+  gtk_switch_set_state (GTK_SWITCH (w), TRUE);
+
+  return w;
+}
+
+static const struct {
+  const char *name;
+  GtkWidget * (*create_func) (void);
+} widget_types[] = {
+  { "Icon",       create_icon           },
+  { "Button",     create_button         },
+  { "Blurbutton", create_blurred_button },
+  { "Fontbutton", create_font_button    },
+  { "Levelbar",   create_level_bar      },
+  { "Label",      create_label          },
+  { "Spinner",    create_spinner        },
+  { "Spinbutton", create_spinbutton     },
+  { "Video",      create_video          },
+  { "Gears",      create_gears          },
+  { "Switch",     create_switch         },
+};
+
+static int selected_widget_type = -1;
+static const int N_WIDGET_TYPES = G_N_ELEMENTS (widget_types);
+
+static void
+set_widget_type (GtkFishbowl *fishbowl,
+                 int          widget_type_index)
+{
+  GtkWidget *window, *headerbar;
+
+  if (widget_type_index == selected_widget_type)
+    return;
+
+  selected_widget_type = widget_type_index;
+
+  gtk_fishbowl_set_creation_func (fishbowl,
+                                  widget_types[selected_widget_type].create_func);
+
+  window = gtk_widget_get_toplevel (GTK_WIDGET (fishbowl));
+  headerbar = gtk_window_get_titlebar (GTK_WINDOW (window));
+  gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar),
+                            widget_types[selected_widget_type].name);
+}
+
+void
+next_button_clicked_cb (GtkButton *source,
+                        gpointer   user_data)
+{
+  GtkFishbowl *fishbowl = user_data;
+  int new_index;
+
+  if (selected_widget_type + 1 >= N_WIDGET_TYPES)
+    new_index = 0;
+  else
+    new_index = selected_widget_type + 1;
+
+  set_widget_type (fishbowl, new_index);
+}
+
+void
+prev_button_clicked_cb (GtkButton *source,
+                        gpointer   user_data)
+{
+  GtkFishbowl *fishbowl = user_data;
+  int new_index;
+
+  if (selected_widget_type - 1 < 0)
+    new_index = N_WIDGET_TYPES - 1;
+  else
+    new_index = selected_widget_type - 1;
+
+  set_widget_type (fishbowl, new_index);
+}
+
+
 GtkWidget *
 do_fishbowl (GtkWidget *do_widget)
 {
   static GtkWidget *window = NULL;
+  static GtkCssProvider *provider = NULL;
+
+  if (provider == NULL)
+    {
+      provider = gtk_css_provider_new ();
+      gtk_css_provider_load_from_data (provider, css, -1);
+      gtk_style_context_add_provider_for_display (gdk_display_get_default (),
+                                                  GTK_STYLE_PROVIDER (provider),
+                                                  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+    }
 
   if (!window)
     {
@@ -72,10 +256,14 @@ do_fishbowl (GtkWidget *do_widget)
       g_type_ensure (GTK_TYPE_FISHBOWL);
 
       builder = gtk_builder_new_from_resource ("/fishbowl/fishbowl.ui");
+      gtk_builder_add_callback_symbols (builder,
+                                        "next_button_clicked_cb", G_CALLBACK (next_button_clicked_cb),
+                                        "prev_button_clicked_cb", G_CALLBACK (prev_button_clicked_cb),
+                                        NULL);
       gtk_builder_connect_signals (builder, NULL);
       window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
       bowl = GTK_WIDGET (gtk_builder_get_object (builder, "bowl"));
-      gtk_fishbowl_set_creation_func (GTK_FISHBOWL (bowl), create_icon);
+      set_widget_type (GTK_FISHBOWL (bowl), 0);
       gtk_window_set_display (GTK_WINDOW (window),
                               gtk_widget_get_display (do_widget));
       g_signal_connect (window, "destroy",
index 5cd82a6648d661092a3cbe6f9d73fd5d66ef0978..973d9745ae87f72da4eb5580f9fb421c770ef05f 100644 (file)
@@ -6,6 +6,25 @@
     <child type="titlebar">
       <object class="GtkHeaderBar" id="">
         <property name="show-title-buttons">1</property>
+        <child>
+          <object class="GtkBox">
+            <style>
+              <class name="linked"/>
+            </style>
+            <child>
+              <object class="GtkButton">
+                <property name="icon-name">pan-start-symbolic</property>
+                <signal name="clicked" handler="prev_button_clicked_cb" object="bowl" swapped="no"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkButton">
+                <property name="icon-name">pan-end-symbolic</property>
+                <signal name="clicked" handler="next_button_clicked_cb" object="bowl" swapped="no"/>
+              </object>
+            </child>
+          </object>
+        </child>
         <child>
           <object class="GtkLabel">
             <property name="label">fps</property>
index 9477f7e4e5de1956e5cd1d44cb7aa232e6ab3e97..f29d67b064f5b484d0d3254fc34be60f1dc5d271 100644 (file)
@@ -523,7 +523,7 @@ gtk_fishbowl_do_update (GtkFishbowl *fishbowl)
       priv->last_benchmark_change = 0;
     }
 
-  gtk_fishbowl_set_count (fishbowl, MAX (1, priv->count + priv->last_benchmark_change));
+  gtk_fishbowl_set_count (fishbowl, MAX (1, (int) priv->count + priv->last_benchmark_change));
 }
 
 static gboolean
@@ -652,6 +652,7 @@ gtk_fishbowl_set_creation_func (GtkFishbowl         *fishbowl,
   g_object_freeze_notify (G_OBJECT (fishbowl));
 
   gtk_fishbowl_set_count (fishbowl, 0);
+  priv->last_benchmark_change = 0;
 
   priv->creation_func = creation_func;
 
index 67791355c657ac18be54c017a84ca52cdef3437d..06e8b7f5022a3a63b70d628fc354882b9b32292c 100644 (file)
@@ -26,7 +26,6 @@ demos = files([
   'expander.c',
   'filtermodel.c',
   'fishbowl.c',
-  'widgetbowl.c',
   'foreigndrawing.c',
   'gestures.c',
   'glarea.c',
diff --git a/demos/gtk-demo/widgetbowl.c b/demos/gtk-demo/widgetbowl.c
deleted file mode 100644 (file)
index 63369ef..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Benchmark/Widgetbowl
- *
- * This is a version of the Fishbowl demo that instead shows different
- * kinds of widgets, which is useful for comparing the rendering performance
- * of theme specifics.
- */
-
-#include <gtk/gtk.h>
-
-#include "gtkfishbowl.h"
-#include "gtkgears.h"
-
-const char *const css =
-".blurred-button {"
-"  box-shadow: 0px 0px 5px 10px rgba(0, 0, 0, 0.5);"
-"}"
-"";
-
-GtkWidget *fishbowl;
-
-static GtkWidget *
-create_button (void)
-{
-  return gtk_button_new_with_label ("Button");
-}
-static GtkWidget *
-create_blurred_button (void)
-{
-  GtkWidget *w = gtk_button_new ();
-
-  gtk_style_context_add_class (gtk_widget_get_style_context (w), "blurred-button");
-
-  return w;
-}
-
-static GtkWidget *
-create_font_button (void)
-{
-  return gtk_font_button_new ();
-}
-
-static GtkWidget *
-create_level_bar (void)
-{
-  GtkWidget *w = gtk_level_bar_new_for_interval (0, 100);
-
-  gtk_level_bar_set_value (GTK_LEVEL_BAR (w), 50);
-
-  /* Force them to be a bit larger */
-  gtk_widget_set_size_request (w, 200, -1);
-
-  return w;
-}
-
-static GtkWidget *
-create_spinner (void)
-{
-  GtkWidget *w = gtk_spinner_new ();
-
-  gtk_spinner_start (GTK_SPINNER (w));
-
-  return w;
-}
-
-static GtkWidget *
-create_spinbutton (void)
-{
-  GtkWidget *w = gtk_spin_button_new_with_range (0, 10, 1);
-
-  return w;
-}
-
-static GtkWidget *
-create_label (void)
-{
-  GtkWidget *w = gtk_label_new ("pLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.");
-
-  gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
-  gtk_label_set_max_width_chars (GTK_LABEL (w), 100);
-
-  return w;
-}
-
-static GtkWidget *
-create_video (void)
-{
-  GtkMediaStream *stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm");
-  GtkWidget *w = gtk_image_new_from_paintable (GDK_PAINTABLE (stream));
-  gtk_media_stream_set_loop (stream, TRUE);
-  gtk_media_stream_play (stream);
-  g_object_unref (stream);
-
-  return w;
-}
-
-static GtkWidget *
-create_gears (void)
-{
-  GtkWidget *w = gtk_gears_new ();
-
-  gtk_widget_set_size_request (w, 100, 100);
-
-  return w;
-}
-
-static GtkWidget *
-create_switch (void)
-{
-  GtkWidget *w = gtk_switch_new ();
-
-  gtk_switch_set_state (GTK_SWITCH (w), TRUE);
-
-  return w;
-}
-
-static const struct {
-  const char *name;
-  GtkWidget * (*create_func) (void);
-} widget_types[] = {
-  { "Button",     create_button         },
-  { "Blurbutton", create_blurred_button },
-  { "Fontbutton", create_font_button    },
-  { "Levelbar"  , create_level_bar      },
-  { "Label"     , create_label          },
-  { "Spinner"   , create_spinner        },
-  { "Spinbutton", create_spinbutton     },
-  { "Video",      create_video          },
-  { "Gears",      create_gears          },
-  { "Switch",     create_switch         },
-};
-
-static int selected_widget_type = -1;
-static const int N_WIDGET_TYPES = G_N_ELEMENTS (widget_types);
-
-#define N_STATS 5
-
-#define STATS_UPDATE_TIME G_USEC_PER_SEC
-
-static void
-set_widget_type (GtkWidget *headerbar,
-                 int        widget_type_index)
-{
-  if (widget_type_index == selected_widget_type)
-    return;
-
-  selected_widget_type = widget_type_index;
-
-  gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar),
-                            widget_types[selected_widget_type].name);
-  gtk_fishbowl_set_creation_func (GTK_FISHBOWL (fishbowl),
-                                  widget_types[selected_widget_type].create_func);
-}
-
-static void
-next_button_clicked_cb (GtkButton *source,
-                        gpointer   user_data)
-{
-  GtkWidget *headerbar = user_data;
-  int new_index;
-
-  if (selected_widget_type + 1 >= N_WIDGET_TYPES)
-    new_index = 0;
-  else
-    new_index = selected_widget_type + 1;
-
-  set_widget_type (headerbar, new_index);
-}
-
-static void
-prev_button_clicked_cb (GtkButton *source,
-                        gpointer   user_data)
-{
-  GtkWidget *headerbar = user_data;
-  int new_index;
-
-  if (selected_widget_type - 1 < 0)
-    new_index = N_WIDGET_TYPES - 1;
-  else
-    new_index = selected_widget_type - 1;
-
-  set_widget_type (headerbar, new_index);
-}
-
-GtkWidget *
-do_widgetbowl (GtkWidget *do_widget)
-{
-  static GtkWidget *window = NULL;
-  static GtkCssProvider *provider = NULL;
-
-  gtk_init ();
-
-  if (provider == NULL)
-    {
-      provider = gtk_css_provider_new ();
-      gtk_css_provider_load_from_data (provider, css, -1);
-      gtk_style_context_add_provider_for_display (gdk_display_get_default (),
-                                                  GTK_STYLE_PROVIDER (provider),
-                                                  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-    }
-
-  if (!window)
-    {
-      GtkWidget *info_label;
-      GtkWidget *count_label;
-      GtkWidget *titlebar;
-      GtkWidget *title_box;
-      GtkWidget *left_box;
-      GtkWidget *next_button;
-      GtkWidget *prev_button;
-
-      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-      titlebar = gtk_header_bar_new ();
-      gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (titlebar), TRUE);
-      info_label = gtk_label_new ("widget - 00.0 fps");
-      count_label = gtk_label_new ("0");
-      fishbowl = gtk_fishbowl_new ();
-      title_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-      prev_button = gtk_button_new_from_icon_name ("pan-start-symbolic");
-      next_button = gtk_button_new_from_icon_name ("pan-end-symbolic");
-      left_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-
-      g_object_bind_property (fishbowl, "count", count_label, "label", 0);
-      g_signal_connect (next_button, "clicked", G_CALLBACK (next_button_clicked_cb), titlebar);
-      g_signal_connect (prev_button, "clicked", G_CALLBACK (prev_button_clicked_cb), titlebar);
-
-      gtk_fishbowl_set_animating (GTK_FISHBOWL (fishbowl), TRUE);
-      gtk_fishbowl_set_benchmark (GTK_FISHBOWL (fishbowl), TRUE);
-
-      gtk_widget_set_hexpand (title_box, TRUE);
-      gtk_widget_set_halign (title_box, GTK_ALIGN_END);
-
-      gtk_window_set_titlebar (GTK_WINDOW (window), titlebar);
-      gtk_container_add (GTK_CONTAINER (title_box), count_label);
-      gtk_container_add (GTK_CONTAINER (title_box), info_label);
-      gtk_header_bar_pack_end (GTK_HEADER_BAR (titlebar), title_box);
-      gtk_container_add (GTK_CONTAINER (window), fishbowl);
-
-
-      gtk_style_context_add_class (gtk_widget_get_style_context (left_box), "linked");
-      gtk_container_add (GTK_CONTAINER (left_box), prev_button);
-      gtk_container_add (GTK_CONTAINER (left_box), next_button);
-      gtk_header_bar_pack_start (GTK_HEADER_BAR (titlebar), left_box);
-
-      gtk_window_set_display (GTK_WINDOW (window),
-                              gtk_widget_get_display (do_widget));
-      g_signal_connect (window, "destroy",
-                        G_CALLBACK (gtk_widget_destroyed), &window);
-
-      gtk_widget_realize (window);
-
-      set_widget_type (titlebar, 0);
-    }
-
-  if (!gtk_widget_get_visible (window))
-    gtk_widget_show (window);
-  else
-    gtk_widget_destroy (window);
-
-
-  return window;
-}