diff options
Diffstat (limited to 'src/imports/particles/pictureaffector.cpp')
-rw-r--r-- | src/imports/particles/pictureaffector.cpp | 27 |
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; |