]> Pileus Git - ~andy/gtk/blob - tests/testtextview.c
Added GdkRGBA properties to GtkTextTag.
[~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, "word_wrap",
27                               "wrap_mode", GTK_WRAP_WORD, NULL);
28 }
29
30
31 static void
32 insert_text (GtkTextBuffer *buffer)
33 {
34   GtkTextIter iter;
35   GtkTextIter start, end;
36
37   /* get start of buffer; each insertion will revalidate the
38    * iterator to point to just after the inserted text.
39    */
40   gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
41
42   gtk_text_buffer_insert (buffer, &iter,
43       "This test shows text view rendering some text with rgba colors.\n\n", -1);
44
45   gtk_text_buffer_insert (buffer, &iter, "For example, you can have ", -1);
46   gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
47                                             "italic translucent blue text", -1,
48                                             "italic", 
49                                             "semi_blue_foreground",
50                                             "x-large",
51                                             NULL);
52
53   gtk_text_buffer_insert (buffer, &iter, ", or ", -1);
54
55   gtk_text_buffer_insert (buffer, &iter, ", ", -1);
56   gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
57                                             "bold text with translucent red background", -1,
58                                             "bold", 
59                                             "semi_red_background",
60                                             "x-large",
61                                             NULL);
62   gtk_text_buffer_insert (buffer, &iter, ".", -1);
63
64   /* Apply word_wrap tag to whole buffer */
65   gtk_text_buffer_get_bounds (buffer, &start, &end);
66   gtk_text_buffer_apply_tag_by_name (buffer, "word_wrap", &start, &end);
67 }
68
69
70 static cairo_pattern_t *
71 get_pattern (void)
72 {
73   static cairo_pattern_t *static_pattern = NULL;
74
75   if (!static_pattern)
76     {
77       cairo_surface_t *surface = 
78         cairo_image_surface_create_from_png ("gradient1.png");
79
80       if (surface)
81         {
82           static_pattern = cairo_pattern_create_for_surface (surface);
83           cairo_pattern_set_extend (static_pattern, CAIRO_EXTEND_REFLECT);
84         }
85       else 
86         g_warning ("Failed to create surface for gradient1.png\n");
87     }
88   return static_pattern;
89 }
90
91 static void
92 draw_background (GtkWidget *widget, cairo_t *cr)
93 {
94   GtkAllocation allocation;
95   cairo_pattern_t *pat;
96   
97   gtk_widget_get_allocation (widget, &allocation);
98
99   cairo_save (cr);
100
101 #if 0
102   pat = cairo_pattern_create_linear (0.0, 0.0,  30.0, 30.0);
103   cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 1);
104   cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);
105   cairo_pattern_set_extend (pat, CAIRO_EXTEND_REPEAT);
106   cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
107   cairo_set_source (cr, pat);
108   cairo_fill (cr);
109   cairo_pattern_destroy (pat);
110
111 #else
112
113   if (get_pattern ())
114     {
115       cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
116       cairo_set_source (cr, get_pattern ());
117       cairo_fill (cr);
118     }
119 #endif
120
121   cairo_restore (cr);
122 }
123
124 int
125 main (int argc, char **argv)
126 {
127   GtkWidget *window, *textview;
128   GtkTextBuffer *buffer;
129
130   gtk_init (&argc, &argv);
131
132   window   = gtk_window_new (GTK_WINDOW_TOPLEVEL);
133   textview = gtk_text_view_new ();
134   buffer   = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
135
136   create_tags (buffer);
137   insert_text (buffer);
138   
139   gtk_widget_show (textview);
140   gtk_container_add (GTK_CONTAINER (window), textview);
141
142   g_signal_connect (textview, "draw",
143                     G_CALLBACK (draw_background), NULL);
144
145
146   gtk_widget_show (window);
147
148   gtk_main ();
149
150   return 0;
151 }