]> git.saurik.com Git - wxWidgets.git/commitdiff
added RefreshLines()
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 11 Jun 2003 11:37:52 +0000 (11:37 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 11 Jun 2003 11:37:52 +0000 (11:37 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 8ba386cc2f833be04660a3d632547d3e29b8991d..624d12187ebfb5b164f93b7b00e4fc0fc0c12fdd 100644 (file)
@@ -93,6 +93,9 @@ public:
     // redraw the specified line
     void RefreshLine(size_t line);
 
+    // redraw all lines in the specified range (inclusive)
+    void RefreshLines(size_t from, size_t to);
+
     // return the item at the specified (in physical coordinates) position or
     // wxNOT_FOUND if none, i.e. if it is below the last item
     int HitTest(wxCoord x, wxCoord y) const;
index 4a9cc64d7c38ec6794134a4c358afcff71ace79b..1b346e80772c7009bce4fab2b39ea801796a9be9 100644 (file)
@@ -202,6 +202,35 @@ void wxVScrolledWindow::RefreshLine(size_t line)
     RefreshRect(rect);
 }
 
+void wxVScrolledWindow::RefreshLines(size_t from, size_t to)
+{
+    wxASSERT_MSG( from <= to, _T("RefreshLines(): empty range") );
+
+    // clump the range to just the visible lines -- it is useless to refresh
+    // the other ones
+    if ( from < GetFirstVisibleLine() )
+        from = GetFirstVisibleLine();
+
+    if ( to > GetLastVisibleLine() )
+        to = GetLastVisibleLine();
+
+    // calculate the rect occupied by these lines on screen
+    wxRect rect;
+    rect.width = GetClientSize().x;
+    for ( size_t nBefore = GetFirstVisibleLine(); nBefore < from; nBefore++ )
+    {
+        rect.y += OnGetLineHeight(nBefore);
+    }
+
+    for ( size_t nBetween = from; nBetween < to; nBetween++ )
+    {
+        rect.height += OnGetLineHeight(nBetween);
+    }
+
+    // do refresh it
+    RefreshRect(rect);
+}
+
 void wxVScrolledWindow::RefreshAll()
 {
     UpdateScrollbar();