diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-06-25 13:15:50 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-07-05 15:32:34 +0200 |
commit | 4a99615a609eec2b84bb2341d74fac46a5998137 (patch) | |
tree | 486eacff07448e4c655df1fa1bcb20df709dd8df /include/mupdf/pdf | |
parent | 2aa62902447760764e7a763dea322145d9c4808c (diff) | |
download | mupdf-4a99615a609eec2b84bb2341d74fac46a5998137.tar.xz |
Pass rect and matrix by value in geometry functions.
Several things irk me about passing values as const pointers:
* They can be NULL, which is not a valid value.
* They require explicit temporary variables for storage.
* They don't compose easily in a legible manner, requiring
weird pointer passing semantics where the variable being assigned
is hidden as an argument in the innermost function call.
* We can't change the value through the pointer, requiring yet more
local variables to hold copies of the input value.
In the device interface where we pass a matrix to a function, we often
find ourselves making a local copy of the matrix so we can concatenate
other transforms to it. This copying is a lot of unnecessary busywork
that I hope to eventually avoid by laying the groundwork with this
commit.
This is a rather large API change, so I apologize for the inconvenience,
but I hope the end result and gain in legibility will be worth the pain.
Diffstat (limited to 'include/mupdf/pdf')
-rw-r--r-- | include/mupdf/pdf/annot.h | 8 | ||||
-rw-r--r-- | include/mupdf/pdf/document.h | 2 | ||||
-rw-r--r-- | include/mupdf/pdf/object.h | 12 | ||||
-rw-r--r-- | include/mupdf/pdf/page.h | 2 | ||||
-rw-r--r-- | include/mupdf/pdf/resource.h | 8 | ||||
-rw-r--r-- | include/mupdf/pdf/widget.h | 2 |
6 files changed, 17 insertions, 17 deletions
diff --git a/include/mupdf/pdf/annot.h b/include/mupdf/pdf/annot.h index bd4e8722..1e9361fd 100644 --- a/include/mupdf/pdf/annot.h +++ b/include/mupdf/pdf/annot.h @@ -87,7 +87,7 @@ pdf_annot *pdf_next_annot(fz_context *ctx, pdf_annot *annot); /* pdf_bound_annot: Return the rectangle for an annotation on a page. */ -fz_rect *pdf_bound_annot(fz_context *ctx, pdf_annot *annot, fz_rect *rect); +fz_rect pdf_bound_annot(fz_context *ctx, pdf_annot *annot); /* pdf_annot_type: Return the type of an annotation @@ -132,7 +132,7 @@ pdf_obj *pdf_load_name_tree(fz_context *ctx, pdf_document *doc, pdf_obj *which); int pdf_resolve_link(fz_context *ctx, pdf_document *doc, const char *uri, float *xp, float *yp); fz_link *pdf_load_link_annots(fz_context *ctx, pdf_document *, pdf_obj *annots, int pagenum, const fz_matrix *page_ctm); -void pdf_annot_transform(fz_context *ctx, pdf_annot *annot, fz_matrix *annot_ctm); +fz_matrix pdf_annot_transform(fz_context *ctx, pdf_annot *annot); void pdf_load_annots(fz_context *ctx, pdf_page *page, pdf_obj *annots); void pdf_update_annot(fz_context *ctx, pdf_annot *annot); void pdf_drop_annots(fz_context *ctx, pdf_annot *annot_list); @@ -160,7 +160,7 @@ int pdf_annot_has_open(fz_context *ctx, pdf_annot *annot); int pdf_annot_has_author(fz_context *ctx, pdf_annot *annot); int pdf_annot_flags(fz_context *ctx, pdf_annot *annot); -void pdf_annot_rect(fz_context *ctx, pdf_annot *annot, fz_rect *rect); +fz_rect pdf_annot_rect(fz_context *ctx, pdf_annot *annot); float pdf_annot_border(fz_context *ctx, pdf_annot *annot); float pdf_annot_opacity(fz_context *ctx, pdf_annot *annot); void pdf_annot_color(fz_context *ctx, pdf_annot *annot, int *n, float color[4]); @@ -178,7 +178,7 @@ int pdf_annot_ink_list_stroke_count(fz_context *ctx, pdf_annot *annot, int i); fz_point pdf_annot_ink_list_stroke_vertex(fz_context *ctx, pdf_annot *annot, int i, int k); void pdf_set_annot_flags(fz_context *ctx, pdf_annot *annot, int flags); -void pdf_set_annot_rect(fz_context *ctx, pdf_annot *annot, const fz_rect *rect); +void pdf_set_annot_rect(fz_context *ctx, pdf_annot *annot, fz_rect rect); void pdf_set_annot_border(fz_context *ctx, pdf_annot *annot, float width); void pdf_set_annot_opacity(fz_context *ctx, pdf_annot *annot, float opacity); void pdf_set_annot_color(fz_context *ctx, pdf_annot *annot, int n, const float color[4]); diff --git a/include/mupdf/pdf/document.h b/include/mupdf/pdf/document.h index 57e726d3..4ca9a3a8 100644 --- a/include/mupdf/pdf/document.h +++ b/include/mupdf/pdf/document.h @@ -822,7 +822,7 @@ fz_device *pdf_page_write(fz_context *ctx, pdf_document *doc, const fz_rect *med contents: The page contents for the new page (typically create by pdf_page_write). */ -pdf_obj *pdf_add_page(fz_context *ctx, pdf_document *doc, const fz_rect *mediabox, int rotate, pdf_obj *resources, fz_buffer *contents); +pdf_obj *pdf_add_page(fz_context *ctx, pdf_document *doc, fz_rect mediabox, int rotate, pdf_obj *resources, fz_buffer *contents); /* pdf_insert_page: Insert a page previously created by diff --git a/include/mupdf/pdf/object.h b/include/mupdf/pdf/object.h index 71a8d9d8..e4a9b313 100644 --- a/include/mupdf/pdf/object.h +++ b/include/mupdf/pdf/object.h @@ -23,8 +23,8 @@ pdf_obj *pdf_new_text_string(fz_context *ctx, const char *s); pdf_obj *pdf_new_indirect(fz_context *ctx, pdf_document *doc, int num, int gen); pdf_obj *pdf_new_array(fz_context *ctx, pdf_document *doc, int initialcap); pdf_obj *pdf_new_dict(fz_context *ctx, pdf_document *doc, int initialcap); -pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, const fz_rect *rect); -pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, const fz_matrix *mtx); +pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, fz_rect rect); +pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, fz_matrix mtx); pdf_obj *pdf_copy_array(fz_context *ctx, pdf_obj *array); pdf_obj *pdf_copy_dict(fz_context *ctx, pdf_obj *dict); pdf_obj *pdf_deep_copy_obj(fz_context *ctx, pdf_obj *obj); @@ -127,8 +127,8 @@ void pdf_dict_put_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key, double x); void pdf_dict_put_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x); void pdf_dict_put_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x, size_t n); void pdf_dict_put_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x); -void pdf_dict_put_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const fz_rect *x); -void pdf_dict_put_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const fz_matrix *x); +void pdf_dict_put_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_rect x); +void pdf_dict_put_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_matrix x); pdf_obj *pdf_dict_put_array(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial); pdf_obj *pdf_dict_put_dict(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial); @@ -178,8 +178,8 @@ char *pdf_new_utf8_from_pdf_string_obj(fz_context *ctx, pdf_obj *src); char *pdf_new_utf8_from_pdf_stream_obj(fz_context *ctx, pdf_obj *src); char *pdf_load_stream_or_string_as_utf8(fz_context *ctx, pdf_obj *src); -fz_rect *pdf_to_rect(fz_context *ctx, pdf_obj *array, fz_rect *rect); -fz_matrix *pdf_to_matrix(fz_context *ctx, pdf_obj *array, fz_matrix *mat); +fz_rect pdf_to_rect(fz_context *ctx, pdf_obj *array); +fz_matrix pdf_to_matrix(fz_context *ctx, pdf_obj *array); pdf_document *pdf_get_indirect_document(fz_context *ctx, pdf_obj *obj); pdf_document *pdf_get_bound_document(fz_context *ctx, pdf_obj *obj); diff --git a/include/mupdf/pdf/page.h b/include/mupdf/pdf/page.h index bd0cec9d..25043b1d 100644 --- a/include/mupdf/pdf/page.h +++ b/include/mupdf/pdf/page.h @@ -58,7 +58,7 @@ fz_link *pdf_load_links(fz_context *ctx, pdf_page *page); exists (visible area after cropping), otherwise the media box will be used (possibly including printing marks). */ -fz_rect *pdf_bound_page(fz_context *ctx, pdf_page *page, fz_rect *); +fz_rect pdf_bound_page(fz_context *ctx, pdf_page *page); /* pdf_run_page: Interpret a loaded page and render it on a device. diff --git a/include/mupdf/pdf/resource.h b/include/mupdf/pdf/resource.h index b6a2a4b5..d8968996 100644 --- a/include/mupdf/pdf/resource.h +++ b/include/mupdf/pdf/resource.h @@ -79,12 +79,12 @@ void pdf_drop_pattern(fz_context *ctx, pdf_pattern *pat); * XObject */ -pdf_obj *pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat, pdf_obj *res, fz_buffer *buffer); -void pdf_update_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *xobj, const fz_rect *bbox, const fz_matrix *mat, pdf_obj *res, fz_buffer *buffer); +pdf_obj *pdf_new_xobject(fz_context *ctx, pdf_document *doc, fz_rect bbox, fz_matrix matrix, pdf_obj *res, fz_buffer *buffer); +void pdf_update_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *xobj, fz_rect bbox, fz_matrix mat, pdf_obj *res, fz_buffer *buffer); pdf_obj *pdf_xobject_resources(fz_context *ctx, pdf_obj *xobj); -fz_rect *pdf_xobject_bbox(fz_context *ctx, pdf_obj *xobj, fz_rect *bbox); -fz_matrix *pdf_xobject_matrix(fz_context *ctx, pdf_obj *xobj, fz_matrix *matrix); +fz_rect pdf_xobject_bbox(fz_context *ctx, pdf_obj *xobj); +fz_matrix pdf_xobject_matrix(fz_context *ctx, pdf_obj *xobj); int pdf_xobject_isolated(fz_context *ctx, pdf_obj *xobj); int pdf_xobject_knockout(fz_context *ctx, pdf_obj *xobj); int pdf_xobject_transparency(fz_context *ctx, pdf_obj *xobj); diff --git a/include/mupdf/pdf/widget.h b/include/mupdf/pdf/widget.h index 04c9f887..7e2ae591 100644 --- a/include/mupdf/pdf/widget.h +++ b/include/mupdf/pdf/widget.h @@ -65,7 +65,7 @@ int pdf_widget_type(fz_context *ctx, pdf_widget *widget); /* pdf_bound_widget: get the bounding box of a widget. */ -fz_rect *pdf_bound_widget(fz_context *ctx, pdf_widget *widget, fz_rect *); +fz_rect pdf_bound_widget(fz_context *ctx, pdf_widget *widget); /* pdf_text_widget_text: Get the text currently displayed in |