diff --git a/ChangeLog b/ChangeLog index 28ca7da1c..922d611bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,14 @@ +2005-12-30 Emmanuel Pacaud + + * src/cairo-svg-surface.c (_cairo_svg_surface_create_for_document): no + more has_clip boolean. Init clip_level. + (_cairo_surface_intersect_clip_path): a NULL path means reset of + clipping region, not back to previous clipping level. + 2005-12-28 Emmanuel Pacaud - * _cairo_svg_document_create: namespace declarations for SVG and XLINK - (#5411). + * src/cairo-svg-surface.c (_cairo_svg_document_create): namespace + declarations for SVG and XLINK (#5411). 2005-12-27 Christian Biesinger diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index 30f780197..92ce5e011 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -88,7 +88,7 @@ struct cairo_svg_surface { xmlNodePtr xml_node; - cairo_bool_t has_clip; + unsigned int clip_level; }; static cairo_svg_document_t * @@ -194,7 +194,7 @@ _cairo_svg_surface_create_for_document (cairo_svg_document_t *document, _cairo_svg_document_reference (document); surface->document = document; - surface->has_clip = FALSE; + surface->clip_level = 0; surface->id = document->surface_id++; clip_id = document->clip_id++; @@ -1303,14 +1303,13 @@ _cairo_svg_surface_intersect_clip_path (void *dst, char buffer[CAIRO_SVG_DTOSTR_BUFFER_LEN]; if (path == NULL) { - if (surface->has_clip) + while (surface->clip_level > 0) { surface->xml_node = surface->xml_node->parent; - surface->has_clip = FALSE; + surface->clip_level--; + } return CAIRO_STATUS_SUCCESS; } - surface->has_clip = TRUE; - if (path != NULL) { info.document = document; info.has_current_point = FALSE; @@ -1340,6 +1339,7 @@ _cairo_svg_surface_intersect_clip_path (void *dst, document->clip_id++; surface->xml_node = group; + surface->clip_level++; } return status;