]> git.saurik.com Git - wxWidgets.git/commitdiff
wxSizer::Fit() now sets client size
authorRobert Roebling <robert@roebling.de>
Sun, 13 Jan 2008 13:08:30 +0000 (13:08 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 13 Jan 2008 13:08:30 +0000 (13:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51197 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/sizer.tex
src/common/sizer.cpp

index 0c8b32a5b04300695d398608b7c0caf13edb9490..8800335c251224b46695a4d9fc2050b23bd951ee 100644 (file)
@@ -222,13 +222,11 @@ Returns true if the child item was found and detached, false otherwise.
 
 \func{wxSize}{Fit}{\param{wxWindow* }{window}}
 
-Tell the sizer to resize the \arg{window} to match the sizer's minimal size. This
-is commonly done in the constructor of the window itself, see sample in the description
+Tell the sizer to resize the \arg{window} so that its client area matchesthe 
+sizer's minimal size. This is commonly done in the constructor of the window
+itself, see sample in the description
 of \helpref{wxBoxSizer}{wxboxsizer}. Returns the new size.
 
-For a top level window this is the total window size, not client size.
-
-
 \membersection{wxSizer::FitInside}\label{wxsizerfitinside}
 
 \func{void}{FitInside}{\param{wxWindow* }{window}}
index a35871787601b52b85b7f13e35bbd80d8be80dc9..9a0cb0fcf750c943cfedc97c8c92d428914633d2 100644 (file)
@@ -838,7 +838,6 @@ 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);
 
     wxTopLevelWindow *tlw = wxDynamicCast(window, wxTopLevelWindow);
     if ( tlw )
@@ -846,31 +845,52 @@ wxSize wxSizer::Fit( wxWindow *window )
         // 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 )
         {
-            // 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();
-        }
+            // or, if we don't know which one it is, of the main one
+            disp = 0;
+        }
+
+        wxSize 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;
+        
+        if ( sizeMax.x != wxDefaultCoord && size.x > sizeMax.x )
+                size.x = sizeMax.x;
+        if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y )
+                size.y = sizeMax.y;
+
+        // set client size
+        tlw->SetClientSize( size );
+        
+        // return entire size
+        return tlw->GetSize();
     }
+    else
+    {
+        wxSize sizeMax = GetMaxWindowSize(window);
+        
+        if ( sizeMax.x != wxDefaultCoord && size.x > sizeMax.x )
+                size.x = sizeMax.x;
+        if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y )
+                size.y = sizeMax.y;
 
-    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 );
+        // set client size
+        window->SetClientSize( size );
 
-    return size;
+        // return entire size
+        return window->GetSize();
+    }
 }
 
 void wxSizer::FitInside( wxWindow *window )