From 900869349fdb281ae7b75b39771f224e0e472d23 Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Mon, 12 Nov 2018 17:08:57 +0000 Subject: Bug 700154: Don't pass blends into groups within softmasks. When generating a softmask, which is to be rendered with a blend, don't pass that blend down into the rendering of the softmask. Otherwise the blend gets used twice. In the example given this is causing the content to disappear. --- source/pdf/pdf-op-run.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c index 7d676214..28ecd2e3 100644 --- a/source/pdf/pdf-op-run.c +++ b/source/pdf/pdf-op-run.c @@ -106,6 +106,7 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save) fz_matrix tos_save[2], save_ctm; fz_matrix mask_matrix; fz_colorspace *mask_colorspace; + int saved_blendmode; save->softmask = softmask; if (softmask == NULL) @@ -135,13 +136,19 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save) if (gstate->luminosity && !mask_colorspace) mask_colorspace = fz_keep_colorspace(ctx, fz_device_gray(ctx)); + saved_blendmode = gstate->blendmode; + fz_try(ctx) { fz_begin_mask(ctx, pr->dev, mask_bbox, gstate->luminosity, mask_colorspace, gstate->softmask_bc, &gstate->fill.color_params); + gstate->blendmode = 0; pdf_run_xobject(ctx, pr, softmask, save->page_resources, fz_identity, 1); } fz_always(ctx) + { fz_drop_colorspace(ctx, mask_colorspace); + gstate->blendmode = saved_blendmode; + } fz_catch(ctx) { fz_rethrow_if(ctx, FZ_ERROR_TRYLATER); -- cgit v1.2.3