X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9c7f49f569dcabe360a3a51a94eff77225b39d69..ac86379e2ac8695a08fc65cee6e2475f9a6615c2:/src/mac/renderer.cpp diff --git a/src/mac/renderer.cpp b/src/mac/renderer.cpp index aa92c55c2d..fbe365ab67 100644 --- a/src/mac/renderer.cpp +++ b/src/mac/renderer.cpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Name: mac/renderer.cpp -// Purpose: implementation of wxRendererBase for Mac +// Purpose: implementation of wxRendererNative for Mac // Author: Vadim Zeitlin // Modified by: // Created: 20.07.2003 @@ -26,15 +26,18 @@ #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" // ---------------------------------------------------------------------------- -// wxRendererMac: our wxRendererBase implementation +// wxRendererMac: our wxRendererNative implementation // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxRendererMac : public wxRendererBase +class WXDLLEXPORT wxRendererMac : public wxDelegateRendererNative { public: // draw the header control button (used by wxListCtrl) @@ -49,6 +52,14 @@ public: const wxRect& rect, int flags = 0); + // draw a (vertical) sash + virtual void DrawSplitterSash(wxWindow *win, + wxDC& dc, + const wxSize& size, + wxCoord position, + wxOrientation orient, + int flags = 0); + private: // the tree buttons wxBitmap m_bmpTreeExpanded, @@ -108,7 +119,7 @@ static const char *aqua_arrow_down_xpm[] = { // ============================================================================ /* static */ -wxRendererNative& wxRendererMac::Get() +wxRendererNative& wxRendererNative::GetDefault() { static wxRendererMac s_rendererMac; @@ -128,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) - - 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 @@ -185,3 +232,23 @@ wxRendererMac::DrawTreeItemButton(wxWindow *win, #endif // 0/1 } +void +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) + + 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); +} +