diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-24 16:27:07 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-24 16:27:07 +0100 |
commit | 4c72c4df661b4cc24f40d8719da15a13adc7bb9b (patch) | |
tree | 364bc56096ae914bd7577f01ce986330e140f1c9 /src/cairo-surface-wrapper.c | |
parent | cc745f5c2f5a513e195a9a3b66e4428ec932bfe3 (diff) | |
download | cairo-4c72c4df661b4cc24f40d8719da15a13adc7bb9b.tar.gz |
wrapper: Correct translation of clip for wrapper extents
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-surface-wrapper.c')
-rw-r--r-- | src/cairo-surface-wrapper.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/src/cairo-surface-wrapper.c b/src/cairo-surface-wrapper.c index e4436ea7f..df32837ab 100644 --- a/src/cairo-surface-wrapper.c +++ b/src/cairo-surface-wrapper.c @@ -98,18 +98,13 @@ _cairo_surface_wrapper_get_clip (cairo_surface_wrapper_t *wrapper, { cairo_clip_t *copy; - copy = _cairo_clip_copy_with_translation (clip, - -wrapper->extents.x, - -wrapper->extents.y); - if (wrapper->has_extents) { /* XXX broken. */ - cairo_rectangle_int_t extents; - - extents.x = extents.y = 0; - extents.width = wrapper->extents.width; - extents.height = wrapper->extents.height; - - copy = _cairo_clip_intersect_rectangle (copy, &extents); - } + copy = _cairo_clip_copy (clip); + if (wrapper->has_extents) + copy = _cairo_clip_intersect_rectangle (copy, &wrapper->extents); + if (wrapper->extents.x | wrapper->extents.y) + copy = _cairo_clip_translate (copy, + -wrapper->extents.x, + -wrapper->extents.y); if (wrapper->clip) copy = _cairo_clip_intersect_clip (copy, wrapper->clip); @@ -405,9 +400,6 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper, if (unlikely (wrapper->target->status)) return wrapper->target->status; - if (glyphs == NULL || num_glyphs == 0) - return CAIRO_STATUS_SUCCESS; - dev_clip = _cairo_surface_wrapper_get_clip (wrapper, clip); if (_cairo_clip_is_all_clipped (dev_clip)) return CAIRO_INT_STATUS_NOTHING_TO_DO; @@ -571,6 +563,7 @@ _cairo_surface_wrapper_init (cairo_surface_wrapper_t *wrapper, wrapper->target = cairo_surface_reference (target); cairo_matrix_init_identity (&wrapper->transform); wrapper->has_extents = FALSE; + wrapper->extents.x = wrapper->extents.y = 0; wrapper->needs_transform = ! _cairo_matrix_is_identity (&wrapper->target->device_transform); |