Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-18 10:28:16

0001 /* Pango
0002  * pango-renderer.h: Base class for rendering
0003  *
0004  * Copyright (C) 2004, Red Hat, Inc.
0005  *
0006  * This library is free software; you can redistribute it and/or
0007  * modify it under the terms of the GNU Library General Public
0008  * License as published by the Free Software Foundation; either
0009  * version 2 of the License, or (at your option) any later version.
0010  *
0011  * This library is distributed in the hope that it will be useful,
0012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014  * Library General Public License for more details.
0015  *
0016  * You should have received a copy of the GNU Library General Public
0017  * License along with this library; if not, write to the
0018  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0019  * Boston, MA 02111-1307, USA.
0020  */
0021 #ifndef __PANGO_RENDERER_H_
0022 #define __PANGO_RENDERER_H_
0023 
0024 #include <pango/pango-layout.h>
0025 
0026 G_BEGIN_DECLS
0027 
0028 #define PANGO_TYPE_RENDERER            (pango_renderer_get_type())
0029 #define PANGO_RENDERER(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_RENDERER, PangoRenderer))
0030 #define PANGO_IS_RENDERER(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_RENDERER))
0031 #define PANGO_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_RENDERER, PangoRendererClass))
0032 #define PANGO_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_RENDERER))
0033 #define PANGO_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_RENDERER, PangoRendererClass))
0034 
0035 typedef struct _PangoRenderer        PangoRenderer;
0036 typedef struct _PangoRendererClass   PangoRendererClass;
0037 typedef struct _PangoRendererPrivate PangoRendererPrivate;
0038 
0039 /**
0040  * PangoRenderPart:
0041  * @PANGO_RENDER_PART_FOREGROUND: the text itself
0042  * @PANGO_RENDER_PART_BACKGROUND: the area behind the text
0043  * @PANGO_RENDER_PART_UNDERLINE: underlines
0044  * @PANGO_RENDER_PART_STRIKETHROUGH: strikethrough lines
0045  * @PANGO_RENDER_PART_OVERLINE: overlines
0046  *
0047  * `PangoRenderPart` defines different items to render for such
0048  * purposes as setting colors.
0049  *
0050  * Since: 1.8
0051  **/
0052 /* When extending, note N_RENDER_PARTS #define in pango-renderer.c */
0053 typedef enum
0054 {
0055   PANGO_RENDER_PART_FOREGROUND,
0056   PANGO_RENDER_PART_BACKGROUND,
0057   PANGO_RENDER_PART_UNDERLINE,
0058   PANGO_RENDER_PART_STRIKETHROUGH,
0059   PANGO_RENDER_PART_OVERLINE
0060 } PangoRenderPart;
0061 
0062 /**
0063  * PangoRenderer:
0064  * @matrix: (nullable): the current transformation matrix for
0065  *   the Renderer; may be %NULL, which should be treated the
0066  *   same as the identity matrix.
0067  *
0068  * `PangoRenderer` is a base class for objects that can render text
0069  * provided as `PangoGlyphString` or `PangoLayout`.
0070  *
0071  * By subclassing `PangoRenderer` and overriding operations such as
0072  * @draw_glyphs and @draw_rectangle, renderers for particular font
0073  * backends and destinations can be created.
0074  *
0075  * Since: 1.8
0076  */
0077 struct _PangoRenderer
0078 {
0079   /*< private >*/
0080   GObject parent_instance;
0081 
0082   PangoUnderline underline;
0083   gboolean strikethrough;
0084   int active_count;
0085 
0086   /*< public >*/
0087   PangoMatrix *matrix;          /* May be NULL */
0088 
0089   /*< private >*/
0090   PangoRendererPrivate *priv;
0091 };
0092 
0093 /**
0094  * PangoRendererClass:
0095  * @draw_glyphs: draws a `PangoGlyphString`
0096  * @draw_rectangle: draws a rectangle
0097  * @draw_error_underline: draws a squiggly line that approximately
0098  * covers the given rectangle in the style of an underline used to
0099  * indicate a spelling error.
0100  * @draw_shape: draw content for a glyph shaped with `PangoAttrShape`
0101  *   @x, @y are the coordinates of the left edge of the baseline,
0102  *   in user coordinates.
0103  * @draw_trapezoid: draws a trapezoidal filled area
0104  * @draw_glyph: draws a single glyph
0105  * @part_changed: do renderer specific processing when rendering
0106  *  attributes change
0107  * @begin: Do renderer-specific initialization before drawing
0108  * @end: Do renderer-specific cleanup after drawing
0109  * @prepare_run: updates the renderer for a new run
0110  * @draw_glyph_item: draws a `PangoGlyphItem`
0111  *
0112  * Class structure for `PangoRenderer`.
0113  *
0114  * The following vfuncs take user space coordinates in Pango units
0115  * and have default implementations:
0116  * - draw_glyphs
0117  * - draw_rectangle
0118  * - draw_error_underline
0119  * - draw_shape
0120  * - draw_glyph_item
0121  *
0122  * The default draw_shape implementation draws nothing.
0123  *
0124  * The following vfuncs take device space coordinates as doubles
0125  * and must be implemented:
0126  * - draw_trapezoid
0127  * - draw_glyph
0128  *
0129  * Since: 1.8
0130  */
0131 struct _PangoRendererClass
0132 {
0133   /*< private >*/
0134   GObjectClass parent_class;
0135 
0136   /* vtable - not signals */
0137   /*< public >*/
0138 
0139   void (*draw_glyphs)          (PangoRenderer    *renderer,
0140                                 PangoFont        *font,
0141                                 PangoGlyphString *glyphs,
0142                                 int               x,
0143                                 int               y);
0144   void (*draw_rectangle)       (PangoRenderer    *renderer,
0145                                 PangoRenderPart   part,
0146                                 int               x,
0147                                 int               y,
0148                                 int               width,
0149                                 int               height);
0150   void (*draw_error_underline) (PangoRenderer    *renderer,
0151                                 int               x,
0152                                 int               y,
0153                                 int               width,
0154                                 int               height);
0155   void (*draw_shape)           (PangoRenderer    *renderer,
0156                                 PangoAttrShape   *attr,
0157                                 int               x,
0158                                 int               y);
0159 
0160   void (*draw_trapezoid)       (PangoRenderer    *renderer,
0161                                 PangoRenderPart   part,
0162                                 double            y1_,
0163                                 double            x11,
0164                                 double            x21,
0165                                 double            y2,
0166                                 double            x12,
0167                                 double            x22);
0168   void (*draw_glyph)           (PangoRenderer    *renderer,
0169                                 PangoFont        *font,
0170                                 PangoGlyph        glyph,
0171                                 double            x,
0172                                 double            y);
0173 
0174   void (*part_changed)         (PangoRenderer    *renderer,
0175                                 PangoRenderPart   part);
0176 
0177   void (*begin)                (PangoRenderer    *renderer);
0178   void (*end)                  (PangoRenderer    *renderer);
0179 
0180   void (*prepare_run)          (PangoRenderer    *renderer,
0181                                 PangoLayoutRun   *run);
0182 
0183   void (*draw_glyph_item)      (PangoRenderer    *renderer,
0184                                 const char       *text,
0185                                 PangoGlyphItem   *glyph_item,
0186                                 int               x,
0187                                 int               y);
0188 
0189   /*< private >*/
0190 
0191   /* Padding for future expansion */
0192   void (*_pango_reserved2) (void);
0193   void (*_pango_reserved3) (void);
0194   void (*_pango_reserved4) (void);
0195 };
0196 
0197 PANGO_AVAILABLE_IN_1_8
0198 GType pango_renderer_get_type            (void) G_GNUC_CONST;
0199 
0200 PANGO_AVAILABLE_IN_1_8
0201 void pango_renderer_draw_layout          (PangoRenderer    *renderer,
0202                                           PangoLayout      *layout,
0203                                           int               x,
0204                                           int               y);
0205 PANGO_AVAILABLE_IN_1_8
0206 void pango_renderer_draw_layout_line     (PangoRenderer    *renderer,
0207                                           PangoLayoutLine  *line,
0208                                           int               x,
0209                                           int               y);
0210 PANGO_AVAILABLE_IN_1_8
0211 void pango_renderer_draw_glyphs          (PangoRenderer    *renderer,
0212                                           PangoFont        *font,
0213                                           PangoGlyphString *glyphs,
0214                                           int               x,
0215                                           int               y);
0216 PANGO_AVAILABLE_IN_1_22
0217 void pango_renderer_draw_glyph_item      (PangoRenderer    *renderer,
0218                                           const char       *text,
0219                                           PangoGlyphItem   *glyph_item,
0220                                           int               x,
0221                                           int               y);
0222 PANGO_AVAILABLE_IN_1_8
0223 void pango_renderer_draw_rectangle       (PangoRenderer    *renderer,
0224                                           PangoRenderPart   part,
0225                                           int               x,
0226                                           int               y,
0227                                           int               width,
0228                                           int               height);
0229 PANGO_AVAILABLE_IN_1_8
0230 void pango_renderer_draw_error_underline (PangoRenderer    *renderer,
0231                                           int               x,
0232                                           int               y,
0233                                           int               width,
0234                                           int               height);
0235 PANGO_AVAILABLE_IN_1_8
0236 void pango_renderer_draw_trapezoid       (PangoRenderer    *renderer,
0237                                           PangoRenderPart   part,
0238                                           double            y1_,
0239                                           double            x11,
0240                                           double            x21,
0241                                           double            y2,
0242                                           double            x12,
0243                                           double            x22);
0244 PANGO_AVAILABLE_IN_1_8
0245 void pango_renderer_draw_glyph           (PangoRenderer    *renderer,
0246                                           PangoFont        *font,
0247                                           PangoGlyph        glyph,
0248                                           double            x,
0249                                           double            y);
0250 
0251 PANGO_AVAILABLE_IN_1_8
0252 void pango_renderer_activate             (PangoRenderer    *renderer);
0253 PANGO_AVAILABLE_IN_1_8
0254 void pango_renderer_deactivate           (PangoRenderer    *renderer);
0255 
0256 PANGO_AVAILABLE_IN_1_8
0257 void pango_renderer_part_changed         (PangoRenderer   *renderer,
0258                                           PangoRenderPart  part);
0259 
0260 PANGO_AVAILABLE_IN_1_8
0261 void        pango_renderer_set_color     (PangoRenderer    *renderer,
0262                                           PangoRenderPart   part,
0263                                           const PangoColor *color);
0264 PANGO_AVAILABLE_IN_1_8
0265 PangoColor *pango_renderer_get_color     (PangoRenderer    *renderer,
0266                                           PangoRenderPart   part);
0267 
0268 PANGO_AVAILABLE_IN_1_38
0269 void        pango_renderer_set_alpha     (PangoRenderer    *renderer,
0270                                           PangoRenderPart   part,
0271                                           guint16           alpha);
0272 PANGO_AVAILABLE_IN_1_38
0273 guint16     pango_renderer_get_alpha     (PangoRenderer    *renderer,
0274                                           PangoRenderPart   part);
0275 
0276 PANGO_AVAILABLE_IN_1_8
0277 void               pango_renderer_set_matrix      (PangoRenderer     *renderer,
0278                                                    const PangoMatrix *matrix);
0279 PANGO_AVAILABLE_IN_1_8
0280 const PangoMatrix *pango_renderer_get_matrix      (PangoRenderer     *renderer);
0281 
0282 PANGO_AVAILABLE_IN_1_20
0283 PangoLayout       *pango_renderer_get_layout      (PangoRenderer     *renderer);
0284 PANGO_AVAILABLE_IN_1_20
0285 PangoLayoutLine   *pango_renderer_get_layout_line (PangoRenderer     *renderer);
0286 
0287 G_END_DECLS
0288 
0289 #endif /* __PANGO_RENDERER_H_ */
0290