From 15878ac37792aae56065cf878c97710469d15a42 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 28 Feb 2025 15:04:35 +0100 Subject: [PATCH] Editor: optimize clearing layouts after edit width change Change-Id: Ic3f700c48f05e2d231021379a5e154b23c2d1858 Reviewed-by: Christian Stenger --- src/libs/utils/plaintextedit/plaintextedit.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/plaintextedit/plaintextedit.cpp b/src/libs/utils/plaintextedit/plaintextedit.cpp index a4e21243299..e7b8e510df4 100644 --- a/src/libs/utils/plaintextedit/plaintextedit.cpp +++ b/src/libs/utils/plaintextedit/plaintextedit.cpp @@ -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