]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dcprint.cpp
Added automatic dialog scrolling ability
[wxWidgets.git] / src / mac / carbon / dcprint.cpp
index 453bd896b713a293523dcff8bfb365f513772a4e..aacf643f193c514851d62fd7ce12f5e2dea9791d 100644 (file)
 
 #include "wx/mac/uma.h"
 #include "wx/mac/private/print.h"
+#include "wx/mac/carbon/dcprint.h"
 #include "wx/graphics.h"
 
-IMPLEMENT_CLASS(wxPrinterDC, wxDC)
+IMPLEMENT_ABSTRACT_CLASS(wxPrinterDCImpl, wxGCDCImpl)
 
 class wxNativePrinterDC
 {
@@ -83,13 +84,30 @@ wxMacCarbonPrinterDC::wxMacCarbonPrinterDC( wxPrintData* data )
     m_maxY = wxCoord(rPage.bottom - rPage.top);
 
     PMResolution res;
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 
-    PMPrinter printer;
-    PMSessionGetCurrentPrinter(native->m_macPrintSession, &printer);
-    PMPrinterGetOutputResolution( printer, native->m_macPrintSettings, &res) ;
-#else
-    m_err = PMGetResolution((PMPageFormat) (native->m_macPageFormat), &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));
 }
 
@@ -107,12 +125,12 @@ bool wxMacCarbonPrinterDC::StartDoc(  wxPrinterDC* dc , const wxString& WXUNUSED
     if ( m_err )
         return false ;
 
-    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ;
+    wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl();
+    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ;
 
-    m_err = PMSessionBeginCGDocument(native->m_macPrintSession,
+    m_err = PMSessionBeginCGDocumentNoDialog(native->m_macPrintSession,
               native->m_macPrintSettings,
-              native->m_macPageFormat);
-
+              native->m_macPageFormat);    
     if ( m_err != noErr )
         return false;
 
@@ -125,13 +143,29 @@ bool wxMacCarbonPrinterDC::StartDoc(  wxPrinterDC* dc , const wxString& WXUNUSED
     m_maxY = wxCoord(rPage.bottom - rPage.top);
 
     PMResolution res;
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 
-    PMPrinter printer;
-    PMSessionGetCurrentPrinter(native->m_macPrintSession, &printer);
-    PMPrinterGetOutputResolution( printer, native->m_macPrintSettings, &res) ;
-#else
-    m_err = PMGetResolution((PMPageFormat) (native->m_macPageFormat), &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 ;
 }
@@ -141,9 +175,10 @@ void wxMacCarbonPrinterDC::EndDoc( wxPrinterDC* dc )
     if ( m_err )
         return ;
 
-    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ;
+    wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl();
+    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ;
 
-    m_err = PMSessionEndDocument(native->m_macPrintSession);
+    m_err = PMSessionEndDocumentNoDialog(native->m_macPrintSession);
 }
 
 void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc )
@@ -151,9 +186,10 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc )
     if ( m_err )
         return ;
 
-    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ;
+    wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl();
+    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ;
 
-    m_err = PMSessionBeginPage(native->m_macPrintSession,
+    m_err = PMSessionBeginPageNoDialog(native->m_macPrintSession,
                  native->m_macPageFormat,
                  nil);
 
@@ -167,8 +203,8 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc )
 
     if ( m_err != noErr )
     {
-        PMSessionEndPage(native->m_macPrintSession);
-        PMSessionEndDocument(native->m_macPrintSession);
+        PMSessionEndPageNoDialog(native->m_macPrintSession);
+        PMSessionEndDocumentNoDialog(native->m_macPrintSession);
     }
     else
     {
@@ -187,7 +223,7 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc )
         // since this is a non-critical error, we set the flag back
         m_err = noErr ;
     }
-    dc->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) );
+    impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) );
 }
 
 void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc )
@@ -195,15 +231,16 @@ void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc )
     if ( m_err )
         return ;
 
-    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ;
+    wxPrinterDCImpl *impl = (wxPrinterDCImpl*) dc->GetImpl();
+    wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) impl->GetPrintData().GetNativeData() ;
 
-    m_err = PMSessionEndPage(native->m_macPrintSession);
+    m_err = PMSessionEndPageNoDialog(native->m_macPrintSession);
     if ( m_err != noErr )
     {
-        PMSessionEndDocument(native->m_macPrintSession);
+        PMSessionEndDocumentNoDialog(native->m_macPrintSession);
     }
     // the cg context we got when starting the page isn't valid anymore, so replace it
-    dc->SetGraphicsContext( wxGraphicsContext::Create() );
+    impl->SetGraphicsContext( wxGraphicsContext::Create() );
 }
 
 void wxMacCarbonPrinterDC::GetSize( int *w , int *h) const
@@ -223,7 +260,8 @@ wxSize wxMacCarbonPrinterDC::GetPPI() const
 //
 //
 
-wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
+wxPrinterDCImpl::wxPrinterDCImpl( wxPrinterDC *owner, const wxPrintData& printdata )
+   : wxGCDCImpl( owner )
 {
     m_ok = false ;
     m_printData = printdata ;
@@ -251,24 +289,24 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
     }
 }
 
-wxSize wxPrinterDC::GetPPI() const
+wxSize wxPrinterDCImpl::GetPPI() const
 {
     return m_nativePrinterDC->GetPPI() ;
 }
 
-wxPrinterDC::~wxPrinterDC(void)
+wxPrinterDCImpl::~wxPrinterDCImpl()
 {
     delete m_nativePrinterDC ;
 }
 
-bool wxPrinterDC::StartDoc( const wxString& message )
+bool wxPrinterDCImpl::StartDoc( const wxString& message )
 {
-    wxASSERT_MSG( Ok() , wxT("Called wxPrinterDC::StartDoc from an invalid object") ) ;
+    wxASSERT_MSG( IsOk() , wxT("Called wxPrinterDC::StartDoc from an invalid object") ) ;
 
     if ( !m_ok )
         return false ;
 
-    if ( m_nativePrinterDC->StartDoc(this, message ) )
+    if ( m_nativePrinterDC->StartDoc( (wxPrinterDC*) GetOwner(), message ) )
     {
         // in case we have to do additional things when successful
     }
@@ -284,12 +322,12 @@ bool wxPrinterDC::StartDoc( const wxString& message )
     return m_ok ;
 }
 
-void wxPrinterDC::EndDoc(void)
+void wxPrinterDCImpl::EndDoc(void)
 {
     if ( !m_ok )
         return ;
 
-    m_nativePrinterDC->EndDoc( this ) ;
+    m_nativePrinterDC->EndDoc( (wxPrinterDC*) GetOwner() ) ;
     m_ok = m_nativePrinterDC->Ok() ;
 
     if ( !m_ok )
@@ -301,10 +339,10 @@ void wxPrinterDC::EndDoc(void)
     }
 }
 
-wxRect wxPrinterDC::GetPaperRect()
+wxRect wxPrinterDCImpl::GetPaperRect()
 {
     wxCoord w, h;
-    GetSize(&w, &h);
+    GetOwner()->GetSize(&w, &h);
     wxRect pageRect(0, 0, w, h);
     wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) m_printData.GetNativeData() ;
     OSStatus err = noErr ;
@@ -316,7 +354,7 @@ wxRect wxPrinterDC::GetPaperRect()
         wxCoord(rPaper.right - rPaper.left), wxCoord(rPaper.bottom - rPaper.top));
 }
 
-void wxPrinterDC::StartPage(void)
+void wxPrinterDCImpl::StartPage()
 {
     if ( !m_ok )
         return ;
@@ -332,21 +370,21 @@ void wxPrinterDC::StartPage(void)
     m_brush = *wxTRANSPARENT_BRUSH;
     m_backgroundBrush = *wxWHITE_BRUSH;
 
-    m_nativePrinterDC->StartPage(this) ;
+    m_nativePrinterDC->StartPage( (wxPrinterDC*) GetOwner() ) ;
     m_ok = m_nativePrinterDC->Ok() ;
 
 }
 
-void wxPrinterDC::EndPage(void)
+void wxPrinterDCImpl::EndPage()
 {
     if ( !m_ok )
         return ;
 
-    m_nativePrinterDC->EndPage(this) ;
+    m_nativePrinterDC->EndPage( (wxPrinterDC*) GetOwner() );
     m_ok = m_nativePrinterDC->Ok() ;
 }
 
-void wxPrinterDC::DoGetSize(int *width, int *height) const
+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 ) ;