[raster] Handle drop-outs at glyph borders according to Microsoft.

If a drop-out rule would switch on a pixel outside of the glyph's
bounding box, use the right (or top) pixel instead.  This is an
undocumented feature, but some fonts like `Helvetica Neue LT Com 65
Medium' heavily rely on it.

Thanks to Greg Hitchcock who explained this behaviour.

* src/raster/ftraster.c (Vertical_Sweep_Drop,
Horizontal_Sweep_Drop): Implement it.
This commit is contained in:
Werner Lemberg 2011-01-13 12:22:55 +01:00
parent 3757b1e1c1
commit 29bc310563
2 changed files with 24 additions and 0 deletions

View File

@ -1,3 +1,17 @@
2011-01-13 Werner Lemberg <wl@gnu.org>
[raster] Handle drop-outs at glyph borders according to Microsoft.
If a drop-out rule would switch on a pixel outside of the glyph's
bounding box, use the right (or top) pixel instead. This is an
undocumented feature, but some fonts like `Helvetica Neue LT Com 65
Medium' heavily rely on it.
Thanks to Greg Hitchcock who explained this behaviour.
* src/raster/ftraster.c (Vertical_Sweep_Drop,
Horizontal_Sweep_Drop): Implement it.
2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> 2011-01-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
[cache] Fix Savannah bug #31923, patch drafted by Harsha. [cache] Fix Savannah bug #31923, patch drafted by Harsha.

View File

@ -2403,6 +2403,11 @@
return; /* no drop-out control */ return; /* no drop-out control */
} }
/* undocumented but confirmed: If the drop-out would result in a */
/* pixel outside of the bounding box, use the right pixel instead */
if ( pxl < 0 )
pxl = e1;
/* check that the other pixel isn't set */ /* check that the other pixel isn't set */
e1 = pxl == e1 ? e2 : e1; e1 = pxl == e1 ? e2 : e1;
@ -2579,6 +2584,11 @@
return; /* no drop-out control */ return; /* no drop-out control */
} }
/* undocumented but confirmed: If the drop-out would result in a */
/* pixel outside of the bounding box, use the top pixel instead */
if ( pxl < 0 )
pxl = e1;
/* check that the other pixel isn't set */ /* check that the other pixel isn't set */
e1 = pxl == e1 ? e2 : e1; e1 = pxl == e1 ? e2 : e1;