commit 2b1b33189dc4113d2744cb9a68e691fbca4b884a
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Oct 2 17:07:31 2017 +0200

    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 f4380da..c4463e3 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 ef2bb7e..de20397 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();

Reply via email to