From 7541150812b5dd7b837eac62a5509fba73e145e0 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sun, 2 Mar 2003 22:47:37 +0000 Subject: [PATCH] OSX printing fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/dcprint.cpp | 135 ++++++++++++++++++++++++++++++++++--- src/mac/dcprint.cpp | 135 ++++++++++++++++++++++++++++++++++--- 2 files changed, 254 insertions(+), 16 deletions(-) diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index 2e82243834..8d4c220fa3 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -46,14 +46,16 @@ 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) ; @@ -64,7 +66,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 @@ -75,8 +77,13 @@ 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 ) @@ -89,6 +96,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) 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,6 +140,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) } // sets current port ::GetPort( (GrafPtr *)&m_macPort ) ; + */ #endif m_ok = TRUE ; m_minY = m_minX = 0 ; @@ -143,7 +154,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 @@ -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( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", 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( "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; + } + // 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 ) + { + 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; + } + 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) { + 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( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + } +#endif } void wxPrinterDC::StartPage(void) @@ -286,6 +397,14 @@ void wxPrinterDC::StartPage(void) ::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 } @@ -298,7 +417,7 @@ void wxPrinterDC::EndPage(void) wxString message ; #if !TARGET_CARBON - PrClosePage( (TPPrPort) m_macPort ) ; + PrClosePage( (TPPrPort) m_macPort ) ; err = PrError() ; if ( err != noErr ) { diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp index 2e82243834..8d4c220fa3 100644 --- a/src/mac/dcprint.cpp +++ b/src/mac/dcprint.cpp @@ -46,14 +46,16 @@ 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) ; @@ -64,7 +66,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 @@ -75,8 +77,13 @@ 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 ) @@ -89,6 +96,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) 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,6 +140,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) } // sets current port ::GetPort( (GrafPtr *)&m_macPort ) ; + */ #endif m_ok = TRUE ; m_minY = m_minX = 0 ; @@ -143,7 +154,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 @@ -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( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", 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( "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; + } + // 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 ) + { + 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; + } + 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) { + 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( "Print Error %d", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + } +#endif } void wxPrinterDC::StartPage(void) @@ -286,6 +397,14 @@ void wxPrinterDC::StartPage(void) ::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 } @@ -298,7 +417,7 @@ void wxPrinterDC::EndPage(void) wxString message ; #if !TARGET_CARBON - PrClosePage( (TPPrPort) m_macPort ) ; + PrClosePage( (TPPrPort) m_macPort ) ; err = PrError() ; if ( err != noErr ) { -- 2.45.2