diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-02-26 16:31:06 +0100 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-02-27 17:47:54 +0100 |
commit | 9f8e0724789744d81c5de0138e65284a9560e707 (patch) | |
tree | ac4237044423e8ac6bf60a33a879862134c3f8bb /source/pdf/pdf-interpret.c | |
parent | 8ebca3d5481961f56b5754ab4cfa9544f58c5b0b (diff) | |
download | mupdf-9f8e0724789744d81c5de0138e65284a9560e707.tar.xz |
Remove pdf_xobject wrapper struct.
Just use the pdf_obj directly.
Revise ap_iteration and split annot->dirty into separate flags.
One flag for needs_new_ap, and one for has_new_ap (to be used by
clients who may have cached a rendered annotation).
Diffstat (limited to 'source/pdf/pdf-interpret.c')
-rw-r--r-- | source/pdf/pdf-interpret.c | 82 |
1 files changed, 29 insertions, 53 deletions
diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c index 1c781b9e..c6833878 100644 --- a/source/pdf/pdf-interpret.c +++ b/source/pdf/pdf-interpret.c @@ -254,61 +254,46 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob { if (pdf_is_dict(ctx, obj)) { - pdf_xobject *xobj; - pdf_obj *group, *s, *bc, *tr; + pdf_obj *xobj, *s, *bc, *tr; float softmask_bc[FZ_MAX_COLORS]; fz_colorspace *colorspace; int colorspace_n = 1; int k, luminosity; - fz_var(xobj); + xobj = pdf_dict_get(ctx, obj, PDF_NAME_G); - group = pdf_dict_get(ctx, obj, PDF_NAME_G); - xobj = pdf_load_xobject(ctx, csi->doc, group); + colorspace = pdf_xobject_colorspace(ctx, xobj); + if (colorspace) + colorspace_n = fz_colorspace_n(ctx, colorspace); - fz_try(ctx) - { - colorspace = pdf_xobject_colorspace(ctx, xobj); - if (colorspace) - colorspace_n = fz_colorspace_n(ctx, colorspace); + /* Default background color is black. */ + for (k = 0; k < colorspace_n; k++) + softmask_bc[k] = 0; + /* Which in CMYK means not all zeros! This should really be + * a test for subtractive color spaces, but this will have + * to do for now. */ + if (fz_colorspace_is_cmyk(ctx, colorspace)) + softmask_bc[3] = 1.0f; + fz_drop_colorspace(ctx, colorspace); - /* Default background color is black. */ + bc = pdf_dict_get(ctx, obj, PDF_NAME_BC); + if (pdf_is_array(ctx, bc)) + { for (k = 0; k < colorspace_n; k++) - softmask_bc[k] = 0; - /* Which in CMYK means not all zeros! This should really be - * a test for subtractive color spaces, but this will have - * to do for now. */ - if (fz_colorspace_is_cmyk(ctx, colorspace)) - softmask_bc[3] = 1.0f; - fz_drop_colorspace(ctx, colorspace); - - bc = pdf_dict_get(ctx, obj, PDF_NAME_BC); - if (pdf_is_array(ctx, bc)) - { - for (k = 0; k < colorspace_n; k++) - softmask_bc[k] = pdf_to_real(ctx, pdf_array_get(ctx, bc, k)); - } + softmask_bc[k] = pdf_to_real(ctx, pdf_array_get(ctx, bc, k)); + } - s = pdf_dict_get(ctx, obj, PDF_NAME_S); - if (pdf_name_eq(ctx, s, PDF_NAME_Luminosity)) - luminosity = 1; - else - luminosity = 0; + s = pdf_dict_get(ctx, obj, PDF_NAME_S); + if (pdf_name_eq(ctx, s, PDF_NAME_Luminosity)) + luminosity = 1; + else + luminosity = 0; - tr = pdf_dict_get(ctx, obj, PDF_NAME_TR); - if (tr && !pdf_name_eq(ctx, tr, PDF_NAME_Identity)) - fz_warn(ctx, "ignoring transfer function"); + tr = pdf_dict_get(ctx, obj, PDF_NAME_TR); + if (tr && !pdf_name_eq(ctx, tr, PDF_NAME_Identity)) + fz_warn(ctx, "ignoring transfer function"); - proc->op_gs_SMask(ctx, proc, xobj, csi->rdb, softmask_bc, luminosity); - } - fz_always(ctx) - { - pdf_drop_xobject(ctx, xobj); - } - fz_catch(ctx) - { - fz_rethrow(ctx); - } + proc->op_gs_SMask(ctx, proc, xobj, csi->rdb, softmask_bc, luminosity); } else if (pdf_is_name(ctx, obj) && pdf_name_eq(ctx, obj, PDF_NAME_None)) { @@ -344,16 +329,7 @@ pdf_process_Do(fz_context *ctx, pdf_processor *proc, pdf_csi *csi) if (pdf_name_eq(ctx, subtype, PDF_NAME_Form)) { if (proc->op_Do_form) - { - pdf_xobject *form = pdf_load_xobject(ctx, csi->doc, xobj); - - fz_try(ctx) - proc->op_Do_form(ctx, proc, csi->name, form, csi->rdb); - fz_always(ctx) - pdf_drop_xobject(ctx, form); - fz_catch(ctx) - fz_rethrow(ctx); - } + proc->op_Do_form(ctx, proc, csi->name, xobj, csi->rdb); } else if (pdf_name_eq(ctx, subtype, PDF_NAME_Image)) |