]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/xpdf/pdf-document.cc
New function to canonicalize sizing/painting a border.
[evince.git] / pdf / xpdf / pdf-document.cc
index b913be852a9fec45a6c80fbf32fab1520d5a5fa2..bb769cc9b21d804c7d1b1c6e32ff2101f6112a40 100644 (file)
@@ -23,9 +23,9 @@
 #include "pdf-document.h"
 #include "ev-ps-exporter.h"
 #include "ev-document-find.h"
+#include "ev-document-misc.h"
 #include "gpdf-g-switch.h"
 #include "ev-document-links.h"
-#include "ev-document-misc.h"
 #include "ev-document-security.h"
 #include "ev-document-thumbnails.h"
 
@@ -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;
 
-       if (document_validate_page (pdf_document)) {
+       /* set some default values */
+       if (width)
+               *width = 1;
+       if (height)
+               *height = 1;
+
+               
+       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 ();
        }
 }
 
@@ -402,12 +413,18 @@ pdf_document_render (EvDocument  *document,
 double
 pdf_document_find_get_progress (EvDocumentFind *document_find)
 {
-       PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search;
+       PdfDocumentSearch *search;
        int n_pages, pages_done;
+
+       search = PDF_DOCUMENT (document_find)->search;
+
+       if (search == NULL) {
+               return 0;
+       }
+
        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;
+               pages_done = search->search_page - search->start_page + 1;
        } else if (search->search_page == search->start_page) {
                pages_done = n_pages;
        } else {
@@ -449,7 +466,8 @@ pdf_document_find_get_result (EvDocumentFind *document_find,
        PdfDocumentSearch *search = pdf_document->search;
        GdkRectangle r;
 
-       if (search != NULL) {
+       if (search != NULL &&
+           n_result < search->current_page_results->len) {
                r = g_array_index (search->current_page_results,
                                   GdkRectangle, n_result);
 
@@ -644,7 +662,7 @@ pdf_document_find_begin (EvDocumentFind   *document,
 }
 
 static void
-pdf_document_find_cancel (EvDocumentFind   *document)
+pdf_document_find_cancel (EvDocumentFind *document)
 {
         PdfDocument *pdf_document = PDF_DOCUMENT (document);
 
@@ -796,6 +814,14 @@ build_link_from_action (PdfDocument *pdf_document,
 
        if (link_action == NULL) {
                link = ev_link_new_title (title);
+       } else if (link_action->getKind () == actionGoToR) {
+               g_warning ("actionGoToR links not implemented");
+       } else if (link_action->getKind () == actionLaunch) {
+               g_warning ("actionLaunch links not implemented");
+       } else if (link_action->getKind () == actionNamed) {
+               g_warning ("actionNamed links not implemented");
+       } else if (link_action->getKind () == actionMovie) {
+               g_warning ("actionMovie links not implemented");
        } else if (link_action->getKind () == actionGoTo) {
                LinkDest *link_dest;
                LinkGoTo *link_goto;
@@ -833,8 +859,13 @@ build_link_from_action (PdfDocument *pdf_document,
                link_uri = dynamic_cast <LinkURI *> (link_action);
                link = ev_link_new_external
                        (title, link_uri->getURI()->getCString());
-       } else if (link_action->getKind () == actionNamed) {
-                       /*Skip, for now */
+       } else if (link_action->getKind () == actionUnknown) {
+               LinkUnknown *link_unknown;
+
+               link_unknown = dynamic_cast <LinkUnknown *> (link_action);
+
+               g_warning ("Unknown link type %s",
+                          link_unknown->getAction()->getCString());
        }
 
        return link;
@@ -1125,6 +1156,7 @@ pdf_document_find_iface_init (EvDocumentFindIface *iface)
        iface->get_n_results = pdf_document_find_get_n_results;
        iface->get_result = pdf_document_find_get_result;
        iface->page_has_results = pdf_document_find_page_has_results;
+       iface->get_progress = pdf_document_find_get_progress;
         iface->cancel = pdf_document_find_cancel;
 }
 
@@ -1244,8 +1276,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())) {