X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/489468feaa08b8f504735eecca522fb8d0f825d2..36f740c857402917968152c25afbbd8636c1d4e9:/src/mac/carbon/dcprint.cpp?ds=inline diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp deleted file mode 100644 index ccc58d99ff..0000000000 --- a/src/mac/carbon/dcprint.cpp +++ /dev/null @@ -1,393 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: src/mac/carbon/dcprint.cpp -// Purpose: wxPrinterDC class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id$ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// For compilers that support precompilation, includes "wx.h". -#include "wx/wxprec.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "wx/dcprint.h" - -#ifndef WX_PRECOMP - #include "wx/msgdlg.h" - #include "wx/math.h" -#endif - -#include "wx/mac/uma.h" -#include "wx/mac/private/print.h" -#include "wx/mac/carbon/dcprint.h" -#include "wx/graphics.h" - -IMPLEMENT_ABSTRACT_CLASS(wxPrinterDCImpl, wxGCDCImpl) - -class wxNativePrinterDC -{ -public : - wxNativePrinterDC() {} - virtual ~wxNativePrinterDC() {} - virtual bool StartDoc( wxPrinterDC* dc , const wxString& message ) = 0; - virtual void EndDoc( wxPrinterDC* dc ) = 0; - virtual void StartPage( wxPrinterDC* dc ) = 0; - virtual void EndPage( wxPrinterDC* dc ) = 0; - virtual void GetSize( int *w , int *h) const = 0 ; - virtual wxSize GetPPI() const = 0 ; - - // returns 0 in case of no Error, otherwise platform specific error codes - virtual wxUint32 GetStatus() const = 0 ; - bool Ok() { return GetStatus() == 0 ; } - - static wxNativePrinterDC* Create(wxPrintData* data) ; -} ; - -class wxMacCarbonPrinterDC : public wxNativePrinterDC -{ -public : - wxMacCarbonPrinterDC( wxPrintData* data ) ; - virtual ~wxMacCarbonPrinterDC() ; - virtual bool StartDoc( wxPrinterDC* dc , const wxString& message ) ; - virtual void EndDoc( wxPrinterDC* dc ) ; - virtual void StartPage( wxPrinterDC* dc ) ; - virtual void EndPage( wxPrinterDC* dc ) ; - virtual wxUint32 GetStatus() const { return m_err ; } - virtual void GetSize( int *w , int *h) const ; - virtual wxSize GetPPI() const ; -private : - wxCoord m_maxX ; - wxCoord m_maxY ; - wxSize m_ppi ; - OSStatus m_err ; -} ; - -wxMacCarbonPrinterDC::wxMacCarbonPrinterDC( wxPrintData* data ) -{ - m_err = noErr ; - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) data->GetNativeData() ; - - PMRect rPage; - m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); - if ( m_err != noErr ) - return; - - m_maxX = wxCoord(rPage.right - rPage.left) ; - m_maxY = wxCoord(rPage.bottom - rPage.top); - - PMResolution res; - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - if ( PMPrinterGetOutputResolution != NULL ) - { - PMPrinter printer; - m_err = PMSessionGetCurrentPrinter(native->m_macPrintSession, &printer); - if ( m_err == noErr ) - { - m_err = PMPrinterGetOutputResolution( printer, native->m_macPrintSettings, &res) ; - if ( m_err == -9589 /* kPMKeyNotFound */ ) - { - m_err = noErr ; - res.hRes = res.vRes = 300; - } - } - } - else -#endif - { -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - m_err = PMGetResolution((PMPageFormat) (native->m_macPageFormat), &res); -#endif - } - - m_ppi = wxSize(int(res.hRes), int(res.vRes)); -} - -wxMacCarbonPrinterDC::~wxMacCarbonPrinterDC() -{ -} - -wxNativePrinterDC* wxNativePrinterDC::Create(wxPrintData* data) -{ - return new wxMacCarbonPrinterDC(data) ; -} - -bool wxMacCarbonPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& WXUNUSED(message) ) -{ - if ( m_err ) - return false ; - - wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ; - - m_err = PMSessionBeginCGDocumentNoDialog(native->m_macPrintSession, - native->m_macPrintSettings, - native->m_macPageFormat); - if ( m_err != noErr ) - return false; - - PMRect rPage; - m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); - if ( m_err != noErr ) - return false ; - - m_maxX = wxCoord(rPage.right - rPage.left) ; - m_maxY = wxCoord(rPage.bottom - rPage.top); - - PMResolution res; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - if ( PMPrinterGetOutputResolution != NULL ) - { - PMPrinter printer; - m_err = PMSessionGetCurrentPrinter(native->m_macPrintSession, &printer); - if ( m_err == noErr ) - { - m_err = PMPrinterGetOutputResolution( printer, native->m_macPrintSettings, &res) ; - if ( m_err == -9589 /* kPMKeyNotFound */ ) - { - m_err = noErr ; - res.hRes = res.vRes = 300; - } - } - } - else -#endif - { -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - m_err = PMGetResolution((PMPageFormat) (native->m_macPageFormat), &res); -#endif - } - - m_ppi = wxSize(int(res.hRes), int(res.vRes)); - return true ; -} - -void wxMacCarbonPrinterDC::EndDoc( wxPrinterDC* dc ) -{ - if ( m_err ) - return ; - - wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ; - - m_err = PMSessionEndDocumentNoDialog(native->m_macPrintSession); -} - -void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) -{ - if ( m_err ) - return ; - - wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ; - - m_err = PMSessionBeginPageNoDialog(native->m_macPrintSession, - native->m_macPageFormat, - nil); - - CGContextRef pageContext; - - if ( m_err == noErr ) - { - m_err = PMSessionGetCGGraphicsContext(native->m_macPrintSession, - &pageContext ); - } - - if ( m_err != noErr ) - { - PMSessionEndPageNoDialog(native->m_macPrintSession); - PMSessionEndDocumentNoDialog(native->m_macPrintSession); - } - else - { - PMRect rPage; - - m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); - if ( !m_err ) - { - PMRect paperRect ; - PMGetAdjustedPaperRect( native->m_macPageFormat , &paperRect ) ; - // make sure (0,0) is at the upper left of the printable area (wx conventions) - // Core Graphics initially has the lower left of the paper as 0,0 - CGContextTranslateCTM( pageContext , (CGFloat) -paperRect.left , (CGFloat) paperRect.bottom ) ; - CGContextScaleCTM( pageContext , 1 , -1 ) ; - } - // since this is a non-critical error, we set the flag back - m_err = noErr ; - } - impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) ); -} - -void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) -{ - if ( m_err ) - return ; - - wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ; - - m_err = PMSessionEndPageNoDialog(native->m_macPrintSession); - if ( m_err != noErr ) - { - PMSessionEndDocumentNoDialog(native->m_macPrintSession); - } - // the cg context we got when starting the page isn't valid anymore, so replace it - impl->SetGraphicsContext( wxGraphicsContext::Create() ); -} - -void wxMacCarbonPrinterDC::GetSize( int *w , int *h) const -{ - if ( w ) - *w = m_maxX ; - if ( h ) - *h = m_maxY ; -} - -wxSize wxMacCarbonPrinterDC::GetPPI() const -{ - return m_ppi ; -}; - -// -// -// - -wxPrinterDCImpl::wxPrinterDCImpl( wxPrinterDC *owner, const wxPrintData& printdata ) - : wxGCDCImpl( owner ) -{ - m_ok = false ; - m_printData = printdata ; - m_printData.ConvertToNative() ; - m_nativePrinterDC = wxNativePrinterDC::Create( &m_printData ) ; - if ( m_nativePrinterDC ) - { - m_ok = m_nativePrinterDC->Ok() ; - if ( !m_ok ) - { - wxString message ; - message.Printf( wxT("Print Error %u"), m_nativePrinterDC->GetStatus() ) ; - wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - else - { - wxSize sz = GetPPI(); - m_mm_to_pix_x = mm2inches * sz.x; - m_mm_to_pix_y = mm2inches * sz.y; - } - // we need at least a measuring context because people start measuring before a page - // gets printed at all - SetGraphicsContext( wxGraphicsContext::Create() ); - } -} - -wxSize wxPrinterDCImpl::GetPPI() const -{ - return m_nativePrinterDC->GetPPI() ; -} - -wxPrinterDCImpl::~wxPrinterDCImpl() -{ - delete m_nativePrinterDC ; -} - -bool wxPrinterDCImpl::StartDoc( const wxString& message ) -{ - wxASSERT_MSG( IsOk() , wxT("Called wxPrinterDC::StartDoc from an invalid object") ) ; - - if ( !m_ok ) - return false ; - - if ( m_nativePrinterDC->StartDoc( (wxPrinterDC*) GetOwner(), message ) ) - { - // in case we have to do additional things when successful - } - m_ok = m_nativePrinterDC->Ok() ; - if ( !m_ok ) - { - wxString message ; - message.Printf( wxT("Print Error %u"), m_nativePrinterDC->GetStatus() ) ; - wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - - return m_ok ; -} - -void wxPrinterDCImpl::EndDoc(void) -{ - if ( !m_ok ) - return ; - - m_nativePrinterDC->EndDoc( (wxPrinterDC*) GetOwner() ) ; - m_ok = m_nativePrinterDC->Ok() ; - - if ( !m_ok ) - { - wxString message ; - message.Printf( wxT("Print Error %u"), m_nativePrinterDC->GetStatus() ) ; - wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } -} - -wxRect wxPrinterDCImpl::GetPaperRect() -{ - wxCoord w, h; - GetOwner()->GetSize(&w, &h); - wxRect pageRect(0, 0, w, h); - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) m_printData.GetNativeData() ; - OSStatus err = noErr ; - PMRect rPaper; - err = PMGetAdjustedPaperRect(native->m_macPageFormat, &rPaper); - if ( err != noErr ) - return pageRect; - return wxRect(wxCoord(rPaper.left), wxCoord(rPaper.top), - wxCoord(rPaper.right - rPaper.left), wxCoord(rPaper.bottom - rPaper.top)); -} - -void wxPrinterDCImpl::StartPage() -{ - 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_nativePrinterDC->StartPage( (wxPrinterDC*) GetOwner() ) ; - m_ok = m_nativePrinterDC->Ok() ; - -} - -void wxPrinterDCImpl::EndPage() -{ - if ( !m_ok ) - return ; - - m_nativePrinterDC->EndPage( (wxPrinterDC*) GetOwner() ); - m_ok = m_nativePrinterDC->Ok() ; -} - -void wxPrinterDCImpl::DoGetSize(int *width, int *height) const -{ - wxCHECK_RET( m_ok , _T("GetSize() doesn't work without a valid wxPrinterDC") ); - m_nativePrinterDC->GetSize(width, height ) ; -} - -#endif