152 Q_PROPERTY(QUrl source READ image WRITE setImage NOTIFY imageChanged)
153 Q_PROPERTY(QQmlListProperty<QQuickSprite> sprites READ sprites)
154 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
158 Q_PROPERTY(QUrl colorTable READ colortable WRITE setColortable NOTIFY colortableChanged)
159 Q_PROPERTY(QUrl sizeTable READ sizetable WRITE setSizetable NOTIFY sizetableChanged)
160 Q_PROPERTY(QUrl opacityTable READ opacitytable WRITE setOpacitytable NOTIFY opacitytableChanged)
163 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged RESET resetColor)
165 Q_PROPERTY(qreal colorVariation READ colorVariation WRITE setColorVariation NOTIFY colorVariationChanged RESET resetColor)
166 Q_PROPERTY(qreal redVariation READ redVariation WRITE setRedVariation NOTIFY redVariationChanged RESET resetColor)
167 Q_PROPERTY(qreal greenVariation READ greenVariation WRITE setGreenVariation NOTIFY greenVariationChanged RESET resetColor)
168 Q_PROPERTY(qreal blueVariation READ blueVariation WRITE setBlueVariation NOTIFY blueVariationChanged RESET resetColor)
170 Q_PROPERTY(qreal alpha READ alpha WRITE setAlpha NOTIFY alphaChanged RESET resetColor)
171 Q_PROPERTY(qreal alphaVariation READ alphaVariation WRITE setAlphaVariation NOTIFY alphaVariationChanged RESET resetColor)
173 Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged RESET resetRotation)
174 Q_PROPERTY(qreal rotationVariation READ rotationVariation WRITE setRotationVariation NOTIFY rotationVariationChanged RESET resetRotation)
175 Q_PROPERTY(qreal rotationVelocity READ rotationVelocity WRITE setRotationVelocity NOTIFY rotationVelocityChanged RESET resetRotation)
176 Q_PROPERTY(qreal rotationVelocityVariation READ rotationVelocityVariation WRITE setRotationVelocityVariation NOTIFY rotationVelocityVariationChanged RESET resetRotation)
179 Q_PROPERTY(
bool autoRotation READ autoRotation WRITE setAutoRotation NOTIFY autoRotationChanged RESET resetRotation)
182 Q_PROPERTY(QQuickDirection* xVector READ xVector WRITE setXVector NOTIFY xVectorChanged RESET resetDeformation)
184 Q_PROPERTY(QQuickDirection* yVector READ yVector WRITE setYVector NOTIFY yVectorChanged RESET resetDeformation)
185 Q_PROPERTY(
bool spritesInterpolate READ spritesInterpolate WRITE setSpritesInterpolate NOTIFY spritesInterpolateChanged)
187 Q_PROPERTY(EntryEffect entryEffect READ entryEffect WRITE setEntryEffect NOTIFY entryEffectChanged)
188 QML_NAMED_ELEMENT(ImageParticle)
189 QML_ADDED_IN_VERSION(2, 0)
191 explicit QQuickImageParticle(QQuickItem *parent =
nullptr);
192 virtual ~QQuickImageParticle();
194 enum Status { Null, Ready, Loading, Error };
197 QQmlListProperty<QQuickSprite> sprites();
198 QQuickStochasticEngine* spriteEngine() {
return m_spriteEngine;}
207 enum PerformanceLevel{
217 QUrl image()
const {
return m_image ? m_image->source : QUrl(); }
218 void setImage(
const QUrl &image);
220 QUrl colortable()
const {
return m_colorTable ? m_colorTable->source : QUrl(); }
221 void setColortable(
const QUrl &table);
223 QUrl sizetable()
const {
return m_sizeTable ? m_sizeTable->source : QUrl(); }
224 void setSizetable (
const QUrl &table);
226 QUrl opacitytable()
const {
return m_opacityTable ? m_opacityTable->source : QUrl(); }
227 void setOpacitytable(
const QUrl &table);
229 QColor color()
const {
return m_color; }
230 void setColor(
const QColor &color);
232 qreal colorVariation()
const {
return m_color_variation; }
233 void setColorVariation(qreal var);
235 qreal alphaVariation()
const {
return m_alphaVariation; }
237 qreal alpha()
const {
return m_alpha; }
239 qreal redVariation()
const {
return m_redVariation; }
241 qreal greenVariation()
const {
return m_greenVariation; }
243 qreal blueVariation()
const {
return m_blueVariation; }
245 qreal rotation()
const {
return m_rotation; }
247 qreal rotationVariation()
const {
return m_rotationVariation; }
249 qreal rotationVelocity()
const {
return m_rotationVelocity; }
251 qreal rotationVelocityVariation()
const {
return m_rotationVelocityVariation; }
253 bool autoRotation()
const {
return m_autoRotation; }
255 QQuickDirection* xVector()
const {
return m_xVector; }
257 QQuickDirection* yVector()
const {
return m_yVector; }
259 bool spritesInterpolate()
const {
return m_spritesInterpolate; }
261 bool bypassOptimizations()
const {
return m_bypassOptimizations; }
263 EntryEffect entryEffect()
const {
return m_entryEffect; }
265 Status status()
const {
return m_status; }
268 void resetRotation();
269 void resetDeformation();
274 void colortableChanged();
275 void sizetableChanged();
276 void opacitytableChanged();
279 void colorVariationChanged();
281 void alphaVariationChanged(qreal arg);
283 void alphaChanged(qreal arg);
285 void redVariationChanged(qreal arg);
287 void greenVariationChanged(qreal arg);
289 void blueVariationChanged(qreal arg);
291 void rotationChanged(qreal arg);
293 void rotationVariationChanged(qreal arg);
295 void rotationVelocityChanged(qreal arg);
297 void rotationVelocityVariationChanged(qreal arg);
299 void autoRotationChanged(
bool arg);
301 void xVectorChanged(QQuickDirection* arg);
303 void yVectorChanged(QQuickDirection* arg);
305 void spritesInterpolateChanged(
bool arg);
307 void bypassOptimizationsChanged(
bool arg);
309 void entryEffectChanged(EntryEffect arg);
311 void statusChanged(Status arg);
314 void setAlphaVariation(qreal arg);
316 void setAlpha(qreal arg);
318 void setRedVariation(qreal arg);
320 void setGreenVariation(qreal arg);
322 void setBlueVariation(qreal arg);
324 void setRotation(qreal arg);
326 void setRotationVariation(qreal arg);
328 void setRotationVelocity(qreal arg);
330 void setRotationVelocityVariation(qreal arg);
332 void setAutoRotation(
bool arg);
334 void setXVector(QQuickDirection* arg);
336 void setYVector(QQuickDirection* arg);
338 void setSpritesInterpolate(
bool arg);
340 void setBypassOptimizations(
bool arg);
342 void setEntryEffect(EntryEffect arg);
345 void reset() override;
346 void initialize(
int gIdx,
int pIdx) override;
347 void commit(
int gIdx,
int pIdx) override;
349 QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
350 bool prepareNextFrame(QSGNode**);
351 void buildParticleNodes(QSGNode**);
353 void sceneGraphInvalidated() override;
358 void spriteAdvance(
int spriteIndex);
359 void spritesUpdate(qreal time = 0 );
360 void mainThreadFetchImageData();
361 void invalidateSceneGraph();
368 QScopedPointer<ImageData> m_image;
369 QScopedPointer<ImageData> m_colorTable;
370 QScopedPointer<ImageData> m_sizeTable;
371 QScopedPointer<ImageData> m_opacityTable;
372 bool loadingSomething();
374 void finishBuildParticleNodes(QSGNode **n);
377 qreal m_color_variation;
379 QSGNode *m_outgoingNode;
380 QHash<
int, QSGGeometryNode *> m_nodes;
381 QHash<
int,
int> m_idxStarts;
382 QList<std::pair<
int,
int> > m_startsIdx;
385 QSGMaterial *m_material;
389 qreal m_alphaVariation;
391 qreal m_redVariation;
392 qreal m_greenVariation;
393 qreal m_blueVariation;
395 qreal m_rotationVariation;
396 qreal m_rotationVelocity;
397 qreal m_rotationVelocityVariation;
399 QQuickDirection* m_xVector;
400 QQuickDirection* m_yVector;
402 QList<QQuickSprite*> m_sprites;
403 QQuickSpriteEngine* m_spriteEngine;
404 bool m_spritesInterpolate;
406 bool m_explicitColor;
407 bool m_explicitRotation;
408 bool m_explicitDeformation;
409 bool m_explicitAnimation;
410 QHash<
int, QVector<QQuickParticleData*> > m_shadowData;
412 QQuickParticleData* getShadowDatum(QQuickParticleData* datum);
414 bool m_bypassOptimizations;
415 PerformanceLevel perfLevel;
416 PerformanceLevel m_targetPerfLevel;
417 void checkPerfLevel(PerformanceLevel level);
421 template<
class Vertex>
422 void initTexCoords(Vertex* v,
int count){
423 Vertex* end = v + count;
442 ImageMaterialData *getState(QSGMaterial *m) {
443 return static_cast<ImageMaterial *>(m)->state();
446 EntryEffect m_entryEffect;
448 int m_startedImageLoading;
452 bool m_previousActive;