[raster] Reduce jitter value.

This catches a rendering problem with glyph `x' from Tahoma at
10ppem.  It seems that the increase of the precision in the change
from 2009-06-11 makes a larger jitter value unnecessary.

* src/raster/ftraster.c (Set_High_Precision): Implement it.
This commit is contained in:
Werner Lemberg 2011-01-13 21:55:08 +01:00
parent 29bc310563
commit c02485cb72
2 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2011-01-13 Werner Lemberg <wl@gnu.org>
[raster] Reduce jitter value.
This catches a rendering problem with glyph `x' from Tahoma at
10ppem. It seems that the increase of the precision in the change
from 2009-06-11 makes a larger jitter value unnecessary.
* src/raster/ftraster.c (Set_High_Precision): Implement it.
2011-01-13 Werner Lemberg <wl@gnu.org>
[raster] Handle drop-outs at glyph borders according to Microsoft.

View File

@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer (body). */
/* */
/* Copyright 1996-2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010 by */
/* Copyright 1996-2001, 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@ -651,11 +651,33 @@
static void
Set_High_Precision( RAS_ARGS Int High )
{
/*
* `precision_step' is used in `Bezier_Up' to decide when to split a
* given y-monotonous Bezier arc that crosses a scanline before
* approximating it as a straight segment. The default value of 32 (for
* low accuracy) corresponds to
*
* 32 / 64 == 0.5 pixels ,
*
* while for the high accuracy case we have
*
* 256/ (1 << 12) = 0.0625 pixels .
*
* `precision_jitter' is an epsilon threshold used in
* `Vertical_Sweep_Span' to deal with small imperfections in the Bezier
* decomposition (after all, we are working with approximations only);
* it avoids switching on additional pixels which would cause artifacts
* otherwise.
*
* The value of `precision_jitter' has been determined heuristically.
*
*/
if ( High )
{
ras.precision_bits = 12;
ras.precision_step = 256;
ras.precision_jitter = 50;
ras.precision_jitter = 30;
}
else
{