Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/libview/ev-view.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2010-05-31 15:57:33 (GMT)
committer Carlos Garcia Campos <carlosgc@gnome.org>2010-05-31 16:57:59 (GMT)
commitd375c36972ff3a01b7979984b5a1043eb4c807b0 (patch)
tree17f63422f7a6a9c3285a199bb6386e77f340473d /libview/ev-view.c
parent51261c0750f10aa8cc8687857a0a3b932fd87e3c (diff)
Use a dynamic pixbuf cache size based on document page size
Instead of using a static number of pages to cache, we use a size in bytes, and the number of pages that will be cached depends on the current zoom level. It allows us caching more pages for lower scale factors and increase zoom level by caching fewer pages. See bug #303365.
Diffstat (limited to 'libview/ev-view.c')
-rw-r--r--libview/ev-view.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 7cc0f79..c26aabc 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -4554,7 +4554,7 @@ setup_caches (EvView *view)
gboolean inverted_colors;
view->height_to_page_cache = ev_view_get_height_to_page_cache (view);
- view->pixbuf_cache = ev_pixbuf_cache_new (GTK_WIDGET (view), view->document);
+ view->pixbuf_cache = ev_pixbuf_cache_new (GTK_WIDGET (view), view->model, view->pixbuf_cache_size);
view->page_cache = ev_page_cache_new (view->document);
inverted_colors = ev_document_model_get_inverted_colors (view->model);
ev_pixbuf_cache_set_inverted_colors (view->pixbuf_cache, inverted_colors);
@@ -4575,6 +4575,31 @@ clear_caches (EvView *view)
}
}
+/**
+ * ev_view_set_page_cache_size:
+ * @view:
+ * @cache_size:
+ *
+ * Sets the maximum size in bytes that will be used to cache
+ * rendered pages. Use 0 to disable caching rendered pages.
+ *
+ * Note that this limit doesn't affect the current visible page range,
+ * which will always be rendered. In order to limit the total memory used
+ * you have to use ev_document_model_set_max_scale() too.
+ *
+ */
+void
+ev_view_set_page_cache_size (EvView *view,
+ gsize cache_size)
+{
+ if (view->pixbuf_cache_size == cache_size)
+ return;
+
+ view->pixbuf_cache_size = cache_size;
+ if (view->pixbuf_cache)
+ ev_pixbuf_cache_set_max_size (view->pixbuf_cache, cache_size);
+}
+
void
ev_view_set_loading (EvView *view,
gboolean loading)