]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/xpdf/pdf-document.cc
Add «nb» to ALL_LINGUAS too.
[evince.git] / pdf / xpdf / pdf-document.cc
index 5a7304c6162afe6d5b73fea8b138a40cb822dcc7..1855222562df660d3f88a4fe77f4f9bdf4482865 100644 (file)
@@ -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())) {