X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=pdf%2Fxpdf%2Fpdf-document.cc;h=1855222562df660d3f88a4fe77f4f9bdf4482865;hb=5932479cc8c371a385616b5909df558a091b7111;hp=5a7304c6162afe6d5b73fea8b138a40cb822dcc7;hpb=a521d16eb7f59cbda6881b66e0e7a00125377cd8;p=evince.git diff --git a/pdf/xpdf/pdf-document.cc b/pdf/xpdf/pdf-document.cc index 5a7304c6..18552225 100644 --- a/pdf/xpdf/pdf-document.cc +++ b/pdf/xpdf/pdf-document.cc @@ -350,21 +350,32 @@ pdf_document_set_page_offset (EvDocument *document, static void pdf_document_get_page_size (EvDocument *document, + int page, int *width, int *height) { PdfDocument *pdf_document = PDF_DOCUMENT (document); + Page *the_page; + + /* set some default values */ + if (width) + *width = 1; + if (height) + *height = 1; - if (document_validate_page (pdf_document)) { + + if (page == -1 && document_validate_page (pdf_document)) { if (width) *width = pdf_document->out->getBitmapWidth(); if (height) *height = pdf_document->out->getBitmapHeight(); - } else { - if (width) - *width = 1; - if (height) - *height = 1; + return; + } + + the_page = pdf_document->doc->getCatalog ()->getPage (page); + if (the_page) { + *width = (int) the_page->getWidth (); + *height = (int) the_page->getHeight (); } } @@ -399,6 +410,24 @@ pdf_document_render (EvDocument *document, draw.width, draw.height); } +double +pdf_document_find_get_progress (EvDocumentFind *document_find) +{ + PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search; + int n_pages, pages_done; + + n_pages = ev_document_get_n_pages (EV_DOCUMENT (document_find)); + if (search->search_page > search->start_page) { + pages_done = search->search_page - search->start_page; + } else if (search->search_page == search->start_page) { + pages_done = n_pages; + } else { + pages_done = n_pages - search->start_page + search->search_page; + } + + return pages_done / (double) n_pages; +} + int pdf_document_find_page_has_results (EvDocumentFind *document_find, int page) @@ -427,15 +456,16 @@ pdf_document_find_get_result (EvDocumentFind *document_find, int n_result, GdkRectangle *rectangle) { - PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search; + PdfDocument *pdf_document = PDF_DOCUMENT (document_find); + PdfDocumentSearch *search = pdf_document->search; GdkRectangle r; if (search != NULL) { r = g_array_index (search->current_page_results, GdkRectangle, n_result); - rectangle->x = r.x; - rectangle->y = r.y; + rectangle->x = r.x + pdf_document->page_x_offset; + rectangle->y = r.y + pdf_document->page_y_offset; rectangle->width = r.width; rectangle->height = r.height; @@ -498,7 +528,7 @@ pdf_document_search_idle_callback (void *data) { PdfDocumentSearch *search = (PdfDocumentSearch*) data; PdfDocument *pdf_document = search->document; - int n_pages; + int n_pages, changed_page; double xMin, yMin, xMax, yMax; /* Note that PDF page count is 1 through n_pages INCLUSIVE @@ -533,11 +563,7 @@ pdf_document_search_idle_callback (void *data) search->other_page_flags[search->search_page] = 0; } - if (search->search_page != search->start_page) { - ev_document_find_changed (EV_DOCUMENT_FIND (pdf_document), - search->search_page); - return TRUE; - } + changed_page = search->start_page; search->search_page += 1; if (search->search_page > n_pages) { @@ -545,6 +571,12 @@ pdf_document_search_idle_callback (void *data) search->search_page = 1; } + if (search->search_page != search->start_page) { + ev_document_find_changed (EV_DOCUMENT_FIND (pdf_document), + changed_page); + return TRUE; + } + end_search: /* We're done. */ search->idle = 0; /* will return FALSE to remove */ @@ -1223,8 +1255,7 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail Thumb *thumb = NULL; gdouble page_ratio; - /* getPage seems to want page + 1 for some reason; */ - the_page = pdf_document->doc->getCatalog ()->getPage (page + 1); + the_page = pdf_document->doc->getCatalog ()->getPage (page); the_page->getThumb (&the_thumb); if (!(the_thumb.isNull () || the_thumb.isNone())) {