[sfnt] 'COLR' v1 PaintSkew related spec updates

* src/sfnt/ttcolr.c (read_paint): Implement spec changes around
PaintSkew, PaintSkewAroundCenter.  Update parsing to read shorter
values as changed in the spec.
* include/freetype/ftcolor.h (FT_PaintSkew): Update documentation.
This commit is contained in:
Dominik Röttsches 2021-07-26 17:32:22 +03:00 committed by Werner Lemberg
parent 48df0fa652
commit 66189807b8
2 changed files with 22 additions and 7 deletions

View File

@ -1219,10 +1219,12 @@ FT_BEGIN_HEADER
* skewed.
*
* x_skew_angle ::
* The skewing angle in x~direction.
* The skewing angle in x~direction in degrees divided by 180.0
* (as in the spec). Multiply by 180.0f to receive degrees.
*
* y_skew_angle ::
* The skewing angle in y~direction.
* The skewing angle in y~direction in degrees divided by 180.0
* (as in the spec). Multiply by 180.0f to receive degrees.
*
* center_x ::
* The x~coordinate of the pivot point of the skew (in font units).

View File

@ -649,16 +649,29 @@
return 1;
}
else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW )
else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW ||
(FT_PaintFormat_Internal)apaint->format ==
FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
{
apaint->u.skew.paint.p = child_table_p;
apaint->u.skew.paint.insert_root_transform = 0;
apaint->u.skew.x_skew_angle = FT_NEXT_LONG( p );
apaint->u.skew.y_skew_angle = FT_NEXT_LONG( p );
apaint->u.skew.x_skew_angle = FT_NEXT_SHORT( p ) << 2;
apaint->u.skew.y_skew_angle = FT_NEXT_SHORT( p ) << 2;
apaint->u.skew.center_x = FT_NEXT_LONG( p );
apaint->u.skew.center_y = FT_NEXT_LONG( p );
if ( (FT_PaintFormat_Internal)apaint->format ==
FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
{
apaint->u.skew.center_x = FT_NEXT_SHORT( p ) << 16;
apaint->u.skew.center_y = FT_NEXT_SHORT( p ) << 16;
}
else
{
apaint->u.skew.center_x = 0;
apaint->u.skew.center_y = 0;
}
apaint->format = FT_COLR_PAINTFORMAT_SKEW;
return 1;
}