Improve auto-hinter handling of bitmap fonts (#54681).
For bitmap fonts, `FT_Load_Glyph' should either return an error or not set the format to `FT_GLYPH_FORMAT_OUTLINE'. However, in this case `FT_Load_Glyph' calls into the auto-hinter which calls back into `FT_Load_Glyph' with `FT_LOAD_NO_SCALE' in the flags, which marks the glyph as `FT_GLYPH_FORMAT_OUTLINE' with an empty path (even though it doesn't have any path). It appears that the auto-hinter should not be called when the face doesn't have outlines. The current test for using the auto-hinter in `FT_Load_Glyph' checks if the driver supports scalable outlines, but not if the face supports scalable outlines. * src/base/ftobjs.c (FT_Load_Glyph): Directly check whether we have scalable outlines.
This commit is contained in:
parent
c168cc3b1b
commit
335528e11e
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
||||||
|
2018-09-21 Ben Wagner <bungeman@google.com>
|
||||||
|
|
||||||
|
Improve auto-hinter handling of bitmap fonts (#54681).
|
||||||
|
|
||||||
|
For bitmap fonts, `FT_Load_Glyph' should either return an error or
|
||||||
|
not set the format to `FT_GLYPH_FORMAT_OUTLINE'. However, in this
|
||||||
|
case `FT_Load_Glyph' calls into the auto-hinter which calls back
|
||||||
|
into `FT_Load_Glyph' with `FT_LOAD_NO_SCALE' in the flags, which
|
||||||
|
marks the glyph as `FT_GLYPH_FORMAT_OUTLINE' with an empty path
|
||||||
|
(even though it doesn't have any path). It appears that the
|
||||||
|
auto-hinter should not be called when the face doesn't have
|
||||||
|
outlines. The current test for using the auto-hinter in
|
||||||
|
`FT_Load_Glyph' checks whether the driver supports scalable
|
||||||
|
outlines, but not if the face supports scalable outlines.
|
||||||
|
|
||||||
|
* src/base/ftobjs.c (FT_Load_Glyph): Directly check whether we have
|
||||||
|
scalable outlines.
|
||||||
|
|
||||||
2018-09-21 Werner Lemberg <wl@gnu.org>
|
2018-09-21 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
[raster] Fix disappearing vertical lines (#54589).
|
[raster] Fix disappearing vertical lines (#54589).
|
||||||
|
|
|
@ -846,7 +846,7 @@
|
||||||
* - Do only auto-hinting if we have
|
* - Do only auto-hinting if we have
|
||||||
*
|
*
|
||||||
* - a hinter module,
|
* - a hinter module,
|
||||||
* - a scalable font format dealing with outlines,
|
* - a scalable font,
|
||||||
* - not a tricky font, and
|
* - not a tricky font, and
|
||||||
* - no transforms except simple slants and/or rotations by
|
* - no transforms except simple slants and/or rotations by
|
||||||
* integer multiples of 90 degrees.
|
* integer multiples of 90 degrees.
|
||||||
|
@ -864,8 +864,7 @@
|
||||||
if ( hinter &&
|
if ( hinter &&
|
||||||
!( load_flags & FT_LOAD_NO_HINTING ) &&
|
!( load_flags & FT_LOAD_NO_HINTING ) &&
|
||||||
!( load_flags & FT_LOAD_NO_AUTOHINT ) &&
|
!( load_flags & FT_LOAD_NO_AUTOHINT ) &&
|
||||||
FT_DRIVER_IS_SCALABLE( driver ) &&
|
FT_IS_SCALABLE( face ) &&
|
||||||
FT_DRIVER_USES_OUTLINES( driver ) &&
|
|
||||||
!FT_IS_TRICKY( face ) &&
|
!FT_IS_TRICKY( face ) &&
|
||||||
( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) ||
|
( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) ||
|
||||||
( face->internal->transform_matrix.yx == 0 &&
|
( face->internal->transform_matrix.yx == 0 &&
|
||||||
|
|
Loading…
Reference in New Issue