]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/control.cpp
corrected graying out, only to be executed when background is gray or white
[wxWidgets.git] / src / mac / control.cpp
index 1c7030c6b86044d3fd0beb617f77528e62d2b75d..9ee03b8a4ea3f0140b728422560593fbbea7f397 100644 (file)
@@ -19,6 +19,7 @@
 #include "wx/panel.h"
 #include "wx/app.h"
 #include "wx/dc.h"
 #include "wx/panel.h"
 #include "wx/app.h"
 #include "wx/dc.h"
+#include "wx/dcclient.h"
 #include "wx/notebook.h"
 #include "wx/tabctrl.h"
 #include "wx/radiobox.h"
 #include "wx/notebook.h"
 #include "wx/tabctrl.h"
 #include "wx/radiobox.h"
@@ -332,6 +333,7 @@ void wxControl::MacPostControlCreate()
      SetSize(pos.x, pos.y, new_size.x, new_size.y);
  
      UMAShowControl( m_macControl ) ;
      SetSize(pos.x, pos.y, new_size.x, new_size.y);
  
      UMAShowControl( m_macControl ) ;
+     Refresh() ;
 }
 
 void wxControl::MacAdjustControlRect() 
 }
 
 void wxControl::MacAdjustControlRect() 
@@ -386,11 +388,7 @@ void wxControl::MacAdjustControlRect()
             m_height += 2 * m_macVerticalBorder;
         }
         
             m_height += 2 * m_macVerticalBorder;
         }
         
-        wxMacDrawingHelper helper ( wxFindWinFromMacWindow( MacGetRootWindow() ) ) ;
-        if ( helper.Ok() )
-        {
-            UMASizeControl( m_macControl , m_width - 2 * m_macHorizontalBorder, m_height -  2 * m_macVerticalBorder ) ;
-        }
+        UMASizeControl( m_macControl , m_width - 2 * m_macHorizontalBorder, m_height -  2 * m_macVerticalBorder ) ;
     }
 }
 ControlHandle wxControl::MacGetContainerForEmbedding() 
     }
 }
 ControlHandle wxControl::MacGetContainerForEmbedding() 
@@ -414,10 +412,7 @@ void wxControl::MacSuperChangedPosition()
         GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ;
         
         WindowRef rootwindow = MacGetRootWindow() ;
         GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ;
         
         WindowRef rootwindow = MacGetRootWindow() ;
-        wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
 
 
-        wxMacDrawingHelper focus( wxrootwindow ) ;
-    
         if ( mac_x + m_macHorizontalBorder != former_mac_x || 
             mac_y + m_macVerticalBorder != former_mac_y )
         {
         if ( mac_x + m_macHorizontalBorder != former_mac_x || 
             mac_y + m_macVerticalBorder != former_mac_y )
         {
@@ -438,37 +433,8 @@ void wxControl::MacSuperChangedPosition()
 
 void wxControl::MacSuperEnabled( bool enabled ) 
 {
 
 void wxControl::MacSuperEnabled( bool enabled ) 
 {
+    Refresh(FALSE) ;
     wxWindow::MacSuperEnabled( enabled ) ;
     wxWindow::MacSuperEnabled( enabled ) ;
-/*
-    if ( m_macControl )
-    {
-        if ( UMAHasAppearance() )
-        {
-            if ( !enabled )
-            {
-                ::DeactivateControl( m_macControl ) ; 
-            }
-            else
-            {
-                if ( m_macEnabled )
-                    ::ActivateControl( m_macControl ) ;
-            }
-        }
-        else
-        {
-            if ( !enabled )
-            {
-                ::HiliteControl( m_macControl , 255 ) ;
-            }
-            else
-            {
-                if ( m_macEnabled )
-                    ::HiliteControl( m_macControl , 0 ) ;
-            }
-        }
-    }
-    wxWindow::MacSuperEnabled( enabled ) ;
-*/
 }
 
 void  wxControl::MacSuperShown( bool show ) 
 }
 
 void  wxControl::MacSuperShown( bool show ) 
@@ -665,41 +631,19 @@ void wxControl::Refresh(bool eraseBack, const wxRect *rect)
 
 void wxControl::MacRedrawControl()
 {
 
 void wxControl::MacRedrawControl()
 {
-    if ( m_macControl )
+    if ( m_macControl && MacGetRootWindow() )
     {
     {
-        WindowRef window = MacGetRootWindow() ;
-        if ( window )
-        {
-            wxWindow* win = wxFindWinFromMacWindow( window ) ;
-            if ( win )
-            {
-                wxMacDrawingHelper help( win ) ;
-                // the mac control manager always assumes to have the origin at 0,0
-                SetOrigin( 0 , 0 ) ;
-                
-                wxWindow* parent = GetParent() ;
-                while ( parent )
-                {
-                    if( parent->IsTopLevel() )
-                    {
-                    //    ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ;
-                        break ;
-                    }
-                    
-                    if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) ||  parent->IsKindOf( CLASSINFO( wxTabCtrl ) ))
-                    {
-                        if ( ((wxControl*)parent)->m_macControl )
-                            SetUpControlBackground( ((wxControl*)parent)->m_macControl , -1 , true ) ;
-                        break ;
-                    }
-                    
-                    parent = parent->GetParent() ;
-                } 
-                
-                UMADrawControl( m_macControl ) ;
-                // ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ;
-            }
-        }
+        wxClientDC dc(this) ;
+        wxMacPortSetter helper(&dc) ;
+        
+        // the controls sometimes draw outside their boundaries, this
+        // should be resolved differently but is not trivial (e.g. drop shadows)
+        // since adding them to the border would yield in enormous gaps between
+        // the controls
+        Rect r = { 0 , 0 , 32000 , 32000 } ;
+        ClipRect( &r ) ;
+        wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ;
+        UMADrawControl( m_macControl ) ;
     }
 }
 
     }
 }
 
@@ -707,45 +651,21 @@ void wxControl::OnPaint(wxPaintEvent& event)
 {
     if ( m_macControl )
     {
 {
     if ( m_macControl )
     {
-        WindowRef window = MacGetRootWindow() ;
-        if ( window )
-        {
-            wxWindow* win = wxFindWinFromMacWindow( window ) ;
-            if ( win )
-            {
-                wxMacDrawingHelper help( win ) ;
-                // the mac control manager always assumes to have the origin at 0,0
-                SetOrigin( 0 , 0 ) ;
-
-                /*
-                wxWindow* parent = GetParent() ;
-                while ( parent )
-                {
-                    if( parent->IsTopLevel() )
-                    {
-                    //    ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ;
-                        break ;
-                    }
-                    
-                    if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) ||  parent->IsKindOf( CLASSINFO( wxTabCtrl ) ))
-                    {
-                        if ( ((wxControl*)parent)->m_macControl )
-                            SetUpControlBackground( ((wxControl*)parent)->m_macControl , -1 , true ) ;
-                        break ;
-                    }
-                    
-                    parent = parent->GetParent() ;
-                } 
-                */
-                SetUpControlBackground( m_macControl , -1 , true ) ;
-                UMADrawControl( m_macControl ) ;
-                // ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ;
-            }
-        }
+        wxPaintDC dc(this) ;
+        wxMacPortSetter helper(&dc) ;
+        // the controls sometimes draw outside their boundaries, this
+        // should be resolved differently but is not trivial (e.g. drop shadows)
+        // since adding them to the border would yield in enormous gaps between
+        // the controls
+        Rect r = { 0 , 0 , 32000 , 32000 } ;
+        ClipRect( &r ) ;
+
+        wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ;
+        UMADrawControl( m_macControl ) ;
     }
     else
     {
     }
     else
     {
-        // wxWindow::OnPaint( event ) ;
+      event.Skip() ;
     }
 }
 void wxControl::OnEraseBackground(wxEraseEvent& event)
     }
 }
 void wxControl::OnEraseBackground(wxEraseEvent& event)