]> Pileus Git - ~andy/gtk/blob - tests/testtextview.c
Added internal GdkRGBA support for GtkTextTag::paragraph-background-rgba
[~andy/gtk] / tests / testtextview.c
1
2
3 #include "config.h"
4 #include <gtk/gtk.h>
5
6
7 static void
8 create_tags (GtkTextBuffer *buffer)
9 {
10
11   gtk_text_buffer_create_tag (buffer, "italic",
12                               "style", PANGO_STYLE_ITALIC, NULL);
13
14   gtk_text_buffer_create_tag (buffer, "bold",
15                               "weight", PANGO_WEIGHT_BOLD, NULL);
16
17   gtk_text_buffer_create_tag (buffer, "x-large",
18                               "scale", PANGO_SCALE_X_LARGE, NULL);
19
20   gtk_text_buffer_create_tag (buffer, "semi_blue_foreground",
21                               "foreground", "rgba(0,0,255,0.5)", NULL);
22
23   gtk_text_buffer_create_tag (buffer, "semi_red_background",
24                               "background", "rgba(255,0,0,0.5)", NULL);
25
26   gtk_text_buffer_create_tag (buffer, "semi_orange_paragraph_background",
27                               "paragraph-background", "rgba(255,165,0,0.5)", NULL);
28
29   gtk_text_buffer_create_tag (buffer, "word_wrap",
30                               "wrap_mode", GTK_WRAP_WORD, NULL);
31 }
32
33
34 static void
35 insert_text (GtkTextBuffer *buffer)
36 {
37   GtkTextIter  iter;
38   GtkTextIter  start, end;
39   GtkTextMark *para_start;
40
41   /* get start of buffer; each insertion will revalidate the
42    * iterator to point to just after the inserted text.
43    */
44   gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
45
46   gtk_text_buffer_insert (buffer, &iter,
47       "This test shows text view rendering some text with rgba colors.\n\n", -1);
48
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,
52                                             "italic", 
53                                             "semi_blue_foreground",
54                                             "x-large",
55                                             NULL);
56
57   gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
58
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,
62                                             "bold", 
63                                             "semi_red_background",
64                                             "x-large",
65                                             NULL);
66   gtk_text_buffer_insert (buffer, &iter, ".\n\n", -1);
67
68   /* Store the beginning of the other paragraph */
69   para_start = gtk_text_buffer_create_mark (buffer, "para_start", &iter, TRUE);
70
71   gtk_text_buffer_insert (buffer, &iter,
72       "Paragraph background colors can also be set with rgba color values .\n", -1);
73
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,
77                                             "bold", 
78                                             "semi_blue_foreground",
79                                             "x-large",
80                                             NULL);
81
82   gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
83
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,
87                                             "italic", 
88                                             "semi_red_background",
89                                             "x-large",
90                                             NULL);
91
92   gtk_text_buffer_insert (buffer, &iter, " all rendered onto a translucent orange paragraph background.\n", -1);
93
94   gtk_text_buffer_get_bounds (buffer, &start, &end);
95
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);
98
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);
102 }
103
104 static void
105 draw_background (GtkWidget *widget, cairo_t *cr)
106 {
107   GtkAllocation allocation;
108   cairo_pattern_t *pat;
109   
110   gtk_widget_get_allocation (widget, &allocation);
111
112   cairo_save (cr);
113
114   pat = cairo_pattern_create_linear (0.0, 0.0,  allocation.width, allocation.height);
115   cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 1);
116   cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);
117   cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
118   cairo_set_source (cr, pat);
119   cairo_fill (cr);
120   cairo_pattern_destroy (pat);
121
122   cairo_restore (cr);
123 }
124
125 int
126 main (int argc, char **argv)
127 {
128   GtkWidget *window, *textview;
129   GtkTextBuffer *buffer;
130
131   gtk_init (&argc, &argv);
132
133   window   = gtk_window_new (GTK_WINDOW_TOPLEVEL);
134   textview = gtk_text_view_new ();
135   buffer   = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
136
137   gtk_window_set_default_size (GTK_WINDOW (window), 400, -1);
138
139   create_tags (buffer);
140   insert_text (buffer);
141   
142   gtk_widget_show (textview);
143   gtk_container_add (GTK_CONTAINER (window), textview);
144
145   g_signal_connect (textview, "draw",
146                     G_CALLBACK (draw_background), NULL);
147
148
149   gtk_widget_show (window);
150
151   gtk_main ();
152
153   return 0;
154 }