freetype-devel
[Top][All Lists]
Advanced

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

[ft-devel] Fw: [Devel] [Devel][Bug?] PFR fontmetrics; ascender, descende


From: Werner LEMBERG
Subject: [ft-devel] Fw: [Devel] [Devel][Bug?] PFR fontmetrics; ascender, descender, height fix
Date: Wed, 30 May 2007 07:35:17 +0200 (CEST)

And here's the patch to the accompanying email.


    Werner
--- Begin Message --- Subject: [Devel] [Devel][Bug?] PFR fontmetrics; ascender, descender, height fix Date: Wed, 4 Aug 2004 12:27:50 +0300
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
address@hidden
http://www.freetype.org/mailman/listinfo/devel

--- End Message ---

reply via email to

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