From 19fbc576afe8e8de2f49f57ddbe4a27c84bcbaa1 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Fri, 22 May 2009 09:20:25 +0200 Subject: [PATCH] Improve b/w rasterizer. Problem reported by Krzysztof Kotlenga . * src/raster/raster.c (Vertical_Sweep_Drop, Horizontal_Sweep_Drop, Horizontal_Gray_Sweep_Drop): For smart drop-out mode, if intersections are equally distant relative to next pixel center, select the left pixel, not the right one. --- ChangeLog | 10 ++++++++++ src/raster/ftraster.c | 12 ++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5ef3e6f38..2776d70f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-05-22 Werner Lemberg + + Improve b/w rasterizer. + Problem reported by Krzysztof Kotlenga . + + * src/raster/raster.c (Vertical_Sweep_Drop, Horizontal_Sweep_Drop, + Horizontal_Gray_Sweep_Drop): For smart drop-out mode, if + intersections are equally distant relative to next pixel center, + select the left pixel, not the right one. + 2009-05-19 Werner Lemberg Fix Savannah bug #26600. diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 6724e8f4a..a5cc40ccc 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -2230,7 +2230,7 @@ a }; break; case 4: /* smart drop-outs including stubs */ - pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half ); + pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half - 1 ); break; case 1: /* simple drop-outs excluding stubs */ @@ -2276,7 +2276,7 @@ a }; if ( ras.dropOutControl == 1 ) pxl = e2; else - pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half ); + pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half - 1 ); break; default: /* modes 2, 3, 6, 7 */ @@ -2425,7 +2425,7 @@ a }; break; case 4: /* smart drop-outs including stubs */ - pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half ); + pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half - 1 ); break; case 1: /* simple drop-outs excluding stubs */ @@ -2443,7 +2443,7 @@ a }; if ( ras.dropOutControl == 1 ) pxl = e2; else - pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half ); + pxl = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half - 1 ); break; default: /* modes 2, 3, 6, 7 */ @@ -2675,7 +2675,7 @@ a }; break; case 4: /* smart drop-outs including stubs */ - e1 = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half ); + e1 = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half - 1 ); break; case 1: /* simple drop-outs excluding stubs */ @@ -2693,7 +2693,7 @@ a }; if ( ras.dropOutControl == 1 ) e1 = e2; else - e1 = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half ); + e1 = FLOOR( ( x1 + x2 + 1 ) / 2 + ras.precision_half - 1 ); break;