From 85fa11d86616d3a9c5a5cfeba78dd7aa72e7997a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Sun, 29 Jul 2007 14:15:17 +0000 Subject: Allow printing multiple pages per sheet. Fixes bug #395573. 2007-07-29 Carlos Garcia Campos * configure.ac: * backend/pdf/ev-poppler.cc: (pdf_print_context_free), (pdf_document_file_exporter_begin), (pdf_document_file_exporter_do_page), (pdf_document_file_exporter_get_capabilities): * libdocument/ev-file-exporter.h: * shell/ev-jobs.[ch]: (ev_job_print_new), (ev_job_print_run): * shell/ev-window.c: (ev_window_print_send), (ev_window_print_dialog_response_cb): Allow printing multiple pages per sheet. Fixes bug #395573. svn path=/trunk/; revision=2591 --- (limited to 'shell') diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c index d5d45f2..8e140f8 100644 --- a/shell/ev-jobs.c +++ b/shell/ev-jobs.c @@ -326,6 +326,8 @@ render_finished_cb (EvDocument *document, /* FIXME: ps backend should be ported to cairo */ job->surface = ev_document_misc_surface_from_pixbuf (pixbuf); + job->page_ready = TRUE; + g_signal_emit (job, job_render_signals[PAGE_READY], 0); EV_JOB (job)->finished = TRUE; ev_job_finished (EV_JOB (job)); } @@ -562,6 +564,7 @@ ev_job_print_new (EvDocument *document, EvPrintRange *ranges, gint n_ranges, EvPrintPageSet page_set, + gint pages_per_sheet, gint copies, gdouble collate, gdouble reverse) @@ -584,6 +587,8 @@ ev_job_print_new (EvDocument *document, job->n_ranges = n_ranges; job->page_set = page_set; + + job->pages_per_sheet = pages_per_sheet; job->copies = copies; job->collate = collate; @@ -711,6 +716,7 @@ ev_job_print_run (EvJobPrint *job) fc.paper_width = job->width; fc.paper_height = job->height; fc.duplex = FALSE; + fc.pages_per_sheet = job->pages_per_sheet; ev_document_doc_mutex_lock (); ev_file_exporter_begin (EV_FILE_EXPORTER (document), &fc); diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h index c0a4036..1f348d8 100644 --- a/shell/ev-jobs.h +++ b/shell/ev-jobs.h @@ -199,6 +199,7 @@ struct _EvJobPrint gint n_ranges; EvPrintPageSet page_set; gint copies; + gint pages_per_sheet; gboolean collate; gboolean reverse; gdouble width; @@ -264,6 +265,7 @@ EvJob *ev_job_print_new (EvDocument *document, EvPrintRange *ranges, gint n_ranges, EvPrintPageSet page_set, + gint pages_per_sheet, gint copies, gdouble collate, gdouble reverse); diff --git a/shell/ev-window.c b/shell/ev-window.c index 7f928a5..233067b 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -2220,6 +2220,8 @@ ev_window_print_send (EvWindow *window, gtk_print_settings_set_collate (settings, FALSE); if (capabilities & EV_FILE_EXPORTER_CAN_REVERSE) gtk_print_settings_set_reverse (settings, FALSE); + if (capabilities & EV_FILE_EXPORTER_CAN_NUMBER_UP) + gtk_print_settings_set_number_up (settings, 1); if (window->priv->print_preview) { gchar *uri; @@ -2294,6 +2296,7 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, EvPrintPageSet page_set; gint n_ranges = 0; gint copies; + gint pages_per_sheet; gboolean collate; gboolean reverse; gdouble scale; @@ -2385,6 +2388,8 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, height *= scale; } + pages_per_sheet = gtk_print_settings_get_number_up (window->priv->print_settings); + copies = gtk_print_settings_get_n_copies (window->priv->print_settings); collate = gtk_print_settings_get_collate (window->priv->print_settings); reverse = gtk_print_settings_get_reverse (window->priv->print_settings); @@ -2394,6 +2399,7 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, width, height, ranges, n_ranges, page_set, + pages_per_sheet, copies, collate, reverse); -- cgit v0.9.1