[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:
parent
cdad4db424
commit
be06a9d002
10
ChangeLog
10
ChangeLog
|
@ -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).
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue