And here's the patch to the accompanying email.

    Werner
--- Begin Message ---
Hello,

Found few possible minor bugs in PFR loading and fontmetrics calculations. Not 
sure if my previous post about this got to mailing list, but here's patch I've 
come up with.


Index: ./src/pfr/pfrobjs.c
===================================================================
RCS file: /cvs/freetype/freetype2/src/pfr/pfrobjs.c,v
retrieving revision 1.25
diff -u -r1.25 pfrobjs.c
--- pfrobjs.c   2004/05/08 07:00:23     1.25
+++ pfrobjs.c   2004/08/04 09:07:25
@@ -163,10 +163,10 @@
 
       pfrface->bbox         = phy_font->bbox;
       pfrface->units_per_EM = (FT_UShort)phy_font->outline_resolution;
-      pfrface->ascender     = (FT_Short) phy_font->bbox.yMax;
-      pfrface->descender    = (FT_Short) phy_font->bbox.yMin;
+      pfrface->ascender     = (FT_Short) phy_font->ascent;
+      pfrface->descender    = (FT_Short) phy_font->descent;
       pfrface->height       = (FT_Short)(
-        ( ( pfrface->ascender - pfrface->descender ) * 12 ) / 10 );
+        ( phy_font->ascent - phy_font->descent + phy_font->leading ) );
 
       if ( phy_font->num_strikes > 0 )
       {
Index: ./src/pfr/pfrload.c
===================================================================
RCS file: /cvs/freetype/freetype2/src/pfr/pfrload.c,v
retrieving revision 1.17
diff -u -r1.17 pfrload.c
--- pfrload.c   2003/12/24 01:10:45     1.17
+++ pfrload.c   2004/08/04 09:07:25
@@ -883,6 +883,9 @@
     phy_font->bbox.yMax          = PFR_NEXT_SHORT( p );
     phy_font->flags      = flags = PFR_NEXT_BYTE( p );
 
+    phy_font->ascent             = phy_font->bbox.yMax;
+    phy_font->descent            = phy_font->bbox.yMin;
+
     /* get the standard advance for non-proprotional fonts */
     if ( !(flags & PFR_PHY_PROPORTIONAL) )
     {
@@ -943,14 +946,25 @@
           break;
 
         case 2:
+           /* http://www.mhp.org/documents//mhp_Ts101812.V1.3.1.pdf.zip
+            * (7.4 Downloadable fonts)
+            * at least ascent and descent seem to be in metrics resolution ->
+            * convert them to outline resolution
+            */
           if ( q + 32 > q2 )
             break;
 
           q += 10;
-          phy_font->ascent  = PFR_NEXT_SHORT( q );
-          phy_font->descent = PFR_NEXT_SHORT( q );
-          phy_font->leading = PFR_NEXT_SHORT( q );
-          q += 16;
+          phy_font->ascent  =  ( PFR_NEXT_SHORT( q )
+                                 * phy_font->outline_resolution
+                                 / phy_font->metrics_resolution );
+          phy_font->descent = -( PFR_NEXT_SHORT( q )
+                                 * phy_font->outline_resolution
+                                 / phy_font->metrics_resolution );
+          q += 4;
+          phy_font->leading =  ( PFR_NEXT_SHORT( q )
+                                 * phy_font->outline_resolution
+                                 / phy_font->metrics_resolution );
           break;
 
         case 3:


--
harri

_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://www.freetype.org/mailman/listinfo/devel

--- End Message ---
_______________________________________________
Freetype-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to