diff options
Diffstat (limited to 'pango2/pango-renderer.h')
-rw-r--r-- | pango2/pango-renderer.h | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/pango2/pango-renderer.h b/pango2/pango-renderer.h new file mode 100644 index 00000000..e641bb3e --- /dev/null +++ b/pango2/pango-renderer.h @@ -0,0 +1,273 @@ +/* + * Copyright (C) 2004, Red Hat, Inc. + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include <pango2/pango-layout.h> +#include <pango2/pango-lines.h> +#include <pango2/pango-glyph.h> + +G_BEGIN_DECLS + +#define PANGO2_TYPE_RENDERER (pango2_renderer_get_type()) +#define PANGO2_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO2_TYPE_RENDERER, Pango2Renderer)) +#define PANGO2_IS_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO2_TYPE_RENDERER)) +#define PANGO2_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO2_TYPE_RENDERER, Pango2RendererClass)) +#define PANGO2_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO2_TYPE_RENDERER)) +#define PANGO2_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO2_TYPE_RENDERER, Pango2RendererClass)) + +typedef struct _Pango2Renderer Pango2Renderer; +typedef struct _Pango2RendererClass Pango2RendererClass; + +/** + * Pango2RenderPart: + * @PANGO2_RENDER_PART_FOREGROUND: the text itself + * @PANGO2_RENDER_PART_BACKGROUND: the area behind the text + * @PANGO2_RENDER_PART_UNDERLINE: underlines + * @PANGO2_RENDER_PART_STRIKETHROUGH: strikethrough lines + * @PANGO2_RENDER_PART_OVERLINE: overlines + * + * `Pango2RenderPart` defines different items to render for such + * purposes as setting colors. + */ +/* When extending, note N_RENDER_PARTS #define in pango-renderer.c */ +typedef enum +{ + PANGO2_RENDER_PART_FOREGROUND, + PANGO2_RENDER_PART_BACKGROUND, + PANGO2_RENDER_PART_UNDERLINE, + PANGO2_RENDER_PART_STRIKETHROUGH, + PANGO2_RENDER_PART_OVERLINE +} Pango2RenderPart; + +/** + * Pango2Renderer: + * + * `Pango2Renderer` is a base class for objects that can render text + * provided as `Pango2GlyphString` or `Pango2Layout`. + * + * By subclassing `Pango2Renderer` and overriding operations such as + * @draw_glyphs and @draw_rectangle, renderers for particular font + * backends and destinations can be created. + */ +struct _Pango2Renderer +{ + GObject parent_instance; +}; + +/** + * Pango2RendererClass: + * @draw_glyphs: draws a `Pango2GlyphString` + * @draw_rectangle: draws a rectangle + * @draw_line: draws a line in the given style that approximately + * covers the given rectangle + * @draw_trapezoid: draws a trapezoidal filled area + * @draw_glyph: draws a single glyph + * @part_changed: do renderer specific processing when rendering + * attributes change + * @begin: Do renderer-specific initialization before drawing + * @end: Do renderer-specific cleanup after drawing + * @prepare_run: updates the renderer for a new run + * @draw_glyph_item: draws a `Pango2GlyphItem` + * + * Class structure for `Pango2Renderer`. + * + * The following vfuncs take user space coordinates in Pango2 units + * and have default implementations: + * - draw_glyphs + * - draw_rectangle + * - draw_styled_line + * - draw_shape + * - draw_glyph_item + * + * The default draw_shape implementation draws nothing. + * + * The following vfuncs take device space coordinates as doubles + * and must be implemented: + * - draw_trapezoid + * - draw_glyph + */ +struct _Pango2RendererClass +{ + /*< private >*/ + GObjectClass parent_class; + + /*< public >*/ + + void (* draw_glyphs) (Pango2Renderer *renderer, + Pango2Font *font, + Pango2GlyphString *glyphs, + int x, + int y); + void (* draw_rectangle) (Pango2Renderer *renderer, + Pango2RenderPart part, + int x, + int y, + int width, + int height); + void (* draw_styled_line) (Pango2Renderer *renderer, + Pango2RenderPart part, + Pango2LineStyle style, + int x, + int y, + int width, + int height); + void (* draw_line) (Pango2Renderer *renderer, + Pango2LineStyle style, + int x, + int y, + int width, + int height); + void (* draw_shape) (Pango2Renderer *renderer, + Pango2Rectangle *ink_rect, + Pango2Rectangle *logical_rect, + gpointer data, + int x, + int y); + void (* draw_trapezoid) (Pango2Renderer *renderer, + Pango2RenderPart part, + double y1_, + double x11, + double x21, + double y2, + double x12, + double x22); + void (* draw_glyph) (Pango2Renderer *renderer, + Pango2Font *font, + Pango2Glyph glyph, + double x, + double y); + + void (* part_changed) (Pango2Renderer *renderer, + Pango2RenderPart part); + + void (* begin) (Pango2Renderer *renderer); + void (* end) (Pango2Renderer *renderer); + + void (* prepare_run) (Pango2Renderer *renderer, + Pango2Run *run); + + void (* draw_run) (Pango2Renderer *renderer, + const char *text, + Pango2Run *run, + int x, + int y); + + /*< private >*/ + + /* Padding for future expansion */ + gpointer _pango2_reserved[8]; +}; + +PANGO2_AVAILABLE_IN_ALL +GType pango2_renderer_get_type (void) G_GNUC_CONST; + +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_lines (Pango2Renderer *renderer, + Pango2Lines *lines, + int x, + int y); + +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_line (Pango2Renderer *renderer, + Pango2Line *line, + int x, + int y); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_glyphs (Pango2Renderer *renderer, + Pango2Font *font, + Pango2GlyphString *glyphs, + int x, + int y); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_run (Pango2Renderer *renderer, + const char *text, + Pango2Run *run, + int x, + int y); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_rectangle (Pango2Renderer *renderer, + Pango2RenderPart part, + int x, + int y, + int width, + int height); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_styled_line (Pango2Renderer *renderer, + Pango2RenderPart part, + Pango2LineStyle style, + int x, + int y, + int width, + int height); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_error_underline (Pango2Renderer *renderer, + int x, + int y, + int width, + int height); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_trapezoid (Pango2Renderer *renderer, + Pango2RenderPart part, + double y1_, + double x11, + double x21, + double y2, + double x12, + double x22); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_draw_glyph (Pango2Renderer *renderer, + Pango2Font *font, + Pango2Glyph glyph, + double x, + double y); + +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_activate (Pango2Renderer *renderer); +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_deactivate (Pango2Renderer *renderer); + +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_part_changed (Pango2Renderer *renderer, + Pango2RenderPart part); + +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_set_color (Pango2Renderer *renderer, + Pango2RenderPart part, + const Pango2Color *color); +PANGO2_AVAILABLE_IN_ALL +Pango2Color * pango2_renderer_get_color (Pango2Renderer *renderer, + Pango2RenderPart part); + +PANGO2_AVAILABLE_IN_ALL +void pango2_renderer_set_matrix (Pango2Renderer *renderer, + const Pango2Matrix *matrix); +PANGO2_AVAILABLE_IN_ALL +const Pango2Matrix * pango2_renderer_get_matrix (Pango2Renderer *renderer); + +PANGO2_AVAILABLE_IN_ALL +Pango2Lines * pango2_renderer_get_lines (Pango2Renderer *renderer); + +PANGO2_AVAILABLE_IN_ALL +Pango2Line * pango2_renderer_get_layout_line (Pango2Renderer *renderer); + +PANGO2_AVAILABLE_IN_ALL +Pango2Context * pango2_renderer_get_context (Pango2Renderer *renderer); + +G_END_DECLS |