]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/utils.cpp
correcting Drag Data handling for 'TEXT' and 'utxt'
[wxWidgets.git] / src / mac / carbon / utils.cpp
index 4c829e6ca5bc7b668fcd50748cbafc66462af9a0..69a34ceec5a28878f9b298cae8227c14e885e4de 100644 (file)
 #include <Multiprocessing.h>
 #endif
 
+#ifdef __DARWIN__
+#include <Carbon/Carbon.h>
+#else
 #include <ATSUnicode.h>
 #include <TextCommon.h>
 #include <TextEncodingConverter.h>
+#endif
 #endif // wxUSE_GUI
 
 #include  "wx/mac/private.h"  // includes mac headers
@@ -93,7 +97,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 +1111,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 +1242,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 +1372,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 ) ;
+       }
 }