diff options
author | Karl Tomlinson <karlt+@karlt.net> | 2010-07-17 13:08:53 +1200 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-07-17 11:32:02 +0100 |
commit | 108b1c7825116ed3f93aa57384bbd3290cdc9181 (patch) | |
tree | 961de66109426b59e557d0e34333be350b862d4e /src/cairo-gstate.c | |
parent | b79ea8a6cab8bd28aebecf6e1e8229d5ac017264 (diff) | |
download | cairo-108b1c7825116ed3f93aa57384bbd3290cdc9181.tar.gz |
clip: consider gstate target extents in _cairo_gstate_copy_clip_rectangle_list
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=29125
To be consistent with _cairo_gstate_clip_extents, the context's clip
should be intersected with the target surface extents (instead of only
using them when there is no clip).
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-gstate.c')
-rw-r--r-- | src/cairo-gstate.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index baf614500..7caf624b4 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -1555,7 +1555,19 @@ _cairo_gstate_clip_extents (cairo_gstate_t *gstate, cairo_rectangle_list_t* _cairo_gstate_copy_clip_rectangle_list (cairo_gstate_t *gstate) { - return _cairo_clip_copy_rectangle_list (&gstate->clip, gstate); + cairo_clip_t clip; + cairo_rectangle_int_t extents; + cairo_rectangle_list_t *list; + + _cairo_clip_init_copy (&clip, &gstate->clip); + + if (_cairo_surface_get_extents (gstate->target, &extents)) + _cairo_clip_rectangle (&clip, &extents); + + list = _cairo_clip_copy_rectangle_list (&clip, gstate); + _cairo_clip_fini (&clip); + + return list; } static void |