diff options
author | Vladimir Vukicevic <vladimir@pobox.com> | 2008-02-18 17:18:51 -0800 |
---|---|---|
committer | Vladimir Vukicevic <vladimir@sleet.vlad1.com> | 2008-02-18 17:18:51 -0800 |
commit | f2d21e73827d81da559ee4cd046bfb02dfd66a83 (patch) | |
tree | 8a4cb169c836898a85971025220bff53212b76c0 | |
parent | 8fb624dbf2c660fbbf6d6964f7876656e1b62e41 (diff) |
[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.
-rw-r--r-- | src/cairo-path-stroke.c | 18 |
1 files 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; |