Commit 552a956247bb35cc8b7c0fb2371a3f8011a5bb29

David Turner 2007-05-28T15:45:35

optimize CFF glyph loader (avoid apply identity font transform)

diff --git a/ChangeLog b/ChangeLog
index c75f2b6..aaee4f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2007-05-28  David Turner  <david@freetype.org>
 
+	* src/cff/cffgload.c: do not apply the font transform to loaded glyph
+	if it is the identity. this cuts a significant percent of CFF glyph
+	loading time
+
 	* src/autofit/afglobal.c: change default hinting script to
 	CJK, since it works well with a larger array of scripts. thanks to
 	"Rahul Bhalerao" <b.rahul.pm@gmail.com> for pointing this out !
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 4c20a68..d38d683 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -2281,6 +2281,7 @@
     FT_Bool      hinting;
     CFF_Font     cff      = (CFF_Font)face->extra.data;
 
+    FT_Bool      use_font_matrix;
     FT_Matrix    font_matrix;
     FT_Vector    font_offset;
 
@@ -2547,11 +2548,16 @@
         glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL;
 
         /* apply the font matrix */
-        FT_Outline_Transform( &glyph->root.outline, &font_matrix );
+        if ( font_matrix.xx != 0x10000 && font_matrix.yy != 0x10000 &&
+             font_matrix.xy != 0       && font_matrix.yx != 0 )
+        {
+          FT_Outline_Transform( &glyph->root.outline, &font_matrix );
+        }
 
-        FT_Outline_Translate( &glyph->root.outline,
-                              font_offset.x,
-                              font_offset.y );
+        if ( font_offset.x != 0 || font_offset.y != 0 )
+          FT_Outline_Translate( &glyph->root.outline,
+                                font_offset.x,
+                                font_offset.y );
 
         advance.x = metrics->horiAdvance;
         advance.y = 0;