diff options
author | Carlos 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) |
commit | 8e126907002877574ec86fcbd184e56dc8f74683 (patch) | |
tree | e64bd193d556c898aa94a60ae18d98a5fa3ddc5d /libdocument | |
parent | 1e6e971293804f30b9e06c0131b4445a5ce17445 (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.c | 16 | ||||
-rw-r--r-- | libdocument/ev-document-images.h | 15 | ||||
-rw-r--r-- | libdocument/ev-image.c | 41 | ||||
-rw-r--r-- | libdocument/ev-image.h | 15 |
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 */ |