aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/particles/pictureaffector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/particles/pictureaffector.cpp')
-rw-r--r--src/imports/particles/pictureaffector.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/imports/particles/pictureaffector.cpp b/src/imports/particles/pictureaffector.cpp
index c05a553f39..d684b3fd80 100644
--- a/src/imports/particles/pictureaffector.cpp
+++ b/src/imports/particles/pictureaffector.cpp
@@ -42,11 +42,13 @@
#include "pictureaffector.h"
#include "coloredparticle.h"
#include <QDebug>
+#include <private/qsgtexture_p.h>
+#include <private/qdeclarativepixmapcache_p.h>
QT_BEGIN_NAMESPACE
PictureAffector::PictureAffector(QSGItem *parent) :
- ParticleAffector(parent)
+ ParticleAffector(parent), m_pix(0)
{
m_needsReset = true;
}
@@ -56,6 +58,27 @@ void PictureAffector::reset(int systemIdx)
ParticleAffector::reset(systemIdx);
}
+void PictureAffector::startLoadImage()
+{
+ if(m_pix)
+ m_pix->clear();
+ else
+ m_pix = new QDeclarativePixmap();
+ m_pix->load(qmlEngine(this), m_image, QDeclarativePixmap::Cache);
+ if(m_pix->isReady())
+ loadImage();
+ else
+ m_pix->connectFinished(this, SLOT(loadImage()));
+}
+void PictureAffector::loadImage()
+{
+ QSGPlainTexture* ptext = qobject_cast<QSGPlainTexture*>(m_pix->texture());
+ if(ptext)
+ m_loadedImage = ptext->image();
+ if(m_loadedImage.isNull())
+ qWarning() << "PictureAffector could not load picture " << m_image;
+}
+
bool PictureAffector::affectParticle(ParticleData *d, qreal dt)
{
Q_UNUSED(dt);
@@ -74,7 +97,7 @@ bool PictureAffector::affectParticle(ParticleData *d, qreal dt)
QPoint pos = QPoint(d->curX() - m_offset.x(), d->curY() - m_offset.y());
if(!QRect(0,0,width(),height()).contains(pos)){
//XXX: Just a debugging helper, as I don't think it can get here.
- qWarning() << "An unexpected situation has occurred. But don't worry, everything will be fine.";
+ qWarning() << "PictureAffector gives up.";
return false;
}
Color4ub c;