]> git.saurik.com Git - wxWidgets.git/commitdiff
implement Layout() so that sizers work correctly when the window is scrolled (1st...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 17 Apr 2006 02:00:48 +0000 (02:00 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 17 Apr 2006 02:00:48 +0000 (02:00 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38780 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/vscroll.h
src/generic/vscroll.cpp

index b24615f27e6335b3f7798a40946c388ebcca7e4e..1d29f56405f55492674aaa098e5aa2a466b008f3 100644 (file)
@@ -135,6 +135,8 @@ public:
     // is kept for backwards compatibility
     size_t GetLastVisibleLine() const { return GetVisibleEnd() - 1; }
 
+    // layout the children (including the sizer if needed)
+    virtual bool Layout();
 
 protected:
     // this function must be overridden in the derived class and it should
index 3fc8a940d5f5ab6e6b1438225f6dbfda3a5d3a06..bce13cb38de0d5ba24842567a79f8adef59b0fc0 100644 (file)
@@ -282,6 +282,27 @@ void wxVScrolledWindow::RefreshAll()
     Refresh();
 }
 
+bool wxVScrolledWindow::Layout()
+{
+    if ( GetSizer() )
+    {
+        // adjust the sizer dimensions/position taking into account the
+        // virtual size and scrolled position of the window.
+
+        int w, h;
+        GetVirtualSize(&w, &h);
+
+        // x is always 0 so no variable needed
+        int y = -GetLinesHeight(0, GetFirstVisibleLine());
+
+        GetSizer()->SetDimension(0, y, w, h);
+        return true;
+    }
+
+    // fall back to default for LayoutConstraints
+    return wxPanel::Layout();
+}
+
 int wxVScrolledWindow::HitTest(wxCoord WXUNUSED(x), wxCoord y) const
 {
     const size_t lineMax = GetVisibleEnd();