[truetype] Round offsets of glyph components only if hinting is on.

* src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
it.
This commit is contained in:
Werner Lemberg 2018-01-03 19:05:20 +01:00
parent 55d6abea5d
commit 029c9b2391
2 changed files with 29 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2018-01-03 Werner Lemberg <wl@gnu.org>
[truetype] Round offsets of glyph components only if hinting is on.
* src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
it.
2018-01-03 Werner Lemberg <wl@gnu.org>
* src/truetype/ttgxvar.c (ft_var_to_design): Remove dead code.

View File

@ -1206,8 +1206,28 @@
if ( subglyph->flags & ROUND_XY_TO_GRID )
{
x = FT_PIX_ROUND( x );
y = FT_PIX_ROUND( y );
TT_Face face = loader->face;
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
if ( IS_HINTED( loader->load_flags ) )
{
/*
* We round the horizontal offset only if there is hinting along
* the x axis; this corresponds to integer advance width values.
*
* Theoretically, a glyph's bytecode can toggle ClearType's
* `backward compatibility' mode, which would allow modification
* of the advance width. In reality, however, applications
* neither allow nor expect modified advance widths if sub-pixel
* rendering is active.
*
*/
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_35 )
x = FT_PIX_ROUND( x );
y = FT_PIX_ROUND( y );
}
}
}
}