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