pattern: allow for a floating one pixel rounded difference.

That is if the difference between the origin and the end is bigger than
.5 round up regardless of the coordinates.

Round the difference of the floats instead of rounding the floats then
diff them.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=84396

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
Alban Browaeys 2015-01-21 12:01:45 +01:00 committed by Bryce Harrington
parent b4a922f62d
commit e7acf4b6dc

View file

@ -3531,7 +3531,7 @@ _cairo_pattern_get_extents (const cairo_pattern_t *pattern,
cairo_rectangle_int_t *extents)
{
double x1, y1, x2, y2;
int ix1, ix2, iy1, iy2;
double ix1, ix2, iy1, iy2;
cairo_bool_t round_x = FALSE;
cairo_bool_t round_y = FALSE;
@ -3725,12 +3725,12 @@ _cairo_pattern_get_extents (const cairo_pattern_t *pattern,
if (x1 < CAIRO_RECT_INT_MIN)
ix1 = CAIRO_RECT_INT_MIN;
else
ix1 = _cairo_lround (x1);
ix1 = x1;
if (x2 > CAIRO_RECT_INT_MAX)
ix2 = CAIRO_RECT_INT_MAX;
else
ix2 = _cairo_lround (x2);
extents->x = ix1; extents->width = ix2 - ix1;
ix2 = x2;
extents->x = ix1; extents->width = _cairo_lround(ix2 - ix1);
if (!round_y) {
y1 -= 0.5;
@ -3744,7 +3744,7 @@ _cairo_pattern_get_extents (const cairo_pattern_t *pattern,
iy2 = CAIRO_RECT_INT_MAX;
else
iy2 = _cairo_lround (y2);
extents->y = iy1; extents->height = iy2 - iy1;
extents->y = iy1; extents->height = _cairo_lround(iy2 - iy1);
return;