X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d13d8d4e5f03c0f54af4589bc285fd3e4af48b3b..c60f5c6517bfd6a675fc76a3846bc477df6ab37a:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index c49530577e..049760f8c2 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -196,7 +196,7 @@ void wxSizerItem::SetDimension( wxPoint pos, wxSize size ) size.x = rwidth; } } - + // This is what GetPosition() returns. Since we calculate // borders afterwards, GetPosition() will be the left/top // corner of the surrounding border. @@ -355,7 +355,13 @@ bool wxSizer::Remove( int pos ) void wxSizer::Fit( wxWindow *window ) { - window->SetSize( GetMinWindowSize( window ) ); + wxSize size; + if (window->IsTopLevel()) + size = FitSize( window ); + else + size = GetMinWindowSize( window ); + + window->SetSize( size ); } void wxSizer::Layout() @@ -366,10 +372,24 @@ void wxSizer::Layout() void wxSizer::SetSizeHints( wxWindow *window ) { - wxSize size( GetMinWindowSize( window ) ); + wxSize size = FitSize( window ); window->SetSizeHints( size.x, size.y ); } +wxSize wxSizer::GetMaxWindowSize( wxWindow *WXUNUSED(window) ) +{ + wxSize sizeMax = wxGetDisplaySize(); + // make the max size a bit smaller than the screen, a window which takes + // the entire screen doesn't look very nice neither + sizeMax.x *= 9; + sizeMax.x /= 10; + + sizeMax.y *= 9; + sizeMax.y /= 10; + + return sizeMax; +} + wxSize wxSizer::GetMinWindowSize( wxWindow *window ) { wxSize minSize( GetMinSize() ); @@ -379,6 +399,20 @@ wxSize wxSizer::GetMinWindowSize( wxWindow *window ) minSize.y+size.y-client_size.y ); } +// Return a window size that will fit within the screens dimensions +wxSize wxSizer::FitSize( wxWindow *window ) +{ + wxSize size = GetMinWindowSize( window ); + wxSize sizeMax = GetMaxWindowSize( window ); + + if ( size.x > sizeMax.x ) + size.x = sizeMax.x; + if ( size.y > sizeMax.y ) + size.y = sizeMax.y; + + return size; +} + void wxSizer::SetDimension( int x, int y, int width, int height ) { m_position.x = x; @@ -913,7 +947,7 @@ wxSize wxBoxSizer::CalcMin() wxSizerItem *item = (wxSizerItem*) node->Data(); m_stretchable += item->GetOption(); - + wxSize size( item->CalcMin() ); if (m_orient == wxHORIZONTAL) @@ -935,7 +969,7 @@ wxSize wxBoxSizer::CalcMin() m_fixedWidth = wxMax( m_fixedWidth, size.x ); } else - { + { m_fixedWidth += size.x; m_fixedHeight = wxMax( m_fixedHeight, size.y ); } @@ -970,7 +1004,7 @@ static void GetStaticBoxBorders(wxStaticBox *box, else #endif // __WXGTK__ *borderTop = 15; - + (void)box; *borderOther = 5; }