From f0eabc17d6ec113c6e765ac3272f19623a6cbd4e Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Wed, 6 Jul 2016 13:15:49 +0200 Subject: Start slimming pdf_page. We want to turn pdf_page into a thin wrapper around a pdf_obj, so that any updates to the underlying PDF objects will be reflected without having to reload the pdf_page. --- include/mupdf/fitz/document.h | 14 +++++++------- include/mupdf/pdf/annot.h | 5 +++-- include/mupdf/pdf/page.h | 21 +++++++++------------ 3 files changed, 19 insertions(+), 21 deletions(-) (limited to 'include') diff --git a/include/mupdf/fitz/document.h b/include/mupdf/fitz/document.h index 1f3f474d..889b66b1 100644 --- a/include/mupdf/fitz/document.h +++ b/include/mupdf/fitz/document.h @@ -40,7 +40,7 @@ typedef fz_link *(fz_page_load_links_fn)(fz_context *ctx, fz_page *page); typedef fz_rect *(fz_page_bound_page_fn)(fz_context *ctx, fz_page *page, fz_rect *); typedef void (fz_page_run_page_contents_fn)(fz_context *ctx, fz_page *page, fz_device *dev, const fz_matrix *transform, fz_cookie *cookie); typedef void (fz_page_drop_page_imp_fn)(fz_context *ctx, fz_page *page); -typedef fz_transition *(fz_page_page_presentation_fn)(fz_context *ctx, fz_page *page, float *duration); +typedef fz_transition *(fz_page_page_presentation_fn)(fz_context *ctx, fz_page *page, fz_transition *transition, float *duration); typedef fz_annot *(fz_page_first_annot_fn)(fz_context *ctx, fz_page *page); @@ -334,15 +334,15 @@ void *fz_new_annot(fz_context *ctx, int size); /* fz_page_presentation: Get the presentation details for a given page. - duration: NULL, or a pointer to a place to set the page duration in - seconds. (Will be set to 0 if unspecified). + transition: A pointer to a transition struct to fill out. - Returns: a pointer to a transition structure, or NULL if there isn't - one. + duration: A pointer to a place to set the page duration in seconds. + Will be set to 0 if no transition is specified for the page. - Does not throw exceptions. + Returns: a pointer to a the transition structure, or NULL if there is no + transition specified for the page. */ -fz_transition *fz_page_presentation(fz_context *ctx, fz_page *page, float *duration); +fz_transition *fz_page_presentation(fz_context *ctx, fz_page *page, fz_transition *transition, float *duration); /* fz_has_permission: Check permission flags on document. diff --git a/include/mupdf/pdf/annot.h b/include/mupdf/pdf/annot.h index ed18aae1..e6ea5b8d 100644 --- a/include/mupdf/pdf/annot.h +++ b/include/mupdf/pdf/annot.h @@ -59,6 +59,7 @@ struct pdf_annot_s { fz_annot super; pdf_page *page; + fz_matrix page_ctm, inv_page_ctm; pdf_obj *obj; fz_rect rect; fz_rect pagerect; @@ -81,7 +82,7 @@ pdf_obj *pdf_load_name_tree(fz_context *ctx, pdf_document *doc, pdf_obj *which); fz_link *pdf_load_link_annots(fz_context *ctx, pdf_document *, pdf_obj *annots, const fz_matrix *page_ctm); void pdf_transform_annot(fz_context *ctx, pdf_annot *annot); -void pdf_load_annots(fz_context *ctx, pdf_document *, pdf_page *page, pdf_obj *annots); +void pdf_load_annots(fz_context *ctx, pdf_document *, pdf_page *page, pdf_obj *annots, const fz_matrix *page_transform); void pdf_update_annot(fz_context *ctx, pdf_document *, pdf_annot *annot); void pdf_drop_annots(fz_context *ctx, pdf_annot *annot_list); @@ -155,6 +156,6 @@ pdf_annot *pdf_poll_changed_annot(fz_context *ctx, pdf_document *idoc, pdf_page /* pdf_new_annot: Internal function for creating a new pdf annotation. */ -pdf_annot *pdf_new_annot(fz_context *ctx, pdf_page *page); +pdf_annot *pdf_new_annot(fz_context *ctx, pdf_page *page, const fz_matrix *page_ctm, const fz_matrix *inv_page_ctm); #endif diff --git a/include/mupdf/pdf/page.h b/include/mupdf/pdf/page.h index 43634d46..e3efb1e7 100644 --- a/include/mupdf/pdf/page.h +++ b/include/mupdf/pdf/page.h @@ -19,7 +19,7 @@ int pdf_lookup_anchor(fz_context *ctx, pdf_document *doc, const char *name); Copy any inheritable page keys into the actual page object, removing any dependencies on the page tree parents. */ -void pdf_flatten_inheritable_page_items(fz_context *ctx, pdf_document *doc, pdf_obj *page); +void pdf_flatten_inheritable_page_items(fz_context *ctx, pdf_obj *page); /* pdf_load_page: Load a page and its resources. @@ -32,9 +32,12 @@ void pdf_flatten_inheritable_page_items(fz_context *ctx, pdf_document *doc, pdf_ number: page number, where 0 is the first page of the document. */ pdf_page *pdf_load_page(fz_context *ctx, pdf_document *doc, int number); - void pdf_drop_page(fz_context *ctx, pdf_page *page); +void pdf_page_transform(fz_context *ctx, pdf_page *page, fz_rect *mediabox, fz_matrix *ctm); +pdf_obj *pdf_page_resources(fz_context *ctx, pdf_page *page); +pdf_obj *pdf_page_contents(fz_context *ctx, pdf_page *page); + fz_link *pdf_load_links(fz_context *ctx, pdf_page *page); /* @@ -159,7 +162,7 @@ void pdf_clean_annot_contents(fz_context *ctx, pdf_document *doc, pdf_annot *ann /* Presentation interface. */ -fz_transition *pdf_page_presentation(fz_context *ctx, pdf_page *page, float *duration); +fz_transition *pdf_page_presentation(fz_context *ctx, pdf_page *page, fz_transition *transition, float *duration); /* * Page tree, pages and related objects @@ -169,23 +172,17 @@ struct pdf_page_s { fz_page super; pdf_document *doc; + pdf_obj *obj; - fz_matrix ctm; /* calculated from mediabox and rotate */ - fz_rect mediabox; - int rotate; int transparency; - pdf_obj *resources; - pdf_obj *contents; + fz_link *links; pdf_annot *annots; pdf_annot **annot_tailp; pdf_annot *changed_annots; pdf_annot *deleted_annots; pdf_annot *tmp_annots; - pdf_obj *me; - float duration; - int transition_present; - fz_transition transition; + int incomplete; }; -- cgit v1.2.3