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 void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const;
|
||||||
virtual wxCoord OnMeasureItem(size_t n) const;
|
virtual wxCoord OnMeasureItem(size_t n) const;
|
||||||
|
|
||||||
// This method may be overriden to handle clicking on a link in
|
// override this one to draw custom background for selected items correctly
|
||||||
// the listbox. By default, clicking links is ignored.
|
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);
|
virtual void OnLinkClicked(size_t n, const wxHtmlLinkInfo& link);
|
||||||
|
|
||||||
// event handlers
|
// event handlers
|
||||||
|
@@ -269,6 +269,14 @@ protected:
|
|||||||
// common part of keyboard and mouse handling processing code
|
// common part of keyboard and mouse handling processing code
|
||||||
void DoHandleItemClick(int item, int flags);
|
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:
|
private:
|
||||||
// the current item or wxNOT_FOUND
|
// the current item or wxNOT_FOUND
|
||||||
//
|
//
|
||||||
|
@@ -165,12 +165,27 @@ public:
|
|||||||
|
|
||||||
virtual wxColour GetSelectedTextColour(const wxColour& colFg)
|
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)
|
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:
|
private:
|
||||||
@@ -254,16 +269,16 @@ wxHtmlListBox::~wxHtmlListBox()
|
|||||||
// wxHtmlListBox appearance
|
// wxHtmlListBox appearance
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxColour wxHtmlListBox::GetSelectedTextColour(const wxColour& colFg) const
|
wxColour
|
||||||
|
wxHtmlListBox::GetSelectedTextColour(const wxColour& WXUNUSED(colFg)) const
|
||||||
{
|
{
|
||||||
return m_htmlRendStyle->
|
return wxNullColour;
|
||||||
wxDefaultHtmlRenderingStyle::GetSelectedTextColour(colFg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxColour
|
wxColour
|
||||||
wxHtmlListBox::GetSelectedTextBgColour(const wxColour& WXUNUSED(colBg)) const
|
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
|
// 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
|
void wxHtmlListBox::OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const
|
||||||
{
|
{
|
||||||
CacheItem(n);
|
CacheItem(n);
|
||||||
@@ -365,6 +401,22 @@ void wxHtmlListBox::OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const
|
|||||||
|
|
||||||
wxHtmlRenderingInfo htmlRendInfo;
|
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
|
// 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
|
// even the visible cells part could be not drawn, so always draw the
|
||||||
// entire cell
|
// entire cell
|
||||||
|
@@ -355,10 +355,15 @@ void wxVListBox::OnDrawSeparator(wxDC& WXUNUSED(dc),
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
bool
|
||||||
{
|
wxVListBox::DoDrawSolidBackground(const wxColour& col,
|
||||||
if ( m_colBgSel.IsOk() )
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
size_t n) const
|
||||||
{
|
{
|
||||||
|
if ( !col.IsOk() )
|
||||||
|
return false;
|
||||||
|
|
||||||
// we need to render selected and current items differently
|
// we need to render selected and current items differently
|
||||||
const bool isSelected = IsSelected(n),
|
const bool isSelected = IsSelected(n),
|
||||||
isCurrent = IsCurrent(n);
|
isCurrent = IsCurrent(n);
|
||||||
@@ -366,7 +371,7 @@ void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
|||||||
{
|
{
|
||||||
if ( isSelected )
|
if ( isSelected )
|
||||||
{
|
{
|
||||||
dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
|
dc.SetBrush(wxBrush(col, wxSOLID));
|
||||||
}
|
}
|
||||||
else // !selected
|
else // !selected
|
||||||
{
|
{
|
||||||
@@ -376,8 +381,14 @@ void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
|
|||||||
dc.DrawRectangle(rect);
|
dc.DrawRectangle(rect);
|
||||||
}
|
}
|
||||||
//else: do nothing for the normal items
|
//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;
|
int flags = 0;
|
||||||
if ( IsSelected(n) )
|
if ( IsSelected(n) )
|
||||||
|
Reference in New Issue
Block a user