X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..01f5f03e7f9c19ca75ae6dbd4050c2b54e52e406:/src/mac/dcprint.cpp?ds=sidebyside diff --git a/src/mac/dcprint.cpp b/src/mac/dcprint.cpp index 449f44e206..b4dce6d72b 100644 --- a/src/mac/dcprint.cpp +++ b/src/mac/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__ @@ -24,131 +24,432 @@ #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) +#endif GrafPtr macPrintFormerPort = NULL ; wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { - OSErr err ; - wxString message ; - - m_printData = printdata ; - m_printData.ConvertToNative() ; - - ::PrOpen() ; - err = PrError() ; - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - PrClose() ; - } - - if ( ::PrValidate( 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) ; - PrClose() ; - } - ::GetPort( &macPrintFormerPort ) ; - m_macPrintPort = ::PrOpenDoc( m_printData.m_macPrintInfo , NULL , NULL ) ; - // sets current port - m_macPort = (GrafPtr ) m_macPrintPort ; - 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 ; + 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 ( err != noErr || m_macPrintSessionPort == kPMNoData ) +#else + err = UMAPrOpen(NULL) ; + if ( err != noErr ) +#endif + { + 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; + } + +#if !TARGET_CARBON + 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 + /* + #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 %ld", 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; + } + // 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 %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 = (**(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) { - if ( m_ok ) - { - OSErr err ; - wxString message ; - - ::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) ; - PrClose() ; - } - ::PrClose() ; - ::SetPort( macPrintFormerPort ) ; - } + OSStatus err ; + wxString message ; +#if !TARGET_CARBON + 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((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 + PMRelease(&m_macPrintSessionPort) ; + #else + 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 ; - - OSErr err ; - wxString message ; - - PrOpenPage( m_macPrintPort , NULL ) ; - SetOrigin( - (**m_printData.m_macPrintInfo).rPaper.left , - (**m_printData.m_macPrintInfo).rPaper.top ) ; - 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 ) ; - ::PrClose() ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + 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 ; + + + OSStatus err ; + wxString message ; + +#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 != 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((PMPrintSession)m_macPrintSessionPort, + (PMPageFormat)m_printData.m_macPageFormat, + nil); + #else + err = PMBeginPage(m_macPrintSessionPort, nil); + #endif + 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((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 ; + } + 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 ; - - OSErr err ; - wxString message ; - - PrClosePage( (TPrPort*) m_macPort ) ; - err = PrError() ; - if ( err ) - { - message.Printf( "Print Error %d", err ) ; - wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ; - ::PrCloseDoc( m_macPrintPort ) ; - ::PrClose() ; - ::SetPort( macPrintFormerPort ) ; - m_ok = FALSE ; - } + if ( !m_ok ) + return ; + + OSStatus err ; + wxString message ; + +#if !TARGET_CARBON + 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((PMPrintSession)m_macPrintSessionPort); + #else + err = PMEndPage(m_macPrintSessionPort); + #endif + 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((PMPrintSession)m_macPrintSessionPort); + UMAPrClose(&m_macPrintSessionPort) ; + #else + PMEndDocument(m_macPrintSessionPort); + UMAPrClose(NULL) ; + #endif + ::SetPort( macPrintFormerPort ) ; + m_ok = FALSE ; + } +#endif + }