X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-print-job.c;h=59a8130d93da5d0b7be050b822b16b4994ba0a17;hb=70693deccf54d178c25d7f89c1b2d4a51fa5316f;hp=955e4bab183b246f5f9b2bd9919f22be07631a3b;hpb=41229e9ef5135c93176acb6320f96abc7d624b0a;p=evince.git diff --git a/shell/ev-print-job.c b/shell/ev-print-job.c index 955e4bab..59a8130d 100644 --- a/shell/ev-print-job.c +++ b/shell/ev-print-job.c @@ -48,8 +48,8 @@ struct _EvPrintJob { double width; /* FIXME unused */ double height; /* FIXME unused */ gboolean duplex; /* FIXME unused */ - int copies; /* FIXME unused */ - int collate; /* FIXME unsued */ + int copies; + int collate; /* range printing */ int first_page; @@ -60,6 +60,8 @@ struct _EvPrintJob { guint idle_id; gboolean printing; int next_page; + int copies_done; + int shift; }; struct _EvPrintJobClass { @@ -260,15 +262,18 @@ idle_print_handler (EvPrintJob *job) ev_document_doc_mutex_lock (); ev_ps_exporter_begin ( EV_PS_EXPORTER (job->document), - job->temp_file, job->first_page, job->last_page, + 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); @@ -281,9 +286,25 @@ idle_print_handler (EvPrintJob *job) g_object_unref (rc); - job->next_page++; + if (job->collate) { + /* collate must repeat the same page */ + job->copies_done++; + if(job->copies == job->copies_done) { + job->next_page += job->shift; + job->copies_done = 0; + } + } else { + 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 */ + job->next_page = job->first_page; + } + } + } return TRUE; - } else { /* no more pages */ + } else { /* no more pages or copies */ ev_document_doc_mutex_lock (); ev_ps_exporter_end (EV_PS_EXPORTER (job->document)); ev_document_doc_mutex_unlock ();