summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/pdf/pdf-op-run.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c
index 2b6edea4..f0ce5e9d 100644
--- a/source/pdf/pdf-op-run.c
+++ b/source/pdf/pdf-op-run.c
@@ -2199,21 +2199,30 @@ static void pdf_run_END(fz_context *ctx, pdf_processor *proc)
}
static void
-pdf_drop_run_processor(fz_context *ctx, pdf_processor *proc)
+pdf_close_run_processor(fz_context *ctx, pdf_processor *proc)
{
pdf_run_processor *pr = (pdf_run_processor *)proc;
while (pr->gtop)
pdf_grestore(ctx, pr);
- pdf_drop_material(ctx, &pr->gstate[0].fill);
- pdf_drop_material(ctx, &pr->gstate[0].stroke);
- pdf_drop_font(ctx, pr->gstate[0].text.font);
- pdf_drop_obj(ctx, pr->gstate[0].softmask);
- fz_drop_stroke_state(ctx, pr->gstate[0].stroke_state);
-
- while (pr->gstate[0].clip_depth--)
+ while (pr->gstate[0].clip_depth)
+ {
fz_pop_clip(ctx, pr->dev);
+ pr->gstate[0].clip_depth--;
+ }
+}
+
+static void
+pdf_drop_run_processor(fz_context *ctx, pdf_processor *proc)
+{
+ pdf_run_processor *pr = (pdf_run_processor *)proc;
+
+ while (pr->gtop >= 0)
+ {
+ pdf_drop_gstate(ctx, &pr->gstate[pr->gtop]);
+ pr->gtop--;
+ }
fz_drop_path(ctx, pr->path);
fz_drop_text(ctx, pr->tos.text);
@@ -2230,6 +2239,7 @@ pdf_new_run_processor(fz_context *ctx, fz_device *dev, fz_matrix ctm, const char
{
proc->super.usage = usage;
+ proc->super.close_processor = pdf_close_run_processor;
proc->super.drop_processor = pdf_drop_run_processor;
/* general graphics state */