summaryrefslogtreecommitdiff
path: root/apps/mozilla
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@hotmail.com>2009-07-09 02:03:19 +0200
committerSebastian Rasmussen <sebras@hotmail.com>2009-07-09 02:03:19 +0200
commit1ef9dff0e7ad7112025efe273ae855f6d2ad5f36 (patch)
tree08240b59b6ab17fc48ef16f1c5160ed447285498 /apps/mozilla
parent60a1411f016d2fecce12abf715a10d7e7faf886f (diff)
downloadmupdf-1ef9dff0e7ad7112025efe273ae855f6d2ad5f36.tar.xz
Parse page tree on-demand instead of parsing the entire tree after reading xref.
Diffstat (limited to 'apps/mozilla')
-rw-r--r--apps/mozilla/moz_main.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/apps/mozilla/moz_main.c b/apps/mozilla/moz_main.c
index b9cf0079..52deb38f 100644
--- a/apps/mozilla/moz_main.c
+++ b/apps/mozilla/moz_main.c
@@ -117,15 +117,7 @@ void pdfmoz_open(pdfmoz_t *moz, char *filename)
pdfmoz_warn(moz, "Invalid password.");
}
- /*
- * Load page tree
- */
-
- error = pdf_loadpagetree(&pages, moz->xref);
- if (error)
- pdfmoz_error(moz, error);
-
- moz->pagecount = pdf_getpagecount(pages);
+ moz->pagecount = moz->xrex->pagecount;
moz->pages = fz_malloc(sizeof(page_t) * moz->pagecount);
for (i = 0; i < moz->pagecount; i++)
@@ -288,28 +280,32 @@ void pdfmoz_gotouri(pdfmoz_t *moz, fz_obj *uri)
int pdfmoz_getpagenum(pdfmoz_t *moz, fz_obj *obj)
{
- int oid = fz_tonum(obj);
- int i;
- for (i = 0; i < moz->pagecount; i++)
- if (fz_tonum(moz->pages[i].obj) == oid)
- return i;
- return 0;
+ fz_error error;
+ int page;
+ int i, y = 0;
+
+ error = pdf_findpageobject(moz->xref, obj, &page);
+ if (error)
+ pdfmoz_error(moz, error);
+
+ return page;
}
void pdfmoz_gotopage(pdfmoz_t *moz, fz_obj *obj)
{
- int oid = fz_tonum(obj);
+ fz_error error;
+ int page;
int i, y = 0;
- for (i = 0; i < moz->pagecount; i++)
- {
- if (fz_tonum(moz->pages[i].obj) == oid)
- {
- SetScrollPos(moz->hwnd, SB_VERT, y, TRUE);
- InvalidateRect(moz->hwnd, NULL, FALSE);
- return;
- }
+
+ error = pdf_findpageobject(moz->xref, obj, &page);
+ if (error)
+ pdfmoz_error(moz, error);
+
+ for (i = 0; i < page; i++)
y += moz->pages[i].px;
- }
+
+ SetScrollPos(moz->hwnd, SB_VERT, y, TRUE);
+ InvalidateRect(moz->hwnd, NULL, FALSE);
}
void pdfmoz_onmouse(pdfmoz_t *moz, int x, int y, int click)