1 | /* Theming/CSS Accordion |
2 | * |
3 | * A simple accordion demo written using CSS transitions and multiple backgrounds |
4 | */ |
5 | |
6 | #include <gtk/gtk.h> |
7 | |
8 | static void |
9 | apply_css (GtkWidget *widget, GtkStyleProvider *provider) |
10 | { |
11 | GtkWidget *child; |
12 | |
13 | gtk_style_context_add_provider (context: gtk_widget_get_style_context (widget), provider, G_MAXUINT); |
14 | for (child = gtk_widget_get_first_child (widget); |
15 | child != NULL; |
16 | child = gtk_widget_get_next_sibling (widget: child)) |
17 | apply_css (widget: child, provider); |
18 | } |
19 | |
20 | GtkWidget * |
21 | do_css_accordion (GtkWidget *do_widget) |
22 | { |
23 | static GtkWidget *window = NULL; |
24 | |
25 | if (!window) |
26 | { |
27 | GtkWidget *container, *child; |
28 | GtkStyleProvider *provider; |
29 | |
30 | window = gtk_window_new (); |
31 | gtk_window_set_title (GTK_WINDOW (window), title: "CSS Accordion" ); |
32 | gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget)); |
33 | gtk_window_set_default_size (GTK_WINDOW (window), width: 600, height: 300); |
34 | g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window); |
35 | |
36 | container = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 0); |
37 | gtk_widget_set_halign (widget: container, align: GTK_ALIGN_CENTER); |
38 | gtk_widget_set_valign (widget: container, align: GTK_ALIGN_CENTER); |
39 | gtk_window_set_child (GTK_WINDOW (window), child: container); |
40 | |
41 | child = gtk_button_new_with_label (label: "This" ); |
42 | gtk_box_append (GTK_BOX (container), child); |
43 | |
44 | child = gtk_button_new_with_label (label: "Is" ); |
45 | gtk_box_append (GTK_BOX (container), child); |
46 | |
47 | child = gtk_button_new_with_label (label: "A" ); |
48 | gtk_box_append (GTK_BOX (container), child); |
49 | |
50 | child = gtk_button_new_with_label (label: "CSS" ); |
51 | gtk_box_append (GTK_BOX (container), child); |
52 | |
53 | child = gtk_button_new_with_label (label: "Accordion" ); |
54 | gtk_box_append (GTK_BOX (container), child); |
55 | |
56 | child = gtk_button_new_with_label (label: ":-)" ); |
57 | gtk_box_append (GTK_BOX (container), child); |
58 | |
59 | provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); |
60 | gtk_css_provider_load_from_resource (GTK_CSS_PROVIDER (provider), resource_path: "/css_accordion/css_accordion.css" ); |
61 | |
62 | apply_css (widget: window, provider); |
63 | } |
64 | |
65 | if (!gtk_widget_get_visible (widget: window)) |
66 | gtk_widget_show (widget: window); |
67 | else |
68 | gtk_window_destroy (GTK_WINDOW (window)); |
69 | |
70 | return window; |
71 | } |
72 | |