]> git.lyx.org Git - features.git/commitdiff
scrolling tweaks.
authorAbdelrazak Younes <younes@lyx.org>
Fri, 21 Dec 2007 13:03:45 +0000 (13:03 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Fri, 21 Dec 2007 13:03:45 +0000 (13:03 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22231 a592a061-630c-0410-9148-cb99ea01b6c8

src/BufferView.cpp

index ab48279daf02a4ffdff624ff775627707fde5664..4870de7e4b878eae771a0e1569c14effa4afc8d5 100644 (file)
@@ -442,20 +442,31 @@ void BufferView::updateScrollbar()
        for (pit_type pit = first.first; pit <= last.first; ++pit) {
                ParagraphMetrics const & pm = tm.parMetrics(pit);
                d->par_height_[pit] = pm.height();
-               if (first_visible_pit < 0 && pm.position() + pm.descent() > 0)
-                       first_visible_pit = pit;
+               if (first_visible_pit >= 0 || pm.position() + pm.descent() <= 0)
+                       continue;
+               first_visible_pit = pit;
+               LYXERR(Debug::SCROLLING, "first visible pit " << first_visible_pit);
+               // FIXME: we should look for the first visible row within
+               // the deepest inset!
+               int row_pos = pm.position();
+               size_t const nrows = pm.rows().size();
+               for (size_t i = 0; i != nrows; ++i) {
+                       Row const & row = pm.rows()[i];
+                       if (row_pos >= 0) {
+                               LYXERR(Debug::SCROLLING, "first visible row " << i
+                                       << "(row pos = )" << row_pos << ");");
+                               break;
+                       }
+                       row_pos += row.height();
+               }
+               d->scrollbarParameters_.position = row_pos;
        }
 
-       LYXERR(Debug::SCROLLING, "first_visible_pit " << first_visible_pit);
-
        d->scrollbarParameters_.height = 0;
        for (size_t i = 0; i != d->par_height_.size(); ++i) {
+               if (i == first_visible_pit)
+                       d->scrollbarParameters_.position += d->scrollbarParameters_.height;
                d->scrollbarParameters_.height += d->par_height_[i];
-               if (i != first_visible_pit)
-                       continue;
-               // FIXME: we should look for the first visible row within
-               // the deepest inset!
-               d->scrollbarParameters_.position = d->scrollbarParameters_.height;
        }
 
        d->scrollbarParameters_.lineScrollHeight =