From 9994b3f49db7bd925a7ae7874cbc99025469ee9e Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 12 Jan 2012 01:12:28 +0100 Subject: Use the same coordinate system for pdf and xps pages in the interface. Move coordinate space tweaks into pdf_ and xps_run_page, and provide neutral pdf_ and xps_bound_page functions to return the page size as a zero-origined bounding box. --- pdf/mupdf.h | 1 + pdf/pdf_interpret.c | 8 +++++++- pdf/pdf_page.c | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) (limited to 'pdf') diff --git a/pdf/mupdf.h b/pdf/mupdf.h index d9a6b7c6..1ec9d4f2 100644 --- a/pdf/mupdf.h +++ b/pdf/mupdf.h @@ -455,6 +455,7 @@ int pdf_find_page_number(pdf_xref *xref, fz_obj *pageobj); int pdf_count_pages(pdf_xref *xref); pdf_page *pdf_load_page(pdf_xref *xref, int number); +fz_rect pdf_bound_page(pdf_xref *xref, pdf_page *page); void pdf_free_page(fz_context *ctx, pdf_page *page); /* diff --git a/pdf/pdf_interpret.c b/pdf/pdf_interpret.c index c8b65dd6..fe0e1ce8 100644 --- a/pdf/pdf_interpret.c +++ b/pdf/pdf_interpret.c @@ -2574,10 +2574,16 @@ pdf_run_buffer(pdf_csi *csi, fz_obj *rdb, fz_buffer *contents) void pdf_run_page_with_usage(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm, char *event, fz_cookie *cookie) { + fz_context *ctx = dev->ctx; pdf_csi *csi; pdf_annot *annot; int flags; - fz_context *ctx = dev->ctx; + + /* Adjust CTM for rotation */ + fz_matrix page_ctm = fz_concat(fz_rotate(-page->rotate), fz_scale(1, -1)); + fz_rect mediabox = fz_transform_rect(page_ctm, page->mediabox); + page_ctm = fz_concat(page_ctm, fz_translate(-mediabox.x0, -mediabox.y0)); + ctm = fz_concat(page_ctm, ctm); if (page->transparency) fz_begin_group(dev, fz_transform_rect(ctm, page->mediabox), 1, 0, 0, 1); diff --git a/pdf/pdf_page.c b/pdf/pdf_page.c index e8b27ccc..536cd5ac 100644 --- a/pdf/pdf_page.c +++ b/pdf/pdf_page.c @@ -386,6 +386,16 @@ pdf_load_page(pdf_xref *xref, int number) return page; } +fz_rect +pdf_bound_page(pdf_xref *xref, pdf_page *page) +{ + fz_rect bounds, mediabox = fz_transform_rect(fz_rotate(page->rotate), page->mediabox); + bounds.x0 = bounds.y0 = 0; + bounds.x1 = mediabox.x1 - mediabox.x0; + bounds.y1 = mediabox.y1 - mediabox.y0; + return bounds; +} + void pdf_free_page(fz_context *ctx, pdf_page *page) { -- cgit v1.2.3