1 #ifndef DALI_PROPERTY_H
2 #define DALI_PROPERTY_H
5 * Copyright (c) 2020 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.
24 #include <cstdint> // int32_t
27 #include <dali/public-api/common/dali-common.h>
28 #include <dali/public-api/common/dali-vector.h>
33 * @addtogroup dali_core_object
40 * @brief An object + property pair.
43 struct DALI_CORE_API Property
46 * @brief A valid property index is zero or greater.
49 typedef int32_t Index;
51 static constexpr int32_t INVALID_INDEX{-1}; ///< -1 is not a valid property index
52 static constexpr int32_t INVALID_KEY{-1}; ///< -1 is not a valid property key
53 static constexpr int32_t INVALID_COMPONENT_INDEX{-1}; ///< -1 is not a valid property index
55 typedef Dali::Vector< Index > IndexContainer; ///< A vector of property indices @SINCE_1_0.0
58 * @brief A value-type representing a property value.
63 * @brief A Key used by Map
68 * @brief A Map of property values.
73 * @brief An Array of property values.
78 * @brief Enumeration for the property types supported.
83 NONE, ///< No type @SINCE_1_0.0
85 BOOLEAN, ///< A boolean type @SINCE_1_0.0
86 FLOAT, ///< A float type @SINCE_1_0.0
87 INTEGER, ///< An integer type @SINCE_1_0.0
88 VECTOR2, ///< a vector array of size=2 with float precision @SINCE_1_0.0
89 VECTOR3, ///< a vector array of size=3 with float precision @SINCE_1_0.0
90 VECTOR4, ///< a vector array of size=4 with float precision @SINCE_1_0.0
91 MATRIX3, ///< a 3x3 matrix @SINCE_1_0.0
92 MATRIX, ///< a 4x4 matrix @SINCE_1_0.0
93 RECTANGLE, ///< an integer array of size=4 @SINCE_1_0.0
94 ROTATION, ///< either a quaternion or an axis angle rotation @SINCE_1_0.0
95 STRING, ///< A string type @SINCE_1_0.0
96 ARRAY, ///< an array of Property::Value @SINCE_1_0.0
97 MAP, ///< a string key to Property:value mapping @SINCE_1_0.0
98 EXTENTS ///< a collection of 4 x uint16_t @SINCE_1_2.62
102 * @brief Enumeration for the access mode for custom properties.
107 READ_ONLY, ///< if the property is read-only @SINCE_1_0.0
108 READ_WRITE, ///< If the property is read/writeable @SINCE_1_0.0
109 ANIMATABLE, ///< If the property can be animated or constrained @SINCE_1_0.0
110 ACCESS_MODE_COUNT ///< The number of access modes @SINCE_1_0.0
115 * @brief Creates a Property instance.
118 * @param[in] object A valid handle to the target object
119 * @param[in] propertyIndex The index of a property
121 Property( Handle& object, Property::Index propertyIndex );
125 * @brief Creates a Property instance.
128 * @param[in] object A valid handle to the target object.
129 * @param[in] propertyIndex The index of a property.
130 * @param[in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
132 Property( Handle& object, Property::Index propertyIndex, int32_t componentIndex );
135 * @brief Creates a Property instance.
138 * @param[in] object A valid handle to the target object
139 * @param[in] propertyName The property name
140 * @note This performs a property index query and is therefore slower than
141 * constructing a Property directly with the index.
143 Property( Handle& object, const std::string& propertyName );
146 * @brief Creates a Property instance.
149 * @param[in] object A valid handle to the target object
150 * @param[in] propertyName The property name
151 * @param[in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
152 * @note This performs a property index query and is therefore slower than
153 * constructing a Property directly with the index.
155 Property( Handle& object, const std::string& propertyName, int32_t componentIndex );
158 * @brief Non-virtual destructor; Property is not intended as a base class.
163 Handle& object; ///< A valid handle to the target object.
165 Index propertyIndex; ///< The index of a property provided by object.
167 int32_t componentIndex; ///< Index of a property sub component, for use with Vector2, Vector3 and Vector4, -1 if using main property
175 #endif // DALI_PROPERTY_H