rendering adjustments for OSX

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2004-01-25 15:15:12 +00:00
parent 5d8fbe213c
commit 11d1adbfda
8 changed files with 266 additions and 120 deletions

View File

@@ -139,8 +139,43 @@ wxRendererMac::DrawHeaderButton(wxWindow *win,
w = rect.width, w = rect.width,
h = rect.height; h = rect.height;
int major,minor;
wxGetOsVersion( &major, &minor );
dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.SetBrush( *wxTRANSPARENT_BRUSH );
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.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) );
dc.DrawLine( x+w-CORNER+1, y, x+w, y+h ); // right (outer) dc.DrawLine( x+w-CORNER+1, y, x+w, y+h ); // right (outer)
dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer) dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer)
@@ -156,6 +191,7 @@ wxRendererMac::DrawHeaderButton(wxWindow *win,
dc.DrawRectangle( x, y, 1, h ); // left (outer) dc.DrawRectangle( x, y, 1, h ); // left (outer)
dc.DrawLine( x, y+h-1, x+1, y+h-1 ); dc.DrawLine( x, y+h-1, x+1, y+h-1 );
dc.DrawLine( x+w-1, y, x+w-1, y+1 ); dc.DrawLine( x+w-1, y, x+w-1, y+1 );
}
} }
void void

View File

@@ -57,6 +57,9 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
break ; break ;
} }
case wxSYS_COLOUR_BTNSHADOW: case wxSYS_COLOUR_BTNSHADOW:
if (major >= 10)
return wxColor( 0xBE , 0xBE , 0xBE ) ;
else
return wxColor( 0x44 , 0x44 , 0x44 ) ; return wxColor( 0x44 , 0x44 , 0x44 ) ;
break ; break ;

View File

@@ -105,12 +105,22 @@ void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) )
wxPaintDC dc(this); wxPaintDC dc(this);
dc.Clear() ; dc.Clear() ;
int major,minor;
wxGetOsVersion( &major, &minor );
if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) ) if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) )
{ {
wxPen black( wxBLACK , 1 , wxSOLID ) ;
wxPen white( wxWHITE , 1 , wxSOLID ) ; 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.SetPen(black);
}
dc.DrawLine(0, 0 , dc.DrawLine(0, 0 ,
m_width , 0); m_width , 0);
dc.SetPen(white); dc.SetPen(white);
@@ -119,7 +129,12 @@ void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) )
} }
else 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.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID));
dc.DrawLine(0, 0 , dc.DrawLine(0, 0 ,
m_width , 0); m_width , 0);
} }

View File

@@ -1068,10 +1068,25 @@ void wxWindowMac::MacPaintBorders( int left , int top )
if( IsTopLevel() ) if( IsTopLevel() )
return ; return ;
int major,minor;
wxGetOsVersion( &major, &minor );
RGBColor white = { 0xFFFF, 0xFFFF , 0xFFFF } ; RGBColor white = { 0xFFFF, 0xFFFF , 0xFFFF } ;
RGBColor black = { 0x0000, 0x0000 , 0x0000 } ;
RGBColor face = { 0xDDDD, 0xDDDD , 0xDDDD } ; 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() ; PenNormal() ;
if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
@@ -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 + m_height - 3 );
LineTo( left + m_width - 3 , top + 2 ); LineTo( left + m_width - 3 , top + 2 );
RGBForeColor( sunken ? &face : &black ); RGBForeColor( sunken ? &face : &darkShadow );
MoveTo( left + 0 , top + m_height - 1 ); MoveTo( left + 0 , top + m_height - 1 );
LineTo( left + m_width - 1 , top + m_height - 1 ); LineTo( left + m_width - 1 , top + m_height - 1 );
LineTo( left + m_width - 1 , top + 0 ); LineTo( left + m_width - 1 , top + 0 );
RGBForeColor( sunken ? &shadow : &white ); RGBForeColor( sunken ? &lightShadow : &white );
MoveTo( left + 1 , top + m_height - 3 ); MoveTo( left + 1 , top + m_height - 3 );
LineTo( left + 1, top + 1 ); LineTo( left + 1, top + 1 );
LineTo( left + m_width - 3 , top + 1 ); LineTo( left + m_width - 3 , top + 1 );
RGBForeColor( sunken ? &white : &shadow ); RGBForeColor( sunken ? &white : &lightShadow );
MoveTo( left + 1 , top + m_height - 2 ); MoveTo( left + 1 , top + m_height - 2 );
LineTo( left + m_width - 2 , top + m_height - 2 ); LineTo( left + m_width - 2 , top + m_height - 2 );
LineTo( left + m_width - 2 , top + 1 ); LineTo( left + m_width - 2 , top + 1 );
RGBForeColor( sunken ? &black : &face ); RGBForeColor( sunken ? &darkShadow : &face );
MoveTo( left + 2 , top + m_height - 4 ); MoveTo( left + 2 , top + m_height - 4 );
LineTo( left + 2 , top + 2 ); LineTo( left + 2 , top + 2 );
LineTo( left + m_width - 4 , top + 2 ); LineTo( left + m_width - 4 , top + 2 );
@@ -1121,7 +1136,7 @@ void wxWindowMac::MacPaintBorders( int left , int top )
else if (HasFlag(wxSIMPLE_BORDER)) else if (HasFlag(wxSIMPLE_BORDER))
{ {
Rect rect = { top , left , m_height + top , m_width + left } ; Rect rect = { top , left , m_height + top , m_width + left } ;
RGBForeColor( &black ) ; RGBForeColor( &darkShadow ) ;
FrameRect( &rect ) ; FrameRect( &rect ) ;
} }
} }
@@ -1453,6 +1468,10 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt)
bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event) 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) || 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))) (event.m_x > (m_x + m_width)) || (event.m_y > (m_y + m_height)))
return FALSE; return FALSE;

View File

@@ -139,8 +139,43 @@ wxRendererMac::DrawHeaderButton(wxWindow *win,
w = rect.width, w = rect.width,
h = rect.height; h = rect.height;
int major,minor;
wxGetOsVersion( &major, &minor );
dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.SetBrush( *wxTRANSPARENT_BRUSH );
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.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) );
dc.DrawLine( x+w-CORNER+1, y, x+w, y+h ); // right (outer) dc.DrawLine( x+w-CORNER+1, y, x+w, y+h ); // right (outer)
dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer) dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer)
@@ -156,6 +191,7 @@ wxRendererMac::DrawHeaderButton(wxWindow *win,
dc.DrawRectangle( x, y, 1, h ); // left (outer) dc.DrawRectangle( x, y, 1, h ); // left (outer)
dc.DrawLine( x, y+h-1, x+1, y+h-1 ); dc.DrawLine( x, y+h-1, x+1, y+h-1 );
dc.DrawLine( x+w-1, y, x+w-1, y+1 ); dc.DrawLine( x+w-1, y, x+w-1, y+1 );
}
} }
void void

View File

@@ -57,6 +57,9 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
break ; break ;
} }
case wxSYS_COLOUR_BTNSHADOW: case wxSYS_COLOUR_BTNSHADOW:
if (major >= 10)
return wxColor( 0xBE , 0xBE , 0xBE ) ;
else
return wxColor( 0x44 , 0x44 , 0x44 ) ; return wxColor( 0x44 , 0x44 , 0x44 ) ;
break ; break ;

View File

@@ -105,12 +105,22 @@ void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) )
wxPaintDC dc(this); wxPaintDC dc(this);
dc.Clear() ; dc.Clear() ;
int major,minor;
wxGetOsVersion( &major, &minor );
if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) ) if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) )
{ {
wxPen black( wxBLACK , 1 , wxSOLID ) ;
wxPen white( wxWHITE , 1 , wxSOLID ) ; 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.SetPen(black);
}
dc.DrawLine(0, 0 , dc.DrawLine(0, 0 ,
m_width , 0); m_width , 0);
dc.SetPen(white); dc.SetPen(white);
@@ -119,7 +129,12 @@ void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) )
} }
else 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.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID));
dc.DrawLine(0, 0 , dc.DrawLine(0, 0 ,
m_width , 0); m_width , 0);
} }

View File

@@ -1068,10 +1068,25 @@ void wxWindowMac::MacPaintBorders( int left , int top )
if( IsTopLevel() ) if( IsTopLevel() )
return ; return ;
int major,minor;
wxGetOsVersion( &major, &minor );
RGBColor white = { 0xFFFF, 0xFFFF , 0xFFFF } ; RGBColor white = { 0xFFFF, 0xFFFF , 0xFFFF } ;
RGBColor black = { 0x0000, 0x0000 , 0x0000 } ;
RGBColor face = { 0xDDDD, 0xDDDD , 0xDDDD } ; 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() ; PenNormal() ;
if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
@@ -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 + m_height - 3 );
LineTo( left + m_width - 3 , top + 2 ); LineTo( left + m_width - 3 , top + 2 );
RGBForeColor( sunken ? &face : &black ); RGBForeColor( sunken ? &face : &darkShadow );
MoveTo( left + 0 , top + m_height - 1 ); MoveTo( left + 0 , top + m_height - 1 );
LineTo( left + m_width - 1 , top + m_height - 1 ); LineTo( left + m_width - 1 , top + m_height - 1 );
LineTo( left + m_width - 1 , top + 0 ); LineTo( left + m_width - 1 , top + 0 );
RGBForeColor( sunken ? &shadow : &white ); RGBForeColor( sunken ? &lightShadow : &white );
MoveTo( left + 1 , top + m_height - 3 ); MoveTo( left + 1 , top + m_height - 3 );
LineTo( left + 1, top + 1 ); LineTo( left + 1, top + 1 );
LineTo( left + m_width - 3 , top + 1 ); LineTo( left + m_width - 3 , top + 1 );
RGBForeColor( sunken ? &white : &shadow ); RGBForeColor( sunken ? &white : &lightShadow );
MoveTo( left + 1 , top + m_height - 2 ); MoveTo( left + 1 , top + m_height - 2 );
LineTo( left + m_width - 2 , top + m_height - 2 ); LineTo( left + m_width - 2 , top + m_height - 2 );
LineTo( left + m_width - 2 , top + 1 ); LineTo( left + m_width - 2 , top + 1 );
RGBForeColor( sunken ? &black : &face ); RGBForeColor( sunken ? &darkShadow : &face );
MoveTo( left + 2 , top + m_height - 4 ); MoveTo( left + 2 , top + m_height - 4 );
LineTo( left + 2 , top + 2 ); LineTo( left + 2 , top + 2 );
LineTo( left + m_width - 4 , top + 2 ); LineTo( left + m_width - 4 , top + 2 );
@@ -1121,7 +1136,7 @@ void wxWindowMac::MacPaintBorders( int left , int top )
else if (HasFlag(wxSIMPLE_BORDER)) else if (HasFlag(wxSIMPLE_BORDER))
{ {
Rect rect = { top , left , m_height + top , m_width + left } ; Rect rect = { top , left , m_height + top , m_width + left } ;
RGBForeColor( &black ) ; RGBForeColor( &darkShadow ) ;
FrameRect( &rect ) ; FrameRect( &rect ) ;
} }
} }
@@ -1453,6 +1468,10 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt)
bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event) 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) || 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))) (event.m_x > (m_x + m_width)) || (event.m_y > (m_y + m_height)))
return FALSE; return FALSE;