commit 8cfe8d1855250086a50d874072d3629c6016f8cb Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Sat Feb 8 21:09:23 2025 +0100
Avoid unnecessary creation of a row around caret position. When trying to see whether the caret has affected a row, do not create this row (with redoParagraph) if it did not exist. --- src/BufferView.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 4b1403478d..668c0a1c92 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -3815,22 +3815,26 @@ void BufferView::draw(frontend::Painter & pain, bool paint_caret) } // If a caret has to be painted, mark its text row as dirty to - //make sure that it will be repainted on next redraw. + // make sure that it will be repainted on next redraw. /* FIXME: investigate whether this can be avoided when the cursor did not * move at all */ if (paint_caret) { Cursor cur(d->cursor_); while (cur.depth() > 1) { - if (!cur.inTexted()) - break; - TextMetrics const & tm = textMetrics(cur.text()); - if (d->caret_geometry_.left >= tm.origin().x - && d->caret_geometry_.right <= tm.origin().x + tm.dim().width()) - break; + if (cur.inTexted()) { + TextMetrics const & tm = textMetrics(cur.text()); + if (d->caret_geometry_.left >= tm.origin().x + && d->caret_geometry_.right <= tm.origin().x + tm.dim().width()) + break; + } cur.pop(); } - cur.textRow().changed(true); + TextMetrics const & tm = textMetrics(cur.text()); + if (tm.contains(cur.pit())) { + ParagraphMetrics const & pm = tm.parMetrics(cur.pit()); + pm.getRow(cur.pos(), cur.boundary()).changed(true); + } } } -- lyx-cvs mailing list lyx-cvs@lists.lyx.org https://lists.lyx.org/mailman/listinfo/lyx-cvs