]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dcclient.cpp
on demand creation of native CGContexts , so that pure text measuring contexts don...
[wxWidgets.git] / src / mac / carbon / dcclient.cpp
index affb800da12aaecfffae74e99b32bf13fcc7de5d..73d0d4d301c058a9fe96fcc60c3be923f48412ff 100644 (file)
@@ -23,6 +23,7 @@
     #include "wx/region.h"
 #endif
 
+#include "wx/graphics.h"
 #include "wx/mac/private.h"
 
 //-----------------------------------------------------------------------------
@@ -119,7 +120,6 @@ wxWindowDC::wxWindowDC(wxWindow *window)
     if (!rootwindow)
         return;
 
-    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
     int x , y ;
     x = y = 0 ;
     window->MacWindowToRootWindow( &x , &y ) ;
@@ -127,31 +127,31 @@ wxWindowDC::wxWindowDC(wxWindow *window)
 
 #if wxMAC_USE_CORE_GRAPHICS
     m_window->GetSize( &m_width , &m_height);
-       CGContextRef cg = (CGContextRef) window->MacGetCGContextRef();
-       m_release = false;
+    CGContextRef cg = (CGContextRef) window->MacGetCGContextRef();
+    m_release = false;
     if ( cg == NULL )
-       {
-               SetGraphicsContext( wxGraphicsContext::Create( window ) ) ;
-               SetDeviceOrigin( x, y );
-       }
-       else
-       {
-               CGContextSaveGState( cg );
-               m_release = true ;
-               // make sure the context is having its origin at the wx-window coordinates of the 
-               // view (read at the top of window.cpp about the differences)
-               if ( window->MacGetLeftBorderSize() != 0 || window->MacGetTopBorderSize() != 0 )
-                       CGContextTranslateCTM( cg , -window->MacGetLeftBorderSize() , -window->MacGetTopBorderSize() );
-               
-               SetGraphicsContext( wxGraphicsContext::CreateFromNative( cg ) );
-       }
-       m_graphicContext->SetPen( m_pen ) ;
-       m_graphicContext->SetBrush( m_brush ) ;
-       SetClippingRegion( 0 , 0 , m_width , m_height ) ;
+    {
+        SetGraphicsContext( wxGraphicsContext::Create( window ) ) ;
+        SetDeviceOrigin( x, y );
+    }
+    else
+    {
+        CGContextSaveGState( cg );
+        m_release = true ;
+        // make sure the context is having its origin at the wx-window coordinates of the 
+        // view (read at the top of window.cpp about the differences)
+        if ( window->MacGetLeftBorderSize() != 0 || window->MacGetTopBorderSize() != 0 )
+            CGContextTranslateCTM( cg , -window->MacGetLeftBorderSize() , -window->MacGetTopBorderSize() );
+
+        SetGraphicsContext( wxGraphicsContext::CreateFromNative( cg ) );
+    }
+    m_graphicContext->SetPen( m_pen ) ;
+    m_graphicContext->SetBrush( m_brush ) ;
+    SetClippingRegion( 0 , 0 , m_width , m_height ) ;
 #else
-       m_macLocalOrigin.x = x ;
-       m_macLocalOrigin.y = y ;
-    m_macPort = UMAGetWindowPort( windowref ) ;
+    m_macLocalOrigin.x = x ;
+    m_macLocalOrigin.y = y ;
+    m_macPort = UMAGetWindowPort( (WindowRef) rootwindow->MacGetWindowRef() ) ;
 
     CopyRgn( (RgnHandle) window->MacGetVisibleRegion(true).GetWXHRGN() , (RgnHandle) m_macBoundaryClipRgn ) ;
     OffsetRgn( (RgnHandle) m_macBoundaryClipRgn , m_macLocalOrigin.x , m_macLocalOrigin.y ) ;
@@ -165,25 +165,24 @@ wxWindowDC::wxWindowDC(wxWindow *window)
 wxWindowDC::~wxWindowDC()
 {
 #if wxMAC_USE_CORE_GRAPHICS
-       if ( m_release && m_graphicContext )
-       {
-               CGContextRef cg = (CGContextRef) m_window->MacGetCGContextRef();
-               CGContextRestoreGState(cg);
-//             CGContextRef cg = (CGContextRef) m_graphicContext->GetNativeContext() ;
-       }
+    if ( m_release && m_graphicContext )
+    {
+        CGContextRef cg = (CGContextRef) m_window->MacGetCGContextRef();
+        CGContextRestoreGState(cg);
+        //CGContextRef cg = (CGContextRef) m_graphicContext->GetNativeContext() ;
+    }
 #endif
 }
 
 void wxWindowDC::DoGetSize( int* width, int* height ) const
 {
-    wxCHECK_RET( m_window, _T("GetSize() doesn't work without window") );
-
 #if wxMAC_USE_CORE_GRAPHICS
-       if ( width )
-               *width = m_width;
-       if ( height )
-               *height = m_height;
+    if ( width )
+        *width = m_width;
+    if ( height )
+        *height = m_height;
 #else
+    wxCHECK_RET( m_window, _T("GetSize() doesn't work without window") );
     m_window->GetSize(width, height);
 #endif
 }
@@ -199,7 +198,7 @@ wxClientDC::wxClientDC()
 
 #if wxMAC_USE_CORE_GRAPHICS
 wxClientDC::wxClientDC(wxWindow *window) :
-       wxWindowDC( window )
+    wxWindowDC( window )
 {
     wxPoint origin = window->GetClientAreaOrigin() ;
     wxSize size = window->GetClientSize() ;
@@ -208,8 +207,8 @@ wxClientDC::wxClientDC(wxWindow *window) :
     y = origin.y ;
     window->MacWindowToRootWindow( &x , &y ) ;
     m_window->GetClientSize( &m_width , &m_height);
-       SetDeviceOrigin( origin.x, origin.y );
-       SetClippingRegion( 0 , 0 , m_width , m_height ) ;
+    SetDeviceOrigin( origin.x, origin.y );
+    SetClippingRegion( 0 , 0 , m_width , m_height ) ;
 }
 #else
 wxClientDC::wxClientDC(wxWindow *window)
@@ -266,7 +265,7 @@ wxPaintDC::wxPaintDC()
 
 #if wxMAC_USE_CORE_GRAPHICS
 wxPaintDC::wxPaintDC(wxWindow *window) :
-       wxWindowDC( window )
+    wxWindowDC( window )
 {
     wxPoint origin = window->GetClientAreaOrigin() ;
     wxSize size = window->GetClientSize() ;
@@ -275,8 +274,8 @@ wxPaintDC::wxPaintDC(wxWindow *window) :
     y = origin.y ;
     window->MacWindowToRootWindow( &x , &y ) ;
     m_window->GetClientSize( &m_width , &m_height);
-       SetDeviceOrigin( origin.x, origin.y );
-       SetClippingRegion( 0 , 0 , m_width , m_height ) ;
+    SetDeviceOrigin( origin.x, origin.y );
+    SetClippingRegion( 0 , 0 , m_width , m_height ) ;
 }
 #else
 wxPaintDC::wxPaintDC(wxWindow *window)