X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03e11df5470fd64d9d9a669d0b50b84c2d714736..2a616188312459d6a53fc622b999c0fc5537b9fe:/src/mac/dcprint.cpp?ds=sidebyside diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp index 9b9fee2e97..2e82243834 100644 --- a/src/mac/dcprint.cpp +++ b/src/mac/dcprint.cpp @@ -6,7 +6,7 @@ // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// 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,115 +46,172 @@ GrafPtr macPrintFormerPort = NULL ; wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { - OSStatus err ; - wxString message ; - - m_printData = printdata ; - m_printData.ConvertToNative() ; - - err = UMAPrOpen() ; - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - UMAPrClose() ; - } - + OSStatus err ; + wxString message ; + + m_printData = printdata ; + m_printData.ConvertToNative() ; + +#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 %ld", 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; + } + #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 ) ) + { + ::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 != noErr ) + { + message.Printf( "Print Error %ld", err ) ; + wxMessageDialog dialog( NULL , message , "", 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((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); - if ( err != noErr || m_macPrintPort == kPMNoReference ) + 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) ; - UMAPrClose() ; + message.Printf( "Print Error %ld", 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( &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 rPaper; + + err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper); + 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 + UMAPrClose(&m_macPrintSessionPort) ; + #else + UMAPrClose(NULL) ; + #endif + m_ok = FALSE; + return; + } + m_maxX = wxCoord(rPaper.right - rPaper.left) ; + m_maxY = wxCoord(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 ; + 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 ; + 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() ) ; - m_macPortHelper.Clear() ; - } + 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 ) - { - err = PMEndDocument(m_macPrintPort); - if ( !err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - UMAPrClose() ; - } - UMAPrClose() ; - } + 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 %ld", 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 } bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) { - return m_ok ; + return m_ok ; } void wxPrinterDC::EndDoc(void) @@ -153,93 +220,117 @@ void wxPrinterDC::EndDoc(void) 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( "Print Error %ld", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + ::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ; + ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; + ::UMAPrClose(NULL) ; + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } #else - err = PMBeginPage(m_macPrintPort, nil); - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - PMEndPage(m_macPrintPort); - PMEndDocument(m_macPrintPort); - UMAPrClose() ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + #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 %ld", 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 ( !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( "Print Error %ld", err ) ; + wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; + dialog.ShowModal(); + ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ; + ::UMAPrClose(NULL) ; + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } #else - err = PMEndPage(m_macPrintPort); - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - PMEndDocument(m_macPrintPort); - UMAPrClose() ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + #if PM_USE_SESSION_APIS + err = PMSessionEndPage((PMPrintSession)m_macPrintSessionPort); + #else + err = PMEndPage(m_macPrintSessionPort); + #endif + if ( err != noErr ) + { + message.Printf( "Print Error %ld", 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 }