limit TLW size to display size in wxSizer::Fit() instead of doing it in wxTLW::GetMaxSize(), this allows creating or manually resizing TLWs to be larger than the display while still avoiding making them too big by default

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2006-11-23 17:50:52 +00:00
parent 79d3dfac2f
commit 98018a4b05
4 changed files with 32 additions and 46 deletions

View File

@ -575,7 +575,6 @@ protected:
wxSize GetMinWindowSize( wxWindow *window );
wxSize GetMaxClientSize( wxWindow *window ) const;
wxSize GetMinClientSize( wxWindow *window );
wxSize FitSize( wxWindow *window );
wxSize VirtualFitSize( wxWindow *window );
virtual void DoSetMinSize( int width, int height );

View File

@ -233,7 +233,6 @@ public:
virtual bool Destroy();
virtual bool IsTopLevel() const { return true; }
virtual bool IsVisible() const { return IsShown(); }
virtual wxSize GetMaxSize() const;
// event handlers
void OnCloseWindow(wxCloseEvent& event);

View File

@ -17,6 +17,7 @@
#pragma hdrstop
#endif
#include "wx/display.h"
#include "wx/sizer.h"
#ifndef WX_PRECOMP
@ -760,8 +761,37 @@ void wxSizer::DeleteWindows()
wxSize wxSizer::Fit( wxWindow *window )
{
wxSize size(window->IsTopLevel() ? FitSize(window)
: GetMinWindowSize(window));
// take the min size by default and limit it by max size
wxSize size = GetMinWindowSize(window);
wxSize sizeMax = GetMaxWindowSize(window);
wxTopLevelWindow *tlw = wxDynamicCast(window, wxTopLevelWindow);
if ( tlw )
{
// hack for small screen devices where TLWs are always full screen
if ( tlw->IsAlwaysMaximized() )
{
size = 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();
}
}
if ( sizeMax.x != wxDefaultCoord && size.x > sizeMax.x )
size.x = sizeMax.x;
if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y )
size.y = sizeMax.y;
window->SetSize( size );
@ -833,32 +863,6 @@ wxSize wxSizer::GetMinWindowSize( wxWindow *window )
// TODO on mac we need a function that determines how much free space this
// min size contains, in order to make sure that we have 20 pixels of free
// space around the controls
// Return a window size that will fit within the screens dimensions
wxSize wxSizer::FitSize( wxWindow *window )
{
if ( window->IsTopLevel() )
{
wxTopLevelWindow *tlw = wxDynamicCast(window, wxTopLevelWindow);
if ( tlw && tlw->IsAlwaysMaximized() )
{
return tlw->GetClientSize();
}
}
wxSize size = GetMinWindowSize( window );
wxSize sizeMax = GetMaxWindowSize( window );
// Limit the size if sizeMax != wxDefaultSize
if ( size.x > sizeMax.x && sizeMax.x != wxDefaultCoord )
size.x = sizeMax.x;
if ( size.y > sizeMax.y && sizeMax.y != wxDefaultCoord )
size.y = sizeMax.y;
return size;
}
wxSize wxSizer::GetMaxClientSize( wxWindow *window ) const
{
wxSize maxSize( window->GetMaxSize() );

View File

@ -173,22 +173,6 @@ void wxTopLevelWindowBase::GetRectForTopLevelChildren(int *x, int *y, int *w, in
GetSize(w,h);
}
wxSize wxTopLevelWindowBase::GetMaxSize() const
{
wxSize size = wxWindow::GetMaxSize();
int w, h;
wxClientDisplayRect(NULL, NULL, &w, &h );
if ( size.GetWidth() == wxDefaultCoord )
size.SetWidth(w);
if ( size.GetHeight() == wxDefaultCoord )
size.SetHeight(h);
return size;
}
/* static */
wxSize wxTopLevelWindowBase::GetDefaultSize()
{