[gtk/matthiasc/for-master: 197/200] gtk-demo: Add more scrolling benchmarks



commit 69978799c10920ad5a699de3fbbba7bcddc3f360
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Dec 22 12:27:30 2019 -0500

    gtk-demo: Add more scrolling benchmarks
    
    Add a listview and gridview to the scrolling
    benchmarks.

 demos/gtk-demo/iconscroll.c       | 51 ++++++++++++++++++++++++++++++++++++++-
 demos/gtk-demo/listview_colors.c  | 44 ++++++++++++++++++++++++---------
 demos/gtk-demo/listview_weather.c | 36 ++++++++++++++++-----------
 3 files changed, 104 insertions(+), 27 deletions(-)
---
diff --git a/demos/gtk-demo/iconscroll.c b/demos/gtk-demo/iconscroll.c
index 7f9a43d20b..a8518b81ec 100644
--- a/demos/gtk-demo/iconscroll.c
+++ b/demos/gtk-demo/iconscroll.c
@@ -12,7 +12,7 @@ static GtkWidget *window = NULL;
 static GtkWidget *scrolledwindow;
 static int selected;
 
-#define N_WIDGET_TYPES 4
+#define N_WIDGET_TYPES 6
 
 
 static int hincrement = 5;
@@ -64,6 +64,7 @@ populate_icons (void)
       gtk_grid_attach (GTK_GRID (grid), create_icon (), left, top, 1, 1);
 
   hincrement = 0;
+  vincrement = 5;
 
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
                                   GTK_POLICY_NEVER,
@@ -100,6 +101,7 @@ populate_text (gboolean hilight)
   gtk_text_view_set_buffer (GTK_TEXT_VIEW (textview), buffer);
 
   hincrement = 0;
+  vincrement = 5;
 
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
                                   GTK_POLICY_NEVER,
@@ -124,6 +126,7 @@ populate_image (void)
   gtk_picture_set_can_shrink (GTK_PICTURE (image), FALSE);
 
   hincrement = 5;
+  vincrement = 5;
 
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
                                   GTK_POLICY_AUTOMATIC,
@@ -131,6 +134,42 @@ populate_image (void)
   gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), image);
 }
 
+extern GtkWidget *create_weather_view (void);
+
+static void
+populate_list (void)
+{
+  GtkWidget *list;
+
+  list = create_weather_view ();
+
+  hincrement = 5;
+  vincrement = 0;
+
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
+}
+
+extern GtkWidget *create_color_grid (void);
+
+static void
+populate_grid (void)
+{
+  GtkWidget *list;
+
+  list = create_color_grid ();
+
+  hincrement = 0;
+  vincrement = 5;
+
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
+}
+
 static void
 set_widget_type (int type)
 {
@@ -164,6 +203,16 @@ set_widget_type (int type)
       populate_image ();
       break;
 
+    case 4:
+      gtk_window_set_title (GTK_WINDOW (window), "Scrolling a list");
+      populate_list ();
+      break;
+
+    case 5:
+      gtk_window_set_title (GTK_WINDOW (window), "Scrolling a grid");
+      populate_grid ();
+      break;
+
     default:
       g_assert_not_reached ();
     }
diff --git a/demos/gtk-demo/listview_colors.c b/demos/gtk-demo/listview_colors.c
index 97bb5a0264..233d11af5d 100644
--- a/demos/gtk-demo/listview_colors.c
+++ b/demos/gtk-demo/listview_colors.c
@@ -310,6 +310,7 @@ setup_simple_listitem_cb (GtkListItemFactory *factory,
   color_expression = gtk_property_expression_new (GTK_TYPE_LIST_ITEM, expression, "item");
 
   picture = gtk_picture_new ();
+  gtk_widget_set_size_request (picture, 32, 32);
   gtk_expression_bind (color_expression, picture, "paintable", NULL);
 
   gtk_list_item_set_child (list_item, picture);
@@ -404,6 +405,33 @@ set_item (GBinding *binding,
   return TRUE;
 }
 
+GtkWidget *
+create_color_grid (void)
+{
+  GtkWidget *gridview;
+  GtkListItemFactory *factory;
+  GListModel *model, *selection;
+
+  gridview = gtk_grid_view_new ();
+  gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
+  gtk_scrollable_set_vscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
+
+  factory = gtk_signal_list_item_factory_new ();
+  g_signal_connect (factory, "setup", G_CALLBACK (setup_simple_listitem_cb), NULL);
+  gtk_grid_view_set_factory (GTK_GRID_VIEW (gridview), factory);
+  g_object_unref (factory);
+
+  gtk_grid_view_set_max_columns (GTK_GRID_VIEW (gridview), 24);
+
+  model = G_LIST_MODEL (gtk_sort_list_model_new (create_colors_model (), NULL));
+  selection = G_LIST_MODEL (gtk_no_selection_new (model));
+  gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), selection);
+  g_object_unref (selection);
+  g_object_unref (model);
+
+  return gridview;
+}
+
 static GtkWidget *window = NULL;
 
 GtkWidget *
@@ -415,7 +443,7 @@ do_listview_colors (GtkWidget *do_widget)
       GtkListItemFactory *factory;
       GListStore *factories;
       GListModel *model;
-      GtkNoSelection *selection;
+
       GtkSorter *sorter;
       GtkSorter *multi_sorter;
       GListStore *sorters;
@@ -435,17 +463,10 @@ do_listview_colors (GtkWidget *do_widget)
       sw = gtk_scrolled_window_new (NULL, NULL);
       gtk_window_set_child (GTK_WINDOW (window), sw);
 
-      gridview = gtk_grid_view_new ();
-      gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
-      gtk_scrollable_set_vscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
-
-      gtk_grid_view_set_max_columns (GTK_GRID_VIEW (gridview), 24);
-
-      model = G_LIST_MODEL (gtk_sort_list_model_new (create_colors_model (), NULL));
-      selection = gtk_no_selection_new (model);
-      gtk_grid_view_set_model (GTK_GRID_VIEW (gridview), G_LIST_MODEL (selection));
+      gridview = create_color_grid ();
       gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), gridview);
-      g_object_unref (selection);
+      model = gtk_grid_view_get_model (GTK_GRID_VIEW (gridview));
+      g_object_get (model, "model", &model, NULL);
 
       sorters = g_list_store_new (GTK_TYPE_SORTER);
 
@@ -559,7 +580,6 @@ do_listview_colors (GtkWidget *do_widget)
                                    G_BINDING_SYNC_CREATE,
                                    set_item, NULL,
                                    NULL, NULL);
-
       g_object_unref (model);
     }
 
diff --git a/demos/gtk-demo/listview_weather.c b/demos/gtk-demo/listview_weather.c
index 4dbd16e37f..b5a02a2cb1 100644
--- a/demos/gtk-demo/listview_weather.c
+++ b/demos/gtk-demo/listview_weather.c
@@ -275,13 +275,33 @@ bind_widget (GtkListItem *list_item,
 
 static GtkWidget *window = NULL;
 
+GtkWidget *
+create_weather_view (void)
+{
+  GtkWidget *listview;
+  GListModel *model, *selection;
+
+  listview = gtk_list_view_new_with_factory (
+  gtk_functions_list_item_factory_new (setup_widget,
+                                       bind_widget,
+                                       NULL, NULL));
+  gtk_orientable_set_orientation (GTK_ORIENTABLE (listview), GTK_ORIENTATION_HORIZONTAL);
+  gtk_list_view_set_show_separators (GTK_LIST_VIEW (listview), TRUE);
+  model = create_weather_model ();
+  selection = G_LIST_MODEL (gtk_no_selection_new (model));
+  gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
+  g_object_unref (selection);
+  g_object_unref (model);
+
+  return listview;
+}
+
 GtkWidget *
 do_listview_weather (GtkWidget *do_widget)
 {
   if (window == NULL)
     {
       GtkWidget *listview, *sw;;
-      GListModel *model, *selection;
 
       window = gtk_window_new ();
       gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
@@ -293,19 +313,7 @@ do_listview_weather (GtkWidget *do_widget)
 
       sw = gtk_scrolled_window_new (NULL, NULL);
       gtk_window_set_child (GTK_WINDOW (window), sw);
-
-      listview = gtk_list_view_new_with_factory (
-        gtk_functions_list_item_factory_new (setup_widget,
-                                             bind_widget,
-                                             NULL, NULL));
-      gtk_orientable_set_orientation (GTK_ORIENTABLE (listview), GTK_ORIENTATION_HORIZONTAL);
-      gtk_list_view_set_show_separators (GTK_LIST_VIEW (listview), TRUE);
-      model = create_weather_model ();
-      selection = G_LIST_MODEL (gtk_no_selection_new (model));
-      gtk_list_view_set_model (GTK_LIST_VIEW (listview), selection);
-      g_object_unref (selection);
-      g_object_unref (model);
-
+      listview = create_weather_view ();
       gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), listview);
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]