diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2007-01-07 16:28:00 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2007-01-07 16:28:00 (GMT) |
commit | 6b9aeb5d0b86d0002db107ad79af550a4e39f07a (patch) | |
tree | 1a26d73986f440d54647da1e1064b79990415859 /pdf/ev-poppler.cc | |
parent | 560065af6f0b02dcb360c3115398f992354865e8 (diff) |
Add image handling support. Fixes bugs #310008 and #325047. Images
2007-01-07 Carlos Garcia Campos <carlosgc@gnome.org>
* configure.ac:
* data/evince-ui.xml:
* pdf/ev-poppler.cc: (pdf_document_images_get_images),
(pdf_document_document_images_iface_init):
* backend/Makefile.am:
* backend/ev-document-images.[ch]:
* backend/ev-image.[ch]:
* lib/ev-file-helpers.[ch]: (ev_tmp_filename):
* shell/ev-jobs.[ch]: (ev_job_render_new), (ev_job_render_run),
(ev_job_xfer_run):
* shell/ev-pixbuf-cache.[ch]: (dispose_cache_job_info),
(move_one_job), (copy_job_to_job_info), (add_job_if_needed),
(ev_pixbuf_cache_get_image_mapping):
* shell/ev-window.c: (view_menu_link_popup), (view_menu_image_popup),
(view_menu_popup_cb), (ev_window_dispose),
(image_save_dialog_response_cb), (ev_view_popup_cmd_save_image_as),
(ev_view_popup_cmd_copy_image):
* shell/ev-view-private.h:
* shell/ev-view.c: (ev_view_get_image_at_location),
(ev_view_do_popup_menu), (ev_view_popup_menu),
(ev_view_button_press_event), (ev_view_drag_data_get),
(ev_view_drag_motion), (ev_view_drag_data_received),
(ev_view_motion_notify_event), (ev_view_button_release_event),
(ev_view_finalize), (ev_view_class_init):
Add image handling support. Fixes bugs #310008 and #325047. Images
selection is not supported yet.
svn path=/trunk/; revision=2194
Diffstat (limited to 'pdf/ev-poppler.cc')
-rw-r--r-- | pdf/ev-poppler.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc index 479a741..2068998 100644 --- a/pdf/ev-poppler.cc +++ b/pdf/ev-poppler.cc @@ -35,12 +35,14 @@ #include "ev-document-find.h" #include "ev-document-misc.h" #include "ev-document-links.h" +#include "ev-document-images.h" #include "ev-document-fonts.h" #include "ev-document-security.h" #include "ev-document-thumbnails.h" #include "ev-document-transition.h" #include "ev-selection.h" #include "ev-attachment.h" +#include "ev-image.h" typedef struct { PdfDocument *document; @@ -83,6 +85,7 @@ static void pdf_document_document_iface_init (EvDocumentIface static void pdf_document_security_iface_init (EvDocumentSecurityIface *iface); static void pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static void pdf_document_document_links_iface_init (EvDocumentLinksIface *iface); +static void pdf_document_document_images_iface_init (EvDocumentImagesIface *iface); static void pdf_document_document_fonts_iface_init (EvDocumentFontsIface *iface); static void pdf_document_find_iface_init (EvDocumentFindIface *iface); static void pdf_document_file_exporter_iface_init (EvFileExporterIface *iface); @@ -113,6 +116,8 @@ G_DEFINE_TYPE_WITH_CODE (PdfDocument, pdf_document, G_TYPE_OBJECT, pdf_document_document_thumbnails_iface_init); G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS, pdf_document_document_links_iface_init); + G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_IMAGES, + pdf_document_document_images_iface_init); G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FONTS, pdf_document_document_fonts_iface_init); G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND, @@ -1123,6 +1128,50 @@ pdf_document_document_links_iface_init (EvDocumentLinksIface *iface) iface->find_link_dest = pdf_document_links_find_link_dest; } +static GList * +pdf_document_images_get_images (EvDocumentImages *document_images, + gint page) +{ + GList *retval = NULL; +#ifdef HAVE_POPPLER_PAGE_GET_IMAGE_MAPPING + PdfDocument *pdf_document; + PopplerPage *poppler_page; + GList *mapping_list; + GList *list; + + pdf_document = PDF_DOCUMENT (document_images); + poppler_page = poppler_document_get_page (pdf_document->document, page); + mapping_list = poppler_page_get_image_mapping (poppler_page); + + for (list = mapping_list; list; list = list->next) { + PopplerImageMapping *image_mapping; + EvImageMapping *ev_image_mapping; + + image_mapping = (PopplerImageMapping *)list->data; + + ev_image_mapping = g_new (EvImageMapping, 1); + + ev_image_mapping->image = ev_image_new_from_pixbuf (image_mapping->image); + ev_image_mapping->x1 = image_mapping->area.x1; + ev_image_mapping->x2 = image_mapping->area.x2; + ev_image_mapping->y1 = image_mapping->area.y1; + ev_image_mapping->y2 = image_mapping->area.y2; + + retval = g_list_prepend (retval, ev_image_mapping); + } + + poppler_page_free_image_mapping (mapping_list); + g_object_unref (poppler_page); +#endif /* HAVE_POPPLER_PAGE_GET_IMAGE_MAPPING */ + return retval; +} + +static void +pdf_document_document_images_iface_init (EvDocumentImagesIface *iface) +{ + iface->get_images = pdf_document_images_get_images; +} + static GdkPixbuf * make_thumbnail_for_size (PdfDocument *pdf_document, gint page, |