Merge "Remove obsolete and non functional SizeChanged signal from actor" into tizen
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / shader-effects / bubble-effect / bubble-effect.h
1 #ifndef __DALI_TOOLKIT_SHADER_BUBBLE_EFFECT_H__
2 #define __DALI_TOOLKIT_SHADER_BUBBLE_EFFECT_H__
3
4 /*
5  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/shader-effects/shader-effect.h>
23
24 namespace Dali
25 {
26
27 namespace Toolkit
28 {
29
30 /**
31  * BubbleEffect is a custom shader to achieve similar effect of particle system by applying on a specially created MeshActor
32  * Each bubble is rendered on a patch with two triangles; and each mesh can contain multiple such patches.
33  */
34 class DALI_IMPORT_API BubbleEffect : public ShaderEffect
35 {
36 public:
37
38   /**
39    * Create an empty BubbleEffect handle
40    */
41   BubbleEffect();
42
43   /**
44    * @brief Destructor
45    *
46    * This is non-virtual since derived Handle types must not contain data or virtual methods.
47    */
48   ~BubbleEffect();
49
50   /**
51    * Create an initialized BubbleEffect
52    * @param[in] numberOfBubble How many groups of uniforms are used to control the bubble movement.
53    * Note: Limited by the maximum available uniforms, this parameter cannot be bigger than 100.
54    * Ideally use one group of uniform to control one bubble.
55    * If the num of patches in the MeshActor is more than groups of uniforms,
56    * the uniform values will be shared by multiple bubbles. Allow up to 9 times.
57    * @param shapeImagePath File path of the image that will be used as a texture for each bubble.
58    * @return A handle to a newly allocated Dali resource.
59    */
60   static BubbleEffect New( unsigned int numberOfBubble, const std::string& shapeImagePath);
61
62   /**
63    * Set the bubble movement area for the BubbleEffect
64    * @param[in] movementArea The size of bubble movement area; by default, it is the stage size
65    */
66   void SetMovementArea( const Vector2& movementArea );
67
68   /**
69    * Set the start and end positions of the index-th bubble's movement.
70    * @param[in] index Indicate which bubble these properties are applied on.
71    * @param[in] startAndEndPosition The start and the end position of movement.
72    */
73   void SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition );
74
75   /**
76    * Set the movement completed percentage of the index-th bubble.
77    * The bubble will appear at start position when percentage equals to zero,
78    * and disappear near end position (affected by gravity) when percentage equals to one.
79    * This percentage property is used to animate the bubble movement.
80    * @param[in] index Indicate which bubble this property is applied on.
81    * @param[in] percentage Set the percentage property value ( between zero and one ).
82    */
83   void SetPercentage( unsigned int index, float percentage );
84
85   /**
86    * Set the gravity applied to the y direction, which makes the bubbles no longer moving on a straight line.
87    * @param[in] gravity The gravity on the y direction.
88    */
89   void SetGravity( float gravity );
90
91   /*
92    * Set the width of shape image
93    * If one image has multiple shape, bubble effect will parse one shape from the image randomly.
94    * @param[in] imageWidth width of shape image
95    */
96   void SetShapeImageWidth( float imageWidth );
97
98   /**
99    * Set the scale factor applied to the bubbles
100    * @param[in] scale The scale factor applied on all bubbles.
101    */
102   void SetDynamicScale( float scale );
103
104   /**
105    * Increase both the bubble size and moving speed.
106    * Animate this peoperty to create special effect such as all the bubbles blow up on the screen.
107    * @param[in] magnification The manified factor applied on the bubble size and moving speed.
108    */
109   void SetMagnification( float magnification );
110
111   /**
112    * Get the name for the idx-th percentage property.
113    * @param[in] index The percentage property index.
114    * @return std::string containing the property name.
115    */
116   std::string GetPercentagePropertyName( unsigned int index ) const;
117
118   /**
119    * Get the name for the magnification property.
120    * @return std::string containinf the property name.
121    */
122   std::string GetMagnificationPropertyName() const;
123
124   /**
125    * Reset the uniform values to default.
126    */
127   void ResetParameters();
128
129 private:// Not intended for application developers
130
131   DALI_INTERNAL BubbleEffect( ShaderEffect handle );
132
133 private:
134
135   unsigned int mNumberOfBubbles;
136   Vector2      mMovementArea;
137 };
138
139 } // namespace Toolkit
140
141 } // namespace Dali
142 #endif /* __DALI_TOOLKIT_SHADER_BUBBLE_EFFECT_H__ */