]> git.saurik.com Git - wxWidgets.git/commitdiff
rendering adjustments for OSX
authorStefan Csomor <csomor@advancedconcepts.ch>
Sun, 25 Jan 2004 15:15:12 +0000 (15:15 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sun, 25 Jan 2004 15:15:12 +0000 (15:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/renderer.cpp
src/mac/carbon/settings.cpp
src/mac/carbon/statbrma.cpp
src/mac/carbon/window.cpp
src/mac/renderer.cpp
src/mac/settings.cpp
src/mac/statbrma.cpp
src/mac/window.cpp

index 07ae99090a35486e6522d26ba1cc77a80abff22b..fbe365ab67c8e54ec066afbad4fc03fec47d1032 100644 (file)
@@ -139,23 +139,59 @@ wxRendererMac::DrawHeaderButton(wxWindow *win,
                   w = rect.width,
                   h = rect.height;
 
-    dc.SetBrush( *wxTRANSPARENT_BRUSH );
-
-    dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) );
-    dc.DrawLine( x+w-CORNER+1, y, x+w, y+h );       // right (outer)
-    dc.DrawRectangle( x, y+h, w+1, 1 );             // bottom (outer)
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
 
-    wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
-
-    dc.SetPen( pen );
-    dc.DrawLine( x+w-CORNER, y, x+w-1, y+h );       // right (inner)
-    dc.DrawRectangle( x+1, y+h-1, w-2, 1 );         // bottom (inner)
+    dc.SetBrush( *wxTRANSPARENT_BRUSH );
 
-    dc.SetPen( *wxWHITE_PEN );
-    dc.DrawRectangle( x, y, w-CORNER+1, 1 );        // top (outer)
-    dc.DrawRectangle( x, y, 1, h );                 // left (outer)
-    dc.DrawLine( x, y+h-1, x+1, y+h-1 );
-    dc.DrawLine( x+w-1, y, x+w-1, y+1 );
+    if (major >= 10) 
+    {
+        dc.SetPen( wxPen( wxColour( 0xC5 , 0xC5 , 0xC5 ) , 1 , wxSOLID ) );
+        dc.DrawRectangle( x, y+CORNER, 1, h-CORNER );                                  // left
+        // The right border is overdrawn by the left border of the right neighbouring
+        // header (to maintain a proper single pixel border). Except for the 
+        // rightmost header of the listctrl.
+        dc.DrawRectangle( x+w+(CORNER*2), y+CORNER, 1, h-CORNER );     // right
+        dc.SetPen( wxPen( wxColour( 0xB1 , 0xB1 , 0xB1 ) , 1 , wxSOLID ) );    
+        dc.DrawRectangle( x, y+h, w+(CORNER*3), 1 );                   // bottom
+        dc.DrawRectangle( x, y, w+(CORNER*3), 1 );                         // top
+        
+        // Do a fill of the interior for background:
+        dc.SetPen( wxPen( wxColour( 0xF6 , 0xF6 , 0xF6 ) , 1 , wxSOLID ) ); 
+        dc.DrawRectangle( x+CORNER, y+CORNER, w+CORNER, h-CORNER );
+    
+        // Do the gradient fill:
+        static int grayValues[] = 
+        {
+            0xF6, 0xF2, 0xEF, 0xED, 0xED, 0xEB, 0xEA, 0xEA, 0xE8, 
+            0xE8, 0xE2, 0xE5, 0xE8, 0xEB, 0xEF, 0xF2, 0xFD
+        };
+        int i;
+        for (i=0; i < h && i < (int)WXSIZEOF(grayValues); i++) 
+        {
+            dc.SetPen( wxPen( wxColour( grayValues[i] , grayValues[i] , grayValues[i] ),
+                            1 , wxSOLID ) );
+            dc.DrawRectangle( x+CORNER, y+CORNER+i, w+CORNER, 1 );
+        }
+    }
+    else
+    {
+        dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) );
+        dc.DrawLine( x+w-CORNER+1, y, x+w, y+h );       // right (outer)
+        dc.DrawRectangle( x, y+h, w+1, 1 );             // bottom (outer)
+    
+        wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
+    
+        dc.SetPen( pen );
+        dc.DrawLine( x+w-CORNER, y, x+w-1, y+h );       // right (inner)
+        dc.DrawRectangle( x+1, y+h-1, w-2, 1 );         // bottom (inner)
+    
+        dc.SetPen( *wxWHITE_PEN );
+        dc.DrawRectangle( x, y, w-CORNER+1, 1 );        // top (outer)
+        dc.DrawRectangle( x, y, 1, h );                 // left (outer)
+        dc.DrawLine( x, y+h-1, x+1, y+h-1 );
+        dc.DrawLine( x+w-1, y, x+w-1, y+1 );
+       }
 }
 
 void
index eebf21927bddc8e6fd8852ac712c561509e5dd99..4ddb2a458229ec7639d4af983d15aaf91e924bb3 100644 (file)
@@ -57,7 +57,10 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
             break ;
         }
         case wxSYS_COLOUR_BTNSHADOW:
-            return wxColor( 0x44 , 0x44 , 0x44 ) ;
+            if (major >= 10)
+                return wxColor( 0xBE , 0xBE , 0xBE ) ;
+            else
+                return wxColor( 0x44 , 0x44 , 0x44 ) ;
             break ;
 
         case wxSYS_COLOUR_BTNTEXT:
index dcd60b8588a82cf9e244c571b35354fed196dec7..b2dba2135d7b7919da99a4da176a3b9415de534c 100644 (file)
@@ -102,35 +102,50 @@ void wxStatusBarMac::SetStatusText(const wxString& text, int number)
 
 void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) )
 {
-    wxPaintDC dc(this);
-    dc.Clear() ;
-    
-    if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) )
-    {
-        wxPen black( wxBLACK , 1 , wxSOLID ) ;
-        wxPen white( wxWHITE , 1 , wxSOLID ) ;
-        
-        dc.SetPen(black);
-        dc.DrawLine(0, 0 ,
-            m_width , 0);
-        dc.SetPen(white);
-        dc.DrawLine(0, 1 ,
-            m_width , 1);
-    }
-    else
-    {
-        dc.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID));
-        dc.DrawLine(0, 0 ,
-            m_width , 0);
-    }
-    
-    int i;
-    if ( GetFont().Ok() )
-        dc.SetFont(GetFont());
-    dc.SetBackgroundMode(wxTRANSPARENT);
-    
-    for ( i = 0; i < m_nFields; i ++ )
-        DrawField(dc, i);
+       wxPaintDC dc(this);
+       dc.Clear() ;
+
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
+
+       if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) )
+       {
+               wxPen white( wxWHITE , 1 , wxSOLID ) ;
+        if (major >= 10) 
+        {
+            //Finder statusbar border color: (Project builder similar is 9B9B9B)
+            dc.SetPen(wxPen(wxColour(0xB1,0xB1,0xB1),1,wxSOLID));  
+        }
+        else
+        {
+            wxPen black( wxBLACK , 1 , wxSOLID ) ;
+            dc.SetPen(black);
+       }
+               dc.DrawLine(0, 0 ,
+                      m_width , 0);
+               dc.SetPen(white);
+               dc.DrawLine(0, 1 ,
+                      m_width , 1);
+       }
+       else
+       {
+        if (major >= 10) 
+            //Finder statusbar border color: (Project builder similar is 9B9B9B)
+            dc.SetPen(wxPen(wxColour(0xB1,0xB1,0xB1),1,wxSOLID)); 
+        else
+            dc.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID));
+
+               dc.DrawLine(0, 0 ,
+                      m_width , 0);
+       }
+
+       int i;
+       if ( GetFont().Ok() )
+               dc.SetFont(GetFont());
+       dc.SetBackgroundMode(wxTRANSPARENT);
+
+       for ( i = 0; i < m_nFields; i ++ )
+               DrawField(dc, i);
 }
 
 void wxStatusBarMac::MacSuperEnabled( bool enabled ) 
index e75ae84a2ffaf045dc76e042e18e7b4ce539b51b..8357a177d21b126138777edbbc4233daaccc64f4 100644 (file)
@@ -1067,23 +1067,38 @@ void wxWindowMac::MacPaintBorders( int left , int top )
 {
     if( IsTopLevel() )
         return ;
+        
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
 
     RGBColor white = { 0xFFFF, 0xFFFF , 0xFFFF } ;
-    RGBColor black = { 0x0000, 0x0000 , 0x0000 } ;
     RGBColor face = { 0xDDDD, 0xDDDD , 0xDDDD } ;
-    RGBColor shadow = { 0x4444, 0x4444 , 0x4444 } ;
+    
+    RGBColor darkShadow = { 0x0000, 0x0000 , 0x0000 } ;
+    RGBColor lightShadow = { 0x4444, 0x4444 , 0x4444 } ;
+    // OS X has lighter border edges than classic:
+    if (major >= 10) 
+    {
+        darkShadow.red                 = 0x8E8E;
+        darkShadow.green       = 0x8E8E;
+        darkShadow.blue        = 0x8E8E;
+        lightShadow.red        = 0xBDBD;
+        lightShadow.green      = 0xBDBD;
+        lightShadow.blue       = 0xBDBD;
+       }
+    
     PenNormal() ;
 
     if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
     {
 #if wxMAC_USE_THEME_BORDER
-          Rect rect = { top , left , m_height + top , m_width + left } ;
-          SInt32 border = 0 ;
-          /*
-          GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
-          InsetRect( &rect , border , border );
-      DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
-      */
+        Rect rect = { top , left , m_height + top , m_width + left } ;
+        SInt32 border = 0 ;
+        /*
+        GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
+        InsetRect( &rect , border , border );
+        DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+        */
 
         DrawThemePrimaryGroup(&rect  ,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
 #else
@@ -1097,22 +1112,22 @@ void wxWindowMac::MacPaintBorders( int left , int top )
         LineTo( left + m_width - 3 , top + m_height - 3 );
         LineTo( left + m_width - 3 , top + 2 );
 
-        RGBForeColor( sunken ? &face : &black );
+        RGBForeColor( sunken ? &face : &darkShadow );
         MoveTo( left + 0 , top + m_height - 1 );
         LineTo( left + m_width - 1 , top + m_height - 1 );
         LineTo( left + m_width - 1 , top + 0 );
 
-        RGBForeColor( sunken ? &shadow : &white );
+        RGBForeColor( sunken ? &lightShadow : &white );
         MoveTo( left + 1 , top + m_height - 3 );
         LineTo( left + 1, top + 1 );
         LineTo( left + m_width - 3 , top + 1 );
 
-        RGBForeColor( sunken ? &white : &shadow );
+        RGBForeColor( sunken ? &white : &lightShadow );
         MoveTo( left + 1 , top + m_height - 2 );
         LineTo( left + m_width - 2 , top + m_height - 2 );
         LineTo( left + m_width - 2 , top + 1 );
 
-        RGBForeColor( sunken ? &black : &face );
+        RGBForeColor( sunken ? &darkShadow : &face );
         MoveTo( left + 2 , top + m_height - 4 );
         LineTo( left + 2 , top + 2 );
         LineTo( left + m_width - 4 , top + 2 );
@@ -1120,8 +1135,8 @@ void wxWindowMac::MacPaintBorders( int left , int top )
     }
     else if (HasFlag(wxSIMPLE_BORDER))
     {
-            Rect rect = { top , left , m_height + top , m_width + left } ;
-        RGBForeColor( &black ) ;
+        Rect rect = { top , left , m_height + top , m_width + left } ;
+        RGBForeColor( &darkShadow ) ;
         FrameRect( &rect ) ;
     }
 }
@@ -1453,6 +1468,10 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt)
 
 bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
 {
+    //In case a third-party component changed the port...
+    wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) MacGetRootWindow()) ) ;
+    wxMacWindowClipper clip (this);
+    
     if ((event.m_x < m_x) || (event.m_y < m_y) ||
         (event.m_x > (m_x + m_width)) || (event.m_y > (m_y + m_height)))
         return FALSE;
index 07ae99090a35486e6522d26ba1cc77a80abff22b..fbe365ab67c8e54ec066afbad4fc03fec47d1032 100644 (file)
@@ -139,23 +139,59 @@ wxRendererMac::DrawHeaderButton(wxWindow *win,
                   w = rect.width,
                   h = rect.height;
 
-    dc.SetBrush( *wxTRANSPARENT_BRUSH );
-
-    dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) );
-    dc.DrawLine( x+w-CORNER+1, y, x+w, y+h );       // right (outer)
-    dc.DrawRectangle( x, y+h, w+1, 1 );             // bottom (outer)
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
 
-    wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
-
-    dc.SetPen( pen );
-    dc.DrawLine( x+w-CORNER, y, x+w-1, y+h );       // right (inner)
-    dc.DrawRectangle( x+1, y+h-1, w-2, 1 );         // bottom (inner)
+    dc.SetBrush( *wxTRANSPARENT_BRUSH );
 
-    dc.SetPen( *wxWHITE_PEN );
-    dc.DrawRectangle( x, y, w-CORNER+1, 1 );        // top (outer)
-    dc.DrawRectangle( x, y, 1, h );                 // left (outer)
-    dc.DrawLine( x, y+h-1, x+1, y+h-1 );
-    dc.DrawLine( x+w-1, y, x+w-1, y+1 );
+    if (major >= 10) 
+    {
+        dc.SetPen( wxPen( wxColour( 0xC5 , 0xC5 , 0xC5 ) , 1 , wxSOLID ) );
+        dc.DrawRectangle( x, y+CORNER, 1, h-CORNER );                                  // left
+        // The right border is overdrawn by the left border of the right neighbouring
+        // header (to maintain a proper single pixel border). Except for the 
+        // rightmost header of the listctrl.
+        dc.DrawRectangle( x+w+(CORNER*2), y+CORNER, 1, h-CORNER );     // right
+        dc.SetPen( wxPen( wxColour( 0xB1 , 0xB1 , 0xB1 ) , 1 , wxSOLID ) );    
+        dc.DrawRectangle( x, y+h, w+(CORNER*3), 1 );                   // bottom
+        dc.DrawRectangle( x, y, w+(CORNER*3), 1 );                         // top
+        
+        // Do a fill of the interior for background:
+        dc.SetPen( wxPen( wxColour( 0xF6 , 0xF6 , 0xF6 ) , 1 , wxSOLID ) ); 
+        dc.DrawRectangle( x+CORNER, y+CORNER, w+CORNER, h-CORNER );
+    
+        // Do the gradient fill:
+        static int grayValues[] = 
+        {
+            0xF6, 0xF2, 0xEF, 0xED, 0xED, 0xEB, 0xEA, 0xEA, 0xE8, 
+            0xE8, 0xE2, 0xE5, 0xE8, 0xEB, 0xEF, 0xF2, 0xFD
+        };
+        int i;
+        for (i=0; i < h && i < (int)WXSIZEOF(grayValues); i++) 
+        {
+            dc.SetPen( wxPen( wxColour( grayValues[i] , grayValues[i] , grayValues[i] ),
+                            1 , wxSOLID ) );
+            dc.DrawRectangle( x+CORNER, y+CORNER+i, w+CORNER, 1 );
+        }
+    }
+    else
+    {
+        dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) );
+        dc.DrawLine( x+w-CORNER+1, y, x+w, y+h );       // right (outer)
+        dc.DrawRectangle( x, y+h, w+1, 1 );             // bottom (outer)
+    
+        wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
+    
+        dc.SetPen( pen );
+        dc.DrawLine( x+w-CORNER, y, x+w-1, y+h );       // right (inner)
+        dc.DrawRectangle( x+1, y+h-1, w-2, 1 );         // bottom (inner)
+    
+        dc.SetPen( *wxWHITE_PEN );
+        dc.DrawRectangle( x, y, w-CORNER+1, 1 );        // top (outer)
+        dc.DrawRectangle( x, y, 1, h );                 // left (outer)
+        dc.DrawLine( x, y+h-1, x+1, y+h-1 );
+        dc.DrawLine( x+w-1, y, x+w-1, y+1 );
+       }
 }
 
 void
index eebf21927bddc8e6fd8852ac712c561509e5dd99..4ddb2a458229ec7639d4af983d15aaf91e924bb3 100644 (file)
@@ -57,7 +57,10 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
             break ;
         }
         case wxSYS_COLOUR_BTNSHADOW:
-            return wxColor( 0x44 , 0x44 , 0x44 ) ;
+            if (major >= 10)
+                return wxColor( 0xBE , 0xBE , 0xBE ) ;
+            else
+                return wxColor( 0x44 , 0x44 , 0x44 ) ;
             break ;
 
         case wxSYS_COLOUR_BTNTEXT:
index dcd60b8588a82cf9e244c571b35354fed196dec7..b2dba2135d7b7919da99a4da176a3b9415de534c 100644 (file)
@@ -102,35 +102,50 @@ void wxStatusBarMac::SetStatusText(const wxString& text, int number)
 
 void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) )
 {
-    wxPaintDC dc(this);
-    dc.Clear() ;
-    
-    if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) )
-    {
-        wxPen black( wxBLACK , 1 , wxSOLID ) ;
-        wxPen white( wxWHITE , 1 , wxSOLID ) ;
-        
-        dc.SetPen(black);
-        dc.DrawLine(0, 0 ,
-            m_width , 0);
-        dc.SetPen(white);
-        dc.DrawLine(0, 1 ,
-            m_width , 1);
-    }
-    else
-    {
-        dc.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID));
-        dc.DrawLine(0, 0 ,
-            m_width , 0);
-    }
-    
-    int i;
-    if ( GetFont().Ok() )
-        dc.SetFont(GetFont());
-    dc.SetBackgroundMode(wxTRANSPARENT);
-    
-    for ( i = 0; i < m_nFields; i ++ )
-        DrawField(dc, i);
+       wxPaintDC dc(this);
+       dc.Clear() ;
+
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
+
+       if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) )
+       {
+               wxPen white( wxWHITE , 1 , wxSOLID ) ;
+        if (major >= 10) 
+        {
+            //Finder statusbar border color: (Project builder similar is 9B9B9B)
+            dc.SetPen(wxPen(wxColour(0xB1,0xB1,0xB1),1,wxSOLID));  
+        }
+        else
+        {
+            wxPen black( wxBLACK , 1 , wxSOLID ) ;
+            dc.SetPen(black);
+       }
+               dc.DrawLine(0, 0 ,
+                      m_width , 0);
+               dc.SetPen(white);
+               dc.DrawLine(0, 1 ,
+                      m_width , 1);
+       }
+       else
+       {
+        if (major >= 10) 
+            //Finder statusbar border color: (Project builder similar is 9B9B9B)
+            dc.SetPen(wxPen(wxColour(0xB1,0xB1,0xB1),1,wxSOLID)); 
+        else
+            dc.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID));
+
+               dc.DrawLine(0, 0 ,
+                      m_width , 0);
+       }
+
+       int i;
+       if ( GetFont().Ok() )
+               dc.SetFont(GetFont());
+       dc.SetBackgroundMode(wxTRANSPARENT);
+
+       for ( i = 0; i < m_nFields; i ++ )
+               DrawField(dc, i);
 }
 
 void wxStatusBarMac::MacSuperEnabled( bool enabled ) 
index e75ae84a2ffaf045dc76e042e18e7b4ce539b51b..8357a177d21b126138777edbbc4233daaccc64f4 100644 (file)
@@ -1067,23 +1067,38 @@ void wxWindowMac::MacPaintBorders( int left , int top )
 {
     if( IsTopLevel() )
         return ;
+        
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
 
     RGBColor white = { 0xFFFF, 0xFFFF , 0xFFFF } ;
-    RGBColor black = { 0x0000, 0x0000 , 0x0000 } ;
     RGBColor face = { 0xDDDD, 0xDDDD , 0xDDDD } ;
-    RGBColor shadow = { 0x4444, 0x4444 , 0x4444 } ;
+    
+    RGBColor darkShadow = { 0x0000, 0x0000 , 0x0000 } ;
+    RGBColor lightShadow = { 0x4444, 0x4444 , 0x4444 } ;
+    // OS X has lighter border edges than classic:
+    if (major >= 10) 
+    {
+        darkShadow.red                 = 0x8E8E;
+        darkShadow.green       = 0x8E8E;
+        darkShadow.blue        = 0x8E8E;
+        lightShadow.red        = 0xBDBD;
+        lightShadow.green      = 0xBDBD;
+        lightShadow.blue       = 0xBDBD;
+       }
+    
     PenNormal() ;
 
     if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
     {
 #if wxMAC_USE_THEME_BORDER
-          Rect rect = { top , left , m_height + top , m_width + left } ;
-          SInt32 border = 0 ;
-          /*
-          GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
-          InsetRect( &rect , border , border );
-      DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
-      */
+        Rect rect = { top , left , m_height + top , m_width + left } ;
+        SInt32 border = 0 ;
+        /*
+        GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
+        InsetRect( &rect , border , border );
+        DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+        */
 
         DrawThemePrimaryGroup(&rect  ,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
 #else
@@ -1097,22 +1112,22 @@ void wxWindowMac::MacPaintBorders( int left , int top )
         LineTo( left + m_width - 3 , top + m_height - 3 );
         LineTo( left + m_width - 3 , top + 2 );
 
-        RGBForeColor( sunken ? &face : &black );
+        RGBForeColor( sunken ? &face : &darkShadow );
         MoveTo( left + 0 , top + m_height - 1 );
         LineTo( left + m_width - 1 , top + m_height - 1 );
         LineTo( left + m_width - 1 , top + 0 );
 
-        RGBForeColor( sunken ? &shadow : &white );
+        RGBForeColor( sunken ? &lightShadow : &white );
         MoveTo( left + 1 , top + m_height - 3 );
         LineTo( left + 1, top + 1 );
         LineTo( left + m_width - 3 , top + 1 );
 
-        RGBForeColor( sunken ? &white : &shadow );
+        RGBForeColor( sunken ? &white : &lightShadow );
         MoveTo( left + 1 , top + m_height - 2 );
         LineTo( left + m_width - 2 , top + m_height - 2 );
         LineTo( left + m_width - 2 , top + 1 );
 
-        RGBForeColor( sunken ? &black : &face );
+        RGBForeColor( sunken ? &darkShadow : &face );
         MoveTo( left + 2 , top + m_height - 4 );
         LineTo( left + 2 , top + 2 );
         LineTo( left + m_width - 4 , top + 2 );
@@ -1120,8 +1135,8 @@ void wxWindowMac::MacPaintBorders( int left , int top )
     }
     else if (HasFlag(wxSIMPLE_BORDER))
     {
-            Rect rect = { top , left , m_height + top , m_width + left } ;
-        RGBForeColor( &black ) ;
+        Rect rect = { top , left , m_height + top , m_width + left } ;
+        RGBForeColor( &darkShadow ) ;
         FrameRect( &rect ) ;
     }
 }
@@ -1453,6 +1468,10 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt)
 
 bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
 {
+    //In case a third-party component changed the port...
+    wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) MacGetRootWindow()) ) ;
+    wxMacWindowClipper clip (this);
+    
     if ((event.m_x < m_x) || (event.m_y < m_y) ||
         (event.m_x > (m_x + m_width)) || (event.m_y > (m_y + m_height)))
         return FALSE;