}
EvJob *
-ev_job_print_new (EvDocument *document,
- gdouble width,
- gdouble height,
- EvPrintRange *ranges,
- gint n_ranges,
- gint copies,
- gdouble collate,
- gdouble reverse)
+ev_job_print_new (EvDocument *document,
+ gdouble width,
+ gdouble height,
+ EvPrintRange *ranges,
+ gint n_ranges,
+ EvPrintPageSet page_set,
+ gint copies,
+ gdouble collate,
+ gdouble reverse)
{
EvJobPrint *job;
job->ranges = ranges;
job->n_ranges = n_ranges;
+
+ job->page_set = page_set;
job->copies = copies;
job->collate = collate;
}
static gboolean
-ev_print_job_print_page (EvJobPrint *job,
- gint page)
+ev_print_job_print_page_in_range (EvJobPrint *job,
+ gint page)
{
gint i;
return FALSE;
}
+static gboolean
+ev_print_job_print_page_in_set (EvJobPrint *job,
+ gint page)
+{
+ switch (job->page_set) {
+ case EV_PRINT_PAGE_SET_EVEN:
+ return page % 2 == 0;
+ case EV_PRINT_PAGE_SET_ODD:
+ return page % 2 != 0;
+ case EV_PRINT_PAGE_SET_ALL:
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
ev_job_print_do_page (EvJobPrint *job, gint page)
{
gint n_pages = 1;
gint j;
- if (job->n_ranges > 0 && !ev_print_job_print_page (job, page)) {
+ if (job->n_ranges > 0 &&
+ !ev_print_job_print_page_in_range (job, page)) {
+ page += step;
+ continue;
+ }
+
+ if (!ev_print_job_print_page_in_set (job, page + 1)) {
page += step;
continue;
}