[gedit/wip/fix-printing] Printing: fix margins



commit a85fc855240a9767a331c9a463bb3e84c4402f88
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sat Jun 6 17:34:23 2015 +0200

    Printing: fix margins
    
    The default GTK+'s margins are too small. It was not possible to use a
    hole punch, and with some printers the text was slightly truncated on
    the right. With bigger margins, everything is fine.
    
    1 inch (25.4 mm) on each side of an A4 paper is the default with
    Microsoft Word. It seems reasonable for margins.
    
    FIXME when we change the paper size in the dialog window, the GTK+'s
    default margins are set again.

 gedit/gedit-app.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/gedit/gedit-app.c b/gedit/gedit-app.c
index c01de28..e027a61 100644
--- a/gedit/gedit-app.c
+++ b/gedit/gedit-app.c
@@ -1329,6 +1329,42 @@ gedit_app_class_init (GeditAppClass *klass)
                                                             G_PARAM_STATIC_STRINGS));
 }
 
+/* Set bigger margins than GTK+'s default. The margins must be big enough for
+ * using a hole punch. For an A4 paper, set margins of 1 inch (25.4 mm) on each
+ * side. For another paper size, set margins of proportional size.
+ */
+static void
+set_page_setup_margins (GtkPageSetup *page_setup)
+{
+       GtkPaperSize *paper_size;
+       GtkPaperSize *a4_paper_size;
+       gdouble paper_width;
+       gdouble a4_paper_width;
+       gdouble margin;
+       const gdouble a4_margin = 1.0; /* unit: inch */
+
+       paper_size = gtk_page_setup_get_paper_size (page_setup);
+       a4_paper_size = gtk_paper_size_new (GTK_PAPER_NAME_A4);
+
+       /* Take the minimum between the width and the height, to be sure that we
+        * are on portrait mode for both paper sizes (maybe some strange paper
+        * sizes are in landscape mode by default, it is not explained in the
+        * doc).
+        */
+       paper_width = MIN (gtk_paper_size_get_width (paper_size, GTK_UNIT_INCH),
+                          gtk_paper_size_get_height (paper_size, GTK_UNIT_INCH));
+
+       a4_paper_width = MIN (gtk_paper_size_get_width (a4_paper_size, GTK_UNIT_INCH),
+                             gtk_paper_size_get_height (a4_paper_size, GTK_UNIT_INCH));
+
+       margin = a4_margin * (paper_width / a4_paper_width);
+
+       gtk_page_setup_set_left_margin (page_setup, margin, GTK_UNIT_INCH);
+       gtk_page_setup_set_top_margin (page_setup, margin, GTK_UNIT_INCH);
+       gtk_page_setup_set_right_margin (page_setup, margin, GTK_UNIT_INCH);
+       gtk_page_setup_set_bottom_margin (page_setup, margin, GTK_UNIT_INCH);
+}
+
 static void
 load_page_setup (GeditApp *app)
 {
@@ -1361,6 +1397,7 @@ load_page_setup (GeditApp *app)
        if (priv->page_setup == NULL)
        {
                priv->page_setup = gtk_page_setup_new ();
+               set_page_setup_margins (priv->page_setup);
        }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]