Upload tizen 2.0 beta source
[external/pango1.0.git] / pango / pango-renderer.h
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  *
46  * #PangoRenderPart defines different items to render for such
47  * purposes as setting colors.
48  *
49  * Since: 1.8
50  **/
51 /* When extending, note N_RENDER_PARTS #define in pango-renderer.c */
52 typedef enum
53 {
54   PANGO_RENDER_PART_FOREGROUND,
55   PANGO_RENDER_PART_BACKGROUND,
56   PANGO_RENDER_PART_UNDERLINE,
57   PANGO_RENDER_PART_STRIKETHROUGH
58 } PangoRenderPart;
59
60 /**
61  * PangoRenderer:
62  * @matrix: the current transformation matrix for the Renderer; may
63  *    be %NULL, which should be treated the same as the identity matrix.
64  *
65  * #PangoRenderer is a base class for objects that are used to
66  * render Pango objects such as #PangoGlyphString and
67  * #PangoLayout.
68  *
69  * Since: 1.8
70  **/
71 struct _PangoRenderer
72 {
73   /*< private >*/
74   GObject parent_instance;
75
76   PangoUnderline underline;
77   gboolean strikethrough;
78   int active_count;
79
80   /*< public >*/
81   PangoMatrix *matrix;          /* May be NULL */
82
83   /*< private >*/
84   PangoRendererPrivate *priv;
85 };
86
87 /**
88  * PangoRendererClass:
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
100  *  attributes change
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
105  *
106  * Class structure for #PangoRenderer.
107  *
108  * Since: 1.8
109  **/
110 struct _PangoRendererClass
111 {
112   /*< private >*/
113   GObjectClass parent_class;
114
115   /* vtable - not signals */
116   /*< public >*/
117
118   /* All of the following have default implementations
119    * and take as coordinates user coordinates in Pango units
120    */
121   void (*draw_glyphs) (PangoRenderer     *renderer,
122                        PangoFont         *font,
123                        PangoGlyphString  *glyphs,
124                        int                x,
125                        int                y);
126   void (*draw_rectangle) (PangoRenderer     *renderer,
127                           PangoRenderPart    part,
128                           int                x,
129                           int                y,
130                           int                width,
131                           int                height);
132   void (*draw_error_underline) (PangoRenderer     *renderer,
133                                 int                x,
134                                 int                y,
135                                 int                width,
136                                 int                height);
137
138   /* Nothing is drawn for shaped glyphs unless this is implemented */
139   void (*draw_shape) (PangoRenderer  *renderer,
140                       PangoAttrShape *attr,
141                       int             x,
142                       int             y);
143
144   /* These two must be implemented and take coordinates in
145    * device space as doubles.
146    */
147   void (*draw_trapezoid) (PangoRenderer  *renderer,
148                           PangoRenderPart part,
149                           double          y1_,
150                           double          x11,
151                           double          x21,
152                           double          y2,
153                           double          x12,
154                           double          x22);
155   void (*draw_glyph) (PangoRenderer *renderer,
156                       PangoFont     *font,
157                       PangoGlyph     glyph,
158                       double         x,
159                       double         y);
160
161   /* Notification of change in rendering attributes
162    */
163   void (*part_changed) (PangoRenderer   *renderer,
164                         PangoRenderPart  part);
165
166   /* Paired around drawing operations
167    */
168   void (*begin) (PangoRenderer *renderer);
169   void (*end)   (PangoRenderer *renderer);
170
171   /* Hooks into the details of layout rendering
172    */
173   void (*prepare_run) (PangoRenderer  *renderer,
174                        PangoLayoutRun *run);
175
176   /* All of the following have default implementations
177    * and take as coordinates user coordinates in Pango units
178    */
179   void (*draw_glyph_item) (PangoRenderer     *renderer,
180                            const char        *text,
181                            PangoGlyphItem    *glyph_item,
182                            int                x,
183                            int                y);
184
185   /*< private >*/
186
187   /* Padding for future expansion */
188   void (*_pango_reserved2) (void);
189   void (*_pango_reserved3) (void);
190   void (*_pango_reserved4) (void);
191 };
192
193 GType pango_renderer_get_type    (void) G_GNUC_CONST;
194
195 void pango_renderer_draw_layout          (PangoRenderer    *renderer,
196                                           PangoLayout      *layout,
197                                           int               x,
198                                           int               y);
199 void pango_renderer_draw_layout_line     (PangoRenderer    *renderer,
200                                           PangoLayoutLine  *line,
201                                           int               x,
202                                           int               y);
203 void pango_renderer_draw_glyphs          (PangoRenderer    *renderer,
204                                           PangoFont        *font,
205                                           PangoGlyphString *glyphs,
206                                           int               x,
207                                           int               y);
208 void pango_renderer_draw_glyph_item      (PangoRenderer    *renderer,
209                                           const char       *text,
210                                           PangoGlyphItem   *glyph_item,
211                                           int               x,
212                                           int               y);
213 void pango_renderer_draw_rectangle       (PangoRenderer    *renderer,
214                                           PangoRenderPart   part,
215                                           int               x,
216                                           int               y,
217                                           int               width,
218                                           int               height);
219 void pango_renderer_draw_error_underline (PangoRenderer    *renderer,
220                                           int               x,
221                                           int               y,
222                                           int               width,
223                                           int               height);
224 void pango_renderer_draw_trapezoid       (PangoRenderer    *renderer,
225                                           PangoRenderPart   part,
226                                           double            y1_,
227                                           double            x11,
228                                           double            x21,
229                                           double            y2,
230                                           double            x12,
231                                           double            x22);
232 void pango_renderer_draw_glyph           (PangoRenderer    *renderer,
233                                           PangoFont        *font,
234                                           PangoGlyph        glyph,
235                                           double            x,
236                                           double            y);
237
238 void pango_renderer_activate             (PangoRenderer    *renderer);
239 void pango_renderer_deactivate           (PangoRenderer    *renderer);
240
241 void        pango_renderer_part_changed (PangoRenderer   *renderer,
242                                          PangoRenderPart  part);
243
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);
249
250 void                        pango_renderer_set_matrix (PangoRenderer     *renderer,
251                                                        const PangoMatrix *matrix);
252 G_CONST_RETURN PangoMatrix *pango_renderer_get_matrix (PangoRenderer     *renderer);
253
254 PangoLayout     *pango_renderer_get_layout      (PangoRenderer     *renderer);
255 PangoLayoutLine *pango_renderer_get_layout_line (PangoRenderer     *renderer);
256
257 G_END_DECLS
258
259 #endif /* __PANGO_RENDERER_H_ */
260