Code

Fix for Bug #166678 (Paper size or orientation are not used when printing) by Adrian...
authorJazzyNico <JazzyNico@users.sourceforge.net>
Wed, 12 Aug 2009 14:00:19 +0000 (14:00 +0000)
committerJazzyNico <JazzyNico@users.sourceforge.net>
Wed, 12 Aug 2009 14:00:19 +0000 (14:00 +0000)
src/document.cpp
src/document.h
src/sp-root.h
src/ui/dialog/print.cpp
src/ui/widget/page-sizer.cpp

index 288e52c6d88844244245381ac56986638d40d7e9..17057e1dc8327bbddf883d323b3e8d63526c3fd2 100644 (file)
@@ -572,6 +572,25 @@ gdouble sp_document_height(SPDocument *document)
     return root->height.computed;
 }
 
+void sp_document_set_landscape (SPDocument *document, gboolean landscape)
+{
+    SPRoot *root = SP_ROOT(document->root);
+
+    root->landscape = landscape;
+    SP_OBJECT (root)->updateRepr();
+}
+
+gboolean sp_document_landscape(SPDocument *document)
+{
+    g_return_val_if_fail(document != NULL, 0.0);
+    g_return_val_if_fail(document->priv != NULL, 0.0);
+    g_return_val_if_fail(document->root != NULL, 0.0);
+
+    SPRoot *root = SP_ROOT(document->root);
+
+    return root->landscape;
+}
+
 Geom::Point sp_document_dimensions(SPDocument *doc)
 {
     return Geom::Point(sp_document_width(doc), sp_document_height(doc));
index 696e568ad419e01465564e308928197278068ecf..63ca221a29f1966bd5f5fb75ecb6015e44e5f5f5 100644 (file)
@@ -185,12 +185,14 @@ SPDocument *sp_document_create(Inkscape::XML::Document *rdoc, gchar const *uri,
 
 gdouble sp_document_width(SPDocument *document);
 gdouble sp_document_height(SPDocument *document);
+gboolean sp_document_landscape(SPDocument *document);
 Geom::Point sp_document_dimensions(SPDocument *document);
 
 struct SPUnit;
 
 void sp_document_set_width(SPDocument *document, gdouble width, const SPUnit *unit);
 void sp_document_set_height(SPDocument *document, gdouble height, const SPUnit *unit);
+void sp_document_set_landscape(SPDocument *document, gboolean landscape);
 
 #define SP_DOCUMENT_URI(d)  (d->uri)
 #define SP_DOCUMENT_NAME(d) (d->name)
index 7976eb2f4eb46f7b073f9d4edf918284d855b620..8b3cb4f0cb2d01f4f5d0c1c436512337b8a859a2 100644 (file)
@@ -36,6 +36,7 @@ struct SPRoot : public SPGroup {
     SVGLength y;
     SVGLength width;
     SVGLength height;
+    gboolean landscape;
 
     /* viewBox; */
     unsigned int viewBox_set : 1;
index 214b1a6db9ebaa9ec3d3f22f74ad36fce2251e3f..d98d6a49e8f3996b2d931882f98113c0f2b72394 100644 (file)
@@ -188,12 +188,19 @@ Print::Print(SPDocument *doc, SPItem *base) :
     GtkPageSetup *page_setup = gtk_page_setup_new();
     gdouble doc_width = sp_document_width(_doc) * PT_PER_PX;
     gdouble doc_height = sp_document_height(_doc) * PT_PER_PX;
-    GtkPaperSize *paper_size = gtk_paper_size_new_custom("custom", "custom",
-                                doc_width, doc_height, GTK_UNIT_POINTS);
+    GtkPaperSize *paper_size;
+    if (sp_document_landscape(_doc)) {
+        gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
+        paper_size = gtk_paper_size_new_custom("custom", "custom",
+                                               doc_height, doc_width, GTK_UNIT_POINTS);
+    } else {
+        gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_PORTRAIT);
+        paper_size = gtk_paper_size_new_custom("custom", "custom",
+                                               doc_width, doc_height, GTK_UNIT_POINTS);
+    }
+
     gtk_page_setup_set_paper_size (page_setup, paper_size);
-#ifndef WIN32
     gtk_print_operation_set_default_page_setup (_printop, page_setup);
-#endif
     gtk_print_operation_set_use_full_page (_printop, TRUE);
 
     // set up signals
index 02688a55e67ac6370c31ba744e2027915ec07596..6817d815b63a2a106a4980c788c619366aae3660 100644 (file)
@@ -345,11 +345,23 @@ PageSizer::setDim (double w, double h, bool changeList)
     _changedw_connection.block();
     _changedh_connection.block();
 
+    if ( w != h ) {
+        _landscapeButton.set_sensitive(true);
+        _portraitButton.set_sensitive (true);
+        _landscape = ( w > h );
+        _landscapeButton.set_active(_landscape ? true : false);
+        _portraitButton.set_active (_landscape ? false : true);
+    } else {
+        _landscapeButton.set_sensitive(false);
+        _portraitButton.set_sensitive (false);
+    }
+
     if (SP_ACTIVE_DESKTOP && !_widgetRegistry->isUpdating()) {
         SPDocument *doc = sp_desktop_document(SP_ACTIVE_DESKTOP);
         double const old_height = sp_document_height(doc);
         sp_document_set_width (doc, w, &_px_unit);
         sp_document_set_height (doc, h, &_px_unit);
+        sp_document_set_landscape (doc, _landscape);
         // The origin for the user is in the lower left corner; this point should remain stationary when
         // changing the page size. The SVG's origin however is in the upper left corner, so we must compensate for this
         Geom::Translate const vert_offset(Geom::Point(0, (old_height - h)));
@@ -357,17 +369,6 @@ PageSizer::setDim (double w, double h, bool changeList)
         sp_document_done (doc, SP_VERB_NONE, _("Set page size"));
     }
 
-    if ( w != h ) {
-        _landscapeButton.set_sensitive(true);
-        _portraitButton.set_sensitive (true);
-        _landscape = ( w > h );
-        _landscapeButton.set_active(_landscape ? true : false);
-        _portraitButton.set_active (_landscape ? false : true);
-    } else {
-        _landscapeButton.set_sensitive(false);
-        _portraitButton.set_sensitive (false);
-    }
-
     if (changeList)
         {
         Gtk::TreeModel::Row row = (*find_paper_size(w, h));