mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 19:18:12 +02:00
[xlib] Fix new Composite test
When the reference point was tirggering _line_exceeds_16_16() and got adjusted, the code failed to compute the srcX and srcY arguments for the call to XRenderCompositeTrapezoids() correctly and caused the resulting source image to be misaligned.
This commit is contained in:
parent
84bbf179c3
commit
52afe9c77f
2 changed files with 20 additions and 11 deletions
|
|
@ -217,6 +217,15 @@ _cairo_fixed_16_16_from_double (double d)
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline int
|
||||
_cairo_fixed_16_16_floor (cairo_fixed_t f)
|
||||
{
|
||||
if (f >= 0)
|
||||
return f >> 16;
|
||||
else
|
||||
return -((-f - 1) >> 16) - 1;
|
||||
}
|
||||
|
||||
#if CAIRO_FIXED_BITS == 32
|
||||
|
||||
static inline cairo_fixed_t
|
||||
|
|
|
|||
|
|
@ -2605,17 +2605,6 @@ _cairo_xlib_surface_composite_trapezoids (cairo_operator_t op,
|
|||
break;
|
||||
}
|
||||
|
||||
if (traps[0].left.p1.y < traps[0].left.p2.y) {
|
||||
render_reference_x = _cairo_fixed_integer_floor (traps[0].left.p1.x);
|
||||
render_reference_y = _cairo_fixed_integer_floor (traps[0].left.p1.y);
|
||||
} else {
|
||||
render_reference_x = _cairo_fixed_integer_floor (traps[0].left.p2.x);
|
||||
render_reference_y = _cairo_fixed_integer_floor (traps[0].left.p2.y);
|
||||
}
|
||||
|
||||
render_src_x = src_x + render_reference_x - dst_x;
|
||||
render_src_y = src_y + render_reference_y - dst_y;
|
||||
|
||||
status = _cairo_xlib_surface_set_clip_region (dst, clip_region);
|
||||
if (unlikely (status))
|
||||
goto BAIL;
|
||||
|
|
@ -2674,6 +2663,17 @@ _cairo_xlib_surface_composite_trapezoids (cairo_operator_t op,
|
|||
}
|
||||
}
|
||||
|
||||
if (xtraps[0].left.p1.y < xtraps[0].left.p2.y) {
|
||||
render_reference_x = _cairo_fixed_16_16_floor (xtraps[0].left.p1.x);
|
||||
render_reference_y = _cairo_fixed_16_16_floor (xtraps[0].left.p1.y);
|
||||
} else {
|
||||
render_reference_x = _cairo_fixed_16_16_floor (xtraps[0].left.p2.x);
|
||||
render_reference_y = _cairo_fixed_16_16_floor (xtraps[0].left.p2.y);
|
||||
}
|
||||
|
||||
render_src_x = src_x + render_reference_x - dst_x;
|
||||
render_src_y = src_y + render_reference_y - dst_y;
|
||||
|
||||
XRenderCompositeTrapezoids (dst->dpy,
|
||||
_render_operator (op),
|
||||
src->src_picture, dst->dst_picture,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue