Editor: optimize clearing layouts after edit width change

Change-Id: Ic3f700c48f05e2d231021379a5e154b23c2d1858
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2025-02-28 15:04:35 +01:00
parent 5a6088e07f
commit 15878ac377

View File

@@ -337,7 +337,17 @@ void PlainTextDocumentLayout::requestUpdate()
void PlainTextDocumentLayout::setTextWidth(qreal newWidth)
{
d->width = d->maximumWidth = newWidth;
d->relayout();
bool layoutChanged = false;
for (QTextBlock block = document()->firstBlock(); block.isValid(); block = block.next()) {
QTextLayout *tl = block.layout();
if (tl->lineCount() == 0 || (tl->lineCount() == 1 && tl->lineAt(0).naturalTextWidth() < newWidth))
continue;
layoutChanged = true;
tl->clearLayout();
block.setLineCount(block.isVisible() ? 1 : 0);
}
if (layoutChanged)
emit update();
}
qreal PlainTextDocumentLayout::textWidth() const