gtk+ r20914 - in branches/gtk-2-12: . gtk



Author: tml
Date: Wed Jul 30 09:48:19 2008
New Revision: 20914
URL: http://svn.gnome.org/viewvc/gtk+?rev=20914&view=rev

Log:
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.



Modified:
   branches/gtk-2-12/ChangeLog
   branches/gtk-2-12/gtk/gtkprintoperation-win32.c

Modified: branches/gtk-2-12/gtk/gtkprintoperation-win32.c
==============================================================================
--- branches/gtk-2-12/gtk/gtkprintoperation-win32.c	(original)
+++ branches/gtk-2-12/gtk/gtkprintoperation-win32.c	Wed Jul 30 09:48:19 2008
@@ -439,6 +439,8 @@
     {
       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;
     }
@@ -668,10 +670,12 @@
 				     -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);
@@ -950,8 +954,9 @@
 	{
 	  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);
     }
@@ -1718,7 +1723,6 @@
 							      gchar            **target)
 {
   GtkPaperSize *paper_size;
-  double w, h;
   HDC metafile_dc;
   RECT rect;
   char *template;
@@ -1737,13 +1741,12 @@
   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");



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