From f2d21e73827d81da559ee4cd046bfb02dfd66a83 Mon Sep 17 00:00:00 2001 From: Vladimir Vukicevic Date: Mon, 18 Feb 2008 17:18:51 -0800 Subject: [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. --- src/cairo-path-stroke.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/cairo-path-stroke.c b/src/cairo-path-stroke.c index b82c28a32..4344e6b58 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; -- cgit v1.2.3