#include "gdk/gdkrgbaprivate.h"
#include <epoxy/gl.h>
-#include <cairo-ft.h>
#define SHADER_VERSION_GLES 100
#define SHADER_VERSION_GL2_LEGACY 110
cairo_surface_destroy (surface);
}
-static gboolean
-font_has_color_glyphs (const PangoFont *font)
-{
- cairo_scaled_font_t *scaled_font;
- gboolean has_color = FALSE;
-
- scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)font);
- if (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_FT)
- {
- FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
- has_color = (FT_HAS_COLOR (ft_face) != 0);
- cairo_ft_scaled_font_unlock_face (scaled_font);
- }
-
- return has_color;
-}
-
static inline void
rgba_to_float (const GdkRGBA *c,
float *f)
float y = offset->y + builder->dy;
/* If the font has color glyphs, we don't need to recolor anything */
- if (!force_color && font_has_color_glyphs (font))
+ if (!force_color && gsk_text_node_has_color_glyphs (node))
{
ops_set_program (builder, &self->blit_program);
}
const graphene_point_t *offset);
GDK_AVAILABLE_IN_ALL
PangoFont * gsk_text_node_peek_font (GskRenderNode *node);
+gboolean gsk_text_node_has_color_glyphs (GskRenderNode *node);
GDK_AVAILABLE_IN_ALL
guint gsk_text_node_get_num_glyphs (GskRenderNode *node);
GDK_AVAILABLE_IN_ALL
#include "gsktransformprivate.h"
#include "gdk/gdktextureprivate.h"
+#include <cairo-ft.h>
static void
rectangle_init_from_graphene (cairo_rectangle_int_t *cairo,
GskRenderNode render_node;
PangoFont *font;
+ gboolean has_color_glyphs;
GdkRGBA color;
graphene_point_t offset;
gsk_text_node_diff,
};
+static gboolean
+font_has_color_glyphs (const PangoFont *font)
+{
+ cairo_scaled_font_t *scaled_font;
+ gboolean has_color = FALSE;
+
+ scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)font);
+ if (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_FT)
+ {
+ FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
+ has_color = (FT_HAS_COLOR (ft_face) != 0);
+ cairo_ft_scaled_font_unlock_face (scaled_font);
+ }
+
+ return has_color;
+}
+
/**
* gsk_text_node_new:
* @font: the #PangoFont containing the glyphs
self = (GskTextNode *) gsk_render_node_new (&GSK_TEXT_NODE_CLASS, sizeof (PangoGlyphInfo) * glyphs->num_glyphs);
self->font = g_object_ref (font);
+ self->has_color_glyphs = font_has_color_glyphs (font);
self->color = *color;
self->offset = *offset;
self->num_glyphs = glyphs->num_glyphs;
return self->font;
}
+gboolean
+gsk_text_node_has_color_glyphs (GskRenderNode *node)
+{
+ GskTextNode *self = (GskTextNode *) node;
+
+ g_return_val_if_fail (GSK_IS_RENDER_NODE_TYPE (node, GSK_TEXT_NODE), FALSE);
+
+ return self->has_color_glyphs;
+}
+
guint
gsk_text_node_get_num_glyphs (GskRenderNode *node)
{
#include "gskvulkanrendererprivate.h"
#include "gskprivate.h"
-#include <cairo-ft.h>
-
#define ORTHO_NEAR_PLANE -10000
#define ORTHO_FAR_PLANE 10000
g_slice_free (GskVulkanRenderPass, self);
}
-static gboolean
-font_has_color_glyphs (const PangoFont *font)
-{
- cairo_scaled_font_t *scaled_font;
- gboolean has_color = FALSE;
-
- scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)font);
- if (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_FT)
- {
- FT_Face ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
- has_color = (FT_HAS_COLOR (ft_face) != 0);
- cairo_ft_scaled_font_unlock_face (scaled_font);
- }
-
- return has_color;
-}
-
#define FALLBACK(...) G_STMT_START { \
GSK_RENDERER_NOTE (gsk_vulkan_render_get_renderer (render), FALLBACK, g_message (__VA_ARGS__)); \
goto fallback; \
const PangoFont *font = gsk_text_node_peek_font (node);
const PangoGlyphInfo *glyphs = gsk_text_node_peek_glyphs (node);
guint num_glyphs = gsk_text_node_get_num_glyphs (node);
+ gboolean has_color_glyphs = gsk_text_node_has_color_glyphs (node);
int i;
guint count;
guint texture_index;
gint x_position;
GskVulkanRenderer *renderer = GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render));
- if (font_has_color_glyphs (font))
+ if (has_color_glyphs)
{
if (gsk_vulkan_clip_contains_rect (&constants->clip, &node->bounds))
pipeline_type = GSK_VULKAN_PIPELINE_COLOR_TEXT;