X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-print-job.c;h=79076f90b8fa88766238995c09459f5c1c90aad6;hb=217797d63b2d3b1c9a7a0511af1bbf3d99f0d482;hp=bb463f96108d33f57fd1e8522800350832bf18a8;hpb=0d19025d51e4a14ae553a4fc877c04261a11c902;p=evince.git diff --git a/shell/ev-print-job.c b/shell/ev-print-job.c index bb463f96..79076f90 100644 --- a/shell/ev-print-job.c +++ b/shell/ev-print-job.c @@ -32,7 +32,7 @@ #define GNOME_PRINT_UNSTABLE_API #include -#include "ev-ps-exporter.h" +#include "ev-file-exporter.h" #include "ev-print-job.h" #include "ev-page-cache.h" @@ -61,6 +61,7 @@ struct _EvPrintJob { gboolean printing; int next_page; int copies_done; + int shift; }; struct _EvPrintJobClass { @@ -259,17 +260,21 @@ idle_print_handler (EvPrintJob *job) { if (!job->printing) { ev_document_doc_mutex_lock (); - ev_ps_exporter_begin ( - EV_PS_EXPORTER (job->document), - job->temp_file, job->first_page, job->last_page, + ev_file_exporter_begin ( + EV_FILE_EXPORTER (job->document), + EV_FILE_FORMAT_PS, + job->temp_file, + MIN (job->first_page, job->last_page), + MAX (job->first_page, job->last_page), job->width, job->height, job->duplex); ev_document_doc_mutex_unlock (); job->next_page = job->first_page; + job->shift = (job->first_page > job->last_page) ? -1 : 1; job->printing = TRUE; return TRUE; } - - if (job->next_page <= job->last_page) { + + if ((job->next_page - job->last_page) * job->shift <= 0) { EvRenderContext *rc; #if 0 g_printerr ("Printing page %d\n", job->next_page); @@ -277,7 +282,7 @@ idle_print_handler (EvPrintJob *job) rc = ev_render_context_new (0, job->next_page, 1.0); ev_document_doc_mutex_lock (); - ev_ps_exporter_do_page (EV_PS_EXPORTER (job->document), rc); + ev_file_exporter_do_page (EV_FILE_EXPORTER (job->document), rc); ev_document_doc_mutex_unlock (); g_object_unref (rc); @@ -286,12 +291,12 @@ idle_print_handler (EvPrintJob *job) /* collate must repeat the same page */ job->copies_done++; if(job->copies == job->copies_done) { - job->next_page++; + job->next_page += job->shift; job->copies_done = 0; } } else { - job->next_page++; - if (job->next_page > job->last_page){ + job->next_page += job->shift; + if ((job->next_page - job->last_page) * job->shift > 0){ job->copies_done++; if(job->copies_done < job->copies) { /* more copies to go, restart to the first page */ @@ -302,7 +307,7 @@ idle_print_handler (EvPrintJob *job) return TRUE; } else { /* no more pages or copies */ ev_document_doc_mutex_lock (); - ev_ps_exporter_end (EV_PS_EXPORTER (job->document)); + ev_file_exporter_end (EV_FILE_EXPORTER (job->document)); ev_document_doc_mutex_unlock (); close (job->fd); @@ -336,7 +341,7 @@ ev_print_job_print (EvPrintJob *job, GtkWindow *parent) g_return_if_fail (EV_IS_PRINT_JOB (job)); g_return_if_fail (job->document != NULL); - g_return_if_fail (EV_IS_PS_EXPORTER (job->document)); + g_return_if_fail (EV_IS_FILE_EXPORTER (job->document)); #if 0 g_printerr ("Printing...\n"); #endif