X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/87df17a11b0017d31c09f767bd921abb27193bee..4241baae4472ef2736b8ac8c6a975b0ba398909b:/src/mac/carbon/dcprint.cpp diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index 904c5eedca..b4dce6d72b 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -27,6 +27,16 @@ #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,261 +46,410 @@ GrafPtr macPrintFormerPort = NULL ; wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { - OSStatus err ; - wxString message ; - - m_printData = printdata ; - m_printData.ConvertToNative() ; + OSStatus err = noErr ; + wxString message ; + + m_printData = printdata ; + m_printData.ConvertToNative() ; + +#if TARGET_CARBON && PM_USE_SESSION_APIS + m_macPrintSessionPort = printdata.m_macPrintSession ; + PMRetain( m_macPrintSessionPort ) ; -#if PM_USE_SESSION_APIS - err = UMAPrOpen(&m_macPrintPort) ; + if ( err != noErr || m_macPrintSessionPort == kPMNoData ) #else - err = UMAPrOpen() ; + err = UMAPrOpen(NULL) ; + if ( err != noErr ) #endif - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; -#if PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintPort) ; + { + 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() ; + UMAPrClose(NULL) ; #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 ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - UMAPrClose() ; - } - ::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) ; - UMAPrClose() ; - } - // sets current port - m_macPort = (GrafPtr ) m_macPrintPort ; + if ( ::PrValidate( (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( 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 ) + { + message.Printf( "Print Error %ld", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + UMAPrClose(NULL) ; + m_ok = FALSE; + return; + } + // sets current port + m_macPort = (GrafPtr ) m_macPrintSessionPort ; + */ #else - m_macPrintPort = kPMNoReference ; + /* #if PM_USE_SESSION_APIS - err = PMSessionBeginDocument( - m_macPrintPort, - m_printData.m_macPrintSettings, - m_printData.m_macPageFormat); + 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_macPrintPort); + m_printData.m_macPrintSettings, + m_printData.m_macPageFormat, + &m_macPrintSessionPort); + if ( err != noErr || m_macPrintSessionPort == kPMNoReference ) #endif - if ( err != noErr || m_macPrintPort == kPMNoReference ) { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - #if PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintPort) ; + message.Printf( "Print Error %ld", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + #if TARGET_CARBON && PM_USE_SESSION_APIS + PMRelease(&m_macPrintSessionPort) ; #else - UMAPrClose() ; + UMAPrClose(NULL) ; #endif + m_ok = FALSE; + return; } - // sets current port - ::GetPort( &m_macPort ) ; + // sets current port + ::GetPort( (GrafPtr *)&m_macPort ) ; + */ #endif - m_ok = TRUE ; - m_minY = m_minX = 0 ; + 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 = (**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 ; + 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 } wxPrinterDC::~wxPrinterDC(void) { - OSStatus err ; - wxString message ; + OSStatus err ; + wxString message ; #if !TARGET_CARBON - if ( m_ok ) - { - ::PrCloseDoc( m_macPrintPort ) ; - err = PrError() ; - - if ( !err ) - { - if ( (**m_printData.m_macPrintInfo).prJob.bJDocLoop == bSpoolLoop ) - { - TPrStatus status ; - ::PrPicFile( m_printData.m_macPrintInfo , NULL , NULL , NULL , &status ) ; - } - } - else - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - UMAPrClose() ; - } - ::UMAPrClose() ; -// ::SetPort( macPrintFormerPort ) ; - ::SetPort( LMGetWMgrPort() ) ; - } + 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() ) ; + } #else - if ( m_ok ) - { - #if PM_USE_SESSION_APIS - err = PMSessionEndDocument(m_macPrintPort); - #else - err = PMEndDocument(m_macPrintPort); - #endif - if ( !err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + if ( m_ok ) + { +/* #if PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintPort) ; + err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); #else - UMAPrClose() ; + err = PMEndDocument(m_macPrintSessionPort); #endif - } - #if PM_USE_SESSION_APIS - UMAPrClose(&m_macPrintPort) ; + if ( err != noErr ) + { + message.Printf( "Print Error %ld", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + */ + #if TARGET_CARBON && PM_USE_SESSION_APIS + PMRelease(&m_macPrintSessionPort) ; #else - UMAPrClose() ; + UMAPrClose(NULL) ; #endif - } + } #endif } bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) { - return m_ok ; + 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) { - if ( !m_ok ) - return ; + if ( !m_ok ) + return ; - m_logicalFunction = wxCOPY; + m_logicalFunction = wxCOPY; // m_textAlignment = wxALIGN_TOP_LEFT; - m_backgroundMode = wxTRANSPARENT; + 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_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 ; + m_macFontInstalled = false ; + m_macBrushInstalled = false ; + m_macPenInstalled = false ; - - OSStatus err ; - wxString message ; + + OSStatus err ; + wxString message ; #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 ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - ::PrClosePage( m_macPrintPort) ; - ::PrCloseDoc( m_macPrintPort ) ; - ::UMAPrClose() ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + 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 != noErr ) + { + 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 ) ; + ::UMAPrClose(NULL) ; + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } #else #if PM_USE_SESSION_APIS - err = PMSessionBeginPage(m_macPrintPort, - m_printData.m_macPageFormat, - nil); + err = PMSessionBeginPage((PMPrintSession)m_macPrintSessionPort, + (PMPageFormat)m_printData.m_macPageFormat, + nil); #else - err = PMBeginPage(m_macPrintPort, nil); + err = PMBeginPage(m_macPrintSessionPort, nil); #endif - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + if ( err != noErr ) + { + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); #if PM_USE_SESSION_APIS - PMSessionEndPage(m_macPrintPort); - PMSessionEndDocument(m_macPrintPort); - UMAPrClose(&m_macPrintPort) ; + PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); + PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); + UMAPrClose(&m_macPrintSessionPort) ; #else - PMEndPage(m_macPrintPort); - PMEndDocument(m_macPrintPort); - UMAPrClose() ; + PMEndPage(m_macPrintSessionPort); + PMEndDocument(m_macPrintSessionPort); + UMAPrClose(NULL) ; #endif - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + ::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 } void wxPrinterDC::EndPage(void) { - if ( !m_ok ) - return ; + if ( !m_ok ) + return ; - OSStatus err ; - wxString message ; + OSStatus err ; + wxString message ; #if !TARGET_CARBON - PrClosePage( (TPrPort*) m_macPort ) ; - err = PrError() ; - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - ::PrCloseDoc( m_macPrintPort ) ; - ::UMAPrClose() ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + PrClosePage( (TPPrPort) m_macPort ) ; + err = PrError() ; + if ( err != noErr ) + { + message.Printf( wxT("Print Error %ld") , err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); + ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; + ::UMAPrClose(NULL) ; + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } #else #if PM_USE_SESSION_APIS - err = PMSessionEndPage(m_macPrintPort); + err = PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); #else - err = PMEndPage(m_macPrintPort); + err = PMEndPage(m_macPrintSessionPort); #endif - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + if ( err != noErr ) + { + message.Printf( wxT("Print Error %ld"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); #if PM_USE_SESSION_APIS - PMSessionEndDocument(m_macPrintPort); - UMAPrClose(&m_macPrintPort) ; + PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort); + UMAPrClose(&m_macPrintSessionPort) ; #else - PMEndDocument(m_macPrintPort); - UMAPrClose() ; + PMEndDocument(m_macPrintSessionPort); + UMAPrClose(NULL) ; #endif - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } #endif }