Avoid metrics computation on resize when width did not change

Entering a math inset triggers a work area reize because the math
toobars appear automatically. However, by default these toolbars are
at the bottom of the screen and their presence does not change the
typesetting of paragraphs. Therefore it is useful to avoid a call to
updateMetrics() in the case where the width of the work area did not
change.

Part of bug #12297.
This commit is contained in:
Jean-Marc Lasgouttes 2023-11-27 11:46:52 +01:00
parent 1d1f95d2ed
commit f7218cec18

View File

@ -2484,14 +2484,16 @@ void BufferView::clearSelection()
void BufferView::resize(int width, int height) void BufferView::resize(int width, int height)
{ {
// Update from work area
width_ = width;
height_ = height; height_ = height;
// Update metrics only if width has changed
if (width != width_) {
width_ = width;
// Clear the paragraph height cache. // Clear the paragraph height cache.
d->par_height_.clear(); d->par_height_.clear();
// Redo the metrics. // Redo the metrics.
updateMetrics(); updateMetrics();
}
} }
@ -3131,6 +3133,8 @@ void BufferView::updateMetrics(bool force)
if (!ready()) if (!ready())
return; return;
//LYXERR0("updateMetrics " << _v_(force));
Text & buftext = buffer_.text(); Text & buftext = buffer_.text();
pit_type const lastpit = int(buftext.paragraphs().size()) - 1; pit_type const lastpit = int(buftext.paragraphs().size()) - 1;