commit 2b1b33189dc4113d2744cb9a68e691fbca4b884a
Author: Jean-Marc Lasgouttes <[email protected]>
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();