This is similar to the previous commit but for the transversal direction of a
box sizer: we could give an item size larger than the size of the sizer itself
making only part of its window visible (and thus potentially making the window
unusable e.g. because the scrollbar wasn't visible at all).
Fix this by always restricting the item size in the minor direction to the
total size available and add a unit test which failed previously and passes
now.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63705
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxCoord minorSize = GetSizeInMinorDir(sizeThis);
const int flag = item->GetFlag();
wxCoord minorSize = GetSizeInMinorDir(sizeThis);
const int flag = item->GetFlag();
- if ( flag & (wxEXPAND | wxSHAPED) )
+ if ( (flag & (wxEXPAND | wxSHAPED)) || (minorSize > totalMinorSize) )
+ // occupy all the available space if wxEXPAND was given and also if
+ // the item is too big to fit -- in this case we truncate it below
+ // its minimal size which is bad but better than not showing parts
+ // of the window at all
minorSize = totalMinorSize;
}
else if ( flag & (IsVertical() ? wxALIGN_RIGHT : wxALIGN_BOTTOM) )
minorSize = totalMinorSize;
}
else if ( flag & (IsVertical() ? wxALIGN_RIGHT : wxALIGN_BOTTOM) )
}
// NB: wxCENTRE is used here only for backwards compatibility,
// wxALIGN_CENTRE should be used in new code
}
// NB: wxCENTRE is used here only for backwards compatibility,
// wxALIGN_CENTRE should be used in new code
- else if ( flag & (wxCENTER | (IsVertical() ? wxALIGN_CENTRE_HORIZONTAL : wxALIGN_CENTRE_VERTICAL)))
+ else if ( flag & (wxCENTER | (IsVertical() ? wxALIGN_CENTRE_HORIZONTAL
+ : wxALIGN_CENTRE_VERTICAL)) )
{
PosInMinorDir(posChild) += (totalMinorSize - minorSize) / 2;
}
{
PosInMinorDir(posChild) += (totalMinorSize - minorSize) / 2;
}
m_win->Layout();
CPPUNIT_ASSERT_EQUAL( sizeTotal, child->GetSize() );
m_win->Layout();
CPPUNIT_ASSERT_EQUAL( sizeTotal, child->GetSize() );
+ m_sizer->Clear();
+ m_sizer->Add(child, wxSizerFlags());
+ m_sizer->SetItemMinSize(child, sizeTotal*2);
+ m_win->Layout();
+ CPPUNIT_ASSERT_EQUAL( sizeTotal, child->GetSize() );
+
m_sizer->Clear();
m_sizer->Add(child, wxSizerFlags().Expand());
m_sizer->SetItemMinSize(child, sizeTotal*2);
m_sizer->Clear();
m_sizer->Add(child, wxSizerFlags().Expand());
m_sizer->SetItemMinSize(child, sizeTotal*2);