2 * pango-renderer.h: Base class for rendering
4 * Copyright (C) 2004, Red Hat, Inc.
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.
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.
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.
21 #ifndef __PANGO_RENDERER_H_
22 #define __PANGO_RENDERER_H_
24 #include <pango/pango-layout.h>
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))
35 typedef struct _PangoRenderer PangoRenderer;
36 typedef struct _PangoRendererClass PangoRendererClass;
37 typedef struct _PangoRendererPrivate PangoRendererPrivate;
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
46 * #PangoRenderPart defines different items to render for such
47 * purposes as setting colors.
51 /* When extending, note N_RENDER_PARTS #define in pango-renderer.c */
54 PANGO_RENDER_PART_FOREGROUND,
55 PANGO_RENDER_PART_BACKGROUND,
56 PANGO_RENDER_PART_UNDERLINE,
57 PANGO_RENDER_PART_STRIKETHROUGH
62 * @matrix: the current transformation matrix for the Renderer; may
63 * be %NULL, which should be treated the same as the identity matrix.
65 * #PangoRenderer is a base class for objects that are used to
66 * render Pango objects such as #PangoGlyphString and
74 GObject parent_instance;
76 PangoUnderline underline;
77 gboolean strikethrough;
81 PangoMatrix *matrix; /* May be NULL */
84 PangoRendererPrivate *priv;
89 * @draw_glyphs: draws a #PangoGlyphString
90 * @draw_rectangle: draws a rectangle
91 * @draw_error_underline: draws a squiggly line that approximately
92 * covers the given rectangle in the style of an underline used to
93 * indicate a spelling error.
94 * @draw_shape: draw content for a glyph shaped with #PangoAttrShape.
95 * @x, @y are the coordinates of the left edge of the baseline,
96 * in user coordinates.
97 * @draw_trapezoid: draws a trapezoidal filled area
98 * @draw_glyph: draws a single glyph
99 * @part_changed: do renderer specific processing when rendering
101 * @begin: Do renderer-specific initialization before drawing
102 * @end: Do renderer-specific cleanup after drawing
103 * @prepare_run: updates the renderer for a new run
104 * @draw_glyph_item: draws a #PangoGlyphItem
106 * Class structure for #PangoRenderer.
110 struct _PangoRendererClass
113 GObjectClass parent_class;
115 /* vtable - not signals */
118 /* All of the following have default implementations
119 * and take as coordinates user coordinates in Pango units
121 void (*draw_glyphs) (PangoRenderer *renderer,
123 PangoGlyphString *glyphs,
126 void (*draw_rectangle) (PangoRenderer *renderer,
127 PangoRenderPart part,
132 void (*draw_error_underline) (PangoRenderer *renderer,
138 /* Nothing is drawn for shaped glyphs unless this is implemented */
139 void (*draw_shape) (PangoRenderer *renderer,
140 PangoAttrShape *attr,
144 /* These two must be implemented and take coordinates in
145 * device space as doubles.
147 void (*draw_trapezoid) (PangoRenderer *renderer,
148 PangoRenderPart part,
155 void (*draw_glyph) (PangoRenderer *renderer,
161 /* Notification of change in rendering attributes
163 void (*part_changed) (PangoRenderer *renderer,
164 PangoRenderPart part);
166 /* Paired around drawing operations
168 void (*begin) (PangoRenderer *renderer);
169 void (*end) (PangoRenderer *renderer);
171 /* Hooks into the details of layout rendering
173 void (*prepare_run) (PangoRenderer *renderer,
174 PangoLayoutRun *run);
176 /* All of the following have default implementations
177 * and take as coordinates user coordinates in Pango units
179 void (*draw_glyph_item) (PangoRenderer *renderer,
181 PangoGlyphItem *glyph_item,
187 /* Padding for future expansion */
188 void (*_pango_reserved2) (void);
189 void (*_pango_reserved3) (void);
190 void (*_pango_reserved4) (void);
193 GType pango_renderer_get_type (void) G_GNUC_CONST;
195 void pango_renderer_draw_layout (PangoRenderer *renderer,
199 void pango_renderer_draw_layout_line (PangoRenderer *renderer,
200 PangoLayoutLine *line,
203 void pango_renderer_draw_glyphs (PangoRenderer *renderer,
205 PangoGlyphString *glyphs,
208 void pango_renderer_draw_glyph_item (PangoRenderer *renderer,
210 PangoGlyphItem *glyph_item,
213 void pango_renderer_draw_rectangle (PangoRenderer *renderer,
214 PangoRenderPart part,
219 void pango_renderer_draw_error_underline (PangoRenderer *renderer,
224 void pango_renderer_draw_trapezoid (PangoRenderer *renderer,
225 PangoRenderPart part,
232 void pango_renderer_draw_glyph (PangoRenderer *renderer,
238 void pango_renderer_activate (PangoRenderer *renderer);
239 void pango_renderer_deactivate (PangoRenderer *renderer);
241 void pango_renderer_part_changed (PangoRenderer *renderer,
242 PangoRenderPart part);
244 void pango_renderer_set_color (PangoRenderer *renderer,
245 PangoRenderPart part,
246 const PangoColor *color);
247 PangoColor *pango_renderer_get_color (PangoRenderer *renderer,
248 PangoRenderPart part);
250 void pango_renderer_set_matrix (PangoRenderer *renderer,
251 const PangoMatrix *matrix);
252 G_CONST_RETURN PangoMatrix *pango_renderer_get_matrix (PangoRenderer *renderer);
254 PangoLayout *pango_renderer_get_layout (PangoRenderer *renderer);
255 PangoLayoutLine *pango_renderer_get_layout_line (PangoRenderer *renderer);
259 #endif /* __PANGO_RENDERER_H_ */