+static void
+add_job (EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ EvPageCache *page_cache,
+ GdkRegion *region,
+ gint width,
+ gint height,
+ gint page,
+ gint rotation,
+ gfloat scale,
+ EvJobPriority priority)
+{
+ EvRenderFlags flags = 0;
+
+ job_info->page_ready = FALSE;
+
+ if (job_info->region)
+ gdk_region_destroy (job_info->region);
+ job_info->region = region ? gdk_region_copy (region) : NULL;
+
+ /* Figure out what else we need for this job */
+ if (job_info->link_mapping == NULL)
+ flags |= EV_RENDER_INCLUDE_LINKS;
+ if (job_info->image_mapping == NULL)
+ flags |= EV_RENDER_INCLUDE_IMAGES;
+ if (job_info->form_field_mapping == NULL)
+ flags |= EV_RENDER_INCLUDE_FORMS;
+ if (job_info->text_mapping == NULL)
+ flags |= EV_RENDER_INCLUDE_TEXT;
+
+ job_info->job = ev_job_render_new (pixbuf_cache->document,
+ page, rotation, scale,
+ width, height,
+ flags);
+
+ if (new_selection_surface_needed (pixbuf_cache, job_info, page, scale)) {
+ GdkColor *text, *base;
+
+ gtk_widget_ensure_style (pixbuf_cache->view);
+ get_selection_colors (pixbuf_cache->view, &text, &base);
+ ev_job_render_set_selection_info (EV_JOB_RENDER (job_info->job),
+ &(job_info->target_points),
+ job_info->selection_style,
+ text, base);
+ }
+
+ ev_job_queue_add_job (job_info->job, priority);
+ g_signal_connect (G_OBJECT (job_info->job), "page-ready",
+ G_CALLBACK (job_page_ready_cb),
+ pixbuf_cache);
+ g_signal_connect (G_OBJECT (job_info->job), "finished",
+ G_CALLBACK (job_finished_cb),
+ pixbuf_cache);
+}
+