Compute print preview scale using real DPI values in wxGTK.

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
This commit is contained in:
Vadim Zeitlin
2010-12-22 13:57:03 +00:00
parent ba67d647e8
commit ac78a90a1a
2 changed files with 20 additions and 12 deletions

View File

@@ -330,14 +330,16 @@ void wxPostScriptPrintPreview::DetermineScaling()
if (paper) if (paper)
{ {
wxSize ScreenPixels = wxGetDisplaySize();
wxSize ScreenMM = wxGetDisplaySizeMM();
int resolution = 600; // TODO, this is correct, but get this from wxPSDC somehow int resolution = 600; // TODO, this is correct, but get this from wxPSDC somehow
m_previewPrintout->SetPPIScreen( (int) ((ScreenPixels.GetWidth() * 25.4) / ScreenMM.GetWidth()), const wxSize screenPPI = wxGetDisplayPPI();
(int) ((ScreenPixels.GetHeight() * 25.4) / ScreenMM.GetHeight()) ); int logPPIScreenX = screenPPI.GetWidth();
m_previewPrintout->SetPPIPrinter( resolution, resolution ); int logPPIScreenY = screenPPI.GetHeight();
int logPPIPrinterX = resolution;
int logPPIPrinterY = resolution;
m_previewPrintout->SetPPIScreen( logPPIScreenX, logPPIScreenY );
m_previewPrintout->SetPPIPrinter( logPPIPrinterX, logPPIPrinterY );
wxSize sizeDevUnits(paper->GetSizeDeviceUnits()); wxSize sizeDevUnits(paper->GetSizeDeviceUnits());
sizeDevUnits.x = (wxCoord)((float)sizeDevUnits.x * resolution / 72.0); 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)); m_previewPrintout->SetPaperRectPixels(wxRect(0, 0, m_pageWidth, m_pageHeight));
// At 100%, the page should look about page-size on the screen. // At 100%, the page should look about page-size on the screen.
m_previewScaleX = (float)0.8 * 72.0 / (float)resolution; m_previewScaleX = float(logPPIScreenX) / logPPIPrinterX;
m_previewScaleY = m_previewScaleX; m_previewScaleY = float(logPPIScreenY) / logPPIPrinterY;
} }
} }

View File

@@ -2308,8 +2308,14 @@ void wxGtkPrintPreview::DetermineScaling()
if (paper) if (paper)
{ {
m_previewPrintout->SetPPIScreen(wxGetDisplayPPI()); const wxSize screenPPI = wxGetDisplayPPI();
m_previewPrintout->SetPPIPrinter( m_resolution, m_resolution ); 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) // Get width and height in points (1/72th of an inch)
wxSize sizeDevUnits(paper->GetSizeDeviceUnits()); wxSize sizeDevUnits(paper->GetSizeDeviceUnits());
@@ -2336,8 +2342,8 @@ void wxGtkPrintPreview::DetermineScaling()
m_previewPrintout->SetPaperRectPixels(wxRect(0, 0, m_pageWidth, m_pageHeight)); m_previewPrintout->SetPaperRectPixels(wxRect(0, 0, m_pageWidth, m_pageHeight));
// At 100%, the page should look about page-size on the screen. // At 100%, the page should look about page-size on the screen.
m_previewScaleX = 0.8 * 72.0 / (double)m_resolution; m_previewScaleX = float(logPPIScreenX) / logPPIPrinterX;
m_previewScaleY = m_previewScaleX; m_previewScaleY = float(logPPIScreenY) / logPPIPrinterY;
} }
} }