]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/utils.cpp
Copy about.htm
[wxWidgets.git] / src / mac / carbon / utils.cpp
index 4c829e6ca5bc7b668fcd50748cbafc66462af9a0..479e31e3cd73ecc234bf2624d12dea8014d1ffe5 100644 (file)
@@ -93,7 +93,7 @@ static int DoGetOSVersion(int *majorVsn, int *minorVsn)
 // debugging support
 // ----------------------------------------------------------------------------
 
-#if defined(__WXMAC__) && !defined(__DARWIN__) && defined(__MWERKS__) && (__MWERKS__ >= 0x2400)
+#if defined(__WXDEBUG__) && defined(__WXMAC__) && !defined(__DARWIN__) && defined(__MWERKS__) && (__MWERKS__ >= 0x2400)
 
 // MetroNub stuff doesn't seem to work in CodeWarrior 5.3 Carbon builds...
 
@@ -1107,10 +1107,25 @@ void wxMacControl::SetDrawingEnabled( bool enable )
 bool wxMacControl::GetNeedsDisplay() const
 {
 #if TARGET_API_MAC_OSX
-    return HIViewGetNeedsDisplay( m_controlRef ) ;
-#else
-    return false ;
+    if ( m_isCompositing )
+    {
+        return HIViewGetNeedsDisplay( m_controlRef ) ;
+       }
+       else
 #endif
+       {
+               if ( !IsVisible() )
+            return false ;
+                       
+           Rect controlBounds ; 
+           GetControlBounds( m_controlRef, &controlBounds ) ;
+           RgnHandle rgn = NewRgn() ;
+               GetWindowRegion ( GetControlOwner( m_controlRef ) , kWindowUpdateRgn , rgn ) ;
+               Boolean intersect = RectInRgn ( &controlBounds , rgn ) ;
+               DisposeRgn( rgn ) ;
+               return intersect ;
+       }
+
 }
 #endif
 
@@ -1223,6 +1238,8 @@ void wxMacControl::SetRect( Rect *r )
         
         Rect controlBounds = *r ;
         
+        // since the rect passed in is always (even in non-compositing) relative
+        // to the (native) parent, we have to adjust to window relative here
         wxMacControl* parent = m_peer->GetParent()->GetPeer() ;
         if( parent->m_isRootControl == false )
         {
@@ -1351,12 +1368,29 @@ void wxMacControl::InvalidateWithChildren()
 #endif
 }
 
-void wxMacControl::ScrollRect( const wxRect &r , int dx , int dy )
+void wxMacControl::ScrollRect( wxRect *r , int dx , int dy ) 
 {
+       wxASSERT( r != NULL ) ;
 #if TARGET_API_MAC_OSX
-    HIRect scrollarea = CGRectMake( r.x , r.y , r.width , r.height) ;
-    HIViewScrollRect ( m_controlRef , &scrollarea , dx ,dy ) ;
+       if ( m_isCompositing )
+       {
+               HIRect scrollarea = CGRectMake( r->x , r->y , r->width , r->height) ;
+        HIViewScrollRect ( m_controlRef , &scrollarea , dx ,dy ) ;
+       }
+       else
 #endif
+       {
+               Rect bounds ;
+               GetControlBounds( m_controlRef , &bounds ) ;
+               bounds.left += r->x ;
+               bounds.top += r->y ;
+               bounds.bottom = bounds.top + r->height ;
+               bounds.right = bounds.left + r->width ;
+               wxMacWindowClipper clip( m_peer ) ;
+               RgnHandle updateRgn = NewRgn() ;
+               ::ScrollRect( &bounds , dx , dy , updateRgn ) ;
+               InvalWindowRgn( GetControlOwner( m_controlRef )  ,  updateRgn ) ;
+       }
 }