Skip to content

Commit

Permalink
image: Make a local copy of the trap coordinates as the boxes alias.
Browse files Browse the repository at this point in the history
As we transform the array of trapezoids into an array of boxes in-place,
we must take local copies of the coordinates before writing into the
boxes otherwise we may inadvertently modify the trapezoidal coordinates.

Fixes test/a1-bug.
  • Loading branch information
Chris Wilson committed Jun 17, 2010
1 parent f2645fa commit 7ab9ce1
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions src/cairo-image-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -3066,6 +3066,7 @@ _boxes_for_traps (cairo_boxes_t *boxes,

if (antialias != CAIRO_ANTIALIAS_NONE) {
for (i = 0; i < traps->num_traps; i++) {
/* Note the traps and boxes alias so we need to take the local copies first. */
cairo_fixed_t x1 = traps->traps[i].left.p1.x;
cairo_fixed_t x2 = traps->traps[i].right.p1.x;
cairo_fixed_t y1 = traps->traps[i].top;
Expand All @@ -3086,11 +3087,17 @@ _boxes_for_traps (cairo_boxes_t *boxes,
boxes->is_pixel_aligned = TRUE;

for (i = 0; i < traps->num_traps; i++) {
/* Note the traps and boxes alias so we need to take the local copies first. */
cairo_fixed_t x1 = traps->traps[i].left.p1.x;
cairo_fixed_t x2 = traps->traps[i].right.p1.x;
cairo_fixed_t y1 = traps->traps[i].top;
cairo_fixed_t y2 = traps->traps[i].bottom;

/* round down here to match Pixman's behavior when using traps. */
boxes->chunks.base[i].p1.x = _cairo_fixed_round_down (traps->traps[i].left.p1.x);
boxes->chunks.base[i].p1.y = _cairo_fixed_round_down (traps->traps[i].top);
boxes->chunks.base[i].p2.x = _cairo_fixed_round_down (traps->traps[i].right.p1.x);
boxes->chunks.base[i].p2.y = _cairo_fixed_round_down (traps->traps[i].bottom);
boxes->chunks.base[i].p1.x = _cairo_fixed_round_down (x1);
boxes->chunks.base[i].p1.y = _cairo_fixed_round_down (y1);
boxes->chunks.base[i].p2.x = _cairo_fixed_round_down (x2);
boxes->chunks.base[i].p2.y = _cairo_fixed_round_down (y2);
}
}
}
Expand Down

0 comments on commit 7ab9ce1

Please sign in to comment.