X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/85d3d198c2fa866d39763ace3eebf14c0d164ba7..32fc355f09c485ea0294c8a7aebf930598d67d31:/src/generic/htmllbox.cpp diff --git a/src/generic/htmllbox.cpp b/src/generic/htmllbox.cpp index 6173b2ef2d..fd023f93b8 100644 --- a/src/generic/htmllbox.cpp +++ b/src/generic/htmllbox.cpp @@ -46,8 +46,8 @@ FORCE_WXHTML_MODULES() // small border always added to the cells: static const wxCoord CELL_BORDER = 2; -const wxChar wxHtmlListBoxNameStr[] = wxT("htmlListBox"); -const wxChar wxSimpleHtmlListBoxNameStr[] = wxT("simpleHtmlListBox"); +const char wxHtmlListBoxNameStr[] = "htmlListBox"; +const char wxSimpleHtmlListBoxNameStr[] = "simpleHtmlListBox"; // ============================================================================ // private classes @@ -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,10 +269,10 @@ 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 @@ -323,18 +338,18 @@ void wxHtmlListBox::OnSize(wxSizeEvent& event) event.Skip(); } -void wxHtmlListBox::RefreshLine(size_t line) +void wxHtmlListBox::RefreshRow(size_t line) { m_cache->InvalidateRange(line, line); - wxVListBox::RefreshLine(line); + wxVListBox::RefreshRow(line); } -void wxHtmlListBox::RefreshLines(size_t from, size_t to) +void wxHtmlListBox::RefreshRows(size_t from, size_t to) { m_cache->InvalidateRange(from, to); - wxVListBox::RefreshLines(from, to); + wxVListBox::RefreshRows(from, to); } void wxHtmlListBox::RefreshAll() @@ -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,16 +401,21 @@ void wxHtmlListBox::OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const wxHtmlRenderingInfo htmlRendInfo; - // draw the selected cell in selected state - if ( IsSelected(n) ) + // 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); - if ( m_htmlRendStyle ) - htmlRendInfo.SetStyle(m_htmlRendStyle); + 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 @@ -469,13 +510,13 @@ wxPoint wxHtmlListBox::GetRootCellCoords(size_t n) const { wxPoint pos(CELL_BORDER, CELL_BORDER); pos += GetMargins(); - pos.y += GetLinesHeight(GetFirstVisibleLine(), n); + pos.y += GetRowsHeight(GetVisibleBegin(), n); return pos; } bool wxHtmlListBox::PhysicalCoordsToCell(wxPoint& pos, wxHtmlCell*& cell) const { - int n = HitTest(pos); + int n = VirtualHitTest(pos.y); if ( n == wxNOT_FOUND ) return false; @@ -570,79 +611,82 @@ bool wxSimpleHtmlListBox::Create(wxWindow *parent, wxWindowID id, if (!wxHtmlListBox::Create(parent, id, pos, size, style, name)) return false; +#if wxUSE_VALIDATORS SetValidator(validator); - for (int i=0; i