Rename Qt Quick-specific classes to QQuick*
[profile/ivi/qtdeclarative.git] / src / declarative / particles / qsgtrailemitter_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
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 "qsgparticleemitter_p.h"
45 #include "qsgparticleaffector_p.h"
46
47 QT_BEGIN_HEADER
48
49 QT_BEGIN_NAMESPACE
50
51 QT_MODULE(Declarative)
52
53
54 class QSGTrailEmitter : public QSGParticleEmitter
55 {
56     Q_OBJECT
57     Q_PROPERTY(QString follow READ follow WRITE setFollow NOTIFY followChanged)
58     Q_PROPERTY(int emitRatePerParticle READ particlesPerParticlePerSecond WRITE setParticlesPerParticlePerSecond NOTIFY particlesPerParticlePerSecondChanged)
59
60     Q_PROPERTY(QSGParticleExtruder* emitShape READ emissonShape WRITE setEmissionShape NOTIFY emissionShapeChanged)
61     Q_PROPERTY(qreal emitHeight READ emitterYVariation WRITE setEmitterYVariation NOTIFY emitterYVariationChanged)
62     Q_PROPERTY(qreal emitWidth READ emitterXVariation WRITE setEmitterXVariation NOTIFY emitterXVariationChanged)
63
64     Q_ENUMS(EmitSize)
65 public:
66     enum EmitSize {
67         ParticleSize = -2//Anything less than 0 will do
68     };
69     explicit QSGTrailEmitter(QQuickItem *parent = 0);
70     virtual void emitWindow(int timeStamp);
71     virtual void reset();
72
73     int particlesPerParticlePerSecond() const
74     {
75         return m_particlesPerParticlePerSecond;
76     }
77
78     qreal emitterXVariation() const
79     {
80         return m_emitterXVariation;
81     }
82
83     qreal emitterYVariation() const
84     {
85         return m_emitterYVariation;
86     }
87
88     QString follow() const
89     {
90         return m_follow;
91     }
92
93     QSGParticleExtruder* emissonShape() const
94     {
95         return m_emissionExtruder;
96     }
97
98 signals:
99     void emitFollowParticles(QDeclarativeV8Handle particles, QDeclarativeV8Handle followed);
100
101     void particlesPerParticlePerSecondChanged(int arg);
102
103     void emitterXVariationChanged(qreal arg);
104
105     void emitterYVariationChanged(qreal arg);
106
107     void followChanged(QString arg);
108
109     void emissionShapeChanged(QSGParticleExtruder* arg);
110
111 public slots:
112
113     void setParticlesPerParticlePerSecond(int arg)
114     {
115         if (m_particlesPerParticlePerSecond != arg) {
116             m_particlesPerParticlePerSecond = arg;
117             emit particlesPerParticlePerSecondChanged(arg);
118         }
119     }
120     void setEmitterXVariation(qreal arg)
121     {
122         if (m_emitterXVariation != arg) {
123             m_emitterXVariation = arg;
124             emit emitterXVariationChanged(arg);
125         }
126     }
127
128     void setEmitterYVariation(qreal arg)
129     {
130         if (m_emitterYVariation != arg) {
131             m_emitterYVariation = arg;
132             emit emitterYVariationChanged(arg);
133         }
134     }
135
136     void setFollow(QString arg)
137     {
138         if (m_follow != arg) {
139             m_follow = arg;
140             emit followChanged(arg);
141         }
142     }
143
144     void setEmissionShape(QSGParticleExtruder* arg)
145     {
146         if (m_emissionExtruder != arg) {
147             m_emissionExtruder = arg;
148             emit emissionShapeChanged(arg);
149         }
150     }
151
152 private slots:
153     void recalcParticlesPerSecond();
154
155 private:
156     QSet<QSGParticleData*> m_pending;
157     QVector<qreal> m_lastEmission;
158     int m_particlesPerParticlePerSecond;
159     qreal m_lastTimeStamp;
160     qreal m_emitterXVariation;
161     qreal m_emitterYVariation;
162     QString m_follow;
163     int m_followCount;
164     QSGParticleExtruder* m_emissionExtruder;
165     QSGParticleExtruder* m_defaultEmissionExtruder;
166     bool isEmitFollowConnected();
167 };
168
169 QT_END_NAMESPACE
170 QT_END_HEADER
171 #endif // FOLLOWEMITTER_H