Fix MSVC warning.
[platform/core/uifw/dali-core.git] / dali / internal / update / common / property-condition-functions.h
1 #ifndef DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H
2 #define DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H
3
4 /*
5  * Copyright (c) 2019 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/object/property-value.h>
23 #include <dali/internal/update/common/scene-graph-property-notification.h>
24
25 // OTHER CONDITITION INCLUDES
26 #include <dali/internal/update/common/property-condition-step-functions.h>
27 #include <dali/internal/update/common/property-condition-variable-step-functions.h>
28
29 namespace Dali
30 {
31
32 namespace Internal
33 {
34
35 class Object;
36 class PropertyNotification;
37
38 namespace SceneGraph
39 {
40
41 // LessThan ///////////////////////////////////////////////////////////////////
42
43 /**
44  * LessThan condition class,
45  * Checks if a Property is "Less Than" the argument:
46  *
47  * bool       => false (0.0) or true (1.0) is less than arg0.
48  * float      => value is less than arg0.
49  * Vector2    => 2 dimensional length of vector is less than arg0.
50  * Vector3    => 3 dimensional length of vector is less than arg0.
51  * Vector4    => 4 dimensional length of vector is less than arg0.
52  * Default    => return false.
53  */
54 class LessThan
55 {
56
57 public:
58
59   /**
60    * @return function pointer to the correct condition function, based on
61    * the type of value being examined.
62    */
63   static ConditionFunction GetFunction(Property::Type valueType);
64
65 private:
66
67   /**
68    * Checks if bool is LessThan
69    * @param[in] value The value being examined.
70    * @param[in] arg The supplied arguments for the condition.
71    * @return Condition result (true if condition met, false if not)
72    */
73   static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
74
75   /**
76    * Checks if integer is LessThan
77    * @param[in] value The value being examined.
78    * @param[in] arg The supplied arguments for the condition.
79    * @return Condition result (true if condition met, false if not)
80    */
81   static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
82
83   /**
84    * Checks if float is LessThan
85    * @param[in] value The value being examined.
86    * @param[in] arg The supplied arguments for the condition.
87    * @return Condition result (true if condition met, false if not)
88    */
89   static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
90
91   /**
92    * Checks if Vector2.Length() is LessThan
93    * @param[in] value The value being examined.
94    * @param[in] arg The supplied arguments for the condition.
95    * @return Condition result (true if condition met, false if not)
96    */
97   static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
98
99   /**
100    * Checks if Vector3.Length() is LessThan
101    * @param[in] value The value being examined.
102    * @param[in] arg The supplied arguments for the condition.
103    * @return Condition result (true if condition met, false if not)
104    */
105   static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
106
107   /**
108    * Checks if Vector4.Length() is LessThan
109    * @param[in] value The value being examined.
110    * @param[in] arg The supplied arguments for the condition.
111    * @return Condition result (true if condition met, false if not)
112    */
113   static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
114
115   /**
116    * Default check for other types
117    * @param[in] value The value being examined.
118    * @param[in] arg The supplied arguments for the condition.
119    * @return Condition result (true if condition met, false if not)
120    */
121   static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
122
123 };
124
125 // GreaterThan ////////////////////////////////////////////////////////////////
126
127 /**
128  * GreaterThan condition class,
129  * Checks if a Property is "Greater Than" the argument:
130  *
131  * bool       => false (0.0) or true (1.0) is greater than arg0.
132  * float      => value is greater than arg0.
133  * Vector2    => 2 dimensional length of vector is greater than arg0.
134  * Vector3    => 3 dimensional length of vector is greater than arg0.
135  * Vector4    => 4 dimensional length of vector is greater than arg0.
136  * Default    => return false.
137  */
138 class GreaterThan
139 {
140
141 public:
142
143   /**
144    * @returns function pointer to the correct condition function, based on
145    * the type of value being examined.
146    */
147   static ConditionFunction GetFunction(Property::Type valueType);
148
149 private:
150
151   /**
152    * Checks if bool is GreaterThan
153    * @param[in] value The value being examined.
154    * @param[in] arg The supplied arguments for the condition.
155    * @return Condition result (true if condition met, false if not)
156    */
157   static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
158
159   /**
160    * Checks if integer is GreaterThan
161    * @param[in] value The value being examined.
162    * @param[in] arg The supplied arguments for the condition.
163    * @return Condition result (true if condition met, false if not)
164    */
165   static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
166
167   /**
168    * Checks if float is GreaterThan
169    * @param[in] value The value being examined.
170    * @param[in] arg The supplied arguments for the condition.
171    * @return Condition result (true if condition met, false if not)
172    */
173   static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
174
175   /**
176    * Checks if Vector2.Length() is GreaterThan
177    * @param[in] value The value being examined.
178    * @param[in] arg The supplied arguments for the condition.
179    * @return Condition result (true if condition met, false if not)
180    */
181   static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
182
183   /**
184    * Checks if Vector3.Length() is GreaterThan
185    * @param[in] value The value being examined.
186    * @param[in] arg The supplied arguments for the condition.
187    * @return Condition result (true if condition met, false if not)
188    */
189   static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
190
191   /**
192    * Checks if Vector4.Length() is GreaterThan
193    * @param[in] value The value being examined.
194    * @param[in] arg The supplied arguments for the condition.
195    * @return Condition result (true if condition met, false if not)
196    */
197   static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
198
199   /**
200    * Default check for other types.
201    * @param[in] value The value being examined.
202    * @param[in] arg The supplied arguments for the condition.
203    * @return Condition result (true if condition met, false if not)
204    */
205   static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
206
207 };
208
209 // Inside /////////////////////////////////////////////////////////////////////
210
211 /**
212  * Inside condition class,
213  * Checks if a Property is "Inside" the two arguments:
214  *
215  * bool       => false (0.0) or true (1.0) is inside arg0.
216  * float      => value is between arg0 and arg1.
217  * Vector2    => 2 dimensional length of vector is between arg0 and arg1.
218  * Vector3    => 3 dimensional length of vector is between arg0 and arg1.
219  * Vector4    => 4 dimensional length of vector is between arg0 and arg1.
220  * Default    => return false.
221  */
222 class Inside
223 {
224
225 public:
226
227   /**
228    * @return function pointer to the correct condition function, based on
229    * the type of value being examined.
230    */
231   static ConditionFunction GetFunction(Property::Type valueType);
232
233 private:
234
235   /**
236    * Checks if bool is Inside
237    * @param[in] value The value being examined.
238    * @param[in] arg The supplied arguments for the condition.
239    * @return Condition result (true if condition met, false if not)
240    */
241   static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
242
243   /**
244    * Checks if integer is Inside
245    * @param[in] value The value being examined.
246    * @param[in] arg The supplied arguments for the condition.
247    * @return Condition result (true if condition met, false if not)
248    */
249   static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
250
251   /**
252    * Checks if float is Inside
253    * @param[in] value The value being examined.
254    * @param[in] arg The supplied arguments for the condition.
255    * @return Condition result (true if condition met, false if not)
256    */
257   static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
258
259   /**
260    * Checks if Vector2.Length() is Inside
261    * @param[in] value The value being examined.
262    * @param[in] arg The supplied arguments for the condition.
263    * @return Condition result (true if condition met, false if not)
264    */
265   static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
266
267   /**
268    * Checks if Vector3.Length() is Inside
269    * @param[in] value The value being examined.
270    * @param[in] arg The supplied arguments for the condition.
271    * @return Condition result (true if condition met, false if not)
272    */
273   static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
274
275   /**
276    * Checks if Vector4.Length() is Inside
277    * @param[in] value The value being examined.
278    * @param[in] arg The supplied arguments for the condition.
279    * @return Condition result (true if condition met, false if not)
280    */
281   static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
282
283   /**
284    * Default check for other types.
285    * @param[in] value The value being examined.
286    * @param[in] arg The supplied arguments for the condition.
287    * @return Condition result (true if condition met, false if not)
288    */
289   static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
290
291 };
292
293 // Outside ////////////////////////////////////////////////////////////////////
294
295 /**
296  * Outside condition class,
297  * Checks if a Property is "Outside" the two arguments:
298  *
299  * bool       => false (0.0) or true (1.0) is outside arg0.
300  * float      => value is outside arg0 and arg1.
301  * Vector2    => 2 dimensional length of vector is outside arg0 and arg1.
302  * Vector3    => 3 dimensional length of vector is outside arg0 and arg1.
303  * Vector4    => 4 dimensional length of vector is outside arg0 and arg1.
304  * Default    => return false.
305  */
306 class Outside
307 {
308
309 public:
310
311   /**
312    * @return function pointer to the correct condition function, based on
313    * the type of value being examined.
314    */
315   static ConditionFunction GetFunction(Property::Type valueType);
316
317 private:
318
319   /**
320    * Checks if bool is Outside
321    * @param[in] value The value being examined.
322    * @param[in] arg The supplied arguments for the condition.
323    * @return Condition result (true if condition met, false if not)
324    */
325   static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
326
327   /**
328    * Checks if integer is Outside
329    * @param[in] value The value being examined.
330    * @param[in] arg The supplied arguments for the condition.
331    * @return Condition result (true if condition met, false if not)
332    */
333   static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
334
335   /**
336    * Checks if float is Outside
337    * @param[in] value The value being examined.
338    * @param[in] arg The supplied arguments for the condition.
339    * @return Condition result (true if condition met, false if not)
340    */
341   static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
342
343   /**
344    * Checks if Vector2.Length() is Outside
345    * @param[in] value The value being examined.
346    * @param[in] arg The supplied arguments for the condition.
347    * @return Condition result (true if condition met, false if not)
348    */
349   static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
350
351   /**
352    * Checks if Vector3.Length() is Outside
353    * @param[in] value The value being examined.
354    * @param[in] arg The supplied arguments for the condition.
355    * @return Condition result (true if condition met, false if not)
356    */
357   static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
358
359   /**
360    * Checks if Vector4.Length() is Outside
361    * @param[in] value The value being examined.
362    * @param[in] arg The supplied arguments for the condition.
363    * @return Condition result (true if condition met, false if not)
364    */
365   static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
366
367   /**
368    * Default check for other types.
369    * @param[in] value The value being examined.
370    * @param[in] arg The supplied arguments for the condition.
371    * @return Condition result (true if condition met, false if not)
372    */
373   static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
374
375 };
376
377 } // namespace SceneGraph
378
379 } // namespace Internal
380
381 } // namespace Dali
382
383 #endif // DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H