From b07e5eaf6541a51567b806555d805df92a7524f6 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 15 Mar 2016 13:23:18 +0100 Subject: ProgressBar: Make it really flat for flat themes Change-Id: I3964492e4b07dcba594d5bebc1b74d9458578e88 Reviewed-by: Orgad Shaneh --- .../coreplugin/progressmanager/progressbar.cpp | 91 +++++++++++----------- .../coreplugin/progressmanager/progressbar.h | 1 - .../coreplugin/progressmanager/progressmanager.cpp | 2 +- 3 files changed, 48 insertions(+), 46 deletions(-) (limited to 'src/plugins/coreplugin/progressmanager') diff --git a/src/plugins/coreplugin/progressmanager/progressbar.cpp b/src/plugins/coreplugin/progressmanager/progressbar.cpp index 170f6652a4..97c98bc495 100644 --- a/src/plugins/coreplugin/progressmanager/progressbar.cpp +++ b/src/plugins/coreplugin/progressmanager/progressbar.cpp @@ -182,11 +182,11 @@ void ProgressBar::setError(bool on) QSize ProgressBar::sizeHint() const { int width = 50; - int height = PROGRESSBAR_HEIGHT + 6; + int height = PROGRESSBAR_HEIGHT + 5; if (m_titleVisible) { QFontMetrics fm(titleFont()); width = qMax(width, fm.width(m_title) + 16); - height += fm.height() + 4; + height += fm.height() + 5; } if (m_separatorVisible) height += SEPARATOR_HEIGHT; @@ -226,12 +226,9 @@ void ProgressBar::paintEvent(QPaintEvent *) // TODO move font into Utils::StyleHelper // TODO use Utils::StyleHelper white - if (bar.isNull()) - bar.load(StyleHelper::dpiSpecificImageFile(QLatin1String(":/core/images/progressbar.png"))); - double range = maximum() - minimum(); double percent = 0.; - if (range != 0) + if (!qFuzzyIsNull(range)) percent = (value() - minimum()) / range; if (percent > 1) percent = 1; @@ -282,18 +279,13 @@ void ProgressBar::paintEvent(QPaintEvent *) m_progressHeight = PROGRESSBAR_HEIGHT; m_progressHeight += ((m_progressHeight % 2) + 1) % 2; // make odd // draw outer rect - const QRect rect(INDENT - 1, titleHeight + separatorHeight + (m_titleVisible ? 4 : 3), + const QRect rect(INDENT - 1, titleHeight + separatorHeight + (m_titleVisible ? 5 : 4), size().width() - 2 * INDENT + 1, m_progressHeight); - if (creatorTheme()->flag(Theme::DrawProgressBarSunken)) - StyleHelper::drawCornerImage(bar, &p, rect, 3, 3, 3, 3); - - // draw inner rect - QColor c = creatorTheme()->color(Theme::ProgressBarColorNormal); - p.setPen(Qt::NoPen); - QRectF inner = rect.adjusted(2, 2, -2, -2); inner.adjust(0, 0, qRound((percent - 1) * inner.width()), 0); + + QColor c; if (m_error) { c = creatorTheme()->color(Theme::ProgressBarColorError); // avoid too small red bar @@ -301,33 +293,42 @@ void ProgressBar::paintEvent(QPaintEvent *) inner.adjust(0, 0, 10 - inner.width(), 0); } else if (m_finished) { c = creatorTheme()->color(Theme::ProgressBarColorFinished); + } else { + c = creatorTheme()->color(Theme::ProgressBarColorNormal); } - // Draw line and shadow after the gradient fill - if (value() > 0 && value() < maximum()) { - p.fillRect(QRect(inner.right(), inner.top(), 2, inner.height()), QColor(0, 0, 0, 20)); - p.fillRect(QRect(inner.right(), inner.top(), 1, inner.height()), QColor(0, 0, 0, 60)); - } - p.setPen(Qt::NoPen); + //draw the progress bar if (creatorTheme()->widgetStyle() == Theme::StyleFlat) { - //draw the progress bar - p.setBrush (c); + p.fillRect(rect.adjusted(2, 2, -2, -2), + creatorTheme()->color(Theme::FancyToolButtonHoverColor)); + p.fillRect(inner, c); } else { + const static QImage bar(StyleHelper::dpiSpecificImageFile( + QLatin1String(":/core/images/progressbar.png"))); + StyleHelper::drawCornerImage(bar, &p, rect, 3, 3, 3, 3); + + // Draw line and shadow after the gradient fill + if (value() > 0 && value() < maximum()) { + p.fillRect(QRect(inner.right(), inner.top(), 2, inner.height()), QColor(0, 0, 0, 20)); + p.fillRect(QRect(inner.right(), inner.top(), 1, inner.height()), QColor(0, 0, 0, 60)); + } + QLinearGradient grad(inner.topLeft(), inner.bottomLeft()); grad.setColorAt(0, c.lighter(130)); grad.setColorAt(0.4, c.lighter(106)); grad.setColorAt(0.41, c.darker(106)); grad.setColorAt(1, c.darker(130)); + p.setPen(Qt::NoPen); p.setBrush(grad); + p.drawRect(inner); + p.setBrush(Qt::NoBrush); + p.setPen(QPen(QColor(0, 0, 0, 30), 1)); + + p.drawLine(inner.topLeft() + QPointF(0.5, 0.5), inner.topRight() + QPointF(-0.5, 0.5)); + p.drawLine(inner.topLeft() + QPointF(0.5, 0.5), inner.bottomLeft() + QPointF(0.5, -0.5)); + p.drawLine(inner.topRight() + QPointF(-0.5, 0.5), inner.bottomRight() + QPointF(-0.5, -0.5)); + p.drawLine(inner.bottomLeft() + QPointF(0.5, -0.5), inner.bottomRight() + QPointF(-0.5, -0.5)); } - p.drawRect(inner); - p.setBrush(Qt::NoBrush); - p.setPen(QPen(QColor(0, 0, 0, 30), 1)); - - p.drawLine(inner.topLeft() + QPointF(0.5, 0.5), inner.topRight() + QPointF(-0.5, 0.5)); - p.drawLine(inner.topLeft() + QPointF(0.5, 0.5), inner.bottomLeft() + QPointF(0.5, -0.5)); - p.drawLine(inner.topRight() + QPointF(-0.5, 0.5), inner.bottomRight() + QPointF(-0.5, -0.5)); - p.drawLine(inner.bottomLeft() + QPointF(0.5, -0.5), inner.bottomRight() + QPointF(-0.5, -0.5)); if (m_cancelEnabled) { // Draw cancel button @@ -337,21 +338,23 @@ void ProgressBar::paintEvent(QPaintEvent *) m_cancelRect = QRect(rect.adjusted(rect.width() - CANCELBUTTON_WIDTH + 2, 1, 0, 0)); const bool hover = m_cancelRect.contains(mapFromGlobal(QCursor::pos())); const QRectF cancelVisualRect(m_cancelRect.adjusted(0, 1, -2, -2)); - QLinearGradient grad(cancelVisualRect.topLeft(), cancelVisualRect.bottomLeft()); int intensity = hover ? 90 : 70; - QColor buttonColor(intensity, intensity, intensity, 255); - grad.setColorAt(0, buttonColor.lighter(130)); - grad.setColorAt(1, buttonColor.darker(130)); - p.setPen(Qt::NoPen); - p.setBrush(grad); - p.drawRect(cancelVisualRect); - - p.setPen(QPen(QColor(0, 0, 0, 30))); - p.drawLine(cancelVisualRect.topLeft() + QPointF(-0.5, 0.5), cancelVisualRect.bottomLeft() + QPointF(-0.5, -0.5)); - p.setPen(QPen(QColor(0, 0, 0, 120))); - p.drawLine(cancelVisualRect.topLeft() + QPointF(0.5, 0.5), cancelVisualRect.bottomLeft() + QPointF(0.5, -0.5)); - p.setPen(QPen(QColor(255, 255, 255, 30))); - p.drawLine(cancelVisualRect.topLeft() + QPointF(1.5, 0.5), cancelVisualRect.bottomLeft() + QPointF(1.5, -0.5)); + if (creatorTheme()->widgetStyle() != Theme::StyleFlat) { + QLinearGradient grad(cancelVisualRect.topLeft(), cancelVisualRect.bottomLeft()); + QColor buttonColor(intensity, intensity, intensity, 255); + grad.setColorAt(0, buttonColor.lighter(130)); + grad.setColorAt(1, buttonColor.darker(130)); + p.setPen(Qt::NoPen); + p.setBrush(grad); + p.drawRect(cancelVisualRect); + + p.setPen(QPen(QColor(0, 0, 0, 30))); + p.drawLine(cancelVisualRect.topLeft() + QPointF(-0.5, 0.5), cancelVisualRect.bottomLeft() + QPointF(-0.5, -0.5)); + p.setPen(QPen(QColor(0, 0, 0, 120))); + p.drawLine(cancelVisualRect.topLeft() + QPointF(0.5, 0.5), cancelVisualRect.bottomLeft() + QPointF(0.5, -0.5)); + p.setPen(QPen(QColor(255, 255, 255, 30))); + p.drawLine(cancelVisualRect.topLeft() + QPointF(1.5, 0.5), cancelVisualRect.bottomLeft() + QPointF(1.5, -0.5)); + } p.setPen(QPen(hover ? StyleHelper::panelTextColor() : QColor(180, 180, 180), 1.2, Qt::SolidLine, Qt::FlatCap)); p.setRenderHint(QPainter::Antialiasing, true); p.drawLine(cancelVisualRect.topLeft() + QPointF(4.0, 2.0), cancelVisualRect.bottomRight() + QPointF(-3.0, -2.0)); diff --git a/src/plugins/coreplugin/progressmanager/progressbar.h b/src/plugins/coreplugin/progressmanager/progressbar.h index 4381a78fa3..d2b9abc357 100644 --- a/src/plugins/coreplugin/progressmanager/progressbar.h +++ b/src/plugins/coreplugin/progressmanager/progressbar.h @@ -76,7 +76,6 @@ protected: private: QFont titleFont() const; - QImage bar; QString m_text; QString m_title; bool m_titleVisible; diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp index 885463db0d..2533e70605 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp @@ -313,7 +313,7 @@ void ProgressManagerPrivate::init() m_summaryProgressWidget->setVisible(!m_progressViewPinned); m_summaryProgressWidget->setGraphicsEffect(m_opacityEffect); m_summaryProgressLayout = new QHBoxLayout(m_summaryProgressWidget); - m_summaryProgressLayout->setContentsMargins(0, 0, 0, 0); + m_summaryProgressLayout->setContentsMargins(0, 0, 0, 2); m_summaryProgressLayout->setSpacing(0); m_summaryProgressWidget->setLayout(m_summaryProgressLayout); m_summaryProgressBar = new ProgressBar(m_summaryProgressWidget); -- cgit v1.2.1