Avoid accessing global font settings from syntax highlighters

Change-Id: Ic015f7449351166ec41a7745355ddc63504f6442
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Eike Ziller
2018-09-18 12:46:48 +02:00
parent dd0347d1ee
commit 6ea686faa9
4 changed files with 11 additions and 2 deletions

View File

@@ -569,7 +569,7 @@ void Highlighter::applyFormat(int offset,
// think this approach would fit better. If there are other ideas... // think this approach would fit better. If there are other ideas...
QBrush bg = format.background(); QBrush bg = format.background();
if (bg.style() == Qt::NoBrush) if (bg.style() == Qt::NoBrush)
bg = TextEditorSettings::fontSettings().toTextCharFormat(C_TEXT).background(); bg = fontSettings().toTextCharFormat(C_TEXT).background();
if (itemData->color().isValid() && isReadableOn(bg.color(), itemData->color())) if (itemData->color().isValid() && isReadableOn(bg.color(), itemData->color()))
format.setForeground(itemData->color()); format.setForeground(itemData->color());
if (itemData->isItalicSpecified()) if (itemData->isItalicSpecified())

View File

@@ -66,6 +66,7 @@ public:
void applyFormatChanges(int from, int charsRemoved, int charsAdded); void applyFormatChanges(int from, int charsRemoved, int charsAdded);
void updateFormats(const FontSettings &fontSettings); void updateFormats(const FontSettings &fontSettings);
FontSettings fontSettings;
QVector<QTextCharFormat> formatChanges; QVector<QTextCharFormat> formatChanges;
QTextBlock currentBlock; QTextBlock currentBlock;
bool rehighlightPending = false; bool rehighlightPending = false;
@@ -765,6 +766,12 @@ void SyntaxHighlighter::setFontSettings(const FontSettings &fontSettings)
Q_D(SyntaxHighlighter); Q_D(SyntaxHighlighter);
d->updateFormats(fontSettings); d->updateFormats(fontSettings);
} }
FontSettings SyntaxHighlighter::fontSettings() const
{
Q_D(const SyntaxHighlighter);
return d->fontSettings;
}
/*! /*!
The syntax highlighter is not anymore reacting to the text document if \a noAutmatic is The syntax highlighter is not anymore reacting to the text document if \a noAutmatic is
\c true. \c true.
@@ -836,6 +843,7 @@ void SyntaxHighlighter::highlightBlock(const QString &text)
void SyntaxHighlighterPrivate::updateFormats(const FontSettings &fontSettings) void SyntaxHighlighterPrivate::updateFormats(const FontSettings &fontSettings)
{ {
this->fontSettings = fontSettings;
// C_TEXT is handled by text editor's foreground and background color, // C_TEXT is handled by text editor's foreground and background color,
// so use empty format for that // so use empty format for that
for (const auto &pair : qAsConst(formatCategories)) { for (const auto &pair : qAsConst(formatCategories)) {

View File

@@ -69,6 +69,7 @@ public:
// Don't call in constructors of derived classes // Don't call in constructors of derived classes
virtual void setFontSettings(const TextEditor::FontSettings &fontSettings); virtual void setFontSettings(const TextEditor::FontSettings &fontSettings);
TextEditor::FontSettings fontSettings() const;
void setNoAutomaticHighlighting(bool noAutomatic); void setNoAutomaticHighlighting(bool noAutomatic);

View File

@@ -64,7 +64,7 @@ public:
void BaseAnnotationHighlighterPrivate::updateOtherFormats() void BaseAnnotationHighlighterPrivate::updateOtherFormats()
{ {
m_background = TextEditor::TextEditorSettings::fontSettings() m_background = q->fontSettings()
.toTextCharFormat(TextEditor::C_TEXT) .toTextCharFormat(TextEditor::C_TEXT)
.brushProperty(QTextFormat::BackgroundBrush) .brushProperty(QTextFormat::BackgroundBrush)
.color(); .color();