Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf/ev-poppler.cc
diff options
context:
space:
mode:
authorCarlos 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)
commit6b9aeb5d0b86d0002db107ad79af550a4e39f07a (patch)
tree1a26d73986f440d54647da1e1064b79990415859 /pdf/ev-poppler.cc
parent560065af6f0b02dcb360c3115398f992354865e8 (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.cc49
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,