+ // we need to render selected and current items differently
+ const bool isSelected = IsSelected(n),
+ isCurrent = IsCurrent(n);
+ if ( isSelected || isCurrent )
+ {
+ if ( isSelected )
+ {
+ dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
+ }
+ else // !selected
+ {
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ }
+
+ dc.SetPen(*(isCurrent ? wxBLACK_PEN : wxTRANSPARENT_PEN));
+
+ dc.DrawRectangle(rect);
+ }
+ //else: do nothing for the normal items
+}
+
+void wxVListBox::OnPaint(wxPaintEvent& WXUNUSED(event))
+{
+ // If size is larger, recalculate double buffer bitmap
+ wxSize clientSize = GetClientSize();
+
+ if ( !m_doubleBuffer ||
+ clientSize.x > m_doubleBuffer->GetWidth() ||
+ clientSize.y > m_doubleBuffer->GetHeight() )
+ {
+ delete m_doubleBuffer;
+ m_doubleBuffer = new wxBitmap(clientSize.x+25,clientSize.y+25);
+ }
+
+ wxBufferedPaintDC dc(this,*m_doubleBuffer);