Applied patch #423927, (Min size for stretch parts of wxBoxSizer)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10189 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -381,8 +381,8 @@ wxSize wxSizer::GetMaxWindowSize( wxWindow *WXUNUSED(window) )
|
|||||||
wxRect rect = wxGetClientDisplayRect();
|
wxRect rect = wxGetClientDisplayRect();
|
||||||
wxSize sizeMax (rect.width,rect.height);
|
wxSize sizeMax (rect.width,rect.height);
|
||||||
|
|
||||||
// Make the max size a bit smaller than the visible portion of
|
// Make the max size a bit smaller than the visible portion of
|
||||||
// the screen. A window which takes the entire screen doesn't
|
// the screen. A window which takes the entire screen doesn't
|
||||||
// look very nice either
|
// look very nice either
|
||||||
sizeMax.x *= 9;
|
sizeMax.x *= 9;
|
||||||
sizeMax.x /= 10;
|
sizeMax.x /= 10;
|
||||||
@@ -944,14 +944,43 @@ wxSize wxBoxSizer::CalcMin()
|
|||||||
m_fixedWidth = 0;
|
m_fixedWidth = 0;
|
||||||
m_fixedHeight = 0;
|
m_fixedHeight = 0;
|
||||||
|
|
||||||
|
// Find how long each stretch unit needs to be
|
||||||
|
int stretchSize = 1;
|
||||||
wxNode *node = m_children.GetFirst();
|
wxNode *node = m_children.GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
|
{
|
||||||
|
wxSizerItem *item = (wxSizerItem*) node->Data();
|
||||||
|
if (item->GetOption() != 0)
|
||||||
|
{
|
||||||
|
int stretch = item->GetOption();
|
||||||
|
wxSize size( item->CalcMin() );
|
||||||
|
int sizePerStretch;
|
||||||
|
// Integer division rounded up is (a + b - 1) / b
|
||||||
|
if (m_orient == wxHORIZONTAL)
|
||||||
|
sizePerStretch = ( size.x + stretch - 1 ) / stretch;
|
||||||
|
else
|
||||||
|
sizePerStretch = ( size.y + stretch - 1 ) / stretch;
|
||||||
|
if (sizePerStretch > stretchSize)
|
||||||
|
stretchSize = sizePerStretch;
|
||||||
|
}
|
||||||
|
node = node->Next();
|
||||||
|
}
|
||||||
|
// Calculate overall minimum size
|
||||||
|
node = m_children.GetFirst();
|
||||||
|
while (node)
|
||||||
{
|
{
|
||||||
wxSizerItem *item = (wxSizerItem*) node->Data();
|
wxSizerItem *item = (wxSizerItem*) node->Data();
|
||||||
|
|
||||||
m_stretchable += item->GetOption();
|
m_stretchable += item->GetOption();
|
||||||
|
|
||||||
wxSize size( item->CalcMin() );
|
wxSize size( item->CalcMin() );
|
||||||
|
if (item->GetOption() != 0)
|
||||||
|
{
|
||||||
|
if (m_orient == wxHORIZONTAL)
|
||||||
|
size.x = stretchSize * item->GetOption();
|
||||||
|
else
|
||||||
|
size.y = stretchSize * item->GetOption();
|
||||||
|
}
|
||||||
|
|
||||||
if (m_orient == wxHORIZONTAL)
|
if (m_orient == wxHORIZONTAL)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user