8#include <QtQuick/private/qsgcontext_p.h>
9#include <private/qsgadaptationlayer_p.h>
10#include <QtQuick/qsgnode.h>
11#include <QtQuick/qsgtexturematerial.h>
12#include <QtQuick/qsgtexture.h>
13#include <QtQuick/qquickwindow.h>
14#include <QtQml/qqmlinfo.h>
92 if (!
d->m_spriteEngine)
94 d->m_spriteEngine->setGoal(
d->m_spriteEngine->stateIndex(sprite), 0,
true);
100 if (
d->m_goalState != sprite){
101 d->m_goalState = sprite;
103 if (
d->m_spriteEngine)
104 d->m_spriteEngine->setGoal(
d->m_spriteEngine->stateIndex(sprite));
111 if (
d->m_running !=
arg) {
120 if (
d->m_interpolate !=
arg) {
121 d->m_interpolate =
arg;
143 return d->m_interpolate;
149 return d->m_goalState;
155 return d->m_curState;
158void QQuickSpriteSequence::createEngine()
162 if (
d->m_spriteEngine)
163 delete d->m_spriteEngine;
164 if (
d->m_sprites.size()) {
166 if (!
d->m_goalState.isEmpty())
167 d->m_spriteEngine->setGoal(
d->m_spriteEngine->stateIndex(
d->m_goalState));
169 d->m_spriteEngine =
nullptr;
174QSGSpriteNode *QQuickSpriteSequence::initNode()
178 if (!
d->m_spriteEngine) {
182 d->m_spriteEngine->startAssemblingImage();
190 QImage image =
d->m_spriteEngine->assembledImage(
d->sceneGraphRenderContext()->maxTextureSize());
194 QSGSpriteNode *node =
d->sceneGraphContext()->createSpriteNode();
197 node->setTexture(
window()->createTextureFromImage(
image));
198 d->m_spriteEngine->start(0);
200 node->setSourceA(
QPoint(
d->m_spriteEngine->spriteX(),
d->m_spriteEngine->spriteY()));
201 node->setSourceB(
QPoint(
d->m_spriteEngine->spriteX(),
d->m_spriteEngine->spriteY()));
202 node->setSpriteSize(
QSize(
d->m_spriteEngine->spriteWidth(),
d->m_spriteEngine->spriteHeight()));
203 node->setSheetSize(
d->m_sheetSize);
206 d->m_curState =
d->m_spriteEngine->state(
d->m_spriteEngine->curState())->name();
208 d->m_timestamp.start();
215 d->m_pleaseReset =
true;
222 if (
d->m_pleaseReset) {
226 d->m_pleaseReset =
false;
229 QSGSpriteNode *node =
static_cast<QSGSpriteNode *
>(oldNode);
234 prepareNextFrame(node);
243void QQuickSpriteSequence::prepareNextFrame(QSGSpriteNode *node)
247 uint timeInt =
d->m_timestamp.elapsed();
251 d->m_spriteEngine->updateSprites(timeInt);
252 if (
d->m_curStateIdx !=
d->m_spriteEngine->curState()) {
253 d->m_curStateIdx =
d->m_spriteEngine->curState();
254 d->m_curState =
d->m_spriteEngine->state(
d->m_spriteEngine->curState())->name();
260 qreal animT =
d->m_spriteEngine->spriteStart()/1000.0;
261 qreal frameCount =
d->m_spriteEngine->spriteFrames();
262 qreal frameDuration =
d->m_spriteEngine->spriteDuration()/frameCount;
265 if (frameDuration > 0) {
268 progress = std::modf(
frame,&frameAt);
271 if (
d->m_curFrame >= frameCount){
273 d->m_spriteEngine->advance();
275 frameAt =
d->m_curFrame;
278 if (
d->m_spriteEngine->sprite()->reverse())
279 frameAt = (
d->m_spriteEngine->spriteFrames() - 1) - frameAt;
280 int y =
d->m_spriteEngine->spriteY();
281 int w =
d->m_spriteEngine->spriteWidth();
282 int h =
d->m_spriteEngine->spriteHeight();
283 int x1 =
d->m_spriteEngine->spriteX();
286 if (frameAt < (frameCount-1))
291 node->setSpriteSize(
QSize(
w,
h));
292 node->setTime(
d->m_interpolate ? progress : 0.0);
300#include "moc_qquickspritesequence_p.cpp"
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
\inmodule QtCore\reentrant
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
void setFlag(Flag flag, bool enabled=true)
Enables the specified flag for this item if enabled is true; if enabled is false, the flag is disable...
QQuickWindow * window() const
Returns the window in which this item is rendered.
qreal width
This property holds the width of this item.
bool smooth
\qmlproperty bool QtQuick::Item::smooth
qreal height
This property holds the height of this item.
void update()
Schedules a call to updatePaintNode() for this item.
void goalSpriteChanged(const QString &arg)
void jumpTo(const QString &sprite)
void setGoalSprite(const QString &sprite)
QQuickSpriteSequence(QQuickItem *parent=nullptr)
\qmltype SpriteSequence \instantiates QQuickSpriteSequence \inqmlmodule QtQuick\inherits Item
void setRunning(bool arg)
QSGNode * updatePaintNode(QSGNode *, UpdatePaintNodeData *) override
Called on the render thread when it is time to sync the state of the item with the scene graph.
void interpolateChanged(bool arg)
void currentSpriteChanged(const QString &arg)
QQmlListProperty< QQuickSprite > sprites
void runningChanged(bool arg)
void setInterpolate(bool arg)
\group qtquick-scenegraph-nodes \title Qt Quick Scene Graph Node classes
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
constexpr const T & qBound(const T &min, const T &val, const T &max)
GLfloat GLfloat GLfloat w
[0]
GLuint GLfloat GLfloat GLfloat x1
GLfloat GLfloat GLfloat GLfloat h
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
void spriteReplace(QQmlListProperty< QQuickSprite > *p, qsizetype idx, QQuickSprite *s)
void spriteAppend(QQmlListProperty< QQuickSprite > *p, QQuickSprite *s)
void spriteRemoveLast(QQmlListProperty< QQuickSprite > *p)
qsizetype spriteCount(QQmlListProperty< QQuickSprite > *p)
QQuickSprite * spriteAt(QQmlListProperty< QQuickSprite > *p, qsizetype idx)
void spriteClear(QQmlListProperty< QQuickSprite > *p)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent