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 float 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 EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
84 * Checks if Vector2.Length() 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 EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
92 * Checks if Vector3.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)
97 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
100 * Checks if Vector4.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 EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
108 * Default check for other types
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 EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
117 // GreaterThan ////////////////////////////////////////////////////////////////
120 * GreaterThan condition class,
121 * Checks if a Property is "Greater Than" the argument:
123 * bool => false (0.0) or true (1.0) is greater than arg0.
124 * float => value is greater than arg0.
125 * Vector2 => 2 dimensional length of vector is greater than arg0.
126 * Vector3 => 3 dimensional length of vector is greater than arg0.
127 * Vector4 => 4 dimensional length of vector is greater than arg0.
128 * Default => return false.
136 * @returns function pointer to the correct condition function, based on
137 * the type of value being examined.
139 static ConditionFunction GetFunction(Property::Type valueType);
144 * Checks if bool is GreaterThan
145 * @param[in] value The value being examined.
146 * @param[in] arg The supplied arguments for the condition.
147 * @return Condition result (true if condition met, false if not)
149 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
152 * Checks if float 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)
157 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
160 * Checks if Vector2.Length() 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 EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
168 * Checks if Vector3.Length() 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 EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
176 * Checks if Vector4.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)
181 static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
184 * Default check for other types.
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 EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
193 // Inside /////////////////////////////////////////////////////////////////////
196 * Inside condition class,
197 * Checks if a Property is "Inside" the two arguments:
199 * bool => false (0.0) or true (1.0) is inside arg0.
200 * float => value is between arg0 and arg1.
201 * Vector2 => 2 dimensional length of vector is between arg0 and arg1.
202 * Vector3 => 3 dimensional length of vector is between arg0 and arg1.
203 * Vector4 => 4 dimensional length of vector is between arg0 and arg1.
204 * Default => return false.
212 * @return function pointer to the correct condition function, based on
213 * the type of value being examined.
215 static ConditionFunction GetFunction(Property::Type valueType);
220 * Checks if bool is Inside
221 * @param[in] value The value being examined.
222 * @param[in] arg The supplied arguments for the condition.
223 * @return Condition result (true if condition met, false if not)
225 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
228 * Checks if float is Inside
229 * @param[in] value The value being examined.
230 * @param[in] arg The supplied arguments for the condition.
231 * @return Condition result (true if condition met, false if not)
233 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
236 * Checks if Vector2.Length() 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)
241 static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
244 * Checks if Vector3.Length() 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)
249 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
252 * Checks if Vector4.Length() 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 EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
260 * Default check for other types.
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 EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
269 // Outside ////////////////////////////////////////////////////////////////////
272 * Outside condition class,
273 * Checks if a Property is "Outside" the two arguments:
275 * bool => false (0.0) or true (1.0) is outside arg0.
276 * float => value is outside arg0 and arg1.
277 * Vector2 => 2 dimensional length of vector is outside arg0 and arg1.
278 * Vector3 => 3 dimensional length of vector is outside arg0 and arg1.
279 * Vector4 => 4 dimensional length of vector is outside arg0 and arg1.
280 * Default => return false.
288 * @return function pointer to the correct condition function, based on
289 * the type of value being examined.
291 static ConditionFunction GetFunction(Property::Type valueType);
296 * Checks if bool is Outside
297 * @param[in] value The value being examined.
298 * @param[in] arg The supplied arguments for the condition.
299 * @return Condition result (true if condition met, false if not)
301 static bool EvalBoolean( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
304 * Checks if float is Outside
305 * @param[in] value The value being examined.
306 * @param[in] arg The supplied arguments for the condition.
307 * @return Condition result (true if condition met, false if not)
309 static bool EvalFloat( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
312 * Checks if Vector2.Length() is Outside
313 * @param[in] value The value being examined.
314 * @param[in] arg The supplied arguments for the condition.
315 * @return Condition result (true if condition met, false if not)
317 static bool EvalVector2( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
320 * Checks if Vector3.Length() 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)
325 static bool EvalVector3( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
328 * Checks if Vector4.Length() 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)
333 static bool EvalVector4( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
336 * Default check for other types.
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)
341 static bool EvalDefault( const Dali::PropertyInput& value, PropertyNotification::RawArgumentContainer& arg );
345 } // namespace SceneGraph
347 } // namespace Internal
351 #endif // __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_CONDITION_FUNCTIONS_H__