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 25 G_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 34 typedef struct _GskPangoRenderer GskPangoRenderer; 35 typedef struct _GskPangoRendererClass GskPangoRendererClass; 36 37 typedef enum 38 { 39 GSK_PANGO_RENDERER_NORMAL, 40 GSK_PANGO_RENDERER_SELECTED, 41 GSK_PANGO_RENDERER_CURSOR 42 } GskPangoRendererState; 43 44 typedef 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 55 struct _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 73 struct _GskPangoRendererClass 74 { 75 PangoRendererClass parent_class; 76 }; 77 78 GType gsk_pango_renderer_get_type (void) G_GNUC_CONST; 79 void gsk_pango_renderer_set_state (GskPangoRenderer *crenderer, 80 GskPangoRendererState state); 81 void gsk_pango_renderer_set_shape_handler (GskPangoRenderer *crenderer, 82 GskPangoShapeHandler handler); 83 GskPangoRenderer *gsk_pango_renderer_acquire (void); 84 void gsk_pango_renderer_release (GskPangoRenderer *crenderer); 85 86 G_END_DECLS 87 88 #endif /* __GSK_PANGO_H__ */ 89