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
// layout, trying to maintain the possibility to re-arrange lines by
// sizing
// 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
if ( !m_lastUsed )
{
// Case 1 above: InformFirstDirection() has just been called
// 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).
// 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 ( 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 )
{
}
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
{
}
else // Initial calculation, before we have size available to us
{