Fall back to autohinting if a TTF/OTF doesn't contain any bytecode.

This is Savannah patch #7471.

* src/base/ftobjs.c (FT_Load_Glyph): Implement it.
This commit is contained in:
Kevin Kofler 2011-02-19 23:09:26 +01:00 committed by Werner Lemberg
parent 18fffa456e
commit ff8095077c
2 changed files with 18 additions and 7 deletions

View File

@ -1,6 +1,14 @@
2011-02-19 Kevin Kofler <kevin.kofler@chello.at>
Fall back to autohinting if a TTF/OTF doesn't contain any bytecode.
This is Savannah patch #7471.
* src/base/ftobjs.c (FT_Load_Glyph): Implement it.
2011-02-19 John Tytgat <John.Tytgat@esko.com>
[cff] Fix subset prefix removal.
This is Savannah patch #7465.
* src/cff/cffobjs.c (remove_subset_prefix): Update length after
subset prefix removal.

View File

@ -4,8 +4,7 @@
/* */
/* The FreeType private base classes (body). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
/* 2010 by */
/* Copyright 1996-2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -561,6 +560,7 @@
FT_Library library;
FT_Bool autohint = FALSE;
FT_Module hinter;
TT_Face ttface = (TT_Face)face;
if ( !face || !face->size || !face->glyph )
@ -601,7 +601,8 @@
* - Then, auto-hint if FT_LOAD_FORCE_AUTOHINT is set or if we don't
* have a native font hinter.
*
* - Otherwise, auto-hint for LIGHT hinting mode.
* - Otherwise, auto-hint for LIGHT hinting mode or if there isn't
* any hinting bytecode in the TrueType/OpenType font.
*
* - Exception: The font is `tricky' and requires the native hinter to
* load properly.
@ -626,8 +627,10 @@
FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags );
if ( mode == FT_RENDER_MODE_LIGHT ||
face->internal->ignore_unpatented_hinter )
if ( mode == FT_RENDER_MODE_LIGHT ||
face->internal->ignore_unpatented_hinter ||
( FT_IS_SFNT( face ) &&
ttface->max_profile.maxSizeOfInstructions == 0 ) )
autohint = TRUE;
}
}
@ -1869,7 +1872,7 @@
" is already checked and"
" no font is found\n", i ));
continue;
}
}
if ( errors[i] )
{
@ -4151,7 +4154,7 @@
FT_Renderer renderer = FT_RENDERER( module );
if ( renderer->clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
if ( renderer->clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
renderer->raster )
renderer->clazz->raster_class->raster_done( renderer->raster );
}