From 919e3ad0cbe49ca619b8274a044918d2e312722e Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Sun, 3 Sep 2017 23:15:40 +0200 Subject: [PATCH] ui: Fixed code color not reset after annotation in dark schemes --- src/lib_gui/qt/utility/QtHighlighter.cpp | 36 ++++++++++++++++++++++++ src/lib_gui/qt/utility/QtHighlighter.h | 6 +++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/lib_gui/qt/utility/QtHighlighter.cpp b/src/lib_gui/qt/utility/QtHighlighter.cpp index 72b0b920..6adf4ded 100644 --- a/src/lib_gui/qt/utility/QtHighlighter.cpp +++ b/src/lib_gui/qt/utility/QtHighlighter.cpp @@ -199,6 +199,8 @@ void QtHighlighter::highlightRange(int startLine, int endLine) { if (!m_highlightedLines[index]) { + applyFormatWithoutRanges(it.position(), it.position() + it.length() - 1, s_textFormat, m_ranges); + foreach (const HighlightingRule &rule, m_highlightingRules) { formatBlock(it, rule, &m_ranges, false); @@ -242,6 +244,40 @@ void QtHighlighter::applyFormat(int startPosition, int endPosition, const QTextC cursor.setCharFormat(format); } +void QtHighlighter::applyFormatWithoutRanges( + int startPosition, int endPosition, const QTextCharFormat& format, const std::vector>& ranges +){ + std::vector> highlightRanges; + + for (const std::pair p : ranges) + { + if (p.first <= startPosition && p.second >= endPosition) + { + return; + } + + if (p.first > startPosition && p.first < endPosition) + { + highlightRanges.push_back(std::pair(startPosition, p.first - 1)); + } + + if (p.second > startPosition && p.second < endPosition) + { + highlightRanges.push_back(std::pair(p.second + 1, endPosition)); + } + } + + if (!highlightRanges.size()) + { + highlightRanges.push_back(std::pair(startPosition, endPosition)); + } + + for (const std::pair p : highlightRanges) + { + applyFormat(p.first, p.second, format); + } +} + QTextCharFormat QtHighlighter::getFormat(int startPosition, int endPosition) const { QTextCursor cursor(document()); diff --git a/src/lib_gui/qt/utility/QtHighlighter.h b/src/lib_gui/qt/utility/QtHighlighter.h index f264db0c..989f8fbb 100644 --- a/src/lib_gui/qt/utility/QtHighlighter.h +++ b/src/lib_gui/qt/utility/QtHighlighter.h @@ -21,6 +21,9 @@ public: void rehighlightLines(const std::vector& lines); void applyFormat(int startPosition, int endPosition, const QTextCharFormat& format); + void applyFormatWithoutRanges( + int startPosition, int endPosition, const QTextCharFormat& format, const std::vector>& ranges); + QTextCharFormat getFormat(int startPosition, int endPosition) const; private: @@ -36,7 +39,8 @@ private: void highlightMultiLineComments(std::vector>* ranges); bool isInRange(int index, const std::vector>& ranges) const; - void formatBlock(const QTextBlock& block, const HighlightingRule& rule, std::vector>* ranges, bool saveRange); + void formatBlock( + const QTextBlock& block, const HighlightingRule& rule, std::vector>* ranges, bool saveRange); QTextDocument* document() const;