Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-jobs.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ev-jobs.c')
-rw-r--r--shell/ev-jobs.c58
1 files changed, 26 insertions, 32 deletions
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c
index 4572852..84eb365 100644
--- a/shell/ev-jobs.c
+++ b/shell/ev-jobs.c
@@ -782,21 +782,6 @@ ev_print_job_get_last_page (EvJobPrint *job)
}
static gboolean
-ev_print_job_print_page_in_range (EvJobPrint *job,
- gint page)
-{
- gint i;
-
- for (i = 0; i < job->n_ranges; i++) {
- if (page >= job->ranges[i].start &&
- page <= job->ranges[i].end)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
ev_print_job_print_page_in_set (EvJobPrint *job,
gint page)
{
@@ -826,6 +811,9 @@ ev_job_print_get_page_list (EvJobPrint *job,
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;
@@ -864,28 +852,18 @@ ev_job_print_get_page_list (EvJobPrint *job,
return page_list;
}
-static void
-ev_job_print_do_page (EvJobPrint *job, gint page)
-{
- EvDocument *document = EV_JOB (job)->document;
- EvRenderContext *rc;
-
- rc = ev_render_context_new (0, page, 1.0);
- ev_file_exporter_do_page (EV_FILE_EXPORTER (document), rc);
- g_object_unref (rc);
-}
-
void
ev_job_print_run (EvJobPrint *job)
{
EvDocument *document = EV_JOB (job)->document;
EvFileExporterContext fc;
+ EvRenderContext *rc;
gint fd;
gint *page_list;
gint n_pages;
gint last_page;
gint first_page;
- gint i;
+ gint i, j;
gchar *filename;
g_return_if_fail (EV_IS_JOB_PRINT (job));
@@ -926,6 +904,8 @@ ev_job_print_run (EvJobPrint *job)
fc.duplex = FALSE;
fc.pages_per_sheet = MAX (1, job->pages_per_sheet);
+ rc = ev_render_context_new (0, 0, 1.0);
+
ev_document_doc_mutex_lock ();
ev_file_exporter_begin (EV_FILE_EXPORTER (document), &fc);
@@ -933,17 +913,30 @@ ev_job_print_run (EvJobPrint *job)
gint page, step;
gint n_copies;
- step = job->reverse ? -1 : 1;
- page = job->reverse ? n_pages - 1 : 0;
+ step = job->reverse ? -1 * job->pages_per_sheet : job->pages_per_sheet;
+ page = job->reverse ? (n_pages / job->pages_per_sheet) * job->pages_per_sheet : 0;
n_copies = job->collate ? job->copies : 1;
while ((job->reverse && (page >= 0)) || (!job->reverse && (page < n_pages))) {
- gint j;
+ gint k;
+
+ ev_file_exporter_begin_page (EV_FILE_EXPORTER (document));
+
+ for (j = 0; j < job->pages_per_sheet; j++) {
+ gint p = page + j;
+
+ if (p < 0 || p >= n_pages)
+ break;
+
+ ev_render_context_set_page (rc, page_list[p]);
- for (j = 0; j < n_copies; j++) {
- ev_job_print_do_page (job, page_list[page]);
+ for (k = 0; k < n_copies; k++) {
+ ev_file_exporter_do_page (EV_FILE_EXPORTER (document), rc);
+ }
}
+ ev_file_exporter_end_page (EV_FILE_EXPORTER (document));
+
page += step;
}
@@ -956,6 +949,7 @@ ev_job_print_run (EvJobPrint *job)
g_free (page_list);
close (fd);
+ g_object_unref (rc);
EV_JOB (job)->finished = TRUE;
}