- rc = ev_render_context_new (0, page, 1.0);
- ev_file_exporter_do_page (EV_FILE_EXPORTER (document), rc);
- g_object_unref (rc);
+ max_page = ev_document_get_n_pages (EV_JOB (job)->document) - 1;
+
+ for (i = 0; i < job->n_ranges; i++) {
+ gint rsize;
+ gint start, end;
+
+ if (job->ranges[i].start > max_page)
+ continue;
+
+ start = job->ranges[i].start + 1;
+ end = job->ranges[i].end <= max_page ? job->ranges[i].end + 1 : max_page + 1;
+ rsize = end - start + 1;
+
+ switch (job->page_set) {
+ case EV_PRINT_PAGE_SET_EVEN:
+ pages += start % 2 == 0 ? (rsize / 2) + (rsize % 2) : (rsize / 2);
+ break;
+ case EV_PRINT_PAGE_SET_ODD:
+ pages += start % 2 != 0 ? (rsize / 2) + (rsize % 2) : (rsize / 2);
+ break;
+ default:
+ pages += rsize;
+ break;
+ }
+ }
+
+ *n_pages = pages;
+
+ if (pages == 0)
+ return NULL;
+
+ page_list = g_new (gint, pages);
+
+ page = 0;
+ for (i = 0; i < job->n_ranges; i++) {
+ for (j = job->ranges[i].start; j <= job->ranges[i].end; j++) {
+ if (j > max_page)
+ break;
+
+ if (ev_print_job_print_page_in_set (job, j + 1))
+ page_list[page++] = j;
+ }
+ }
+
+ return page_list;