38 setLoopCount(Infinite);
40 setCurrentTime(item->elapsed());
43 QSGTransformNode *transformNode =
new QSGTransformNode;
44 appendChildNode(transformNode);
46 QQuickItemPrivate *d = QQuickItemPrivate::get(item);
47 QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
48 rectNode->setAntialiasing(
true);
49 transformNode->appendChildNode(rectNode);
56 const qreal firstPhaseProgress = percentageComplete <= 0.5 ? percentageComplete * 2 : 0;
57 const qreal secondPhaseProgress = percentageComplete > 0.5 ? (percentageComplete - 0.5) * 2 : 0;
59 QSGTransformNode *transformNode =
static_cast<QSGTransformNode*>(firstChild());
60 Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
62 QSGInternalRectangleNode *rectNode =
static_cast<QSGInternalRectangleNode*>(transformNode->firstChild());
63 Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
65 const bool fill = (firstPhaseProgress > qreal(i) /
CircleCount) || (secondPhaseProgress > 0 && secondPhaseProgress < qreal(i) /
CircleCount);
66 rectNode->setColor(fill ? m_fill : QColor::fromRgba(TransparentColor));
67 rectNode->setPenColor(m_pen);
68 rectNode->setPenWidth(1);
71 transformNode =
static_cast<QSGTransformNode*>(transformNode->nextSibling());
77 const qreal w = item->width();
78 const qreal h = item->height();
79 const qreal sz = qMin(w, h);
80 const qreal dx = (w - sz) / 2;
81 const qreal dy = (h - sz) / 2;
82 const int circleRadius = sz / 12;
84 m_pen =
static_cast<QQuickBasicBusyIndicator *>(item)->pen();
85 m_fill =
static_cast<QQuickBasicBusyIndicator *>(item)->fill();
87 QSGTransformNode *transformNode =
static_cast<QSGTransformNode *>(firstChild());
89 Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
91 QSGInternalRectangleNode *rectNode =
static_cast<QSGInternalRectangleNode *>(transformNode->firstChild());
92 Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
94 QPointF pos = QPointF(sz / 2 - circleRadius, sz / 2 - circleRadius);
95 pos = moveCircle(pos, 360.0 / CircleCount * i, sz / 2 - circleRadius);
98 m.translate(dx + pos.x(), dy + pos.y());
99 transformNode->setMatrix(m);
101 rectNode->setRect(QRectF(QPointF(), QSizeF(circleRadius * 2, circleRadius * 2)));
102 rectNode->setRadius(circleRadius);
104 transformNode =
static_cast<QSGTransformNode *>(transformNode->nextSibling());
161void QQuickBasicBusyIndicator::itemChange(QQuickItem::ItemChange change,
const QQuickItem::ItemChangeData &data)
163 QQuickItem::itemChange(change, data);
165 case ItemOpacityHasChanged:
171 if (qFuzzyIsNull(data.realValue) && !m_running)
174 case ItemVisibleHasChanged: