diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2015-01-21 16:42:45 +0100 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2015-02-17 18:05:39 +0100 |
commit | f84a189d5f94250e46d2cbd1a75aba00130e2dd6 (patch) | |
tree | 8ee614ab90de1baa8941f91ae4946ed5c2e70721 /source/pdf/pdf-xobject.c | |
parent | 681039767f2ccc72e236246178893eb0989169c9 (diff) | |
download | mupdf-f84a189d5f94250e46d2cbd1a75aba00130e2dd6.tar.xz |
Add ctx parameter and remove embedded contexts for API regularity.
Purge several embedded contexts:
Remove embedded context in fz_output.
Remove embedded context in fz_stream.
Remove embedded context in fz_device.
Remove fz_rebind_stream (since it is no longer necessary).
Remove embedded context in svg_device.
Remove embedded context in XML parser.
Add ctx argument to fz_document functions.
Remove embedded context in fz_document.
Remove embedded context in pdf_document.
Remove embedded context in pdf_obj.
Make fz_page independent of fz_document in the interface.
We shouldn't need to pass the document to all functions handling a page.
If a page is tied to the source document, it's redundant; otherwise it's
just pointless.
Fix reference counting oddity in fz_new_image_from_pixmap.
Diffstat (limited to 'source/pdf/pdf-xobject.c')
-rw-r--r-- | source/pdf/pdf-xobject.c | 130 |
1 files changed, 64 insertions, 66 deletions
diff --git a/source/pdf/pdf-xobject.c b/source/pdf/pdf-xobject.c index c350eb0a..e169a27a 100644 --- a/source/pdf/pdf-xobject.c +++ b/source/pdf/pdf-xobject.c @@ -19,9 +19,9 @@ pdf_drop_xobject_imp(fz_context *ctx, fz_storable *xobj_) if (xobj->colorspace) fz_drop_colorspace(ctx, xobj->colorspace); - pdf_drop_obj(xobj->resources); - pdf_drop_obj(xobj->contents); - pdf_drop_obj(xobj->me); + pdf_drop_obj(ctx, xobj->resources); + pdf_drop_obj(ctx, xobj->contents); + pdf_drop_obj(ctx, xobj->me); fz_free(ctx, xobj); } @@ -34,11 +34,10 @@ pdf_xobject_size(pdf_xobject *xobj) } pdf_xobject * -pdf_load_xobject(pdf_document *doc, pdf_obj *dict) +pdf_load_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *dict) { pdf_xobject *form; pdf_obj *obj; - fz_context *ctx = doc->ctx; if ((form = pdf_find_item(ctx, pdf_drop_xobject_imp, dict)) != NULL) { @@ -58,10 +57,10 @@ pdf_load_xobject(pdf_document *doc, pdf_obj *dict) fz_try(ctx) { - obj = pdf_dict_gets(dict, "BBox"); + obj = pdf_dict_gets(ctx, dict, "BBox"); pdf_to_rect(ctx, obj, &form->bbox); - obj = pdf_dict_gets(dict, "Matrix"); + obj = pdf_dict_gets(ctx, dict, "Matrix"); if (obj) pdf_to_matrix(ctx, obj, &form->matrix); else @@ -71,24 +70,24 @@ pdf_load_xobject(pdf_document *doc, pdf_obj *dict) form->knockout = 0; form->transparency = 0; - obj = pdf_dict_gets(dict, "Group"); + obj = pdf_dict_gets(ctx, dict, "Group"); if (obj) { pdf_obj *attrs = obj; - form->isolated = pdf_to_bool(pdf_dict_gets(attrs, "I")); - form->knockout = pdf_to_bool(pdf_dict_gets(attrs, "K")); + form->isolated = pdf_to_bool(ctx, pdf_dict_gets(ctx, attrs, "I")); + form->knockout = pdf_to_bool(ctx, pdf_dict_gets(ctx, attrs, "K")); - obj = pdf_dict_gets(attrs, "S"); - if (pdf_is_name(obj) && !strcmp(pdf_to_name(obj), "Transparency")) + obj = pdf_dict_gets(ctx, attrs, "S"); + if (pdf_is_name(ctx, obj) && !strcmp(pdf_to_name(ctx, obj), "Transparency")) form->transparency = 1; - obj = pdf_dict_gets(attrs, "CS"); + obj = pdf_dict_gets(ctx, attrs, "CS"); if (obj) { fz_try(ctx) { - form->colorspace = pdf_load_colorspace(doc, obj); + form->colorspace = pdf_load_colorspace(ctx, doc, obj); } fz_catch(ctx) { @@ -97,25 +96,25 @@ pdf_load_xobject(pdf_document *doc, pdf_obj *dict) } } - form->resources = pdf_dict_gets(dict, "Resources"); + form->resources = pdf_dict_gets(ctx, dict, "Resources"); if (form->resources) - pdf_keep_obj(form->resources); + pdf_keep_obj(ctx, form->resources); - form->contents = pdf_keep_obj(dict); + form->contents = pdf_keep_obj(ctx, dict); } fz_catch(ctx) { pdf_remove_item(ctx, pdf_drop_xobject_imp, dict); pdf_drop_xobject(ctx, form); - fz_rethrow_message(ctx, "cannot load xobject content stream (%d %d R)", pdf_to_num(dict), pdf_to_gen(dict)); + fz_rethrow_message(ctx, "cannot load xobject content stream (%d %d R)", pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); } - form->me = pdf_keep_obj(dict); + form->me = pdf_keep_obj(ctx, dict); return form; } pdf_obj * -pdf_new_xobject(pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) +pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) { int idict_num; pdf_obj *idict = NULL; @@ -124,7 +123,6 @@ pdf_new_xobject(pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) pdf_obj *obj = NULL; pdf_obj *res = NULL; pdf_obj *procset = NULL; - fz_context *ctx = doc->ctx; fz_var(idict); fz_var(dict); @@ -134,51 +132,51 @@ pdf_new_xobject(pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) fz_var(procset); fz_try(ctx) { - dict = pdf_new_dict(doc, 0); + dict = pdf_new_dict(ctx, doc, 0); - obj = pdf_new_rect(doc, bbox); - pdf_dict_puts(dict, "BBox", obj); - pdf_drop_obj(obj); + obj = pdf_new_rect(ctx, doc, bbox); + pdf_dict_puts(ctx, dict, "BBox", obj); + pdf_drop_obj(ctx, obj); obj = NULL; - obj = pdf_new_int(doc, 1); - pdf_dict_puts(dict, "FormType", obj); - pdf_drop_obj(obj); + obj = pdf_new_int(ctx, doc, 1); + pdf_dict_puts(ctx, dict, "FormType", obj); + pdf_drop_obj(ctx, obj); obj = NULL; - obj = pdf_new_int(doc, 0); - pdf_dict_puts(dict, "Length", obj); - pdf_drop_obj(obj); + obj = pdf_new_int(ctx, doc, 0); + pdf_dict_puts(ctx, dict, "Length", obj); + pdf_drop_obj(ctx, obj); obj = NULL; - obj = pdf_new_matrix(doc, mat); - pdf_dict_puts(dict, "Matrix", obj); - pdf_drop_obj(obj); + obj = pdf_new_matrix(ctx, doc, mat); + pdf_dict_puts(ctx, dict, "Matrix", obj); + pdf_drop_obj(ctx, obj); obj = NULL; - res = pdf_new_dict(doc, 0); - procset = pdf_new_array(doc, 2); - obj = pdf_new_name(doc, "PDF"); - pdf_array_push(procset, obj); - pdf_drop_obj(obj); + res = pdf_new_dict(ctx, doc, 0); + procset = pdf_new_array(ctx, doc, 2); + obj = pdf_new_name(ctx, doc, "PDF"); + pdf_array_push(ctx, procset, obj); + pdf_drop_obj(ctx, obj); obj = NULL; - obj = pdf_new_name(doc, "Text"); - pdf_array_push(procset, obj); - pdf_drop_obj(obj); + obj = pdf_new_name(ctx, doc, "Text"); + pdf_array_push(ctx, procset, obj); + pdf_drop_obj(ctx, obj); obj = NULL; - pdf_dict_puts(res, "ProcSet", procset); - pdf_drop_obj(procset); + pdf_dict_puts(ctx, res, "ProcSet", procset); + pdf_drop_obj(ctx, procset); procset = NULL; - pdf_dict_puts(dict, "Resources", res); + pdf_dict_puts(ctx, dict, "Resources", res); - obj = pdf_new_name(doc, "Form"); - pdf_dict_puts(dict, "Subtype", obj); - pdf_drop_obj(obj); + obj = pdf_new_name(ctx, doc, "Form"); + pdf_dict_puts(ctx, dict, "Subtype", obj); + pdf_drop_obj(ctx, obj); obj = NULL; - obj = pdf_new_name(doc, "XObject"); - pdf_dict_puts(dict, "Type", obj); - pdf_drop_obj(obj); + obj = pdf_new_name(ctx, doc, "XObject"); + pdf_dict_puts(ctx, dict, "Type", obj); + pdf_drop_obj(ctx, obj); obj = NULL; form = fz_malloc_struct(ctx, pdf_xobject); @@ -200,27 +198,27 @@ pdf_new_xobject(pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) form->resources = res; res = NULL; - idict_num = pdf_create_object(doc); - pdf_update_object(doc, idict_num, dict); - idict = pdf_new_indirect(doc, idict_num, 0); - pdf_drop_obj(dict); + idict_num = pdf_create_object(ctx, doc); + pdf_update_object(ctx, doc, idict_num, dict); + idict = pdf_new_indirect(ctx, doc, idict_num, 0); + pdf_drop_obj(ctx, dict); dict = NULL; pdf_store_item(ctx, idict, form, pdf_xobject_size(form)); - form->contents = pdf_keep_obj(idict); - form->me = pdf_keep_obj(idict); + form->contents = pdf_keep_obj(ctx, idict); + form->me = pdf_keep_obj(ctx, idict); pdf_drop_xobject(ctx, form); form = NULL; } fz_catch(ctx) { - pdf_drop_obj(procset); - pdf_drop_obj(res); - pdf_drop_obj(obj); - pdf_drop_obj(dict); - pdf_drop_obj(idict); + pdf_drop_obj(ctx, procset); + pdf_drop_obj(ctx, res); + pdf_drop_obj(ctx, obj); + pdf_drop_obj(ctx, dict); + pdf_drop_obj(ctx, idict); pdf_drop_xobject(ctx, form); fz_rethrow_message(ctx, "failed to create xobject)"); } @@ -228,10 +226,10 @@ pdf_new_xobject(pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat) return idict; } -void pdf_update_xobject_contents(pdf_document *doc, pdf_xobject *form, fz_buffer *buffer) +void pdf_update_xobject_contents(fz_context *ctx, pdf_document *doc, pdf_xobject *form, fz_buffer *buffer) { - pdf_dict_dels(form->contents, "Filter"); - pdf_dict_puts_drop(form->contents, "Length", pdf_new_int(doc, buffer->len)); - pdf_update_stream(doc, pdf_to_num(form->contents), buffer); + pdf_dict_dels(ctx, form->contents, "Filter"); + pdf_dict_puts_drop(ctx, form->contents, "Length", pdf_new_int(ctx, doc, buffer->len)); + pdf_update_stream(ctx, doc, pdf_to_num(ctx, form->contents), buffer); form->iteration ++; } |