]> git.saurik.com Git - wxWidgets.git/commitdiff
pressing PageDown and then PageUp should return to the same item
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 3 Jun 2003 11:15:38 +0000 (11:15 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 3 Jun 2003 11:15:38 +0000 (11:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20885 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 73d3815d13f00eddc4bafce9f2c45f6d2f607bf0..8ba386cc2f833be04660a3d632547d3e29b8991d 100644 (file)
@@ -146,8 +146,8 @@ protected:
     void OnScroll(wxScrollWinEvent& event);
 
     // find the index of the line we need to show at the top of the window such
-    // that the last line shown is the given one
-    size_t FindFirstFromBottom(size_t lineLast);
+    // that the last (fully or partially) visible line is the given one
+    size_t FindFirstFromBottom(size_t lineLast, bool fullyVisible = false);
 
     // get the total height of the lines between lineMin (inclusive) and
     // lineMax (exclusive)
index 5d2ccf0cb63b1255110b49dc31896868b4020973..4a9cc64d7c38ec6794134a4c358afcff71ace79b 100644 (file)
@@ -74,7 +74,7 @@ wxCoord wxVScrolledWindow::GetLinesHeight(size_t lineMin, size_t lineMax) const
     return height;
 }
 
-size_t wxVScrolledWindow::FindFirstFromBottom(size_t lineLast)
+size_t wxVScrolledWindow::FindFirstFromBottom(size_t lineLast, bool full)
 {
     const wxCoord hWindow = GetClientSize().y;
 
@@ -88,7 +88,13 @@ size_t wxVScrolledWindow::FindFirstFromBottom(size_t lineLast)
 
         if ( h > hWindow )
         {
-            lineFirst++;
+            // for this line to be fully visible we need to go one line
+            // down, but if it is enough for it to be only partly visible then
+            // this line will do as well
+            if ( full )
+            {
+                lineFirst++;
+            }
 
             break;
         }
@@ -230,7 +236,7 @@ bool wxVScrolledWindow::ScrollToLine(size_t line)
 
     // determine the real first line to scroll to: we shouldn't scroll beyond
     // the end
-    size_t lineFirstLast = FindFirstFromBottom(m_lineMax - 1);
+    size_t lineFirstLast = FindFirstFromBottom(m_lineMax - 1, true);
     if ( line > lineFirstLast )
         line = lineFirstLast;