X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6d78998725b53eea209c0fa845b5a25fe5b512d2..396825dced4558d8d724d0e38f7e1017f76d0a96:/src/generic/renderg.cpp diff --git a/src/generic/renderg.cpp b/src/generic/renderg.cpp index 5ff309e88a..0a8193808b 100644 --- a/src/generic/renderg.cpp +++ b/src/generic/renderg.cpp @@ -37,6 +37,10 @@ #include "wx/splitter.h" #include "wx/dcmirror.h" +#ifdef __WXMAC__ + #include "wx/osx/private.h" +#endif + // ---------------------------------------------------------------------------- // wxRendererGeneric: our wxRendererNative implementation // ---------------------------------------------------------------------------- @@ -94,6 +98,8 @@ public: const wxRect& rect, int flags = 0); + virtual wxSize GetCheckBoxSize(wxWindow *win); + virtual void DrawPushButton(wxWindow *win, wxDC& dc, const wxRect& rect, @@ -214,8 +220,6 @@ wxRendererGeneric::DrawHeaderButton(wxWindow* win, wxHeaderSortIconType sortArrow, wxHeaderButtonParams* params) { - const int CORNER = 1; - const wxCoord x = rect.x, y = rect.y, w = rect.width, @@ -228,18 +232,16 @@ wxRendererGeneric::DrawHeaderButton(wxWindow* win, dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetPen(m_penBlack); - dc.DrawLine( x+w-CORNER+1, y, x+w, y+h ); // right (outer) - dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer) + dc.DrawLine( x+w-1, y, x+w-1, y+h ); // right (outer) + dc.DrawLine( x, y+h-1, x+w, y+h-1 ); // bottom (outer) dc.SetPen(m_penDarkGrey); - 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.DrawLine( x+w-2, y+1, x+w-2, y+h-1 ); // right (inner) + dc.DrawLine( x+1, y+h-2, x+w-1, y+h-2 ); // bottom (inner) dc.SetPen(m_penHighlight); - 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 ); + dc.DrawLine( x, y, x, y+h-1 ); // left (outer) + dc.DrawLine( x, y, x+w-1, y ); // top (outer) return DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); } @@ -333,7 +335,7 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, dc.SetFont(font); dc.SetTextForeground(clr); - dc.SetBackgroundMode(wxTRANSPARENT); + dc.SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT); int tw, th, td, x, y; dc.GetTextExtent( label, &tw, &th, &td); @@ -618,6 +620,11 @@ wxRendererGeneric::DrawCheckBox(wxWindow *WXUNUSED(win), } } +wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *WXUNUSED(win)) +{ + return wxSize(16, 16); +} + void wxRendererGeneric::DrawPushButton(wxWindow *win, wxDC& dc, @@ -635,10 +642,17 @@ wxRendererGeneric::DrawPushButton(wxWindow *win, } void +#ifdef __WXMAC__ +wxRendererGeneric::DrawItemSelectionRect(wxWindow * win, + wxDC& dc, + const wxRect& rect, + int flags) +#else wxRendererGeneric::DrawItemSelectionRect(wxWindow * WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) +#endif { wxBrush brush; if ( flags & wxCONTROL_SELECTED ) @@ -658,7 +672,14 @@ wxRendererGeneric::DrawItemSelectionRect(wxWindow * WXUNUSED(win), } dc.SetBrush(brush); - dc.SetPen(flags & wxCONTROL_CURRENT ? *wxBLACK_PEN : *wxTRANSPARENT_PEN); + if ((flags & wxCONTROL_CURRENT) && (flags & wxCONTROL_FOCUSED) +#if defined( __WXMAC__ ) && !defined(__WXUNIVERSAL__) && wxOSX_USE_CARBON + && IsControlActive( (ControlRef)win->GetHandle() ) +#endif + ) + dc.SetPen( *wxBLACK_PEN ); + else + dc.SetPen( *wxTRANSPARENT_PEN ); dc.DrawRectangle( rect ); } @@ -678,9 +699,13 @@ wxRendererGeneric::DrawFocusRect(wxWindow* WXUNUSED(win), wxDC& dc, const wxRect dc.SetPen(m_penBlack); +#ifdef __WXMAC__ + dc.SetLogicalFunction(wxCOPY); +#else // this seems to be closer than what Windows does than wxINVERT although // I'm still not sure if it's correct dc.SetLogicalFunction(wxAND_REVERSE); +#endif wxCoord z; for ( z = x1 + 1; z < x2; z += 2 )