1 | /* Layout Manager/Transition |
2 | * #Keywords: GtkLayoutManager |
3 | * |
4 | * This demo shows a simple example of a custom layout manager |
5 | * and a widget using it. The layout manager places the children |
6 | * of the widget in a grid or a circle. |
7 | * |
8 | * The widget is animating the transition between the two layouts. |
9 | * |
10 | * Click to start the transition. |
11 | */ |
12 | |
13 | #include <gtk/gtk.h> |
14 | |
15 | #include "demowidget.h" |
16 | #include "demochild.h" |
17 | |
18 | |
19 | GtkWidget * |
20 | do_layoutmanager (GtkWidget *parent) |
21 | { |
22 | static GtkWidget *window = NULL; |
23 | |
24 | if (!window) |
25 | { |
26 | GtkWidget *widget; |
27 | GtkWidget *child; |
28 | const char *color[] = { |
29 | "red" , "orange" , "yellow" , "green" , |
30 | "blue" , "grey" , "magenta" , "lime" , |
31 | "yellow" , "firebrick" , "aqua" , "purple" , |
32 | "tomato" , "pink" , "thistle" , "maroon" |
33 | }; |
34 | int i; |
35 | |
36 | window = gtk_window_new (); |
37 | gtk_window_set_title (GTK_WINDOW (window), title: "Layout Manager — Transition" ); |
38 | gtk_window_set_default_size (GTK_WINDOW (window), width: 600, height: 600); |
39 | g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window); |
40 | |
41 | widget = demo_widget_new (); |
42 | |
43 | for (i = 0; i < 16; i++) |
44 | { |
45 | child = demo_child_new (color: color[i]); |
46 | gtk_widget_set_margin_start (widget: child, margin: 4); |
47 | gtk_widget_set_margin_end (widget: child, margin: 4); |
48 | gtk_widget_set_margin_top (widget: child, margin: 4); |
49 | gtk_widget_set_margin_bottom (widget: child, margin: 4); |
50 | demo_widget_add_child (self: DEMO_WIDGET (ptr: widget), child); |
51 | } |
52 | |
53 | gtk_window_set_child (GTK_WINDOW (window), child: widget); |
54 | } |
55 | |
56 | if (!gtk_widget_get_visible (widget: window)) |
57 | gtk_widget_show (widget: window); |
58 | else |
59 | gtk_window_destroy (GTK_WINDOW (window)); |
60 | |
61 | return window; |
62 | |
63 | } |
64 | |