mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
In the no-draw phase, do not cache the positions of not visible insets
This can make a big difference for a very large branch that contains
lots of equations.
This is complementary to the previous patch, since instead of reducing
the number of calls to updatePosCache, we make it faster.
In the same test of scrolling with mouse wheel through the
branch-test.lyx document, one finds a 23% improvement for
BufferView::updateMetrics().
Part of bug #12297.
(cherry picked from commit 7f85024f80
)
This commit is contained in:
parent
e51f9d9f88
commit
5e1c414a21
@ -2000,6 +2000,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
|
||||
if (pm.rows().empty())
|
||||
return;
|
||||
size_t const nrows = pm.rows().size();
|
||||
int const wh = bv_->workHeight();
|
||||
// Remember left and right margin for drawing math numbers
|
||||
Changer changeleft = changeVar(pi.leftx, x + leftMargin(pit));
|
||||
Changer changeright = changeVar(pi.rightx, x + width() - rightMargin(pit));
|
||||
@ -2014,15 +2015,17 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
|
||||
if (i)
|
||||
y += row.ascent();
|
||||
|
||||
RowPainter rp(pi, *text_, row, row_x, y);
|
||||
|
||||
rp.paintOnlyInsets();
|
||||
// It is not needed to draw on screen if we are not inside
|
||||
bool const inside = (y + row.descent() >= 0 && y - row.ascent() < wh);
|
||||
if (inside) {
|
||||
RowPainter rp(pi, *text_, row, row_x, y);
|
||||
rp.paintOnlyInsets();
|
||||
}
|
||||
y += row.descent();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
int const ww = bv_->workHeight();
|
||||
Cursor const & cur = bv_->cursor();
|
||||
DocIterator sel_beg = cur.selectionBegin();
|
||||
DocIterator sel_end = cur.selectionEnd();
|
||||
@ -2065,7 +2068,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
|
||||
|
||||
// It is not needed to draw on screen if we are not inside.
|
||||
bool const inside = (y + row.descent() >= 0
|
||||
&& y - row.ascent() < ww);
|
||||
&& y - row.ascent() < wh);
|
||||
if (!inside) {
|
||||
// Inset positions have already been set in nodraw stage.
|
||||
y += row.descent();
|
||||
|
Loading…
Reference in New Issue
Block a user