diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2006-10-24 18:32:58 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2006-10-24 18:32:58 (GMT) |
commit | e15ce77fdce11d47bc92a209efb013c008d502d5 (patch) | |
tree | 35aeba8f2b0c99a2a38dbd53667906f3533c681e /shell/ev-jobs.c | |
parent | 9f3b6e0650f3c99994a529625695e594a8c8043c (diff) |
Use print settings scale, copies, collate and reverse which were ignored.
2006-10-24 Carlos Garcia Campos <carlosgc@gnome.org>
* shell/ev-jobs.[ch]: (ev_job_print_new), (ev_job_print_run):
* shell/ev-window.c: (ev_window_print_dialog_response_cb):
Use print settings scale, copies, collate and reverse which were
ignored. Fixes bug #359032.
Diffstat (limited to 'shell/ev-jobs.c')
-rw-r--r-- | shell/ev-jobs.c | 71 |
1 files changed, 50 insertions, 21 deletions
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c index 416c788..1799602 100644 --- a/shell/ev-jobs.c +++ b/shell/ev-jobs.c @@ -528,10 +528,13 @@ ev_job_xfer_run (EvJobXfer *job) EvJob * ev_job_print_new (EvDocument *document, - EvPrintRange *ranges, - gint n_ranges, - gdouble width, - gdouble height) + gdouble width, + gdouble height, + EvPrintRange *ranges, + gint n_ranges, + gint copies, + gdouble collate, + gdouble reverse) { EvJobPrint *job; @@ -542,12 +545,16 @@ ev_job_print_new (EvDocument *document, job->temp_file = NULL; job->error = NULL; + job->width = width; + job->height = height; + job->ranges = ranges; job->n_ranges = n_ranges; - job->width = width; - job->height = height; - + job->copies = copies; + job->collate = collate; + job->reverse = reverse; + return EV_JOB (job); } @@ -603,6 +610,17 @@ ev_print_job_print_page (EvJobPrint *job, return FALSE; } +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_ps_exporter_do_page (EV_PS_EXPORTER (document), rc); + g_object_unref (rc); +} + void ev_job_print_run (EvJobPrint *job) { @@ -637,25 +655,36 @@ ev_job_print_run (EvJobPrint *job) MIN (first_page, last_page), MAX (first_page, last_page), job->width, job->height, FALSE); - ev_document_doc_mutex_unlock (); - for (i = first_page; i <= last_page; i++) { - EvRenderContext *rc; - - if (job->n_ranges > 0 && - !ev_print_job_print_page (job, i)) - continue; + for (i = 0; i < job->copies; i++) { + gint page, step; - rc = ev_render_context_new (0, i, 1.0); - - ev_document_doc_mutex_lock (); - ev_ps_exporter_do_page (EV_PS_EXPORTER (document), rc); - ev_document_doc_mutex_unlock (); + step = job->reverse ? -1 : 1; + page = job->reverse ? last_page : first_page; + while ((job->reverse && (page >= first_page)) || + (!job->reverse && (page <= last_page))) { + gint n_pages = 1; + gint j; + + if (job->n_ranges > 0 && !ev_print_job_print_page (job, page)) { + page += step; + continue; + } + + if (job->collate) + n_pages = job->copies; + + for (j = 0; j < n_pages; j++) { + ev_job_print_do_page (job, page); + } + + page += step; + } - g_object_unref (rc); + if (job->collate) + break; } - ev_document_doc_mutex_lock (); ev_ps_exporter_end (EV_PS_EXPORTER (document)); ev_document_doc_mutex_unlock (); |