From c49f69cb8c9d9b38179f760bf0cbbe4c78a3e296 Mon Sep 17 00:00:00 2001 From: David Turner Date: Thu, 20 Jul 2000 03:44:50 +0000 Subject: [PATCH] some welcome fixes related to the auto-hinter: - removed a stupid memory leak - fixed the weird metrics hinting (the horizontal edges were used, instead of the vertical one, to compute the metrics adjustments, silly, silly, silly). there is still some bugs that I'm looking at though, but we're very near the release.. --- include/freetype/config/ftmodule.h | 1 + src/autohint/ahhint.c | 6 ++++-- src/base/ftobjs.c | 5 ++++- src/type1z/z1gload.c | 6 +++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h index 57164c8ac..88c72e282 100644 --- a/include/freetype/config/ftmodule.h +++ b/include/freetype/config/ftmodule.h @@ -1,3 +1,4 @@ +FT_USE_MODULE(autohint_module_class) FT_USE_MODULE(cff_driver_class) FT_USE_MODULE(t1cid_driver_class) FT_USE_MODULE(psnames_module_class) diff --git a/src/autohint/ahhint.c b/src/autohint/ahhint.c index 10621a4ea..1bc4faafe 100644 --- a/src/autohint/ahhint.c +++ b/src/autohint/ahhint.c @@ -836,6 +836,8 @@ scaled->blue_refs [n] = (FT_MulFix(design->blue_refs[n],y_scale)+32) & -64; scaled->blue_shoots[n] = scaled->blue_refs[n] + delta2; } + globals->x_scale = x_scale; + globals->y_scale = y_scale; } @@ -1022,8 +1024,8 @@ FT_Pos old_width, new_width; FT_Pos old_advance, new_advance; FT_Pos old_lsb, new_lsb; - AH_Edge* edge1 = hinter->glyph->horz_edges; /* left-most edge */ - AH_Edge* edge2 = edge1 + hinter->glyph->num_hedges-1; /* right-mode edge */ + AH_Edge* edge1 = outline->vert_edges; /* left-most edge */ + AH_Edge* edge2 = edge1 + outline->num_vedges-1; /* right-mode edge */ old_width = edge2->opos - edge1->opos; new_width = edge2->pos - edge1->pos; diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 84d2ca022..69ca5a52a 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -1120,7 +1120,10 @@ { FT_Driver_Class* clazz = driver->clazz; - + /* discard auto-hinting data */ + if ( face->autohint.finalizer ) + face->autohint.finalizer( face->autohint.data ); + /* Discard glyph slots for this face */ /* Beware! FT_Done_GlyphSlot() changes the field `face->slot' */ while ( face->glyph ) diff --git a/src/type1z/z1gload.c b/src/type1z/z1gload.c index 7caa2e3d6..0b25d2ecc 100644 --- a/src/type1z/z1gload.c +++ b/src/type1z/z1gload.c @@ -1390,6 +1390,9 @@ /* bearing the yMax */ if ( !error ) { + glyph->root.outline.flags &= ft_outline_owner; + glyph->root.outline.flags |= ft_outline_reverse_fill; + /* for composite glyphs, return only left side bearing and */ /* advance width */ if ( load_flags & FT_LOAD_NO_RECURSE ) @@ -1413,12 +1416,9 @@ glyph->root.format = ft_glyph_format_outline; - glyph->root.outline.flags &= ft_outline_owner; if ( size && size->root.metrics.y_ppem < 24 ) glyph->root.outline.flags |= ft_outline_high_precision; - glyph->root.outline.flags |= ft_outline_reverse_fill; - #if 0 glyph->root.outline.second_pass = TRUE; glyph->root.outline.high_precision = size->root.metrics.y_ppem < 24;