]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/ev-poppler.cc
Updated Catalan translation.
[evince.git] / pdf / ev-poppler.cc
index 1dcc7a5e98ac2f726a7b30da4385de692e220e18..4fb1d9a2e50c957bad2db783a8fde10a85d42c59 100644 (file)
@@ -720,16 +720,26 @@ ev_link_from_dest (PopplerAction *action)
                                             action->goto_dest.dest->zoom);
                break;
        case POPPLER_DEST_FIT:
-               unimplemented_dest = "POPPLER_DEST_FIT";
+               link = ev_link_new_page_fit (action->any.title,
+                                            action->goto_dest.dest->page_num - 1);
                break;
        case POPPLER_DEST_FITH:
-               unimplemented_dest = "POPPLER_DEST_FITH";
+               link = ev_link_new_page_fith (action->any.title,
+                                             action->goto_dest.dest->page_num - 1,
+                                             action->goto_dest.dest->top);
                break;
        case POPPLER_DEST_FITV:
-               unimplemented_dest = "POPPLER_DEST_FITV";
+               link = ev_link_new_page_fitv (action->any.title,
+                                             action->goto_dest.dest->page_num - 1,
+                                             action->goto_dest.dest->left);
                break;
        case POPPLER_DEST_FITR:
-               unimplemented_dest = "POPPLER_DEST_FITR";
+               link = ev_link_new_page_fitr (action->any.title,
+                                             action->goto_dest.dest->page_num - 1,
+                                             action->goto_dest.dest->left,
+                                             action->goto_dest.dest->bottom,
+                                             action->goto_dest.dest->right,
+                                             action->goto_dest.dest->top);
                break;
        case POPPLER_DEST_FITB:
                unimplemented_dest = "POPPLER_DEST_FITB";
@@ -765,7 +775,7 @@ ev_link_from_action (PopplerAction *action)
 
        switch (action->type) {
        case POPPLER_ACTION_UNKNOWN:
-               g_warning ("Unknown action"); 
+               link = ev_link_new_title (title);
                break;
        case POPPLER_ACTION_GOTO_DEST:
                link = ev_link_from_dest (action);
@@ -774,7 +784,8 @@ ev_link_from_action (PopplerAction *action)
                unimplemented_action = "POPPLER_ACTION_GOTO_REMOTE";
                break;
        case POPPLER_ACTION_LAUNCH:
-               unimplemented_action = "POPPLER_ACTION_LAUNCH";
+               link = ev_link_new_launch (title, action->launch.file_name,
+                                          action->launch.params);
                break;
        case POPPLER_ACTION_URI:
                link = ev_link_new_external (title, action->uri.uri);
@@ -816,16 +827,22 @@ build_tree (PdfDocument      *pdf_document,
                action = poppler_index_iter_get_action (iter);
                expand = poppler_index_iter_is_open (iter);
                if (action) {
+                       char *title_markup;
+
                        gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
                        link = ev_link_from_action (action);
                        poppler_action_free (action);
+                       title_markup = g_markup_escape_text (ev_link_get_title (link), -1);
 
                        gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
-                                           EV_DOCUMENT_LINKS_COLUMN_MARKUP, ev_link_get_title (link),
+                                           EV_DOCUMENT_LINKS_COLUMN_MARKUP, title_markup,
                                            EV_DOCUMENT_LINKS_COLUMN_LINK, link,
                                            EV_DOCUMENT_LINKS_COLUMN_EXPAND, expand,
                                            -1);
+
+                       g_free (title_markup);
                        g_object_unref (link);
+
                        child = poppler_index_iter_get_child (iter);
                        if (child)
                                build_tree (pdf_document, model, &tree_iter, child);
@@ -869,11 +886,10 @@ static GdkPixbuf *
 make_thumbnail_for_size (PdfDocument   *pdf_document,
                         gint           page,
                         int            rotation,
-                        gint           size,
-                        gboolean       border)
+                        gint           size)
 {
        PopplerPage *poppler_page;
-       GdkPixbuf *pixbuf, *border_pixbuf;
+       GdkPixbuf *pixbuf;
        int width, height;
        double scale;
        gdouble unscaled_width, unscaled_height;
@@ -894,7 +910,7 @@ make_thumbnail_for_size (PdfDocument   *pdf_document,
                height = temp;
        }
 
-       pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
+       pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
                                 width, height);
        gdk_pixbuf_fill (pixbuf, 0xffffffff);
 
@@ -902,11 +918,6 @@ make_thumbnail_for_size (PdfDocument   *pdf_document,
                                       width, height,
                                       scale, rotation, pixbuf);
        
-        if (border) {          
-               border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, rotation, pixbuf);
-               g_object_unref (pixbuf);
-               pixbuf = border_pixbuf;
-       }               
 
        g_object_unref (poppler_page);
 
@@ -918,11 +929,12 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
                                       gint                  page,
                                       gint                  rotation,
                                       gint                  size,
-                                      gboolean              border)
+                                      gboolean              border)
 {
        PdfDocument *pdf_document;
        PopplerPage *poppler_page;
        GdkPixbuf *pixbuf;
+       GdkPixbuf *border_pixbuf;
 
        pdf_document = PDF_DOCUMENT (document_thumbnails);
 
@@ -931,20 +943,17 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
 
        pixbuf = poppler_page_get_thumbnail (poppler_page);
        
-       if (pixbuf != NULL) {
-               /* The document provides its own thumbnails. */
-               if (border) {
-                       GdkPixbuf *real_pixbuf;
-
-                       real_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, rotation, pixbuf);
-                       g_object_unref (pixbuf);
-                       pixbuf = real_pixbuf;
-               }
-       } else {
+       if (pixbuf == NULL) {
                /* There is no provided thumbnail.  We need to make one. */
-               pixbuf = make_thumbnail_for_size (pdf_document, page, rotation, size, border);
+               pixbuf = make_thumbnail_for_size (pdf_document, page, rotation, size);
        }
 
+        if (border) {          
+               border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, rotation, pixbuf);
+               g_object_unref (pixbuf);
+               pixbuf = border_pixbuf;
+       }               
+
        g_object_unref (poppler_page);
        
        return pixbuf;
@@ -974,13 +983,8 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail
                double page_width, page_height;
 
                poppler_page_get_size (poppler_page, &page_width, &page_height);
-               if (page_width > page_height) {
-                       *width = size;
-                       *height = (int) (size * page_height / page_width);
-               } else {
-                       *width = (int) (size * page_width / page_height);
-                       *height = size;
-               }
+               *width = size;
+               *height = (int) (size * page_height / page_width);
        }
        g_object_unref (poppler_page);
 }
@@ -1139,9 +1143,7 @@ pdf_document_find_page_has_results (EvDocumentFind *document_find,
 {
        PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search;
 
-       g_return_val_if_fail (search != NULL, FALSE);
-
-       return search->pages[page] != NULL;
+       return search && search->pages[page] != NULL;
 }
 
 double