diff options
author | David Schulz <[email protected]> | 2023-10-12 10:05:38 +0200 |
---|---|---|
committer | David Schulz <[email protected]> | 2023-10-13 11:37:29 +0000 |
commit | 483a340e7347e99b69ba5b2e23c8059198d52b66 (patch) | |
tree | fdc012e1cac4b9c077d4f34aaff9d4ddb8961aef /src/libs/utils/textutils.cpp | |
parent | 0aded7311ab7a46e11c757e1dad39221c2f451fd (diff) |
TextEditor: speed up searching in huge documents
Avoid creating QTextCursors for checking whether a search result is
inside the find scope. QTextCursor::setPosition seems to layout the
block the cursor is positioned at, which is not for free and not needed
to verify whether a search result is inside the find scope.
Change-Id: Ia1658fbbaa89a61f862e0b97eaa5b059972e2311
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/libs/utils/textutils.cpp')
-rw-r--r-- | src/libs/utils/textutils.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp index 252152415f8..f8ada6cca68 100644 --- a/src/libs/utils/textutils.cpp +++ b/src/libs/utils/textutils.cpp @@ -64,6 +64,16 @@ Position Position::fromCursor(const QTextCursor &c) return c.isNull() ? Position{} : Position{c.blockNumber() + 1, c.positionInBlock()}; } +int Position::toPositionInDocument(const QTextDocument *document) const +{ + QTC_ASSERT(document, return -1); + const QTextBlock block = document->findBlockByNumber(line - 1); + if (block.isValid()) + return block.position() + qMin(column, block.length() - 1); + + return -1; +} + int Range::length(const QString &text) const { if (end.line < begin.line) |