]> 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 f3973a3190f230f4cd51ab26b9731f9f37f1a6a7..9ee03b8a4ea3f0140b728422560593fbbea7f397 100644 (file)
@@ -19,6 +19,7 @@
 #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"
@@ -332,6 +333,7 @@ void wxControl::MacPostControlCreate()
      SetSize(pos.x, pos.y, new_size.x, new_size.y);
  
      UMAShowControl( m_macControl ) ;
+     Refresh() ;
 }
 
 void wxControl::MacAdjustControlRect() 
@@ -386,11 +388,7 @@ void wxControl::MacAdjustControlRect()
             m_height += 2 * m_macVerticalBorder;
         }
         
-        wxMacDrawingHelper helper ( wxFindWinFromMacWindow( GetMacRootWindow() ) ) ;
-        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() 
@@ -411,14 +409,12 @@ void wxControl::MacSuperChangedPosition()
         int former_mac_y = contrlRect.top ;
         int mac_x = m_x ;
         int mac_y = m_y ;
-        GetParent()->MacClientToRootWindow( & mac_x , & mac_y ) ;
+        GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ;
         
-        WindowRef rootwindow = GetMacRootWindow() ;
-        wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
-        ::SetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
-        wxMacDrawingHelper focus( wxrootwindow ) ;
-    
-        if ( mac_x != former_mac_x || mac_y != former_mac_y )
+        WindowRef rootwindow = MacGetRootWindow() ;
+
+        if ( mac_x + m_macHorizontalBorder != former_mac_x || 
+            mac_y + m_macVerticalBorder != former_mac_y )
         {
             {
                 Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ;
@@ -430,13 +426,6 @@ void wxControl::MacSuperChangedPosition()
                 InvalWindowRect( rootwindow , &inval ) ;
             }
         }
-        if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
-        {
-        }
-        else
-        {
-            ::SetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ;
-        }
     }
 
     wxWindow::MacSuperChangedPosition() ;
@@ -444,36 +433,8 @@ void wxControl::MacSuperChangedPosition()
 
 void wxControl::MacSuperEnabled( bool 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 ) ;
-            }
-        }
-    }
+    Refresh(FALSE) ;
     wxWindow::MacSuperEnabled( enabled ) ;
-*/
 }
 
 void  wxControl::MacSuperShown( bool show ) 
@@ -484,7 +445,7 @@ void  wxControl::MacSuperShown( bool show )
         {
             if ( m_macControlIsShown )
             {
-                ::HideControl( m_macControl ) ;
+                ::UMAHideControl( m_macControl ) ;
                 m_macControlIsShown = false ;
             }
         }
@@ -547,12 +508,12 @@ void  wxControl::DoSetSize(int x, int y,
              if (height == -1)   new_height = size.y;
          }
      }
-     // AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
+     AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
  
      mac_x = new_x;
      mac_y = new_y;
      if(GetParent()) {
-         GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
+         GetParent()->MacWindowToRootWindow(&mac_x, &mac_y);
      }
      GetControlBounds(m_macControl, &oldbounds);
      oldbounds.right = oldbounds.left + m_width;
@@ -574,6 +535,8 @@ void  wxControl::DoSetSize(int x, int y,
  
      if ( doMove || doResize )
      {
+         Refresh() ;
+     
          // Ensure resize is within constraints
          if ((m_minWidth != -1) && (new_width < m_minWidth)) {
              new_width = m_minWidth;
@@ -595,7 +558,7 @@ void  wxControl::DoSetSize(int x, int y,
  
              UMAMoveControl(m_macControl,
                             mac_x + m_macHorizontalBorder, mac_y + m_macVerticalBorder);
+
              wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
              event.SetEventObject(this);
              GetEventHandler()->ProcessEvent(event) ;
@@ -615,23 +578,7 @@ void  wxControl::DoSetSize(int x, int y,
              GetEventHandler()->ProcessEvent(event);
          }
  
-         // Set up port
-         WindowRef rootwindow = GetMacRootWindow() ;
-         wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
-         wxMacDrawingHelper focus( wxrootwindow );
-         ::SetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
-         // Update window at old and new positions
-         SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
-         InvalWindowRect( rootwindow , &oldbounds );
-         InvalWindowRect( rootwindow , &newbounds );
-         MacRepositionScrollBars() ;
-         if ( !wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
-         {
-             ::SetThemeWindowBackground( rootwindow, kThemeBrushDocumentWindowBackground, false );
-         }
+          Refresh() ;
      }
 }
 
@@ -646,7 +593,7 @@ bool  wxControl::Show(bool show)
         {
             if ( m_macControlIsShown )
             {
-                ::HideControl( m_macControl ) ;
+                ::UMAHideControl( m_macControl ) ;
                 m_macControlIsShown = false ;
             }
         }
@@ -679,53 +626,24 @@ bool  wxControl::Enable(bool enable)
 
 void wxControl::Refresh(bool eraseBack, const wxRect *rect)
 {
-  if ( m_macControl )
-  {
-    wxWindow::Refresh( eraseBack , rect ) ;
-    }
-  else
-  {
     wxWindow::Refresh( eraseBack , rect ) ;
-  }
 }
 
 void wxControl::MacRedrawControl()
 {
-    if ( m_macControl )
+    if ( m_macControl && MacGetRootWindow() )
     {
-        WindowRef window = GetMacRootWindow() ;
-        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->MacGetWindowData() )
-                    {
-                        ::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 ) ;
     }
 }
 
@@ -733,51 +651,26 @@ void wxControl::OnPaint(wxPaintEvent& event)
 {
     if ( m_macControl )
     {
-        WindowRef window = GetMacRootWindow() ;
-        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->MacGetWindowData() )
-                    {
-                        ::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 ) ;
-            }
-        }
+        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
     {
-        // wxWindow::OnPaint( event ) ;
+      event.Skip() ;
     }
 }
 void wxControl::OnEraseBackground(wxEraseEvent& event)
 {
-    // In general, you don't want to erase the background of a control,
-    // or you'll get a flicker.
-    // TODO: move this 'null' function into each control that
-    // might flicker.
+    wxWindow::OnEraseBackground( event ) ; 
 }
 
 
@@ -814,7 +707,7 @@ void  wxControl::OnMouseEvent( wxMouseEvent &event )
         ControlHandle   control ;
         Point       localwhere ;
         SInt16      controlpart ;
-        WindowRef   window = GetMacRootWindow() ;
+        WindowRef   window = MacGetRootWindow() ;
         
         localwhere.h = x ;
         localwhere.v = y ;