wxSize wxSizer::Fit( wxWindow *window )
{
// take the min size by default and limit it by max size
- wxSize size = GetMinWindowSize(window);
- wxSize sizeMax = GetMaxWindowSize(window);
+ wxSize size = GetMinClientSize(window);
+ wxSize sizeMax;
wxTopLevelWindow *tlw = wxDynamicCast(window, wxTopLevelWindow);
if ( tlw )
// hack for small screen devices where TLWs are always full screen
if ( tlw->IsAlwaysMaximized() )
{
- size = tlw->GetSize();
+ // do nothing
+ return tlw->GetSize();
}
- else // normal situation
- {
- // limit the window to the size of the display it is on
- int disp = wxDisplay::GetFromWindow(window);
- if ( disp == wxNOT_FOUND )
- {
- // or, if we don't know which one it is, of the main one
- disp = 0;
- }
- sizeMax = wxDisplay(disp).GetClientArea().GetSize();
+ // limit the window to the size of the display it is on
+ int disp = wxDisplay::GetFromWindow(window);
+ if ( disp == wxNOT_FOUND )
+ {
+ // or, if we don't know which one it is, of the main one
+ disp = 0;
}
+
+ sizeMax = wxDisplay(disp).GetClientArea().GetSize();
+
+ // space for decorations and toolbars etc.
+ wxSize tlw_client_size = tlw->GetClientSize();
+ wxSize tlw_size = tlw->GetSize();
+ sizeMax.x -= tlw_size.x - tlw_client_size.x;
+ sizeMax.y -= tlw_size.y - tlw_client_size.y;
+ }
+ else
+ {
+ sizeMax = GetMaxClientSize(window);
}
if ( sizeMax.x != wxDefaultCoord && size.x > sizeMax.x )
- size.x = sizeMax.x;
+ size.x = sizeMax.x;
if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y )
- size.y = sizeMax.y;
-
+ size.y = sizeMax.y;
- window->SetSize( size );
+ // set client size
+ window->SetClientSize( size );
- return size;
+ // return entire size
+ return window->GetSize();
}
void wxSizer::FitInside( wxWindow *window )
window->GetMaxHeight() );
}
+#if WXWIN_COMPATIBILITY_2_8
void wxSizer::SetVirtualSizeHints( wxWindow *window )
{
- // Preserve the window's max size hints, but set the
- // lower bound according to the sizer calculations.
-
FitInside( window );
- wxSize size( window->GetVirtualSize() );
- window->SetVirtualSizeHints( size.x,
- size.y,
- window->GetMaxWidth(),
- window->GetMaxHeight() );
}
+#endif // WXWIN_COMPATIBILITY_2_8
wxSize wxSizer::GetMaxWindowSize( wxWindow *window ) const
{