Create new method GuiWorkArea::Private:::updateCaretGeometry

This replaces a showCaret/hideCaret pair and avoids an update.

Also remove an update() call in resizeBufferView: is is not necessary
since we are already in a pintEvent handler.
This commit is contained in:
Jean-Marc Lasgouttes 2017-10-02 17:07:31 +02:00
parent 92628a2990
commit add342d088
2 changed files with 17 additions and 17 deletions

View File

@ -467,14 +467,12 @@ void GuiWorkArea::scheduleRedraw(bool update_metrics)
// update caret position, because otherwise it has to wait until // update caret position, because otherwise it has to wait until
// the blinking interval is over // the blinking interval is over
if (d->caret_visible_) { d->updateCaretGeometry();
d->hideCaret();
d->showCaret();
}
LYXERR(Debug::WORKAREA, "WorkArea::redraw screen"); LYXERR(Debug::WORKAREA, "WorkArea::redraw screen");
viewport()->update(); viewport()->update();
/// FIXME: is this still true now that paintEvent does the actual painting?
/// \warning: scrollbar updating *must* be done after the BufferView is drawn /// \warning: scrollbar updating *must* be done after the BufferView is drawn
/// because \c BufferView::updateScrollbar() is called in \c BufferView::draw(). /// because \c BufferView::updateScrollbar() is called in \c BufferView::draw().
d->updateScrollbar(); d->updateScrollbar();
@ -572,7 +570,7 @@ void GuiWorkArea::Private::resizeBufferView()
buffer_view_->resize(p->viewport()->width(), p->viewport()->height()); buffer_view_->resize(p->viewport()->width(), p->viewport()->height());
if (caret_in_view) if (caret_in_view)
buffer_view_->scrollToCursor(); buffer_view_->scrollToCursor();
p->viewport()->update(); updateCaretGeometry();
// Update scrollbars which might have changed due different // Update scrollbars which might have changed due different
// BufferView dimension. This is especially important when the // BufferView dimension. This is especially important when the
@ -590,11 +588,8 @@ void GuiWorkArea::Private::resizeBufferView()
} }
void GuiWorkArea::Private::showCaret() void GuiWorkArea::Private::updateCaretGeometry()
{ {
if (caret_visible_)
return;
Point point; Point point;
int h = 0; int h = 0;
buffer_view_->caretPosAndHeight(point, h); buffer_view_->caretPosAndHeight(point, h);
@ -629,7 +624,15 @@ void GuiWorkArea::Private::showCaret()
point.x_ -= buffer_view_->horizScrollOffset(); point.x_ -= buffer_view_->horizScrollOffset();
caret_->update(point.x_, point.y_, h, l_shape, isrtl, completable); caret_->update(point.x_, point.y_, h, l_shape, isrtl, completable);
}
void GuiWorkArea::Private::showCaret()
{
if (caret_visible_)
return;
updateCaretGeometry();
p->viewport()->update(caret_->rect()); p->viewport()->update(caret_->rect());
} }
@ -1225,13 +1228,8 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev)
// LYXERR(Debug::PAINTING, "paintEvent begin: x: " << rc.x() // LYXERR(Debug::PAINTING, "paintEvent begin: x: " << rc.x()
// << " y: " << rc.y() << " w: " << rc.width() << " h: " << rc.height()); // << " y: " << rc.y() << " w: " << rc.width() << " h: " << rc.height());
if (d->need_resize_ || pixelRatio() != d->last_pixel_ratio_) { if (d->need_resize_ || pixelRatio() != d->last_pixel_ratio_)
d->resizeBufferView(); d->resizeBufferView();
if (d->caret_visible_) {
d->hideCaret();
d->showCaret();
}
}
d->last_pixel_ratio_ = pixelRatio(); d->last_pixel_ratio_ = pixelRatio();

View File

@ -85,10 +85,12 @@ struct GuiWorkArea::Private
/// ///
void dispatch(FuncRequest const & cmd0); void dispatch(FuncRequest const & cmd0);
/// hide the visible caret, if it is visible /// recompute the shape and position of the caret
void hideCaret(); void updateCaretGeometry();
/// show the caret if it is not visible /// show the caret if it is not visible
void showCaret(); void showCaret();
/// hide the caret if it is visible
void hideCaret();
/// Set the range and value of the scrollbar and connect to its valueChanged /// Set the range and value of the scrollbar and connect to its valueChanged
/// signal. /// signal.
void updateScrollbar(); void updateScrollbar();