diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-06-26 22:57:56 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-06-26 22:57:56 -0400 |
commit | 5d11e9812dc92ad11dedfe881e9ff4ad4872c097 (patch) | |
tree | 5c12e95dcd608b3478330fc8c1f60384e38c8936 /demos/gtk-demo/listview_colors.c | |
parent | 0d10982379ed4748137a5738b6eabc297201806f (diff) | |
download | gtk+-5d11e9812dc92ad11dedfe881e9ff4ad4872c097.tar.gz |
gtk-demo: Improve formatting in the color demo
Properly align and format the numbers in the size
dropdown.
Diffstat (limited to 'demos/gtk-demo/listview_colors.c')
-rw-r--r-- | demos/gtk-demo/listview_colors.c | 63 |
1 files changed, 54 insertions, 9 deletions
diff --git a/demos/gtk-demo/listview_colors.c b/demos/gtk-demo/listview_colors.c index 5e59c6d8a0..18f8d427c9 100644 --- a/demos/gtk-demo/listview_colors.c +++ b/demos/gtk-demo/listview_colors.c @@ -9,9 +9,9 @@ * The dataset used here has up to 16 777 216 items. * * Note that this demo also functions as a performance - * test for some of the list model machinery, and biggest - * sizes here can lock up the application for extended - * times when used with sorting. + * test for some of the list model machinery, and the + * biggest sizes here can lock up the application for + * extended times when used with sorting. */ #include <gtk/gtk.h> @@ -715,16 +715,17 @@ limit_changed_cb2 (GtkDropDown *dropdown, GParamSpec *pspec, GtkLabel *label) { - gpointer item; char *string; int len; + guint limit; + + limit = 1 << (3 * (gtk_drop_down_get_selected (dropdown) + 1)); - item = gtk_drop_down_get_selected_item (dropdown); - g_object_get (item, "string", &string, NULL); + string = g_strdup_printf ("%'u", limit); len = g_utf8_strlen (string, -1); g_free (string); - gtk_label_set_max_width_chars (label, len + 2); /* for " /" */ + gtk_label_set_width_chars (label, len + 2); /* for " /" */ } static void @@ -737,11 +738,44 @@ items_changed_cb (GListModel *model, guint n = g_list_model_get_n_items (model); char *text; - text = g_strdup_printf ("%u /", n); + text = g_strdup_printf ("%'u /", n); gtk_label_set_label (GTK_LABEL (label), text); g_free (text); } +static void +setup_number_item (GtkSignalListItemFactory *factory, + GtkListItem *item) +{ + GtkWidget *label; + PangoAttrList *attrs; + + label = gtk_label_new (""); + gtk_label_set_xalign (GTK_LABEL (label), 1); + + attrs = pango_attr_list_new (); + pango_attr_list_insert (attrs, pango_attr_font_features_new ("tnum")); + gtk_label_set_attributes (GTK_LABEL (label), attrs); + pango_attr_list_unref (attrs); + + gtk_list_item_set_child (item, label); +} + +static void +bind_number_item (GtkSignalListItemFactory *factory, + GtkListItem *item) +{ + GtkWidget *label; + guint limit; + char *string; + + label = gtk_list_item_get_child (item); + + limit = 1 << (3 * (gtk_list_item_get_position (item) + 1)); + string = g_strdup_printf ("%'u", limit); + gtk_label_set_label (GTK_LABEL (label), string); + g_free (string); +} static GtkWidget *window = NULL; @@ -761,6 +795,8 @@ do_listview_colors (GtkWidget *do_widget) GtkWidget *button; GtkWidget *label; PangoAttrList *attrs; + char *string; + guint len; window = gtk_window_new (); gtk_window_set_title (GTK_WINDOW (window), "Colors"); @@ -793,8 +829,12 @@ do_listview_colors (GtkWidget *do_widget) pango_attr_list_insert (attrs, pango_attr_font_features_new ("tnum")); gtk_label_set_attributes (GTK_LABEL (label), attrs); pango_attr_list_unref (attrs); - gtk_label_set_width_chars (GTK_LABEL (label), 6); + string = g_strdup_printf ("%'u", 4096); + len = g_utf8_strlen (string, -1); + g_free (string); + gtk_label_set_width_chars (GTK_LABEL (label), len + 2); gtk_label_set_xalign (GTK_LABEL (label), 1); + g_signal_connect (gtk_grid_view_get_model (GTK_GRID_VIEW (gridview)), "items-changed", G_CALLBACK (items_changed_cb), label); gtk_header_bar_pack_start (GTK_HEADER_BAR (header), label); @@ -807,6 +847,11 @@ do_listview_colors (GtkWidget *do_widget) g_signal_connect (dropdown, "notify::selected", G_CALLBACK (limit_changed_cb2), label); + factory = gtk_signal_list_item_factory_new (); + g_signal_connect (factory, "setup", G_CALLBACK (setup_number_item), NULL); + g_signal_connect (factory, "bind", G_CALLBACK (bind_number_item), NULL); + gtk_drop_down_set_factory (GTK_DROP_DOWN (dropdown), factory); + g_object_unref (factory); gtk_drop_down_set_selected (GTK_DROP_DOWN (dropdown), 3); /* 4096 */ gtk_header_bar_pack_start (GTK_HEADER_BAR (header), dropdown); |