freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] svg_metrics 34c62a094: * src/truetype/ttgload.c (TT_Load_Gly


From: Werner Lemberg
Subject: [freetype2] svg_metrics 34c62a094: * src/truetype/ttgload.c (TT_Load_Glyph): Simplify SVG metrics scaling.
Date: Wed, 19 Oct 2022 14:23:13 -0400 (EDT)

branch: svg_metrics
commit 34c62a0943e9240b310eb06e34a2744451ab9c33
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    * src/truetype/ttgload.c (TT_Load_Glyph): Simplify SVG metrics scaling.
    
    Use pre-computed scale factors from the size metrics.
---
 src/truetype/ttgload.c | 25 ++++++++++---------------
 1 file changed, 10 insertions(+), 15 deletions(-)

diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index 68698df14..7a25465c0 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -2873,11 +2873,6 @@
     {
       SFNT_Service  sfnt;
 
-      FT_Short   leftBearing;
-      FT_Short   topBearing;
-      FT_UShort  advanceX;
-      FT_UShort  advanceY;
-
 
       FT_TRACE3(( "Trying to load SVG glyph\n" ));
       sfnt = (SFNT_Service)( (TT_Face)glyph->face )->sfnt;
@@ -2885,7 +2880,14 @@
       error = sfnt->load_svg_doc( glyph, glyph_index );
       if ( !error )
       {
-        TT_Face  face = (TT_Face)glyph->face;
+        TT_Face   face = (TT_Face)glyph->face;
+        FT_Fixed  x_scale = size->root.metrics.x_scale;
+        FT_Fixed  y_scale = size->root.metrics.y_scale;
+
+        FT_Short   leftBearing;
+        FT_Short   topBearing;
+        FT_UShort  advanceX;
+        FT_UShort  advanceY;
 
 
         FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
@@ -2906,15 +2908,8 @@
         glyph->linearHoriAdvance = advanceX;
         glyph->linearVertAdvance = advanceY;
 
-        advanceX = (FT_UShort)FT_MulDiv( advanceX,
-                                         glyph->face->size->metrics.x_ppem,
-                                         glyph->face->units_per_EM );
-        advanceY = (FT_UShort)FT_MulDiv( advanceY,
-                                         glyph->face->size->metrics.y_ppem,
-                                         glyph->face->units_per_EM );
-
-        glyph->metrics.horiAdvance = advanceX << 6;
-        glyph->metrics.vertAdvance = advanceY << 6;
+        glyph->metrics.horiAdvance = FT_MulFix( advanceX, x_scale );
+        glyph->metrics.vertAdvance = FT_MulFix( advanceY, y_scale );
 
         return error;
       }



reply via email to

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