Round horizontal sampling points towards northwest.
authorSøren Sandmann Pedersen <sandmann@redhat.com>
Thu, 12 Nov 2009 22:54:40 +0000 (17:54 -0500)
committerSøren Sandmann Pedersen <sandmann@redhat.com>
Tue, 17 Nov 2009 06:58:01 +0000 (01:58 -0500)
This is a similar change as the top/bottom one, but in this case the
rounding is simpler because it's just always rounding down.

Based on a patch by M Joonas Pihlaja.

pixman/pixman-edge-imp.h

index a30f821..d786ea7 100644 (file)
@@ -49,10 +49,14 @@ RASTERIZE_EDGES (pixman_image_t  *image,
        rx = r->x;
 #if N_BITS == 1
        /* For the non-antialiased case, round the coordinates up, in effect
-        * sampling the center of the pixel. (The AA case does a similar 
-        * adjustment in RENDER_SAMPLES_X) */
-       lx += X_FRAC_FIRST(1);
-       rx += X_FRAC_FIRST(1);
+        * sampling just slightly to the left of the pixel. This is so that
+        * when the sample point lies exactly on the line, we round towards
+        * north-west.
+        *
+        * (The AA case does a similar  adjustment in RENDER_SAMPLES_X)
+        */
+       lx += X_FRAC_FIRST(1) - pixman_fixed_e;
+       rx += X_FRAC_FIRST(1) - pixman_fixed_e;
 #endif
        /* clip X */
        if (lx < 0)