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:
@@ -111,8 +111,11 @@ protected:
|
||||
virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const;
|
||||
virtual wxCoord OnMeasureItem(size_t n) const;
|
||||
|
||||
// This method may be overriden to handle clicking on a link in
|
||||
// the listbox. By default, clicking links is ignored.
|
||||
// override this one to draw custom background for selected items correctly
|
||||
virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const;
|
||||
|
||||
// this method may be overridden to handle clicking on a link in the
|
||||
// listbox (by default, clicks on links are simply ignored)
|
||||
virtual void OnLinkClicked(size_t n, const wxHtmlLinkInfo& link);
|
||||
|
||||
// event handlers
|
||||
|
@@ -269,6 +269,14 @@ protected:
|
||||
// common part of keyboard and mouse handling processing code
|
||||
void DoHandleItemClick(int item, int flags);
|
||||
|
||||
// paint the background of the given item using the provided colour if it's
|
||||
// valid, otherwise just return false and do nothing (this is used by
|
||||
// OnDrawBackground())
|
||||
bool DoDrawSolidBackground(const wxColour& col,
|
||||
wxDC& dc,
|
||||
const wxRect& rect,
|
||||
size_t n) const;
|
||||
|
||||
private:
|
||||
// the current item or wxNOT_FOUND
|
||||
//
|
||||
|
@@ -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
|
||||
|
@@ -355,10 +355,15 @@ void wxVListBox::OnDrawSeparator(wxDC& WXUNUSED(dc),
|
||||
{
|
||||
}
|
||||
|
||||
void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
||||
{
|
||||
if ( m_colBgSel.IsOk() )
|
||||
bool
|
||||
wxVListBox::DoDrawSolidBackground(const wxColour& col,
|
||||
wxDC& dc,
|
||||
const wxRect& rect,
|
||||
size_t n) const
|
||||
{
|
||||
if ( !col.IsOk() )
|
||||
return false;
|
||||
|
||||
// we need to render selected and current items differently
|
||||
const bool isSelected = IsSelected(n),
|
||||
isCurrent = IsCurrent(n);
|
||||
@@ -366,7 +371,7 @@ void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
||||
{
|
||||
if ( isSelected )
|
||||
{
|
||||
dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
|
||||
dc.SetBrush(wxBrush(col, wxSOLID));
|
||||
}
|
||||
else // !selected
|
||||
{
|
||||
@@ -376,8 +381,14 @@ void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
||||
dc.DrawRectangle(rect);
|
||||
}
|
||||
//else: do nothing for the normal items
|
||||
|
||||
return true;
|
||||
}
|
||||
else // use wxRendererNative for a more native look&feel:
|
||||
|
||||
void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
||||
{
|
||||
// use wxRendererNative for more native look unless we use custom bg colour
|
||||
if ( !DoDrawSolidBackground(m_colBgSel, dc, rect, n) )
|
||||
{
|
||||
int flags = 0;
|
||||
if ( IsSelected(n) )
|
||||
|
Reference in New Issue
Block a user