]> git.saurik.com Git - wxWidgets.git/commitdiff
Sometimes change in varscrollable window's size can result in unused empty space...
authorJaakko Salli <jaakko.salli@dnainternet.net>
Sun, 28 Feb 2010 10:16:49 +0000 (10:16 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Sun, 28 Feb 2010 10:16:49 +0000 (10:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63570 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/vscroll.cpp

index 7ce1079c42257a180a620eaf063654db1fb4bd7a..809ae48576edf1e2676329b89c77e6223d2b2fd3 100644 (file)
@@ -674,6 +674,39 @@ bool wxVarScrollHelperBase::DoScrollPages(int pages)
 
 void wxVarScrollHelperBase::HandleOnSize(wxSizeEvent& event)
 {
+    if ( m_unitMax )
+    {
+        // sometimes change in varscrollable window's size can result in
+        // unused empty space after the last item. Fix it by decrementing
+        // first visible item position according to the available space.
+
+        // determine free space
+        const wxCoord sWindow = GetOrientationTargetSize();
+        wxCoord s = 0;
+        size_t unit;
+        for ( unit = m_unitFirst; unit < m_unitMax; ++unit )
+        {
+            if ( s > sWindow )
+                break;
+
+            s += OnGetUnitSize(unit);
+        }
+        wxCoord freeSpace = sWindow - s;
+
+        // decrement first visible item index as long as there is free space
+        size_t idealUnitFirst;
+        for ( idealUnitFirst = m_unitFirst;
+              idealUnitFirst > 0;
+              idealUnitFirst-- )
+        {
+            wxCoord us = OnGetUnitSize(idealUnitFirst-1);
+            if ( freeSpace < us )
+                break;
+            freeSpace -= us;
+        }
+        m_unitFirst = idealUnitFirst;
+    }
+
     UpdateScrollbar();
 
     event.Skip();