diff --git a/ChangeLog b/ChangeLog index d523dfbc6..140361487 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,8 +6,14 @@ 2006-09-30 David Turner - * include/freetype/internal/ftobjs.h, src/base/ftobjs.c, - src/truetype/ttobjs.c: fixes related to the unpatented hinter + * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): + s/unpatented_hinting/ignore_unpatented_hinter/. + Update all callers. + + * src/base/ftobjs.c (FT_Load_Glyph): Refine the algorithm whether + auto-hinting shall be used or not. + + * src/truetype/ttobjs.c (tt_face_init): Ditto. 2006-09-30 Werner Lemberg diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h index e13ff274f..f57f0ac25 100644 --- a/include/freetype/internal/ftobjs.h +++ b/include/freetype/internal/ftobjs.h @@ -212,10 +212,10 @@ FT_BEGIN_HEADER /* @FT_CONFIG_OPTION_INCREMENTAL is defined. */ /* */ /* ignore_unpatented_hinter :: */ - /* This boolean flag instructs the glyph loader to ignore */ - /* the native font hinter, if one is found. This is exclusively */ - /* used in the case when the unpatented hinter is compiled within */ - /* the library. */ + /* This boolean flag instructs the glyph loader to ignore the */ + /* native font hinter, if one is found. This is exclusively used */ + /* in the case when the unpatented hinter is compiled within the */ + /* library. */ /* */ typedef struct FT_Face_InternalRec_ { diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 958e4b20f..0da8768c5 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -573,44 +573,43 @@ load_flags &= ~FT_LOAD_RENDER; } - /* determine wether we need to auto-hint or not - * the general rules are: - * - * - only auto-hint if we have a hinter module, a - * scalable font format dealing with outlines, - * no transforms except simple slants - * - * - then, autohint if FT_LOAD_FORCE_AUTOHINT is set - * or if we don't have a native font hinter - * - * - otherwise, autohint for LIGHT hinting mode - * - * - except if the font requires the unpatented - * bytecode interpreter to load properly - */ + /* + * Determine whether we need to auto-hint or not. + * The general rules are: + * + * - Do only auto-hinting if we have a hinter module, + * a scalable font format dealing with outlines, + * and no transforms except simple slants. + * + * - Then, autohint if FT_LOAD_FORCE_AUTOHINT is set + * or if we don't have a native font hinter. + * + * - Otherwise, auto-hint for LIGHT hinting mode. + * + * - Exception: The font requires the unpatented + * bytecode interpreter to load properly. + */ autohint = 0; - if ( hinter && - (load_flags & FT_LOAD_NO_HINTING) == 0 && - (load_flags & FT_LOAD_NO_AUTOHINT) == 0 && - FT_DRIVER_IS_SCALABLE( driver ) && - FT_DRIVER_USES_OUTLINES( driver ) && - face->internal->transform_matrix.yy > 0 && - face->internal->transform_matrix.yx == 0 ) + if ( hinter && + ( load_flags & FT_LOAD_NO_HINTING ) == 0 && + ( load_flags & FT_LOAD_NO_AUTOHINT ) == 0 && + FT_DRIVER_IS_SCALABLE( driver ) && + FT_DRIVER_USES_OUTLINES( driver ) && + face->internal->transform_matrix.yy > 0 && + face->internal->transform_matrix.yx == 0 ) { - if ( (load_flags & FT_LOAD_FORCE_AUTOHINT) != 0 || - !FT_DRIVER_HAS_HINTER( driver ) ) + if ( ( load_flags & FT_LOAD_FORCE_AUTOHINT ) != 0 || + !FT_DRIVER_HAS_HINTER( driver ) ) autohint = 1; - else { - FT_Render_Mode mode = FT_LOAD_TARGET_MODE(load_flags); + FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags ); + if ( mode == FT_RENDER_MODE_LIGHT || face->internal->ignore_unpatented_hinter ) - { autohint = 1; - } } } diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index 0226029ca..365d9c877 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -246,16 +246,17 @@ } -#if defined(TT_CONFIG_OPTION_UNPATENTED_HINTING) && \ - !defined(TT_CONFIG_OPTION_BYTECODE_INTERPRETER) +#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING ) && \ + !defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER ) { FT_Bool unpatented_hinting; int i; + /* Determine whether unpatented hinting is to be used for this face. */ unpatented_hinting = FT_BOOL - ( library->debug_hooks[ FT_DEBUG_HOOK_UNPATENTED_HINTING ] != NULL ); + ( library->debug_hooks[FT_DEBUG_HOOK_UNPATENTED_HINTING] != NULL ); for ( i = 0; i < num_params && !face->unpatented_hinting; i++ ) if ( params[i].tag == FT_PARAM_TAG_UNPATENTED_HINTING ) @@ -293,7 +294,8 @@ ttface->internal->ignore_unpatented_hinter = !unpatented_hinting; } -#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING */ +#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING && + !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ /* initialize standard glyph loading routines */ TT_Init_Glyph_Loading( face );