diff --git a/include/wx/vscroll.h b/include/wx/vscroll.h index b24615f27e..1d29f56405 100644 --- a/include/wx/vscroll.h +++ b/include/wx/vscroll.h @@ -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 diff --git a/src/generic/vscroll.cpp b/src/generic/vscroll.cpp index 3fc8a940d5..bce13cb38d 100644 --- a/src/generic/vscroll.cpp +++ b/src/generic/vscroll.cpp @@ -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();