X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/af99040c70b975e24ac0acee50f1fa13746d1239..4b5386874a1602f5c8b6edbfa74e4d6be619768f:/src/mac/carbon/renderer.cpp diff --git a/src/mac/carbon/renderer.cpp b/src/mac/carbon/renderer.cpp index 07ae99090a..8555ef47e3 100644 --- a/src/mac/carbon/renderer.cpp +++ b/src/mac/carbon/renderer.cpp @@ -134,28 +134,64 @@ wxRendererMac::DrawHeaderButton(wxWindow *win, { const int CORNER = 1; - const wxCoord x = rect.x, - y = rect.y, + const wxCoord x = rect.x-1, + y = rect.y-1, 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) - - wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID ); + int major,minor; + wxGetOsVersion( &major, &minor ); - 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 @@ -208,11 +244,40 @@ wxRendererMac::DrawSplitterSash(wxWindow *win, // a brushed metal one as they look quite differently... this is // completely bogus anyhow, of course (TODO) +#if 0 dc.SetPen(*wxLIGHT_GREY_PEN); dc.SetBrush(*wxWHITE_BRUSH); if ( orient == wxVERTICAL ) dc.DrawRectangle(position, 0, 7, size.y); else dc.DrawRectangle(0, position, size.x, 7); +#else + // Do the gradient fill: + static int grayValues[] = + { + 0xA0, 0xF6, 0xED, 0xE4, 0xE2, 0xD0, 0xA0 + }; + dc.SetBrush( *wxTRANSPARENT_BRUSH ); + if ( orient == wxVERTICAL ) + { + int i; + for (i=0; i < (int)WXSIZEOF(grayValues); i++) + { + dc.SetPen( wxPen( wxColour( grayValues[i] , grayValues[i] , grayValues[i] ), + 1 , wxSOLID ) ); + dc.DrawRectangle( position+i, 0, 1, size.y ); + } + } + else + { + int i; + for (i=0; i < (int)WXSIZEOF(grayValues); i++) + { + dc.SetPen( wxPen( wxColour( grayValues[i] , grayValues[i] , grayValues[i] ), + 1 , wxSOLID ) ); + dc.DrawRectangle( 0, position+i, size.x, 1 ); + } + } +#endif }