diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | src/cairo-traps.c | 16 |
2 files changed, 13 insertions, 11 deletions
@@ -1,5 +1,13 @@ 2005-08-27 Owen Taylor <otaylor@redhat.com> + reviewed by: cworth + + * src/cairo-traps.c (_cairo_traps_extract_region): Make the + check for rectangular trapezoids simpler and more accurate. + (#4220, found using test case from Richard Stellingwerff) + +2005-08-27 Owen Taylor <otaylor@redhat.com> + * src/cairo-xlib-surface.c (_cairo_xlib_surface_create_internal): Make the vendor string check for XFree86 more liberal, to deal with older versions of gentoo that modified it in a different diff --git a/src/cairo-traps.c b/src/cairo-traps.c index 18b944c1d..6afb499bd 100644 --- a/src/cairo-traps.c +++ b/src/cairo-traps.c @@ -827,16 +827,10 @@ _cairo_traps_extract_region (cairo_traps_t *traps, for (i = 0; i < traps->num_traps; i++) if (!(traps->traps[i].left.p1.x == traps->traps[i].left.p2.x && traps->traps[i].right.p1.x == traps->traps[i].right.p2.x - && traps->traps[i].left.p1.y == traps->traps[i].right.p1.y - && traps->traps[i].left.p2.y == traps->traps[i].right.p2.y + && _cairo_fixed_is_integer(traps->traps[i].top) + && _cairo_fixed_is_integer(traps->traps[i].bottom) && _cairo_fixed_is_integer(traps->traps[i].left.p1.x) - && _cairo_fixed_is_integer(traps->traps[i].left.p1.y) - && _cairo_fixed_is_integer(traps->traps[i].left.p2.x) - && _cairo_fixed_is_integer(traps->traps[i].left.p2.y) - && _cairo_fixed_is_integer(traps->traps[i].right.p1.x) - && _cairo_fixed_is_integer(traps->traps[i].right.p1.y) - && _cairo_fixed_is_integer(traps->traps[i].right.p2.x) - && _cairo_fixed_is_integer(traps->traps[i].right.p2.y))) { + && _cairo_fixed_is_integer(traps->traps[i].right.p1.x))) { *region = NULL; return CAIRO_STATUS_SUCCESS; } @@ -845,9 +839,9 @@ _cairo_traps_extract_region (cairo_traps_t *traps, for (i = 0; i < traps->num_traps; i++) { int x = _cairo_fixed_integer_part(traps->traps[i].left.p1.x); - int y = _cairo_fixed_integer_part(traps->traps[i].left.p1.y); + int y = _cairo_fixed_integer_part(traps->traps[i].top); int width = _cairo_fixed_integer_part(traps->traps[i].right.p1.x) - x; - int height = _cairo_fixed_integer_part(traps->traps[i].left.p2.y) - y; + int height = _cairo_fixed_integer_part(traps->traps[i].bottom) - y; /* XXX: Sometimes we get degenerate trapezoids from the tesellator, * if we call pixman_region_union_rect(), it bizarrly fails on such |