From 98018a4b057dda20023a9276681f3d4ed335a6e1 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 23 Nov 2006 17:50:52 +0000 Subject: [PATCH] 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 --- include/wx/sizer.h | 1 - include/wx/toplevel.h | 1 - src/common/sizer.cpp | 60 ++++++++++++++++++++++------------------- src/common/toplvcmn.cpp | 16 ----------- 4 files changed, 32 insertions(+), 46 deletions(-) diff --git a/include/wx/sizer.h b/include/wx/sizer.h index f05a5e3e66..befba5e7a7 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -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 ); diff --git a/include/wx/toplevel.h b/include/wx/toplevel.h index 933b258595..c737099e2f 100644 --- a/include/wx/toplevel.h +++ b/include/wx/toplevel.h @@ -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); diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 3429e7b01f..d4ac29a517 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -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() ); diff --git a/src/common/toplvcmn.cpp b/src/common/toplvcmn.cpp index 97821d0d69..45ad2fc6fb 100644 --- a/src/common/toplvcmn.cpp +++ b/src/common/toplvcmn.cpp @@ -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() { -- 2.45.2