summaryrefslogtreecommitdiffstats
path: root/src/print.cpp
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2007-10-16 19:42:27 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2007-10-16 19:42:27 +0000
commite9379568b6ba2254648f686901ef5084e793ae9c (patch)
tree190b1db33b84642a3c0d534506a2018bf7062c6b /src/print.cpp
parentrunaway random number widget workaround (diff)
downloadinkscape-e9379568b6ba2254648f686901ef5084e793ae9c.tar.gz
inkscape-e9379568b6ba2254648f686901ef5084e793ae9c.zip
Unix printing: use correct paper size instead of defaulting to letter size
(bzr r3914)
Diffstat (limited to 'src/print.cpp')
-rw-r--r--src/print.cpp33
1 files changed, 28 insertions, 5 deletions
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 <unit-constants.h>
+
#ifdef HAVE_GTK_UNIX_PRINT
# include <gtk/gtk.h>
# include <glibmm/i18n.h>
@@ -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