From: David Elliott Date: Sat, 3 Apr 2004 05:16:38 +0000 (+0000) Subject: Make DoGetBestSize cache the value of GetSize() the first time it is called X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2654f7e423bb773ca52c8b465c6ec9abfa398e45 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 --- diff --git a/include/wx/window.h b/include/wx/window.h index 662c0e53e0..9c3744965e 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -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; diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 25a98cc3d2..14d868fdd8 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -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; } }