gui: Configure page setup when printing in the GUI.
[pspp-builds.git] / src / ui / gui / psppire-output-window.c
index b079cf1d4ce8c1cc358cbef64eb74901383e323c..2e02b4e5ec33503f8ffc08d63676bc64e6d8d30b 100644 (file)
@@ -617,7 +617,42 @@ psppire_output_window_new (void)
 
 
 \f
+static void
+create_xr_print_driver (GtkPrintContext *context, PsppireOutputWindow *window)
+{
+  struct string_map options;
+  GtkPageSetup *page_setup;
+  double width, height;
+  double left_margin;
+  double right_margin;
+  double top_margin;
+  double bottom_margin;
+
+  page_setup = gtk_print_context_get_page_setup (context);
+  width = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_MM);
+  height = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_MM);
+  left_margin = gtk_page_setup_get_left_margin (page_setup, GTK_UNIT_MM);
+  right_margin = gtk_page_setup_get_right_margin (page_setup, GTK_UNIT_MM);
+  top_margin = gtk_page_setup_get_top_margin (page_setup, GTK_UNIT_MM);
+  bottom_margin = gtk_page_setup_get_bottom_margin (page_setup, GTK_UNIT_MM);
+
+  string_map_init (&options);
+  string_map_insert_nocopy (&options, xstrdup ("paper-size"),
+                            xasprintf("%.2fx%.2fmm", width, height));
+  string_map_insert_nocopy (&options, xstrdup ("left-margin"),
+                            xasprintf ("%.2fmm", left_margin));
+  string_map_insert_nocopy (&options, xstrdup ("right-margin"),
+                            xasprintf ("%.2fmm", right_margin));
+  string_map_insert_nocopy (&options, xstrdup ("top-margin"),
+                            xasprintf ("%.2fmm", top_margin));
+  string_map_insert_nocopy (&options, xstrdup ("bottom-margin"),
+                            xasprintf ("%.2fmm", bottom_margin));
+
+  window->print_xrd =
+    xr_driver_create (gtk_print_context_get_cairo_context (context), &options);
 
+  string_map_destroy (&options);
+}
 
 static gboolean
 paginate (GtkPrintOperation *operation,
@@ -641,23 +676,16 @@ paginate (GtkPrintOperation *operation,
     }
   else
     {
-      struct string_map options = STRING_MAP_INITIALIZER (options);
       g_print ("Number of pages is %d\n", window->print_n_pages);
       gtk_print_operation_set_n_pages (operation, window->print_n_pages);
       window->print_item = 0;
 
-      //      xr_driver_destroy (window->print_xrd);
-
-      window->print_xrd =
-       xr_driver_create (gtk_print_context_get_cairo_context (context), &options);
-
-      string_map_destroy (&options);
+      create_xr_print_driver (context, window);
 
       return TRUE;
     }
 }
 
-
 static void
 begin_print (GtkPrintOperation *operation,
             GtkPrintContext   *context,
@@ -665,12 +693,8 @@ begin_print (GtkPrintOperation *operation,
 {
   g_print ("%s\n", __FUNCTION__);
 
-  struct string_map options = STRING_MAP_INITIALIZER (options);
+  create_xr_print_driver (context, window);
 
-  window->print_xrd =
-    xr_driver_create (gtk_print_context_get_cairo_context (context), &options);
-
-  string_map_destroy (&options);
   window->print_item = 0;
   window->print_n_pages = 1;
 }