X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a8477e1341ac05a3ad7b908c04c8f50264dae87..6d325d81bc739bf545df5c00183fc7d5880b8a43:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index b62896002c..7c4c0ce62c 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -125,6 +125,9 @@ wxWindowBase::wxWindowBase() m_minHeight = m_maxHeight = wxDefaultSize.y; + // invalidiated cache value + m_bestSizeCache = wxDefaultSize; + // window are created enabled and visible by default m_isShown = m_isEnabled = true; @@ -482,7 +485,7 @@ void wxWindowBase::Fit() { if ( GetChildren().GetCount() > 0 ) { - SetClientSize(DoGetBestSize()); + SetClientSize(GetBestSize()); } //else: do nothing if we have no children } @@ -620,32 +623,36 @@ wxSize wxWindowBase::DoGetBestSize() const } } -void wxWindowBase::SetBestFittingSize(const wxSize& size) + +wxSize wxWindowBase::GetBestFittingSize() const { - // If the given size is incomplete then merge with the best size. - wxSize sizeBest; - if ( size.x == wxDefaultSize.x || size.y == wxDefaultSize.y ) + // merge the best size with the min size, giving priority to the min size + wxSize min = GetMinSize(); + if (min.x == wxDefaultCoord || min.y == wxDefaultCoord) { - sizeBest = DoGetBestSize(); - if ( size.x != wxDefaultSize.x ) - sizeBest.x = size.x; - if ( size.y != wxDefaultSize.y ) - sizeBest.y = size.y; - } - else // have complete explicit size - { - sizeBest = size; + wxSize best = GetBestSize(); + if (min.x == wxDefaultCoord) min.x = best.x; + if (min.y == wxDefaultCoord) min.y = best.y; } + return min; +} - // Change the size if needed - if (GetSize() != sizeBest) - SetSize(sizeBest); - // don't shrink the control below its best size - m_minWidth = sizeBest.x; - m_minHeight = sizeBest.y; +void wxWindowBase::SetBestFittingSize(const wxSize& size) +{ + // Set the min size to the size passed in. This will usually either be + // wxDefaultSize or the size passed to this window's ctor/Create function. + SetMinSize(size); + + // Merge the size with the best size if needed + wxSize best = GetBestFittingSize(); + + // If the current size doesn't match then change it + if (GetSize() != best) + SetSize(best); } + // by default the origin is not shifted wxPoint wxWindowBase::GetClientAreaOrigin() const {