ev_page_cache_get_size (page_cache,
EV_JOB_RENDER (job_info->job)->rc->page,
+ EV_JOB_RENDER (job_info->job)->rc->rotation,
scale,
&width, &height);
CacheJobInfo *job_info,
EvPageCache *page_cache,
gint page,
+ gint rotation,
gfloat scale,
EvJobPriority priority)
{
if (job_info->job)
return;
- ev_page_cache_get_size (page_cache,
- page, scale,
- &width, &height);
+ ev_page_cache_get_size (page_cache, page, rotation,
+ scale, &width, &height);
if (job_info->pixbuf &&
gdk_pixbuf_get_width (job_info->pixbuf) == width &&
/* make a new job now */
if (job_info->rc == NULL) {
- job_info->rc = ev_render_context_new (EV_ORIENTATION_PORTRAIT,
- page, scale);
+ job_info->rc = ev_render_context_new (rotation, page, scale);
} else {
ev_render_context_set_page (job_info->rc, page);
ev_render_context_set_scale (job_info->rc, scale);
+ ev_render_context_set_rotation (job_info->rc, rotation);
}
/* Figure out what else we need for this job */
static void
ev_pixbuf_cache_add_jobs_if_needed (EvPixbufCache *pixbuf_cache,
+ gint rotation,
gfloat scale)
{
EvPageCache *page_cache;
page = pixbuf_cache->start_page + i;
add_job_if_needed (pixbuf_cache, job_info,
- page_cache, page, scale,
+ page_cache, page, rotation, scale,
EV_JOB_PRIORITY_HIGH);
}
page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size + i;
add_job_if_needed (pixbuf_cache, job_info,
- page_cache, page, scale,
+ page_cache, page, rotation, scale,
EV_JOB_PRIORITY_LOW);
}
page = pixbuf_cache->end_page + 1 + i;
add_job_if_needed (pixbuf_cache, job_info,
- page_cache, page, scale,
+ page_cache, page, rotation, scale,
EV_JOB_PRIORITY_LOW);
}
}
void
-ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
- gint start_page,
- gint end_page,
- gfloat scale,
+ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
+ gint start_page,
+ gint end_page,
+ gint rotation,
+ gfloat scale,
GList *selection_list)
{
EvPageCache *page_cache;
/* Finally, we add the new jobs for all the sizes that don't have a
* pixbuf */
- ev_pixbuf_cache_add_jobs_if_needed (pixbuf_cache, scale);
+ ev_pixbuf_cache_add_jobs_if_needed (pixbuf_cache, rotation, scale);
}
GdkPixbuf *
if (job_info->selection) {
page_cache = ev_page_cache_get (pixbuf_cache->document);
- ev_page_cache_get_size (page_cache, page, scale,
- &width, &height);
+ ev_page_cache_get_size (page_cache, page, job_info->rc->rotation,
+ scale, &width, &height);
if (width != gdk_pixbuf_get_width (job_info->selection) ||
height != gdk_pixbuf_get_height (job_info->selection))
return job_info->text_mapping;
}
+/* Clears the cache of jobs and pixbufs.
+ */
+void
+ev_pixbuf_cache_clear (EvPixbufCache *pixbuf_cache)
+{
+ int i;
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ dispose_cache_job_info (pixbuf_cache->prev_job + i, pixbuf_cache);
+ dispose_cache_job_info (pixbuf_cache->next_job + i, pixbuf_cache);
+ }
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ dispose_cache_job_info (pixbuf_cache->job_list + i, pixbuf_cache);
+ }
+}
+
+
GdkPixbuf *
ev_pixbuf_cache_get_selection_pixbuf (EvPixbufCache *pixbuf_cache,
gint page,
if (ev_rect_cmp (&(job_info->new_points), &(job_info->selection_points))) {
EvRenderContext *rc;
- rc = ev_render_context_new (EV_ORIENTATION_PORTRAIT,
- page,
- scale);
+ rc = ev_render_context_new (0, page, scale);
/* we need to get a new selection pixbuf */
ev_document_doc_mutex_lock ();