62 QSGTransformNode *transformNode =
static_cast<QSGTransformNode*>(firstChild());
63 for (
int i = 0; i <
Blocks; ++i) {
64 Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
67 const qreal restX = blockRestX(i, m_pixelsPerSecond);
68 const qreal timeInSeconds = time / 1000.0;
72 QEasingCurve easingCurve(QEasingCurve::InQuad);
73 const qreal easedCompletion = easingCurve.valueForProgress(time / qreal(
SecondPhaseStart));
74 const qreal distance = m_pixelsPerSecond * (easedCompletion * (SecondPhaseStart / 1000.0));
75 const qreal position = blockStartX(i) + distance;
76 const qreal destination = restX;
77 m.translate(qMin(position, destination), 0);
80 m.translate(restX, 0);
83 const int thirdPhaseSubKickoff = (BlockMovingSpacing / m_pixelsPerSecond) * 1000;
90 const qreal timeSinceSecondPhase = timeInSeconds - (
ThirdPhaseStart / 1000.0);
101 const qreal timeSinceOurKickoff = timeSinceSecondPhase - (thirdPhaseSubKickoff / 1000.0 * i);
102 const qreal position = restX + (m_pixelsPerSecond * (timeSinceOurKickoff));
103 const qreal destination = blockEndX(i, m_pixelsPerSecond);
104 m.translate(qMin(position, destination), 0);
107 transformNode->setMatrix(m);
109 transformNode =
static_cast<QSGTransformNode*>(transformNode->nextSibling());
115 QQuickBasicProgressBar *bar =
static_cast<QQuickBasicProgressBar *>(item);
116 if (m_indeterminate != bar->isIndeterminate()) {
117 m_indeterminate = bar->isIndeterminate();
123 m_pixelsPerSecond = item->width();
125 QQuickItemPrivate *d = QQuickItemPrivate::get(item);
128 m.translate(0, (item->height() - item->implicitHeight()) / 2);
131 if (m_indeterminate) {
132 if (childCount() !=
Blocks) {
134 removeAllChildNodes();
137 QSGTransformNode *transformNode =
static_cast<QSGTransformNode*>(firstChild());
138 for (
int i = 0; i <
Blocks; ++i) {
139 if (!transformNode) {
140 transformNode =
new QSGTransformNode;
141 appendChildNode(transformNode);
144 QSGInternalRectangleNode *rectNode =
static_cast<QSGInternalRectangleNode*>(transformNode->firstChild());
146 rectNode = d->sceneGraphContext()->createInternalRectangleNode();
147 transformNode->appendChildNode(rectNode);
151 m.translate(blockStartX(i), 0);
152 transformNode->setMatrix(m);
156 rectNode->setColor(bar->color());
157 rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(
BlockWidth, item->implicitHeight())));
160 transformNode =
static_cast<QSGTransformNode *>(transformNode->nextSibling());
163 if (childCount() > 1) {
165 removeAllChildNodes();
168 QSGInternalRectangleNode *rectNode =
static_cast<QSGInternalRectangleNode *>(firstChild());
170 rectNode = d->sceneGraphContext()->createInternalRectangleNode();
171 appendChildNode(rectNode);
176 rectNode->setColor(bar->color());
177 rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(bar->progress() * item->width(), item->implicitHeight())));
231void QQuickBasicProgressBar::itemChange(QQuickItem::ItemChange change,
const QQuickItem::ItemChangeData &data)
233 QQuickItem::itemChange(change, data);
234 if (change == ItemVisibleHasChanged)