8 create_tags (GtkTextBuffer *buffer)
11 gtk_text_buffer_create_tag (buffer, "italic",
12 "style", PANGO_STYLE_ITALIC, NULL);
14 gtk_text_buffer_create_tag (buffer, "bold",
15 "weight", PANGO_WEIGHT_BOLD, NULL);
17 gtk_text_buffer_create_tag (buffer, "x-large",
18 "scale", PANGO_SCALE_X_LARGE, NULL);
20 gtk_text_buffer_create_tag (buffer, "semi_blue_foreground",
21 "foreground", "rgba(0,0,255,0.7)", NULL);
23 gtk_text_buffer_create_tag (buffer, "semi_red_background",
24 "background", "rgba(255,0,0,0.5)", NULL);
26 gtk_text_buffer_create_tag (buffer, "semi_orange_paragraph_background",
27 "paragraph-background", "rgba(255,165,0,0.5)", NULL);
29 gtk_text_buffer_create_tag (buffer, "word_wrap",
30 "wrap_mode", GTK_WRAP_WORD, NULL);
35 insert_text (GtkTextBuffer *buffer)
38 GtkTextIter start, end;
39 GtkTextMark *para_start;
41 /* get start of buffer; each insertion will revalidate the
42 * iterator to point to just after the inserted text.
44 gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
46 gtk_text_buffer_insert (buffer, &iter,
47 "This test shows text view rendering some text with rgba colors.\n\n", -1);
49 gtk_text_buffer_insert (buffer, &iter, "For example, you can have ", -1);
50 gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
51 "italic translucent blue text", -1,
53 "semi_blue_foreground",
57 gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
59 gtk_text_buffer_insert (buffer, &iter, ", ", -1);
60 gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
61 "bold text with translucent red background", -1,
63 "semi_red_background",
66 gtk_text_buffer_insert (buffer, &iter, ".\n\n", -1);
68 /* Store the beginning of the other paragraph */
69 para_start = gtk_text_buffer_create_mark (buffer, "para_start", &iter, TRUE);
71 gtk_text_buffer_insert (buffer, &iter,
72 "Paragraph background colors can also be set with rgba color values .\n", -1);
74 gtk_text_buffer_insert (buffer, &iter, "For instance, you can have ", -1);
75 gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
76 "bold translucent blue text", -1,
78 "semi_blue_foreground",
82 gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
84 gtk_text_buffer_insert (buffer, &iter, ", ", -1);
85 gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
86 "italic text with translucent red background", -1,
88 "semi_red_background",
92 gtk_text_buffer_insert (buffer, &iter, " all rendered onto a translucent orange paragraph background.\n", -1);
94 gtk_text_buffer_get_bounds (buffer, &start, &end);
96 gtk_text_buffer_get_iter_at_mark (buffer, &iter, para_start);
97 gtk_text_buffer_apply_tag_by_name (buffer, "semi_orange_paragraph_background", &iter, &end);
99 /* Apply word_wrap tag to whole buffer */
100 gtk_text_buffer_get_bounds (buffer, &start, &end);
101 gtk_text_buffer_apply_tag_by_name (buffer, "word_wrap", &start, &end);
105 /* Size of checks and gray levels for alpha compositing checkerboard */
106 #define CHECK_SIZE 10
107 #define CHECK_DARK (1.0 / 3.0)
108 #define CHECK_LIGHT (2.0 / 3.0)
110 static cairo_pattern_t *
113 /* need to respect pixman's stride being a multiple of 4 */
114 static unsigned char data[8] = { 0xFF, 0x00, 0x00, 0x00,
115 0x00, 0xFF, 0x00, 0x00 };
116 static cairo_surface_t *checkered = NULL;
117 cairo_pattern_t *pattern;
119 if (checkered == NULL)
121 checkered = cairo_image_surface_create_for_data (data,
126 pattern = cairo_pattern_create_for_surface (checkered);
127 cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
128 cairo_pattern_set_filter (pattern, CAIRO_FILTER_NEAREST);
134 draw_background (GtkWidget *widget, cairo_t *cr)
136 cairo_pattern_t *pat;
140 cairo_set_source_rgb (cr, CHECK_DARK, CHECK_DARK, CHECK_DARK);
143 cairo_set_source_rgb (cr, CHECK_LIGHT, CHECK_LIGHT, CHECK_LIGHT);
144 cairo_scale (cr, CHECK_SIZE, CHECK_SIZE);
146 pat = get_checkered ();
147 cairo_mask (cr, pat);
148 cairo_pattern_destroy (pat);
154 main (int argc, char **argv)
156 GtkWidget *window, *textview;
157 GtkTextBuffer *buffer;
159 gtk_init (&argc, &argv);
161 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
162 textview = gtk_text_view_new ();
163 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
165 gtk_window_set_default_size (GTK_WINDOW (window), 400, -1);
167 create_tags (buffer);
168 insert_text (buffer);
170 gtk_widget_show (textview);
171 gtk_container_add (GTK_CONTAINER (window), textview);
173 g_signal_connect (textview, "draw",
174 G_CALLBACK (draw_background), NULL);
177 gtk_widget_show (window);