From 2b1b33189dc4113d2744cb9a68e691fbca4b884a Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Mon, 2 Oct 2017 17:07:31 +0200 Subject: [PATCH] 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. (cherry picked from commit add342d088c1b65343234576a35e567507fb2d49) --- src/frontends/qt4/GuiWorkArea.cpp | 28 ++++++++++++------------- src/frontends/qt4/GuiWorkArea_Private.h | 6 ++++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index f4380da5e8..c4463e3d3b 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -469,14 +469,12 @@ void GuiWorkArea::scheduleRedraw(bool update_metrics) // update caret position, because otherwise it has to wait until // the blinking interval is over - if (d->caret_visible_) { - d->hideCaret(); - d->showCaret(); - } + d->updateCaretGeometry(); LYXERR(Debug::WORKAREA, "WorkArea::redraw screen"); 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 /// because \c BufferView::updateScrollbar() is called in \c BufferView::draw(). d->updateScrollbar(); @@ -574,7 +572,7 @@ void GuiWorkArea::Private::resizeBufferView() buffer_view_->resize(p->viewport()->width(), p->viewport()->height()); if (caret_in_view) buffer_view_->scrollToCursor(); - p->viewport()->update(); + updateCaretGeometry(); // Update scrollbars which might have changed due different // BufferView dimension. This is especially important when the @@ -592,11 +590,8 @@ void GuiWorkArea::Private::resizeBufferView() } -void GuiWorkArea::Private::showCaret() +void GuiWorkArea::Private::updateCaretGeometry() { - if (caret_visible_) - return; - Point point; int h = 0; buffer_view_->caretPosAndHeight(point, h); @@ -631,7 +626,15 @@ void GuiWorkArea::Private::showCaret() point.x_ -= buffer_view_->horizScrollOffset(); 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()); } @@ -1243,13 +1246,8 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev) // LYXERR(Debug::PAINTING, "paintEvent begin: x: " << rc.x() // << " 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(); - if (d->caret_visible_) { - d->hideCaret(); - d->showCaret(); - } - } d->last_pixel_ratio_ = pixelRatio(); diff --git a/src/frontends/qt4/GuiWorkArea_Private.h b/src/frontends/qt4/GuiWorkArea_Private.h index ef2bb7e1df..de20397c71 100644 --- a/src/frontends/qt4/GuiWorkArea_Private.h +++ b/src/frontends/qt4/GuiWorkArea_Private.h @@ -85,10 +85,12 @@ struct GuiWorkArea::Private /// void dispatch(FuncRequest const & cmd0); - /// hide the visible caret, if it is visible - void hideCaret(); + /// recompute the shape and position of the caret + void updateCaretGeometry(); /// show the caret if it is not visible void showCaret(); + /// hide the caret if it is visible + void hideCaret(); /// Set the range and value of the scrollbar and connect to its valueChanged /// signal. void updateScrollbar(); -- 2.39.2