X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e40298d54ecd5b109222a7c60aa2ef084a304d69..a1fea40ec6e5f9bccba51bc1df625e01cb708e90:/src/mac/dcprint.cpp diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp index 2e82243834..bb9a4baf42 100644 --- a/src/mac/dcprint.cpp +++ b/src/mac/dcprint.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -46,25 +46,27 @@ GrafPtr macPrintFormerPort = NULL ; wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { - OSStatus err ; + OSStatus err = noErr ; wxString message ; m_printData = printdata ; m_printData.ConvertToNative() ; #if TARGET_CARBON && PM_USE_SESSION_APIS - err = UMAPrOpen(&m_macPrintSessionPort) ; + m_macPrintSessionPort = printdata.m_macPrintSession ; + PMRetain( m_macPrintSessionPort ) ; + 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) ; + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ; dialog.ShowModal(); #if TARGET_CARBON && PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintSessionPort) ; + PMRelease( m_macPrintSessionPort ) ; #else UMAPrClose(NULL) ; #endif @@ -75,30 +77,91 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) #if !TARGET_CARBON if ( ::PrValidate( (THPrint) m_printData.m_macPrintSettings ) ) { - ::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) ; // 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; + } } err = PrError() ; if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ; dialog.ShowModal(); UMAPrClose(NULL) ; m_ok = FALSE; return; } ::GetPort( &macPrintFormerPort ) ; +#endif + m_ok = TRUE ; + m_minY = m_minX = 0 ; +#if TARGET_CARBON + PMRect rPage; + + err = PMGetAdjustedPageRect((PMPageFormat)m_printData.m_macPageFormat, &rPage); + if ( err != noErr ) + { + message.Printf( wxT("Print Error %ld"), err ) ; + 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_maxX = wxCoord(rPage.right - rPage.left) ; + m_maxY = wxCoord(rPage.bottom - rPage.top); +#else + m_maxX = (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.right - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.left ; + m_maxY = (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.bottom - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.top ; +#endif +} + +wxPrinterDC::~wxPrinterDC(void) +{ + OSStatus err ; + wxString message ; +#if !TARGET_CARBON + if ( m_ok ) + { + ::UMAPrClose(NULL) ; + ::SetPort( LMGetWMgrPort() ) ; + } +#else + if ( m_ok ) + { + #if TARGET_CARBON && PM_USE_SESSION_APIS + PMRelease(&m_macPrintSessionPort) ; + #else + UMAPrClose(NULL) ; + #endif + } +#endif +} + +bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) +{ + 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 %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); UMAPrClose(NULL) ; m_ok = FALSE; - return; + return false ; } // sets current port m_macPort = (GrafPtr ) m_macPrintSessionPort ; @@ -109,24 +172,24 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) (PMPageFormat)m_printData.m_macPageFormat); if ( err != noErr ) #else - m_macPrintSessionPort = kPMNoReference ; - err = PMBeginDocument( + 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) ; + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); #if TARGET_CARBON && PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintSessionPort) ; + PMRelease(&m_macPrintSessionPort) ; #else UMAPrClose(NULL) ; #endif m_ok = FALSE; - return; + return m_ok; } // sets current port ::GetPort( (GrafPtr *)&m_macPort ) ; @@ -134,54 +197,38 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) m_ok = TRUE ; m_minY = m_minX = 0 ; #if TARGET_CARBON - PMRect rPaper; + PMRect rPage; - err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper); + err = PMGetAdjustedPageRect((PMPageFormat)m_printData.m_macPageFormat, &rPage); if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); #if TARGET_CARBON && PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintSessionPort) ; + PMRelease(&m_macPrintSessionPort) ; #else UMAPrClose(NULL) ; #endif m_ok = FALSE; - return; + return m_ok; } - m_maxX = wxCoord(rPaper.right - rPaper.left) ; - m_maxY = wxCoord(rPaper.bottom - rPaper.top); + m_maxX = rPage.right - rPage.left ; + m_maxY = rPage.bottom - rPage.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 ; + m_maxX = (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.right - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.left ; + m_maxY = (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.bottom - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.top ; #endif + return m_ok ; } -wxPrinterDC::~wxPrinterDC(void) +void wxPrinterDC::EndDoc(void) { OSStatus err ; wxString message ; #if !TARGET_CARBON if ( m_ok ) { - ::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 - { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } ::UMAPrClose(NULL) ; // ::SetPort( macPrintFormerPort ) ; ::SetPort( LMGetWMgrPort() ) ; @@ -196,28 +243,14 @@ wxPrinterDC::~wxPrinterDC(void) #endif if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); } - #if TARGET_CARBON && PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintSessionPort) ; - #else - UMAPrClose(NULL) ; - #endif } #endif } -bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) -{ - return m_ok ; -} - -void wxPrinterDC::EndDoc(void) -{ -} - void wxPrinterDC::StartPage(void) { if ( !m_ok ) @@ -252,8 +285,8 @@ void wxPrinterDC::StartPage(void) err = PrError() ; if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ; dialog.ShowModal(); ::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ; ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; @@ -271,8 +304,8 @@ void wxPrinterDC::StartPage(void) #endif if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); #if PM_USE_SESSION_APIS PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); @@ -286,6 +319,14 @@ void wxPrinterDC::StartPage(void) ::SetPort( macPrintFormerPort ) ; m_ok = FALSE ; } + PMRect rPage; + + err = PMGetAdjustedPageRect((PMPageFormat)m_printData.m_macPageFormat, &rPage); + if ( !err ) + { + m_macLocalOrigin.x = rPage.left ; + m_macLocalOrigin.y = rPage.top ; + } #endif } @@ -298,12 +339,12 @@ void wxPrinterDC::EndPage(void) wxString message ; #if !TARGET_CARBON - PrClosePage( (TPPrPort) m_macPort ) ; + PrClosePage( (TPPrPort) m_macPort ) ; err = PrError() ; if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %ld") , err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; ::UMAPrClose(NULL) ; @@ -318,8 +359,8 @@ void wxPrinterDC::EndPage(void) #endif if ( err != noErr ) { - message.Printf( "Print Error %ld", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; dialog.ShowModal(); #if PM_USE_SESSION_APIS PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);