1 #ifndef __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H__
2 #define __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <dali/public-api/object/property-value.h>
23 #include <dali/internal/update/common/scene-graph-property-notification.h>
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>
36 class PropertyNotification;
41 // LessThan ///////////////////////////////////////////////////////////////////
44 * LessThan condition class,
45 * Checks if a Property is "Less Than" the argument:
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.
60 * @return function pointer to the correct condition function, based on
61 * the type of value being examined.
63 static ConditionFunction GetFunction(Property::Type valueType);
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)
73 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
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)
81 static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
84 * Checks if unsigned integer 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)
89 static bool EvalUnsignedInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
92 * Checks if float 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)
97 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
100 * Checks if Vector2.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)
105 static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
108 * Checks if Vector3.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)
113 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
116 * Checks if Vector4.Length() is LessThan
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)
121 static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
124 * Default check for other types
125 * @param[in] value The value being examined.
126 * @param[in] arg The supplied arguments for the condition.
127 * @return Condition result (true if condition met, false if not)
129 static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
133 // GreaterThan ////////////////////////////////////////////////////////////////
136 * GreaterThan condition class,
137 * Checks if a Property is "Greater Than" the argument:
139 * bool => false (0.0) or true (1.0) is greater than arg0.
140 * float => value is greater than arg0.
141 * Vector2 => 2 dimensional length of vector is greater than arg0.
142 * Vector3 => 3 dimensional length of vector is greater than arg0.
143 * Vector4 => 4 dimensional length of vector is greater than arg0.
144 * Default => return false.
152 * @returns function pointer to the correct condition function, based on
153 * the type of value being examined.
155 static ConditionFunction GetFunction(Property::Type valueType);
160 * Checks if bool 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)
165 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
168 * Checks if integer 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)
173 static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
176 * Checks if unsigned integer 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)
181 static bool EvalUnsignedInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
184 * Checks if float 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)
189 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
192 * Checks if Vector2.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)
197 static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
200 * Checks if Vector3.Length() is GreaterThan
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)
205 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
208 * Checks if Vector4.Length() is GreaterThan
209 * @param[in] value The value being examined.
210 * @param[in] arg The supplied arguments for the condition.
211 * @return Condition result (true if condition met, false if not)
213 static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
216 * Default check for other types.
217 * @param[in] value The value being examined.
218 * @param[in] arg The supplied arguments for the condition.
219 * @return Condition result (true if condition met, false if not)
221 static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
225 // Inside /////////////////////////////////////////////////////////////////////
228 * Inside condition class,
229 * Checks if a Property is "Inside" the two arguments:
231 * bool => false (0.0) or true (1.0) is inside arg0.
232 * float => value is between arg0 and arg1.
233 * Vector2 => 2 dimensional length of vector is between arg0 and arg1.
234 * Vector3 => 3 dimensional length of vector is between arg0 and arg1.
235 * Vector4 => 4 dimensional length of vector is between arg0 and arg1.
236 * Default => return false.
244 * @return function pointer to the correct condition function, based on
245 * the type of value being examined.
247 static ConditionFunction GetFunction(Property::Type valueType);
252 * Checks if bool 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)
257 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
260 * Checks if integer 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)
265 static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
268 * Checks if unsigned integer 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)
273 static bool EvalUnsignedInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
276 * Checks if float 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)
281 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
284 * Checks if Vector2.Length() is Inside
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)
289 static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
292 * Checks if Vector3.Length() is Inside
293 * @param[in] value The value being examined.
294 * @param[in] arg The supplied arguments for the condition.
295 * @return Condition result (true if condition met, false if not)
297 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
300 * Checks if Vector4.Length() is Inside
301 * @param[in] value The value being examined.
302 * @param[in] arg The supplied arguments for the condition.
303 * @return Condition result (true if condition met, false if not)
305 static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
308 * Default check for other types.
309 * @param[in] value The value being examined.
310 * @param[in] arg The supplied arguments for the condition.
311 * @return Condition result (true if condition met, false if not)
313 static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
317 // Outside ////////////////////////////////////////////////////////////////////
320 * Outside condition class,
321 * Checks if a Property is "Outside" the two arguments:
323 * bool => false (0.0) or true (1.0) is outside arg0.
324 * float => value is outside arg0 and arg1.
325 * Vector2 => 2 dimensional length of vector is outside arg0 and arg1.
326 * Vector3 => 3 dimensional length of vector is outside arg0 and arg1.
327 * Vector4 => 4 dimensional length of vector is outside arg0 and arg1.
328 * Default => return false.
336 * @return function pointer to the correct condition function, based on
337 * the type of value being examined.
339 static ConditionFunction GetFunction(Property::Type valueType);
344 * Checks if bool 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)
349 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
352 * Checks if integer 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)
357 static bool EvalInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
360 * Checks if unsigned integer 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)
365 static bool EvalUnsignedInteger( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
368 * Checks if float is Outside
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)
373 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
376 * Checks if Vector2.Length() is Outside
377 * @param[in] value The value being examined.
378 * @param[in] arg The supplied arguments for the condition.
379 * @return Condition result (true if condition met, false if not)
381 static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
384 * Checks if Vector3.Length() is Outside
385 * @param[in] value The value being examined.
386 * @param[in] arg The supplied arguments for the condition.
387 * @return Condition result (true if condition met, false if not)
389 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
392 * Checks if Vector4.Length() is Outside
393 * @param[in] value The value being examined.
394 * @param[in] arg The supplied arguments for the condition.
395 * @return Condition result (true if condition met, false if not)
397 static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
400 * Default check for other types.
401 * @param[in] value The value being examined.
402 * @param[in] arg The supplied arguments for the condition.
403 * @return Condition result (true if condition met, false if not)
405 static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
409 } // namespace SceneGraph
411 } // namespace Internal
415 #endif // __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H__