X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6aa89a22b8e47000c98bff05c6f545f331f1c353..d109c5849ed117966311a44875c97ae3d77b44e5:/src/mac/carbon/dcprint.cpp diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index 82bdecd0cf..e875cb0387 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -27,429 +27,390 @@ #include "wx/msgdlg.h" #include #include "wx/mac/uma.h" -#ifndef __DARWIN__ -#include "Printing.h" -#endif - -#if defined(TARGET_CARBON) && !defined(__DARWIN__) -# if PM_USE_SESSION_APIS -# include -# endif -# include -#endif +#include "wx/mac/private/print.h" #if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxPrinterDC, wxDC) #endif -GrafPtr macPrintFormerPort = NULL ; +class wxNativePrinterDC +{ +public : + wxNativePrinterDC() {} + virtual ~wxNativePrinterDC() {} + virtual bool StartDoc( wxPrinterDC* dc , const wxString& message ) = 0; + virtual void EndDoc( wxPrinterDC* dc ) = 0; + virtual void StartPage( wxPrinterDC* dc ) = 0; + virtual void EndPage( wxPrinterDC* dc ) = 0; + virtual wxCoord GetMaxX() const = 0 ; + virtual wxCoord GetMaxY() const = 0 ; + // returns 0 in case of no Error, otherwise platform specific error codes + virtual wxUint32 GetStatus() const = 0 ; + bool Ok() { return GetStatus() == 0 ; } -wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) + static wxNativePrinterDC* Create(wxPrintData* data) ; +} ; + +#if TARGET_CARBON + +class wxMacCarbonPrinterDC : public wxNativePrinterDC { - OSStatus err = noErr ; - wxString message ; - - m_printData = printdata ; - m_printData.ConvertToNative() ; +public : + wxMacCarbonPrinterDC( wxPrintData* data ) ; + ~wxMacCarbonPrinterDC() ; + virtual bool StartDoc( wxPrinterDC* dc , const wxString& message ) ; + virtual void EndDoc( wxPrinterDC* dc ) ; + virtual void StartPage( wxPrinterDC* dc ) ; + virtual void EndPage( wxPrinterDC* dc ) ; + virtual wxCoord GetMaxX() const { return m_maxX ; } + virtual wxCoord GetMaxY() const { return m_maxY ; } + virtual wxUint32 GetStatus() const { return m_err ; } +private : + GrafPtr m_macPrintFormerPort ; + wxCoord m_maxX ; + wxCoord m_maxY ; + OSStatus m_err ; +} ; -#if TARGET_CARBON && PM_USE_SESSION_APIS - m_macPrintSessionPort = printdata.m_macPrintSession ; - PMRetain( m_macPrintSessionPort ) ; +wxMacCarbonPrinterDC::wxMacCarbonPrinterDC( wxPrintData* data ) +{ + ::GetPort( & m_macPrintFormerPort ) ; - if ( err != noErr || m_macPrintSessionPort == kPMNoData ) -#else - err = UMAPrOpen(NULL) ; - if ( err != noErr ) -#endif - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); -#if TARGET_CARBON && PM_USE_SESSION_APIS - PMRelease( m_macPrintSessionPort ) ; -#else - UMAPrClose(NULL) ; -#endif - m_ok = FALSE; + m_err = noErr ; + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) data->m_nativePrintData ; + + PMRect rPage; + m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); + if ( m_err != noErr ) return; + + m_maxX = wxCoord(rPage.right - rPage.left) ; + m_maxY = wxCoord(rPage.bottom - rPage.top); +} + +wxMacCarbonPrinterDC::~wxMacCarbonPrinterDC() +{ + // nothing to release from print data, as wxPrinterDC has all data in its wxPrintData member + ::SetPort( m_macPrintFormerPort ) ; +} + +wxNativePrinterDC* wxNativePrinterDC::Create(wxPrintData* data) +{ + return new wxMacCarbonPrinterDC(data) ; +} + +bool wxMacCarbonPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& WXUNUSED(message) ) +{ + if ( m_err ) + return false ; + + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + + m_err = PMSessionBeginDocument(native->m_macPrintSession, + native->m_macPrintSettings, + native->m_macPageFormat); + if ( m_err != noErr ) + return false; + + PMRect rPage; + m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); + if ( m_err != noErr ) + return false; + + m_maxX = (wxCoord)(rPage.right - rPage.left); + m_maxY = (wxCoord)(rPage.bottom - rPage.top); + return true ; +} + +void wxMacCarbonPrinterDC::EndDoc( wxPrinterDC* dc ) +{ + if ( m_err ) + return ; + + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + + m_err = PMSessionEndDocument(native->m_macPrintSession); +} + +void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) +{ + if ( m_err ) + return ; + + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + + m_err = PMSessionBeginPage(native->m_macPrintSession, + native->m_macPageFormat, + nil); + + if ( m_err == noErr ) + { + m_err = PMSessionGetGraphicsContext(native->m_macPrintSession, + nil, + (void**) &dc->m_macPort ); } - -#if !TARGET_CARBON - if ( ::PrValidate( (THPrint) m_printData.m_macPrintSettings ) ) + + if ( m_err != noErr ) { - // the driver has changed in the mean time, should we pop up a page setup dialog ? - if ( !::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) ) - { - UMAPrClose(NULL) ; - m_ok = FALSE; - return; - } + PMSessionEndPage(native->m_macPrintSession); + PMSessionEndDocument(native->m_macPrintSession); } - err = PrError() ; - if ( err != noErr ) + else { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - UMAPrClose(NULL) ; - m_ok = FALSE; - return; + PMRect rPage; + + m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); + if ( !m_err ) + { + dc->m_macLocalOrigin.x = (int) rPage.left; + dc->m_macLocalOrigin.y = (int) rPage.top; + } + // since this is a non-critical error, we set the flag back + m_err = noErr ; } - ::GetPort( &macPrintFormerPort ) ; - /* - m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ; - err = PrError() ; - if ( err ) +} + +void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) +{ + if ( m_err ) + return ; + + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + + m_err = PMSessionEndPage(native->m_macPrintSession); + if ( m_err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - UMAPrClose(NULL) ; - m_ok = FALSE; - return; + PMSessionEndDocument(native->m_macPrintSession); } - // sets current port - m_macPort = (GrafPtr ) m_macPrintSessionPort ; - */ +} + #else - /* - #if PM_USE_SESSION_APIS - err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort, - (PMPrintSettings)m_printData.m_macPrintSettings, - (PMPageFormat)m_printData.m_macPageFormat); - if ( err != noErr ) - #else - m_macPrintSessionPort = kPMNoReference ; - err = PMBeginDocument( - m_printData.m_macPrintSettings, - m_printData.m_macPageFormat, - &m_macPrintSessionPort); - if ( err != noErr || m_macPrintSessionPort == kPMNoReference ) - #endif - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - #if TARGET_CARBON && PM_USE_SESSION_APIS - PMRelease(&m_macPrintSessionPort) ; - #else - UMAPrClose(NULL) ; - #endif - m_ok = FALSE; + +class wxMacClassicPrinterDC : public wxNativePrinterDC +{ +public : + wxMacClassicPrinterDC( wxPrintData* data ) ; + ~wxMacClassicPrinterDC() ; + virtual bool StartDoc( wxPrinterDC* dc , const wxString& message ) ; + virtual void EndDoc( wxPrinterDC* dc ) ; + virtual void StartPage( wxPrinterDC* dc ) ; + virtual void EndPage( wxPrinterDC* dc ) ; + virtual wxCoord GetMaxX() const { return m_maxX ; } + virtual wxCoord GetMaxY() const { return m_maxY ; } + virtual wxUint32 GetStatus() const { return m_err ; } +private : + GrafPtr m_macPrintFormerPort ; + TPPrPort m_macPrintingPort ; + OSErr m_err ; + long m_maxX ; + long m_maxY ; +} ; + +wxNativePrinterDC* wxNativePrinterDC::Create(wxPrintData* data) +{ + return new wxMacClassicPrinterDC(data) ; +} + +wxMacClassicPrinterDC::wxMacClassicPrinterDC(wxPrintData* data) +{ + ::GetPort( &m_macPrintFormerPort ) ; + m_err = noErr ; + ::UMAPrOpen() ; + m_err = PrError() ; + if ( m_err != noErr ) return; + + wxMacClassicPrintData *native = (wxMacClassicPrintData*) data->m_nativePrintData ; + + if ( ::PrValidate( native->m_macPrintSettings ) ) + { + // the driver has changed in the mean time, should we pop up a page setup dialog ? + if ( !::PrStlDialog( native->m_macPrintSettings ) ) + { + m_err = -1 ; + return; + } } - // sets current port - ::GetPort( (GrafPtr *)&m_macPort ) ; - */ -#endif - m_ok = TRUE ; - m_minY = m_minX = 0 ; -#if TARGET_CARBON - PMRect rPaper; - - err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper); - if ( err != noErr ) + m_err = PrError() ; + + if ( m_err == noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - #if TARGET_CARBON && PM_USE_SESSION_APIS - PMRelease(&m_macPrintSessionPort) ; - #else - UMAPrClose(NULL) ; - #endif - m_ok = FALSE; - return; + m_maxX = (**native->m_macPrintSettings).prInfo.rPage.right - (**native->m_macPrintSettings).prInfo.rPage.left ; + m_maxY = (**native->m_macPrintSettings).prInfo.rPage.bottom - (**native->m_macPrintSettings).prInfo.rPage.top ; } - m_maxX = wxCoord(rPaper.right - rPaper.left) ; - m_maxY = wxCoord(rPaper.bottom - rPaper.top); -#else - m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ; - m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ; -#endif } -wxPrinterDC::~wxPrinterDC(void) +wxMacClassicPrinterDC::~wxMacClassicPrinterDC() +{ + ::UMAPrClose() ; + ::SetPort( LMGetWMgrPort() ) ; +} + +bool wxMacClassicPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& WXUNUSED(message) ) { - OSStatus err ; - wxString message ; -#if !TARGET_CARBON - if ( m_ok ) + if ( m_err ) + return false ; + + wxMacClassicPrintData *native = (wxMacClassicPrintData*) dc->GetPrintData().m_nativePrintData ; + m_macPrintingPort = ::PrOpenDoc( native->m_macPrintSettings , NULL , NULL ) ; + m_err = PrError() ; + if ( m_err ) + return false ; + + // sets current port + dc->m_macPort = (GrafPtr ) m_macPrintingPort ; + m_maxX = (**native->m_macPrintSettings).prInfo.rPage.right - (**native->m_macPrintSettings).prInfo.rPage.left ; + m_maxY = (**native->m_macPrintSettings).prInfo.rPage.bottom - (**native->m_macPrintSettings).prInfo.rPage.top ; + return true ; +} + +void wxMacClassicPrinterDC::EndDoc( wxPrinterDC* dc ) +{ + if ( m_err ) + return ; + + PrCloseDoc( m_macPrintingPort ) ; + m_err = PrError() ; +} + +void wxMacClassicPrinterDC::StartPage( wxPrinterDC* dc ) +{ + if ( m_err ) + return ; + + wxMacClassicPrintData *native = (wxMacClassicPrintData*) dc->GetPrintData().m_nativePrintData ; + + PrOpenPage( m_macPrintingPort , NULL ) ; + dc->m_macLocalOrigin.x = (**native->m_macPrintSettings).rPaper.left ; + dc->m_macLocalOrigin.y = (**native->m_macPrintSettings).rPaper.top ; + // m_macPrintingPort is now the current port + Rect clip = { -32000 , -32000 , 32000 , 32000 } ; + ::ClipRect( &clip ) ; + m_err = PrError() ; + if ( m_err != noErr ) + ::PrCloseDoc( m_macPrintingPort ) ; +} + +void wxMacClassicPrinterDC::EndPage( wxPrinterDC* dc ) +{ + if ( m_err ) + return ; + + PrClosePage( m_macPrintingPort ) ; + m_err = PrError() ; + if ( m_err != noErr ) + ::PrCloseDoc( m_macPrintingPort ) ; +} + +#endif + +wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) +{ + m_ok = FALSE ; + m_printData = printdata ; + m_printData.ConvertToNative() ; + m_nativePrinterDC = wxNativePrinterDC::Create( &m_printData ) ; + if ( m_nativePrinterDC ) { - /* - ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; - err = PrError() ; - - if ( err == noErr ) - { - if ( (**(THPrint)m_printData.m_macPrintSettings).prJob.bJDocLoop == bSpoolLoop ) - { - TPrStatus status ; - ::PrPicFile( (THPrint) m_printData.m_macPrintSettings , NULL , NULL , NULL , &status ) ; - } - } - else + m_ok = m_nativePrinterDC->Ok() ; + + if ( !m_ok ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + wxString message ; + message.Printf( wxT("Print Error %u"), m_nativePrinterDC->GetStatus() ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); } - */ - ::UMAPrClose(NULL) ; -// ::SetPort( macPrintFormerPort ) ; - ::SetPort( LMGetWMgrPort() ) ; - } -#else - if ( m_ok ) - { -/* - #if PM_USE_SESSION_APIS - err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); - #else - err = PMEndDocument(m_macPrintSessionPort); - #endif - if ( err != noErr ) - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - */ - #if TARGET_CARBON && PM_USE_SESSION_APIS - PMRelease(&m_macPrintSessionPort) ; - #else - UMAPrClose(NULL) ; - #endif } -#endif } -bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) +wxPrinterDC::~wxPrinterDC(void) { - OSStatus err = noErr ; - wxString message ; - -#if !TARGET_CARBON - m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ; - err = PrError() ; - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - UMAPrClose(NULL) ; - m_ok = FALSE; + delete m_nativePrinterDC ; +} + +bool wxPrinterDC::StartDoc( const wxString& message ) +{ + wxASSERT_MSG( Ok() , wxT("Called wxPrinterDC::StartDoc from an invalid object") ) ; + + if ( !m_ok ) return false ; - } - // sets current port - m_macPort = (GrafPtr ) m_macPrintSessionPort ; -#else - #if PM_USE_SESSION_APIS - err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort, - (PMPrintSettings)m_printData.m_macPrintSettings, - (PMPageFormat)m_printData.m_macPageFormat); - if ( err != noErr ) - #else - m_macPrintSessionPort = kPMNoReference ; - err = PMBeginDocument( - m_printData.m_macPrintSettings, - m_printData.m_macPageFormat, - &m_macPrintSessionPort); - if ( err != noErr || m_macPrintSessionPort == kPMNoReference ) - #endif + + if ( m_nativePrinterDC->StartDoc(this, message ) ) { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - #if TARGET_CARBON && PM_USE_SESSION_APIS - PMRelease(&m_macPrintSessionPort) ; - #else - UMAPrClose(NULL) ; - #endif - m_ok = FALSE; - return m_ok; + // in case we have to do additional things when successful } - // sets current port - ::GetPort( (GrafPtr *)&m_macPort ) ; -#endif - m_ok = TRUE ; - m_minY = m_minX = 0 ; -#if TARGET_CARBON - PMRect rPaper; - - err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper); - if ( err != noErr ) + m_ok = m_nativePrinterDC->Ok() ; + if ( !m_ok ) { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + wxString message ; + message.Printf( wxT("Print Error %u"), m_nativePrinterDC->GetStatus() ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); - #if TARGET_CARBON && PM_USE_SESSION_APIS - PMRelease(&m_macPrintSessionPort) ; - #else - UMAPrClose(NULL) ; - #endif - m_ok = FALSE; - return m_ok; } - m_maxX = rPaper.right - rPaper.left ; - m_maxY = rPaper.bottom - rPaper.top ; -#else - m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ; - m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ; -#endif + return m_ok ; } -void wxPrinterDC::EndDoc(void) +void wxPrinterDC::EndDoc(void) { - OSStatus err ; - wxString message ; -#if !TARGET_CARBON - if ( m_ok ) - { - ::UMAPrClose(NULL) ; -// ::SetPort( macPrintFormerPort ) ; - ::SetPort( LMGetWMgrPort() ) ; - } -#else - if ( m_ok ) + if ( !m_ok ) + return ; + + m_nativePrinterDC->EndDoc( this ) ; + m_ok = m_nativePrinterDC->Ok() ; + + if ( !m_ok ) { - #if PM_USE_SESSION_APIS - err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); - #else - err = PMEndDocument(m_macPrintSessionPort); - #endif - if ( err != noErr ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } + wxString message ; + message.Printf( wxT("Print Error %u"), m_nativePrinterDC->GetStatus() ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); } -#endif } -void wxPrinterDC::StartPage(void) +void wxPrinterDC::StartPage(void) { if ( !m_ok ) return ; - m_logicalFunction = wxCOPY; -// m_textAlignment = wxALIGN_TOP_LEFT; - m_backgroundMode = wxTRANSPARENT; - - m_textForegroundColour = *wxBLACK; - m_textBackgroundColour = *wxWHITE; - m_pen = *wxBLACK_PEN; - m_font = *wxNORMAL_FONT; - m_brush = *wxTRANSPARENT_BRUSH; - m_backgroundBrush = *wxWHITE_BRUSH; - + m_logicalFunction = wxCOPY; + // m_textAlignment = wxALIGN_TOP_LEFT; + m_backgroundMode = wxTRANSPARENT; + + m_textForegroundColour = *wxBLACK; + m_textBackgroundColour = *wxWHITE; + m_pen = *wxBLACK_PEN; + m_font = *wxNORMAL_FONT; + m_brush = *wxTRANSPARENT_BRUSH; + m_backgroundBrush = *wxWHITE_BRUSH; + m_macFontInstalled = false ; m_macBrushInstalled = false ; m_macPenInstalled = false ; - - OSStatus err ; - wxString message ; + m_nativePrinterDC->StartPage(this) ; + m_ok = m_nativePrinterDC->Ok() ; -#if !TARGET_CARBON - PrOpenPage( (TPPrPort) m_macPrintSessionPort , NULL ) ; - m_macLocalOrigin.x = (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ; - m_macLocalOrigin.y = (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ; - - Rect clip = { -32000 , -32000 , 32000 , 32000 } ; - ::ClipRect( &clip ) ; - err = PrError() ; - if ( err != noErr ) - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - ::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ; - ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; - ::UMAPrClose(NULL) ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } -#else - #if PM_USE_SESSION_APIS - err = PMSessionBeginPage((PMPrintSession)m_macPrintSessionPort, - (PMPageFormat)m_printData.m_macPageFormat, - nil); - #else - err = PMBeginPage(m_macPrintSessionPort, nil); - #endif - if ( err != noErr ) - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - #if PM_USE_SESSION_APIS - PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); - PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); - UMAPrClose(&m_macPrintSessionPort) ; - #else - PMEndPage(m_macPrintSessionPort); - PMEndDocument(m_macPrintSessionPort); - UMAPrClose(NULL) ; - #endif - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } - PMRect rPaper; - - err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper); - if ( !err ) - { - m_macLocalOrigin.x = rPaper.left ; - m_macLocalOrigin.y = rPaper.top ; - } -#endif } -void wxPrinterDC::EndPage(void) +void wxPrinterDC::EndPage(void) { if ( !m_ok ) return ; - OSStatus err ; - wxString message ; + m_nativePrinterDC->EndPage(this) ; + m_ok = m_nativePrinterDC->Ok() ; +} -#if !TARGET_CARBON - PrClosePage( (TPPrPort) m_macPort ) ; - err = PrError() ; - if ( err != noErr ) - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; - ::UMAPrClose(NULL) ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } -#else - #if PM_USE_SESSION_APIS - err = PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); - #else - err = PMEndPage(m_macPrintSessionPort); - #endif - if ( err != noErr ) - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - #if PM_USE_SESSION_APIS - PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); - UMAPrClose(&m_macPrintSessionPort) ; - #else - PMEndDocument(m_macPrintSessionPort); - UMAPrClose(NULL) ; - #endif - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } -#endif +void wxPrinterDC::DoGetSize(int *width, int *height) const +{ + wxCHECK_RET( m_ok , _T("GetSize() doesn't work without a valid wxPrinterDC") ); + if ( width ) + * width = m_nativePrinterDC->GetMaxX() ; + if ( height ) + * height = m_nativePrinterDC->GetMaxY() ; } + +