diff -ru freetype-2.1.4/include/freetype/freetype.h freetype2/include/freetype/freetype.h --- freetype-2.1.4/include/freetype/freetype.h 2003-01-16 00:43:17.000000000 +0100 +++ freetype2/include/freetype/freetype.h 2003-07-01 05:53:32.000000000 +0200 @@ -196,6 +196,9 @@ FT_Pos vertBearingY; /* top side bearing in vertical layouts */ FT_Pos vertAdvance; /* advance height for vertical layout */ + FT_Pos kern_left_err; /* error due to rounding left boundary */ + FT_Pos kern_right_err; /* error due to rounding right boundary */ + } FT_Glyph_Metrics; diff -ru freetype-2.1.4/src/autohint/ahhint.c freetype2/src/autohint/ahhint.c --- freetype-2.1.4/src/autohint/ahhint.c 2003-03-20 21:58:56.000000000 +0100 +++ freetype2/src/autohint/ahhint.c 2003-07-01 06:04:44.000000000 +0200 @@ -1414,7 +1414,7 @@ /* we now need to hint the metrics according to the change in */ /* width/positioning that occured during the hinting process */ { - FT_Pos old_advance, old_rsb, old_lsb, new_lsb; + FT_Pos old_advance, old_rsb, old_lsb, new_lsb, pp1x_uh, pp2x_uh; AH_Edge edge1 = outline->vert_edges; /* leftmost edge */ AH_Edge edge2 = edge1 + outline->num_vedges - 1; /* rightmost edge */ @@ -1425,9 +1425,15 @@ old_lsb = edge1->opos; new_lsb = edge1->pos; + pp1x_uh = new_lsb - old_lsb; + pp2x_uh = edge2->pos + old_rsb; + hinter->pp1.x = ( ( new_lsb - old_lsb ) + 32 ) & -64; hinter->pp2.x = ( ( edge2->pos + old_rsb ) + 32 ) & -64; + slot->metrics.kern_left_err = hinter->pp1.x - pp1x_uh; + slot->metrics.kern_right_err = hinter->pp2.x - pp2x_uh; + #if 0 /* try to fix certain bad advance computations */ if ( hinter->pp2.x + hinter->pp1.x == edge2->pos && old_rsb > 4 )