optimize CFF glyph loader (avoid apply identity font transform)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
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;