]> Pileus Git - ~andy/gtk/commitdiff
Fix problems in handling custom paper sizes. The DEVMODE::dmPaperWidth and
authorTor Lillqvist <tml@novell.com>
Wed, 30 Jul 2008 09:52:42 +0000 (09:52 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 30 Jul 2008 09:52:42 +0000 (09:52 +0000)
2008-07-30  Tor Lillqvist  <tml@novell.com>

* gtk/gtkprintoperation-win32.c: Fix problems in handling custom
paper sizes. The DEVMODE::dmPaperWidth and dmPaperLength are in
tenths of a millimeter, and the RECT passed to CreateEnhMetaFile()
is in hundredths of a millimeter. Patch by Sven Neumann.

svn path=/trunk/; revision=20916

ChangeLog
gtk/gtkprintoperation-win32.c

index 091480ca3f896ae4f892987993719d7d356b629e..627d4736fd9d0208688be61489efb5cfc818d7ac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-07-30  Tor Lillqvist  <tml@novell.com>
+
+       * gtk/gtkprintoperation-win32.c: Fix problems in handling custom
+       paper sizes. The DEVMODE::dmPaperWidth and dmPaperLength are in
+       tenths of a millimeter, and the RECT passed to CreateEnhMetaFile()
+       is in hundredths of a millimeter. Patch by Sven Neumann.
+
 2008-07-28  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktreemodel.c: Small doc improvements.
index f368e428393ed34fe7dd943cdccb357d0a5cabca..ec6f9cc02c910030d0cd34c69ef6a004adef932d 100644 (file)
@@ -439,6 +439,8 @@ win32_start_page (GtkPrintOperation *op,
     {
       devmode->dmPaperSize = DMPAPER_USER;
       devmode->dmFields |= DM_PAPERWIDTH | DM_PAPERLENGTH;
+
+      /* Lengths in DEVMODE are in tenths of a millimeter */
       devmode->dmPaperWidth = gtk_paper_size_get_width (paper_size, GTK_UNIT_MM) * 10.0;
       devmode->dmPaperLength = gtk_paper_size_get_height (paper_size, GTK_UNIT_MM) * 10.0;
     }
@@ -672,10 +674,12 @@ devmode_to_settings (GtkPrintSettings *settings,
                                     -1, NULL, NULL, NULL);
       if (form_name == NULL || form_name[0] == 0)
        form_name = g_strdup (_("Custom size"));
+
+      /* Lengths in DEVMODE are in tenths of a millimeter */
       paper_size = gtk_paper_size_new_custom (form_name,
                                              form_name,
-                                             devmode->dmPaperWidth * 10.0,
-                                             devmode->dmPaperLength * 10.0,
+                                             devmode->dmPaperWidth / 10.0,
+                                             devmode->dmPaperLength / 10.0,
                                              GTK_UNIT_MM);
       gtk_print_settings_set_paper_size (settings, paper_size);
       gtk_paper_size_free (paper_size);
@@ -954,8 +958,10 @@ devmode_from_settings (GtkPrintSettings *settings,
        {
          devmode->dmPaperSize = DMPAPER_USER;
          devmode->dmFields |= DM_PAPERWIDTH | DM_PAPERLENGTH;
-         devmode->dmPaperWidth = gtk_paper_size_get_width (paper_size, GTK_UNIT_MM) / 10.0;
-         devmode->dmPaperLength = gtk_paper_size_get_height (paper_size, GTK_UNIT_MM) / 10.0;
+
+          /* Lengths in DEVMODE are in tenths of a millimeter */
+         devmode->dmPaperWidth = gtk_paper_size_get_width (paper_size, GTK_UNIT_MM) * 10.0;
+         devmode->dmPaperLength = gtk_paper_size_get_height (paper_size, GTK_UNIT_MM) * 10.0;
        }
       gtk_paper_size_free (paper_size);
     }
@@ -1726,7 +1732,6 @@ _gtk_print_operation_platform_backend_create_preview_surface (GtkPrintOperation
                                                              gchar            **target)
 {
   GtkPaperSize *paper_size;
-  double w, h;
   HDC metafile_dc;
   RECT rect;
   char *template;
@@ -1745,13 +1750,12 @@ _gtk_print_operation_platform_backend_create_preview_surface (GtkPrintOperation
   g_free (filename);
 
   paper_size = gtk_page_setup_get_paper_size (page_setup);
-  w = gtk_paper_size_get_width (paper_size, GTK_UNIT_MM);
-  h = gtk_paper_size_get_height (paper_size, GTK_UNIT_MM);
-  
+
+  /* The rectangle dimensions are given in hundredths of a millimeter */
   rect.left = 0;
-  rect.right = w*100;
+  rect.right = 100.0 * gtk_paper_size_get_width (paper_size, GTK_UNIT_MM);
   rect.top = 0;
-  rect.bottom = h*100;
+  rect.bottom = 100.0 * gtk_paper_size_get_height (paper_size, GTK_UNIT_MM);
   
   metafile_dc = CreateEnhMetaFileW (NULL, filename_utf16,
                                    &rect, L"Gtk+\0Print Preview\0\0");