use custom selection colours in wxHtmlListBox again (restores functionality broken by patch 1650804 in r44640)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52264 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-03-02 23:05:35 +00:00
parent 86faa458df
commit c848185a6e
4 changed files with 103 additions and 29 deletions

View File

@@ -165,12 +165,27 @@ public:
virtual wxColour GetSelectedTextColour(const wxColour& colFg)
{
return m_hlbox.GetSelectedTextColour(colFg);
// by default wxHtmlListBox doesn't implement GetSelectedTextColour()
// and returns wxNullColour from it, so use the default HTML colour for
// selection
wxColour col = m_hlbox.GetSelectedTextColour(colFg);
if ( !col.IsOk() )
{
col = wxDefaultHtmlRenderingStyle::GetSelectedTextColour(colFg);
}
return col;
}
virtual wxColour GetSelectedTextBgColour(const wxColour& colBg)
{
return m_hlbox.GetSelectedTextBgColour(colBg);
wxColour col = m_hlbox.GetSelectedTextBgColour(colBg);
if ( !col.IsOk() )
{
col = wxDefaultHtmlRenderingStyle::GetSelectedTextBgColour(colBg);
}
return col;
}
private:
@@ -254,16 +269,16 @@ wxHtmlListBox::~wxHtmlListBox()
// wxHtmlListBox appearance
// ----------------------------------------------------------------------------
wxColour wxHtmlListBox::GetSelectedTextColour(const wxColour& colFg) const
wxColour
wxHtmlListBox::GetSelectedTextColour(const wxColour& WXUNUSED(colFg)) const
{
return m_htmlRendStyle->
wxDefaultHtmlRenderingStyle::GetSelectedTextColour(colFg);
return wxNullColour;
}
wxColour
wxHtmlListBox::GetSelectedTextBgColour(const wxColour& WXUNUSED(colBg)) const
{
return GetSelectionBackground();
return wxNullColour;
}
// ----------------------------------------------------------------------------
@@ -356,6 +371,27 @@ void wxHtmlListBox::SetItemCount(size_t count)
// wxHtmlListBox implementation of wxVListBox pure virtuals
// ----------------------------------------------------------------------------
void
wxHtmlListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
{
if ( IsSelected(n) )
{
if ( DoDrawSolidBackground
(
GetSelectedTextBgColour(GetBackgroundColour()),
dc,
rect,
n
) )
{
return;
}
//else: no custom selection background colour, use base class version
}
wxVListBox::OnDrawBackground(dc, rect, n);
}
void wxHtmlListBox::OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const
{
CacheItem(n);
@@ -365,6 +401,22 @@ void wxHtmlListBox::OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const
wxHtmlRenderingInfo htmlRendInfo;
// draw the selected cell in selected state ourselves if we're using custom
// colours (to test for this, check the callbacks by passing them any dummy
// (but valid, to avoid asserts) colour):
if ( IsSelected(n) &&
(GetSelectedTextColour(*wxBLACK).IsOk() ||
GetSelectedTextBgColour(*wxWHITE).IsOk()) )
{
wxHtmlSelection htmlSel;
htmlSel.Set(wxPoint(0,0), cell, wxPoint(INT_MAX, INT_MAX), cell);
htmlRendInfo.SetSelection(&htmlSel);
htmlRendInfo.SetStyle(m_htmlRendStyle);
htmlRendInfo.GetState().SetSelectionState(wxHTML_SEL_IN);
}
//else: normal item or selected item with default colours, its background
// was already taken care of in the base class
// note that we can't stop drawing exactly at the window boundary as then
// even the visible cells part could be not drawn, so always draw the
// entire cell