+// EXTERNAL INCLUDES
+#include <dali/public-api/animation/active-constraint.h>
+#include <dali/public-api/animation/constraint.h>
+#include <dali/public-api/animation/time-period.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/scrollable/item-view/item-view.h>
+
+namespace
+{
+
+ // Functors which wrap constraint functions with stored item IDs
+ struct WrappedQuaternionConstraint
+ {
+ WrappedQuaternionConstraint(Dali::Toolkit::ItemLayout::QuaternionFunction wrapMe, unsigned int itemId)
+ :mWrapMe(wrapMe),
+ mItemId(itemId)
+ {
+ }
+
+ Dali::Quaternion operator()(const Dali::Quaternion& current, const Dali::PropertyInput& layoutPosition, const Dali::PropertyInput& scrollSpeed, const Dali::PropertyInput& layoutSize)
+ {
+ float offsetLayoutPosition = layoutPosition.GetFloat() + static_cast<float>(mItemId);
+
+ return mWrapMe(current, offsetLayoutPosition, scrollSpeed.GetFloat(), layoutSize.GetVector3());
+ }
+
+ Dali::Toolkit::ItemLayout::QuaternionFunction mWrapMe;
+ unsigned int mItemId;
+ };
+
+ struct WrappedVector3Constraint
+ {
+ WrappedVector3Constraint(Dali::Toolkit::ItemLayout::Vector3Function wrapMe, unsigned int itemId)
+ : mWrapMe(wrapMe),
+ mItemId(itemId)
+ {
+ }
+
+ Dali::Vector3 operator()(const Dali::Vector3& current, const Dali::PropertyInput& layoutPosition, const Dali::PropertyInput& scrollSpeed, const Dali::PropertyInput& layoutSize)
+ {
+ float offsetLayoutPosition = layoutPosition.GetFloat() + static_cast<float>(mItemId);
+
+ return mWrapMe(current, offsetLayoutPosition, scrollSpeed.GetFloat(), layoutSize.GetVector3());
+ }
+
+ Dali::Toolkit::ItemLayout::Vector3Function mWrapMe;
+ unsigned int mItemId;
+ };
+
+ struct WrappedVector4Constraint
+ {
+ WrappedVector4Constraint(Dali::Toolkit::ItemLayout::Vector4Function wrapMe, unsigned int itemId)
+ : mWrapMe(wrapMe),
+ mItemId(itemId)
+ {
+ }
+
+ Dali::Vector4 operator()(const Dali::Vector4& current, const Dali::PropertyInput& layoutPosition, const Dali::PropertyInput& scrollSpeed, const Dali::PropertyInput& layoutSize)
+ {
+ float offsetLayoutPosition = layoutPosition.GetFloat() + static_cast<float>(mItemId);
+
+ return mWrapMe(current, offsetLayoutPosition, scrollSpeed.GetFloat(), layoutSize.GetVector3());
+ }
+
+ Dali::Toolkit::ItemLayout::Vector4Function mWrapMe;
+ unsigned int mItemId;
+ };
+
+ struct WrappedBoolConstraint
+ {
+ WrappedBoolConstraint(Dali::Toolkit::ItemLayout::BoolFunction wrapMe, unsigned int itemId)
+ : mWrapMe(wrapMe),
+ mItemId(itemId)
+ {
+ }
+
+ bool operator()(const bool& current, const Dali::PropertyInput& layoutPosition, const Dali::PropertyInput& scrollSpeed, const Dali::PropertyInput& layoutSize)
+ {
+ float offsetLayoutPosition = layoutPosition.GetFloat() + static_cast<float>(mItemId);
+
+ return mWrapMe(current, offsetLayoutPosition, scrollSpeed.GetFloat(), layoutSize.GetVector3());
+ }
+
+ Dali::Toolkit::ItemLayout::BoolFunction mWrapMe;
+ unsigned int mItemId;
+ };
+
+} //Unnamed namespace
+