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