cc5a0b8967911076698e23f473b70e0a4a6bfd77
[profile/ivi/qtdeclarative.git] / src / quick / particles / qquicktrailemitter_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
6 **
7 ** This file is part of the Declarative module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef FOLLOWEMITTER_H
43 #define FOLLOWEMITTER_H
44 #include "qquickparticleemitter_p.h"
45 #include "qquickparticleaffector_p.h"
46
47 QT_BEGIN_HEADER
48
49 QT_BEGIN_NAMESPACE
50
51 class QQuickTrailEmitter : public QQuickParticleEmitter
52 {
53     Q_OBJECT
54     Q_PROPERTY(QString follow READ follow WRITE setFollow NOTIFY followChanged)
55     Q_PROPERTY(int emitRatePerParticle READ particlesPerParticlePerSecond WRITE setParticlesPerParticlePerSecond NOTIFY particlesPerParticlePerSecondChanged)
56
57     Q_PROPERTY(QQuickParticleExtruder* emitShape READ emissonShape WRITE setEmissionShape NOTIFY emissionShapeChanged)
58     Q_PROPERTY(qreal emitHeight READ emitterYVariation WRITE setEmitterYVariation NOTIFY emitterYVariationChanged)
59     Q_PROPERTY(qreal emitWidth READ emitterXVariation WRITE setEmitterXVariation NOTIFY emitterXVariationChanged)
60
61     Q_ENUMS(EmitSize)
62 public:
63     enum EmitSize {
64         ParticleSize = -2//Anything less than 0 will do
65     };
66     explicit QQuickTrailEmitter(QQuickItem *parent = 0);
67     virtual void emitWindow(int timeStamp);
68     virtual void reset();
69
70     int particlesPerParticlePerSecond() const
71     {
72         return m_particlesPerParticlePerSecond;
73     }
74
75     qreal emitterXVariation() const
76     {
77         return m_emitterXVariation;
78     }
79
80     qreal emitterYVariation() const
81     {
82         return m_emitterYVariation;
83     }
84
85     QString follow() const
86     {
87         return m_follow;
88     }
89
90     QQuickParticleExtruder* emissonShape() const
91     {
92         return m_emissionExtruder;
93     }
94
95 signals:
96     void emitFollowParticles(QDeclarativeV8Handle particles, QDeclarativeV8Handle followed);
97
98     void particlesPerParticlePerSecondChanged(int arg);
99
100     void emitterXVariationChanged(qreal arg);
101
102     void emitterYVariationChanged(qreal arg);
103
104     void followChanged(QString arg);
105
106     void emissionShapeChanged(QQuickParticleExtruder* arg);
107
108 public slots:
109
110     void setParticlesPerParticlePerSecond(int arg)
111     {
112         if (m_particlesPerParticlePerSecond != arg) {
113             m_particlesPerParticlePerSecond = arg;
114             emit particlesPerParticlePerSecondChanged(arg);
115         }
116     }
117     void setEmitterXVariation(qreal arg)
118     {
119         if (m_emitterXVariation != arg) {
120             m_emitterXVariation = arg;
121             emit emitterXVariationChanged(arg);
122         }
123     }
124
125     void setEmitterYVariation(qreal arg)
126     {
127         if (m_emitterYVariation != arg) {
128             m_emitterYVariation = arg;
129             emit emitterYVariationChanged(arg);
130         }
131     }
132
133     void setFollow(QString arg)
134     {
135         if (m_follow != arg) {
136             m_follow = arg;
137             emit followChanged(arg);
138         }
139     }
140
141     void setEmissionShape(QQuickParticleExtruder* arg)
142     {
143         if (m_emissionExtruder != arg) {
144             m_emissionExtruder = arg;
145             emit emissionShapeChanged(arg);
146         }
147     }
148
149 private slots:
150     void recalcParticlesPerSecond();
151
152 private:
153     QSet<QQuickParticleData*> m_pending;
154     QVector<qreal> m_lastEmission;
155     int m_particlesPerParticlePerSecond;
156     qreal m_lastTimeStamp;
157     qreal m_emitterXVariation;
158     qreal m_emitterYVariation;
159     QString m_follow;
160     int m_followCount;
161     QQuickParticleExtruder* m_emissionExtruder;
162     QQuickParticleExtruder* m_defaultEmissionExtruder;
163     bool isEmitFollowConnected();
164 };
165
166 QT_END_NAMESPACE
167 QT_END_HEADER
168 #endif // FOLLOWEMITTER_H