diff --git a/include/freetype/ftcolor.h b/include/freetype/ftcolor.h index 8f2507c6a..43e463e98 100644 --- a/include/freetype/ftcolor.h +++ b/include/freetype/ftcolor.h @@ -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). diff --git a/src/sfnt/ttcolr.c b/src/sfnt/ttcolr.c index ca8a7a2da..e46ca48da 100644 --- a/src/sfnt/ttcolr.c +++ b/src/sfnt/ttcolr.c @@ -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; }