From ce9638d64cfe80ddf61b214d2ad4480f8a2f034b Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 10 Oct 2024 11:05:10 +0200 Subject: [PATCH] Utils: Allow highlighting to be done asynchronously Change-Id: Ief0e1ba2e2c32b6ad112f4adc9b582b03a521fad Reviewed-by: hjk --- src/libs/utils/textutils.cpp | 11 +++++++++-- src/libs/utils/textutils.h | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp index c3b2822ae3e..9840e653561 100644 --- a/src/libs/utils/textutils.cpp +++ b/src/libs/utils/textutils.cpp @@ -4,6 +4,7 @@ #include "textutils.h" #include "qtcassert.h" +#include #include #include #include @@ -299,14 +300,20 @@ static HighlightCallback &codeHighlighter() return s_highlighter; } -QTextDocument *highlightCode(const QString &code, const QString &mimeType) +QFuture highlightCode(const QString &code, const QString &mimeType) { if (const auto highlighter = codeHighlighter()) return highlighter(code, mimeType); QTextDocument *doc = new QTextDocument; doc->setPlainText(code); - return doc; + + QPromise promise; + promise.start(); + promise.addResult(doc); + promise.finish(); + + return promise.future(); } void setCodeHighlighter(const HighlightCallback &highlighter) diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h index a900cb6e9d4..3d6d8cb5efe 100644 --- a/src/libs/utils/textutils.h +++ b/src/libs/utils/textutils.h @@ -5,6 +5,7 @@ #include "utils_global.h" +#include #include #include @@ -84,8 +85,9 @@ QTCREATOR_UTILS_EXPORT QString utf16LineTextInUtf8Buffer(const QByteArray &utf8B QTCREATOR_UTILS_EXPORT QDebug &operator<<(QDebug &stream, const Position &pos); -using HighlightCallback = std::function; -QTCREATOR_UTILS_EXPORT QTextDocument *highlightCode(const QString &code, const QString &mimeType); +using HighlightCallback = std::function(const QString &, const QString &)>; +QTCREATOR_UTILS_EXPORT QFuture highlightCode( + const QString &code, const QString &mimeType); QTCREATOR_UTILS_EXPORT void setCodeHighlighter(const HighlightCallback &highlighter); } // Text