[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