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