[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:
    http://lists.cairographics.org/archives/cairo/2010-June/020115.html

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_ONE_DOUBLE ((double)(1 << CAIRO_FIXED_FRAC_BITS))
 #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)))
 #define CAIRO_FIXED_WHOLE_MASK (~CAIRO_FIXED_FRAC_MASK)
 
 static inline cairo_fixed_t


More information about the cairo-commit mailing list