Improve print preview and printing with high DPI
All print related scaling is based on 96DPI, so always let the printing contexts return this, and also adjust the font to this DPI.
This commit is contained in:
@@ -36,6 +36,13 @@ public:
|
||||
|
||||
virtual wxRect GetPaperRect() const wxOVERRIDE;
|
||||
|
||||
virtual wxSize FromDIP(const wxSize& sz) const wxOVERRIDE
|
||||
{
|
||||
return sz;
|
||||
}
|
||||
|
||||
void SetFont(const wxFont& font) wxOVERRIDE;
|
||||
|
||||
protected:
|
||||
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
|
||||
bool useMask = false) wxOVERRIDE;
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "wx/print.h"
|
||||
#include "wx/dcprint.h"
|
||||
#include "wx/artprov.h"
|
||||
#include "wx/display.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -638,7 +639,7 @@ bool wxPrintout::SetUp(wxDC& dc)
|
||||
{
|
||||
wxCHECK_MSG( dc.IsOk(), false, "should have a valid DC to set up" );
|
||||
|
||||
SetPPIScreen(wxGetDisplayPPI());
|
||||
SetPPIScreen(wxDisplay::GetStdPPI());
|
||||
|
||||
// We need to know printer PPI. In most ports, this can be retrieved from
|
||||
// the printer DC, but in others it is computed (probably for legacy
|
||||
@@ -1613,7 +1614,7 @@ void wxPreviewControlBar::CreateButtons()
|
||||
};
|
||||
int n = WXSIZEOF(choices);
|
||||
|
||||
m_zoomControl = new wxChoice( this, wxID_PREVIEW_ZOOM, wxDefaultPosition, wxSize(70,wxDefaultCoord), n, choices, 0 );
|
||||
m_zoomControl = new wxChoice( this, wxID_PREVIEW_ZOOM, wxDefaultPosition, wxSize(FromDIP(70),wxDefaultCoord), n, choices, 0 );
|
||||
sizer.Add(m_zoomControl);
|
||||
SetZoomControl(m_printPreview->GetZoom());
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#endif
|
||||
|
||||
#include "wx/printdlg.h"
|
||||
#include "wx/display.h"
|
||||
#include "wx/msw/printdlg.h"
|
||||
|
||||
// mingw32 defines GDI_ERROR incorrectly
|
||||
@@ -230,6 +231,13 @@ wxRect wxPrinterDCImpl::GetPaperRect() const
|
||||
return wxRect(x, y, w, h);
|
||||
}
|
||||
|
||||
void wxPrinterDCImpl::SetFont(const wxFont& font)
|
||||
{
|
||||
wxFont scaledFont = font;
|
||||
if ( scaledFont.IsOk() )
|
||||
scaledFont.WXAdjustToPPI(wxDisplay::GetStdPPI());
|
||||
wxMSWDCImpl::SetFont(scaledFont);
|
||||
}
|
||||
|
||||
#if !wxUSE_PS_PRINTING
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include "wx/metafile.h"
|
||||
#include "wx/clipbrd.h"
|
||||
#include "wx/display.h"
|
||||
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
@@ -223,6 +224,19 @@ public:
|
||||
const wxString& description );
|
||||
virtual ~wxEnhMetaFileDCImpl();
|
||||
|
||||
wxSize FromDIP(const wxSize& sz) const wxOVERRIDE
|
||||
{
|
||||
return sz;
|
||||
}
|
||||
|
||||
void SetFont(const wxFont& font) wxOVERRIDE
|
||||
{
|
||||
wxFont scaledFont = font;
|
||||
if (scaledFont.IsOk())
|
||||
scaledFont.WXAdjustToPPI(wxDisplay::GetStdPPI());
|
||||
wxMSWDCImpl::SetFont(scaledFont);
|
||||
}
|
||||
|
||||
// obtain a pointer to the new metafile (caller should delete it)
|
||||
wxEnhMetaFile *Close();
|
||||
|
||||
|
||||
@@ -2544,12 +2544,10 @@ wxGDIPlusPrintingContext::wxGDIPlusPrintingContext( wxGraphicsRenderer* renderer
|
||||
|
||||
void wxGDIPlusPrintingContext::GetDPI(wxDouble* dpiX, wxDouble* dpiY) const
|
||||
{
|
||||
// override to use same scaling as wxWindowsPrintPreview::DetermineScaling
|
||||
const wxSize dpi = wxGetDPIofHDC(ScreenHDC());
|
||||
if ( dpiX )
|
||||
*dpiX = dpi.x;
|
||||
*dpiX = 96.0;
|
||||
if ( dpiY )
|
||||
*dpiY = dpi.y;
|
||||
*dpiY = 96.0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "wx/msw/private.h"
|
||||
#include "wx/msw/dcprint.h"
|
||||
#include "wx/msw/enhmeta.h"
|
||||
#include "wx/display.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -310,7 +311,7 @@ bool wxWindowsPrintPreview::Print(bool interactive)
|
||||
|
||||
void wxWindowsPrintPreview::DetermineScaling()
|
||||
{
|
||||
const wxSize logPPIScreen = wxGetDPIofHDC(ScreenHDC());
|
||||
const wxSize logPPIScreen = wxDisplay::GetStdPPI();
|
||||
m_previewPrintout->SetPPIScreen(logPPIScreen);
|
||||
|
||||
// Get a device context for the currently selected printer
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#include "wx/printdlg.h"
|
||||
#include "wx/paper.h"
|
||||
#include "wx/display.h"
|
||||
#include "wx/osx/printdlg.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
@@ -746,10 +747,7 @@ bool wxMacPrintPreview::Print(bool interactive)
|
||||
|
||||
void wxMacPrintPreview::DetermineScaling()
|
||||
{
|
||||
int screenWidth , screenHeight ;
|
||||
wxDisplaySize( &screenWidth , &screenHeight ) ;
|
||||
|
||||
wxSize ppiScreen = wxGetDisplayPPI();
|
||||
wxSize ppiScreen = wxDisplay::GetStdPPI();
|
||||
wxSize ppiPrinter( 72 , 72 ) ;
|
||||
|
||||
m_previewPrintout->SetPPIScreen( ppiScreen.x , ppiScreen.y ) ;
|
||||
|
||||
Reference in New Issue
Block a user