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.