X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=pdf%2Fev-poppler.cc;h=417e1aedd9e73d357809feba833d682fc5ba06bf;hb=86ed0977c908b39bbc0c6a14560262af4c3c5462;hp=769c78a7a1f684973f1e3eaf0b1a742344e158f5;hpb=9f8ec2d921de1c31da212c8486ab2bda85d51bf9;p=evince.git diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc index 769c78a7..417e1aed 100644 --- a/pdf/ev-poppler.cc +++ b/pdf/ev-poppler.cc @@ -705,7 +705,7 @@ pdf_document_links_has_document_links (EvDocumentLinks *document_links) static EvLink * ev_link_from_dest (PopplerAction *action) { - EvLink *link; + EvLink *link = NULL; const char *unimplemented_dest = NULL; switch (action->goto_dest.dest->type) { @@ -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"; @@ -747,7 +757,9 @@ ev_link_from_dest (PopplerAction *action) unimplemented_dest); } - link = ev_link_new_page (action->any.title, action->goto_dest.dest->page_num - 1); + if (link == NULL) { + link = ev_link_new_page (action->any.title, action->goto_dest.dest->page_num - 1); + } return link; } @@ -763,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); @@ -772,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); @@ -814,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); @@ -867,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, *sub_pixbuf; + GdkPixbuf *pixbuf; int width, height; double scale; gdouble unscaled_width, unscaled_height; @@ -884,38 +902,25 @@ make_thumbnail_for_size (PdfDocument *pdf_document, poppler_page_get_size (poppler_page, &unscaled_width, &unscaled_height); scale = width / unscaled_width; - if (border) { - pixbuf = ev_document_misc_get_thumbnail_frame (width, height, rotation, NULL); - - width = gdk_pixbuf_get_width (pixbuf); - height = gdk_pixbuf_get_height (pixbuf); - sub_pixbuf = gdk_pixbuf_new_subpixbuf (pixbuf, - 1, 1, - width - 1, height - 1); - } else { - /* rotate */ - if (rotation == 90 || rotation == 270) { - int temp; - temp = width; - width = height; - height = temp; - } - - pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, - width, height); - gdk_pixbuf_fill (pixbuf, 0xffffffff); - sub_pixbuf = gdk_pixbuf_new_subpixbuf (pixbuf, - 0, 0, - width, height); + /* rotate */ + if (rotation == 90 || rotation == 270) { + int temp; + temp = width; + width = height; + height = temp; } + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, + width, height); + gdk_pixbuf_fill (pixbuf, 0xffffffff); + poppler_page_render_to_pixbuf (poppler_page, 0, 0, width, height, - scale, rotation, sub_pixbuf); - - g_object_unref (G_OBJECT (sub_pixbuf)); + scale, rotation, pixbuf); + g_object_unref (poppler_page); + return pixbuf; } @@ -924,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); @@ -937,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; @@ -980,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); } @@ -1145,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