1/* GSK - The GTK Scene Kit
2 *
3 * Copyright 2017 Red Hat, Inc.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef __GSK_PANGO_H__
20#define __GSK_PANGO_H__
21
22#include <pango/pango.h>
23#include "gtk/gtksnapshot.h"
24
25G_BEGIN_DECLS
26
27#define GSK_TYPE_PANGO_RENDERER (gsk_pango_renderer_get_type ())
28#define GSK_PANGO_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_PANGO_RENDERER, GskPangoRenderer))
29#define GSK_IS_PANGO_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_PANGO_RENDERER))
30#define GSK_PANGO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_PANGO_RENDERER, GskPangoRendererClass))
31#define GSK_IS_PANGO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_PANGO_RENDERER))
32#define GSK_PANGO_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_PANGO_RENDERER, GskPangoRendererClass))
33
34typedef struct _GskPangoRenderer GskPangoRenderer;
35typedef struct _GskPangoRendererClass GskPangoRendererClass;
36
37typedef enum
38{
39 GSK_PANGO_RENDERER_NORMAL,
40 GSK_PANGO_RENDERER_SELECTED,
41 GSK_PANGO_RENDERER_CURSOR
42} GskPangoRendererState;
43
44typedef gboolean (*GskPangoShapeHandler) (PangoAttrShape *attr,
45 GdkSnapshot *snapshot,
46 double width,
47 double height);
48
49/*
50 * This is a PangoRenderer implementation that translates all the draw calls to
51 * gsk render nodes, using the GtkSnapshot helper class. Glyphs are translated
52 * to text nodes, other draw calls may fall back to cairo nodes.
53 */
54
55struct _GskPangoRenderer
56{
57 PangoRenderer parent_instance;
58
59 GtkWidget *widget;
60 GtkSnapshot *snapshot;
61 const GdkRGBA *fg_color;
62
63 /* Error underline color for this widget */
64 GdkRGBA *error_color;
65
66 GskPangoRendererState state;
67
68 guint is_cached_renderer : 1;
69
70 GskPangoShapeHandler shape_handler;
71};
72
73struct _GskPangoRendererClass
74{
75 PangoRendererClass parent_class;
76};
77
78GType gsk_pango_renderer_get_type (void) G_GNUC_CONST;
79void gsk_pango_renderer_set_state (GskPangoRenderer *crenderer,
80 GskPangoRendererState state);
81void gsk_pango_renderer_set_shape_handler (GskPangoRenderer *crenderer,
82 GskPangoShapeHandler handler);
83GskPangoRenderer *gsk_pango_renderer_acquire (void);
84void gsk_pango_renderer_release (GskPangoRenderer *crenderer);
85
86G_END_DECLS
87
88#endif /* __GSK_PANGO_H__ */
89

source code of gtk/gtk/gskpango.h