diff options
author | Alexei Podtelezhnikov <apodtele@gmail.com> | 2023-02-10 08:24:33 -0500 |
---|---|---|
committer | Alexei Podtelezhnikov <apodtele@gmail.com> | 2023-02-10 08:24:33 -0500 |
commit | dacbb55433079fb3539163862958a6b9466a0661 (patch) | |
tree | 717a46027a6c0b29ce412a4c210feead6813b5c2 | |
parent | 23e60caeef4027fdc9d1d40efbb47318a0a7d6f3 (diff) | |
download | freetype2-dacbb55433079fb3539163862958a6b9466a0661.tar.gz |
[type1/MM] Round design coordinates.
The design coordinates for MM fonts were not rounded. For example,
`FT_Get_Var_Design_Coordinates` returned values with fractional part.
* src/type1/t1load.c (mm_axis_unmap): Refactor with rounding.
* include/freetype/ftmm.h (FT_Var_Axis, FT_Set_Var_Design_Coordinates,
FT_Get_Var_Design_Coordinates): Reword documentation.
-rw-r--r-- | include/freetype/ftmm.h | 10 | ||||
-rw-r--r-- | src/type1/t1load.c | 11 |
2 files changed, 11 insertions, 10 deletions
diff --git a/include/freetype/ftmm.h b/include/freetype/ftmm.h index e381ef3d3..3eabdd5f2 100644 --- a/include/freetype/ftmm.h +++ b/include/freetype/ftmm.h @@ -153,7 +153,7 @@ FT_BEGIN_HEADER * @note: * The fields `minimum`, `def`, and `maximum` are 16.16 fractional values * for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the - * values are integers. + * values are whole numbers (i.e., the fractional part is zero). */ typedef struct FT_Var_Axis_ { @@ -399,8 +399,8 @@ FT_BEGIN_HEADER * * @note: * The design coordinates are 16.16 fractional values for TrueType GX and - * OpenType variation fonts. For Adobe MM fonts, the values are - * integers. + * OpenType variation fonts. For Adobe MM fonts, the values are supposed + * to be whole numbers (i.e., the fractional part is zero). * * [Since 2.8.1] To reset all axes to the default values, call the * function with `num_coords` set to zero and `coords` set to `NULL`. @@ -446,8 +446,8 @@ FT_BEGIN_HEADER * * @note: * The design coordinates are 16.16 fractional values for TrueType GX and - * OpenType variation fonts. For Adobe MM fonts, the values are - * integers. + * OpenType variation fonts. For Adobe MM fonts, the values are whole + * numbers (i.e., the fractional part is zero). * * @since: * 2.7.1 diff --git a/src/type1/t1load.c b/src/type1/t1load.c index 5a1afd8d9..3ec9ffa16 100644 --- a/src/type1/t1load.c +++ b/src/type1/t1load.c @@ -225,11 +225,12 @@ for ( j = 1; j < axismap->num_points; j++ ) { if ( ncv <= axismap->blend_points[j] ) - return INT_TO_FIXED( axismap->design_points[j - 1] ) + - ( axismap->design_points[j] - axismap->design_points[j - 1] ) * - FT_DivFix( ncv - axismap->blend_points[j - 1], - axismap->blend_points[j] - - axismap->blend_points[j - 1] ); + return INT_TO_FIXED( axismap->design_points[j - 1] + + FT_MulDiv( ncv - axismap->blend_points[j - 1], + axismap->design_points[j] - + axismap->design_points[j - 1], + axismap->blend_points[j] - + axismap->blend_points[j - 1] ) ); } return INT_TO_FIXED( axismap->design_points[axismap->num_points - 1] ); |