eb6e06fdaa363b46ed687f6acc31c93b71384101
[platform/core/uifw/dali-core.git] / dali / public-api / animation / alpha-function.h
1 #ifndef __DALI_ALPHA_FUNCTION_H__
2 #define __DALI_ALPHA_FUNCTION_H__
3
4 /*
5  * Copyright (c) 2015 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 // INTERNAL INCLUDES
22 #include <dali/public-api/common/dali-common.h>
23 #include <dali/public-api/common/constants.h>
24 #include <dali/public-api/math/compile-time-math.h>
25 #include <dali/public-api/math/math-utils.h>
26 #include <dali/public-api/math/vector2.h>
27 #include <dali/public-api/math/vector4.h>
28
29 namespace Dali
30 {
31 /**
32  * @addtogroup dali-core-animation
33  * @{
34  */
35
36 typedef float (*AlphaFunctionPrototype)(float progress); ///< Prototype of an alpha function
37
38   /*
39    * @brief Alpha functions are used in animations to specify the rate of change of the animation parameter over time.
40    * Understanding an animation as a parametric function over time, the alpha function is applied to the parameter of
41    * the animation before computing the final animation value.
42    */
43 class DALI_IMPORT_API AlphaFunction
44 {
45 public:
46
47   /**
48    * Built-in alpha functions
49    */
50   enum BuiltinFunction
51   {
52     DEFAULT,            ///< Linear
53     LINEAR,             ///< No transformation
54     REVERSE,            ///< Reverse linear
55
56     EASE_IN_SQUARE,     ///< Speeds up and comes to a sudden stop (Square)
57     EASE_OUT_SQUARE,    ///< Sudden start and slows to a gradual stop (Square)
58
59     EASE_IN,            ///< Speeds up and comes to a sudden stop (Cubic)
60     EASE_OUT,           ///< Sudden start and slows to a gradual stop (Cubic)
61     EASE_IN_OUT,        ///< Speeds up and slows to a gradual stop (Cubic)
62
63     EASE_IN_SINE,       ///< Speeds up and comes to a sudden stop (sinusoidal)
64     EASE_OUT_SINE,      ///< Sudden start and slows to a gradual stop (sinusoidal)
65     EASE_IN_OUT_SINE,   ///< Speeds up and slows to a gradual stop (sinusoidal)
66
67     BOUNCE,             ///< Sudden start, loses momentum and returns to start position
68     SIN,                ///< Single revolution
69     EASE_OUT_BACK,      ///< Sudden start, exceed end position and return to a gradual stop
70
71     COUNT
72   };
73
74   /**
75    * All possible functioning modes for the alpha function
76    */
77   enum Mode
78   {
79     BUILTIN_FUNCTION,  //< The user has specified a built-in function
80     CUSTOM_FUNCTION,   //< The user has provided a custom function
81     BEZIER             //< The user has provided the control points of a bezier curve
82   };
83
84   /**
85    * @brief Default constructor.
86    * Creates an alpha function object with the default built-in alpha function
87    * @return The alpha function
88    */
89   AlphaFunction();
90
91   /**
92    * @brief Constructor.
93    * Creates an alpha function object with the built-in alpha function passed as a parameter
94    * to the constructor
95    * @param[in] function One of the built-in alpha functions
96    * @return The alpha function
97    */
98   AlphaFunction( BuiltinFunction function);
99
100   /**
101    * @brief Constructor.
102    * Creates an alpha function object using a pointer to an alpha function passed as a paramter
103    * to the constructor
104    * @param[in] function A pointer to an alpha function
105    * @return The alpha function
106    */
107   AlphaFunction( AlphaFunctionPrototype function);
108
109   /**
110    * @brief Constructor.
111    * Creates a bezier alpha function. The bezier will have the first point at (0,0) and
112    * the end point at (1,1).
113    * @note The x components of the control points will be clamped to the range [0,1] to prevent
114    * non monotonic curves.
115    * @param[in] controlPoint0 A Vector2 which will be used as the first control point of the curve
116    * @param[in] controlPoint1 A Vector2 which will be used as the second control point of the curve
117    * @return The alpha function
118    */
119   AlphaFunction( const Dali::Vector2& controlPoint0, const Dali::Vector2& controlPoint1 );
120
121   /**
122    * @brief Return the control points of the alpha function
123    * @return Vector4 containing the two control points of the curve.
124    * (xy for the first point and zw for the second)
125    */
126   Vector4 GetBezierControlPoints() const;
127
128   /**
129    * @brief Returns the pointer to the custom function
130    * @return A pointer to a custom alpha function or 0 if not defined
131    */
132   AlphaFunctionPrototype GetCustomFunction() const;
133
134   /**
135    * @brief Returns the built0in function used by the alpha function
136    * @return One of the built-in alpha functions. In case no built-in function
137    * has been specified, it will return AlphaFunction::DEfAULT
138    */
139   BuiltinFunction GetBuiltinFunction() const;
140
141   /**
142    * @brief Returns the functioning mode of the alpha function
143    * @return The functioning mode of the alpha function
144    */
145   Mode GetMode() const;
146
147 private:
148
149   Vector4                 mBezierControlPoints;   //< Control points for the bezier alpha function
150   AlphaFunctionPrototype  mCustom;                //< Pointer to an alpha function
151   BuiltinFunction         mBuiltin : Log<COUNT>::value+1; //< Enum indicating the built-in alpha function
152   Mode                    mMode    : 2;                   //< Enum indicating the functioning mode of the AlphaFunction
153 };
154
155 /**
156  * @}
157  */
158 } // namespace Dali
159
160 #endif // __DALI_ALPHA_FUNCTION_H__