summaryrefslogtreecommitdiff
path: root/src/cairo-gstate.c
diff options
context:
space:
mode:
authorKarl Tomlinson <karlt+@karlt.net>2010-07-17 13:08:53 +1200
committerChris Wilson <chris@chris-wilson.co.uk>2010-07-17 11:32:02 +0100
commit108b1c7825116ed3f93aa57384bbd3290cdc9181 (patch)
tree961de66109426b59e557d0e34333be350b862d4e /src/cairo-gstate.c
parentb79ea8a6cab8bd28aebecf6e1e8229d5ac017264 (diff)
downloadcairo-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.c14
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