diff options
author | Andrea Canciani <ranma42@gmail.com> | 2010-06-16 22:54:08 +0200 |
---|---|---|
committer | Andrea Canciani <ranma42@gmail.com> | 2010-06-16 22:59:46 +0200 |
commit | 3cd07559328b60e3da85debb805cb4a3fc4abc22 (patch) | |
tree | daaeeeffc77736b26075e0927d4124e3ab29a871 | |
parent | 8689d75caaa9c6ee42976873d21684fa9f48834f (diff) |
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
-rw-r--r-- | src/cairo-fixed-private.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cairo-fixed-private.h b/src/cairo-fixed-private.h index 66898a20..8873056c 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 |