diff options
author | Benjamin Otte <otte@redhat.com> | 2018-06-10 01:28:08 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2018-06-10 02:25:55 +0200 |
commit | 896f72d33ba4cf0b3a9b4a04f09613fb9fa310ef (patch) | |
tree | 6a049b9179b7cf7b504f72575a242a45de498f57 /demos | |
parent | 884aaa21933ec86345cd01516d0ad99bca9dfa90 (diff) | |
download | gtk+-896f72d33ba4cf0b3a9b4a04f09613fb9fa310ef.tar.gz |
gtk-demo: Use GtkImages to select the puzzle
Diffstat (limited to 'demos')
-rw-r--r-- | demos/gtk-demo/sliding_puzzle.c | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/demos/gtk-demo/sliding_puzzle.c b/demos/gtk-demo/sliding_puzzle.c index e9abebede0..5ce5316159 100644 --- a/demos/gtk-demo/sliding_puzzle.c +++ b/demos/gtk-demo/sliding_puzzle.c @@ -13,11 +13,9 @@ static GtkWidget *window = NULL; static GtkWidget *frame = NULL; +static GtkWidget *choices = NULL; static GtkWidget *size_spin = NULL; -static GtkWidget *rose_button = NULL; static GdkPaintable *puzzle = NULL; -static GdkPaintable *rose = NULL; -static GdkPaintable *atom = NULL; static gboolean solved = TRUE; static guint width = 3; @@ -365,12 +363,22 @@ reconfigure (void) { GtkWidget *popover; GtkWidget *grid; + GtkWidget *child; + GtkWidget *image; + GList *selected; width = height = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (size_spin)); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rose_button))) - puzzle = rose; + + selected = gtk_flow_box_get_selected_children (GTK_FLOW_BOX (choices)); + if (selected == NULL) + child = gtk_widget_get_first_child (choices); else - puzzle = atom; + { + child = selected->data; + g_list_free (selected); + } + image = gtk_bin_get_child (GTK_BIN (child)); + puzzle = gtk_image_get_paintable (GTK_IMAGE (image)); start_puzzle (puzzle); popover = gtk_widget_get_ancestor (size_spin, GTK_TYPE_POPOVER); @@ -379,6 +387,18 @@ reconfigure (void) gtk_widget_grab_focus (grid); } +static void +add_choice (GtkWidget *choices, + GdkPaintable *paintable) +{ + GtkWidget *icon; + + icon = gtk_image_new_from_paintable (paintable); + gtk_image_set_icon_size (GTK_IMAGE (icon), GTK_ICON_SIZE_LARGE); + + gtk_container_add (GTK_CONTAINER (choices), icon); +} + GtkWidget * do_sliding_puzzle (GtkWidget *do_widget) { @@ -390,23 +410,29 @@ do_sliding_puzzle (GtkWidget *do_widget) GtkWidget *popover; GtkWidget *tweaks; GtkWidget *apply; - GtkWidget *button; GtkWidget *label; + GtkWidget *sw; + GtkMediaStream *media; - puzzle = rose = GDK_PAINTABLE (gdk_texture_new_from_resource ("/sliding_puzzle/portland-rose.jpg")); - atom = gtk_nuclear_animation_new (); + puzzle = GDK_PAINTABLE (gdk_texture_new_from_resource ("/sliding_puzzle/portland-rose.jpg")); tweaks = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (tweaks), 10); gtk_grid_set_column_spacing (GTK_GRID (tweaks), 10); g_object_set (tweaks, "margin", 10, NULL); - rose_button = button = gtk_radio_button_new_with_label (NULL, "Rose"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); - gtk_grid_attach (GTK_GRID (tweaks), button, 0, 0, 1, 1); - - button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button), "Danger"); - gtk_grid_attach (GTK_GRID (tweaks), button, 1, 0, 1, 1); + choices = gtk_flow_box_new (); + gtk_style_context_add_class (gtk_widget_get_style_context (choices), GTK_STYLE_CLASS_VIEW); + add_choice (choices, puzzle); + add_choice (choices, gtk_nuclear_animation_new ()); + media = gtk_media_file_new_for_resource ("/images/gtk-logo.webm"); + gtk_media_stream_set_loop (media, TRUE); + gtk_media_stream_set_muted (media, TRUE); + gtk_media_stream_play (media); + add_choice (choices, GDK_PAINTABLE (media)); + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (sw), choices); + gtk_grid_attach (GTK_GRID (tweaks), sw, 0, 0, 2, 1); label = gtk_label_new ("Size"); gtk_label_set_xalign (GTK_LABEL (label), 0.0); |