From 3cd07559328b60e3da85debb805cb4a3fc4abc22 Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Wed, 16 Jun 2010 22:54:08 +0200 Subject: [PATCH] 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 --- src/cairo-fixed-private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cairo-fixed-private.h b/src/cairo-fixed-private.h index 66898a20f..8873056cf 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