[cairo-commit] src/cairo-path-stroke.c

Vladimir Vukicevic vladimir at kemper.freedesktop.org
Mon Feb 18 17:18:55 PST 2008


 src/cairo-path-stroke.c |   18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

New commits:
commit f2d21e73827d81da559ee4cd046bfb02dfd66a83
Author: Vladimir Vukicevic <vladimir at pobox.com>
Date:   Mon Feb 18 17:18:51 2008 -0800

    [stroker] fix _compute_normalized_device_slope to return correct sign
    
    The optimization to avoid sqrt() for horizontal/vertical lines in
    _compute_normalized_device_slope was causing us to return a negative
    magnitude with a positive slope for left-to-right and bottom-to-top
    lines, instead of always returning a positive magnitude and a slope
    with an appropriate sign.

diff --git a/src/cairo-path-stroke.c b/src/cairo-path-stroke.c
index b82c28a..4344e6b 100644
--- a/src/cairo-path-stroke.c
+++ b/src/cairo-path-stroke.c
@@ -601,13 +601,23 @@ _compute_normalized_device_slope (double *dx, double *dy, cairo_matrix_t *ctm_in
     }
 
     if (dx0 == 0.0) {
-	mag = dy0;
 	*dx = 0.0;
-	*dy = 1.0;
+	if (dy0 > 0.0) {
+	    mag = dy0;
+	    *dy = 1.0;
+	} else {
+	    mag = -dy0;
+	    *dy = -1.0;
+	}
     } else if (dy0 == 0.0) {
-	mag = dx0;
-	*dx = 1.0;
 	*dy = 0.0;
+	if (dx0 > 0.0) {
+	    mag = dx0;
+	    *dx = 1.0;
+	} else {
+	    mag = -dx0;
+	    *dx = -1.0;
+	}
     } else {
 	mag = sqrt (dx0 * dx0 + dy0 * dy0);
 	*dx = dx0 / mag;


More information about the cairo-commit mailing list