Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/libdocument
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2008-01-19 17:19:42 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2008-01-19 17:19:42 (GMT)
commit8e126907002877574ec86fcbd184e56dc8f74683 (patch)
treee64bd193d556c898aa94a60ae18d98a5fa3ddc5d /libdocument
parent1e6e971293804f30b9e06c0131b4445a5ce17445 (diff)
Do not render images when rendering the page but on demand. It reduces the
2008-01-19 Carlos Garcia Campos <carlosgc@gnome.org> * configure.ac: * backend/pdf/ev-poppler.cc: (pdf_document_images_get_image_mapping), (pdf_document_images_get_image), (pdf_document_document_images_iface_init): * libdocument/ev-document-images.[ch]: (ev_document_images_get_image_mapping), (ev_document_images_get_image): * libdocument/ev-image.[ch]: (ev_image_new), (ev_image_get_page), (ev_image_get_id), (ev_image_save_tmp): * shell/ev-jobs.c: (ev_job_render_run): * shell/ev-view.c: (ev_view_drag_data_get): * shell/ev-window.c: (image_save_dialog_response_cb), (ev_view_popup_cmd_copy_image): Do not render images when rendering the page but on demand. It reduces the memory comsumption. svn path=/trunk/; revision=2835
Diffstat (limited to 'libdocument')
-rw-r--r--libdocument/ev-document-images.c16
-rw-r--r--libdocument/ev-document-images.h15
-rw-r--r--libdocument/ev-image.c41
-rw-r--r--libdocument/ev-image.h15
4 files changed, 67 insertions, 20 deletions
diff --git a/libdocument/ev-document-images.c b/libdocument/ev-document-images.c
index 1de728f..874a24d 100644
--- a/libdocument/ev-document-images.c
+++ b/libdocument/ev-document-images.c
@@ -42,15 +42,19 @@ ev_document_images_get_type (void)
}
GList *
-ev_document_images_get_images (EvDocumentImages *document_images,
- gint page)
+ev_document_images_get_image_mapping (EvDocumentImages *document_images,
+ gint page)
{
EvDocumentImagesIface *iface = EV_DOCUMENT_IMAGES_GET_IFACE (document_images);
- GList *retval;
- retval = iface->get_images (document_images, page);
-
- return retval;
+ return iface->get_image_mapping (document_images, page);
}
+GdkPixbuf *
+ev_document_images_get_image (EvDocumentImages *document_images,
+ EvImage *image)
+{
+ EvDocumentImagesIface *iface = EV_DOCUMENT_IMAGES_GET_IFACE (document_images);
+ return iface->get_image (document_images, image);
+}
diff --git a/libdocument/ev-document-images.h b/libdocument/ev-document-images.h
index 28eee46..d8699b9 100644
--- a/libdocument/ev-document-images.h
+++ b/libdocument/ev-document-images.h
@@ -25,6 +25,7 @@
#include <glib.h>
#include "ev-document.h"
+#include "ev-image.h"
G_BEGIN_DECLS
@@ -42,13 +43,17 @@ struct _EvDocumentImagesIface {
GTypeInterface base_iface;
/* Methods */
- GList *(* get_images) (EvDocumentImages *document_images,
- gint page);
+ GList *(* get_image_mapping) (EvDocumentImages *document_images,
+ gint page);
+ GdkPixbuf *(* get_image) (EvDocumentImages *document_images,
+ EvImage *image);
};
-GType ev_document_images_get_type (void) G_GNUC_CONST;
-GList *ev_document_images_get_images (EvDocumentImages *document_images,
- gint page);
+GType ev_document_images_get_type (void) G_GNUC_CONST;
+GList *ev_document_images_get_image_mapping (EvDocumentImages *document_images,
+ gint page);
+GdkPixbuf *ev_document_images_get_image (EvDocumentImages *document_images,
+ EvImage *image);
G_END_DECLS
diff --git a/libdocument/ev-image.c b/libdocument/ev-image.c
index 1bf17f2..4276dd4 100644
--- a/libdocument/ev-image.c
+++ b/libdocument/ev-image.c
@@ -19,10 +19,13 @@
#include <config.h>
#include <glib/gstdio.h>
+#include "ev-document-misc.h"
#include "ev-file-helpers.h"
#include "ev-image.h"
struct _EvImagePrivate {
+ gint page;
+ gint id;
GdkPixbuf *pixbuf;
gchar *tmp_uri;
};
@@ -70,6 +73,19 @@ ev_image_init (EvImage *image)
}
EvImage *
+ev_image_new (gint page,
+ gint img_id)
+{
+ EvImage *image;
+
+ image = EV_IMAGE (g_object_new (EV_TYPE_IMAGE, NULL));
+ image->priv->page = page;
+ image->priv->id = img_id;
+
+ return image;
+}
+
+EvImage *
ev_image_new_from_pixbuf (GdkPixbuf *pixbuf)
{
EvImage *image;
@@ -82,6 +98,22 @@ ev_image_new_from_pixbuf (GdkPixbuf *pixbuf)
return image;
}
+gint
+ev_image_get_page (EvImage *image)
+{
+ g_return_val_if_fail (EV_IS_IMAGE (image), -1);
+
+ return image->priv->page;
+}
+
+gint
+ev_image_get_id (EvImage *image)
+{
+ g_return_val_if_fail (EV_IS_IMAGE (image), -1);
+
+ return image->priv->id;
+}
+
GdkPixbuf *
ev_image_get_pixbuf (EvImage *image)
{
@@ -92,19 +124,20 @@ ev_image_get_pixbuf (EvImage *image)
}
const gchar *
-ev_image_save_tmp (EvImage *image)
+ev_image_save_tmp (EvImage *image,
+ GdkPixbuf *pixbuf)
{
GError *error = NULL;
g_return_val_if_fail (EV_IS_IMAGE (image), NULL);
- g_return_val_if_fail (GDK_IS_PIXBUF (image->priv->pixbuf), NULL);
+ g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
if (image->priv->tmp_uri)
return image->priv->tmp_uri;
image->priv->tmp_uri = ev_tmp_filename ("image");
- gdk_pixbuf_save (image->priv->pixbuf,
- image->priv->tmp_uri, "png", &error,
+ gdk_pixbuf_save (pixbuf, image->priv->tmp_uri,
+ "png", &error,
"compression", "3", NULL);
if (!error)
return image->priv->tmp_uri;
diff --git a/libdocument/ev-image.h b/libdocument/ev-image.h
index 6688e7a..8b5b595 100644
--- a/libdocument/ev-image.h
+++ b/libdocument/ev-image.h
@@ -46,12 +46,17 @@ struct _EvImageClass {
GObjectClass base_class;
};
-GType ev_image_get_type (void) G_GNUC_CONST;
-EvImage *ev_image_new_from_pixbuf (GdkPixbuf *pixbuf);
+GType ev_image_get_type (void) G_GNUC_CONST;
+EvImage *ev_image_new (gint page,
+ gint img_id);
+EvImage *ev_image_new_from_pixbuf (GdkPixbuf *pixbuf);
-GdkPixbuf *ev_image_get_pixbuf (EvImage *image);
-const gchar *ev_image_save_tmp (EvImage *image);
-const gchar *ev_image_get_tmp_uri (EvImage *image);
+gint ev_image_get_id (EvImage *image);
+gint ev_image_get_page (EvImage *image);
+GdkPixbuf *ev_image_get_pixbuf (EvImage *image);
+const gchar *ev_image_save_tmp (EvImage *image,
+ GdkPixbuf *pixbuf);
+const gchar *ev_image_get_tmp_uri (EvImage *image);
/* Image Mapping stuff */