mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +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.
This commit is contained in:
parent
d19ade9a61
commit
7f85024f80
@ -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();
|
||||
|
||||
// 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