summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-08-23 11:32:12 +0200
committerEike Ziller <eike.ziller@qt.io>2018-08-24 08:15:21 +0000
commit601eebd832e8f8a39d661031a44d5ee3c53bf718 (patch)
tree907773e7f7397f287c0f56ac32877cfa6df71726
parentbba35ceff46bc0c6b4338d9a2e33389c783329f9 (diff)
downloadqt-creator-601eebd832e8f8a39d661031a44d5ee3c53bf718.tar.gz
Fix painting of current line in generic and python editors
The generic highlighter and the python editor explicitly map some tokens to the format C_TEXT. Unfortunately this format is special, because it's foreground and background colors are handled by setting the editor's palette, and should not be used for setting the format on characters. If the format is explicitly set on characters, their background will be oblique and overpaint e.g. the highlight for the current line, which looks pretty ugly. Handle this directly in SyntaxHighlighter::formatForCategory for all syntax highlighters, by returning an empty QTextCharFormat for C_TEXT. Change-Id: Ifaeb556754ca8106ad6e55d7062b13b45457a809 Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r--src/plugins/texteditor/generichighlighter/highlighter.cpp12
-rw-r--r--src/plugins/texteditor/syntaxhighlighter.cpp8
-rw-r--r--tests/auto/generichighlighter/highlighterengine/highlighterengine.pro2
-rw-r--r--tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs1
4 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/texteditor/generichighlighter/highlighter.cpp b/src/plugins/texteditor/generichighlighter/highlighter.cpp
index e7e5e713ab..8ece3f462e 100644
--- a/src/plugins/texteditor/generichighlighter/highlighter.cpp
+++ b/src/plugins/texteditor/generichighlighter/highlighter.cpp
@@ -23,17 +23,19 @@
**
****************************************************************************/
-#include "highlighter.h"
-#include "highlightdefinition.h"
#include "context.h"
-#include "rule.h"
-#include "itemdata.h"
+#include "highlightdefinition.h"
+#include "highlighter.h"
#include "highlighterexception.h"
+#include "itemdata.h"
#include "progressdata.h"
#include "reuse.h"
+#include "rule.h"
#include "tabsettings.h"
#include <coreplugin/messagemanager.h>
+#include <texteditor/fontsettings.h>
+#include <texteditor/texteditorsettings.h>
#include <utils/qtcassert.h>
#include <QCoreApplication>
@@ -567,7 +569,7 @@ void Highlighter::applyFormat(int offset,
// think this approach would fit better. If there are other ideas...
QBrush bg = format.background();
if (bg.style() == Qt::NoBrush)
- bg = formatForCategory(C_TEXT).background();
+ bg = TextEditorSettings::fontSettings().toTextCharFormat(C_TEXT).background();
if (itemData->color().isValid() && isReadableOn(bg.color(), itemData->color()))
format.setForeground(itemData->color());
if (itemData->isItalicSpecified())
diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp
index f72b563ca5..621df4f236 100644
--- a/src/plugins/texteditor/syntaxhighlighter.cpp
+++ b/src/plugins/texteditor/syntaxhighlighter.cpp
@@ -836,8 +836,12 @@ void SyntaxHighlighter::highlightBlock(const QString &text)
void SyntaxHighlighterPrivate::updateFormats(const FontSettings &fontSettings)
{
- for (const auto &pair : qAsConst(formatCategories))
- formats[pair.first] = fontSettings.toTextCharFormat(pair.second);
+ // C_TEXT is handled by text editor's foreground and background color,
+ // so use empty format for that
+ for (const auto &pair : qAsConst(formatCategories)) {
+ formats[pair.first] = pair.second == C_TEXT ? QTextCharFormat()
+ : fontSettings.toTextCharFormat(pair.second);
+ }
whitespaceFormat = fontSettings.toTextCharFormat(C_VISUAL_WHITESPACE);
}
diff --git a/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro b/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro
index 3270181891..d78de7871e 100644
--- a/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro
+++ b/tests/auto/generichighlighter/highlighterengine/highlighterengine.pro
@@ -1,4 +1,4 @@
-QTC_PLUGIN_DEPENDS += coreplugin
+QTC_PLUGIN_DEPENDS += coreplugin texteditor
include(../../qttest.pri)
QT += gui
PLUGINSDIR = $$IDE_SOURCE_TREE/src/plugins
diff --git a/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs b/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs
index 3ea2c0da68..b0abba7776 100644
--- a/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs
+++ b/tests/auto/generichighlighter/highlighterengine/highlighterengine.qbs
@@ -4,6 +4,7 @@ QtcAutotest {
name: "Highlighter engine autotest"
Depends { name: "Core" }
Depends { name: "Utils" }
+ Depends { name: "TextEditor" }
Depends { name: "Qt.widgets" }
Group {
name: "Sources from TextEditor plugin"