From: Vincent van Ravesteijn Date: Mon, 26 Apr 2010 14:57:27 +0000 (+0000) Subject: Fix bug #6141: Scrolling error with insets at top of file. X-Git-Tag: 2.0.0~3343 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=87623ff478988e5e27ecc9af93a86b7c80fa94ef;p=features.git Fix bug #6141: Scrolling error with insets at top of file. Fix the regression introduced in r28397 while fixing bug #5573. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34296 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 8ce25ec07f..3aa1854d1f 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -874,10 +874,22 @@ bool BufferView::scrollToCursor(DocIterator const & dit, bool recenter) int scrolled = 0; if (recenter) scrolled = scroll(ypos - height_/2); + + // If the top part of the row falls of the screen, we scroll + // up to align the top of the row with the top of the screen. else if (ypos - row_dim.ascent() < 0) - scrolled = scrollUp(- ypos + row_dim.ascent()); - else if (ypos + row_dim.descent() > height_) - scrolled = scrollDown(ypos - height_ + defaultRowHeight() ); + scrolled = scrollUp(-ypos + row_dim.ascent()); + + // If the bottom of the row falls of the screen, we scroll down. + // However, we have to be careful not to scroll that much that + // the top falls of the screen. + else if (ypos + row_dim.descent() > height_) { + int ynew = height_ - row_dim.descent(); + if (ynew < row_dim.ascent()) + ynew = row_dim.ascent(); + int const scroll = ypos - ynew; + scrolled = scrollDown(scroll); + } // else, nothing to do, the cursor is already visible so we just return. return scrolled != 0;