cairo-ft: Pass the palette to the COLRv1 renderer

It an unnecessary complication for use to pass
the palette index, and have the COLRv1 renderer
pull the palette out of the FT_Face, after we
just selected it.
This commit is contained in:
Matthias Clasen 2023-01-19 09:02:10 -05:00
parent 8992e26f07
commit 2e4afeb4bc
3 changed files with 7 additions and 14 deletions

View file

@ -1188,29 +1188,20 @@ draw_colr_glyph (cairo_colr_glyph_render_t *render,
cairo_status_t
_cairo_render_colr_v1_glyph (FT_Face face,
unsigned long glyph,
FT_UShort palette_index,
FT_Color *palette,
int num_palette_entries,
cairo_t *cr)
{
cairo_status_t status = CAIRO_STATUS_SUCCESS;
cairo_colr_glyph_render_t colr_render;
FT_Color *palette = NULL;
FT_Palette_Data palette_data;
#if DEBUG_COLR
printf ("_cairo_render_colr_glyph glyph index: %ld\n", glyph);
#endif
if (FT_Palette_Data_Get (face, &palette_data) == 0 && palette_data.num_palettes > 0) {
if (palette_index >= palette_data.num_palettes)
palette_index = CAIRO_COLOR_PALETTE_DEFAULT;
if (FT_Palette_Select (face, palette_index, &palette) != 0)
palette = NULL;
}
colr_render.face = face;
colr_render.palette = palette;
colr_render.num_palette_entries = palette_data.num_palette_entries;
colr_render.num_palette_entries = num_palette_entries;
colr_render.foreground_color = cairo_pattern_reference (cairo_get_source (cr));
colr_render.level = 0;

View file

@ -2831,7 +2831,8 @@ _cairo_ft_scaled_glyph_init_record_colr_v1_glyph (cairo_ft_scaled_font_t *scaled
if (!_cairo_matrix_is_scale_0 (&scaled_font->base.scale)) {
status = _cairo_render_colr_v1_glyph (face,
_cairo_scaled_glyph_index (scaled_glyph),
scaled_font->base.options.palette_index,
palette,
num_palette_entries,
cr);
if (status == CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED)
status = CAIRO_INT_STATUS_UNSUPPORTED;

View file

@ -81,7 +81,8 @@ _cairo_render_svg_glyph (const char *svg_document,
cairo_private cairo_status_t
_cairo_render_colr_v1_glyph (FT_Face face,
unsigned long glyph,
FT_UShort palette_index,
FT_Color *palette,
int num_palette_entries,
cairo_t *cr);
#endif