From 197d80f99b987e70ce102f47f0e9a1c393601320 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 31 Jul 2023 12:14:14 +0200 Subject: [PATCH] Markdown: Use different background color for code Sets the background color for code blocks and for inline code (actually for any fixed font text). Change-Id: I1365111b38314a8e0a129aca35d754ad3f2f13bb Reviewed-by: Cristian Adam --- src/libs/utils/stringutils.cpp | 29 +++++++++++++++++++++++++++-- src/libs/utils/stringutils.h | 3 +++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp index a33a08e3d99..f91a8dc4ce9 100644 --- a/src/libs/utils/stringutils.cpp +++ b/src/libs/utils/stringutils.cpp @@ -5,6 +5,7 @@ #include "filepath.h" #include "qtcassert.h" +#include "stylehelper.h" #include "theme/theme.h" #include "utilstr.h" @@ -18,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -573,16 +575,28 @@ QTCREATOR_UTILS_EXPORT int endOfNextWord(const QString &string, int position) MarkdownHighlighter::MarkdownHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) , h2Brush(Qt::NoBrush) + , m_codeBgBrush(Qt::NoBrush) { parent->setIndentWidth(30); // default value is 40 } +QBrush MarkdownHighlighter::codeBgBrush() +{ + if (m_codeBgBrush.style() == Qt::NoBrush) { + m_codeBgBrush = StyleHelper::mergedColors(QGuiApplication::palette().color(QPalette::Text), + QGuiApplication::palette().color(QPalette::Base), + 10); + } + return m_codeBgBrush; +} + void MarkdownHighlighter::highlightBlock(const QString &text) { if (text.isEmpty()) return; - QTextBlockFormat fmt = currentBlock().blockFormat(); + const QTextBlock block = currentBlock(); + QTextBlockFormat fmt = block.blockFormat(); QTextCursor cur(currentBlock()); if (fmt.hasProperty(QTextFormat::HeadingLevel)) { fmt.setTopMargin(10); @@ -610,7 +624,8 @@ void MarkdownHighlighter::highlightBlock(const QString &text) } cur.setBlockFormat(fmt); } else if (fmt.hasProperty(QTextFormat::BlockCodeLanguage) && fmt.indent() == 0) { - // set identation for code blocks + // set identation and background for code blocks + fmt.setBackground(codeBgBrush()); fmt.setIndent(1); cur.setBlockFormat(fmt); } @@ -624,6 +639,16 @@ void MarkdownHighlighter::highlightBlock(const QString &text) list->setFormat(listFmt); } } + + // background color of code + for (auto it = block.begin(); it != block.end(); ++it) { + const QTextFragment fragment = it.fragment(); + QTextCharFormat fmt = fragment.charFormat(); + if (fmt.fontFixedPitch()) { + fmt.setBackground(codeBgBrush()); + setFormat(fragment.position() - block.position(), fragment.length(), fmt); + } + } } } // namespace Utils diff --git a/src/libs/utils/stringutils.h b/src/libs/utils/stringutils.h index 3bab6110cf3..b27a2efc6f0 100644 --- a/src/libs/utils/stringutils.h +++ b/src/libs/utils/stringutils.h @@ -130,7 +130,10 @@ public: void highlightBlock(const QString &text); private: + QBrush codeBgBrush(); + QBrush h2Brush; + QBrush m_codeBgBrush; }; } // namespace Utils