mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
branch: Make the scrolling for large insets more naturally (bug #7662)
The patch fixes a case that I had forgotten. Namely, the case that when the height of a row was larger than the height of the screen and that the cursor is already visible. That's why I added a new if case to catch all situations in which the row height is larger than the height of the screen. If we then need scrolling we scroll to height/4 and 3*height/4. In the end, the height_/4 and 3*height_/4 should be replaced by the rowheights in the inset, but we need some extra infrastructure for that. see r39697. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@40010 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
269e688857
commit
93ba21cd5a
@ -887,29 +887,28 @@ bool BufferView::scrollToCursor(DocIterator const & dit, bool recenter)
|
||||
if (recenter)
|
||||
scrolled = scroll(ypos - height_/2);
|
||||
|
||||
// We try to visualize the whole row, if the row height is larger than
|
||||
// the screen height, we scroll to a heuristic value of height_ / 4.
|
||||
// FIXME: This heuristic value should be replaced by a recursive search
|
||||
// for a row in the inset that can be visualized completely.
|
||||
else if (row_dim.height() > height_) {
|
||||
if (ypos < defaultRowHeight())
|
||||
scrolled = scroll(ypos - height_ / 4);
|
||||
else if (ypos > height_ - defaultRowHeight())
|
||||
scrolled = scroll(ypos - 3 * height_ / 4);
|
||||
}
|
||||
|
||||
// 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 && ypos < height_) {
|
||||
int ynew = row_dim.ascent();
|
||||
if (ynew > height_ - row_dim.descent())
|
||||
// FIXME: Recursively find the rowheight of the row in the inset
|
||||
// until we find a row which can be visualized completely.
|
||||
ynew = height_ - defaultRowHeight();
|
||||
int const scroll = ynew - ypos;
|
||||
scrolled = scrollUp(scroll);
|
||||
scrolled = scrollUp(ynew - ypos);
|
||||
}
|
||||
|
||||
// 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_ && ypos > 0) {
|
||||
int ynew = height_ - row_dim.descent();
|
||||
if (ynew < row_dim.ascent())
|
||||
// FIXME: Recursively find the rowheight of the row in the inset
|
||||
// until we find a row which can be visualized completely.
|
||||
ynew = defaultRowHeight();
|
||||
int const scroll = ypos - ynew;
|
||||
scrolled = scrollDown(scroll);
|
||||
scrolled = scrollDown(ypos - ynew);
|
||||
}
|
||||
|
||||
// else, nothing to do, the cursor is already visible so we just return.
|
||||
|
Loading…
Reference in New Issue
Block a user