From: dvlierop2 Date: Tue, 16 Oct 2007 19:42:27 +0000 (+0000) Subject: Unix printing: use correct paper size instead of defaulting to letter size X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=0ae44427ca0afd85f7a9eeee9f3c6f541f5aa93a;p=inkscape.git Unix printing: use correct paper size instead of defaulting to letter size --- diff --git a/src/print.cpp b/src/print.cpp index a62733c6a..872a0234f 100644 --- a/src/print.cpp +++ b/src/print.cpp @@ -21,6 +21,8 @@ #include "extension/system.h" #include "print.h" +#include + #ifdef HAVE_GTK_UNIX_PRINT # include # include @@ -145,7 +147,7 @@ unix_print_complete (GtkPrintJob *print_job, } static void -unix_print_dialog (const gchar * ps_file, const gchar * jobname) +unix_print_dialog (const gchar * ps_file, const gchar * jobname, gdouble doc_width, gdouble doc_height) { Glib::ustring title = _("Print"); title += " "; @@ -171,11 +173,27 @@ unix_print_dialog (const gchar * ps_file, const gchar * jobname) GtkPrinter* printer = gtk_print_unix_dialog_get_selected_printer(GTK_PRINT_UNIX_DIALOG(dlg)); if (gtk_printer_accepts_ps (printer)) { + GtkPageSetup *page_setup = gtk_print_unix_dialog_get_page_setup(GTK_PRINT_UNIX_DIALOG(dlg)); + + //It's important to set the right paper size here, otherwise it will + //default to letter; if for example an A4 is printed as a letter, then + //part of it will be truncated even when printing on A4 paper + + //TODO: let the user decide upon the paper size, by enabling + //the drop down widget in the printing dialog. For now, we'll simply + //take the document's dimensions and communicate these to the printer + //driver + + GtkPaperSize *page_size = gtk_paper_size_new_custom("custom", "custom", doc_width, doc_height, GTK_UNIT_POINTS); + + gtk_page_setup_set_paper_size (page_setup, page_size); + GtkPrintJob* job = gtk_print_job_new (jobname, printer, gtk_print_unix_dialog_get_settings(GTK_PRINT_UNIX_DIALOG(dlg)), - gtk_print_unix_dialog_get_page_setup(GTK_PRINT_UNIX_DIALOG(dlg))); - - + page_setup); + + GtkPaperSize* tmp = gtk_page_setup_get_paper_size(gtk_print_unix_dialog_get_page_setup(GTK_PRINT_UNIX_DIALOG(dlg))); + GError * error = NULL; if ( gtk_print_job_set_source_file (job, ps_file, &error)) { gtk_print_job_send (job, unix_print_complete, NULL, NULL); @@ -264,7 +282,12 @@ sp_print_document(SPDocument *doc, unsigned int direct) #ifdef HAVE_GTK_UNIX_PRINT // redirect output to new print dialog - unix_print_dialog(tmpfile.c_str(),doc->name ? doc->name : _("SVG Document")); + + // width and height in pt + gdouble width = sp_document_width(doc) * PT_PER_PX; + gdouble height = sp_document_height(doc) * PT_PER_PX; + + unix_print_dialog(tmpfile.c_str(),doc->name ? doc->name : _("SVG Document"), width, height); unlink(tmpfile.c_str()); // end redirected new print dialog #endif