id: spinState
name: "spinning"
source: "pics/meteor.png"
- frames: 35
+ frameCount: 35
frameDuration: 40
to: {"death":0, "spinning":1}
},Sprite {
name: "death"
source: "pics/meteor_explo.png"
- frames: 22
+ frameCount: 22
frameDuration: 40
to: {"null":1}
}, Sprite {
name: "null"
source: "pics/nullRock.png"
- frames: 1
+ frameCount: 1
frameDuration: 1000
}
]
sprites: Sprite {
name: "snow"
source: "../images/snowflake.png"
- frames: 51
+ frameCount: 51
frameDuration: 40
frameDurationVariation: 8
}
id: spinState
name: "spinning"
source: "../images/meteor.png"
- frames: 35
+ frameCount: 35
frameDuration: 60
}
}
system: sys
sprites: [Sprite {
source: "../images/realLeaf1.png"
- frames: 1
+ frameCount: 1
frameDuration: 1
to: {"a":1, "b":1, "c":1, "d":1}
}, Sprite {
name: "a"
source: "../images/realLeaf1.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
},
Sprite {
name: "b"
source: "../images/realLeaf2.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
},
Sprite {
name: "c"
source: "../images/realLeaf3.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
},
Sprite {
name: "d"
source: "../images/realLeaf4.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
}
]
system: sys
sprites: [Sprite {
source: "../images/realLeaf1.png"
- frames: 1
+ frameCount: 1
frameDuration: 1
to: {"a":1, "b":1, "c":1, "d":1}
}, Sprite {
name: "a"
source: "../images/realLeaf1.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
},
Sprite {
name: "b"
source: "../images/realLeaf2.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
},
Sprite {
name: "c"
source: "../images/realLeaf3.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
},
Sprite {
name: "d"
source: "../images/realLeaf4.png"
- frames: 1
+ frameCount: 1
frameDuration: 10000
}
]
id: spinState
name: "spinning"
source: "../images/meteor.png"
- frames: 35
+ frameCount: 35
frameDuration: 40
randomStart: true
to: {"explode":0, "spinning":1}
},Sprite {
name: "explode"
source: "../images/_explo.png"
- frames: 22
+ frameCount: 22
frameDuration: 40
to: {"nullFrame":1}
},Sprite {//Not sure if this is needed, but seemed easiest
name: "nullFrame"
source: "../images/nullRock.png"
- frames: 1
+ frameCount: 1
frameDuration: 1000
}
]
sprites: Sprite {
name: "snow"
source: "../images/snowflake.png"
- frames: 51
+ frameCount: 51
frameDuration: 40
frameDurationVariation: 8
}
Sprite {
name: "bear"
source: "../images/bear_tiles.png"
- frames: 13
+ frameCount: 13
frameDuration: 120
}
]
height: 800
id: root
- SpriteImage {
+ SpriteSequence {
sprites: Sprite {
name: "bear"
source: "../images/bear_tiles.png"
- frames: 13
+ frameCount: 13
frameDuration: 120
}
width: 250
sprites: [Sprite {
name: "happy"
source: "../images/starfish_1.png"
- frames: 1
+ frameCount: 1
frameDuration: 260
to: {"happy": 1, "silly": 1, "angry": 1}
}, Sprite {
name: "angry"
source: "../images/starfish_0.png"
- frames: 1
+ frameCount: 1
frameDuration: 260
to: {"happy": 1, "silly": 1, "angry": 1}
}, Sprite {
name: "silly"
source: "../images/starfish_2.png"
- frames: 1
+ frameCount: 1
frameDuration: 260
to: {"happy": 1, "silly": 1, "noticedbear": 0}
}, Sprite {
name: "noticedbear"
source: "../images/starfish_3.png"
- frames: 1
+ frameCount: 1
frameDuration: 2600
}]
}
ScriptAction { script: {image.goalSprite = ""; image.jumpTo("still");} }
PropertyAction { target: image; property: "y"; value: 0 }
}
- SpriteImage {
+ SpriteSequence {
id: image
width: 256
height: 256
Sprite{
name: "still"
source: "content/BearSheet.png"
- frames: 1
+ frameCount: 1
frameWidth: 256
frameHeight: 256
frameDuration: 100
Sprite{
name: "blink"
source: "content/BearSheet.png"
- frames: 3
+ frameCount: 3
frameX: 256
frameY: 1536
frameWidth: 256
Sprite{
name: "floating"
source: "content/BearSheet.png"
- frames: 9
+ frameCount: 9
frameX: 0
frameY: 0
frameWidth: 256
Sprite{
name: "flailing"
source: "content/BearSheet.png"
- frames: 8
+ frameCount: 8
frameX: 0
frameY: 768
frameWidth: 256
Sprite{
name: "falling"
source: "content/BearSheet.png"
- frames: 5
+ frameCount: 5
frameY: 1280
frameWidth: 256
frameHeight: 256
Sprite{
name: "floating"
source: "Bear1.png"
- frames: 9
+ frameCount: 9
frameWidth: 256
frameHeight: 256
frameDuration: 80
Sprite{
name: "flailing"
source: "Bear2.png"
- frames: 8
+ frameCount: 8
frameWidth: 256
frameHeight: 256
frameDuration: 80
Sprite{
name: "falling"
source: "Bear3.png"
- frames: 5
+ frameCount: 5
frameWidth: 256
frameHeight: 256
frameDuration: 80
$$PWD/qquickimplicitsizeitem_p_p.h \
$$PWD/qquickspriteengine_p.h \
$$PWD/qquicksprite_p.h \
- $$PWD/qquickspriteimage_p.h \
+ $$PWD/qquickspritesequence_p.h \
$$PWD/qquickanimatedsprite_p.h \
$$PWD/qquickdrag_p.h \
$$PWD/qquickdroparea_p.h \
$$PWD/qquickimplicitsizeitem.cpp \
$$PWD/qquickspriteengine.cpp \
$$PWD/qquicksprite.cpp \
- $$PWD/qquickspriteimage.cpp \
+ $$PWD/qquickspritesequence.cpp \
$$PWD/qquickanimatedsprite.cpp \
$$PWD/qquickaccessibleattached.cpp \
$$PWD/qquickdrag.cpp \
#include <QtQuick/private/qquickcanvasitem_p.h>
#include <QtQuick/private/qquickcontext2d_p.h>
#include "qquicksprite_p.h"
-#include "qquickspriteimage_p.h"
+#include "qquickspritesequence_p.h"
#include "qquickanimatedsprite_p.h"
#include "qquickdrag_p.h"
#include "qquickdroparea_p.h"
qmlRegisterType<QQuickSprite>("QtQuick", 2, 0, "Sprite");
qmlRegisterType<QQuickAnimatedSprite>("QtQuick", 2, 0, "AnimatedSprite");
- qmlRegisterType<QQuickSpriteImage>("QtQuick", 2, 0, "SpriteImage");
+ qmlRegisterType<QQuickSpriteSequence>("QtQuick", 2, 0, "SpriteSequence");
+ qmlRegisterType<QQuickSpriteSequence>("QtQuick", 2, 0, "SpriteImage");//Deprecation in progress
qmlRegisterType<QQuickParentChange>(uri, major, minor,"ParentChange");
qmlRegisterType<QQuickAnchorChanges>(uri, major, minor,"AnchorChanges");
will repeat itself after completing.
*/
/*!
- \qmlproperty int QtQuick2::Sprite::frames
+ \qmlproperty int QtQuick2::Sprite::frameCount
Number of frames in this sprite.
*/
#include <QDeclarativeListProperty>
#include <QtQuick/private/qdeclarativepixmapcache_p.h>
#include "qquickspriteengine_p.h"
+#include <QDebug>
QT_BEGIN_HEADER
//Renderers have to query this hint when advancing frames
Q_PROPERTY(bool reverse READ reverse WRITE setReverse NOTIFY reverseChanged)
Q_PROPERTY(bool frameSync READ frameSync WRITE setFrameSync NOTIFY frameSyncChanged)
- Q_PROPERTY(int frames READ frames WRITE setFrames NOTIFY framesChanged)
+ Q_PROPERTY(int frames READ frames WRITE setFrames NOTIFY frameCountChanged)
+ Q_PROPERTY(int frameCount READ frameCount WRITE setFrameCount NOTIFY frameCountChanged)
//If frame height or width is not specified, it is assumed to be a single long row of square frames.
//Otherwise, it can be multiple contiguous rows, when one row runs out the next will be used.
Q_PROPERTY(int frameHeight READ frameHeight WRITE setFrameHeight NOTIFY frameHeightChanged)
return m_frames;
}
+ int frameCount() const
+ {
+ return m_frames;
+ }
+
int frameX() const
{
return m_frameX;
void reverseChanged(bool arg);
- void framesChanged(int arg);
+ void frameCountChanged(int arg);
void frameXChanged(int arg);
void setFrames(int arg)
{
+ qWarning() << "Sprite::frames has been renamed Sprite::frameCount";
+ setFrameCount(arg);
+ }
+
+ void setFrameCount(int arg)
+ {
if (m_frames != arg) {
m_frames = arg;
- emit framesChanged(arg);
+ emit frameCountChanged(arg);
}
}
private:
friend class QQuickImageParticle;
- friend class QQuickSpriteImage;
+ friend class QQuickSpriteSequence;
friend class QQuickAnimatedSprite;
friend class QQuickSpriteEngine;
friend class QQuickStochasticEngine;
**
****************************************************************************/
-#include "qquickspriteimage_p.h"
+#include "qquickspritesequence_p.h"
#include "qquicksprite_p.h"
#include "qquickspriteengine_p.h"
#include <QtQuick/private/qsgcontext_p.h>
" gl_FragColor = mix(texture2D(texture, fTexS.xy), texture2D(texture, fTexS.zw), progress) * qt_Opacity;\n"
"}\n";
-class QQuickSpriteImageMaterial : public QSGMaterial
+class QQuickSpriteSequenceMaterial : public QSGMaterial
{
public:
- QQuickSpriteImageMaterial();
- ~QQuickSpriteImageMaterial();
+ QQuickSpriteSequenceMaterial();
+ ~QQuickSpriteSequenceMaterial();
virtual QSGMaterialType *type() const { static QSGMaterialType type; return &type; }
virtual QSGMaterialShader *createShader() const;
virtual int compare(const QSGMaterial *other) const
{
- return this - static_cast<const QQuickSpriteImageMaterial *>(other);
+ return this - static_cast<const QQuickSpriteSequenceMaterial *>(other);
}
QSGTexture *texture;
float elementHeight;
};
-QQuickSpriteImageMaterial::QQuickSpriteImageMaterial()
+QQuickSpriteSequenceMaterial::QQuickSpriteSequenceMaterial()
: animT(0.0f)
, animX1(0.0f)
, animY1(0.0f)
setFlag(Blending, true);
}
-QQuickSpriteImageMaterial::~QQuickSpriteImageMaterial()
+QQuickSpriteSequenceMaterial::~QQuickSpriteSequenceMaterial()
{
delete texture;
}
-class SpriteImageMaterialData : public QSGMaterialShader
+class SpriteSequenceMaterialData : public QSGMaterialShader
{
public:
- SpriteImageMaterialData(const char * /* vertexFile */ = 0, const char * /* fragmentFile */ = 0)
+ SpriteSequenceMaterialData(const char * /* vertexFile */ = 0, const char * /* fragmentFile */ = 0)
{
}
virtual void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *)
{
- QQuickSpriteImageMaterial *m = static_cast<QQuickSpriteImageMaterial *>(newEffect);
+ QQuickSpriteSequenceMaterial *m = static_cast<QQuickSpriteSequenceMaterial *>(newEffect);
m->texture->bind();
program()->setUniformValue(m_opacity_id, state.opacity());
static float chunkOfBytes[1024];
};
-float SpriteImageMaterialData::chunkOfBytes[1024];
+float SpriteSequenceMaterialData::chunkOfBytes[1024];
-QSGMaterialShader *QQuickSpriteImageMaterial::createShader() const
+QSGMaterialShader *QQuickSpriteSequenceMaterial::createShader() const
{
- return new SpriteImageMaterialData;
+ return new SpriteSequenceMaterialData;
}
struct SpriteVertex {
};
/*!
- \qmlclass SpriteImage QQuickSpriteImage
+ \qmlclass SpriteSequence QQuickSpriteSequence
\inqmlmodule QtQuick 2
\inherits Item
- \brief The SpriteImage element draws a sprite animation
+ \brief The SpriteSequence element draws a sprite animation
*/
/*!
- \qmlproperty bool QtQuick2::SpriteImage::running
+ \qmlproperty bool QtQuick2::SpriteSequence::running
Whether the sprite is animating or not.
Default is true
*/
/*!
- \qmlproperty bool QtQuick2::SpriteImage::interpolate
+ \qmlproperty bool QtQuick2::SpriteSequence::interpolate
If true, interpolation will occur between sprite frames to make the
animation appear smoother.
Default is true.
*/
/*!
- \qmlproperty string QtQuick2::SpriteImage::goalSprite
+ \qmlproperty string QtQuick2::SpriteSequence::goalSprite
The name of the Sprite which is currently animating.
*/
/*!
- \qmlproperty string QtQuick2::SpriteImage::goalSprite
+ \qmlproperty string QtQuick2::SpriteSequence::goalSprite
The name of the Sprite which the animation should move to.
If it is possible to return to the goalState from the starting point of the goalState
it will continue to do so until goalState is set to "" or an unreachable state.
*/
-/*! \qmlmethod void QtQuick2::SpriteImage::jumpTo(string sprite)
+/*! \qmlmethod void QtQuick2::SpriteSequence::jumpTo(string sprite)
This function causes the sprite to jump to the specified state immediately, intermediate
states are not played.
*/
/*!
- \qmlproperty list<Sprite> QtQuick2::SpriteImage::sprites
+ \qmlproperty list<Sprite> QtQuick2::SpriteSequence::sprites
The sprite or sprites to draw. Sprites will be scaled to the size of this element.
*/
//TODO: Implicitly size element to size of first sprite?
-QQuickSpriteImage::QQuickSpriteImage(QQuickItem *parent) :
+QQuickSpriteSequence::QQuickSpriteSequence(QQuickItem *parent) :
QQuickItem(parent)
, m_node(0)
, m_material(0)
this, SLOT(update()));
}
-void QQuickSpriteImage::jumpTo(const QString &sprite)
+void QQuickSpriteSequence::jumpTo(const QString &sprite)
{
if (!m_spriteEngine)
return;
m_spriteEngine->setGoal(m_spriteEngine->stateIndex(sprite), 0, true);
}
-void QQuickSpriteImage::setGoalSprite(const QString &sprite)
+void QQuickSpriteSequence::setGoalSprite(const QString &sprite)
{
if (m_goalState != sprite){
m_goalState = sprite;
}
}
-QDeclarativeListProperty<QQuickSprite> QQuickSpriteImage::sprites()
+QDeclarativeListProperty<QQuickSprite> QQuickSpriteSequence::sprites()
{
return QDeclarativeListProperty<QQuickSprite>(this, &m_sprites, spriteAppend, spriteCount, spriteAt, spriteClear);
}
-void QQuickSpriteImage::createEngine()
+void QQuickSpriteSequence::createEngine()
{
//TODO: delay until component complete
if (m_spriteEngine)
reset();
}
-static QSGGeometry::Attribute SpriteImage_Attributes[] = {
+static QSGGeometry::Attribute SpriteSequence_Attributes[] = {
QSGGeometry::Attribute::create(0, 2, GL_FLOAT), // tex
};
-static QSGGeometry::AttributeSet SpriteImage_AttributeSet =
+static QSGGeometry::AttributeSet SpriteSequence_AttributeSet =
{
1, // Attribute Count
2 * sizeof(float),
- SpriteImage_Attributes
+ SpriteSequence_Attributes
};
-QSGGeometryNode* QQuickSpriteImage::buildNode()
+QSGGeometryNode* QQuickSpriteSequence::buildNode()
{
if (!m_spriteEngine) {
qmlInfo(this) << "No sprite engine...";
return 0;
}
- m_material = new QQuickSpriteImageMaterial();
+ m_material = new QQuickSpriteSequenceMaterial();
QImage image = m_spriteEngine->assembledImage();
if (image.isNull())
int vCount = 4;
int iCount = 6;
- QSGGeometry *g = new QSGGeometry(SpriteImage_AttributeSet, vCount, iCount);
+ QSGGeometry *g = new QSGGeometry(SpriteSequence_AttributeSet, vCount, iCount);
g->setDrawingMode(GL_TRIANGLES);
SpriteVertices *p = (SpriteVertices *) g->vertexData();
return m_node;
}
-void QQuickSpriteImage::reset()
+void QQuickSpriteSequence::reset()
{
m_pleaseReset = true;
}
-QSGNode *QQuickSpriteImage::updatePaintNode(QSGNode *, UpdatePaintNodeData *)
+QSGNode *QQuickSpriteSequence::updatePaintNode(QSGNode *, UpdatePaintNodeData *)
{
if (m_pleaseReset) {
delete m_node;
return m_node;
}
-void QQuickSpriteImage::prepareNextFrame()
+void QQuickSpriteSequence::prepareNextFrame()
{
if (m_node == 0)
m_node = buildNode();
**
****************************************************************************/
-#ifndef QQUICKSPRITEIMAGE_P_H
-#define QQUICKSPRITEIMAGE_P_H
+#ifndef QQUICKSPRITESEQUENCE_P_H
+#define QQUICKSPRITESEQUENCE_P_H
#include <QtQuick/QQuickItem>
#include <QTime>
class QQuickSprite;
class QQuickSpriteEngine;
class QSGGeometryNode;
-class QQuickSpriteImageMaterial;
-class Q_AUTOTEST_EXPORT QQuickSpriteImage : public QQuickItem
+class QQuickSpriteSequenceMaterial;
+class Q_AUTOTEST_EXPORT QQuickSpriteSequence : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(bool running READ running WRITE setRunning NOTIFY runningChanged)
Q_CLASSINFO("DefaultProperty", "sprites")
public:
- explicit QQuickSpriteImage(QQuickItem *parent = 0);
+ explicit QQuickSpriteSequence(QQuickItem *parent = 0);
QDeclarativeListProperty<QQuickSprite> sprites();
void prepareNextFrame();
QSGGeometryNode* buildNode();
QSGGeometryNode *m_node;
- QQuickSpriteImageMaterial *m_material;
+ QQuickSpriteSequenceMaterial *m_material;
QList<QQuickSprite*> m_sprites;
QQuickSpriteEngine* m_spriteEngine;
QTime m_timestamp;
QT_END_HEADER
-#endif // QQUICKSPRITEIMAGE_P_H
+#endif // QQUICKSPRITESEQUENCE_P_H
objectName: "sprite"
loops: 3
source: "squarefacesprite.png"
- frames: 6
+ frameCount: 6
frameDuration: 120
width: 160
height: 160
width: 320
height: 320
- SpriteImage {
+ SpriteSequence {
objectName: "sprite"
sprites: [Sprite {
name: "firstState"
source: "squarefacesprite.png"
- frames: 3
+ frameCount: 3
frameSync: true
to: {"secondState":1}
}, Sprite {
name: "secondState"
source: "squarefacesprite.png"
- frames: 6
+ frameCount: 6
frameSync: true
} ]
width: 160
width: 320
height: 320
- SpriteImage {
+ SpriteSequence {
objectName: "sprite"
sprites: Sprite {
name: "happy"
source: "squarefacesprite.png"
- frames: 6
+ frameCount: 6
frameDuration: 120
}
width: 160
CONFIG += testcase
-TARGET = tst_qquickspriteimage
-SOURCES += tst_qquickspriteimage.cpp
+TARGET = tst_qquickspritesequence
+SOURCES += tst_qquickspritesequence.cpp
include (../../shared/util.pri)
#include <QtTest/QtTest>
#include "../../shared/util.h"
#include <QtQuick/qquickview.h>
-#include <private/qquickspriteimage_p.h>
+#include <private/qquickspritesequence_p.h>
-class tst_qquickspriteimage : public QDeclarativeDataTest
+class tst_qquickspritesequence : public QDeclarativeDataTest
{
Q_OBJECT
public:
- tst_qquickspriteimage(){}
+ tst_qquickspritesequence(){}
private slots:
void test_properties();
void test_framerateAdvance();//Separate codepath for QQuickSpriteEngine
};
-void tst_qquickspriteimage::test_properties()
+void tst_qquickspritesequence::test_properties()
{
QQuickView *canvas = new QQuickView(0);
QTest::qWaitForWindowShown(canvas);
QVERIFY(canvas->rootObject());
- QQuickSpriteImage* sprite = canvas->rootObject()->findChild<QQuickSpriteImage*>("sprite");
+ QQuickSpriteSequence* sprite = canvas->rootObject()->findChild<QQuickSpriteSequence*>("sprite");
QVERIFY(sprite);
QVERIFY(sprite->running());
delete canvas;
}
-void tst_qquickspriteimage::test_framerateAdvance()
+void tst_qquickspritesequence::test_framerateAdvance()
{
QQuickView *canvas = new QQuickView(0);
QTest::qWaitForWindowShown(canvas);
QVERIFY(canvas->rootObject());
- QQuickSpriteImage* sprite = canvas->rootObject()->findChild<QQuickSpriteImage*>("sprite");
+ QQuickSpriteSequence* sprite = canvas->rootObject()->findChild<QQuickSpriteSequence*>("sprite");
QVERIFY(sprite);
QTRY_COMPARE(sprite->currentSprite(), QLatin1String("secondState"));
delete canvas;
}
-QTEST_MAIN(tst_qquickspriteimage)
+QTEST_MAIN(tst_qquickspritesequence)
-#include "tst_qquickspriteimage.moc"
+#include "tst_qquickspritesequence.moc"
qquickpositioners \
qquickrepeater \
qquickshadereffect \
- qquickspriteimage \
+ qquickspritesequence \
qquicktext \
qquicktextedit \
qquicktextinput \