X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e40298d54ecd5b109222a7c60aa2ef084a304d69..01f5f03e7f9c19ca75ae6dbd4050c2b54e52e406:/src/mac/dcprint.cpp diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp index 2e82243834..b4dce6d72b 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,20 +77,26 @@ 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 ) ; + /* m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ; err = PrError() ; if ( err ) @@ -102,7 +110,9 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) } // sets current port m_macPort = (GrafPtr ) m_macPrintSessionPort ; + */ #else + /* #if PM_USE_SESSION_APIS err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort, (PMPrintSettings)m_printData.m_macPrintSettings, @@ -121,7 +131,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; dialog.ShowModal(); #if TARGET_CARBON && PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintSessionPort) ; + PMRelease(&m_macPrintSessionPort) ; #else UMAPrClose(NULL) ; #endif @@ -130,31 +140,32 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) } // sets current port ::GetPort( (GrafPtr *)&m_macPort ) ; + */ #endif 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 %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 m_ok = FALSE; return; } - m_maxX = wxCoord(rPaper.right - rPaper.left) ; - m_maxY = wxCoord(rPaper.bottom - rPaper.top); + m_maxX = wxCoord(rPage.right - rPage.left) ; + m_maxY = wxCoord(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).rPage.right - (**(THPrint)m_printData.m_macPrintSettings).rPage.left ; + m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPage.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPage.top ; #endif } @@ -165,6 +176,7 @@ wxPrinterDC::~wxPrinterDC(void) #if !TARGET_CARBON if ( m_ok ) { + /* ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; err = PrError() ; @@ -182,6 +194,7 @@ wxPrinterDC::~wxPrinterDC(void) wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; dialog.ShowModal(); } + */ ::UMAPrClose(NULL) ; // ::SetPort( macPrintFormerPort ) ; ::SetPort( LMGetWMgrPort() ) ; @@ -189,6 +202,7 @@ wxPrinterDC::~wxPrinterDC(void) #else if ( m_ok ) { +/* #if PM_USE_SESSION_APIS err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); #else @@ -200,8 +214,9 @@ wxPrinterDC::~wxPrinterDC(void) wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; dialog.ShowModal(); } + */ #if TARGET_CARBON && PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintSessionPort) ; + PMRelease(&m_macPrintSessionPort) ; #else UMAPrClose(NULL) ; #endif @@ -211,11 +226,107 @@ wxPrinterDC::~wxPrinterDC(void) 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( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); + UMAPrClose(NULL) ; + m_ok = FALSE; + 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 + { + message.Printf( wxT("Print Error %d"), 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_ok; + } + // sets current port + ::GetPort( (GrafPtr *)&m_macPort ) ; +#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 %d"), 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_ok; + } + m_maxX = rPage.right - rPage.left ; + m_maxY = rPage.bottom - rPage.top ; +#else + m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPage.right - (**(THPrint)m_printData.m_macPrintSettings).rPage.left ; + m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPage.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPage.top ; +#endif return m_ok ; } 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 PM_USE_SESSION_APIS + err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); + #else + err = PMEndDocument(m_macPrintSessionPort); + #endif + if ( err != noErr ) + { + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + } +#endif } void wxPrinterDC::StartPage(void) @@ -252,8 +363,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 +382,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 +397,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 +417,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 +437,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);