1 | /* Pango |
2 | * pango-renderer.h: Base class for rendering |
3 | * |
4 | * Copyright (C) 2004, Red Hat, Inc. |
5 | * |
6 | * This library is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Library General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2 of the License, or (at your option) any later version. |
10 | * |
11 | * This library is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | * Library General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Library General Public |
17 | * License along with this library; if not, write to the |
18 | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
19 | * Boston, MA 02111-1307, USA. |
20 | */ |
21 | #ifndef __PANGO_RENDERER_H_ |
22 | #define __PANGO_RENDERER_H_ |
23 | |
24 | #include <pango/pango-layout.h> |
25 | |
26 | G_BEGIN_DECLS |
27 | |
28 | #define PANGO_TYPE_RENDERER (pango_renderer_get_type()) |
29 | #define PANGO_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_RENDERER, PangoRenderer)) |
30 | #define PANGO_IS_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_RENDERER)) |
31 | #define PANGO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_RENDERER, PangoRendererClass)) |
32 | #define PANGO_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_RENDERER)) |
33 | #define PANGO_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_RENDERER, PangoRendererClass)) |
34 | |
35 | typedef struct _PangoRenderer PangoRenderer; |
36 | typedef struct _PangoRendererClass PangoRendererClass; |
37 | typedef struct _PangoRendererPrivate PangoRendererPrivate; |
38 | |
39 | /** |
40 | * PangoRenderPart: |
41 | * @PANGO_RENDER_PART_FOREGROUND: the text itself |
42 | * @PANGO_RENDER_PART_BACKGROUND: the area behind the text |
43 | * @PANGO_RENDER_PART_UNDERLINE: underlines |
44 | * @PANGO_RENDER_PART_STRIKETHROUGH: strikethrough lines |
45 | * @PANGO_RENDER_PART_OVERLINE: overlines |
46 | * |
47 | * `PangoRenderPart` defines different items to render for such |
48 | * purposes as setting colors. |
49 | * |
50 | * Since: 1.8 |
51 | **/ |
52 | /* When extending, note N_RENDER_PARTS #define in pango-renderer.c */ |
53 | typedef enum |
54 | { |
55 | PANGO_RENDER_PART_FOREGROUND, |
56 | PANGO_RENDER_PART_BACKGROUND, |
57 | PANGO_RENDER_PART_UNDERLINE, |
58 | PANGO_RENDER_PART_STRIKETHROUGH, |
59 | PANGO_RENDER_PART_OVERLINE |
60 | } PangoRenderPart; |
61 | |
62 | /** |
63 | * PangoRenderer: |
64 | * @matrix: (nullable): the current transformation matrix for |
65 | * the Renderer; may be %NULL, which should be treated the |
66 | * same as the identity matrix. |
67 | * |
68 | * `PangoRenderer` is a base class for objects that can render text |
69 | * provided as `PangoGlyphString` or `PangoLayout`. |
70 | * |
71 | * By subclassing `PangoRenderer` and overriding operations such as |
72 | * @draw_glyphs and @draw_rectangle, renderers for particular font |
73 | * backends and destinations can be created. |
74 | * |
75 | * Since: 1.8 |
76 | */ |
77 | struct _PangoRenderer |
78 | { |
79 | /*< private >*/ |
80 | GObject parent_instance; |
81 | |
82 | PangoUnderline underline; |
83 | gboolean strikethrough; |
84 | int active_count; |
85 | |
86 | /*< public >*/ |
87 | PangoMatrix *matrix; /* May be NULL */ |
88 | |
89 | /*< private >*/ |
90 | PangoRendererPrivate *priv; |
91 | }; |
92 | |
93 | /** |
94 | * PangoRendererClass: |
95 | * @draw_glyphs: draws a `PangoGlyphString` |
96 | * @draw_rectangle: draws a rectangle |
97 | * @draw_error_underline: draws a squiggly line that approximately |
98 | * covers the given rectangle in the style of an underline used to |
99 | * indicate a spelling error. |
100 | * @draw_shape: draw content for a glyph shaped with `PangoAttrShape` |
101 | * @x, @y are the coordinates of the left edge of the baseline, |
102 | * in user coordinates. |
103 | * @draw_trapezoid: draws a trapezoidal filled area |
104 | * @draw_glyph: draws a single glyph |
105 | * @part_changed: do renderer specific processing when rendering |
106 | * attributes change |
107 | * @begin: Do renderer-specific initialization before drawing |
108 | * @end: Do renderer-specific cleanup after drawing |
109 | * @prepare_run: updates the renderer for a new run |
110 | * @draw_glyph_item: draws a `PangoGlyphItem` |
111 | * |
112 | * Class structure for `PangoRenderer`. |
113 | * |
114 | * The following vfuncs take user space coordinates in Pango units |
115 | * and have default implementations: |
116 | * - draw_glyphs |
117 | * - draw_rectangle |
118 | * - draw_error_underline |
119 | * - draw_shape |
120 | * - draw_glyph_item |
121 | * |
122 | * The default draw_shape implementation draws nothing. |
123 | * |
124 | * The following vfuncs take device space coordinates as doubles |
125 | * and must be implemented: |
126 | * - draw_trapezoid |
127 | * - draw_glyph |
128 | * |
129 | * Since: 1.8 |
130 | */ |
131 | struct _PangoRendererClass |
132 | { |
133 | /*< private >*/ |
134 | GObjectClass parent_class; |
135 | |
136 | /* vtable - not signals */ |
137 | /*< public >*/ |
138 | |
139 | void (*draw_glyphs) (PangoRenderer *renderer, |
140 | PangoFont *font, |
141 | PangoGlyphString *glyphs, |
142 | int x, |
143 | int y); |
144 | void (*draw_rectangle) (PangoRenderer *renderer, |
145 | PangoRenderPart part, |
146 | int x, |
147 | int y, |
148 | int width, |
149 | int height); |
150 | void (*draw_error_underline) (PangoRenderer *renderer, |
151 | int x, |
152 | int y, |
153 | int width, |
154 | int height); |
155 | void (*draw_shape) (PangoRenderer *renderer, |
156 | PangoAttrShape *attr, |
157 | int x, |
158 | int y); |
159 | |
160 | void (*draw_trapezoid) (PangoRenderer *renderer, |
161 | PangoRenderPart part, |
162 | double y1_, |
163 | double x11, |
164 | double x21, |
165 | double y2, |
166 | double x12, |
167 | double x22); |
168 | void (*draw_glyph) (PangoRenderer *renderer, |
169 | PangoFont *font, |
170 | PangoGlyph glyph, |
171 | double x, |
172 | double y); |
173 | |
174 | void (*part_changed) (PangoRenderer *renderer, |
175 | PangoRenderPart part); |
176 | |
177 | void (*begin) (PangoRenderer *renderer); |
178 | void (*end) (PangoRenderer *renderer); |
179 | |
180 | void (*prepare_run) (PangoRenderer *renderer, |
181 | PangoLayoutRun *run); |
182 | |
183 | void (*draw_glyph_item) (PangoRenderer *renderer, |
184 | const char *text, |
185 | PangoGlyphItem *glyph_item, |
186 | int x, |
187 | int y); |
188 | |
189 | /*< private >*/ |
190 | |
191 | /* Padding for future expansion */ |
192 | void (*_pango_reserved2) (void); |
193 | void (*_pango_reserved3) (void); |
194 | void (*_pango_reserved4) (void); |
195 | }; |
196 | |
197 | PANGO_AVAILABLE_IN_1_8 |
198 | GType pango_renderer_get_type (void) G_GNUC_CONST; |
199 | |
200 | PANGO_AVAILABLE_IN_1_8 |
201 | void pango_renderer_draw_layout (PangoRenderer *renderer, |
202 | PangoLayout *layout, |
203 | int x, |
204 | int y); |
205 | PANGO_AVAILABLE_IN_1_8 |
206 | void pango_renderer_draw_layout_line (PangoRenderer *renderer, |
207 | PangoLayoutLine *line, |
208 | int x, |
209 | int y); |
210 | PANGO_AVAILABLE_IN_1_8 |
211 | void pango_renderer_draw_glyphs (PangoRenderer *renderer, |
212 | PangoFont *font, |
213 | PangoGlyphString *glyphs, |
214 | int x, |
215 | int y); |
216 | PANGO_AVAILABLE_IN_1_22 |
217 | void pango_renderer_draw_glyph_item (PangoRenderer *renderer, |
218 | const char *text, |
219 | PangoGlyphItem *glyph_item, |
220 | int x, |
221 | int y); |
222 | PANGO_AVAILABLE_IN_1_8 |
223 | void pango_renderer_draw_rectangle (PangoRenderer *renderer, |
224 | PangoRenderPart part, |
225 | int x, |
226 | int y, |
227 | int width, |
228 | int height); |
229 | PANGO_AVAILABLE_IN_1_8 |
230 | void pango_renderer_draw_error_underline (PangoRenderer *renderer, |
231 | int x, |
232 | int y, |
233 | int width, |
234 | int height); |
235 | PANGO_AVAILABLE_IN_1_8 |
236 | void pango_renderer_draw_trapezoid (PangoRenderer *renderer, |
237 | PangoRenderPart part, |
238 | double y1_, |
239 | double x11, |
240 | double x21, |
241 | double y2, |
242 | double x12, |
243 | double x22); |
244 | PANGO_AVAILABLE_IN_1_8 |
245 | void pango_renderer_draw_glyph (PangoRenderer *renderer, |
246 | PangoFont *font, |
247 | PangoGlyph glyph, |
248 | double x, |
249 | double y); |
250 | |
251 | PANGO_AVAILABLE_IN_1_8 |
252 | void pango_renderer_activate (PangoRenderer *renderer); |
253 | PANGO_AVAILABLE_IN_1_8 |
254 | void pango_renderer_deactivate (PangoRenderer *renderer); |
255 | |
256 | PANGO_AVAILABLE_IN_1_8 |
257 | void pango_renderer_part_changed (PangoRenderer *renderer, |
258 | PangoRenderPart part); |
259 | |
260 | PANGO_AVAILABLE_IN_1_8 |
261 | void pango_renderer_set_color (PangoRenderer *renderer, |
262 | PangoRenderPart part, |
263 | const PangoColor *color); |
264 | PANGO_AVAILABLE_IN_1_8 |
265 | PangoColor *pango_renderer_get_color (PangoRenderer *renderer, |
266 | PangoRenderPart part); |
267 | |
268 | PANGO_AVAILABLE_IN_1_38 |
269 | void pango_renderer_set_alpha (PangoRenderer *renderer, |
270 | PangoRenderPart part, |
271 | guint16 alpha); |
272 | PANGO_AVAILABLE_IN_1_38 |
273 | guint16 pango_renderer_get_alpha (PangoRenderer *renderer, |
274 | PangoRenderPart part); |
275 | |
276 | PANGO_AVAILABLE_IN_1_8 |
277 | void pango_renderer_set_matrix (PangoRenderer *renderer, |
278 | const PangoMatrix *matrix); |
279 | PANGO_AVAILABLE_IN_1_8 |
280 | const PangoMatrix *pango_renderer_get_matrix (PangoRenderer *renderer); |
281 | |
282 | PANGO_AVAILABLE_IN_1_20 |
283 | PangoLayout *pango_renderer_get_layout (PangoRenderer *renderer); |
284 | PANGO_AVAILABLE_IN_1_20 |
285 | PangoLayoutLine *pango_renderer_get_layout_line (PangoRenderer *renderer); |
286 | |
287 | G_END_DECLS |
288 | |
289 | #endif /* __PANGO_RENDERER_H_ */ |
290 | |
291 | |