diff --git a/ChangeLog b/ChangeLog index b34a71dfa..05033bdfe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2020-09-08 Alexei Podtelezhnikov + + [raster] Tune SMART macro (#58352). + + Windows seems to perform smart dropout control at 26.6 precision. + To mimick Windows independent of increased precision, we need to tweak + the macro so that some close calls break down rather than up. + + * src/raster/ftraster.c (SMART): Tweak the macro. + 2020-09-08 Alexei Podtelezhnikov [raster] Introduce SMART macro. diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 14ff4d4d3..71fac3f2e 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -459,8 +459,9 @@ #define IS_TOP_OVERSHOOT( x ) \ (Bool)( x - FLOOR( x ) >= ras.precision_half ) - /* smart dropout rounding */ -#define SMART( x1, x2 ) FLOOR( ( (x1) + (x2) - 1 ) / 2 + ras.precision_half ) + /* smart dropout rounding to find which pixel is closer to span ends; */ + /* to mimick Windows, symmetric cases break down indepenent of precision */ +#define SMART( p, q ) FLOOR( ( (p) + (q) + ras.precision * 63 / 64 ) >> 1 ) #if FT_RENDER_POOL_SIZE > 2048 #define FT_MAX_BLACK_POOL ( FT_RENDER_POOL_SIZE / sizeof ( Long ) )