1 #include <gtk/gtk.h>
2
3 static GtkWidget *antialias;
4 static GtkWidget *subpixel;
5 static GtkWidget *hintstyle;
6
7 static void
set_font_options(GtkWidget * label)8 set_font_options (GtkWidget *label)
9 {
10 cairo_antialias_t aa;
11 cairo_subpixel_order_t sp;
12 cairo_hint_style_t hs;
13 cairo_font_options_t *options;
14
15 aa = gtk_combo_box_get_active (GTK_COMBO_BOX (antialias));
16 sp = gtk_combo_box_get_active (GTK_COMBO_BOX (subpixel));
17 hs = gtk_combo_box_get_active (GTK_COMBO_BOX (hintstyle));
18
19 options = cairo_font_options_create ();
20 cairo_font_options_set_antialias (options, aa);
21 cairo_font_options_set_subpixel_order (options, sp);
22 cairo_font_options_set_hint_style (options, hs);
23
24 gtk_widget_set_font_options (label, options);
25 cairo_font_options_destroy (options);
26
27 gtk_widget_queue_draw (label);
28 }
29
30 int
main(int argc,char * argv[])31 main (int argc, char *argv[])
32 {
33 GtkWidget *window, *label, *grid, *demo;
34
35 gtk_init (NULL, NULL);
36
37 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
38 grid = gtk_grid_new ();
39 gtk_grid_set_row_spacing (GTK_GRID (grid), 10);
40 gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
41 gtk_container_set_border_width (GTK_CONTAINER (grid), 10);
42 gtk_container_add (GTK_CONTAINER (window), grid);
43 label = gtk_label_new ("Default font options");
44 gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 2, 1);
45 demo = gtk_label_new ("Custom font options");
46 gtk_grid_attach (GTK_GRID (grid), demo, 0, 1, 2, 1);
47
48 antialias = gtk_combo_box_text_new ();
49 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "Default");
50 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "None");
51 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "Gray");
52 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "Subpixel");
53 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "Fast");
54 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "Good");
55 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (antialias), "Best");
56 g_signal_connect_swapped (antialias, "changed", G_CALLBACK (set_font_options), demo);
57 label = gtk_label_new ("Antialias");
58 gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
59 gtk_grid_attach (GTK_GRID (grid), antialias, 1, 2, 1, 1);
60
61 subpixel = gtk_combo_box_text_new ();
62 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (subpixel), "Default");
63 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (subpixel), "RGB");
64 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (subpixel), "BGR");
65 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (subpixel), "Vertical RGB");
66 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (subpixel), "Vertical BGR");
67 g_signal_connect_swapped (subpixel, "changed", G_CALLBACK (set_font_options), demo);
68 label = gtk_label_new ("Subpixel");
69 gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1);
70 gtk_grid_attach (GTK_GRID (grid), subpixel, 1, 3, 1, 1);
71
72 hintstyle = gtk_combo_box_text_new ();
73 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (hintstyle), "Default");
74 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (hintstyle), "None");
75 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (hintstyle), "Slight");
76 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (hintstyle), "Medium");
77 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (hintstyle), "Full");
78 g_signal_connect_swapped (hintstyle, "changed", G_CALLBACK (set_font_options), demo);
79 label = gtk_label_new ("Hintstyle");
80 gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1);
81 gtk_grid_attach (GTK_GRID (grid), hintstyle, 1, 4, 1, 1);
82
83 gtk_combo_box_set_active (GTK_COMBO_BOX (antialias), 0);
84 gtk_combo_box_set_active (GTK_COMBO_BOX (subpixel), 0);
85 gtk_combo_box_set_active (GTK_COMBO_BOX (hintstyle), 0);
86
87 gtk_widget_show_all (window);
88
89 gtk_main ();
90
91 return 0;
92 }
93