46 QSGRectangleNode *geometryNode =
static_cast<QSGRectangleNode *>(firstChild());
47 Q_ASSERT(geometryNode->type() == QSGNode::GeometryNodeType);
48 const QRectF geometry = geometryNode->rect();
50 QSGTransformNode *firstNode =
static_cast<QSGTransformNode *>(geometryNode->firstChild());
52 Q_ASSERT(firstNode->type() == QSGNode::TransformNodeType);
54 const qreal progress = qMin<qreal>(1.0,
static_cast<qreal>(time) / SlideDuration);
55 moveNode(
static_cast<QSGTransformNode *>(firstNode), geometry, progress);
58 QSGTransformNode *secondNode =
static_cast<QSGTransformNode *>(geometryNode->lastChild());
60 Q_ASSERT(secondNode->type() == QSGNode::TransformNodeType);
62 const qreal progress = qMax<qreal>(0.0,
static_cast<qreal>(time - PauseDuration) / SlideDuration);
63 moveNode(
static_cast<QSGTransformNode *>(secondNode), geometry, progress);
69 QQuickMaterialProgressBar *bar =
static_cast<QQuickMaterialProgressBar *>(item);
70 if (m_indeterminate != bar->isIndeterminate()) {
71 m_indeterminate = bar->isIndeterminate();
78 QQuickItemPrivate *d = QQuickItemPrivate::get(item);
80 QRectF bounds = item->boundingRect();
81 bounds.setHeight(item->implicitHeight());
82 bounds.moveTop((item->height() - bounds.height()) / 2.0);
84 QSGRectangleNode *geometryNode =
static_cast<QSGRectangleNode *>(firstChild());
86 geometryNode = item->window()->createRectangleNode();
87 geometryNode->setColor(Qt::transparent);
88 appendChildNode(geometryNode);
90 geometryNode->setRect(bounds);
92 const int count = m_indeterminate ? 2 : 1;
93 const qreal w = m_indeterminate ? 0 : bar->progress() * item->width();
94 const QRectF rect(0, bounds.y(), w, bounds.height());
96 QSGNode *transformNode = geometryNode->firstChild();
97 for (
int i = 0; i < count; ++i) {
99 transformNode =
new QSGTransformNode;
100 geometryNode->appendChildNode(transformNode);
102 QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
103 rectNode->setAntialiasing(
true);
104 transformNode->appendChildNode(rectNode);
106 Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
107 static_cast<QSGTransformNode *>(transformNode)->setMatrix(QMatrix4x4());
109 QSGInternalRectangleNode *rectNode =
static_cast<QSGInternalRectangleNode *>(transformNode->firstChild());
110 Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
112 rectNode->setRect(rect);
113 rectNode->setColor(bar->color());
116 transformNode = transformNode->nextSibling();
119 while (transformNode) {
120 QSGNode *nextSibling = transformNode->nextSibling();
121 delete transformNode;
122 transformNode = nextSibling;
192void QQuickMaterialProgressBar::itemChange(QQuickItem::ItemChange change,
const QQuickItem::ItemChangeData &data)
194 QQuickItem::itemChange(change, data);
195 if (change == ItemVisibleHasChanged)