[cairo-commit] src/cairo-fixed-private.h

Andrea Canciani ranma42 at kemper.freedesktop.org
Wed Jun 16 14:00:23 PDT 2010

 src/cairo-fixed-private.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 3cd07559328b60e3da85debb805cb4a3fc4abc22
Author: Andrea Canciani <ranma42 at gmail.com>
Date:   Wed Jun 16 22:54:08 2010 +0200

    correct rounding computation
    cairo_fixed_integer_round[_down] were adding an unsigned mask value
    before shifting its result, causing the shift to be computed as
    logical (unsigned) right shift, thus producing incorrect values for
    negative inputs. Making the mask value signed fixes this issue.
    Bug report by cu:

diff --git a/src/cairo-fixed-private.h b/src/cairo-fixed-private.h
index 66898a2..8873056 100644
--- a/src/cairo-fixed-private.h
+++ b/src/cairo-fixed-private.h
@@ -52,7 +52,7 @@
 #define CAIRO_FIXED_EPSILON    ((cairo_fixed_t)(1))
-#define CAIRO_FIXED_FRAC_MASK  (((cairo_fixed_unsigned_t)(-1)) >> (CAIRO_FIXED_BITS - CAIRO_FIXED_FRAC_BITS))
+#define CAIRO_FIXED_FRAC_MASK  ((cairo_fixed_t)(((cairo_fixed_unsigned_t)(-1)) >> (CAIRO_FIXED_BITS - CAIRO_FIXED_FRAC_BITS)))
 static inline cairo_fixed_t

More information about the cairo-commit mailing list