X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f1ae4143271ae63a17e052a1a471d16e9cd8c44..be88a6ade981b99d55fa1da20cd1a12be4a075f2:/src/mac/carbon/dcprint.cpp diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index 257c74206b..7f093c6e71 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -24,9 +24,19 @@ #endif #include "wx/dcprint.h" -#include "math.h" +#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 #if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxPrinterDC, wxDC) @@ -36,86 +46,166 @@ GrafPtr macPrintFormerPort = NULL ; wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { -#if !TARGET_CARBON - OSErr err ; + OSStatus err ; wxString message ; m_printData = printdata ; m_printData.ConvertToNative() ; - - ::UMAPrOpen() ; - err = PrError() ; - if ( err ) + +#if TARGET_CARBON && PM_USE_SESSION_APIS + err = UMAPrOpen(&m_macPrintSessionPort) ; + if ( err != noErr || m_macPrintSessionPort == kPMNoData ) +#else + err = UMAPrOpen(NULL) ; + if ( err != noErr ) +#endif { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - UMAPrClose() ; + dialog.ShowModal(); +#if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSessionPort) ; +#else + UMAPrClose(NULL) ; +#endif + m_ok = FALSE; + return; } - if ( ::PrValidate( m_printData.m_macPrintInfo ) ) +#if !TARGET_CARBON + if ( ::PrValidate( (THPrint) m_printData.m_macPrintSettings ) ) { - ::PrStlDialog( m_printData.m_macPrintInfo ) ; + ::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) ; // 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) ; - UMAPrClose() ; + dialog.ShowModal(); + UMAPrClose(NULL) ; + m_ok = FALSE; + return; } ::GetPort( &macPrintFormerPort ) ; - m_macPrintPort = ::PrOpenDoc( m_printData.m_macPrintInfo , NULL , NULL ) ; + 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) ; - UMAPrClose() ; + dialog.ShowModal(); + UMAPrClose(NULL) ; + m_ok = FALSE; + return; } // sets current port - m_macPort = (GrafPtr ) m_macPrintPort ; + 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 %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + #if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSessionPort) ; + #else + UMAPrClose(NULL) ; + #endif + m_ok = FALSE; + return; + } + // sets current port + ::GetPort( (GrafPtr *)&m_macPort ) ; +#endif m_ok = TRUE ; m_minY = m_minX = 0 ; - 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 ; +#if TARGET_CARBON + PMRect rPaper; + + err = PMGetAdjustedPaperRect((PMPageFormat)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_macPrintSessionPort) ; + #else + UMAPrClose(NULL) ; + #endif + m_ok = FALSE; + return; + } + m_maxX = rPaper.right - rPaper.left ; + m_maxY = rPaper.bottom - rPaper.top ; #else -#pragma warning "TODO:printing support for carbon" + 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) { + OSStatus err ; + wxString message ; #if !TARGET_CARBON if ( m_ok ) { - OSErr err ; - wxString message ; - - ::PrCloseDoc( m_macPrintPort ) ; + ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; err = PrError() ; - if ( !err ) + if ( err == noErr ) { - if ( (**m_printData.m_macPrintInfo).prJob.bJDocLoop == bSpoolLoop ) + if ( (**(THPrint)m_printData.m_macPrintSettings).prJob.bJDocLoop == bSpoolLoop ) { TPrStatus status ; - ::PrPicFile( m_printData.m_macPrintInfo , NULL , NULL , NULL , &status ) ; + ::PrPicFile( (THPrint) m_printData.m_macPrintSettings , NULL , NULL , NULL , &status ) ; } } else { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - UMAPrClose() ; + dialog.ShowModal(); } - ::UMAPrClose() ; + ::UMAPrClose(NULL) ; // ::SetPort( macPrintFormerPort ) ; ::SetPort( LMGetWMgrPort() ) ; - m_macPortHelper.Clear() ; } #else -#pragma warning "TODO:printing support for carbon" + 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(); + } + #if TARGET_CARBON && PM_USE_SESSION_APIS + UMAPrClose(&m_macPrintSessionPort) ; + #else + UMAPrClose(NULL) ; + #endif + } #endif } @@ -130,7 +220,6 @@ void wxPrinterDC::EndDoc(void) void wxPrinterDC::StartPage(void) { -#if !TARGET_CARBON if ( !m_ok ) return ; @@ -150,51 +239,98 @@ void wxPrinterDC::StartPage(void) 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( (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 ) + if ( err != noErr ) { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - ::PrClosePage( m_macPrintPort) ; - ::PrCloseDoc( m_macPrintPort ) ; - ::UMAPrClose() ; + dialog.ShowModal(); + ::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ; + ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; + ::UMAPrClose(NULL) ; ::SetPort( macPrintFormerPort ) ; m_ok = FALSE ; } #else -#pragma warning "TODO:printing support for carbon" + #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 %d", 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 ; + } #endif } void wxPrinterDC::EndPage(void) { -#if !TARGET_CARBON if ( !m_ok ) return ; - OSErr err ; + OSStatus err ; wxString message ; - PrClosePage( (TPrPort*) m_macPort ) ; +#if !TARGET_CARBON + PrClosePage( (TPPrPort) m_macPort ) ; err = PrError() ; - if ( err ) + if ( err != noErr ) { message.Printf( "Print Error %d", err ) ; wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - ::PrCloseDoc( m_macPrintPort ) ; - ::UMAPrClose() ; + dialog.ShowModal(); + ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; + ::UMAPrClose(NULL) ; ::SetPort( macPrintFormerPort ) ; m_ok = FALSE ; } #else -#pragma warning "TODO:printing support for carbon" + #if PM_USE_SESSION_APIS + err = PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); + #else + err = PMEndPage(m_macPrintSessionPort); + #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((PMPrintSession)m_macPrintSessionPort); + UMAPrClose(&m_macPrintSessionPort) ; + #else + PMEndDocument(m_macPrintSessionPort); + UMAPrClose(NULL) ; + #endif + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } #endif }