]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dcprint.cpp
add wxTLW::UseNativeDecorations[ByDefault]() to allow the programmer to control wheth...
[wxWidgets.git] / src / mac / carbon / dcprint.cpp
index 490b0830659ac93e1f322c591b7ae81d22874995..c0779550efadc8799872a306a689864675ad3a1d 100644 (file)
@@ -22,9 +22,9 @@
 
 #ifndef WX_PRECOMP
     #include "wx/msgdlg.h"
+    #include "wx/math.h"
 #endif
 
-#include "wx/math.h"
 #include "wx/mac/uma.h"
 #include "wx/mac/private/print.h"
 
@@ -39,8 +39,9 @@ public :
     virtual void EndDoc( wxPrinterDC* dc ) = 0;
     virtual void StartPage( wxPrinterDC* dc ) = 0;
     virtual void EndPage( wxPrinterDC* dc ) = 0;
-    virtual wxCoord GetMaxX() const = 0 ;
-    virtual wxCoord GetMaxY() const = 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 ; }
@@ -52,18 +53,19 @@ class wxMacCarbonPrinterDC : public wxNativePrinterDC
 {
 public :
     wxMacCarbonPrinterDC( wxPrintData* data ) ;
-    ~wxMacCarbonPrinterDC() ;
+    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 wxCoord GetMaxX() const { return m_maxX ; }
-    virtual wxCoord GetMaxY() const { return m_maxY ; }
     virtual wxUint32 GetStatus() const { return m_err ; }
+    virtual void GetSize( int *w , int *h) const ;
+    virtual wxSize GetPPI() const ;
 private :
     GrafPtr m_macPrintFormerPort ;
     wxCoord m_maxX ;
     wxCoord m_maxY ;
+    wxSize  m_ppi ;
     OSStatus m_err ;
 } ;
 
@@ -81,6 +83,10 @@ wxMacCarbonPrinterDC::wxMacCarbonPrinterDC( wxPrintData* data )
 
     m_maxX = wxCoord(rPage.right - rPage.left) ;
     m_maxY = wxCoord(rPage.bottom - rPage.top);
+
+    PMResolution res;
+    m_err = PMGetResolution((PMPageFormat) (native->m_macPageFormat), &res);
+    m_ppi = wxSize(int(res.hRes), int(res.vRes));
 }
 
 wxMacCarbonPrinterDC::~wxMacCarbonPrinterDC()
@@ -119,10 +125,14 @@ bool wxMacCarbonPrinterDC::StartDoc(  wxPrinterDC* dc , const wxString& WXUNUSED
     PMRect rPage;
     m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage);
     if ( m_err != noErr )
-        return false;
+        return false ;
+
+    m_maxX = wxCoord(rPage.right - rPage.left) ;
+    m_maxY = wxCoord(rPage.bottom - rPage.top);
 
-    m_maxX = (wxCoord)(rPage.right - rPage.left);
-    m_maxY = (wxCoord)(rPage.bottom - rPage.top);
+    PMResolution res;
+    m_err = PMGetResolution((PMPageFormat) (native->m_macPageFormat), &res);
+    m_ppi = wxSize(int(res.hRes), int(res.vRes));
     return true ;
 }
 
@@ -206,6 +216,23 @@ void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc )
     }
 }
 
+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 ;
+};
+
+//
+//
+//
+
 wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
 {
     m_ok = false ;
@@ -222,6 +249,12 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
             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;        
+        }
 #if wxMAC_USE_CORE_GRAPHICS
         // the cgContext will only be handed over page by page
         m_graphicContext = new wxMacCGContext() ;
@@ -229,6 +262,11 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
     }
 }
 
+wxSize wxPrinterDC::GetPPI() const
+{
+    return m_nativePrinterDC->GetPPI() ;
+}
+
 wxPrinterDC::~wxPrinterDC(void)
 {
 #if wxMAC_USE_CORE_GRAPHICS
@@ -324,11 +362,7 @@ void wxPrinterDC::EndPage(void)
 void wxPrinterDC::DoGetSize(int *width, int *height) const
 {
     wxCHECK_RET( m_ok , _T("GetSize() doesn't work without a valid wxPrinterDC") );
-
-    if ( width )
-        * width = m_nativePrinterDC->GetMaxX() ;
-    if ( height )
-        * height = m_nativePrinterDC->GetMaxY() ;
+    m_nativePrinterDC->GetSize(width,  height ) ;
 }
 
 #endif