]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/overlay.c
gtk-demo: Remove file lists from demo data
[~andy/gtk] / demos / gtk-demo / overlay.c
1 /* Overlay
2  *
3  * Stack widgets in static positions over a main widget
4  */
5
6 #include <gtk/gtk.h>
7
8 GtkWidget *
9 do_overlay (GtkWidget *do_widget)
10 {
11   static GtkWidget *window = NULL;
12
13   if (!window)
14     {
15       GtkWidget *view;
16       GtkWidget *sw;
17       GtkWidget *overlay;
18       GtkWidget *entry;
19       GtkWidget *label;
20
21       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
22       gtk_window_set_screen (GTK_WINDOW (window),
23                              gtk_widget_get_screen (do_widget));
24       gtk_window_set_default_size (GTK_WINDOW (window),
25                                    450, 450);
26
27       g_signal_connect (window, "destroy",
28                         G_CALLBACK (gtk_widget_destroyed), &window);
29
30       gtk_window_set_title (GTK_WINDOW (window), "Overlay");
31       gtk_container_set_border_width (GTK_CONTAINER (window), 0);
32
33       view = gtk_text_view_new ();
34
35       sw = gtk_scrolled_window_new (NULL, NULL);
36       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
37                                       GTK_POLICY_AUTOMATIC,
38                                       GTK_POLICY_AUTOMATIC);
39       gtk_container_add (GTK_CONTAINER (sw), view);
40
41       overlay = gtk_overlay_new ();
42       gtk_container_add (GTK_CONTAINER (overlay), sw);
43       gtk_container_add (GTK_CONTAINER (window), overlay);
44
45       entry = gtk_entry_new ();
46       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
47       gtk_widget_set_halign (entry, GTK_ALIGN_END);
48       gtk_widget_set_valign (entry, GTK_ALIGN_END);
49
50       label = gtk_label_new ("Hello world");
51       gtk_widget_set_halign (label, GTK_ALIGN_END);
52       gtk_widget_set_valign (label, GTK_ALIGN_END);
53       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
54       gtk_widget_set_margin_left (label, 20);
55       gtk_widget_set_margin_right (label, 20);
56       gtk_widget_set_margin_top (label, 5);
57       gtk_widget_set_margin_bottom (label, 5);
58
59       entry = gtk_entry_new ();
60       gtk_widget_set_halign (entry, GTK_ALIGN_START);
61       gtk_widget_set_valign (entry, GTK_ALIGN_END);
62       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
63
64       label = gtk_label_new ("Hello world");
65       gtk_widget_set_halign (label, GTK_ALIGN_START);
66       gtk_widget_set_valign (label, GTK_ALIGN_END);
67       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
68       gtk_widget_set_margin_left (label, 20);
69       gtk_widget_set_margin_right (label, 20);
70       gtk_widget_set_margin_top (label, 5);
71       gtk_widget_set_margin_bottom (label, 5);
72
73       entry = gtk_entry_new ();
74       gtk_widget_set_halign (entry, GTK_ALIGN_END);
75       gtk_widget_set_valign (entry, GTK_ALIGN_START);
76       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
77
78       label = gtk_label_new ("Hello world");
79       gtk_widget_set_halign (label, GTK_ALIGN_END);
80       gtk_widget_set_valign (label, GTK_ALIGN_START);
81       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
82       gtk_widget_set_margin_left (label, 20);
83       gtk_widget_set_margin_right (label, 20);
84       gtk_widget_set_margin_top (label, 5);
85       gtk_widget_set_margin_bottom (label, 5);
86
87       entry = gtk_entry_new ();
88       gtk_widget_set_halign (entry, GTK_ALIGN_START);
89       gtk_widget_set_valign (entry, GTK_ALIGN_START);
90       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
91
92       label = gtk_label_new ("Hello world");
93       gtk_widget_set_halign (label, GTK_ALIGN_START);
94       gtk_widget_set_valign (label, GTK_ALIGN_START);
95       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
96       gtk_widget_set_margin_left (label, 20);
97       gtk_widget_set_margin_right (label, 20);
98       gtk_widget_set_margin_top (label, 5);
99       gtk_widget_set_margin_bottom (label, 5);
100
101       entry = gtk_entry_new ();
102       gtk_widget_set_halign (entry, GTK_ALIGN_END);
103       gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
104       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
105
106       label = gtk_label_new ("Hello world");
107       gtk_widget_set_halign (label, GTK_ALIGN_END);
108       gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
109       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
110       gtk_widget_set_margin_left (label, 20);
111       gtk_widget_set_margin_right (label, 20);
112       gtk_widget_set_margin_top (label, 5);
113       gtk_widget_set_margin_bottom (label, 5);
114
115       entry = gtk_entry_new ();
116       gtk_widget_set_halign (entry, GTK_ALIGN_START);
117       gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
118       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
119
120       label = gtk_label_new ("Hello world");
121       gtk_widget_set_halign (label, GTK_ALIGN_START);
122       gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
123       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
124       gtk_widget_set_margin_left (label, 20);
125       gtk_widget_set_margin_right (label, 20);
126       gtk_widget_set_margin_top (label, 5);
127       gtk_widget_set_margin_bottom (label, 5);
128
129       entry = gtk_entry_new ();
130       gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
131       gtk_widget_set_valign (entry, GTK_ALIGN_START);
132       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
133
134       label = gtk_label_new ("Hello world");
135       gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
136       gtk_widget_set_valign (label, GTK_ALIGN_START);
137       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
138       gtk_widget_set_margin_left (label, 20);
139       gtk_widget_set_margin_right (label, 20);
140       gtk_widget_set_margin_top (label, 5);
141       gtk_widget_set_margin_bottom (label, 5);
142
143       entry = gtk_entry_new ();
144       gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
145       gtk_widget_set_valign (entry, GTK_ALIGN_END);
146       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
147
148       label = gtk_label_new ("Hello world");
149       gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
150       gtk_widget_set_valign (label, GTK_ALIGN_END);
151       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
152       gtk_widget_set_margin_left (label, 10);
153       gtk_widget_set_margin_right (label, 10);
154       gtk_widget_set_margin_top (label, 5);
155       gtk_widget_set_margin_bottom (label, 5);
156
157       entry = gtk_entry_new ();
158       gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
159       gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
160       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), entry);
161
162       label = gtk_label_new ("Hello world");
163       gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
164       gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
165       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), label);
166
167       gtk_widget_show_all (overlay);
168     }
169
170   if (!gtk_widget_get_visible (window))
171     {
172       gtk_widget_show (window);
173     }
174   else
175     {
176       gtk_widget_destroy (window);
177       window = NULL;
178     }
179
180   return window;
181 }