set resolution of print preview from print data (modified patch 1851381)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-01-03 22:21:04 +00:00
parent dd0af4bb63
commit 115be92b4f
2 changed files with 49 additions and 20 deletions

View File

@@ -332,11 +332,16 @@ public:
virtual void DetermineScaling(); virtual void DetermineScaling();
private: private:
void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); void Init(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data);
// resolution to use in DPI
int m_resolution;
DECLARE_CLASS(wxGtkPrintPreview) DECLARE_CLASS(wxGtkPrintPreview)
}; };
#endif #endif // wxUSE_GTKPRINT
#endif #endif // _WX_GTK_PRINT_H_

View File

@@ -1088,8 +1088,8 @@ bool wxGtkPrinter::Setup( wxWindow * WXUNUSED(parent) )
IMPLEMENT_ABSTRACT_CLASS(wxGtkPrinterDCImpl, wxDCImpl) IMPLEMENT_ABSTRACT_CLASS(wxGtkPrinterDCImpl, wxDCImpl)
wxGtkPrinterDCImpl::wxGtkPrinterDCImpl( wxPrinterDC *owner, const wxPrintData& data ) : wxGtkPrinterDCImpl::wxGtkPrinterDCImpl(wxPrinterDC *owner, const wxPrintData& data)
wxDCImpl( owner ) : wxDCImpl( owner )
{ {
m_printData = data; m_printData = data;
@@ -2251,25 +2251,51 @@ int wxGtkPrinterDCImpl::GetResolution()
IMPLEMENT_CLASS(wxGtkPrintPreview, wxPrintPreviewBase) IMPLEMENT_CLASS(wxGtkPrintPreview, wxPrintPreviewBase)
void wxGtkPrintPreview::Init(wxPrintout * WXUNUSED(printout), void wxGtkPrintPreview::Init(wxPrintout * WXUNUSED(printout),
wxPrintout * WXUNUSED(printoutForPrinting)) wxPrintout * WXUNUSED(printoutForPrinting),
wxPrintData *data)
{ {
DetermineScaling(); DetermineScaling();
// convert wxPrintQuality to resolution (input pointer can be NULL)
wxPrintQuality quality = data ? data->GetQuality() : wxPRINT_QUALITY_MEDIUM;
switch ( quality )
{
case wxPRINT_QUALITY_HIGH:
m_resolution = 1200;
break;
default:
wxFAIL_MSG( "unknown print quality" );
// fall through
case wxPRINT_QUALITY_MEDIUM:
m_resolution = 600;
break;
case wxPRINT_QUALITY_LOW:
m_resolution = 300;
break;
case wxPRINT_QUALITY_DRAFT:
m_resolution = 150;
break;
}
} }
wxGtkPrintPreview::wxGtkPrintPreview(wxPrintout *printout, wxGtkPrintPreview::wxGtkPrintPreview(wxPrintout *printout,
wxPrintout *printoutForPrinting, wxPrintout *printoutForPrinting,
wxPrintDialogData *data) wxPrintDialogData *data)
: wxPrintPreviewBase(printout, printoutForPrinting, data) : wxPrintPreviewBase(printout, printoutForPrinting, data)
{ {
Init(printout, printoutForPrinting); Init(printout, printoutForPrinting, data ? &data->GetPrintData() : NULL);
} }
wxGtkPrintPreview::wxGtkPrintPreview(wxPrintout *printout, wxGtkPrintPreview::wxGtkPrintPreview(wxPrintout *printout,
wxPrintout *printoutForPrinting, wxPrintout *printoutForPrinting,
wxPrintData *data) wxPrintData *data)
: wxPrintPreviewBase(printout, printoutForPrinting, data) : wxPrintPreviewBase(printout, printoutForPrinting, data)
{ {
Init(printout, printoutForPrinting); Init(printout, printoutForPrinting, data);
} }
wxGtkPrintPreview::~wxGtkPrintPreview() wxGtkPrintPreview::~wxGtkPrintPreview()
@@ -2301,15 +2327,13 @@ void wxGtkPrintPreview::DetermineScaling()
m_previewPrintout->SetPPIScreen( (int) ((ScreenPixels.GetWidth() * 25.4) / ScreenMM.GetWidth()), m_previewPrintout->SetPPIScreen( (int) ((ScreenPixels.GetWidth() * 25.4) / ScreenMM.GetWidth()),
(int) ((ScreenPixels.GetHeight() * 25.4) / ScreenMM.GetHeight()) ); (int) ((ScreenPixels.GetHeight() * 25.4) / ScreenMM.GetHeight()) );
// TODO !!!!!!!!!!!!!!! m_previewPrintout->SetPPIPrinter( m_resolution, m_resolution );
int resolution = 600;
m_previewPrintout->SetPPIPrinter( resolution, resolution );
// 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());
sizeDevUnits.x = wxRound((double)sizeDevUnits.x * (double)resolution / 72.0); sizeDevUnits.x = wxRound((double)sizeDevUnits.x * (double)m_resolution / 72.0);
sizeDevUnits.y = wxRound((double)sizeDevUnits.y * (double)resolution / 72.0); sizeDevUnits.y = wxRound((double)sizeDevUnits.y * (double)m_resolution / 72.0);
wxSize sizeTenthsMM(paper->GetSize()); wxSize sizeTenthsMM(paper->GetSize());
wxSize sizeMM(sizeTenthsMM.x / 10, sizeTenthsMM.y / 10); wxSize sizeMM(sizeTenthsMM.x / 10, sizeTenthsMM.y / 10);
@@ -2330,7 +2354,7 @@ 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)resolution; m_previewScaleX = 0.8 * 72.0 / (double)m_resolution;
m_previewScaleY = m_previewScaleX; m_previewScaleY = m_previewScaleX;
} }
} }