aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/particles/main.cpp4
-rw-r--r--src/imports/particles/modelparticle.cpp313
-rw-r--r--src/imports/particles/modelparticle.h145
-rw-r--r--src/imports/particles/particles.pro4
4 files changed, 4 insertions, 462 deletions
diff --git a/src/imports/particles/main.cpp b/src/imports/particles/main.cpp
index c90ea78b7f..072025d6bc 100644
--- a/src/imports/particles/main.cpp
+++ b/src/imports/particles/main.cpp
@@ -70,7 +70,7 @@
#include "particle.h"
#include "coloredparticle.h"
#include "spriteparticle.h"
-#include "modelparticle.h"
+//#include "modelparticle.h"
#include "dataparticle.h"
#include "itemparticle.h"
#include "superparticle.h"
@@ -110,7 +110,7 @@ void ParticlesPlugin::registerTypes(const char *uri)
qmlRegisterType<ParticleType>(uri, 2, 0, "Particle");
qmlRegisterType<ColoredParticle>(uri, 2, 0, "ColoredParticle");
qmlRegisterType<SpriteParticle>(uri, 2, 0, "SpriteParticle");
- qmlRegisterType<ModelParticle>(uri, 2, 0, "ModelParticle");
+ //qmlRegisterType<ModelParticle>(uri, 2, 0, "ModelParticle");
qmlRegisterType<DataParticle>(uri, 2, 0, "DataParticle");
qmlRegisterType<ItemParticle>(uri, 2, 0, "ItemParticle");
//qmlRegisterType<PairedParticle>(uri, 2, 0, "PairedParticle");
diff --git a/src/imports/particles/modelparticle.cpp b/src/imports/particles/modelparticle.cpp
deleted file mode 100644
index 85d6e15157..0000000000
--- a/src/imports/particles/modelparticle.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Declarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "modelparticle.h"
-#include <QtDeclarative/private/qsgvisualitemmodel_p.h>
-#include <qsgnode.h>
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-ModelParticle::ModelParticle(QSGItem *parent) :
- ParticleType(parent), m_ownModel(false), m_comp(0), m_model(0), m_fade(true), m_modelCount(0)
-{
- qDebug() << "Deprecation warning: ModelParticle has bifurcated. I really should just delete this class";//TODO: What he said
- setFlag(QSGItem::ItemHasContents);
-}
-
-QVariant ModelParticle::model() const
-{
- return m_dataSource;
-}
-
-void ModelParticle::setModel(const QVariant &arg)
-{
- if(arg == m_dataSource)
- return;
- m_dataSource = arg;
- if(qobject_cast<QSGVisualDataModel*>(arg.value<QObject*>())) {
- if(m_ownModel && m_model)
- delete m_model;
- m_model = qobject_cast<QSGVisualDataModel*>(arg.value<QObject*>());
- m_ownModel = false;
- }else{
- if(!m_model || !m_ownModel)
- m_model = new QSGVisualDataModel(qmlContext(this));
- m_model->setModel(m_dataSource);
- m_ownModel = true;
- }
- if(m_comp)
- m_model->setDelegate(m_comp);
- emit modelChanged();
- emit modelCountChanged();
- connect(m_model, SIGNAL(countChanged()),
- this, SIGNAL(modelCountChanged()));
- connect(m_model, SIGNAL(countChanged()),
- this, SLOT(updateCount()));
- updateCount();
-}
-
-void ModelParticle::updateCount()
-{
- int newCount = 0;
- if(m_model)
- newCount = m_model->count();
- if(newCount < 0)
- return;//WTF?
- if(m_modelCount == 0 || newCount == 0){
- m_available.clear();
- for(int i=0; i<newCount; i++)
- m_available << i;
- }else if(newCount < m_modelCount){
- for(int i=newCount; i<m_modelCount; i++) //existing ones must leave normally, but aren't readded
- m_available.removeAll(i);
- }else if(newCount > m_modelCount){
- for(int i=m_modelCount; i<newCount; i++)
- m_available << i;
- }
- m_modelCount = newCount;
-}
-
-QDeclarativeComponent *ModelParticle::delegate() const
-{
- if(m_model)
- return m_model->delegate();
- return 0;
-}
-
-void ModelParticle::setDelegate(QDeclarativeComponent *comp)
-{
- if (QSGVisualDataModel *dataModel = qobject_cast<QSGVisualDataModel*>(m_model))
- if (comp == dataModel->delegate())
- return;
- m_comp = comp;
- if(m_model)
- m_model->setDelegate(comp);
- emit delegateChanged();
-}
-
-int ModelParticle::modelCount() const
-{
- if(m_model)
- const_cast<ModelParticle*>(this)->updateCount();//TODO: Investigate why this doesn't get called properly
- return m_modelCount;
-}
-
-
-void ModelParticle::freeze(QSGItem* item)
-{
- m_stasis << item;
-}
-
-
-void ModelParticle::unfreeze(QSGItem* item)
-{
- m_stasis.remove(item);
-}
-
-void ModelParticle::take(QSGItem *item, bool prioritize)
-{
- if(prioritize)
- m_pendingItems.push_front(item);
- else
- m_pendingItems.push_back(item);
-}
-
-void ModelParticle::give(QSGItem *item)
-{
- //TODO: This
-}
-
-void ModelParticle::load(ParticleData* d)
-{
- //if(!m_model || !m_model->count())//Not really a 'model' particle anymore
- // return;
- int pos = particleTypeIndex(d);
- if(m_items[pos]){
- if(m_stasis.contains(m_items[pos]))
- qWarning() << "Current model particles prefers overwrite:false";
- //remove old item from the particle that is dying to make room for this one
- m_items[pos]->setOpacity(0.);
- if(m_idx[pos] >= 0 && m_idx[pos] < m_modelCount){
- m_available << m_idx[pos];
- m_model->release(m_items[pos]);
- }else{
- ModelParticleAttached* mpa;
- if((mpa = qobject_cast<ModelParticleAttached*>(qmlAttachedPropertiesObject<ModelParticle>(m_items[pos], false))))
- mpa->detach();//reparent as well?
- }
- m_idx[pos] = -1;
- m_items[pos] = 0;
- m_data[pos] = 0;
- m_activeCount--;
- }
- if(m_available.isEmpty() && m_pendingItems.isEmpty())
- return;
- if(m_pendingItems.isEmpty()){
- m_items[pos] = m_model->item(m_available.first());
- m_idx[pos] = m_available.first();
- m_available.pop_front();
- ModelParticleAttached* mpa = qobject_cast<ModelParticleAttached*>(qmlAttachedPropertiesObject<ModelParticle>(m_items[pos]));
- if(mpa){
- mpa->m_mp = this;
- mpa->attach();
- }
- }else{
- m_items[pos] = m_pendingItems.front();
- m_pendingItems.pop_front();
- m_items[pos]->setX(d->curX() - m_items[pos]->width()/2);
- m_items[pos]->setY(d->curY() - m_items[pos]->height()/2);
- m_idx[pos] = -2;
- ModelParticleAttached* mpa = qobject_cast<ModelParticleAttached*>(qmlAttachedPropertiesObject<ModelParticle>(m_items[pos]));
- if(mpa){
- mpa->m_mp = this;
- mpa->attach();
- }
- }
- m_items[pos]->setParentItem(this);
- m_data[pos] = d;
- m_activeCount++;
-}
-
-void ModelParticle::reload(ParticleData* d)
-{
- //No-op unless we start copying the data.
-}
-
-void ModelParticle::setCount(int c)
-{
- ParticleType::setCount(c);//###Do we need our own?
- m_particleCount = c;
- reset();
-}
-
-int ModelParticle::count()
-{
- return m_particleCount;
-}
-
-void ModelParticle::reset()
-{
- ParticleType::reset();
- //TODO: Cleanup items?
- m_items.resize(m_particleCount);
- m_data.resize(m_particleCount);
- m_idx.resize(m_particleCount);
- m_items.fill(0);
- m_data.fill(0);
- m_idx.fill(-1);
- //m_available.clear();//Should this be reset too?
- //m_pendingItems.clear();//TODO: Should this be done? If so, Emit signal?
-}
-
-
-QSGNode* ModelParticle::updatePaintNode(QSGNode* n, UpdatePaintNodeData* d)
-{
- //Dummy update just to get painting tick
- if(m_pleaseReset){
- m_pleaseReset = false;
- reset();
- }
- prepareNextFrame();
-
- update();//Get called again
- if(n)
- n->markDirty(QSGNode::DirtyMaterial);
- return QSGItem::updatePaintNode(n,d);
-}
-
-void ModelParticle::prepareNextFrame()
-{
- qint64 timeStamp = m_system->systemSync(this);
- qreal curT = timeStamp/1000.0;
- qreal dt = curT - m_lastT;
- m_lastT = curT;
- if(!m_activeCount)
- return;
-
- //TODO: Size, better fade?
- for(int i=0; i<m_particleCount; i++){
- QSGItem* item = m_items[i];
- ParticleData* data = m_data[i];
- if(!item || !data)
- continue;
- qreal t = ((timeStamp/1000.0) - data->pv.t) / data->pv.lifeSpan;
- if(m_stasis.contains(item)) {
- m_data[i]->pv.t += dt;//Stasis effect
- continue;
- }
- if(t >= 1.0){//Usually happens from load
- item->setOpacity(0.);
- if(m_idx[i] >= 0 && m_idx[i] < m_modelCount){
- m_available << m_idx[i];
- m_model->release(m_items[i]);
- }else{
- ModelParticleAttached* mpa;
- if((mpa = qobject_cast<ModelParticleAttached*>(qmlAttachedPropertiesObject<ModelParticle>(m_items[i]))))
- mpa->detach();//reparent as well?
- }
- m_idx[i] = -1;
- m_items[i] = 0;
- m_data[i] = 0;
- m_activeCount--;
- }else{//Fade
- if(m_fade){
- qreal o = 1.;
- if(t<0.2)
- o = t*5;
- if(t>0.8)
- o = (1-t)*5;
- item->setOpacity(o);
- }else{
- item->setOpacity(1.);//###Without fade, it's just a binary toggle - if we turn it off we have to turn it back on
- }
- }
- item->setX(data->curX() - item->width()/2);
- item->setY(data->curY() - item->height()/2);
- }
-}
-
-ModelParticleAttached *ModelParticle::qmlAttachedProperties(QObject *object)
-{
- return new ModelParticleAttached(object);
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/particles/modelparticle.h b/src/imports/particles/modelparticle.h
deleted file mode 100644
index 7eda770554..0000000000
--- a/src/imports/particles/modelparticle.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Declarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MODELPARTICLE_H
-#define MODELPARTICLE_H
-#include "particle.h"
-#include <QPointer>
-#include <QSet>
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Declarative)
-class QSGVisualDataModel;
-class ModelParticleAttached;
-
-class ModelParticle : public ParticleType
-{
- Q_OBJECT
-
- Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_PROPERTY(int modelCount READ modelCount NOTIFY modelCountChanged)
- Q_PROPERTY(bool fade READ fade WRITE setFade NOTIFY fadeChanged)
- Q_CLASSINFO("DefaultProperty", "delegate")
-public:
- explicit ModelParticle(QSGItem *parent = 0);
- QVariant model() const;
- void setModel(const QVariant &);
-
- QDeclarativeComponent *delegate() const;
- void setDelegate(QDeclarativeComponent *);
-
- int modelCount() const;
-
- bool fade() const { return m_fade; }
-
- virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
- virtual void load(ParticleData*);
- virtual void reload(ParticleData*);
- virtual void setCount(int c);
- virtual int count();
-
- static ModelParticleAttached *qmlAttachedProperties(QObject *object);
-signals:
- void modelChanged();
- void delegateChanged();
- void modelCountChanged();
- void fadeChanged();
-
-public slots:
- void freeze(QSGItem* item);
- void unfreeze(QSGItem* item);
- void take(QSGItem* item,bool prioritize=false);//take by modelparticle
- void give(QSGItem* item);//give from modelparticle
-
- void setFade(bool arg){if(arg == m_fade) return; m_fade = arg; emit fadeChanged();}
-protected:
- virtual void reset();
- void prepareNextFrame();
-private slots:
- void updateCount();
-private:
- bool m_ownModel;
- QDeclarativeComponent* m_comp;
- QSGVisualDataModel *m_model;
- QVariant m_dataSource;
- QList<QPointer<QSGItem> > m_deletables;
- int m_particleCount;
- bool m_fade;
-
- QList<QSGItem*> m_pendingItems;
- QVector<QSGItem*> m_items;
- QVector<ParticleData*> m_data;
- QVector<int> m_idx;
- QList<int> m_available;
- QSet<QSGItem*> m_stasis;
- qreal m_lastT;
- int m_activeCount;
- int m_modelCount;
-};
-
-class ModelParticleAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(ModelParticle* particle READ particle CONSTANT);
-public:
- ModelParticleAttached(QObject* parent)
- : QObject(parent), m_mp(0)
- {;}
- ModelParticle* particle() {return m_mp;}
- void detach(){emit detached();}
- void attach(){emit attached();}
-private:
- ModelParticle* m_mp;
- friend class ModelParticle;
-Q_SIGNALS:
- void detached();
- void attached();
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPEINFO(ModelParticle, QML_HAS_ATTACHED_PROPERTIES)
-
-QT_END_HEADER
-#endif // MODELPARTICLE_H
diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro
index 1ce3f8eeb4..a6930fe95c 100644
--- a/src/imports/particles/particles.pro
+++ b/src/imports/particles/particles.pro
@@ -41,7 +41,7 @@ HEADERS += \
pointvector.h \
angledvector.h \
directedvector.h \
- modelparticle.h \
+ #modelparticle.h \
eternalaffector.h \
lineextruder.h \
resetaffector.h \
@@ -92,7 +92,7 @@ SOURCES += \
pointvector.cpp \
angledvector.cpp \
directedvector.cpp \
- modelparticle.cpp \
+ #modelparticle.cpp \
eternalaffector.cpp \
lineextruder.cpp \
resetaffector.cpp \