From d8dbce021a4493330864154e67ca6e4a1f2f50b2 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 16 Aug 2009 13:26:59 +0100 Subject: [PATCH] [script] recursive active (type3 glyphs) The assumption that an active surface could not recurse into another operation was invalid - due to the complexity of handling type3 glyphs. --- src/cairo-script-surface.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/cairo-script-surface.c b/src/cairo-script-surface.c index 6b6d8ffff..15d1ab055 100644 --- a/src/cairo-script-surface.c +++ b/src/cairo-script-surface.c @@ -1934,9 +1934,8 @@ _cairo_script_surface_clipper_intersect_clip_path (cairo_surface_clipper_t *clip static void active (cairo_script_surface_t *surface) { - assert (surface->active == FALSE); - surface->active = TRUE; - surface->ctx->active++; + if (surface->active++ == 0) + surface->ctx->active++; } static void @@ -1945,10 +1944,10 @@ inactive (cairo_script_surface_t *surface) cairo_script_context_t *ctx = surface->ctx; cairo_list_t sorted; - assert (surface->active == TRUE); - surface->active = FALSE; + if (--surface->active) + return; - if (--ctx->active > 0) + if (--ctx->active) return; cairo_list_init (&sorted);