From 0f1fdaaa97e9fe01f0e97ca56f0e2380ba248a7e Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Wed, 15 Jul 2015 22:48:49 +0200 Subject: [PATCH] Remove extra row painting added by horizontal scroll branch The bug workaround added an extra repaint, which can be very bad when editing large tables. It turns out that the bug this is trying to fix is due to the handling of LFUN_LINE_END in InsetMathGrid. Adding the same code as in InsetMathNest fixes the problem. The workaround can therefore be removed. --- src/BufferView.cpp | 24 ------------------------ src/mathed/InsetMathGrid.cpp | 14 ++++++++------ 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 41d85bf400..19425cc1c5 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -46,7 +46,6 @@ #include "Paragraph.h" #include "ParagraphParameters.h" #include "ParIterator.h" -#include "RowPainter.h" #include "Session.h" #include "Text.h" #include "TextClass.h" @@ -2987,29 +2986,6 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi) // Set the row on which the cursor lives. setCurrentRowSlice(rowSlice); - /** FIXME: the code below adds an extraneous computation of inset - * positions, and can therefore be bad for performance (think for - * example about a very large tabular inset. Redawing the row - * where it is means redrawing the whole screen). - * - * The bug that this fixes is the following: assume that there is - * a very large math inset. Upon entering the inset, when pressing - * `End', the row is not scrolled and the cursor is not visible. I - * am not sure why the extra row computation fixes the problem, - * actually. - * - * A proper fix should be found and this code should be removed. - */ - // Force the recomputation of inset positions - bool const drawing = pi.pain.isDrawingEnabled(); - pi.pain.setDrawingEnabled(false); - // No need to care about vertical position. - RowPainter rp(pi, buffer().text(), d->cursor_.bottom().pit(), row, - -d->horiz_scroll_offset_, 0); - rp.paintText(); - pi.pain.setDrawingEnabled(drawing); - /** END of bad code */ - // Current x position of the cursor in pixels int const cur_x = getPos(d->cursor_).x_; diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 2591e5d9d8..7676420d94 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -1655,12 +1655,13 @@ void InsetMathGrid::doDispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_LINE_BEGIN_SELECT: case LFUN_LINE_BEGIN: - case LFUN_WORD_BACKWARD_SELECT: case LFUN_WORD_BACKWARD: - case LFUN_WORD_LEFT_SELECT: case LFUN_WORD_LEFT: + cur.screenUpdateFlags(Update::Decoration | Update::FitCursor); + case LFUN_LINE_BEGIN_SELECT: + case LFUN_WORD_BACKWARD_SELECT: + case LFUN_WORD_LEFT_SELECT: cur.selHandle(act == LFUN_WORD_BACKWARD_SELECT || act == LFUN_WORD_LEFT_SELECT || act == LFUN_LINE_BEGIN_SELECT); @@ -1679,12 +1680,13 @@ void InsetMathGrid::doDispatch(Cursor & cur, FuncRequest & cmd) } break; - case LFUN_WORD_FORWARD_SELECT: case LFUN_WORD_FORWARD: - case LFUN_WORD_RIGHT_SELECT: case LFUN_WORD_RIGHT: - case LFUN_LINE_END_SELECT: case LFUN_LINE_END: + cur.screenUpdateFlags(Update::Decoration | Update::FitCursor); + case LFUN_WORD_FORWARD_SELECT: + case LFUN_WORD_RIGHT_SELECT: + case LFUN_LINE_END_SELECT: cur.selHandle(act == LFUN_WORD_FORWARD_SELECT || act == LFUN_WORD_RIGHT_SELECT || act == LFUN_LINE_END_SELECT);