void BufferView::scrollDocView(int value)
{
+ int const offset = value - d->scrollbarParameters_.position;
+ // If the offset is less than 2 screen height, prefer to scroll instead.
+ if (abs(offset) <= 2 * height_) {
+ scroll(offset);
+ return;
+ }
+
// cut off at the top
if (value <= d->scrollbarParameters_.min) {
DocIterator dit = doc_iterator_begin(buffer_.inset());
return;
}
-
- int const offset = value - d->scrollbarParameters_.position;
- // If the offset is less than 2 screen height, prefer to scroll instead.
- if (abs(offset) <= 2 * height_) {
- scroll(offset);
- return;
- }
-
// find paragraph at target position
int par_pos = d->scrollbarParameters_.min;
pit_type i = 0;
void BufferView::resize(int width, int height)
{
+ bool initialResize = (height_ == 0);
+
// Update from work area
width_ = width;
height_ = height;
d->par_height_.clear();
updateMetrics();
+
+ // view got his initial size, make sure that
+ // the cursor has a proper position
+ if (initialResize) {
+ updateScrollbar();
+ showCursor();
+ }
}
// Rebreak anchor paragraph.
tm.redoParagraph(d->anchor_pit_);
ParagraphMetrics & anchor_pm = tm.par_metrics_[d->anchor_pit_];
+
+ // position anchor
+ if (d->anchor_pit_ == 0) {
+ int scrollRange = d->scrollbarParameters_.max - d->scrollbarParameters_.min;
+
+ // Complete buffer visible? Then it's easy.
+ if (scrollRange == 0)
+ d->anchor_ypos_ = anchor_pm.ascent();
+
+ // FIXME: Some clever handling needed to show
+ // the _first_ paragraph up to the top if the cursor is
+ // in the first line.
+ }
anchor_pm.setPosition(d->anchor_ypos_);
LYXERR(Debug::PAINTING, "metrics: "