summaryrefslogtreecommitdiff
path: root/pdf
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2012-01-12 01:12:28 +0100
committerTor Andersson <tor.andersson@artifex.com>2012-01-12 01:12:28 +0100
commit9994b3f49db7bd925a7ae7874cbc99025469ee9e (patch)
treec718919738e0c70cc94959aad1b5b4997f11389f /pdf
parent09086b236af6e49f2f090f80a450b1d82f217f30 (diff)
downloadmupdf-9994b3f49db7bd925a7ae7874cbc99025469ee9e.tar.xz
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.
Diffstat (limited to 'pdf')
-rw-r--r--pdf/mupdf.h1
-rw-r--r--pdf/pdf_interpret.c8
-rw-r--r--pdf/pdf_page.c10
3 files changed, 18 insertions, 1 deletions
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)
{