Commit c99464dd authored by Eike Ziller's avatar Eike Ziller

TextEditors: Remove unnecessary duplicated caching

Change-Id: I3800360e3b9bd6874d6852dabcfc7a9a066e52c2
Reviewed-by: default avatarEike Ziller <eike.ziller@digia.com>
parent 13ee7065
......@@ -773,7 +773,8 @@ void CPPEditorWidget::abortRename()
{
if (m_currentRenameSelection <= NoCurrentRenameSelection)
return;
m_renameSelections[m_currentRenameSelection].format = m_occurrencesFormat;
m_renameSelections[m_currentRenameSelection].format
= baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES);
m_currentRenameSelection = NoCurrentRenameSelection;
m_currentRenameSelectionBegin = QTextCursor();
m_currentRenameSelectionEnd = QTextCursor();
......@@ -882,7 +883,7 @@ void CPPEditorWidget::markSymbolsNow()
cursor.setPosition(cursor.position() + len, QTextCursor::KeepAnchor);
QTextEdit::ExtraSelection sel;
sel.format = m_occurrencesFormat;
sel.format = baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES);
sel.cursor = cursor;
selections.append(sel);
......@@ -911,7 +912,8 @@ void CPPEditorWidget::markSymbols(const QTextCursor &tc, const SemanticInfo &inf
if (!info.doc)
return;
const QTextCharFormat &occurrencesFormat
= baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES);
if (const Macro *macro = findCanonicalMacro(textCursor(), info.doc)) {
QList<QTextEdit::ExtraSelection> selections;
......@@ -923,7 +925,7 @@ void CPPEditorWidget::markSymbols(const QTextCursor &tc, const SemanticInfo &inf
macro->name().length());
QTextEdit::ExtraSelection sel;
sel.format = m_occurrencesFormat;
sel.format = occurrencesFormat;
sel.cursor = cursor;
selections.append(sel);
}
......@@ -941,7 +943,7 @@ void CPPEditorWidget::markSymbols(const QTextCursor &tc, const SemanticInfo &inf
cursor.setPosition(use.end(), QTextCursor::KeepAnchor);
QTextEdit::ExtraSelection sel;
sel.format = m_occurrencesFormat;
sel.format = occurrencesFormat;
sel.cursor = cursor;
selections.append(sel);
}
......@@ -987,7 +989,8 @@ void CPPEditorWidget::renameSymbolUnderCursor()
m_renameSelections[i].cursor.selectionStart());
m_currentRenameSelectionEnd = QTextCursor(c.document()->docHandle(),
m_renameSelections[i].cursor.selectionEnd());
m_renameSelections[i].format = m_occurrenceRenameFormat;
m_renameSelections[i].format
= baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES_RENAME);;
setExtraSelections(CodeSemanticsSelection, m_renameSelections);
break;
}
......@@ -1112,9 +1115,9 @@ void CPPEditorWidget::highlightUses(const QList<SemanticInfo::Use> &uses,
QTextEdit::ExtraSelection sel;
if (isUnused)
sel.format = m_occurrencesUnusedFormat;
sel.format = baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES_UNUSED);
else
sel.format = m_occurrencesFormat;
sel.format = baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES);
const int anchor = document()->findBlockByNumber(use.line - 1).position() + use.column - 1;
const int position = anchor + use.length;
......@@ -1537,13 +1540,6 @@ void CPPEditorWidget::applyFontSettings()
return;
const TextEditor::FontSettings &fs = baseTextDocument()->fontSettings();
m_occurrencesFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES);
m_occurrencesUnusedFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES_UNUSED);
m_occurrencesUnusedFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
m_occurrencesUnusedFormat.setUnderlineColor(m_occurrencesUnusedFormat.foreground().color());
m_occurrencesUnusedFormat.clearForeground();
m_occurrencesUnusedFormat.setToolTip(tr("Unused variable"));
m_occurrenceRenameFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES_RENAME);
m_semanticHighlightFormatMap[CppHighlightingSupport::TypeUse] =
fs.toTextCharFormat(TextEditor::C_TYPE);
......@@ -1565,12 +1561,6 @@ void CPPEditorWidget::applyFontSettings()
fs.toTextCharFormat(TextEditor::C_KEYWORD);
m_semanticHighlightFormatMap[CppHighlightingSupport::StringUse] =
fs.toTextCharFormat(TextEditor::C_STRING);
m_keywordFormat = fs.toTextCharFormat(TextEditor::C_KEYWORD);
// only set the background, we do not want to modify foreground properties
// set by the syntax highlighter or the link
m_occurrencesFormat.clearForeground();
m_occurrenceRenameFormat.clearForeground();
// Clear all additional formats since they may have changed
QTextBlock b = document()->firstBlock();
......
......@@ -238,11 +238,7 @@ private:
QTimer *m_updateOutlineIndexTimer;
QTimer *m_updateUsesTimer;
QTimer *m_updateFunctionDeclDefLinkTimer;
QTextCharFormat m_occurrencesFormat;
QTextCharFormat m_occurrencesUnusedFormat;
QTextCharFormat m_occurrenceRenameFormat;
QHash<int, QTextCharFormat> m_semanticHighlightFormatMap;
QTextCharFormat m_keywordFormat;
QList<QTextEdit::ExtraSelection> m_renameSelections;
int m_currentRenameSelection;
......
......@@ -860,7 +860,7 @@ void QmlJSTextEditorWidget::updateUsesNow()
continue;
QTextEdit::ExtraSelection sel;
sel.format = m_occurrencesFormat;
sel.format = baseTextDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES);
sel.cursor = textCursor();
sel.cursor.setPosition(loc.begin());
sel.cursor.setPosition(loc.end(), QTextCursor::KeepAnchor);
......@@ -1000,21 +1000,7 @@ void QmlJSTextEditorWidget::setSelectedElements()
void QmlJSTextEditorWidget::applyFontSettings()
{
TextEditor::BaseTextEditorWidget::applyFontSettings();
const TextEditor::FontSettings &fs = baseTextDocument()->fontSettings();
m_occurrencesFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES);
m_occurrencesUnusedFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES_UNUSED);
m_occurrencesUnusedFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
m_occurrencesUnusedFormat.setUnderlineColor(m_occurrencesUnusedFormat.foreground().color());
m_occurrencesUnusedFormat.clearForeground();
m_occurrencesUnusedFormat.setToolTip(tr("Unused variable"));
m_occurrenceRenameFormat = fs.toTextCharFormat(TextEditor::C_OCCURRENCES_RENAME);
// only set the background, we do not want to modify foreground properties set by the syntax highlighter or the link
m_occurrencesFormat.clearForeground();
m_occurrenceRenameFormat.clearForeground();
m_semanticHighlighter->updateFontSettings(fs);
m_semanticHighlighter->updateFontSettings(baseTextDocument()->fontSettings());
}
......
......@@ -198,9 +198,6 @@ private:
Internal::QmlOutlineModel *m_outlineModel;
QModelIndex m_outlineModelIndex;
QmlJS::ModelManagerInterface *m_modelManager;
QTextCharFormat m_occurrencesFormat;
QTextCharFormat m_occurrencesUnusedFormat;
QTextCharFormat m_occurrenceRenameFormat;
Internal::SemanticInfoUpdater *m_semanticInfoUpdater;
QmlJSTools::SemanticInfo m_semanticInfo;
......
......@@ -263,8 +263,6 @@ void BaseTextEditorWidget::ctor(const QSharedPointer<BaseTextDocument> &doc)
// parentheses matcher
d->m_formatRange = true;
d->m_matchFormat.setForeground(Qt::red);
d->m_matchFormat.setBackground(QColor(0xb4, 0xee, 0xb4));
d->m_mismatchFormat.setBackground(palette().color(QPalette::Base).value() < 128
? Qt::darkMagenta : Qt::magenta);
d->m_parenthesesMatchingTimer.setSingleShot(true);
......@@ -275,8 +273,6 @@ void BaseTextEditorWidget::ctor(const QSharedPointer<BaseTextDocument> &doc)
d->m_animator = 0;
d->m_searchResultFormat.setBackground(QColor(0xffef0b));
slotUpdateExtraAreaWidth();
updateHighlights();
setFrameStyle(QFrame::NoFrame);
......@@ -1924,7 +1920,9 @@ void BaseTextEditorWidget::insertCodeSnippet(const QTextCursor &cursor_arg, cons
tc.setPosition(position + length, QTextCursor::KeepAnchor);
QTextEdit::ExtraSelection selection;
selection.cursor = tc;
selection.format = (length ? d->m_occurrencesFormat : d->m_occurrenceRenameFormat);
selection.format = (length
? baseTextDocument()->fontSettings().toTextCharFormat(C_OCCURRENCES)
: baseTextDocument()->fontSettings().toTextCharFormat(C_OCCURRENCES_RENAME));
selections.append(selection);
manglers << data.ranges.at(i).mangler;
}
......@@ -2617,9 +2615,11 @@ void BaseTextEditorWidgetPrivate::highlightSearchResults(const QTextBlock &block
if (!q->inFindScope(blockPosition + idx, blockPosition + idx + l))
continue;
const QTextCharFormat &searchResultFormat
= m_document->fontSettings().toTextCharFormat(C_SEARCH_RESULT);
overlay->addOverlaySelection(blockPosition + idx,
blockPosition + idx + l,
m_searchResultFormat.background().color().darker(120),
searchResultFormat.background().color().darker(120),
QColor(),
(idx == cursor.selectionStart() - blockPosition
&& idx + l == cursor.selectionEnd() - blockPosition)?
......@@ -2793,12 +2793,15 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
QTextDocument *doc = document();
BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(doc->documentLayout());
QTC_ASSERT(documentLayout, return);
const FontSettings &fs = baseTextDocument()->fontSettings();
const QTextCharFormat &searchScopeFormat = fs.toTextCharFormat(C_SEARCH_SCOPE);
const QTextCharFormat &ifdefedOutFormat = fs.toTextCharFormat(C_DISABLED_CODE);
QPointF offset(contentOffset());
QTextBlock textCursorBlock = textCursor().block();
bool hasMainSelection = textCursor().hasSelection();
bool suppressSyntaxInIfdefedOutBlock = (d->m_ifdefedOutFormat.foreground()
bool suppressSyntaxInIfdefedOutBlock = (ifdefedOutFormat.foreground()
!= palette().foreground());
QRect er = e->rect();
......@@ -2812,7 +2815,7 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
lineX = QFontMetricsF(font()).width(QLatin1Char('x')) * d->m_visibleWrapColumn + offset.x() + 4;
if (lineX < viewportRect.width()) {
const QBrush background = d->m_ifdefedOutFormat.background();
const QBrush background = ifdefedOutFormat.background();
painter.fillRect(QRectF(lineX, er.top(), viewportRect.width() - lineX, er.height()),
background);
......@@ -2949,7 +2952,7 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
rr.setRight(viewportRect.width() - offset.x());
if (lineX > 0)
rr.setRight(qMin(lineX, rr.right()));
painter.fillRect(rr, d->m_ifdefedOutFormat.background());
painter.fillRect(rr, ifdefedOutFormat.background());
}
}
offsetIDO.ry() += r.height();
......@@ -3002,9 +3005,9 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
rr.setLeft(r.left() + x);
if (line.lineNumber() == eline.lineNumber())
rr.setRight(r.left() + ex);
painter.fillRect(rr, d->m_searchScopeFormat.background());
painter.fillRect(rr, searchScopeFormat.background());
QColor lineCol = d->m_searchScopeFormat.foreground().color();
QColor lineCol = searchScopeFormat.foreground().color();
QPen pen = painter.pen();
painter.setPen(lineCol);
if (blockFS == d->m_findScopeStart.block())
......@@ -3035,8 +3038,8 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
TextEditorOverlay *overlay = new TextEditorOverlay(this);
overlay->addOverlaySelection(d->m_findScopeStart.position(),
d->m_findScopeEnd.position(),
d->m_searchScopeFormat.foreground().color(),
d->m_searchScopeFormat.background().color(),
searchScopeFormat.foreground().color(),
searchScopeFormat.background().color(),
TextEditorOverlay::ExpandBegin);
overlay->setAlpha(false);
overlay->paint(&painter, e->rect());
......@@ -3046,7 +3049,7 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
d->m_searchResultOverlay->fill(&painter,
d->m_searchResultFormat.background().color(),
fs.toTextCharFormat(C_SEARCH_RESULT).background().color(),
e->rect());
......@@ -3061,7 +3064,7 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
QTextOption option = layout->textOption();
if (suppressSyntaxInIfdefedOutBlock && BaseTextDocumentLayout::ifdefedOut(block)) {
option.setFlags(option.flags() | QTextOption::SuppressColors);
painter.setPen(d->m_ifdefedOutFormat.foreground().color());
painter.setPen(ifdefedOutFormat.foreground().color());
} else {
option.setFlags(option.flags() & ~QTextOption::SuppressColors);
painter.setPen(context.palette.text().color());
......@@ -3127,7 +3130,7 @@ void BaseTextEditorWidget::paintEvent(QPaintEvent *e)
rr.moveTop(rr.top() + r.top());
rr.setLeft(0);
rr.setRight(viewportRect.width() - offset.x());
QColor color = d->m_currentLineFormat.background().color();
QColor color = fs.toTextCharFormat(C_CURRENT_LINE).background().color();
// set alpha, otherwise we cannot see block highlighting and find scope underneath
color.setAlpha(128);
painter.fillRect(rr, color);
......@@ -3473,8 +3476,10 @@ void BaseTextEditorWidget::drawCollapsedBlockPopup(QPainter &painter,
painter.setRenderHint(QPainter::Antialiasing, true);
painter.translate(.5, .5);
QBrush brush = palette().base();
if (d->m_ifdefedOutFormat.hasProperty(QTextFormat::BackgroundBrush))
brush = d->m_ifdefedOutFormat.background();
const QTextCharFormat &ifdefedOutFormat
= baseTextDocument()->fontSettings().toTextCharFormat(C_DISABLED_CODE);
if (ifdefedOutFormat.hasProperty(QTextFormat::BackgroundBrush))
brush = ifdefedOutFormat.background();
painter.setBrush(brush);
painter.drawRoundedRect(QRectF(offset.x(),
offset.y(),
......@@ -3518,8 +3523,10 @@ int BaseTextEditorWidget::extraAreaWidth(int *markWidthPtr) const
QFont fnt = d->m_extraArea->font();
// this works under the assumption that bold or italic
// can only make a font wider
fnt.setBold(d->m_currentLineNumberFormat.font().bold());
fnt.setItalic(d->m_currentLineNumberFormat.font().italic());
const QTextCharFormat &currentLineNumberFormat
= baseTextDocument()->fontSettings().toTextCharFormat(C_CURRENT_LINE_NUMBER);
fnt.setBold(currentLineNumberFormat.font().bold());
fnt.setItalic(currentLineNumberFormat.font().italic());
const QFontMetrics linefm(fnt);
space += linefm.width(QLatin1Char('9')) * lineNumberDigits();
......@@ -3743,10 +3750,12 @@ void BaseTextEditorWidget::extraAreaPaintEvent(QPaintEvent *e)
if (selected) {
painter.save();
QFont f = painter.font();
f.setBold(d->m_currentLineNumberFormat.font().bold());
f.setItalic(d->m_currentLineNumberFormat.font().italic());
const QTextCharFormat &currentLineNumberFormat
= baseTextDocument()->fontSettings().toTextCharFormat(C_CURRENT_LINE_NUMBER);
f.setBold(currentLineNumberFormat.font().bold());
f.setItalic(currentLineNumberFormat.font().italic());
painter.setFont(f);
painter.setPen(d->m_currentLineNumberFormat.foreground().color());
painter.setPen(currentLineNumberFormat.foreground().color());
}
painter.drawText(QRectF(markWidth, top, extraAreaWidth - markWidth - 4, height), Qt::AlignRight, number);
if (selected)
......@@ -3869,7 +3878,8 @@ void BaseTextEditorWidget::updateCurrentLineHighlight()
if (d->m_highlightCurrentLine) {
QTextEdit::ExtraSelection sel;
sel.format.setBackground(d->m_currentLineFormat.background());
sel.format.setBackground(baseTextDocument()->fontSettings()
.toTextCharFormat(C_CURRENT_LINE).background());
sel.format.setProperty(QTextFormat::FullWidthSelection, true);
sel.cursor = textCursor();
sel.cursor.clearSelection();
......@@ -4683,7 +4693,7 @@ void BaseTextEditorWidget::showLink(const Link &link)
sel.cursor = textCursor();
sel.cursor.setPosition(link.linkTextStart);
sel.cursor.setPosition(link.linkTextEnd, QTextCursor::KeepAnchor);
sel.format = d->m_linkFormat;
sel.format = baseTextDocument()->fontSettings().toTextCharFormat(C_LINK);
sel.format.setFontUnderline(true);
setExtraSelections(OtherSelection, QList<QTextEdit::ExtraSelection>() << sel);
viewport()->setCursor(Qt::PointingHandCursor);
......@@ -4882,6 +4892,8 @@ void BaseTextEditorWidget::_q_matchParentheses()
return;
}
const QTextCharFormat &matchFormat
= baseTextDocument()->fontSettings().toTextCharFormat(C_PARENTHESES);
int animatePosition = -1;
if (backwardMatch.hasSelection()) {
QTextEdit::ExtraSelection sel;
......@@ -4892,7 +4904,7 @@ void BaseTextEditorWidget::_q_matchParentheses()
} else {
sel.cursor = backwardMatch;
sel.format = d->m_matchFormat;
sel.format = matchFormat;
sel.cursor.setPosition(backwardMatch.selectionStart());
sel.cursor.setPosition(sel.cursor.position() + 1, QTextCursor::KeepAnchor);
......@@ -4916,7 +4928,7 @@ void BaseTextEditorWidget::_q_matchParentheses()
} else {
sel.cursor = forwardMatch;
sel.format = d->m_matchFormat;
sel.format = matchFormat;
sel.cursor.setPosition(forwardMatch.selectionStart());
sel.cursor.setPosition(sel.cursor.position() + 1, QTextCursor::KeepAnchor);
......@@ -4948,8 +4960,8 @@ void BaseTextEditorWidget::_q_matchParentheses()
d->m_animator = new BaseTextEditorAnimator(this);
d->m_animator->setPosition(animatePosition);
QPalette pal;
pal.setBrush(QPalette::Text, d->m_matchFormat.foreground());
pal.setBrush(QPalette::Base, d->m_matchFormat.background());
pal.setBrush(QPalette::Text, matchFormat.foreground());
pal.setBrush(QPalette::Base, matchFormat.background());
d->m_animator->setData(font(), pal, document()->characterAt(d->m_animator->position()));
connect(d->m_animator, SIGNAL(updateRequest(int,QPointF,QRectF)),
this, SLOT(_q_animateUpdate(int,QPointF,QRectF)));
......@@ -5387,13 +5399,6 @@ void BaseTextEditorWidget::applyFontSettings()
const QTextCharFormat textFormat = fs.toTextCharFormat(C_TEXT);
const QTextCharFormat selectionFormat = fs.toTextCharFormat(C_SELECTION);
const QTextCharFormat lineNumberFormat = fs.toTextCharFormat(C_LINE_NUMBER);
const QTextCharFormat searchResultFormat = fs.toTextCharFormat(C_SEARCH_RESULT);
d->m_searchScopeFormat = fs.toTextCharFormat(C_SEARCH_SCOPE);
const QTextCharFormat parenthesesFormat = fs.toTextCharFormat(C_PARENTHESES);
d->m_currentLineFormat = fs.toTextCharFormat(C_CURRENT_LINE);
d->m_currentLineNumberFormat = fs.toTextCharFormat(C_CURRENT_LINE_NUMBER);
d->m_linkFormat = fs.toTextCharFormat(C_LINK);
d->m_ifdefedOutFormat = fs.toTextCharFormat(C_DISABLED_CODE);
QFont font(textFormat.font());
const QColor foreground = textFormat.foreground().color();
......@@ -5421,18 +5426,6 @@ void BaseTextEditorWidget::applyFontSettings()
lineNumberFormat.background().color() : background);
d->m_extraArea->setPalette(ep);
// Search results
d->m_searchResultFormat.setBackground(searchResultFormat.background());
// Matching braces
d->m_matchFormat = parenthesesFormat;
// snippests
d->m_occurrencesFormat = fs.toTextCharFormat(C_OCCURRENCES);
d->m_occurrencesFormat.clearForeground();
d->m_occurrenceRenameFormat = fs.toTextCharFormat(C_OCCURRENCES_RENAME);
d->m_occurrenceRenameFormat.clearForeground();
slotUpdateExtraAreaWidth(); // Adjust to new font width
updateCurrentLineHighlight(); // Make sure it takes the new color
......
......@@ -127,7 +127,6 @@ public:
// parentheses matcher
bool m_formatRange;
QTextCharFormat m_matchFormat;
QTextCharFormat m_mismatchFormat;
QTimer m_parenthesesMatchingTimer;
// end parentheses matcher
......@@ -150,8 +149,6 @@ public:
TextEditorOverlay *m_searchResultOverlay;
bool snippetCheckCursor(const QTextCursor &cursor);
void snippetTabOrBacktab(bool forward);
QTextCharFormat m_occurrencesFormat;
QTextCharFormat m_occurrenceRenameFormat;
RefactorOverlay *m_refactorOverlay;
......@@ -176,18 +173,11 @@ public:
uint m_maybeFakeTooltipEvent : 1;
int m_visibleWrapColumn;
QTextCharFormat m_linkFormat;
BaseTextEditorWidget::Link m_currentLink;
bool m_linkPressed;
QTextCharFormat m_ifdefedOutFormat;
QRegExp m_searchExpr;
Core::FindFlags m_findFlags;
QTextCharFormat m_searchResultFormat;
QTextCharFormat m_searchScopeFormat;
QTextCharFormat m_currentLineFormat;
QTextCharFormat m_currentLineNumberFormat;
void highlightSearchResults(const QTextBlock &block, TextEditorOverlay *overlay);
QTimer m_delayedUpdateTimer;
......
......@@ -168,7 +168,17 @@ QTextCharFormat FontSettings::toTextCharFormat(TextStyle category) const
tf.setFontStyleStrategy(m_antialias ? QFont::PreferAntialias : QFont::NoAntialias);
}
if (f.foreground().isValid())
if (category == C_OCCURRENCES_UNUSED) {
tf.setUnderlineStyle(QTextCharFormat::WaveUnderline);
tf.setUnderlineColor(f.foreground());
tf.setToolTip(QCoreApplication::translate("FontSettings_C_OCCURRENCES_UNUSED",
"Unused variable"));
}
if (f.foreground().isValid()
&& category != C_OCCURRENCES
&& category != C_OCCURRENCES_RENAME
&& category != C_OCCURRENCES_UNUSED
&& category != C_SEARCH_RESULT)
tf.setForeground(f.foreground());
if (f.background().isValid() && (category == C_TEXT || f.background() != m_scheme.formatFor(C_TEXT).background()))
tf.setBackground(f.background());
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment