git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54119 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
621 lines
18 KiB
C++
621 lines
18 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/mac/carbon/printwin.cpp
|
|
// Purpose: wxMacPrinter framework
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 04/01/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// For compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#if wxUSE_PRINTING_ARCHITECTURE
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/utils.h"
|
|
#include "wx/dc.h"
|
|
#include "wx/app.h"
|
|
#include "wx/msgdlg.h"
|
|
#include "wx/dcprint.h"
|
|
#include "wx/math.h"
|
|
#endif
|
|
|
|
#include "wx/mac/uma.h"
|
|
|
|
#include "wx/mac/printmac.h"
|
|
#include "wx/mac/private/print.h"
|
|
|
|
#include "wx/printdlg.h"
|
|
#include "wx/paper.h"
|
|
#include "wx/mac/printdlg.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
IMPLEMENT_DYNAMIC_CLASS(wxMacCarbonPrintData, wxPrintNativeDataBase)
|
|
IMPLEMENT_DYNAMIC_CLASS(wxMacPrinter, wxPrinterBase)
|
|
IMPLEMENT_CLASS(wxMacPrintPreview, wxPrintPreviewBase)
|
|
|
|
bool wxMacCarbonPrintData::IsOk() const
|
|
{
|
|
return (m_macPageFormat != kPMNoPageFormat) && (m_macPrintSettings != kPMNoPrintSettings) && (m_macPrintSession != kPMNoReference);
|
|
}
|
|
wxMacCarbonPrintData::wxMacCarbonPrintData()
|
|
{
|
|
m_macPageFormat = kPMNoPageFormat;
|
|
m_macPrintSettings = kPMNoPrintSettings;
|
|
m_macPrintSession = kPMNoReference ;
|
|
ValidateOrCreate() ;
|
|
}
|
|
|
|
wxMacCarbonPrintData::~wxMacCarbonPrintData()
|
|
{
|
|
if (m_macPageFormat != kPMNoPageFormat)
|
|
{
|
|
(void)PMRelease(m_macPageFormat);
|
|
m_macPageFormat = kPMNoPageFormat;
|
|
}
|
|
|
|
if (m_macPrintSettings != kPMNoPrintSettings)
|
|
{
|
|
(void)PMRelease(m_macPrintSettings);
|
|
m_macPrintSettings = kPMNoPrintSettings;
|
|
}
|
|
|
|
if ( m_macPrintSession != kPMNoReference )
|
|
{
|
|
(void)PMRelease(m_macPrintSession);
|
|
m_macPrintSession = kPMNoReference;
|
|
}
|
|
}
|
|
|
|
void wxMacCarbonPrintData::ValidateOrCreate()
|
|
{
|
|
OSStatus err = noErr ;
|
|
if ( m_macPrintSession == kPMNoReference )
|
|
{
|
|
err = PMCreateSession( &m_macPrintSession ) ;
|
|
}
|
|
// Set up a valid PageFormat object.
|
|
if ( m_macPageFormat == kPMNoPageFormat)
|
|
{
|
|
err = PMCreatePageFormat(&m_macPageFormat);
|
|
|
|
// Note that PMPageFormat is not session-specific, but calling
|
|
// PMSessionDefaultPageFormat assigns values specific to the printer
|
|
// associated with the current printing session.
|
|
if ((err == noErr) &&
|
|
( m_macPageFormat != kPMNoPageFormat))
|
|
{
|
|
err = PMSessionDefaultPageFormat(m_macPrintSession,
|
|
m_macPageFormat);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
err = PMSessionValidatePageFormat(m_macPrintSession,
|
|
m_macPageFormat,
|
|
kPMDontWantBoolean);
|
|
}
|
|
|
|
// Set up a valid PrintSettings object.
|
|
if ( m_macPrintSettings == kPMNoPrintSettings)
|
|
{
|
|
err = PMCreatePrintSettings( &m_macPrintSettings);
|
|
|
|
// Note that PMPrintSettings is not session-specific, but calling
|
|
// PMSessionDefaultPrintSettings assigns values specific to the printer
|
|
// associated with the current printing session.
|
|
if ((err == noErr) &&
|
|
( m_macPrintSettings != kPMNoPrintSettings))
|
|
{
|
|
err = PMSessionDefaultPrintSettings(m_macPrintSession,
|
|
m_macPrintSettings);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
err = PMSessionValidatePrintSettings( m_macPrintSession,
|
|
m_macPrintSettings,
|
|
kPMDontWantBoolean);
|
|
}
|
|
}
|
|
|
|
bool wxMacCarbonPrintData::TransferFrom( const wxPrintData &data )
|
|
{
|
|
ValidateOrCreate() ;
|
|
PMSetCopies( (PMPrintSettings) m_macPrintSettings , data.GetNoCopies() , false ) ;
|
|
if ( data.IsOrientationReversed() )
|
|
PMSetOrientation( (PMPageFormat) m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ?
|
|
kPMReverseLandscape : kPMReversePortrait , false ) ;
|
|
else
|
|
PMSetOrientation( (PMPageFormat) m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ?
|
|
kPMLandscape : kPMPortrait , false ) ;
|
|
// collate cannot be set
|
|
#if 0 // not yet tested
|
|
if ( !m_printerName.empty() )
|
|
PMSessionSetCurrentPrinter( (PMPrintSession) m_macPrintSession , wxCFStringRef( m_printerName , wxFont::GetDefaultEncoding() ) ) ;
|
|
#endif
|
|
#ifndef __LP64__
|
|
PMColorMode color ;
|
|
PMGetColorMode( (PMPrintSettings) m_macPrintSettings, &color ) ;
|
|
if ( data.GetColour() )
|
|
{
|
|
if ( color == kPMBlackAndWhite )
|
|
PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMColor ) ;
|
|
}
|
|
else
|
|
PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMBlackAndWhite ) ;
|
|
#endif
|
|
|
|
PMDuplexMode mode = 0 ;
|
|
switch( data.GetDuplex() )
|
|
{
|
|
case wxDUPLEX_HORIZONTAL :
|
|
mode = kPMDuplexNoTumble ;
|
|
break ;
|
|
case wxDUPLEX_VERTICAL :
|
|
mode = kPMDuplexTumble ;
|
|
break ;
|
|
case wxDUPLEX_SIMPLEX :
|
|
default :
|
|
mode = kPMDuplexNone ;
|
|
break ;
|
|
}
|
|
PMSetDuplex( (PMPrintSettings) m_macPrintSettings, mode ) ;
|
|
|
|
// PMQualityMode not yet accessible via API
|
|
// todo paperSize
|
|
|
|
PMResolution res;
|
|
PMPrinter printer;
|
|
PMSessionGetCurrentPrinter(m_macPrintSession, &printer);
|
|
#if 0 // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|
|
PMPrinterGetOutputResolution( printer,
|
|
(PMPrintSettings) m_macPrintSettings, &res) ;
|
|
// TODO transfer ? into page format ?
|
|
// may fail !
|
|
#else
|
|
PMTag tag = kPMMaxSquareResolution;
|
|
PMPrinterGetPrinterResolution(printer, tag, &res);
|
|
PMSetResolution((PMPageFormat) m_macPageFormat, &res);
|
|
#endif
|
|
// after setting the new resolution the format has to be updated, otherwise the page rect remains
|
|
// at the 'old' scaling
|
|
PMSessionValidatePageFormat((PMPrintSession) m_macPrintSession,
|
|
(PMPageFormat) m_macPageFormat,
|
|
kPMDontWantBoolean) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
bool wxMacCarbonPrintData::TransferTo( wxPrintData &data )
|
|
{
|
|
OSStatus err = noErr ;
|
|
|
|
UInt32 copies ;
|
|
err = PMGetCopies( m_macPrintSettings , &copies ) ;
|
|
if ( err == noErr )
|
|
data.SetNoCopies( copies ) ;
|
|
|
|
PMOrientation orientation ;
|
|
err = PMGetOrientation( m_macPageFormat , &orientation ) ;
|
|
if ( err == noErr )
|
|
{
|
|
if ( orientation == kPMPortrait || orientation == kPMReversePortrait )
|
|
{
|
|
data.SetOrientation( wxPORTRAIT );
|
|
data.SetOrientationReversed( orientation == kPMReversePortrait );
|
|
}
|
|
else
|
|
{
|
|
data.SetOrientation( wxLANDSCAPE );
|
|
data.SetOrientationReversed( orientation == kPMReverseLandscape );
|
|
}
|
|
}
|
|
|
|
// collate cannot be set
|
|
#if 0
|
|
{
|
|
wxCFStringRef name ;
|
|
PMPrinter printer ;
|
|
PMSessionGetCurrentPrinter( m_macPrintSession ,
|
|
&printer ) ;
|
|
m_printerName = name.AsString() ;
|
|
}
|
|
#endif
|
|
|
|
#ifndef __LP64__
|
|
PMColorMode color ;
|
|
err = PMGetColorMode( m_macPrintSettings, &color ) ;
|
|
if ( err == noErr )
|
|
data.SetColour( !(color == kPMBlackAndWhite) ) ;
|
|
#endif
|
|
PMDuplexMode mode = 0 ;
|
|
PMGetDuplex( (PMPrintSettings) m_macPrintSettings, &mode ) ;
|
|
switch( mode )
|
|
{
|
|
case kPMDuplexNoTumble :
|
|
data.SetDuplex(wxDUPLEX_HORIZONTAL);
|
|
break ;
|
|
case kPMDuplexTumble :
|
|
data.SetDuplex(wxDUPLEX_VERTICAL);
|
|
break ;
|
|
case kPMDuplexNone :
|
|
default :
|
|
data.SetDuplex(wxDUPLEX_SIMPLEX);
|
|
break ;
|
|
}
|
|
// PMQualityMode not yet accessible via API
|
|
|
|
PMPaper paper ;
|
|
PMGetPageFormatPaper( m_macPageFormat, &paper );
|
|
|
|
PMRect rPaper;
|
|
err = PMGetUnadjustedPaperRect( m_macPageFormat, &rPaper);
|
|
if ( err == noErr )
|
|
{
|
|
wxSize sz((int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 ) ,
|
|
(int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 ));
|
|
data.SetPaperSize(sz);
|
|
wxPaperSize id = wxThePrintPaperDatabase->GetSize(wxSize(sz.x* 10, sz.y * 10));
|
|
if (id != wxPAPER_NONE)
|
|
{
|
|
data.SetPaperId(id);
|
|
}
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
void wxMacCarbonPrintData::TransferFrom( wxPageSetupData *WXUNUSED(data) )
|
|
{
|
|
// should we setup the page rect here ?
|
|
// since MacOS sometimes has two same paper rects with different
|
|
// page rects we could make it roundtrip safe perhaps
|
|
}
|
|
|
|
void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data )
|
|
{
|
|
PMRect rPaper;
|
|
OSStatus err = PMGetUnadjustedPaperRect(m_macPageFormat, &rPaper);
|
|
if ( err == noErr )
|
|
{
|
|
wxSize sz((int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 ) ,
|
|
(int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 ));
|
|
data->SetPaperSize(sz);
|
|
|
|
PMRect rPage ;
|
|
err = PMGetUnadjustedPageRect(m_macPageFormat , &rPage ) ;
|
|
if ( err == noErr )
|
|
{
|
|
data->SetMinMarginTopLeft( wxPoint (
|
|
(int)(((double) rPage.left - rPaper.left ) * pt2mm) ,
|
|
(int)(((double) rPage.top - rPaper.top ) * pt2mm) ) ) ;
|
|
|
|
data->SetMinMarginBottomRight( wxPoint (
|
|
(wxCoord)(((double) rPaper.right - rPage.right ) * pt2mm),
|
|
(wxCoord)(((double) rPaper.bottom - rPage.bottom ) * pt2mm)) ) ;
|
|
|
|
if ( data->GetMarginTopLeft().x < data->GetMinMarginTopLeft().x )
|
|
data->SetMarginTopLeft( wxPoint( data->GetMinMarginTopLeft().x ,
|
|
data->GetMarginTopLeft().y ) ) ;
|
|
|
|
if ( data->GetMarginBottomRight().x < data->GetMinMarginBottomRight().x )
|
|
data->SetMarginBottomRight( wxPoint( data->GetMinMarginBottomRight().x ,
|
|
data->GetMarginBottomRight().y ) );
|
|
|
|
if ( data->GetMarginTopLeft().y < data->GetMinMarginTopLeft().y )
|
|
data->SetMarginTopLeft( wxPoint( data->GetMarginTopLeft().x , data->GetMinMarginTopLeft().y ) );
|
|
|
|
if ( data->GetMarginBottomRight().y < data->GetMinMarginBottomRight().y )
|
|
data->SetMarginBottomRight( wxPoint( data->GetMarginBottomRight().x ,
|
|
data->GetMinMarginBottomRight().y) );
|
|
}
|
|
}
|
|
}
|
|
|
|
void wxMacCarbonPrintData::TransferTo( wxPrintDialogData* data )
|
|
{
|
|
UInt32 minPage , maxPage ;
|
|
PMGetPageRange( m_macPrintSettings , &minPage , &maxPage ) ;
|
|
data->SetMinPage( minPage ) ;
|
|
data->SetMaxPage( maxPage ) ;
|
|
UInt32 copies ;
|
|
PMGetCopies( m_macPrintSettings , &copies ) ;
|
|
data->SetNoCopies( copies ) ;
|
|
UInt32 from , to ;
|
|
PMGetFirstPage( m_macPrintSettings , &from ) ;
|
|
PMGetLastPage( m_macPrintSettings , &to ) ;
|
|
if ( to >= 0x7FFFFFFF ) // due to an OS Bug we don't get back kPMPrintAllPages
|
|
{
|
|
data->SetAllPages( true ) ;
|
|
// This means all pages, more or less
|
|
data->SetFromPage(1);
|
|
data->SetToPage(32000);
|
|
}
|
|
else
|
|
{
|
|
data->SetFromPage( from ) ;
|
|
data->SetToPage( to ) ;
|
|
data->SetAllPages( false );
|
|
}
|
|
}
|
|
|
|
void wxMacCarbonPrintData::TransferFrom( wxPrintDialogData* data )
|
|
{
|
|
// Respect the value of m_printAllPages
|
|
if ( data->GetAllPages() )
|
|
PMSetPageRange( m_macPrintSettings , data->GetMinPage() , (UInt32) kPMPrintAllPages ) ;
|
|
else
|
|
PMSetPageRange( m_macPrintSettings , data->GetMinPage() , data->GetMaxPage() ) ;
|
|
PMSetCopies( m_macPrintSettings , data->GetNoCopies() , false ) ;
|
|
PMSetFirstPage( m_macPrintSettings , data->GetFromPage() , false ) ;
|
|
|
|
if (data->GetAllPages() || data->GetFromPage() == 0)
|
|
PMSetLastPage( m_macPrintSettings , (UInt32) kPMPrintAllPages, true ) ;
|
|
else
|
|
PMSetLastPage( m_macPrintSettings , (UInt32) data->GetToPage() , false ) ;
|
|
}
|
|
|
|
/*
|
|
* Printer
|
|
*/
|
|
|
|
wxMacPrinter::wxMacPrinter(wxPrintDialogData *data):
|
|
wxPrinterBase(data)
|
|
{
|
|
}
|
|
|
|
wxMacPrinter::~wxMacPrinter(void)
|
|
{
|
|
}
|
|
|
|
bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
|
|
{
|
|
sm_abortIt = false;
|
|
sm_abortWindow = NULL;
|
|
|
|
if (!printout)
|
|
return false;
|
|
|
|
printout->SetIsPreview(false);
|
|
if (m_printDialogData.GetMinPage() < 1)
|
|
m_printDialogData.SetMinPage(1);
|
|
if (m_printDialogData.GetMaxPage() < 1)
|
|
m_printDialogData.SetMaxPage(9999);
|
|
|
|
// Create a suitable device context
|
|
wxPrinterDC *dc = NULL;
|
|
if (prompt)
|
|
{
|
|
wxMacPrintDialog dialog(parent, & m_printDialogData);
|
|
if (dialog.ShowModal() == wxID_OK)
|
|
{
|
|
dc = wxDynamicCast(dialog.GetPrintDC(), wxPrinterDC);
|
|
wxASSERT(dc);
|
|
m_printDialogData = dialog.GetPrintDialogData();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dc = new wxPrinterDC( m_printDialogData.GetPrintData() ) ;
|
|
}
|
|
|
|
// May have pressed cancel.
|
|
if (!dc || !dc->IsOk())
|
|
{
|
|
if (dc)
|
|
delete dc;
|
|
return false;
|
|
}
|
|
|
|
// on the mac we have always pixels as addressing mode with 72 dpi
|
|
printout->SetPPIScreen(72, 72);
|
|
PMResolution res;
|
|
wxMacCarbonPrintData* nativeData = (wxMacCarbonPrintData*)
|
|
(m_printDialogData.GetPrintData().GetNativeData());
|
|
#if 0 // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|
|
PMPrinter printer;
|
|
PMSessionGetCurrentPrinter(nativeData->m_macPrintSession, &printer);
|
|
PMPrinterGetOutputResolution( printer, nativeData->m_macPrintSettings, &res) ;
|
|
#else
|
|
PMGetResolution((PMPageFormat) (nativeData->m_macPageFormat), &res);
|
|
#endif
|
|
printout->SetPPIPrinter(int(res.hRes), int(res.vRes));
|
|
|
|
// Set printout parameters
|
|
printout->SetDC(dc);
|
|
|
|
int w, h;
|
|
dc->GetSize(&w, &h);
|
|
printout->SetPageSizePixels((int)w, (int)h);
|
|
printout->SetPaperRectPixels(dc->GetPaperRect());
|
|
wxCoord mw, mh;
|
|
dc->GetSizeMM(&mw, &mh);
|
|
printout->SetPageSizeMM((int)mw, (int)mh);
|
|
|
|
// Create an abort window
|
|
wxBeginBusyCursor();
|
|
|
|
printout->OnPreparePrinting();
|
|
|
|
// Get some parameters from the printout, if defined
|
|
int fromPage, toPage;
|
|
int minPage, maxPage;
|
|
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
|
|
|
|
if (maxPage == 0)
|
|
{
|
|
wxEndBusyCursor();
|
|
return false;
|
|
}
|
|
|
|
// Only set min and max, because from and to have been
|
|
// set by the user
|
|
m_printDialogData.SetMinPage(minPage);
|
|
m_printDialogData.SetMaxPage(maxPage);
|
|
|
|
printout->OnBeginPrinting();
|
|
|
|
bool keepGoing = true;
|
|
|
|
if (!printout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage()))
|
|
{
|
|
wxEndBusyCursor();
|
|
wxMessageBox(wxT("Could not start printing."), wxT("Print Error"), wxOK, parent);
|
|
}
|
|
|
|
int pn;
|
|
for (pn = m_printDialogData.GetFromPage();
|
|
keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn);
|
|
pn++)
|
|
{
|
|
if (sm_abortIt)
|
|
{
|
|
keepGoing = false;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
dc->StartPage();
|
|
keepGoing = printout->OnPrintPage(pn);
|
|
dc->EndPage();
|
|
}
|
|
}
|
|
printout->OnEndDocument();
|
|
|
|
printout->OnEndPrinting();
|
|
|
|
if (sm_abortWindow)
|
|
{
|
|
sm_abortWindow->Show(false);
|
|
delete sm_abortWindow;
|
|
sm_abortWindow = NULL;
|
|
}
|
|
|
|
wxEndBusyCursor();
|
|
|
|
delete dc;
|
|
|
|
return true;
|
|
}
|
|
|
|
wxDC* wxMacPrinter::PrintDialog(wxWindow *parent)
|
|
{
|
|
wxDC* dc = (wxDC*) NULL;
|
|
|
|
wxPrintDialog dialog(parent, & m_printDialogData);
|
|
int ret = dialog.ShowModal();
|
|
|
|
if (ret == wxID_OK)
|
|
{
|
|
dc = dialog.GetPrintDC();
|
|
m_printDialogData = dialog.GetPrintDialogData();
|
|
}
|
|
|
|
return dc;
|
|
}
|
|
|
|
bool wxMacPrinter::Setup(wxWindow *WXUNUSED(parent))
|
|
{
|
|
#if 0
|
|
wxPrintDialog dialog(parent, & m_printDialogData);
|
|
dialog.GetPrintDialogData().SetSetupDialog(true);
|
|
|
|
int ret = dialog.ShowModal();
|
|
|
|
if (ret == wxID_OK)
|
|
m_printDialogData = dialog.GetPrintDialogData();
|
|
|
|
return (ret == wxID_OK);
|
|
#endif
|
|
|
|
return wxID_CANCEL;
|
|
}
|
|
|
|
/*
|
|
* Print preview
|
|
*/
|
|
|
|
wxMacPrintPreview::wxMacPrintPreview(wxPrintout *printout,
|
|
wxPrintout *printoutForPrinting,
|
|
wxPrintDialogData *data)
|
|
: wxPrintPreviewBase(printout, printoutForPrinting, data)
|
|
{
|
|
DetermineScaling();
|
|
}
|
|
|
|
wxMacPrintPreview::wxMacPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data):
|
|
wxPrintPreviewBase(printout, printoutForPrinting, data)
|
|
{
|
|
DetermineScaling();
|
|
}
|
|
|
|
wxMacPrintPreview::~wxMacPrintPreview(void)
|
|
{
|
|
}
|
|
|
|
bool wxMacPrintPreview::Print(bool interactive)
|
|
{
|
|
if (!m_printPrintout)
|
|
return false;
|
|
|
|
wxMacPrinter printer(&m_printDialogData);
|
|
return printer.Print(m_previewFrame, m_printPrintout, interactive);
|
|
}
|
|
|
|
void wxMacPrintPreview::DetermineScaling(void)
|
|
{
|
|
int screenWidth , screenHeight ;
|
|
wxDisplaySize( &screenWidth , &screenHeight ) ;
|
|
|
|
wxSize ppiScreen( 72 , 72 ) ;
|
|
wxSize ppiPrinter( 72 , 72 ) ;
|
|
|
|
// Note that with Leopard, screen dpi=72 is no longer a given
|
|
m_previewPrintout->SetPPIScreen( ppiScreen.x , ppiScreen.y ) ;
|
|
|
|
wxCoord w , h ;
|
|
wxCoord ww, hh;
|
|
wxRect paperRect;
|
|
|
|
// Get a device context for the currently selected printer
|
|
wxPrinterDC printerDC(m_printDialogData.GetPrintData());
|
|
if (printerDC.IsOk())
|
|
{
|
|
printerDC.GetSizeMM(&ww, &hh);
|
|
printerDC.GetSize( &w , &h ) ;
|
|
ppiPrinter = printerDC.GetPPI() ;
|
|
paperRect = printerDC.GetPaperRect();
|
|
m_isOk = true ;
|
|
}
|
|
else
|
|
{
|
|
// use some defaults
|
|
w = 8 * 72 ;
|
|
h = 11 * 72 ;
|
|
ww = (wxCoord) (w * 25.4 / ppiPrinter.x) ;
|
|
hh = (wxCoord) (h * 25.4 / ppiPrinter.y) ;
|
|
paperRect = wxRect(0, 0, w, h);
|
|
m_isOk = false ;
|
|
}
|
|
m_pageWidth = w;
|
|
m_pageHeight = h;
|
|
|
|
m_previewPrintout->SetPageSizePixels(w , h) ;
|
|
m_previewPrintout->SetPageSizeMM(ww, hh);
|
|
m_previewPrintout->SetPaperRectPixels(paperRect);
|
|
m_previewPrintout->SetPPIPrinter( ppiPrinter.x , ppiPrinter.y ) ;
|
|
|
|
m_previewScaleX = float(ppiScreen.x) / ppiPrinter.x;
|
|
m_previewScaleY = float(ppiScreen.y) / ppiPrinter.y;
|
|
}
|
|
|
|
#endif
|