From 749ef6be4d11b95d666b0e5fe06df926b828d655 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Mon, 17 Dec 2012 17:45:25 +0100 Subject: context: Use recording surfaces for unbounded groups The old code uses an uninitialized variable for the extents of the group that is created. This patch makes it use an unbounded recording surface instead. This has the implicit assumption that everything that is unbounded smells like a recording surface. Let's see when this assumption breaks. :-) http://lists.cairographics.org/archives/cairo/2012-October/023585.html Signed-off-by: Uli Schlachter --- src/cairo-default-context.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/cairo-default-context.c b/src/cairo-default-context.c index 3d828efc7..fee08f088 100644 --- a/src/cairo-default-context.c +++ b/src/cairo-default-context.c @@ -149,23 +149,28 @@ _cairo_default_context_push_group (void *abstract_cr, cairo_content_t content) } else { cairo_surface_t *parent_surface; cairo_rectangle_int_t extents; - cairo_bool_t is_empty; + cairo_bool_t bounded, is_empty; parent_surface = _cairo_gstate_get_target (cr->gstate); /* Get the extents that we'll use in creating our new group surface */ - is_empty = _cairo_surface_get_extents (parent_surface, &extents); + bounded = _cairo_surface_get_extents (parent_surface, &extents); if (clip) + /* XXX: This assignment just fixes a compiler warning? */ is_empty = _cairo_rectangle_intersect (&extents, _cairo_clip_get_extents (clip)); - /* XXX unbounded surface creation */ - - group_surface = _cairo_surface_create_similar_solid (parent_surface, - content, - extents.width, - extents.height, - CAIRO_COLOR_TRANSPARENT); + if (!bounded) { + /* XXX: Generic solution? */ + group_surface = cairo_recording_surface_create (content, NULL); + extents.x = extents.y = 0; + } else { + group_surface = _cairo_surface_create_similar_solid (parent_surface, + content, + extents.width, + extents.height, + CAIRO_COLOR_TRANSPARENT); + } status = group_surface->status; if (unlikely (status)) goto bail; -- cgit v1.2.3