X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b3208e1158e3bbc38b73eeda606d92be9e649c1c..e3f9e20cb15c62bd347a8e52d2d36529adbdb3d6:/src/mac/renderer.cpp diff --git a/src/mac/renderer.cpp b/src/mac/renderer.cpp index 5a14e7f08e..fbe365ab67 100644 --- a/src/mac/renderer.cpp +++ b/src/mac/renderer.cpp @@ -26,6 +26,9 @@ #ifndef WX_PRECOMP #include "wx/string.h" + #include "wx/dc.h" + #include "wx/bitmap.h" + #include "wx/settings.h" #endif //WX_PRECOMP #include "wx/renderer.h" @@ -34,7 +37,7 @@ // wxRendererMac: our wxRendererNative implementation // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxRendererMac : public wxRendererNative +class WXDLLEXPORT wxRendererMac : public wxDelegateRendererNative { public: // draw the header control button (used by wxListCtrl) @@ -53,7 +56,9 @@ public: virtual void DrawSplitterSash(wxWindow *win, wxDC& dc, const wxSize& size, - wxCoord position); + wxCoord position, + wxOrientation orient, + int flags = 0); private: // the tree buttons @@ -114,7 +119,7 @@ static const char *aqua_arrow_down_xpm[] = { // ============================================================================ /* static */ -wxRendererNative& wxRendererMac::Get() +wxRendererNative& wxRendererNative::GetDefault() { static wxRendererMac s_rendererMac; @@ -134,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 @@ -192,19 +233,22 @@ wxRendererMac::DrawTreeItemButton(wxWindow *win, } void -wxRendererMac::DrawSash(wxWindow *win, - wxDC& dc, - const wxSize& size, - wxCoord position) +wxRendererMac::DrawSplitterSash(wxWindow *win, + wxDC& dc, + const wxSize& size, + wxCoord position, + wxOrientation orient, + int WXUNUSED(flags)) { // VZ: we have to somehow determine if we're drawing a normal sash or // a brushed metal one as they look quite differently... this is // completely bogus anyhow, of course (TODO) - const wxCoord h = size.y; - dc.SetPen(*wxLIGHT_GREY_PEN); dc.SetBrush(*wxWHITE_BRUSH); - dc.DrawRectangle(position, 0, 7, h); + if ( orient == wxVERTICAL ) + dc.DrawRectangle(position, 0, 7, size.y); + else + dc.DrawRectangle(0, position, size.x, 7); }