summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-op-run.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-07-07 16:45:21 +0200
committerTor Andersson <tor.andersson@artifex.com>2016-07-08 17:21:24 +0200
commitb53e7a42f7cc9756ed9fa1fed313271e3ae67855 (patch)
tree189bf664a611479fb3c2d95e70fc58ce4e8ab0d7 /source/pdf/pdf-op-run.c
parenta2ee9c141864426708950c047d478ef7b9f0103c (diff)
downloadmupdf-b53e7a42f7cc9756ed9fa1fed313271e3ae67855.tar.xz
Slim pdf_xobject: remove cached colorspace field.
Diffstat (limited to 'source/pdf/pdf-op-run.c')
-rw-r--r--source/pdf/pdf-op-run.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c
index e74d08f4..a0f28008 100644
--- a/source/pdf/pdf-op-run.c
+++ b/source/pdf/pdf-op-run.c
@@ -111,6 +111,7 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save)
fz_rect mask_bbox;
fz_matrix save_tm, save_tlm, save_ctm;
fz_matrix mask_matrix;
+ fz_colorspace *mask_colorspace;
save->softmask = softmask;
if (softmask == NULL)
@@ -121,6 +122,7 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save)
pdf_xobject_bbox(ctx, softmask, &mask_bbox);
pdf_xobject_matrix(ctx, softmask, &mask_matrix);
+
save_tm = pr->tm;
save_tlm = pr->tlm;
@@ -135,12 +137,14 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save)
gstate->softmask_resources = NULL;
gstate->ctm = gstate->softmask_ctm;
- fz_begin_mask(ctx, pr->dev, &mask_bbox, gstate->luminosity,
- softmask->colorspace, gstate->softmask_bc);
+ mask_colorspace = pdf_xobject_colorspace(ctx, softmask);
fz_try(ctx)
{
+ fz_begin_mask(ctx, pr->dev, &mask_bbox, gstate->luminosity, mask_colorspace, gstate->softmask_bc);
pdf_run_xobject(ctx, pr, softmask, save->page_resources, &fz_identity);
}
+ fz_always(ctx)
+ fz_drop_colorspace(ctx, mask_colorspace);
fz_catch(ctx)
{
fz_rethrow_if(ctx, FZ_ERROR_TRYLATER);
@@ -1474,15 +1478,20 @@ static void pdf_run_gs_SMask(fz_context *ctx, pdf_processor *proc, pdf_xobject *
if (smask)
{
- fz_colorspace *cs = smask->colorspace;
- if (!cs)
- cs = fz_device_gray(ctx);
+ fz_colorspace *cs = pdf_xobject_colorspace(ctx, smask);
+ int cs_n = 1;
+ if (cs)
+ {
+ cs_n = cs->n;
+ fz_drop_colorspace(ctx, cs);
+ }
gstate->softmask_ctm = gstate->ctm;
gstate->softmask = pdf_keep_xobject(ctx, smask);
gstate->softmask_resources = pdf_keep_obj(ctx, page_resources);
- for (i = 0; i < cs->n; ++i)
+ for (i = 0; i < cs_n; ++i)
gstate->softmask_bc[i] = bc[i];
gstate->luminosity = luminosity;
+ fz_drop_colorspace(ctx, cs);
}
}