Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickanimatedsprite_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QQUICKANIMATEDSPRITE_P_H
6#define QQUICKANIMATEDSPRITE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <private/qtquickglobal_p.h>
20
22
23#include <QtQuick/QQuickItem>
24#include <private/qquicksprite_p.h>
25#include <QtCore/qelapsedtimer.h>
26
27QT_BEGIN_NAMESPACE
28
29class QSGContext;
30class QQuickSprite;
31class QQuickSpriteEngine;
32class QSGGeometryNode;
34class QSGSpriteNode;
35class Q_QUICK_EXPORT QQuickAnimatedSprite : public QQuickItem
36{
37 Q_OBJECT
38 Q_PROPERTY(bool running READ running WRITE setRunning NOTIFY runningChanged)
39 Q_PROPERTY(bool interpolate READ interpolate WRITE setInterpolate NOTIFY interpolateChanged)
40 //###try to share similar spriteEngines for less overhead?
41 //These properties come out of QQuickSprite, since an AnimatedSprite is a renderer for a single sprite
42 Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
43 Q_PROPERTY(bool reverse READ reverse WRITE setReverse NOTIFY reverseChanged)
44 Q_PROPERTY(bool frameSync READ frameSync WRITE setFrameSync NOTIFY frameSyncChanged)
45 Q_PROPERTY(int frameCount READ frameCount WRITE setFrameCount NOTIFY frameCountChanged)
46 //If frame height or width is not specified, it is assumed to be a single long row of square frames.
47 //Otherwise, it can be multiple contiguous rows, when one row runs out the next will be used.
48 Q_PROPERTY(int frameHeight READ frameHeight WRITE setFrameHeight NOTIFY frameHeightChanged)
49 Q_PROPERTY(int frameWidth READ frameWidth WRITE setFrameWidth NOTIFY frameWidthChanged)
50 Q_PROPERTY(int frameX READ frameX WRITE setFrameX NOTIFY frameXChanged)
51 Q_PROPERTY(int frameY READ frameY WRITE setFrameY NOTIFY frameYChanged)
52 //Precedence order: frameRate, frameDuration
53 Q_PROPERTY(qreal frameRate READ frameRate WRITE setFrameRate NOTIFY frameRateChanged RESET resetFrameRate)
54 Q_PROPERTY(int frameDuration READ frameDuration WRITE setFrameDuration NOTIFY frameDurationChanged RESET resetFrameDuration)
55 //Extra Simple Sprite Stuff
56 Q_PROPERTY(int loops READ loops WRITE setLoops NOTIFY loopsChanged)
57 Q_PROPERTY(bool paused READ paused WRITE setPaused NOTIFY pausedChanged)
58 Q_PROPERTY(int currentFrame READ currentFrame WRITE setCurrentFrame NOTIFY currentFrameChanged)
59 Q_PROPERTY(FinishBehavior finishBehavior READ finishBehavior WRITE setFinishBehavior NOTIFY finishBehaviorChanged REVISION(2, 15))
60 QML_NAMED_ELEMENT(AnimatedSprite)
61 QML_ADDED_IN_VERSION(2, 0)
62
63public:
64 explicit QQuickAnimatedSprite(QQuickItem *parent = nullptr);
65 enum LoopParameters {
66 Infinite = -1
67 };
68 Q_ENUM(LoopParameters)
69
70 enum FinishBehavior {
71 FinishAtInitialFrame,
72 FinishAtFinalFrame
73 };
74 Q_ENUM(FinishBehavior)
75
76 bool running() const;
77 bool interpolate() const;
78 QUrl source() const;
79 bool reverse() const;
80 bool frameSync() const;
81 int frameCount() const;
82 int frameHeight() const;
83 int frameWidth() const;
84 int frameX() const;
85 int frameY() const;
86 qreal frameRate() const;
87 int frameDuration() const;
88 int loops() const;
89 bool paused() const;
90 int currentFrame() const;
91 FinishBehavior finishBehavior() const;
92 void setFinishBehavior(FinishBehavior arg);
93
94Q_SIGNALS:
95
96 void pausedChanged(bool arg);
97 void runningChanged(bool arg);
98 void interpolateChanged(bool arg);
99
100 void sourceChanged(const QUrl &arg);
101 void reverseChanged(bool arg);
102 void frameSyncChanged(bool arg);
103 void frameCountChanged(int arg);
104 void frameHeightChanged(int arg);
105 void frameWidthChanged(int arg);
106 void frameXChanged(int arg);
107 void frameYChanged(int arg);
108 void frameRateChanged(qreal arg);
109 void frameDurationChanged(int arg);
110 void loopsChanged(int arg);
111 void currentFrameChanged(int arg);
112 Q_REVISION(2, 15) void finishBehaviorChanged(QQuickAnimatedSprite::FinishBehavior arg);
113
114 Q_REVISION(2, 12) void finished();
115
116public Q_SLOTS:
117 void start();
118 void stop();
119 void restart() {stop(); start();}
120 void advance(int frames=1);
121 void pause();
122 void resume();
123
124 void setRunning(bool arg);
125 void setPaused(bool arg);
126 void setInterpolate(bool arg);
127 void setSource(const QUrl &arg);
128 void setReverse(bool arg);
129 void setFrameSync(bool arg);
130 void setFrameCount(int arg);
131 void setFrameHeight(int arg);
132 void setFrameWidth(int arg);
133 void setFrameX(int arg);
134 void setFrameY(int arg);
135 void setFrameRate(qreal arg);
136 void setFrameDuration(int arg);
137 void resetFrameRate();
138 void resetFrameDuration();
139 void setLoops(int arg);
140 void setCurrentFrame(int arg);
141
142private Q_SLOTS:
143 void createEngine();
144
145protected Q_SLOTS:
146 void reset();
147
148protected:
149 void componentComplete() override;
150 QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
151 void itemChange(ItemChange, const ItemChangeData &) override;
152
153private:
154 void maybeUpdate();
155 bool isCurrentFrameChangedConnected();
156 void prepareNextFrame(QSGSpriteNode *node);
157 void reloadImage();
158 QSGSpriteNode* initNode();
159
160private:
161 Q_DECLARE_PRIVATE(QQuickAnimatedSprite)
162};
163
164QT_END_NAMESPACE
165
166#endif // QQUICKANIMATEDSPRITE_P_H
QT_REQUIRE_CONFIG(quick_sprite)