freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] apodtele-master-patch-33657 dacbb5543: [type1/MM] Round desi


From: Werner Lemberg
Subject: [freetype2] apodtele-master-patch-33657 dacbb5543: [type1/MM] Round design coordinates.
Date: Fri, 10 Feb 2023 08:27:33 -0500 (EST)

branch: apodtele-master-patch-33657
commit dacbb55433079fb3539163862958a6b9466a0661
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    [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.
---
 include/freetype/ftmm.h | 10 +++++-----
 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] );



reply via email to

[Prev in Thread] Current Thread [Next in Thread]