Make wxOwnerDrawnComboBox::DoGetBestSize() twice as fast.

Don't call the very expensive wxComboCtrlBase::DoGetBestSize() method
when not needed - it calls wxComboCtrlBase::DoGetSizeFromTextSize(),
which is very expensive.

Also fix the code so that it doesn't apply GetSizeFromTextSize() twice
(once in the base class' DoGetBestSize(), once here).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2013-08-07 17:33:42 +00:00
parent f592a93992
commit 07fb285c52

View File

@@ -1174,18 +1174,14 @@ wxCoord wxOwnerDrawnComboBox::OnMeasureItemWidth( size_t WXUNUSED(item) ) const
wxSize wxOwnerDrawnComboBox::DoGetBestSize() const wxSize wxOwnerDrawnComboBox::DoGetBestSize() const
{ {
wxSize best( wxComboCtrlBase::DoGetBestSize() ); if ( GetCount() == 0 )
return wxComboCtrlBase::DoGetBestSize();
if ( GetCount() > 0 ) wxOwnerDrawnComboBox* odc = const_cast<wxOwnerDrawnComboBox*>(this);
{ // TODO: this class may also have GetHightestItemHeight() and
wxOwnerDrawnComboBox* odc = const_cast<wxOwnerDrawnComboBox*>(this); // GetHightestItem() methods, and so set the whole (edit part + arrow)
best.x = odc->GetWidestItemWidth(); // control's height according with this max height, not only max width.
// TODO: this class may also have GetHightestItemHeight() and return GetSizeFromTextSize(odc->GetWidestItemWidth());
// GetHightestItem() methods, and so set the whole (edit part + arrow)
// control's height according with this max height, not only max width.
}
return GetSizeFromTextSize(best.x);
} }
void wxOwnerDrawnComboBox::OnDrawBackground(wxDC& dc, void wxOwnerDrawnComboBox::OnDrawBackground(wxDC& dc,