bool BufferView::isTopScreen() const
{
- return d->scrollbarParameters_.position == d->scrollbarParameters_.min;
+ return 0 == d->scrollbarParameters_.min;
}
bool BufferView::isBottomScreen() const
{
- return d->scrollbarParameters_.position == d->scrollbarParameters_.max;
+ return 0 == d->scrollbarParameters_.max;
}
for (size_t i = last.first + 1; i != parsize; ++i)
d->scrollbarParameters_.max += d->par_height_[i];
- d->scrollbarParameters_.position = 0;
// The reference is the top position so we remove one page.
if (lyxrc.scroll_below_document)
d->scrollbarParameters_.max -= minVisiblePart();
else
d->scrollbarParameters_.max -= d->scrollbarParameters_.page_step;
+
+ // 0 must be inside the range as it denotes the current position
+ if (d->scrollbarParameters_.max < 0)
+ d->scrollbarParameters_.max = 0;
+ if (d->scrollbarParameters_.min > 0)
+ d->scrollbarParameters_.min = 0;
}
}
-void BufferView::scrollDocView(int value, bool update)
+
+void BufferView::scrollDocView(int const value, bool update)
{
- int const offset = value - d->scrollbarParameters_.position;
+ // The scrollbar values are relative to the top of the screen, therefore the
+ // offset is equal to the target value.
// No scrolling at all? No need to redraw anything
- if (offset == 0)
+ if (value == 0)
return;
// If the offset is less than 2 screen height, prefer to scroll instead.
- if (abs(offset) <= 2 * height_) {
- d->anchor_ypos_ -= offset;
+ if (abs(value) <= 2 * height_) {
+ d->anchor_ypos_ -= value;
buffer_.changed(true);
updateHoveredInset();
return;
}
-bool BufferView::scrollToCursor(DocIterator const & dit, bool recenter)
+bool BufferView::scrollToCursor(DocIterator const & dit, bool const recenter)
{
// We are not properly started yet, delay until resizing is
// done.
else
dr.screenUpdate(Update::Force | Update::FitCursor);
dr.forceBufferUpdate();
+ // we only need to do this if we have deleted or restored a
+ // BiBTeX inset. but there is no other place to do it. one
+ // obvious idea is to try to do it in a copy constructor for
+ // InsetBibTeX, but when that is invoked, the buffer_ member
+ // is not yet set. another idea is to look at the InsetLists
+ // of the various paragraphs. but we'd have to recurse through
+ // the contained insets to make that work. it doesn't seem to
+ // be worth it, as this will not happen that often.
+ buffer().invalidateBibfileCache();
+ buffer().removeBiblioTempFiles();
break;
case LFUN_REDO:
else
dr.screenUpdate(Update::Force | Update::FitCursor);
dr.forceBufferUpdate();
+ // see above
+ buffer().invalidateBibfileCache();
+ buffer().removeBiblioTempFiles();
break;
case LFUN_FONT_STATE:
bool const drawing = pi.pain.isDrawingEnabled();
pi.pain.setDrawingEnabled(false);
// No need to care about vertical position.
- RowPainter rp(pi, buffer().text(), d->cursor_.bottom().pit(), row,
- -d->horiz_scroll_offset_, 0);
+ RowPainter rp(pi, buffer().text(), row, -d->horiz_scroll_offset_, 0);
rp.paintText();
pi.pain.setDrawingEnabled(drawing);
}