/* * Copyright (C) 2006 Nokia Corporation. * Author: Xan Lopez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * version 2.1 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ #include static const char *baseline_pos_str[] = { "BASELINE_POSITION_TOP", "BASELINE_POSITION_CENTER", "BASELINE_POSITION_BOTTOM" }; static void baseline_row_value_changed (GtkSpinButton *spin_button, GtkGrid *grid) { int row = gtk_spin_button_get_value_as_int (spin_button); gtk_grid_set_baseline_row (grid, row); } static void homogeneous_changed (GtkToggleButton *toggle_button, GtkGrid *grid) { gtk_grid_set_row_homogeneous (grid, gtk_toggle_button_get_active (toggle_button)); } static void baseline_position_changed (GtkComboBox *combo, GtkBox *hbox) { int i = gtk_combo_box_get_active (combo); gtk_box_set_baseline_position (hbox, i); } static void image_size_value_changed (GtkSpinButton *spin_button, GtkImage *image) { int size = gtk_spin_button_get_value_as_int (spin_button); gtk_image_set_pixel_size (GTK_IMAGE (image), size); } static void set_font_size (GtkWidget *widget, int size) { const char *class[3] = { "small-font", "medium-font", "large-font" }; gtk_widget_add_css_class (widget, class[size]); } static void quit_cb (GtkWidget *widget, gpointer data) { gboolean *done = data; *done = TRUE; g_main_context_wakeup (NULL); } int main (int argc, char **argv) { GtkWidget *window, *label, *entry, *button, *grid, *notebook; GtkWidget *vbox, *hbox, *grid_hbox, *spin, *spin2, *toggle, *combo, *image; GtkAdjustment *adjustment; int i, j; GtkCssProvider *provider; gboolean done = FALSE; gtk_init (); provider = gtk_css_provider_new (); gtk_css_provider_load_from_data (provider, ".small-font { font-size: 5px; }" ".medium-font { font-size: 10px; }" ".large-font { font-size: 15px; }", -1); gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_unref (provider); window = gtk_window_new (); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (quit_cb), &done); notebook = gtk_notebook_new (); gtk_window_set_child (GTK_WINDOW (window), notebook); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, gtk_label_new ("hboxes")); for (j = 0; j < 2; j++) { hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_box_append (GTK_BOX (vbox), hbox); const char *aligns_names[] = { "FILL", "BASELINE" }; GtkAlign aligns[] = { GTK_ALIGN_FILL, GTK_ALIGN_BASELINE}; label = gtk_label_new (aligns_names[j]); gtk_box_append (GTK_BOX (hbox), label); for (i = 0; i < 3; i++) { label = gtk_label_new ("│XYyj,Ö..."); set_font_size (label, i); gtk_widget_set_valign (label, aligns[j]); gtk_box_append (GTK_BOX (hbox), label); } for (i = 0; i < 3; i++) { entry = gtk_entry_new (); gtk_editable_set_text (GTK_EDITABLE (entry), "│XYyj,Ö..."); set_font_size (entry, i); gtk_widget_set_valign (entry, aligns[j]); gtk_box_append (GTK_BOX (hbox), entry); } spin = gtk_spin_button_new (NULL, 0, 1); gtk_orientable_set_orientation (GTK_ORIENTABLE (spin), GTK_ORIENTATION_VERTICAL); gtk_widget_set_valign (spin, aligns[j]); gtk_box_append (GTK_BOX (hbox), spin); spin = gtk_spin_button_new (NULL, 0, 1); gtk_widget_set_valign (spin, aligns[j]); gtk_box_append (GTK_BOX (hbox), spin); } grid_hbox = hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_box_append (GTK_BOX (vbox), hbox); combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[0]); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[1]); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[2]); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); gtk_box_append (GTK_BOX (hbox), combo); for (j = 0; j < 2; j++) { hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_box_append (GTK_BOX (vbox), hbox); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK (baseline_position_changed), hbox); if (j == 0) label = gtk_label_new ("Baseline:"); else label = gtk_label_new ("Normal:"); gtk_box_append (GTK_BOX (hbox), label); for (i = 0; i < 3; i++) { button = gtk_button_new_with_label ("│Xyj,Ö"); set_font_size (button, i); if (j == 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); } for (i = 0; i < 3; i++) { GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); button = gtk_button_new (); gtk_box_append (GTK_BOX (box), gtk_label_new ("│Xyj,Ö")); gtk_box_append (GTK_BOX (box), gtk_image_new_from_icon_name ("face-sad")); gtk_button_set_child (GTK_BUTTON (button), box); set_font_size (button, i); if (j == 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); } image = gtk_image_new_from_icon_name ("face-sad"); gtk_image_set_pixel_size (GTK_IMAGE (image), 34); if (j == 0) gtk_widget_set_valign (image, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), image); button = gtk_toggle_button_new_with_label ("│Xyj,Ö"); if (j == 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); button = gtk_toggle_button_new_with_label ("│Xyj,Ö"); if (j == 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); button = gtk_check_button_new_with_label ("│Xyj,Ö"); if (j == 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); button = gtk_radio_button_new_with_label (NULL, "│Xyj,Ö"); if (j == 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); } vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, gtk_label_new ("grid")); grid_hbox = hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_box_append (GTK_BOX (vbox), hbox); label = gtk_label_new ("Align me:"); gtk_widget_set_valign (label, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), label); grid = gtk_grid_new (); gtk_widget_set_valign (grid, GTK_ALIGN_BASELINE); gtk_grid_set_column_spacing (GTK_GRID (grid), 8); gtk_grid_set_row_spacing (GTK_GRID (grid), 8); for (j = 0; j < 4; j++) { const char *labels[] = { "Normal:", "Baseline (top):", "Baseline (center):", "Baseline (bottom):"}; label = gtk_label_new (labels[j]); gtk_grid_attach (GTK_GRID (grid), label, 0, j, 1, 1); gtk_widget_set_vexpand (label, TRUE); if (j != 0) gtk_grid_set_row_baseline_position (GTK_GRID (grid), j, (GtkBaselinePosition)(j-1)); for (i = 0; i < 3; i++) { label = gtk_label_new ("Xyjg,Ö."); set_font_size (label, i); if (j != 0) gtk_widget_set_valign (label, GTK_ALIGN_BASELINE); gtk_grid_attach (GTK_GRID (grid), label, i+1, j, 1, 1); } for (i = 0; i < 3; i++) { GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); button = gtk_button_new (); gtk_box_append (GTK_BOX (box), gtk_label_new ("│Xyj,Ö")); gtk_box_append (GTK_BOX (box), gtk_image_new_from_icon_name ("face-sad")); gtk_button_set_child (GTK_BUTTON (button), box); set_font_size (button, i); if (j != 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_grid_attach (GTK_GRID (grid), button, i+4, j, 1, 1); } } gtk_box_append (GTK_BOX (hbox), grid); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_box_append (GTK_BOX (vbox), hbox); adjustment = gtk_adjustment_new (0.0, -1.0, 5.0, 1.0, 1.0, 0.0); spin = gtk_spin_button_new (adjustment, 1.0, 0); g_signal_connect (spin, "value-changed", (GCallback)baseline_row_value_changed, grid); gtk_box_append (GTK_BOX (hbox), spin); toggle = gtk_toggle_button_new_with_label ("Homogeneous"); g_signal_connect (toggle, "toggled", (GCallback)homogeneous_changed, grid); gtk_box_append (GTK_BOX (hbox), toggle); combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[0]); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[1]); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), baseline_pos_str[2]); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK (baseline_position_changed), grid_hbox); gtk_box_append (GTK_BOX (hbox), combo); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, gtk_label_new ("button box")); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_box_append (GTK_BOX (vbox), hbox); adjustment = gtk_adjustment_new (34.0, 1.0, 64.0, 1.0, 1.0, 0.0); spin = gtk_spin_button_new (adjustment, 1.0, 0); gtk_box_append (GTK_BOX (hbox), spin); adjustment = gtk_adjustment_new (16.0, 1.0, 64.0, 1.0, 1.0, 0.0); spin2 = gtk_spin_button_new (adjustment, 1.0, 0); gtk_box_append (GTK_BOX (hbox), spin2); for (j = 0; j < 3; j++) { hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_append (GTK_BOX (vbox), hbox); gtk_box_set_baseline_position (GTK_BOX (hbox), j); label = gtk_label_new (baseline_pos_str[j]); gtk_box_append (GTK_BOX (hbox), label); gtk_widget_set_vexpand (label, TRUE); image = gtk_image_new_from_icon_name ("face-sad"); gtk_image_set_pixel_size (GTK_IMAGE (image), 34); gtk_box_append (GTK_BOX (hbox), image); g_signal_connect (spin, "value-changed", (GCallback)image_size_value_changed, image); for (i = 0; i < 3; i++) { button = gtk_button_new_with_label ("│Xyj,Ö"); set_font_size (button, i); if (i != 0) gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); } for (i = 0; i < 3; i++) { GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); button = gtk_button_new (); gtk_box_append (GTK_BOX (box), gtk_label_new ("│Xyj,Ö")); image = gtk_image_new_from_icon_name ("face-sad"); gtk_image_set_pixel_size (GTK_IMAGE (image), 16); gtk_box_append (GTK_BOX (box), image); gtk_button_set_child (GTK_BUTTON (button), box); if (i == 0) g_signal_connect (spin2, "value-changed", (GCallback)image_size_value_changed, image); set_font_size (button, i); gtk_widget_set_valign (button, GTK_ALIGN_BASELINE); gtk_box_append (GTK_BOX (hbox), button); } } gtk_widget_show (window); while (!done) g_main_context_iteration (NULL, TRUE); return 0; }