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
19GtkWidget *
20do_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

source code of gtk/demos/gtk-demo/layoutmanager.c