1 /*
2 * Copyright (C) 2006 Nokia Corporation.
3 * Author: Xan Lopez <xan.lopez@nokia.com>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public License
7 * version 2.1 as published by the Free Software Foundation.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 *
17 */
18
19 #include <gtk/gtk.h>
20
21 static char *baseline_pos_str[] = {
22 "BASELINE_POSITION_TOP",
23 "BASELINE_POSITION_CENTER",
24 "BASELINE_POSITION_BOTTOM"
25 };
26
27 static void
baseline_row_value_changed(GtkSpinButton * spin_button,GtkGrid * grid)28 baseline_row_value_changed (GtkSpinButton *spin_button,
29 GtkGrid *grid)
30 {
31 gint row = gtk_spin_button_get_value_as_int (spin_button);
32
33 gtk_grid_set_baseline_row (grid, row);
34 }
35
36 static void
homogeneous_changed(GtkToggleButton * toggle_button,GtkGrid * grid)37 homogeneous_changed (GtkToggleButton *toggle_button,
38 GtkGrid *grid)
39 {
40 gtk_grid_set_row_homogeneous (grid, gtk_toggle_button_get_active (toggle_button));
41 }
42
43 static void
baseline_position_changed(GtkComboBox * combo,GtkBox * hbox)44 baseline_position_changed (GtkComboBox *combo,
45 GtkBox *hbox)
46 {
47 int i = gtk_combo_box_get_active (combo);
48
49 gtk_box_set_baseline_position (hbox, i);
50 }
51
52 static void
image_size_value_changed(GtkSpinButton * spin_button,GtkImage * image)53 image_size_value_changed (GtkSpinButton *spin_button,
54 GtkImage *image)
55 {
56 gint size = gtk_spin_button_get_value_as_int (spin_button);
57
58 gtk_image_set_pixel_size (GTK_IMAGE (image), size);
59 }
60
61 static void
set_font_size(GtkWidget * widget,gint size)62 set_font_size (GtkWidget *widget, gint size)
63 {
64 const gchar *class[3] = { "small-font", "medium-font", "large-font" };
65
66 gtk_style_context_add_class (gtk_widget_get_style_context (widget), class[size]);
67 }
68
69 int
main(int argc,char ** argv)70 main (int argc,
71 char **argv)
72 {
73 GtkWidget *window, *label, *entry, *button, *grid, *notebook;
74 GtkWidget *vbox, *hbox, *grid_hbox, *spin, *spin2, *toggle, *combo, *image, *ebox;
75 GtkAdjustment *adjustment;
76 int i, j;
77 GtkCssProvider *provider;
78
79 gtk_init (&argc, &argv);
80
81 provider = gtk_css_provider_new ();
82 gtk_css_provider_load_from_data (provider,
83 ".small-font { font-size: 5px; }"
84 ".medium-font { font-size: 10px; }"
85 ".large-font { font-size: 15px; }", -1, NULL);
86 gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
87 GTK_STYLE_PROVIDER (provider),
88 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
89 g_object_unref (provider);
90 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
91 g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
92
93 notebook = gtk_notebook_new ();
94 gtk_container_add (GTK_CONTAINER (window), notebook);
95
96 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
97 gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
98 vbox, gtk_label_new ("hboxes"));
99
100 for (j = 0; j < 2; j++)
101 {
102 char *aligns_names[] = { "FILL", "BASELINE" };
103 GtkAlign aligns[] = { GTK_ALIGN_FILL, GTK_ALIGN_BASELINE};
104
105 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
106 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
107
108 label = gtk_label_new (aligns_names[j]);
109 gtk_container_add (GTK_CONTAINER (hbox), label);
110
111 for (i = 0; i < 3; i++) {
112 label = gtk_label_new ("│XYyj,Ö...");
113
114 set_font_size (label, i);
115
116 gtk_widget_set_valign (label, aligns[j]);
117
118 gtk_container_add (GTK_CONTAINER (hbox), label);
119 }
120
121 for (i = 0; i < 3; i++) {
122 entry = gtk_entry_new ();
123 gtk_entry_set_text (GTK_ENTRY (entry), "│XYyj,Ö...");
124
125 set_font_size (entry, i);
126
127 gtk_widget_set_valign (entry, aligns[j]);
128
129 gtk_container_add (GTK_CONTAINER (hbox), entry);
130 }
131
132 spin = gtk_spin_button_new (NULL, 0, 1);
133 gtk_orientable_set_orientation (GTK_ORIENTABLE (spin), GTK_ORIENTATION_VERTICAL);
134 gtk_widget_set_valign (spin, aligns[j]);
135 gtk_container_add (GTK_CONTAINER (hbox), spin);
136 }
137
138 grid_hbox = hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
139 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
140
141 combo = gtk_combo_box_text_new ();
142 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[0]);
143 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[1]);
144 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[2]);
145 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1);
146 gtk_container_add (GTK_CONTAINER (hbox), combo);
147
148 for (j = 0; j < 2; j++)
149 {
150 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
151 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
152
153 g_signal_connect (G_OBJECT (combo), "changed",
154 G_CALLBACK (baseline_position_changed), hbox);
155
156 if (j == 0)
157 label = gtk_label_new ("Baseline:");
158 else
159 label = gtk_label_new ("Normal:");
160 gtk_container_add (GTK_CONTAINER (hbox), label);
161
162 for (i = 0; i < 3; i++)
163 {
164 button = gtk_button_new_with_label ("│Xyj,Ö");
165
166 set_font_size (button, i);
167
168 if (j == 0)
169 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
170
171 gtk_container_add (GTK_CONTAINER (hbox), button);
172 }
173
174 for (i = 0; i < 3; i++)
175 {
176 button = gtk_button_new_with_label ("│Xyj,Ö");
177
178 gtk_button_set_image (GTK_BUTTON (button),
179 gtk_image_new_from_icon_name ("face-sad", GTK_ICON_SIZE_BUTTON));
180 gtk_button_set_always_show_image (GTK_BUTTON (button), TRUE);
181
182 set_font_size (button, i);
183
184 if (j == 0)
185 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
186
187 gtk_container_add (GTK_CONTAINER (hbox), button);
188 }
189
190 ebox = gtk_event_box_new ();
191 if (j == 0)
192 gtk_widget_set_valign (ebox, GTK_ALIGN_BASELINE);
193 gtk_container_add (GTK_CONTAINER (hbox), ebox);
194
195 image = gtk_image_new_from_icon_name ("face-sad", GTK_ICON_SIZE_BUTTON);
196 gtk_image_set_pixel_size (GTK_IMAGE (image), 34);
197 if (j == 0)
198 gtk_widget_set_valign (image, GTK_ALIGN_BASELINE);
199 gtk_container_add (GTK_CONTAINER (ebox), image);
200
201 button = gtk_toggle_button_new_with_label ("│Xyj,Ö");
202 if (j == 0)
203 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
204 gtk_container_add (GTK_CONTAINER (hbox), button);
205
206 button = gtk_toggle_button_new_with_label ("│Xyj,Ö");
207 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), TRUE);
208 if (j == 0)
209 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
210 gtk_container_add (GTK_CONTAINER (hbox), button);
211
212 button = gtk_check_button_new_with_label ("│Xyj,Ö");
213 if (j == 0)
214 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
215 gtk_container_add (GTK_CONTAINER (hbox), button);
216
217 button = gtk_radio_button_new_with_label (NULL, "│Xyj,Ö");
218 if (j == 0)
219 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
220 gtk_container_add (GTK_CONTAINER (hbox), button);
221 }
222
223
224 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
225 gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
226 vbox, gtk_label_new ("grid"));
227
228 grid_hbox = hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
229 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
230
231 label = gtk_label_new ("Align me:");
232 gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
233
234 gtk_container_add (GTK_CONTAINER (hbox), label);
235
236 grid = gtk_grid_new ();
237 gtk_widget_set_valign (grid, GTK_ALIGN_BASELINE);
238 gtk_grid_set_column_spacing (GTK_GRID (grid), 8);
239 gtk_grid_set_row_spacing (GTK_GRID (grid), 8);
240
241 for (j = 0; j < 4; j++)
242 {
243 char *labels[] = { "Normal:", "Baseline (top):", "Baseline (center):", "Baseline (bottom):"};
244 label = gtk_label_new (labels[j]);
245
246 gtk_grid_attach (GTK_GRID (grid),
247 label,
248 0, j,
249 1, 1);
250 gtk_widget_set_vexpand (label, TRUE);
251
252 if (j != 0)
253 gtk_grid_set_row_baseline_position (GTK_GRID (grid),
254 j, (GtkBaselinePosition)(j-1));
255
256 for (i = 0; i < 3; i++)
257 {
258 label = gtk_label_new ("Xyjg,Ö.");
259
260 set_font_size (label, i);
261
262 if (j != 0)
263 gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
264
265 gtk_grid_attach (GTK_GRID (grid),
266 label,
267 i+1, j,
268 1, 1);
269 }
270
271 for (i = 0; i < 3; i++)
272 {
273 button = gtk_button_new_with_label ("│Xyj,Ö");
274
275 gtk_button_set_image (GTK_BUTTON (button),
276 gtk_image_new_from_icon_name ("face-sad", GTK_ICON_SIZE_BUTTON));
277 gtk_button_set_always_show_image (GTK_BUTTON (button), TRUE);
278
279 set_font_size (button, i);
280
281 if (j != 0)
282 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
283
284 gtk_grid_attach (GTK_GRID (grid),
285 button,
286 i+4, j,
287 1, 1);
288 }
289
290 }
291
292 gtk_container_add (GTK_CONTAINER (hbox), grid);
293
294 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
295 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
296
297 adjustment = gtk_adjustment_new (0.0, -1.0, 5.0, 1.0, 1.0, 0.0);
298 spin = gtk_spin_button_new (adjustment, 1.0, 0);
299 g_signal_connect (spin, "value-changed", (GCallback)baseline_row_value_changed, grid);
300 gtk_container_add (GTK_CONTAINER (hbox), spin);
301
302 toggle = gtk_toggle_button_new_with_label ("Homogeneous");
303 g_signal_connect (toggle, "toggled", (GCallback)homogeneous_changed, grid);
304 gtk_container_add (GTK_CONTAINER (hbox), toggle);
305
306 combo = gtk_combo_box_text_new ();
307 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[0]);
308 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[1]);
309 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[2]);
310 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1);
311 g_signal_connect (G_OBJECT (combo), "changed",
312 G_CALLBACK (baseline_position_changed), grid_hbox);
313 gtk_container_add (GTK_CONTAINER (hbox), combo);
314
315 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
316 gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
317 vbox, gtk_label_new ("button box"));
318
319 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
320 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
321
322 adjustment = gtk_adjustment_new (34.0, 1.0, 64.0, 1.0, 1.0, 0.0);
323 spin = gtk_spin_button_new (adjustment, 1.0, 0);
324 gtk_container_add (GTK_CONTAINER (hbox), spin);
325
326 adjustment = gtk_adjustment_new (16.0, 1.0, 64.0, 1.0, 1.0, 0.0);
327 spin2 = gtk_spin_button_new (adjustment, 1.0, 0);
328 gtk_container_add (GTK_CONTAINER (hbox), spin2);
329
330 for (j = 0; j < 3; j++)
331 {
332 hbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
333 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
334
335 gtk_box_set_baseline_position (GTK_BOX (hbox), j);
336
337 label = gtk_label_new (baseline_pos_str[j]);
338 gtk_container_add (GTK_CONTAINER (hbox), label);
339 gtk_widget_set_vexpand (label, TRUE);
340
341 image = gtk_image_new_from_icon_name ("face-sad", GTK_ICON_SIZE_BUTTON);
342 gtk_image_set_pixel_size (GTK_IMAGE (image), 34);
343 gtk_container_add (GTK_CONTAINER (hbox), image);
344
345 g_signal_connect (spin, "value-changed", (GCallback)image_size_value_changed, image);
346
347 for (i = 0; i < 3; i++)
348 {
349 button = gtk_button_new_with_label ("│Xyj,Ö");
350
351 set_font_size (button, i);
352
353 if (i != 0)
354 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
355
356 gtk_container_add (GTK_CONTAINER (hbox), button);
357 }
358
359 for (i = 0; i < 3; i++)
360 {
361 button = gtk_button_new_with_label ("│Xyj,Ö");
362
363 image = gtk_image_new_from_icon_name ("face-sad", GTK_ICON_SIZE_BUTTON);
364 gtk_image_set_pixel_size (GTK_IMAGE (image), 16);
365 gtk_button_set_image (GTK_BUTTON (button), image);
366 if (i == 0)
367 g_signal_connect (spin2, "value-changed", (GCallback)image_size_value_changed, image);
368 gtk_button_set_always_show_image (GTK_BUTTON (button), TRUE);
369
370 set_font_size (button, i);
371
372 gtk_widget_set_valign (button, GTK_ALIGN_BASELINE);
373
374 gtk_container_add (GTK_CONTAINER (hbox), button);
375 }
376 }
377
378 gtk_widget_show_all (window);
379
380 gtk_main ();
381
382 return 0;
383 }
384