diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-02-21 08:37:57 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-02-24 07:48:17 +0000 |
commit | 82cfe722cc957a2e05d4bcdde46a32dcd3506bd0 (patch) | |
tree | be276e2e9e97708dc33b0d5d89f4ae3759b94694 | |
parent | 6507dbe2fbbbfc9b085e8554ca330bfd7681ed89 (diff) | |
download | qttools-82cfe722cc957a2e05d4bcdde46a32dcd3506bd0.tar.gz |
Qt Designer: Adapt style sheet editor colors for dark mode
Add a struct for passing the colors to the CSS highlighter and
populate it in StyleSheetEditor looking at the widget palette.
Fixes: QTCREATORBUG-27087
Change-Id: I1be7616e0e1c3d3898de169fb66c7203c7257523
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
(cherry picked from commit b1b5bc57858a97aa2a4afc6d9b5f9400b0765f50)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/designer/src/lib/shared/csshighlighter.cpp | 19 | ||||
-rw-r--r-- | src/designer/src/lib/shared/csshighlighter_p.h | 17 | ||||
-rw-r--r-- | src/designer/src/lib/shared/stylesheeteditor.cpp | 18 |
3 files changed, 43 insertions, 11 deletions
diff --git a/src/designer/src/lib/shared/csshighlighter.cpp b/src/designer/src/lib/shared/csshighlighter.cpp index 115b77c17..00d6ab9f2 100644 --- a/src/designer/src/lib/shared/csshighlighter.cpp +++ b/src/designer/src/lib/shared/csshighlighter.cpp @@ -32,8 +32,9 @@ QT_BEGIN_NAMESPACE namespace qdesigner_internal { -CssHighlighter::CssHighlighter(QTextDocument *document) -: QSyntaxHighlighter(document) +CssHighlighter::CssHighlighter(const CssHighlightColors &colors, + QTextDocument *document) + : QSyntaxHighlighter(document), m_colors(colors) { } @@ -143,26 +144,26 @@ void CssHighlighter::highlight(const QString &text, int start, int length, int s switch (state) { case Selector: - setFormat(start, length, Qt::darkRed); + setFormat(start, length, m_colors.selector); break; case Property: - setFormat(start, length, Qt::blue); + setFormat(start, length, m_colors.property); break; case Value: - setFormat(start, length, Qt::black); + setFormat(start, length, m_colors.value); break; case Pseudo1: - setFormat(start, length, Qt::darkRed); + setFormat(start, length, m_colors.pseudo1); break; case Pseudo2: - setFormat(start, length, Qt::darkRed); + setFormat(start, length, m_colors.pseudo2); break; case Quote: - setFormat(start, length, Qt::darkMagenta); + setFormat(start, length, m_colors.quote); break; case Comment: case MaybeCommentEnd: - format.setForeground(Qt::darkGreen); + format.setForeground(m_colors.comment); setFormat(start, length, format); break; default: diff --git a/src/designer/src/lib/shared/csshighlighter_p.h b/src/designer/src/lib/shared/csshighlighter_p.h index 8af8cd337..0479ba75d 100644 --- a/src/designer/src/lib/shared/csshighlighter_p.h +++ b/src/designer/src/lib/shared/csshighlighter_p.h @@ -41,17 +41,30 @@ #define CSSHIGHLIGHTER_H #include <QtGui/qsyntaxhighlighter.h> +#include <QtGui/qcolor.h> #include "shared_global_p.h" QT_BEGIN_NAMESPACE namespace qdesigner_internal { +struct CssHighlightColors +{ + QColor selector; + QColor property; + QColor value; + QColor pseudo1; + QColor pseudo2; + QColor quote; + QColor comment; +}; + class QDESIGNER_SHARED_EXPORT CssHighlighter : public QSyntaxHighlighter { Q_OBJECT public: - explicit CssHighlighter(QTextDocument *document); + explicit CssHighlighter(const CssHighlightColors &colors, + QTextDocument *document); protected: void highlightBlock(const QString&) override; @@ -60,6 +73,8 @@ protected: private: enum State { Selector, Property, Value, Pseudo, Pseudo1, Pseudo2, Quote, MaybeComment, Comment, MaybeCommentEnd }; + + const CssHighlightColors m_colors; }; } // namespace qdesigner_internal diff --git a/src/designer/src/lib/shared/stylesheeteditor.cpp b/src/designer/src/lib/shared/stylesheeteditor.cpp index 2956d1abc..48d38e6a7 100644 --- a/src/designer/src/lib/shared/stylesheeteditor.cpp +++ b/src/designer/src/lib/shared/stylesheeteditor.cpp @@ -69,9 +69,25 @@ namespace qdesigner_internal { StyleSheetEditor::StyleSheetEditor(QWidget *parent) : QTextEdit(parent) { + enum : int { DarkThreshold = 200 }; // Observed 239 on KDE/Dark + setTabStopDistance(fontMetrics().horizontalAdvance(QLatin1Char(' ')) * 4); setAcceptRichText(false); - new CssHighlighter(document()); + + const QColor textColor = palette().color(QPalette::WindowText); + const bool darkMode = textColor.red() > DarkThreshold + && textColor.green() > DarkThreshold + && textColor.blue() > DarkThreshold; + + CssHighlightColors colors; + colors.selector = darkMode ? QColor(Qt::red).lighter() : QColor(Qt::darkRed); + const QColor blue(Qt::blue); + colors.property = darkMode ? blue.lighter() : blue; + colors.pseudo1 = colors.pseudo2 = colors.value = textColor; + colors.quote = darkMode ? Qt::magenta : Qt::darkMagenta; + colors.comment = darkMode ? Qt::green : Qt::darkGreen; + + new CssHighlighter(colors, document()); } // --- StyleSheetEditorDialog |