mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-04-22 04:40:41 +02:00
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 <psychon@znc.in>
This commit is contained in:
parent
433a5829d7
commit
749ef6be4d
1 changed files with 14 additions and 9 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue