]> git.saurik.com Git - wxWidgets.git/commitdiff
Make DoGetBestSize cache the value of GetSize() the first time it is called
authorDavid Elliott <dfe@tgwbd.org>
Sat, 3 Apr 2004 05:16:38 +0000 (05:16 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Sat, 3 Apr 2004 05:16:38 +0000 (05:16 +0000)
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

include/wx/window.h
src/common/wincmn.cpp

index 662c0e53e0ad7ae64c3d003858227da9e04726f8..9c3744965eab1c00007d1e5480594d7963b2c325 100644 (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;
 
index 25a98cc3d20e274ac4c6c61c8f8c087c93a83a05..14d868fdd87abd108a6914befe705649b1c7685f 100644 (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;
     }
 }