]> git.saurik.com Git - wxWidgets.git/commitdiff
Compute print preview scale using real DPI values in wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 22 Dec 2010 13:57:03 +0000 (13:57 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 22 Dec 2010 13:57:03 +0000 (13:57 +0000)
Replace hardcoded 72 DPI which was "compensated" for with a 0.8 fudge factor
with the values using the real screen DPI in wxGTK and PostScript print
preview classes.

Closes #12777.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66427 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/printps.cpp
src/gtk/print.cpp

index 855b65a7a65678e60ff9630d6563c6decb150cc0..a264bdabc5633a6aae5a4eab1b1a02557d043658 100644 (file)
@@ -330,14 +330,16 @@ void wxPostScriptPrintPreview::DetermineScaling()
 
     if (paper)
     {
-        wxSize ScreenPixels = wxGetDisplaySize();
-        wxSize ScreenMM = wxGetDisplaySizeMM();
-
         int resolution = 600;  // TODO, this is correct, but get this from wxPSDC somehow
 
-        m_previewPrintout->SetPPIScreen( (int) ((ScreenPixels.GetWidth() * 25.4) / ScreenMM.GetWidth()),
-                                         (int) ((ScreenPixels.GetHeight() * 25.4) / ScreenMM.GetHeight()) );
-        m_previewPrintout->SetPPIPrinter( resolution, resolution );
+        const wxSize screenPPI = wxGetDisplayPPI();
+        int logPPIScreenX = screenPPI.GetWidth();
+        int logPPIScreenY = screenPPI.GetHeight();
+        int logPPIPrinterX = resolution;
+        int logPPIPrinterY = resolution;
+
+        m_previewPrintout->SetPPIScreen( logPPIScreenX, logPPIScreenY );
+        m_previewPrintout->SetPPIPrinter( logPPIPrinterX, logPPIPrinterY );
 
         wxSize sizeDevUnits(paper->GetSizeDeviceUnits());
         sizeDevUnits.x = (wxCoord)((float)sizeDevUnits.x * resolution / 72.0);
@@ -362,8 +364,8 @@ void wxPostScriptPrintPreview::DetermineScaling()
         m_previewPrintout->SetPaperRectPixels(wxRect(0, 0, m_pageWidth, m_pageHeight));
 
         // At 100%, the page should look about page-size on the screen.
-        m_previewScaleX = (float)0.8 * 72.0 / (float)resolution;
-        m_previewScaleY = m_previewScaleX;
+        m_previewScaleX = float(logPPIScreenX) / logPPIPrinterX;
+        m_previewScaleY = float(logPPIScreenY) / logPPIPrinterY;
     }
 }
 
index 5bbd55a7b58474c72bf70c28c01a8fca67190532..18835a2d39fce6871f2ed5e6437a87a1a6feed86 100644 (file)
@@ -2308,8 +2308,14 @@ void wxGtkPrintPreview::DetermineScaling()
 
     if (paper)
     {
-        m_previewPrintout->SetPPIScreen(wxGetDisplayPPI());
-        m_previewPrintout->SetPPIPrinter( m_resolution, m_resolution );
+        const wxSize screenPPI = wxGetDisplayPPI();
+        int logPPIScreenX = screenPPI.GetWidth();
+        int logPPIScreenY = screenPPI.GetHeight();
+        int logPPIPrinterX = m_resolution;
+        int logPPIPrinterY = m_resolution;
+
+        m_previewPrintout->SetPPIScreen( logPPIScreenX, logPPIScreenY );
+        m_previewPrintout->SetPPIPrinter( logPPIPrinterX, logPPIPrinterY );
 
         // Get width and height in points (1/72th of an inch)
         wxSize sizeDevUnits(paper->GetSizeDeviceUnits());
@@ -2336,8 +2342,8 @@ void wxGtkPrintPreview::DetermineScaling()
         m_previewPrintout->SetPaperRectPixels(wxRect(0, 0, m_pageWidth, m_pageHeight));
 
         // At 100%, the page should look about page-size on the screen.
-        m_previewScaleX = 0.8 * 72.0 / (double)m_resolution;
-        m_previewScaleY = m_previewScaleX;
+        m_previewScaleX = float(logPPIScreenX) / logPPIPrinterX;
+        m_previewScaleY = float(logPPIScreenY) / logPPIPrinterY;
     }
 }