X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b3208e1158e3bbc38b73eeda606d92be9e649c1c..30fd71e65bbbada8d17a0efbafbbbb3bafb42f9f:/src/generic/renderg.cpp diff --git a/src/generic/renderg.cpp b/src/generic/renderg.cpp index 19a4777f64..15af1286b6 100644 --- a/src/generic/renderg.cpp +++ b/src/generic/renderg.cpp @@ -32,6 +32,9 @@ #include "wx/dc.h" #include "wx/settings.h" +#include "wx/splitter.h" + +#include "wx/dcmirror.h" #include "wx/renderer.h" @@ -61,7 +64,8 @@ public: virtual void DrawSplitterSash(wxWindow *win, wxDC& dc, const wxSize& size, - wxCoord position); + wxCoord position, + wxOrientation orient); virtual wxPoint GetSplitterSashAndBorder(const wxWindow *win); @@ -96,17 +100,6 @@ wxRendererNative& wxRendererNative::GetGeneric() return s_rendererGeneric; } -// some platforms have their own renderers -#if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXGTK__) - -/* static */ -wxRendererNative& wxRendererNative::Get() -{ - return GetGeneric(); -} - -#endif // platforms using their own renderers - wxRendererGeneric::wxRendererGeneric() : m_penBlack(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW)), m_penDarkGrey(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW)), @@ -146,10 +139,10 @@ wxRendererGeneric::DrawShadedRect(wxDC& dc, // ---------------------------------------------------------------------------- void -wxRendererGeneric::DrawHeaderButton(wxWindow *win, +wxRendererGeneric::DrawHeaderButton(wxWindow * WXUNUSED(win), wxDC& dc, const wxRect& rect, - int flags) + int WXUNUSED(flags)) { const int CORNER = 1; @@ -177,7 +170,7 @@ wxRendererGeneric::DrawHeaderButton(wxWindow *win, // draw the plus or minus sign void -wxRendererGeneric::DrawTreeItemButton(wxWindow *win, +wxRendererGeneric::DrawTreeItemButton(wxWindow * WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) @@ -205,29 +198,39 @@ wxRendererGeneric::DrawTreeItemButton(wxWindow *win, // ---------------------------------------------------------------------------- wxPoint -wxRendererGeneric::GetSplitterSashAndBorder(const wxWindow * WXUNUSED(win)) +wxRendererGeneric::GetSplitterSashAndBorder(const wxWindow *win) { // see below - return wxPoint(7, 2); + return win->HasFlag(wxSP_3D) ? wxPoint(7, 2) : wxPoint(3, 0); } void -wxRendererGeneric::DrawSplitterBorder(wxWindow * WXUNUSED(win), +wxRendererGeneric::DrawSplitterBorder(wxWindow *win, wxDC& dc, const wxRect& rectOrig) { - wxRect rect = rectOrig; - DrawShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); - DrawShadedRect(dc, &rect, m_penBlack, m_penLightGrey); + if ( win->HasFlag(wxSP_3D) ) + { + wxRect rect = rectOrig; + DrawShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); + DrawShadedRect(dc, &rect, m_penBlack, m_penLightGrey); + } } void -wxRendererGeneric::DrawSplitterSash(wxWindow * WXUNUSED(win), - wxDC& dc, - const wxSize& size, - wxCoord position) +wxRendererGeneric::DrawSplitterSash(wxWindow *win, + wxDC& dcReal, + const wxSize& sizeReal, + wxCoord position, + wxOrientation orient) { - // we draw a Win32-like sash here: + // to avoid duplicating the same code for horizontal and vertical sashes, + // simply mirror the DC instead if needed (i.e. if horz splitter) + wxMirrorDC dc(dcReal, orient != wxVERTICAL); + wxSize size = dc.Reflect(sizeReal); + + + // we draw a Win32-like grey sash with possible 3D border here: // // ---- this is position // / @@ -242,24 +245,32 @@ wxRendererGeneric::DrawSplitterSash(wxWindow * WXUNUSED(win), // GWGGGDB and lower letters are our border (already drawn) // GWGGGDB // wWGGGDd + // + // only the middle 3 columns are drawn unless wxSP_3D is specified const wxCoord h = size.y; // from left to right - dc.SetPen(m_penLightGrey); - dc.DrawLine(position, 1, position, h - 1); + if ( win->HasFlag(wxSP_3D) ) + { + dc.SetPen(m_penLightGrey); + dc.DrawLine(position, 1, position, h - 1); - dc.SetPen(m_penHighlight); - dc.DrawLine(position + 1, 0, position + 1, h); + dc.SetPen(m_penHighlight); + dc.DrawLine(position + 1, 0, position + 1, h); + } dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE))); dc.DrawRectangle(position + 2, 0, 3, h); - dc.SetPen(m_penDarkGrey); - dc.DrawLine(position + 5, 0, position + 5, h); + if ( win->HasFlag(wxSP_3D) ) + { + dc.SetPen(m_penDarkGrey); + dc.DrawLine(position + 5, 0, position + 5, h); - dc.SetPen(m_penBlack); - dc.DrawLine(position + 6, 1, position + 6, h - 1); + dc.SetPen(m_penBlack); + dc.DrawLine(position + 6, 1, position + 6, h - 1); + } }