diff --git a/share/qtcreator/styles/creator-dark.xml b/share/qtcreator/styles/creator-dark.xml
index dbb18ae47c8..c0092f46aaa 100644
--- a/share/qtcreator/styles/creator-dark.xml
+++ b/share/qtcreator/styles/creator-dark.xml
@@ -38,7 +38,7 @@
-
+
diff --git a/share/qtcreator/styles/dark.xml b/share/qtcreator/styles/dark.xml
index 1e169a69b02..7b46c7542e0 100644
--- a/share/qtcreator/styles/dark.xml
+++ b/share/qtcreator/styles/dark.xml
@@ -11,6 +11,7 @@
+
diff --git a/share/qtcreator/styles/modnokai_night_shift_v2.xml b/share/qtcreator/styles/modnokai_night_shift_v2.xml
index 1b062ae7dfa..56c03c3dbfa 100644
--- a/share/qtcreator/styles/modnokai_night_shift_v2.xml
+++ b/share/qtcreator/styles/modnokai_night_shift_v2.xml
@@ -44,7 +44,7 @@
-
+
diff --git a/share/qtcreator/styles/solarized-dark.xml b/share/qtcreator/styles/solarized-dark.xml
index 1a6c5a53ab4..07d97ad858d 100644
--- a/share/qtcreator/styles/solarized-dark.xml
+++ b/share/qtcreator/styles/solarized-dark.xml
@@ -44,7 +44,7 @@
-
+
diff --git a/src/plugins/texteditor/displaysettings.cpp b/src/plugins/texteditor/displaysettings.cpp
index f092150a0e6..9060d017fc9 100644
--- a/src/plugins/texteditor/displaysettings.cpp
+++ b/src/plugins/texteditor/displaysettings.cpp
@@ -37,6 +37,7 @@
static const char displayLineNumbersKey[] = "DisplayLineNumbers";
static const char textWrappingKey[] = "TextWrapping";
static const char visualizeWhitespaceKey[] = "VisualizeWhitespace";
+static const char visualizeIndentKey[] = "VisualizeIndent";
static const char displayFoldingMarkersKey[] = "DisplayFoldingMarkers";
static const char highlightCurrentLineKey[] = "HighlightCurrentLine2Key";
static const char highlightBlocksKey[] = "HighlightBlocksKey";
@@ -67,6 +68,7 @@ void DisplaySettings::toSettings(const QString &category, QSettings *s) const
s->setValue(QLatin1String(displayLineNumbersKey), m_displayLineNumbers);
s->setValue(QLatin1String(textWrappingKey), m_textWrapping);
s->setValue(QLatin1String(visualizeWhitespaceKey), m_visualizeWhitespace);
+ s->setValue(QLatin1String(visualizeIndentKey), m_visualizeIndent);
s->setValue(QLatin1String(displayFoldingMarkersKey), m_displayFoldingMarkers);
s->setValue(QLatin1String(highlightCurrentLineKey), m_highlightCurrentLine);
s->setValue(QLatin1String(highlightBlocksKey), m_highlightBlocks);
@@ -97,6 +99,7 @@ void DisplaySettings::fromSettings(const QString &category, const QSettings *s)
m_displayLineNumbers = s->value(group + QLatin1String(displayLineNumbersKey), m_displayLineNumbers).toBool();
m_textWrapping = s->value(group + QLatin1String(textWrappingKey), m_textWrapping).toBool();
m_visualizeWhitespace = s->value(group + QLatin1String(visualizeWhitespaceKey), m_visualizeWhitespace).toBool();
+ m_visualizeIndent = s->value(group + QLatin1String(visualizeIndentKey), m_visualizeIndent).toBool();
m_displayFoldingMarkers = s->value(group + QLatin1String(displayFoldingMarkersKey), m_displayFoldingMarkers).toBool();
m_highlightCurrentLine = s->value(group + QLatin1String(highlightCurrentLineKey), m_highlightCurrentLine).toBool();
m_highlightBlocks = s->value(group + QLatin1String(highlightBlocksKey), m_highlightBlocks).toBool();
@@ -123,6 +126,7 @@ bool DisplaySettings::equals(const DisplaySettings &ds) const
return m_displayLineNumbers == ds.m_displayLineNumbers
&& m_textWrapping == ds.m_textWrapping
&& m_visualizeWhitespace == ds.m_visualizeWhitespace
+ && m_visualizeIndent == ds.m_visualizeIndent
&& m_displayFoldingMarkers == ds.m_displayFoldingMarkers
&& m_highlightCurrentLine == ds.m_highlightCurrentLine
&& m_highlightBlocks == ds.m_highlightBlocks
diff --git a/src/plugins/texteditor/displaysettings.h b/src/plugins/texteditor/displaysettings.h
index 97b716a8fc7..0da209a0e04 100644
--- a/src/plugins/texteditor/displaysettings.h
+++ b/src/plugins/texteditor/displaysettings.h
@@ -58,6 +58,7 @@ public:
bool m_displayLineNumbers = true;
bool m_textWrapping = false;
bool m_visualizeWhitespace = false;
+ bool m_visualizeIndent = true;
bool m_displayFoldingMarkers = true;
bool m_highlightCurrentLine = false;
bool m_highlightBlocks = false;
diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp
index f972e1735a8..c26f4a8c0f9 100644
--- a/src/plugins/texteditor/displaysettingspage.cpp
+++ b/src/plugins/texteditor/displaysettingspage.cpp
@@ -92,6 +92,7 @@ void DisplaySettingsWidget::settingsFromUI(DisplaySettings &displaySettings,
marginSettings.m_useIndenter = m_ui.useIndenter->isChecked();
marginSettings.m_marginColumn = m_ui.wrapColumn->value();
displaySettings.m_visualizeWhitespace = m_ui.visualizeWhitespace->isChecked();
+ displaySettings.m_visualizeIndent = m_ui.visualizeIndent->isChecked();
displaySettings.m_displayFoldingMarkers = m_ui.displayFoldingMarkers->isChecked();
displaySettings.m_highlightCurrentLine = m_ui.highlightCurrentLine->isChecked();
displaySettings.m_highlightBlocks = m_ui.highlightBlocks->isChecked();
@@ -126,6 +127,7 @@ void DisplaySettingsWidget::settingsToUI()
m_ui.useIndenter->setChecked(marginSettings.m_useIndenter);
m_ui.wrapColumn->setValue(marginSettings.m_marginColumn);
m_ui.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace);
+ m_ui.visualizeIndent->setChecked(displaySettings.m_visualizeIndent);
m_ui.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers);
m_ui.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine);
m_ui.highlightBlocks->setChecked(displaySettings.m_highlightBlocks);
diff --git a/src/plugins/texteditor/displaysettingspage.ui b/src/plugins/texteditor/displaysettingspage.ui
index 29dea5649a3..316639a16ca 100644
--- a/src/plugins/texteditor/displaysettingspage.ui
+++ b/src/plugins/texteditor/displaysettingspage.ui
@@ -90,20 +90,6 @@
Display
- -
-
-
- Display file encoding
-
-
-
- -
-
-
- Display file line ending
-
-
-
-
@@ -111,10 +97,10 @@
- -
-
+
-
+
- Center &cursor on scroll
+ Highlight search results on the scrollbar
@@ -125,27 +111,10 @@
- -
-
+
-
+
- &Highlight matching parentheses
-
-
-
- -
-
-
- Always open links in another split
-
-
-
- -
-
-
- Shows tabs and spaces.
-
-
- &Visualize whitespace
+ Animate navigation within file
@@ -156,13 +125,6 @@
- -
-
-
- Auto-fold first &comment
-
-
-
-
@@ -170,6 +132,20 @@
+ -
+
+
+ Mark &text changes
+
+
+
+ -
+
+
+ Auto-fold first &comment
+
+
+
-
@@ -177,24 +153,55 @@
- -
-
+
-
+
- Animate navigation within file
+ Center &cursor on scroll
- -
-
+
-
+
- Highlight search results on the scrollbar
+ Visualize indent
- -
-
+
-
+
- Mark &text changes
+ Display file line ending
+
+
+
+ -
+
+
+ Display file encoding
+
+
+
+ -
+
+
+ Always open links in another split
+
+
+
+ -
+
+
+ &Highlight matching parentheses
+
+
+
+ -
+
+
+ Shows tabs and spaces.
+
+
+ &Visualize whitespace
@@ -250,6 +257,7 @@
enableTextWrapping
showWrapColumn
wrapColumn
+ useIndenter
displayLineNumbers
displayFoldingMarkers
markTextChanges
@@ -257,13 +265,20 @@
centerOnScroll
autoFoldFirstComment
scrollBarHighlights
+ animateNavigationWithinFile
highlightCurrentLine
highlightBlocks
animateMatchingParentheses
+ visualizeIndent
highlightMatchingParentheses
openLinksInNextSplit
displayFileEncoding
- animateNavigationWithinFile
+ displayFileLineEnding
+ displayAnnotations
+ leftAligned
+ atMargin
+ rightAligned
+ betweenLines
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 8e6e2c53875..f089b53b337 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -554,6 +554,7 @@ public:
void paintCursorAsBlock(const PaintEventData &data, QPainter &painter,
PaintEventBlockData &blockData, int cursorPosition) const;
void paintAdditionalVisualWhitespaces(PaintEventData &data, QPainter &painter, qreal top) const;
+ void paintIndentDepth(PaintEventData &data, QPainter &painter, const PaintEventBlockData &blockData) const;
void paintReplacement(PaintEventData &data, QPainter &painter, qreal top) const;
void paintWidgetBackground(const PaintEventData &data, QPainter &painter) const;
void paintOverlays(const PaintEventData &data, QPainter &painter) const;
@@ -4343,6 +4344,47 @@ void TextEditorWidgetPrivate::paintAdditionalVisualWhitespaces(PaintEventData &d
}
}
+void TextEditorWidgetPrivate::paintIndentDepth(PaintEventData &data,
+ QPainter &painter,
+ const PaintEventBlockData &blockData) const
+{
+ if (!m_displaySettings.m_visualizeIndent)
+ return;
+
+ const QString text = data.block.text();
+ const TabSettings &tabSettings = m_document->tabSettings();
+ const int currentDepth = tabSettings.indentationColumn(text);
+
+ if (currentDepth <= tabSettings.m_indentSize || blockData.layout->lineCount() < 1)
+ return;
+
+ const qreal horizontalAdvance = QFontMetricsF(q->font()).horizontalAdvance(
+ QString(tabSettings.m_indentSize, QChar(' ')));
+
+ painter.save();
+ painter.setPen(data.visualWhitespaceFormat.foreground().color());
+
+ const QTextLine textLine = blockData.layout->lineAt(0);
+ const QRectF rect = textLine.naturalTextRect();
+ qreal x = textLine.cursorToX(0) + data.offset.x();
+ int paintColumn = tabSettings.m_indentSize;
+
+ while (paintColumn < currentDepth) {
+ x += horizontalAdvance;
+ if (x >= 0) {
+ int paintPosition = tabSettings.positionAtColumn(text, paintColumn);
+ if (blockData.layout->lineForTextPosition(paintPosition).lineNumber() != 0)
+ break;
+ const QPointF top(x, blockData.boundingRect.top());
+ const QPointF bottom(x, blockData.boundingRect.top() + rect.height());
+ const QLineF line(top, bottom);
+ painter.drawLine(line);
+ }
+ paintColumn += tabSettings.m_indentSize;
+ }
+ painter.restore();
+}
+
void TextEditorWidgetPrivate::paintReplacement(PaintEventData &data, QPainter &painter,
qreal top) const
{
@@ -4645,7 +4687,7 @@ void TextEditorWidget::paintEvent(QPaintEvent *e)
if (drawCursor && !drawCursorAsBlock)
d->addCursorsPosition(data, painter, blockData);
-
+ d->paintIndentDepth(data, painter, blockData);
d->paintAdditionalVisualWhitespaces(data, painter, blockData.boundingRect.top());
d->paintReplacement(data, painter, blockData.boundingRect.top());
d->updateLineAnnotation(data, blockData, painter);