virtualized splitter drawing; removed/deprecated some styles and moved others from wx/defs.h; eliminated flicker
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22218 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -42,21 +42,46 @@
|
||||
class WXDLLEXPORT wxRendererGeneric : public wxRendererNative
|
||||
{
|
||||
public:
|
||||
// draw the header control button (used by wxListCtrl)
|
||||
wxRendererGeneric();
|
||||
|
||||
virtual void DrawHeaderButton(wxWindow *win,
|
||||
wxDC& dc,
|
||||
const wxRect& rect,
|
||||
int flags = 0);
|
||||
|
||||
// draw the expanded/collapsed icon for a tree control item
|
||||
virtual void DrawTreeItemButton(wxWindow *win,
|
||||
wxDC& dc,
|
||||
const wxRect& rect,
|
||||
int flags = 0);
|
||||
|
||||
virtual void DrawSplitterBorder(wxWindow *win,
|
||||
wxDC& dc,
|
||||
const wxRect& rect);
|
||||
|
||||
virtual void DrawSplitterSash(wxWindow *win,
|
||||
wxDC& dc,
|
||||
const wxSize& size,
|
||||
wxCoord position);
|
||||
|
||||
|
||||
virtual wxPoint GetSplitterSashAndBorder(const wxWindow *win);
|
||||
|
||||
|
||||
protected:
|
||||
// draw the rectange using the first pen for the left and top sides and
|
||||
// the second one for the bottom and right ones
|
||||
void DrawShadedRect(wxDC& dc, wxRect *rect,
|
||||
const wxPen& pen1, const wxPen& pen2);
|
||||
|
||||
// the standard pens
|
||||
wxPen m_penBlack,
|
||||
m_penDarkGrey,
|
||||
m_penLightGrey,
|
||||
m_penHighlight;
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// wxRendererGeneric implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -82,8 +107,42 @@ wxRendererNative& wxRendererNative::Get()
|
||||
|
||||
#endif // platforms using their own renderers
|
||||
|
||||
wxRendererGeneric::wxRendererGeneric()
|
||||
: m_penBlack(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW)),
|
||||
m_penDarkGrey(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW)),
|
||||
m_penLightGrey(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)),
|
||||
m_penHighlight(wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT))
|
||||
{
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxRendererGeneric drawing functions
|
||||
// wxRendererGeneric helpers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
wxRendererGeneric::DrawShadedRect(wxDC& dc,
|
||||
wxRect *rect,
|
||||
const wxPen& pen1,
|
||||
const wxPen& pen2)
|
||||
{
|
||||
// draw the rectangle
|
||||
dc.SetPen(pen1);
|
||||
dc.DrawLine(rect->GetLeft(), rect->GetTop(),
|
||||
rect->GetLeft(), rect->GetBottom());
|
||||
dc.DrawLine(rect->GetLeft() + 1, rect->GetTop(),
|
||||
rect->GetRight(), rect->GetTop());
|
||||
dc.SetPen(pen2);
|
||||
dc.DrawLine(rect->GetRight(), rect->GetTop(),
|
||||
rect->GetRight(), rect->GetBottom());
|
||||
dc.DrawLine(rect->GetLeft(), rect->GetBottom(),
|
||||
rect->GetRight() + 1, rect->GetBottom());
|
||||
|
||||
// adjust the rect
|
||||
rect->Inflate(-1);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// tree/list ctrl drawing
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
@@ -99,19 +158,17 @@ wxRendererGeneric::DrawHeaderButton(wxWindow *win,
|
||||
w = rect.width,
|
||||
h = rect.height;
|
||||
|
||||
dc.SetBrush( *wxTRANSPARENT_BRUSH );
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
|
||||
dc.SetPen( *wxBLACK_PEN );
|
||||
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)
|
||||
|
||||
wxPen pen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ), 1, wxSOLID );
|
||||
|
||||
dc.SetPen( pen );
|
||||
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.SetPen( *wxWHITE_PEN );
|
||||
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 );
|
||||
@@ -143,4 +200,66 @@ wxRendererGeneric::DrawTreeItemButton(wxWindow *win,
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// sash drawing
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxPoint
|
||||
wxRendererGeneric::GetSplitterSashAndBorder(const wxWindow * WXUNUSED(win))
|
||||
{
|
||||
// see below
|
||||
return wxPoint(7, 2);
|
||||
}
|
||||
|
||||
void
|
||||
wxRendererGeneric::DrawSplitterBorder(wxWindow * WXUNUSED(win),
|
||||
wxDC& dc,
|
||||
const wxRect& rectOrig)
|
||||
{
|
||||
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)
|
||||
{
|
||||
// we draw a Win32-like sash here:
|
||||
//
|
||||
// ---- this is position
|
||||
// /
|
||||
// v
|
||||
// dWGGGDd
|
||||
// GWGGGDB
|
||||
// GWGGGDB where G is light grey (face)
|
||||
// GWGGGDB W white (light)
|
||||
// GWGGGDB D dark grey (shadow)
|
||||
// GWGGGDB B black (dark shadow)
|
||||
// GWGGGDB
|
||||
// GWGGGDB and lower letters are our border (already drawn)
|
||||
// GWGGGDB
|
||||
// wWGGGDd
|
||||
|
||||
const wxCoord h = size.y;
|
||||
|
||||
// from left to right
|
||||
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(*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);
|
||||
|
||||
dc.SetPen(m_penBlack);
|
||||
dc.DrawLine(position + 6, 1, position + 6, h - 1);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user