Allow wxWrapSizer to request more size than it used previously.

The code in wxWrapSizer::CalcMin() ensured that the sizer never requested more
space than what it had been already given which, while clearly done
intentionally, seems to be wrong because it can never end up with enough space
for all its rows/columns unless it is set to up to expand in the containing
sizer.

In other words, the old code could return the size which was not enough to
show the sizer contents fully which is against CalcMin() contract.

Change this by simply removing the check for the new minimal size being less
than the old one. This allows the wrap sizer demo in the layout sample to work
correctly whereas before the sizer contents was completely invisible initially.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72537 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-09-22 16:16:52 +00:00
parent 73eb7ca93f
commit 863dc042da

View File

@ -177,15 +177,6 @@ wxSize wxWrapSizer::CalcMin()
// layout, trying to maintain the possibility to re-arrange lines by
// sizing
wxSize szBoundary; // Keep track of boundary so we don't overflow
if ( m_availSize > 0 )
{
if ( m_dirInform == m_orient )
szBoundary = SizeFromMajorMinor(m_availSize, m_availableOtherDir);
else
szBoundary = SizeFromMajorMinor(m_availableOtherDir, m_availSize);
}
if ( !m_lastUsed )
{
// Case 1 above: InformFirstDirection() has just been called
@ -195,21 +186,22 @@ wxSize wxWrapSizer::CalcMin()
// a wrap sizer, depending on whether the first reported size component
// is the opposite as our own orientation (the simpler case) or the same
// one (more complicated).
wxSize szMinPrev = m_minSize;
if ( m_dirInform == m_orient )
CalcMinFromMajor(m_availSize);
else
CalcMinFromMinor(m_availSize);
// If overflowing given boundary, go back to previous min size
if ( m_minSize.x > szBoundary.x || m_minSize.y>szBoundary.y )
m_minSize = szMinPrev;
}
else // Case 2 above: not immediately after InformFirstDirection()
{
if ( m_availSize > 0 )
{
CalcMinFittingSize(szBoundary);
wxSize szAvail; // Keep track of boundary so we don't overflow
if ( m_dirInform == m_orient )
szAvail = SizeFromMajorMinor(m_availSize, m_availableOtherDir);
else
szAvail = SizeFromMajorMinor(m_availableOtherDir, m_availSize);
CalcMinFittingSize(szAvail);
}
else // Initial calculation, before we have size available to us
{