aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/particles/qquickitemparticle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/particles/qquickitemparticle.cpp')
-rw-r--r--src/declarative/particles/qquickitemparticle.cpp269
1 files changed, 0 insertions, 269 deletions
diff --git a/src/declarative/particles/qquickitemparticle.cpp b/src/declarative/particles/qquickitemparticle.cpp
deleted file mode 100644
index 8b39ac3abd..0000000000
--- a/src/declarative/particles/qquickitemparticle.cpp
+++ /dev/null
@@ -1,269 +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$
-** GNU Lesser General Public License Usage
-** 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.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qquickitemparticle_p.h"
-#include <private/qquickvisualitemmodel_p.h>
-#include <qsgnode.h>
-#include <QTimer>
-#include <QDeclarativeComponent>
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass ItemParticle QQuickItemParticle
- \inqmlmodule QtQuick.Particles 2
- \inherits ParticlePainter
- \brief The ItemParticle element allows you to specify your own delegate to paint particles.
-
-*/
-
-
-/*!
- \qmlmethod void QtQuick.Particles2::ItemParticle::freeze(Item item)
-
- Suspends the flow of time for the logical particle which item represents, allowing you to control its movement.
-*/
-
-/*!
- \qmlmethod void QtQuick.Particles2::ItemParticle::unfreeze(Item item)
-
- Restarts the flow of time for the logical particle which item represents, allowing it to be moved by the particle system again.
-*/
-
-/*!
- \qmlmethod void QtQuick.Particles2::ItemParticle::take(Item item, bool prioritize)
-
- Asks the ItemParticle to take over control of item. It will be emitted when there is a logical particle available.
-
- By default items form a queue when waiting for a logical particle, but if prioritize is true then it will go immediately to the
- head of the queue.
-*/
-/*!
- \qmlmethod void QtQuick.Particles2::ItemParticle::give(Item item)
-
- Orders the ItemParticle to give you control of the item. It will cease controlling it and the item will lose its association to the logical particle.
-*/
-
-/*!
- \qmlproperty bool QtQuick.Particles2::ItemParticle::fade
-
- If true, the item will automatically be faded in and out
- at the ends of its lifetime. If false, you will have to
- implement any entry effect yourself.
-
- Default is true.
-*/
-/*!
- \qmlproperty Component QtQuick.Particles2::ItemParticle::delegate
-
- An instance of the delegate will be created for every logical
- particle, and moved along with it.
-*/
-
-QQuickItemParticle::QQuickItemParticle(QQuickItem *parent) :
- QQuickParticlePainter(parent), m_fade(true), m_delegate(0)
-{
- setFlag(QQuickItem::ItemHasContents);
- QTimer* manageDelegates = new QTimer(this);//TODO: don't leak
- connect(manageDelegates, SIGNAL(timeout()),
- this, SLOT(tick()));
- manageDelegates->setInterval(16);
- manageDelegates->setSingleShot(false);
- manageDelegates->start();
-}
-
-
-void QQuickItemParticle::freeze(QQuickItem* item)
-{
- m_stasis << item;
-}
-
-
-void QQuickItemParticle::unfreeze(QQuickItem* item)
-{
- m_stasis.remove(item);
-}
-
-void QQuickItemParticle::take(QQuickItem *item, bool prioritize)
-{
- if (prioritize)
- m_pendingItems.push_front(item);
- else
- m_pendingItems.push_back(item);
-}
-
-void QQuickItemParticle::give(QQuickItem *item)
-{
- //TODO: This
- Q_UNUSED(item);
-}
-
-void QQuickItemParticle::initialize(int gIdx, int pIdx)
-{
- m_loadables << m_system->groupData[gIdx]->data[pIdx];//defer to other thread
-}
-
-void QQuickItemParticle::commit(int, int)
-{
-}
-
-void QQuickItemParticle::tick()
-{
- foreach (QQuickItem* item, m_deletables){
- if (m_fade)
- item->setOpacity(0.);
- item->setVisible(false);
- QQuickItemParticleAttached* mpa;
- if ((mpa = qobject_cast<QQuickItemParticleAttached*>(qmlAttachedPropertiesObject<QQuickItemParticle>(item))))
- mpa->detach();//reparent as well?
- //TODO: Delete iff we created it
- m_activeCount--;
- }
- m_deletables.clear();
-
- foreach (QQuickParticleData* d, m_loadables){
- if (m_stasis.contains(d->delegate))
- qWarning() << "Current model particles prefers overwrite:false";
- //remove old item from the particle that is dying to make room for this one
- if (d->delegate)
- m_deletables << d->delegate;
- d->delegate = 0;
- if (!m_pendingItems.isEmpty()){
- d->delegate = m_pendingItems.front();
- m_pendingItems.pop_front();
- }else if (m_delegate){
- d->delegate = qobject_cast<QQuickItem*>(m_delegate->create(qmlContext(this)));
- }
- if (d->delegate && d){//###Data can be zero if creating an item leads to a reset - this screws things up.
- d->delegate->setX(d->curX() - d->delegate->width()/2);//TODO: adjust for system?
- d->delegate->setY(d->curY() - d->delegate->height()/2);
- QQuickItemParticleAttached* mpa = qobject_cast<QQuickItemParticleAttached*>(qmlAttachedPropertiesObject<QQuickItemParticle>(d->delegate));
- if (mpa){
- mpa->m_mp = this;
- mpa->attach();
- }
- d->delegate->setParentItem(this);
- if (m_fade)
- d->delegate->setOpacity(0.);
- d->delegate->setVisible(false);//Will be set to true when we prepare the next frame
- m_activeCount++;
- }
- }
- m_loadables.clear();
-}
-
-void QQuickItemParticle::reset()
-{
- QQuickParticlePainter::reset();
- //TODO: Cleanup items?
- m_loadables.clear();
- //deletables?
-}
-
-
-QSGNode* QQuickItemParticle::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 QQuickItem::updatePaintNode(n,d);
-}
-
-void QQuickItemParticle::prepareNextFrame()
-{
- if (!m_system)
- return;
- 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?
- foreach (const QString &str, m_groups){
- int gIdx = m_system->groupIds[str];
- int count = m_system->groupData[gIdx]->size();
-
- for (int i=0; i<count; i++){
- QQuickParticleData* data = m_system->groupData[gIdx]->data[i];
- QQuickItem* item = data->delegate;
- if (!item)
- continue;
- qreal t = ((timeStamp/1000.0) - data->t) / data->lifeSpan;
- if (m_stasis.contains(item)) {
- data->t += dt;//Stasis effect
- continue;
- }
- if (t >= 1.0){//Usually happens from load
- m_deletables << item;
- data->delegate = 0;
- }else{//Fade
- data->delegate->setVisible(true);
- if (m_fade){
- qreal o = 1.;
- if (t<0.2)
- o = t*5;
- if (t>0.8)
- o = (1-t)*5;
- item->setOpacity(o);
- }
- }
- item->setX(data->curX() - item->width()/2 - m_systemOffset.x());
- item->setY(data->curY() - item->height()/2 - m_systemOffset.y());
- }
- }
-}
-
-QQuickItemParticleAttached *QQuickItemParticle::qmlAttachedProperties(QObject *object)
-{
- return new QQuickItemParticleAttached(object);
-}
-
-QT_END_NAMESPACE