]> git.saurik.com Git - wxWidgets.git/commitdiff
reintroducing direct access, clipping to client area in dc
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 18 Feb 2005 16:48:22 +0000 (16:48 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 18 Feb 2005 16:48:22 +0000 (16:48 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32144 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/dcclient.cpp

index 389da1fc6fd069aeb95e0ddf5d20069a08871164..1164a856d4c62cf7cb6c324d95d1134c30baf243 100644 (file)
@@ -110,7 +110,20 @@ wxWindowDC::wxWindowDC()
 wxWindowDC::wxWindowDC(wxWindow *window) 
 {
     m_window = window ;
+    wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
+    if (!rootwindow)
+        return;
+    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
+    int x , y ;
+    x = y = 0 ;
+    wxSize size = window->GetSize() ;
+    window->MacWindowToRootWindow( &x , &y ) ;
+    m_macPort = UMAGetWindowPort( windowref ) ;
+    
 #if wxMAC_USE_CORE_GRAPHICS
+    m_macLocalOriginInPort.x = x ;
+    m_macLocalOriginInPort.y = y ;
+
     if ( window->MacGetCGContextRef() )
     {
         m_graphicContext = new wxMacCGContext( (CGContextRef) window->MacGetCGContextRef() ) ;
@@ -122,35 +135,21 @@ wxWindowDC::wxWindowDC(wxWindow *window)
     {
         // as out of order redraw is not supported under CQ, we have to create a qd port for these
         // situations
-        wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
-        if (!rootwindow)
-            return;
-        WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
-        int x , y ;
-        x = y = 0 ;
-        window->MacWindowToRootWindow( &x , &y ) ;
         m_macLocalOrigin.x = x ;
         m_macLocalOrigin.y = y ;
-        CGrafPtr port = UMAGetWindowPort( windowref ) ;
         
-        m_graphicContext = new wxMacCGContext( port ) ;
+        m_graphicContext = new wxMacCGContext( (CGrafPtr) m_macPort ) ;
         m_graphicContext->SetPen( m_pen ) ;
         m_graphicContext->SetBrush( m_brush ) ;
         SetBackground(MacGetBackgroundBrush(window));
     }
     // there is no out-of-order drawing on OSX
 #else
-    wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
-    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
-    int x , y ;
-    x = y = 0 ;
-    window->MacWindowToRootWindow( &x , &y ) ;
     m_macLocalOrigin.x = x ;
     m_macLocalOrigin.y = y ;
     CopyRgn( (RgnHandle) window->MacGetVisibleRegion(true).GetWXHRGN() , (RgnHandle) m_macBoundaryClipRgn ) ;
     OffsetRgn( (RgnHandle) m_macBoundaryClipRgn , m_macLocalOrigin.x , m_macLocalOrigin.y ) ;
     CopyRgn( (RgnHandle) m_macBoundaryClipRgn , (RgnHandle) m_macCurrentClipRgn ) ;
-    m_macPort = UMAGetWindowPort( windowref ) ;
     SetBackground(MacGetBackgroundBrush(window));
 #endif
     m_ok = TRUE ;
@@ -180,14 +179,26 @@ wxClientDC::wxClientDC()
 wxClientDC::wxClientDC(wxWindow *window)
 {
     m_window = window ;
+    wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
+    if (!rootwindow)
+        return;
+    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
+    wxPoint origin = window->GetClientAreaOrigin() ;
+    wxSize size = window->GetClientSize() ;
+    int x , y ;
+    x = origin.x ;
+    y = origin.y ;
+    window->MacWindowToRootWindow( &x , &y ) ;
+    m_macPort = UMAGetWindowPort( windowref ) ;
+    
 #if wxMAC_USE_CORE_GRAPHICS
-    m_graphicContext = NULL ;
+    m_macLocalOriginInPort.x = x ;
+    m_macLocalOriginInPort.y = y ;
     if ( window->MacGetCGContextRef() )
     {
         m_graphicContext = new wxMacCGContext( (CGContextRef) window->MacGetCGContextRef() ) ;
         m_graphicContext->SetPen( m_pen ) ;
         m_graphicContext->SetBrush( m_brush ) ;
-        wxSize size = window->GetClientSize() ;
         m_ok = TRUE ;    
         SetClippingRegion( 0 , 0 , size.x , size.y ) ;
         SetBackground(MacGetBackgroundBrush(window));
@@ -196,35 +207,14 @@ wxClientDC::wxClientDC(wxWindow *window)
     {
         // as out of order redraw is not supported under CQ, we have to create a qd port for these
         // situations
-        wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
-        if (!rootwindow)
-            return;
-        WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
-        wxPoint origin = window->GetClientAreaOrigin() ;
-        int x , y ;
-        x = origin.x ;
-        y = origin.y ;
-        window->MacWindowToRootWindow( &x , &y ) ;
         m_macLocalOrigin.x = x ;
         m_macLocalOrigin.y = y ;
-        CGrafPtr port = UMAGetWindowPort( windowref ) ;
-        
-        m_graphicContext = new wxMacCGContext( port ) ;
+        m_graphicContext = new wxMacCGContext( (CGrafPtr) m_macPort ) ;
         m_graphicContext->SetPen( m_pen ) ;
         m_graphicContext->SetBrush( m_brush ) ;
         m_ok = TRUE ;    
      }
 #else
-    wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
-    if (!rootwindow)
-        return;
-    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
-    wxPoint origin = window->GetClientAreaOrigin() ;
-    wxSize size = window->GetClientSize() ;
-    int x , y ;
-    x = origin.x ;
-    y = origin.y ;
-    window->MacWindowToRootWindow( &x , &y ) ;
     m_macLocalOrigin.x = x ;
     m_macLocalOrigin.y = y ;
     SetRectRgn( (RgnHandle) m_macBoundaryClipRgn , origin.x , origin.y , origin.x + size.x , origin.y + size.y ) ;
@@ -232,7 +222,6 @@ wxClientDC::wxClientDC(wxWindow *window)
     OffsetRgn( (RgnHandle) m_macBoundaryClipRgn , -origin.x , -origin.y ) ;
     OffsetRgn( (RgnHandle) m_macBoundaryClipRgn , m_macLocalOrigin.x , m_macLocalOrigin.y ) ;
     CopyRgn( (RgnHandle) m_macBoundaryClipRgn ,(RgnHandle)  m_macCurrentClipRgn ) ;
-    m_macPort = UMAGetWindowPort( windowref ) ;
     m_ok = TRUE ;
 #endif
     SetBackground(MacGetBackgroundBrush(window));
@@ -263,14 +252,26 @@ wxPaintDC::wxPaintDC()
 wxPaintDC::wxPaintDC(wxWindow *window)
 {
     m_window = window ;
+    wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
+    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
+    wxPoint origin = window->GetClientAreaOrigin() ;
+    wxSize size = window->GetClientSize() ;
+    int x , y ;
+    x = origin.x ;
+    y = origin.y ;
+    window->MacWindowToRootWindow( &x , &y ) ;
+    m_macPort = UMAGetWindowPort( windowref ) ;
 #if wxMAC_USE_CORE_GRAPHICS
+    m_macLocalOriginInPort.x = x ;
+    m_macLocalOriginInPort.y = y ;
     if ( window->MacGetCGContextRef() )
     {
         m_graphicContext = new wxMacCGContext( (CGContextRef) window->MacGetCGContextRef() ) ;
         m_graphicContext->SetPen( m_pen ) ;
         m_graphicContext->SetBrush( m_brush ) ;
-        SetBackground(MacGetBackgroundBrush(window));
         m_ok = TRUE ;
+        SetClippingRegion( 0 , 0 , size.x , size.y ) ;
+        SetBackground(MacGetBackgroundBrush(window));
     }
     else
     {
@@ -280,14 +281,6 @@ wxPaintDC::wxPaintDC(wxWindow *window)
     }
     // there is no out-of-order drawing on OSX
 #else
-    wxTopLevelWindowMac* rootwindow = window->MacGetTopLevelWindow() ;
-    WindowRef windowref = (WindowRef) rootwindow->MacGetWindowRef() ;
-    wxPoint origin = window->GetClientAreaOrigin() ;
-    wxSize size = window->GetClientSize() ;
-    int x , y ;
-    x = origin.x ;
-    y = origin.y ;
-    window->MacWindowToRootWindow( &x , &y ) ;
     m_macLocalOrigin.x = x ;
     m_macLocalOrigin.y = y ;
     SetRectRgn( (RgnHandle) m_macBoundaryClipRgn , origin.x , origin.y , origin.x + size.x , origin.y + size.y ) ;
@@ -296,7 +289,6 @@ wxPaintDC::wxPaintDC(wxWindow *window)
     SectRgn( (RgnHandle) m_macBoundaryClipRgn  , (RgnHandle) window->GetUpdateRegion().GetWXHRGN() , (RgnHandle) m_macBoundaryClipRgn ) ;
     OffsetRgn( (RgnHandle) m_macBoundaryClipRgn , m_macLocalOrigin.x , m_macLocalOrigin.y ) ;
     CopyRgn( (RgnHandle) m_macBoundaryClipRgn , (RgnHandle) m_macCurrentClipRgn ) ;
-    m_macPort = UMAGetWindowPort( windowref ) ;
     SetBackground(MacGetBackgroundBrush(window));
     m_ok = TRUE ;
 #endif