]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sizer.cpp
another correction to indices used in StringToLines()
[wxWidgets.git] / src / common / sizer.cpp
index 9bce1d0793d06354cb04d902f44aeb6dc3cc65b0..6030fd9f204fa56b6e0edc50c97124bd2c80584a 100644 (file)
@@ -837,8 +837,8 @@ void wxSizer::DeleteWindows()
 wxSize wxSizer::Fit( wxWindow *window )
 {
     // take the min size by default and limit it by max size
 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 )
 
     wxTopLevelWindow *tlw = wxDynamicCast(window, wxTopLevelWindow);
     if ( tlw )
@@ -846,31 +846,41 @@ wxSize wxSizer::Fit( wxWindow *window )
         // hack for small screen devices where TLWs are always full screen
         if ( tlw->IsAlwaysMaximized() )
         {
         // 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 )
     }
 
     if ( sizeMax.x != wxDefaultCoord && size.x > sizeMax.x )
-        size.x = sizeMax.x;
+            size.x = sizeMax.x;
     if ( sizeMax.y != wxDefaultCoord && size.y > sizeMax.y )
     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 )
 }
 
 void wxSizer::FitInside( wxWindow *window )
@@ -907,18 +917,12 @@ void wxSizer::SetSizeHints( wxWindow *window )
                           window->GetMaxHeight() );
 }
 
                           window->GetMaxHeight() );
 }
 
+#if WXWIN_COMPATIBILITY_2_8
 void wxSizer::SetVirtualSizeHints( wxWindow *window )
 {
 void wxSizer::SetVirtualSizeHints( wxWindow *window )
 {
-    // Preserve the window's max size hints, but set the
-    // lower bound according to the sizer calculations.
-
     FitInside( window );
     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
 {
 
 wxSize wxSizer::GetMaxWindowSize( wxWindow *window ) const
 {