diff options
-rw-r--r-- | src/cairo-spans-compositor.c | 13 | ||||
-rw-r--r-- | src/cairo-traps-compositor.c | 15 |
2 files changed, 23 insertions, 5 deletions
diff --git a/src/cairo-spans-compositor.c b/src/cairo-spans-compositor.c index 6eb9b42a9..1a46ea3a3 100644 --- a/src/cairo-spans-compositor.c +++ b/src/cairo-spans-compositor.c @@ -585,6 +585,8 @@ composite_aligned_boxes (const cairo_spans_compositor_t *compositor, { cairo_clip_t *recording_clip; const cairo_pattern_t *source = &extents->source_pattern.base; + const cairo_matrix_t *m; + cairo_matrix_t matrix; /* XXX could also do tiling repeat modes... */ @@ -600,10 +602,17 @@ composite_aligned_boxes (const cairo_spans_compositor_t *compositor, dst->is_clear = TRUE; } + m = &source->matrix; + if (_cairo_surface_has_device_transform (dst)) { + cairo_matrix_multiply (&matrix, + &source->matrix, + &dst->device_transform); + m = &matrix; + } + recording_clip = _cairo_clip_from_boxes (boxes); status = _cairo_recording_surface_replay_with_clip (unwrap_source (source), - &source->matrix, - dst, recording_clip); + m, dst, recording_clip); _cairo_clip_destroy (recording_clip); return status; diff --git a/src/cairo-traps-compositor.c b/src/cairo-traps-compositor.c index 988d23c8d..631e172e7 100644 --- a/src/cairo-traps-compositor.c +++ b/src/cairo-traps-compositor.c @@ -1206,7 +1206,9 @@ composite_aligned_boxes (const cairo_traps_compositor_t *compositor, &extents->source_sample_area)) { cairo_clip_t *recording_clip; - cairo_pattern_t *source = &extents->source_pattern.base; + const cairo_pattern_t *source = &extents->source_pattern.base; + const cairo_matrix_t *m; + cairo_matrix_t matrix; /* XXX could also do tiling repeat modes... */ @@ -1225,10 +1227,17 @@ composite_aligned_boxes (const cairo_traps_compositor_t *compositor, return status; } + m = &source->matrix; + if (_cairo_surface_has_device_transform (dst)) { + cairo_matrix_multiply (&matrix, + &source->matrix, + &dst->device_transform); + m = &matrix; + } + recording_clip = _cairo_clip_from_boxes (boxes); status = _cairo_recording_surface_replay_with_clip (recording_pattern_get_surface (source), - &source->matrix, - dst, recording_clip); + m, dst, recording_clip); _cairo_clip_destroy (recording_clip); return status; |