summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Vukicevic <vladimir@pobox.com>2008-02-18 17:18:51 -0800
committerVladimir Vukicevic <vladimir@sleet.vlad1.com>2008-02-18 17:18:51 -0800
commitf2d21e73827d81da559ee4cd046bfb02dfd66a83 (patch)
tree8a4cb169c836898a85971025220bff53212b76c0
parent8fb624dbf2c660fbbf6d6964f7876656e1b62e41 (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.c18
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;