X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e158da36bd19d0859baa603c911bc065108d0a79..64ea838d8f4d1853b7d850db93ee565e901d099a:/src/osx/carbon/dcprint.cpp diff --git a/src/osx/carbon/dcprint.cpp b/src/osx/carbon/dcprint.cpp index 08033ff558..e1927125bc 100644 --- a/src/osx/carbon/dcprint.cpp +++ b/src/osx/carbon/dcprint.cpp @@ -46,7 +46,7 @@ public : // returns 0 in case of no Error, otherwise platform specific error codes virtual wxUint32 GetStatus() const = 0 ; - bool Ok() { return GetStatus() == 0 ; } + bool IsOk() { return GetStatus() == 0 ; } static wxNativePrinterDC* Create(wxPrintData* data) ; } ; @@ -84,30 +84,25 @@ wxMacCarbonPrinterDC::wxMacCarbonPrinterDC( wxPrintData* data ) 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->GetPrintSession(), &printer); + if ( m_err == noErr ) { - PMPrinter printer; - m_err = PMSessionGetCurrentPrinter(native->GetPrintSession(), &printer); - if ( m_err == noErr ) + m_err = PMPrinterGetOutputResolution( printer, native->GetPrintSettings(), &res) ; + if ( m_err == -9589 /* kPMKeyNotFound */ ) { - m_err = PMPrinterGetOutputResolution( printer, native->GetPrintSettings(), &res) ; - if ( m_err == -9589 /* kPMKeyNotFound */ ) - { - m_err = noErr ; - res.hRes = res.vRes = 300; - } + 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->GetPageFormat()), &res); -#endif + res.hRes = res.vRes = 300; } + m_maxX = wxCoord((double)m_maxX * res.hRes / 72.0); + m_maxY = wxCoord((double)m_maxY * res.vRes / 72.0); + m_ppi = wxSize(int(res.hRes), int(res.vRes)); } @@ -128,10 +123,7 @@ bool wxMacCarbonPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& message wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl(); wxOSXPrintData *native = (wxOSXPrintData*) impl->GetPrintData().GetNativeData() ; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 - if ( PMPrintSettingsSetJobName != NULL ) - PMPrintSettingsSetJobName(native->GetPrintSettings(), wxCFStringRef(message)); -#endif + PMPrintSettingsSetJobName(native->GetPrintSettings(), wxCFStringRef(message)); m_err = PMSessionBeginCGDocumentNoDialog(native->GetPrintSession(), native->GetPrintSettings(), @@ -148,28 +140,21 @@ bool wxMacCarbonPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& message 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->GetPrintSession(), &printer); + if (m_err == noErr) { - PMPrinter printer; - m_err = PMSessionGetCurrentPrinter(native->GetPrintSession(), &printer); - if ( m_err == noErr ) + m_err = PMPrinterGetOutputResolution( printer, native->GetPrintSettings(), &res) ; + if ( m_err == -9589 /* kPMKeyNotFound */ ) { - m_err = PMPrinterGetOutputResolution( printer, native->GetPrintSettings(), &res) ; - if ( m_err == -9589 /* kPMKeyNotFound */ ) - { - m_err = noErr ; - res.hRes = res.vRes = 300; - } + 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->GetPageFormat()), &res); -#endif - } + + m_maxX = wxCoord((double)m_maxX * res.hRes / 72.0); + m_maxY = wxCoord((double)m_maxY * res.vRes / 72.0); m_ppi = wxSize(int(res.hRes), int(res.vRes)); return true ; @@ -196,7 +181,7 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) m_err = PMSessionBeginPageNoDialog(native->GetPrintSession(), native->GetPageFormat(), - nil); + NULL); CGContextRef pageContext; @@ -213,22 +198,24 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) } else { - PMRect rPage; - - m_err = PMGetAdjustedPageRect(native->GetPageFormat(), &rPage); + PMRect paperRect ; + m_err = PMGetAdjustedPaperRect( native->GetPageFormat() , &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 if ( !m_err ) - { - PMRect paperRect ; - PMGetAdjustedPaperRect( native->GetPageFormat() , &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 ; + + // Leopard deprecated PMSetResolution() which will not be available in 64 bit mode, so we avoid using it. + // To set the proper drawing resolution, the docs suggest the use of CGContextScaleCTM(), so here we go; as a + // consequence though, PMGetAdjustedPaperRect() and PMGetAdjustedPageRect() return unscaled rects, so we + // have to manually scale them later. + CGContextScaleCTM( pageContext, 72.0 / (double)m_ppi.x, -72.0 / (double)m_ppi.y); + + impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) ); } - impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) ); } void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) @@ -274,7 +261,7 @@ wxPrinterDCImpl::wxPrinterDCImpl( wxPrinterDC *owner, const wxPrintData& printda m_nativePrinterDC = wxNativePrinterDC::Create( &m_printData ) ; if ( m_nativePrinterDC ) { - m_ok = m_nativePrinterDC->Ok() ; + m_ok = m_nativePrinterDC->IsOk() ; if ( !m_ok ) { wxString message ; @@ -315,7 +302,7 @@ bool wxPrinterDCImpl::StartDoc( const wxString& message ) { // in case we have to do additional things when successful } - m_ok = m_nativePrinterDC->Ok() ; + m_ok = m_nativePrinterDC->IsOk() ; if ( !m_ok ) { wxString message ; @@ -333,7 +320,7 @@ void wxPrinterDCImpl::EndDoc(void) return ; m_nativePrinterDC->EndDoc( (wxPrinterDC*) GetOwner() ) ; - m_ok = m_nativePrinterDC->Ok() ; + m_ok = m_nativePrinterDC->IsOk() ; if ( !m_ok ) { @@ -355,6 +342,13 @@ wxRect wxPrinterDCImpl::GetPaperRect() const err = PMGetAdjustedPaperRect(native->GetPageFormat(), &rPaper); if ( err != noErr ) return pageRect; + + wxSize ppi = GetOwner()->GetPPI(); + rPaper.right *= (ppi.x / 72.0); + rPaper.bottom *= (ppi.y / 72.0); + rPaper.left *= (ppi.x / 72.0); + rPaper.top *= (ppi.y / 72.0); + return wxRect(wxCoord(rPaper.left), wxCoord(rPaper.top), wxCoord(rPaper.right - rPaper.left), wxCoord(rPaper.bottom - rPaper.top)); } @@ -376,7 +370,7 @@ void wxPrinterDCImpl::StartPage() m_backgroundBrush = *wxWHITE_BRUSH; m_nativePrinterDC->StartPage( (wxPrinterDC*) GetOwner() ) ; - m_ok = m_nativePrinterDC->Ok() ; + m_ok = m_nativePrinterDC->IsOk() ; } @@ -386,12 +380,12 @@ void wxPrinterDCImpl::EndPage() return ; m_nativePrinterDC->EndPage( (wxPrinterDC*) GetOwner() ); - m_ok = m_nativePrinterDC->Ok() ; + m_ok = m_nativePrinterDC->IsOk() ; } void wxPrinterDCImpl::DoGetSize(int *width, int *height) const { - wxCHECK_RET( m_ok , _T("GetSize() doesn't work without a valid wxPrinterDC") ); + wxCHECK_RET( m_ok , wxT("GetSize() doesn't work without a valid wxPrinterDC") ); m_nativePrinterDC->GetSize(width, height ) ; }