]> git.saurik.com Git - wxWidgets.git/commitdiff
limit TLW size to display size in wxSizer::Fit() instead of doing it in wxTLW::GetMax...
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 23 Nov 2006 17:50:52 +0000 (17:50 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 23 Nov 2006 17:50:52 +0000 (17:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/sizer.h
include/wx/toplevel.h
src/common/sizer.cpp
src/common/toplvcmn.cpp

index f05a5e3e6645d704fc892d362bdb804819111d1b..befba5e7a7f408bb9c366d87c1d1502f508f6871 100644 (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 );
index 933b2585950a0c260c5c1432d511f675719cd306..c737099e2f5cf844bc9978cae8cb4c88fbb55aa4 100644 (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);
index 3429e7b01f2205751fd54b25bba9f55a55536029..d4ac29a51747c1e056d3208a12f769c51e357d6e 100644 (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() );
index 97821d0d69fc28730e0edb7376426673a4125224..45ad2fc6fb5a7d9328eb7a149f46060b234f1ddd 100644 (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()
 {