* src/truetype/ttgload.c (load_truetype_glyph): Move initialization

of the graphics state for subglyphs to...
(TT_Hint_Glyph): This function.
Hinting instructions for a composite glyph apparently refer to the
just hinted subglyphs, not the unhinted, unscaled outline.  This
seems to fix Savannah bugs #20973 and (at least partially) #23310.
This commit is contained in:
Werner Lemberg 2008-05-25 12:43:57 +00:00
parent c938131856
commit ffa496574a
2 changed files with 25 additions and 13 deletions

View File

@ -3,6 +3,13 @@
* src/raster/ftraster.c (fc_black_render): Return 0 when we are
trying to render into a zero-width/height bitmap, not an error code.
* src/truetype/ttgload.c (load_truetype_glyph): Move initialization
of the graphics state for subglyphs to...
(TT_Hint_Glyph): This function.
Hinting instructions for a composite glyph apparently refer to the
just hinted subglyphs, not the unhinted, unscaled outline. This
seems to fix Savannah bugs #20973 and (at least partially) #23310.
2008-05-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* src/base/ftmac.c (FT_New_Face_From_Suitcase): Check if valid

View File

@ -643,6 +643,24 @@
/* save original point position in org */
if ( n_ins > 0 )
FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points );
/* Reset graphics state. */
loader->exec->GS = ((TT_Size)loader->size)->GS;
/* XXX: UNDOCUMENTED! Hinting instructions of a composite glyph */
/* completely refer to the (already) hinted subglyphs. */
if ( is_composite )
{
loader->exec->metrics.x_scale = 1 << 16;
loader->exec->metrics.y_scale = 1 << 16;
FT_ARRAY_COPY( zone->orus, zone->cur, zone->n_points );
}
else
{
loader->exec->metrics.x_scale = loader->size->metrics.x_scale;
loader->exec->metrics.y_scale = loader->size->metrics.y_scale;
}
#endif
/* round pp2 and pp4 */
@ -1407,13 +1425,6 @@
FT_Stream old_stream = loader->stream;
#ifdef TT_USE_BYTECODE_INTERPRETER
TT_GraphicsState saved_GS;
if ( loader->exec )
saved_GS = loader->exec->GS;
#endif
FT_GlyphLoader_Add( gloader );
@ -1423,12 +1434,6 @@
FT_Vector pp[4];
#ifdef TT_USE_BYTECODE_INTERPRETER
/* reinitialize graphics state */
if ( loader->exec )
loader->exec->GS = saved_GS;
#endif
/* Each time we call load_truetype_glyph in this loop, the */
/* value of `gloader.base.subglyphs' can change due to table */
/* reallocations. We thus need to recompute the subglyph */