static void get_page_y_offset (EvView *view,
int page,
int *y_offset);
-static gboolean get_page_extents (EvView *view,
- gint page,
- GdkRectangle *page_area,
- GtkBorder *border);
static void view_rect_to_doc_rect (EvView *view,
GdkRectangle *view_rect,
GdkRectangle *page_area,
GdkRectangle page_area;
GtkBorder border;
- get_page_extents (view, view->current_page, &page_area, &border);
+ ev_view_get_page_extents (view, view->current_page, &page_area, &border);
x = page_area.x;
y = page_area.y;
} else {
for (i = 0; i < ev_document_get_n_pages (view->document); i++) {
- get_page_extents (view, i, &page_area, &border);
+ ev_view_get_page_extents (view, i, &page_area, &border);
if (gdk_rectangle_intersect (¤t_area, &page_area, &unused)) {
area = unused.width * unused.height;
ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
view->start_page,
view->end_page,
- view->rotation,
- view->scale,
view->selection_info.selections);
if (ev_pixbuf_cache_get_surface (view->pixbuf_cache, view->current_page))
return gtk_adjustment_get_page_size (adjustment);
gtk_widget_get_allocation (widget, &allocation);
- get_page_extents (view, page, &page_area, &border);
+ ev_view_get_page_extents (view, page, &page_area, &border);
rect.x = page_area.x + view->scroll_x;
rect.y = view->scroll_y + (scroll == GTK_SCROLL_PAGE_BACKWARD ? 5 : allocation.height - 5);
rect.width = page_area.width;
return;
}
-static gboolean
-get_page_extents (EvView *view,
- gint page,
- GdkRectangle *page_area,
- GtkBorder *border)
+gboolean
+ev_view_get_page_extents (EvView *view,
+ gint page,
+ GdkRectangle *page_area,
+ GtkBorder *border)
{
GtkWidget *widget;
int width, height;
g_assert_not_reached ();
}
- get_page_extents (view, page, &page_area, &border);
+ ev_view_get_page_extents (view, page, &page_area, &border);
view_x = CLAMP (x * view->scale, 0, page_area.width);
view_y = CLAMP (y * view->scale, 0, page_area.height);
g_assert_not_reached ();
}
- get_page_extents (view, page, &page_area, &border);
+ ev_view_get_page_extents (view, page, &page_area, &border);
view_rect->x = x * view->scale + page_area.x;
view_rect->y = y * view->scale + page_area.y;
GdkRectangle page_area;
GtkBorder border;
- if (! get_page_extents (view, i, &page_area, &border))
+ if (! ev_view_get_page_extents (view, i, &page_area, &border))
continue;
if ((x >= page_area.x + border.left) &&
view_rect.width = width;
view_rect.height = height;
- get_page_extents (view, child->page, &page_area, &border);
+ ev_view_get_page_extents (view, child->page, &page_area, &border);
view_rect_to_doc_rect (view, &view_rect, &page_area, &doc_rect);
child->orig_x = doc_rect.x1;
child->orig_y = doc_rect.y1;
GtkBorder border;
gboolean page_ready = TRUE;
- if (!get_page_extents (view, i, &page_area, &border))
+ if (!ev_view_get_page_extents (view, i, &page_area, &border))
continue;
page_area.x -= view->scroll_x;
if (gtk_drag_get_source_widget (context) == widget)
gdk_drag_status (context, 0, time);
else
- gdk_drag_status (context, context->suggested_action, time);
+ gdk_drag_status (context, gdk_drag_context_get_suggested_action (context), time);
return TRUE;
}
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);
}
}
+/**
+ * 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)
GdkRectangle page_area;
GtkBorder border;
- if (get_page_extents (view, i, &page_area, &border)) {
+ if (ev_view_get_page_extents (view, i, &page_area, &border)) {
GdkRectangle overlap;
if (gdk_rectangle_intersect (&page_area, &view_rect, &overlap)) {
GdkRectangle page_area;
GtkBorder border;
- get_page_extents (view, i, &page_area, &border);
+ ev_view_get_page_extents (view, i, &page_area, &border);
if (gdk_rectangle_point_in (&page_area, start) ||
gdk_rectangle_point_in (&page_area, stop)) {
if (first == n_pages)
selection->rect.x2 = width;
selection->rect.y2 = height;
- get_page_extents (view, i, &page_area, &border);
+ ev_view_get_page_extents (view, i, &page_area, &border);
if (gdk_rectangle_point_in (&page_area, start))
point = start;
*/
gdk_region_shrink (region, -5, -5);
- get_page_extents (view, cur_page, &page_area, &border);
+ ev_view_get_page_extents (view, cur_page, &page_area, &border);
gdk_region_offset (region,
page_area.x + border.left - view->scroll_x,
page_area.y + border.top - view->scroll_y);