mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-02-22 10:20:28 +01:00
image: Make a local copy of the trap coordinates as the boxes alias.
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.
This commit is contained in:
parent
f2645fa361
commit
7ab9ce1b91
1 changed files with 11 additions and 4 deletions
|
|
@ -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;
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue