[sfnt] Add 'COLR' v1 API to iterate color stops (#59703).

* src/sfnt/ttcolr.c (tt_face_get_colorline_stops): New function to
return the current `FT_ColorStop` object from `FT_ColorStopIterator`.
Also increment the iterator.

* src/sfnt/ttcolr.h: Updated.
This commit is contained in:
Dominik Röttsches 2020-12-16 17:02:22 +02:00 committed by Werner Lemberg
parent cdad4db424
commit be06a9d002
3 changed files with 53 additions and 0 deletions

View File

@ -1,3 +1,13 @@
2020-12-16 Dominik Röttsches <drott@chromium.org>
[sfnt] Add 'COLR' v1 API to iterate color stops (#59703).
* src/sfnt/ttcolr.c (tt_face_get_colorline_stops): New function to
return the current `FT_ColorStop` object from `FT_ColorStopIterator`.
Also increment the iterator.
* src/sfnt/ttcolr.h: Updated.
2020-12-16 Dominik Röttsches <drott@chromium.org>
[sfnt] Add API to get actual paint from `FT_OpaquePaint` (#59703).

View File

@ -693,6 +693,44 @@
}
FT_LOCAL_DEF ( FT_Bool )
tt_face_get_colorline_stops( TT_Face face,
FT_ColorStop* color_stop,
FT_ColorStopIterator *iterator )
{
Colr* colr = (Colr*)face->colr;
FT_Byte* p;
if ( iterator->current_color_stop >= iterator->num_color_stops )
return 0;
if ( iterator->p +
( ( iterator->num_color_stops - iterator->current_color_stop ) *
COLOR_STOP_SIZE ) >
( (FT_Byte *)colr->table + colr->table_size ) )
return 0;
/* Iterator points at first `ColorStop` of `ColorLine`. */
p = iterator->p;
/* skip VarIdx entries */
color_stop->stop_offset = FT_NEXT_USHORT ( p );
FT_NEXT_ULONG ( p );
color_stop->color.palette_index = FT_NEXT_USHORT ( p );
color_stop->color.alpha = FT_NEXT_USHORT ( p );
FT_NEXT_ULONG ( p );
iterator->p = p;
iterator->current_color_stop++;
return 1;
}
FT_LOCAL_DEF( FT_Bool )
tt_face_get_paint( TT_Face face,
FT_OpaquePaint opaque_paint,

View File

@ -47,6 +47,11 @@ FT_BEGIN_HEADER
FT_UInt base_glyph,
FT_OpaquePaint* paint );
FT_LOCAL( FT_Bool )
tt_face_get_colorline_stops( TT_Face face,
FT_ColorStop* color_stop,
FT_ColorStopIterator* iterator );
FT_LOCAL( FT_Bool )
tt_face_get_paint( TT_Face face,
FT_OpaquePaint opaque_paint,