Make DoGetBestSize cache the value of GetSize() the first time it is called

for the case when the control is a regular window with no children.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26583 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott
2004-04-03 05:16:38 +00:00
parent 2b1ff57f1e
commit 2654f7e423
2 changed files with 16 additions and 3 deletions

View File

@@ -1077,6 +1077,9 @@ protected:
#if wxUSE_ACCESSIBILITY
wxAccessible* m_accessible;
#endif
// Best size for controls which fail to implement DoGetBestSize()
wxSize m_bestSize;
// Virtual size (scrolling)
wxSize m_virtualSize;

View File

@@ -110,6 +110,7 @@ END_EVENT_TABLE()
// the default initialization
wxWindowBase::wxWindowBase()
: m_bestSize(wxDefaultSize)
{
// no window yet, no parent nor children
m_parent = (wxWindow *)NULL;
@@ -585,9 +586,18 @@ wxSize wxWindowBase::DoGetBestSize() const
}
else
{
// for a generic window there is no natural best size - just use the
// current one
return GetSize();
// Windows which don't implement DoGetBestSize and aren't parents.
// This emulates the behavior of a wxSizer without wxADJUST_MINSIZE
// If you get the following message you should do one of two things
// 1. Do what it says (best)
// 2. m_bestSize = GetSize() at end of Create() (hack)
if(m_bestSize == wxDefaultSize)
{
wxLogDebug(wxT("Class %s (or superclass) should implement DoGetBestSize()"),GetClassInfo()->GetClassName());
wxConstCast(this,wxWindowBase)->m_bestSize = GetSize();
}
return m_bestSize;
}
}