Boost::any replacement in Dali Core functions
[platform/core/uifw/dali-core.git] / dali / internal / event / animation / constraint-impl.h
1 #ifndef __DALI_INTERNAL_CONSTRAINT_H__
2 #define __DALI_INTERNAL_CONSTRAINT_H__
3
4 //
5 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
6 //
7 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 // INTERNAL INCLUDES
21 #include <dali/public-api/animation/active-constraint.h>
22 #include <dali/public-api/animation/alpha-functions.h>
23 #include <dali/public-api/animation/constraint.h>
24 #include <dali/public-api/animation/time-period.h>
25 #include <dali/public-api/object/base-object.h>
26 #include <dali/internal/event/animation/constraint-source-impl.h>
27
28 namespace Dali
29 {
30
31 namespace Internal
32 {
33
34 class ActiveConstraintBase;
35 class ProxyObject;
36
37 /**
38  * Constraints are used to constrain a property of an object, after animations have been applied.
39  */
40 class Constraint : public BaseObject
41 {
42 public:
43
44   typedef Any AnyFunction;
45
46   /**
47    * Construct a new constraint which targets a property.
48    * @param [in] target The index of the property to constrain.
49    * @param [in] targetType The type of the constrained property.
50    * @param [in] sources The proxy objects which provide parameters for func.
51    * @param [in] func The constraint function.
52    * @param [in] interpolator A function used to interpolate between the start value, and the value returned by func.
53    */
54   Constraint( Property::Index target,
55               Property::Type targetType,
56               SourceContainer& sources,
57               AnyFunction& func,
58               AnyFunction& interpolator );
59
60   /**
61    * @copydoc Dali::Constraint::SetApplyTime()
62    */
63   void SetApplyTime( TimePeriod timePeriod );
64
65   /**
66    * @copydoc Dali::Constraint::GetApplyTime()
67    */
68   TimePeriod GetApplyTime() const;
69
70   /**
71    * @copydoc Dali::Constraint::SetRemoveTime()
72    */
73   void SetRemoveTime( TimePeriod timePeriod );
74
75   /**
76    * @copydoc Dali::Constraint::GetRemoveTime()
77    */
78   TimePeriod GetRemoveTime() const;
79
80   /**
81    * @copydoc Dali::Constraint::SetAlphaFunction( AlphaFunction func )
82    */
83   void SetAlphaFunction( AlphaFunction func );
84
85   /**
86    * @copydoc Dali::Constraint::GetAlphaFunction()
87    */
88   AlphaFunction GetAlphaFunction() const;
89
90   /**
91    * @copydoc Dali::Constraint::SetRemoveAction()
92    */
93   void SetRemoveAction(Dali::Constraint::RemoveAction action);
94
95   /**
96    * @copydoc Dali::Constraint::GetRemoveAction()
97    */
98   Dali::Constraint::RemoveAction GetRemoveAction() const;
99
100   /**
101    * Create an active constraint.
102    * An active constraint is created each time the constraint is applied to an object.
103    * @return A newly allocated active-constraint.
104    */
105   ActiveConstraintBase* CreateActiveConstraint();
106
107 protected:
108
109   /**
110    * A reference counted object may only be deleted by calling Unreference()
111    */
112   virtual ~Constraint();
113
114 private:
115
116   // Undefined
117   Constraint(const Constraint&);
118
119   // Undefined
120   Constraint& operator=(const Constraint& rhs);
121
122 protected:
123
124   Dali::ActiveConstraint mActiveConstraintTemplate; ///< Used to create active constraints
125
126   TimePeriod mApplyTime;
127 };
128
129 } // namespace Internal
130
131 // Helpers for public-api forwarding methods
132
133 inline Internal::Constraint& GetImplementation(Dali::Constraint& constraint)
134 {
135   DALI_ASSERT_ALWAYS( constraint && "Constraint handle is empty" );
136
137   BaseObject& handle = constraint.GetBaseObject();
138
139   return static_cast<Internal::Constraint&>(handle);
140 }
141
142 inline const Internal::Constraint& GetImplementation(const Dali::Constraint& constraint)
143 {
144   DALI_ASSERT_ALWAYS( constraint && "Constraint handle is empty" );
145
146   const BaseObject& handle = constraint.GetBaseObject();
147
148   return static_cast<const Internal::Constraint&>(handle);
149 }
150
151 } // namespace Dali
152
153 #endif // __DALI_INTERNAL_CONSTRAINT_H__