From a8be2532d19be81fa3a2a75e99cb1f6f20ff8f16 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Tue, 28 Apr 2009 11:43:13 +0200 Subject: [PATCH] tune block highlighting done with Thorbjorn --- src/plugins/texteditor/basetexteditor.cpp | 59 +++++++++++++++++------ src/plugins/texteditor/basetexteditor_p.h | 1 + 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index ada99dc501c..45ea3c6e992 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1709,18 +1709,46 @@ static QColor calcBlendColor(const QColor &baseColor, int factor = 1) const int blendBase = (baseColor.value() > 128) ? 0 : 255; // Darker backgrounds may need a bit more contrast const int blendFactor = (baseColor.value() > 128) ? 8 : 16; - QColor blendColor = baseColor; while (factor--) { blendColor = QColor( - (blendBase * blendFactor + blendColor.blue() * (256 - blendFactor)) / 256, + (blendBase * blendFactor + blendColor.red() * (256 - blendFactor)) / 256, (blendBase * blendFactor + blendColor.green() * (256 - blendFactor)) / 256, (blendBase * blendFactor + blendColor.blue() * (256 - blendFactor)) / 256); } return blendColor; } + +static QColor calcBlendColor(const QColor &baseColor, int level, int count) +{ + QColor color80; + QColor color90; + + if (baseColor.value() > 128) { + color80 = baseColor.lighter(90); + color90 = baseColor.lighter(95); + } else { + color80 = baseColor.lighter(110); + color90 = baseColor.lighter(105); + } + + if (level == count) + return baseColor; + if (level == 0) + return color80; + if (level == count - 1) + return color90; + + const int blendFactor = level * (256 / (count - 2)); + + return QColor( + (color90.red() * blendFactor + color80.red() * (256 - blendFactor)) / 256, + (color90.green() * blendFactor + color80.green() * (256 - blendFactor)) / 256, + (color90.blue() * blendFactor + color80.blue() * (256 - blendFactor)) / 256); +} + void BaseTextEditor::paintEvent(QPaintEvent *e) { /* @@ -1804,13 +1832,13 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) if (n > i) --depth; - int count = d->m_highlightBlocksInfo.visualIndent.size(); + int count = d->m_highlightBlocksInfo.count(); if (count) { QRectF rr = r; rr.setWidth(viewport()->width()); for(int i = 0; i <= depth; ++i) { int vi = i > 0 ? d->m_highlightBlocksInfo.visualIndent.at(i-1) : 0; - painter.fillRect(rr.adjusted(vi, 0, -8*i, 0), calcBlendColor(baseColor, count - i)); + painter.fillRect(rr.adjusted(vi, 0, -8*i, 0), calcBlendColor(baseColor, i, count)); } } } @@ -2270,12 +2298,6 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) xoffset += 2; } } - - if (!userData->ifdefedOut()) { - collapseAfter = (userData->collapseMode() == TextBlockUserData::CollapseAfter); - collapseThis = (userData->collapseMode() == TextBlockUserData::CollapseThis); - hasClosingCollapse = userData->hasClosingCollapse() && (previousBraceDepth > 0); - } } if (d->m_codeFoldingVisible) { @@ -2296,7 +2318,6 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) bool drawUp = !d->m_highlightBlocksInfo.isEmpty() && blockNumber == d->m_highlightBlocksInfo.close.first(); - if (drawBox || drawDown || drawUp) { painter.setRenderHint(QPainter::Antialiasing, true); painter.translate(.5, .5); @@ -2313,10 +2334,16 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) painter.drawPolygon(points1, 3); painter.drawPolygon(points2, 3); } else if (drawUp) { - QPointF points[3] = { QPointF(r.left(), r.bottom()-1), - QPointF(r.center().x(), r.center().y()), - QPointF(r.right(), r.bottom()-1) }; - painter.drawPolygon(points, 3); + + // check that we are not collapsed + QTextBlock open = doc->findBlockByNumber(d->m_highlightBlocksInfo.open.last()); + if (open.next().isVisible()) { + + QPointF points[3] = { QPointF(r.left(), r.bottom()-1), + QPointF(r.center().x(), r.center().y()), + QPointF(r.right(), r.bottom()-1) }; + painter.drawPolygon(points, 3); + } } else if(drawDown) { QPointF points[3] = { QPointF(r.left(), r.top()), QPointF(r.center().x(), r.center().y()), @@ -2604,7 +2631,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e) } if (highlightBlockNumber != d->extraAreaHighlightCollapseBlockNumber || highlightColumn != d->extraAreaHighlightCollapseColumn) - d->m_highlightBlocksTimer->start(100); + d->m_highlightBlocksTimer->start(40); } if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonDblClick) { diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index 27baa0851c0..e9ff2e9f121 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -118,6 +118,7 @@ struct BaseTextEditorPrivateHighlightBlocks QList<int> open; QList<int> close; QList<int> visualIndent; + inline int count() const { return visualIndent.size(); } inline bool isEmpty() const { return open.isEmpty() || close.isEmpty() || visualIndent.isEmpty(); } inline bool operator==(const BaseTextEditorPrivateHighlightBlocks &o) const { return (open == o.open && close == o.close && visualIndent == o.visualIndent); -- GitLab