X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..ef70f0ecdbc4268923e132b257c95e8a2525f4ca:/src/mac/dcprint.cpp?ds=sidebyside diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp index 449f44e206..274c90957a 100644 --- a/src/mac/dcprint.cpp +++ b/src/mac/dcprint.cpp @@ -24,62 +24,141 @@ #endif #include "wx/dcprint.h" -#include "math.h" - +#include "wx/msgdlg.h" +#include +#include "wx/mac/uma.h" +#if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxPrinterDC, wxDC) +#endif GrafPtr macPrintFormerPort = NULL ; wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { - OSErr err ; + OSStatus err ; wxString message ; m_printData = printdata ; m_printData.ConvertToNative() ; - - ::PrOpen() ; - err = PrError() ; - if ( err ) + +#if TARGET_CARBON && PM_USE_SESSION_APIS + err = UMAPrOpen(&m_macPrintSession) ; + if ( err != noErr || m_macPrintSession == kPMNoData ) +#else + err = UMAPrOpen() ; + if ( err != noErr ) +#endif { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - PrClose() ; + dialog.ShowModal(); +#if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSession) ; +#else + UMAPrClose() ; +#endif + m_ok = FALSE; + return; } +#if !TARGET_CARBON if ( ::PrValidate( m_printData.m_macPrintInfo ) ) { + ::PrStlDialog( m_printData.m_macPrintInfo ) ; // the driver has changed in the mean time, should we pop up a page setup dialog ? } err = PrError() ; - if ( err ) + if ( err != noErr ) { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - PrClose() ; + dialog.ShowModal(); + UMAPrClose() ; + m_ok = FALSE; + return; } ::GetPort( &macPrintFormerPort ) ; m_macPrintPort = ::PrOpenDoc( m_printData.m_macPrintInfo , NULL , NULL ) ; + err = PrError() ; + if ( err ) + { + message.Printf( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + UMAPrClose() ; + m_ok = FALSE; + return; + } // sets current port m_macPort = (GrafPtr ) m_macPrintPort ; +#else + #if PM_USE_SESSION_APIS + err = PMSessionBeginDocument(m_macPrintSession, + m_printData.m_macPrintSettings, + m_printData.m_macPageFormat); + if ( err != noErr ) + #else + m_macPrintPort = kPMNoReference ; + err = PMBeginDocument( + m_printData.m_macPrintSettings, + m_printData.m_macPageFormat, + &m_macPrintPort); + if ( err != noErr || m_macPrintPort == kPMNoReference ) + #endif + { + message.Printf( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + #if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSession) ; + #else + UMAPrClose() ; + #endif + m_ok = FALSE; + return; + } + // sets current port + ::GetPort( &m_macPort ) ; +#endif m_ok = TRUE ; m_minY = m_minX = 0 ; +#if TARGET_CARBON + PMRect rPaper; + + err = PMGetAdjustedPaperRect(m_printData.m_macPageFormat, &rPaper); + if ( err != noErr ) + { + message.Printf( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + #if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSession) ; + #else + UMAPrClose() ; + #endif + m_ok = FALSE; + return; + } + m_maxX = rPaper.right - rPaper.left ; + m_maxY = rPaper.bottom - rPaper.top ; +#else m_maxX = (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).rPaper.left ; m_maxY = (**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).rPaper.top ; +#endif } wxPrinterDC::~wxPrinterDC(void) { + OSStatus err ; + wxString message ; +#if !TARGET_CARBON if ( m_ok ) { - OSErr err ; - wxString message ; - ::PrCloseDoc( m_macPrintPort ) ; err = PrError() ; - if ( !err ) + if ( err == noErr ) { if ( (**m_printData.m_macPrintInfo).prJob.bJDocLoop == bSpoolLoop ) { @@ -91,11 +170,33 @@ wxPrinterDC::~wxPrinterDC(void) { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - PrClose() ; + dialog.ShowModal(); } - ::PrClose() ; - ::SetPort( macPrintFormerPort ) ; + ::UMAPrClose() ; +// ::SetPort( macPrintFormerPort ) ; + ::SetPort( LMGetWMgrPort() ) ; } +#else + if ( m_ok ) + { + #if PM_USE_SESSION_APIS + err = PMSessionEndDocument(m_macPrintSession); + #else + err = PMEndDocument(m_macPrintPort); + #endif + if ( err != noErr ) + { + message.Printf( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + #if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSession) ; + #else + UMAPrClose() ; + #endif + } +#endif } bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) @@ -111,25 +212,72 @@ 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_macFontInstalled = false ; + m_macBrushInstalled = false ; + m_macPenInstalled = false ; + - OSErr err ; + OSStatus err ; wxString message ; - PrOpenPage( m_macPrintPort , NULL ) ; - SetOrigin( - (**m_printData.m_macPrintInfo).rPaper.left , - (**m_printData.m_macPrintInfo).rPaper.top ) ; +#if !TARGET_CARBON + PrOpenPage( m_macPrintPort , NULL ) ; + m_macLocalOrigin.h = (**m_printData.m_macPrintInfo).rPaper.left ; + m_macLocalOrigin.v = (**m_printData.m_macPrintInfo).rPaper.top ; + + SetOrigin( - m_macLocalOrigin.h , - m_macLocalOrigin.v ) ; Rect clip = { -32000 , -32000 , 32000 , 32000 } ; ::ClipRect( &clip ) ; err = PrError() ; - if ( err ) + if ( err != noErr ) { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - ::PrClosePage( m_macPrintPort) ; - ::PrCloseDoc( m_macPrintPort ) ; - ::PrClose() ; + dialog.ShowModal(); + ::PrClosePage( m_macPrintPort ) ; + ::PrCloseDoc( m_macPrintPort ) ; + ::UMAPrClose() ; ::SetPort( macPrintFormerPort ) ; m_ok = FALSE ; } +#else + #if PM_USE_SESSION_APIS + err = PMSessionBeginPage(m_macPrintSession, + m_printData.m_macPageFormat, + nil); + #else + err = PMBeginPage(m_macPrintPort, nil); + #endif + if ( err != noErr ) + { + message.Printf( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + #if PM_USE_SESSION_APIS + PMSessionEndPage(m_macPrintSession); + PMSessionEndDocument(m_macPrintSession); + UMAPrClose(&m_macPrintSession) ; + #else + PMEndPage(m_macPrintPort); + PMEndDocument(m_macPrintPort); + UMAPrClose() ; + #endif + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } +#endif } void wxPrinterDC::EndPage(void) @@ -137,18 +285,43 @@ void wxPrinterDC::EndPage(void) if ( !m_ok ) return ; - OSErr err ; + OSStatus err ; wxString message ; +#if !TARGET_CARBON PrClosePage( (TPrPort*) m_macPort ) ; err = PrError() ; - if ( err ) + if ( err != noErr ) { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); ::PrCloseDoc( m_macPrintPort ) ; - ::PrClose() ; + ::UMAPrClose() ; + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } +#else + #if PM_USE_SESSION_APIS + err = PMSessionEndPage(m_macPrintSession); + #else + err = PMEndPage(m_macPrintPort); + #endif + if ( err != noErr ) + { + message.Printf( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + #if PM_USE_SESSION_APIS + PMSessionEndDocument(m_macPrintSession); + UMAPrClose(&m_macPrintSession) ; + #else + PMEndDocument(m_macPrintPort); + UMAPrClose() ; + #endif ::SetPort( macPrintFormerPort ) ; m_ok = FALSE ; } +#endif + }