From 08dc547c859d6446d4bb589b50e0feccbffc7c9f Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 11 May 2017 12:48:55 +0200 Subject: Default: pass busy indicator and progress bar colors from QML Default.textColor (also used in eg. RangeSlider to fill the range) is equal to the color that was previously hard-coded in qquickdefaultbusyindicator.cpp and qquickdefaultprogressbar.cpp. Change-Id: I8f0749862def31667b6ef2ab3b4c6ea71a590755 Reviewed-by: Mitch Curtis --- src/imports/controls/BusyIndicator.qml | 1 + src/imports/controls/ProgressBar.qml | 1 + src/imports/controls/plugins.qmltypes | 2 ++ src/imports/controls/qquickdefaultbusyindicator.cpp | 21 +++++++++++++++++++-- src/imports/controls/qquickdefaultbusyindicator_p.h | 5 +++++ src/imports/controls/qquickdefaultprogressbar.cpp | 19 ++++++++++++++++--- src/imports/controls/qquickdefaultprogressbar_p.h | 5 +++++ 7 files changed, 49 insertions(+), 5 deletions(-) (limited to 'src/imports/controls') diff --git a/src/imports/controls/BusyIndicator.qml b/src/imports/controls/BusyIndicator.qml index a645e45e..5690c71f 100644 --- a/src/imports/controls/BusyIndicator.qml +++ b/src/imports/controls/BusyIndicator.qml @@ -51,6 +51,7 @@ T.BusyIndicator { implicitWidth: 48 implicitHeight: 48 + color: Default.textColor opacity: control.running ? 1 : 0 visible: control.running || animator.running Behavior on opacity { OpacityAnimator { id: animator; duration: 250 } } diff --git a/src/imports/controls/ProgressBar.qml b/src/imports/controls/ProgressBar.qml index 3edc24fa..78778c72 100644 --- a/src/imports/controls/ProgressBar.qml +++ b/src/imports/controls/ProgressBar.qml @@ -53,6 +53,7 @@ T.ProgressBar { scale: control.mirrored ? -1 : 1 progress: control.position indeterminate: control.visible && control.indeterminate + color: Default.textColor } background: Rectangle { diff --git a/src/imports/controls/plugins.qmltypes b/src/imports/controls/plugins.qmltypes index 13d54abe..fee7c934 100644 --- a/src/imports/controls/plugins.qmltypes +++ b/src/imports/controls/plugins.qmltypes @@ -40,6 +40,7 @@ Module { prototype: "QQuickItem" exports: ["QtQuick.Controls.impl/BusyIndicatorImpl 2.0"] exportMetaObjectRevisions: [0] + Property { name: "color"; type: "QColor" } } Component { name: "QQuickDefaultDial" @@ -58,6 +59,7 @@ Module { exportMetaObjectRevisions: [0] Property { name: "indeterminate"; type: "bool" } Property { name: "progress"; type: "double" } + Property { name: "color"; type: "QColor" } } Component { name: "QQuickDefaultStyle" diff --git a/src/imports/controls/qquickdefaultbusyindicator.cpp b/src/imports/controls/qquickdefaultbusyindicator.cpp index 315b2b8b..36f3a538 100644 --- a/src/imports/controls/qquickdefaultbusyindicator.cpp +++ b/src/imports/controls/qquickdefaultbusyindicator.cpp @@ -45,7 +45,6 @@ QT_BEGIN_NAMESPACE static const int CircleCount = 10; static const int TotalDuration = 100 * CircleCount * 2; static const QRgb TransparentColor = 0x00000000; -static const QRgb FillColor = 0xFF353637; static QPointF moveCircle(const QPointF &pos, qreal rotation, qreal distance) { @@ -59,6 +58,9 @@ public: void updateCurrentTime(int time) override; void sync(QQuickItem *item) override; + +private: + QColor m_color; }; QQuickDefaultBusyIndicatorNode::QQuickDefaultBusyIndicatorNode(QQuickDefaultBusyIndicator *item) @@ -92,7 +94,7 @@ void QQuickDefaultBusyIndicatorNode::updateCurrentTime(int time) Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); const bool fill = (firstPhaseProgress > qreal(i) / CircleCount) || (secondPhaseProgress > 0 && secondPhaseProgress < qreal(i) / CircleCount); - rectNode->setColor(QColor::fromRgba(fill ? FillColor : TransparentColor)); + rectNode->setColor(fill ? m_color : QColor::fromRgba(TransparentColor)); rectNode->setPenWidth(fill ? 0 : 1); rectNode->update(); @@ -108,6 +110,7 @@ void QQuickDefaultBusyIndicatorNode::sync(QQuickItem *item) const qreal dx = (w - sz) / 2; const qreal dy = (h - sz) / 2; const int circleRadius = sz / 12; + m_color = static_cast(item)->color(); QSGTransformNode *transformNode = static_cast(firstChild()); for (int i = 0; i < CircleCount; ++i) { @@ -136,6 +139,20 @@ QQuickDefaultBusyIndicator::QQuickDefaultBusyIndicator(QQuickItem *parent) : setFlag(ItemHasContents); } +QColor QQuickDefaultBusyIndicator::color() const +{ + return m_color; +} + +void QQuickDefaultBusyIndicator::setColor(const QColor &color) +{ + if (color == m_color) + return; + + m_color = color; + update(); +} + int QQuickDefaultBusyIndicator::elapsed() const { return m_elapsed; diff --git a/src/imports/controls/qquickdefaultbusyindicator_p.h b/src/imports/controls/qquickdefaultbusyindicator_p.h index 7daeabd1..3bbd6c31 100644 --- a/src/imports/controls/qquickdefaultbusyindicator_p.h +++ b/src/imports/controls/qquickdefaultbusyindicator_p.h @@ -55,10 +55,14 @@ QT_BEGIN_NAMESPACE class QQuickDefaultBusyIndicator : public QQuickItem { Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) public: explicit QQuickDefaultBusyIndicator(QQuickItem *parent = nullptr); + QColor color() const; + void setColor(const QColor &color); + int elapsed() const; protected: @@ -67,6 +71,7 @@ protected: private: int m_elapsed; + QColor m_color; }; QT_END_NAMESPACE diff --git a/src/imports/controls/qquickdefaultprogressbar.cpp b/src/imports/controls/qquickdefaultprogressbar.cpp index 655cf518..f5bd1db8 100644 --- a/src/imports/controls/qquickdefaultprogressbar.cpp +++ b/src/imports/controls/qquickdefaultprogressbar.cpp @@ -51,7 +51,6 @@ static const int BlockSpan = Blocks * (BlockWidth + BlockRestingSpacing) - Block static const int TotalDuration = 4000; static const int SecondPhaseStart = TotalDuration * 0.4; static const int ThirdPhaseStart = TotalDuration * 0.6; -static const QRgb FillColor = 0x353637; static inline qreal blockStartX(int blockIndex) { @@ -178,7 +177,7 @@ void QQuickDefaultProgressBarNode::sync(QQuickItem *item) QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); if (!rectNode) { rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setColor(FillColor); + rectNode->setColor(bar->color()); transformNode->appendChildNode(rectNode); } @@ -200,7 +199,7 @@ void QQuickDefaultProgressBarNode::sync(QQuickItem *item) QSGInternalRectangleNode *rectNode = static_cast(firstChild()); if (!rectNode) { rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setColor(FillColor); + rectNode->setColor(bar->color()); appendChildNode(rectNode); } @@ -246,6 +245,20 @@ void QQuickDefaultProgressBar::setIndeterminate(bool indeterminate) update(); } +QColor QQuickDefaultProgressBar::color() const +{ + return m_color; +} + +void QQuickDefaultProgressBar::setColor(const QColor &color) +{ + if (color == m_color) + return; + + m_color = color; + update(); +} + void QQuickDefaultProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) { QQuickItem::itemChange(change, data); diff --git a/src/imports/controls/qquickdefaultprogressbar_p.h b/src/imports/controls/qquickdefaultprogressbar_p.h index a922c07f..dbdf5ad4 100644 --- a/src/imports/controls/qquickdefaultprogressbar_p.h +++ b/src/imports/controls/qquickdefaultprogressbar_p.h @@ -57,6 +57,7 @@ class QQuickDefaultProgressBar : public QQuickItem Q_OBJECT Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) public: explicit QQuickDefaultProgressBar(QQuickItem *parent = nullptr); @@ -67,6 +68,9 @@ public: qreal progress() const; void setProgress(qreal progress); + QColor color() const; + void setColor(const QColor &color); + protected: void itemChange(ItemChange change, const ItemChangeData &data) override; QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; @@ -74,6 +78,7 @@ protected: private: qreal m_progress; bool m_indeterminate; + QColor m_color; }; QT_END_NAMESPACE -- cgit v1.2.3