From dcf5e6e5c5c7f26190f0aff2a0d909cd2eb205b2 Mon Sep 17 00:00:00 2001 From: David Turner Date: Sun, 30 Dec 2001 01:30:11 +0000 Subject: [PATCH] improving the computation of the advance widths of auto-hinted glyphs, in order to produce better letter spacing.. --- ChangeLog | 6 ++++++ src/autohint/ahhint.c | 13 ++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0bfe4fa7a..db2ef9936 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-12-30 David Turner + + * src/autohint/ahhint.c (ah_hinter_load): improving advance width + computation of auto-hinted glyphs. This noticeably improves the + spacing of letters in KDE and Gnome :o) + 2001-12-25 Antoine Leca * builds/dos/detect.mk: Correcting the order for Borland compilers: diff --git a/src/autohint/ahhint.c b/src/autohint/ahhint.c index 82589cf87..3b798b03a 100644 --- a/src/autohint/ahhint.c +++ b/src/autohint/ahhint.c @@ -1111,20 +1111,23 @@ /* we now need to hint the metrics according to the change in */ /* width/positioning that occured during the hinting process */ { - FT_Pos old_advance; - FT_Pos old_lsb, new_lsb; + FT_Pos old_advance, old_rsb, old_lsb, new_lsb; AH_Edge* edge1 = outline->vert_edges; /* leftmost edge */ AH_Edge* edge2 = edge1 + outline->num_vedges - 1; /* rightmost edge */ old_advance = hinter->pp2.x; + old_rsb = old_advance - edge2->opos; old_lsb = edge1->opos; new_lsb = edge1->pos; - hinter->pp1.x = ( ( new_lsb - old_lsb ) + 32 ) & -64; - hinter->pp2.x = ( ( edge2->pos + - ( old_advance - edge2->opos ) ) + 32 ) & -64; + hinter->pp1.x = ( ( new_lsb - old_lsb ) + 32 ) & -64; + hinter->pp2.x = ( ( edge2->pos + old_rsb ) + 32 ) & -64; + + /* try to fix certain bad advance computations */ + if ( hinter->pp2.x + hinter->pp1.x == edge2->pos && old_rsb > 4 ) + hinter->pp2.x += 64; } /* good, we simply add the glyph to our loader's base */