mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-14 22:00:22 +01:00
Implement has_color_glyphs for freetype
This information is available from the FT_Face using the FT_HAS_COLOR macro. We cache the value in the unscaled_font object as soon as we have an FT_Face.
This commit is contained in:
parent
6622845653
commit
6a8a25cc47
1 changed files with 27 additions and 1 deletions
|
|
@ -169,6 +169,9 @@ struct _cairo_ft_unscaled_font {
|
|||
cairo_matrix_t current_shape;
|
||||
FT_Matrix Current_Shape;
|
||||
|
||||
unsigned int have_color_set : 1;
|
||||
unsigned int have_color : 1; /* true if the font contains color glyphs */
|
||||
|
||||
cairo_mutex_t mutex;
|
||||
int lock_count;
|
||||
|
||||
|
|
@ -426,6 +429,9 @@ _cairo_ft_unscaled_font_init (cairo_ft_unscaled_font_t *unscaled,
|
|||
if (from_face) {
|
||||
unscaled->from_face = TRUE;
|
||||
_cairo_ft_unscaled_font_init_key (unscaled, TRUE, NULL, 0, face);
|
||||
|
||||
unscaled->have_color = FT_HAS_COLOR (face) != 0;
|
||||
unscaled->have_color_set = TRUE;
|
||||
} else {
|
||||
char *filename_copy;
|
||||
|
||||
|
|
@ -437,6 +443,8 @@ _cairo_ft_unscaled_font_init (cairo_ft_unscaled_font_t *unscaled,
|
|||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
_cairo_ft_unscaled_font_init_key (unscaled, FALSE, filename_copy, id, NULL);
|
||||
|
||||
unscaled->have_color_set = FALSE;
|
||||
}
|
||||
|
||||
unscaled->have_scale = FALSE;
|
||||
|
|
@ -704,6 +712,9 @@ _cairo_ft_unscaled_font_lock_face (cairo_ft_unscaled_font_t *unscaled)
|
|||
|
||||
unscaled->face = face;
|
||||
|
||||
unscaled->have_color = FT_HAS_COLOR (face) != 0;
|
||||
unscaled->have_color_set = TRUE;
|
||||
|
||||
font_map->num_open_faces++;
|
||||
|
||||
return face;
|
||||
|
|
@ -2826,6 +2837,20 @@ _cairo_ft_load_type1_data (void *abstract_font,
|
|||
return status;
|
||||
}
|
||||
|
||||
static cairo_bool_t
|
||||
_cairo_ft_has_color_glyphs (void *scaled)
|
||||
{
|
||||
cairo_ft_unscaled_font_t *unscaled = ((cairo_ft_scaled_font_t *)scaled)->unscaled;
|
||||
|
||||
if (!unscaled->have_color_set) {
|
||||
FT_Face face;
|
||||
face = _cairo_ft_unscaled_font_lock_face (unscaled);
|
||||
_cairo_ft_unscaled_font_unlock_face (unscaled);
|
||||
}
|
||||
|
||||
return unscaled->have_color;
|
||||
}
|
||||
|
||||
static const cairo_scaled_font_backend_t _cairo_ft_scaled_font_backend = {
|
||||
CAIRO_FONT_TYPE_FT,
|
||||
_cairo_ft_scaled_font_fini,
|
||||
|
|
@ -2836,7 +2861,8 @@ static const cairo_scaled_font_backend_t _cairo_ft_scaled_font_backend = {
|
|||
_cairo_ft_index_to_ucs4,
|
||||
_cairo_ft_is_synthetic,
|
||||
_cairo_index_to_glyph_name,
|
||||
_cairo_ft_load_type1_data
|
||||
_cairo_ft_load_type1_data,
|
||||
_cairo_ft_has_color_glyphs
|
||||
};
|
||||
|
||||
/* #cairo_ft_font_face_t */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue