-#ifndef __DALI_CONSTRAINT_H__
-#define __DALI_CONSTRAINT_H__
+#ifndef DALI_CONSTRAINT_H
+#define DALI_CONSTRAINT_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
// EXTERNAL INCLUDES
-#include <boost/function.hpp>
+#include <cstdint> // uint32_t
// INTERNAL INCLUDES
-#include <dali/public-api/animation/alpha-functions.h>
#include <dali/public-api/animation/constraint-source.h>
-#include <dali/public-api/object/any.h>
-#include <dali/public-api/object/handle.h>
-#include <dali/public-api/object/property.h>
+#include <dali/public-api/common/dali-vector.h>
+#include <dali/public-api/object/base-handle.h>
#include <dali/public-api/object/property-input.h>
+#include <dali/public-api/object/property.h>
+#include <dali/public-api/signals/callback.h>
namespace Dali
{
-struct TimePeriod;
+/**
+ * @addtogroup dali_core_animation
+ * @{
+ */
+
+class Handle;
namespace Internal DALI_INTERNAL
{
-class Constraint;
+class ConstraintBase;
}
+using PropertyInputContainer = Vector<PropertyInput*>;
+
/**
* @brief An abstract base class for Constraints.
- * This can be used to constrain a property of an actor, after animations have been applied.
+ *
+ * This can be used to constrain a property of an object, after animations have been applied.
* Constraints are applied in the following order:
* - Constraints are applied to on-stage actors in a depth-first traversal.
- * - For each actor, the constraints are applied in the same order as the calls to Actor::ApplyConstraint().
+ * - For each actor, the constraints are applied in the same order as the calls to Apply().
* - Constraints are not applied to off-stage actors.
+ *
+ * Create a constraint using one of the New methods depending on the type of callback function used.
+ * Try to use a C function unless some data needs to be stored, otherwise functors and class methods
+ * are also supported.
+ *
+ * A constraint can be applied to an object in the following manner:
+ *
+ * @code
+ * Handle handle = CreateMyObject();
+ * Constraint constraint = Constraint::New< Vector3 >( handle, CONSTRAINING_PROPERTY_INDEX, &MyFunction );
+ * constraint.AddSource( LocalSource( INPUT_PROPERTY_INDEX ) );
+ * constraint.Apply();
+ * @endcode
+ * @SINCE_1_0.0
*/
-class DALI_IMPORT_API Constraint : public BaseHandle
+class DALI_CORE_API Constraint : public BaseHandle
{
public:
-
- typedef Any AnyFunction; ///< Generic function pointer for constraint
+ /**
+ * @brief Template for the Function that is called by the Constraint system.
+ *
+ * Supports:
+ * - C style functions
+ * - Static member methods of an object
+ * - Member functions of a particular class
+ * - Functors of a particular class
+ * - If a functor or method is provided, then a copy of the object is made.
+ *
+ * The expected signature of the callback should be:
+ * @code
+ * void Function( P&, const PropertyInputContainer& );
+ * @endcode
+ *
+ * The P& parameter is an in,out parameter which stores the current value of the property. The callback
+ * should change this value to the desired one. The PropertyInputContainer is a const reference to the property inputs
+ * added to the Constraint in the order they were added via AddSource().
+ *
+ * @SINCE_1_0.0
+ * @tparam P The property type to constrain
+ */
+ template<typename P>
+ class DALI_INTERNAL Function : public CallbackBase
+ {
+ public:
+ /**
+ * @brief Constructor which connects to the provided C function (or a static member function).
+ *
+ * The expected signature of the function is:
+ * @code
+ * void MyFunction( P&, const PropertyInputContainer& );
+ * @endcode
+ *
+ * @SINCE_1_0.0
+ * @param[in] function The function to call
+ */
+ Function(void (*function)(P&, const PropertyInputContainer&))
+ : CallbackBase(reinterpret_cast<CallbackBase::Function>(function)),
+ mCopyConstructorDispatcher(NULL)
+ {
+ }
+
+ /**
+ * @brief Constructor which copies a function object and connects to the functor of that object.
+ *
+ * The function object should have a functor with the following signature:
+ * @code
+ * void operator()( P&, const PropertyInputContainer& );
+ * @endcode
+ *
+ * @SINCE_1_0.0
+ * @param[in] object The object to copy
+ * @tparam T The type of the object
+ */
+ template<class T>
+ Function(const T& object)
+ : CallbackBase(reinterpret_cast<void*>(new T(object)), // copy the object
+ nullptr, // uses operator() instead of member function
+ reinterpret_cast<CallbackBase::Dispatcher>(&FunctorDispatcher2<T, P&, const PropertyInputContainer&>::Dispatch),
+ reinterpret_cast<CallbackBase::Destructor>(&Destroyer<T>::Delete)),
+ mCopyConstructorDispatcher(reinterpret_cast<CopyConstructorDispatcher>(&ObjectCopyConstructorDispatcher<T>::Copy))
+ {
+ }
+
+ /**
+ * @brief Constructor which copies a function object and allows a connection to a member method.
+ *
+ * The object should have a method with the signature:
+ * @code
+ * void MyObject::MyMethod( P&, const PropertyInputContainer& );
+ * @endcode
+ *
+ * @SINCE_1_0.0
+ * @param[in] object The object to copy
+ * @param[in] memberFunction The member function to call. This has to be a member of the same class
+ * @tparam T The type of the object
+ */
+ template<class T>
+ Function(const T& object, void (T::*memberFunction)(P&, const PropertyInputContainer&))
+ : CallbackBase(reinterpret_cast<void*>(new T(object)), // copy the object
+ reinterpret_cast<CallbackBase::MemberFunction>(memberFunction),
+ reinterpret_cast<CallbackBase::Dispatcher>(&Dispatcher2<T, P&, const PropertyInputContainer&>::Dispatch),
+ reinterpret_cast<CallbackBase::Destructor>(&Destroyer<T>::Delete)),
+ mCopyConstructorDispatcher(reinterpret_cast<CopyConstructorDispatcher>(&ObjectCopyConstructorDispatcher<T>::Copy))
+ {
+ }
+
+ /**
+ * @brief Clones the Function object.
+ *
+ * The object, if held by this object, is also copied.
+ *
+ * @SINCE_1_0.0
+ * @return A pointer to a newly-allocated Function
+ */
+ CallbackBase* Clone()
+ {
+ CallbackBase* callback = nullptr;
+ if(mImpl.mObjectPointer && mCopyConstructorDispatcher)
+ {
+ callback = new Function(mCopyConstructorDispatcher(reinterpret_cast<UndefinedClass*>(mImpl.mObjectPointer)) /* Copy the object */,
+ mMemberFunction,
+ mImpl.mMemberFunctionDispatcher,
+ mImpl.mDestructorDispatcher,
+ mCopyConstructorDispatcher);
+ }
+ else
+ {
+ callback = new Function(mFunction);
+ }
+ return callback;
+ }
+
+ private:
+ /**
+ * @brief Must not be declared.
+ *
+ * This is used so that no optimisations are done by the compiler when using void*.
+ */
+ class UndefinedClass;
+
+ /**
+ * @brief Used to call the function to copy the stored object.
+ * @SINCE_1_0.0
+ */
+ using CopyConstructorDispatcher = UndefinedClass* (*)(UndefinedClass*);
+
+ /**
+ * @brief Copies the actual object in Constraint::Function.
+ *
+ * @SINCE_1_0.0
+ * @tparam T The type of the object
+ */
+ template<class T>
+ struct ObjectCopyConstructorDispatcher
+ {
+ /**
+ * @brief Copies the object stored in Constraint::Function.
+ *
+ * @SINCE_1_0.0
+ * @param[in] object The object to copy
+ * @return Newly allocated clone of the object
+ */
+ static UndefinedClass* Copy(const UndefinedClass* object)
+ {
+ T* copy = new T(*(reinterpret_cast<const T*>(object)));
+ return reinterpret_cast<UndefinedClass*>(copy);
+ }
+ };
+
+ Function(const Function&) = delete; ///< Deleted copy constructor. @SINCE_1_0.0
+ Function(Function&&) = delete; ///< Deleted move constructor. @SINCE_1_9.25
+ Function& operator=(const Function&) = delete; ///< Deleted copy assignment operator. @SINCE_1_0.0
+ Function& operator=(Function&&) = delete; ///< Deleted move assignment operator. @SINCE_1_9.25
+
+ /**
+ * @brief Constructor used when copying the stored object.
+ *
+ * @SINCE_1_0.0
+ * @param[in] object A newly copied object
+ * @param[in] memberFunction The member function of the object
+ * @param[in] dispatcher Used to call the actual object
+ * @param[in] destructor Used to delete the owned object
+ * @param[in] copyConstructorDispatcher Used to create a copy of the owned object
+ */
+ Function(void* object,
+ CallbackBase::MemberFunction memberFunction,
+ CallbackBase::Dispatcher dispatcher,
+ CallbackBase::Destructor destructor,
+ CopyConstructorDispatcher copyConstructorDispatcher)
+ : CallbackBase(object, memberFunction, dispatcher, destructor),
+ mCopyConstructorDispatcher(copyConstructorDispatcher)
+ {
+ }
+
+ /**
+ * @brief Constructor used when copying a simple stored function.
+ *
+ * @SINCE_1_0.0
+ * @param[in] function The function to call
+ */
+ Function(CallbackBase::Function function)
+ : CallbackBase(function),
+ mCopyConstructorDispatcher(nullptr)
+ {
+ }
+
+ // Data
+
+ CopyConstructorDispatcher mCopyConstructorDispatcher; ///< Function to call to copy the stored object
+ };
/**
- * @brief The action that will happen when the constraint is removed.
+ * @brief Enumeration for the action that will happen when the constraint is removed.
*
- * Constraints can be applied gradually; see SetApplyTime() for more details.
- * When a constraint is fully-applied the final value may be "baked" i.e. saved permanently.
+ * The final value may be "baked" i.e. saved permanently.
* Alternatively the constrained value may be discarded when the constraint is removed.
+ * @SINCE_1_0.0
*/
enum RemoveAction
{
- Bake, ///< When the constraint is fully-applied, the constrained value is saved.
- Discard ///< When the constraint is removed, the constrained value is discarded.
+ BAKE, ///< When the constraint is fully-applied, the constrained value is saved. @SINCE_1_9.28
+ DISCARD ///< When the constraint is removed, the constrained value is discarded. @SINCE_1_9.28
};
- static const AlphaFunction DEFAULT_ALPHA_FUNCTION; ///< AlphaFunctions::Linear
- static const RemoveAction DEFAULT_REMOVE_ACTION; ///< Bake
+ static const RemoveAction DEFAULT_REMOVE_ACTION; ///< BAKE
/**
- * @brief Create an uninitialized Constraint; this can be initialized with Constraint::New().
+ * @brief Creates an uninitialized Constraint; this can be initialized with Constraint::New().
*
- * Calling member functions with an uninitialized Dali::Object is not allowed.
+ * Calling member functions with an uninitialized Constraint handle is not allowed.
+ * @SINCE_1_0.0
*/
Constraint();
/**
- * @brief Create a constraint which targets a property.
+ * @brief Creates a constraint which targets a property using a function or a static class member.
*
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
- */
- template <class P>
- static Constraint New( Property::Index target,
- boost::function<P (const P& current)> func )
- {
- return New( target,
- PropertyTypes::Get<P>(),
- func );
- }
-
- /**
- * @brief Create a constraint which targets a property.
+ * The expected signature, for a Vector3 type for example, of the function is:
+ * @code
+ * void MyFunction( Vector3&, const PropertyInputContainer& );
+ * @endcode
*
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
- */
- template <class P>
- static Constraint New( Property::Index target,
- ConstraintSource source1,
- boost::function<P (const P& current, const PropertyInput& input1)> func )
- {
- return New( target,
- PropertyTypes::Get<P>(),
- source1,
- func );
- }
-
- /**
- * @brief Create a constraint which targets a property.
- *
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
- */
- template <class P>
- static Constraint New( Property::Index target,
- ConstraintSource source1,
- ConstraintSource source2,
- boost::function<P (const P& current, const PropertyInput& input1, const PropertyInput& input2)> func )
- {
- return New( target,
- PropertyTypes::Get<P>(),
- source1,
- source2,
- func );
- }
-
- /**
- * @brief Create a constraint which targets a property.
- *
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
- */
- template <class P>
- static Constraint New( Property::Index target,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- boost::function<P (const P& current, const PropertyInput& input1, const PropertyInput& input2, const PropertyInput& input3)> func )
- {
- return New( target,
- PropertyTypes::Get<P>(),
- source1,
- source2,
- source3,
- func );
- }
-
- /**
- * @brief Create a constraint which targets a property.
- *
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] source4 The source of a property; the current value will be passed as the 5th parameter of func.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
+ * Create the constraint with this function as follows:
+ *
+ * @code
+ * Constraint constraint = Constraint::New< Vector3 >( handle, CONSTRAINING_PROPERTY_INDEX, &MyFunction );
+ * @endcode
+ *
+ * @SINCE_1_0.0
+ * @param[in] handle The handle to the property-owning object
+ * @param[in] targetIndex The index of the property to constrain
+ * @param[in] function The function to call to set the constrained property value
+ *
+ * @tparam P The type of the property to constrain
+ * @return The new constraint
*/
- template <class P>
- static Constraint New( Property::Index target,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- ConstraintSource source4,
- boost::function<P (const P& current,
- const PropertyInput& input1,
- const PropertyInput& input2,
- const PropertyInput& input3,
- const PropertyInput& input4)> func )
+ template<class P>
+ static Constraint New(Handle handle, Property::Index targetIndex, void (*function)(P&, const PropertyInputContainer&))
{
- return New( target,
- PropertyTypes::Get<P>(),
- source1,
- source2,
- source3,
- source4,
- func );
+ CallbackBase* callback = new Constraint::Function<P>(function);
+ return New(handle, targetIndex, PropertyTypes::Get<P>(), callback);
}
/**
- * @brief Create a constraint which targets a property.
- *
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] source4 The source of a property; the current value will be passed as the 5th parameter of func.
- * @param [in] source5 The source of a property; the current value will be passed as the 6th parameter of func.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
+ * @brief Creates a constraint which targets a property using a functor object.
+ *
+ * The expected structure, for a Vector3 type for example, of the functor object is:
+ * @code
+ * struct MyObject
+ * {
+ * void operator() ( Vector3&, const PropertyInputContainer& );
+ * };
+ * @endcode
+ *
+ * Create the constraint with this object as follows:
+ *
+ * @code
+ * Constraint constraint = Constraint::New< Vector3 >( handle, CONSTRAINING_PROPERTY_INDEX, MyObject() );
+ * @endcode
+ *
+ * @SINCE_1_0.0
+ * @param[in] handle The handle to the property-owning object
+ * @param[in] targetIndex The index of the property to constraint
+ * @param[in] object The functor object whose functor is called to set the constrained property value
+ *
+ * @tparam P The type of the property to constrain
+ * @tparam T The type of the object
+ * @return The new constraint
*/
- template <class P>
- static Constraint New( Property::Index target,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- ConstraintSource source4,
- ConstraintSource source5,
- boost::function<P (const P& current,
- const PropertyInput& input1,
- const PropertyInput& input2,
- const PropertyInput& input3,
- const PropertyInput& input4,
- const PropertyInput& input5)> func )
+ template<class P, class T>
+ static Constraint New(Handle handle, Property::Index targetIndex, const T& object)
{
- return New( target,
- PropertyTypes::Get<P>(),
- source1,
- source2,
- source3,
- source4,
- source5,
- func );
+ CallbackBase* function = new Constraint::Function<P>(object);
+ return New(handle, targetIndex, PropertyTypes::Get<P>(), function);
}
/**
- * @brief Create a constraint which targets a property.
- *
- * The templated parameter P, is the type of the property to constrain.
- * @param [in] target The index of the property to constrain.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] source4 The source of a property; the current value will be passed as the 5th parameter of func.
- * @param [in] source5 The source of a property; the current value will be passed as the 6th parameter of func.
- * @param [in] source6 The source of a property; the current value will be passed as the 7th parameter of func.
- * @param [in] func A function which returns the constrained property value.
- * @return The new constraint.
+ * @brief Creates a constraint which targets a property using an object method.
+ *
+ * The expected structure, for a Vector3 type for example, of the object is:
+ * @code
+ * struct MyObject
+ * {
+ * void MyMethod( Vector3&, const PropertyInputContainer& );
+ * };
+ * @endcode
+ *
+ * Create the constraint with this object as follows:
+ *
+ * @code
+ * Constraint constraint = Constraint::New< Vector3 >( handle, CONSTRAINING_PROPERTY_INDEX, MyObject(), &MyObject::MyMethod );
+ * @endcode
+ *
+ * @SINCE_1_0.0
+ * @param[in] handle The handle to the property-owning object
+ * @param[in] targetIndex The index of the property to constraint
+ * @param[in] object The object whose member function is called to set the constrained property value
+ * @param[in] memberFunction The member function to call to set the constrained property value
+ * @return The new constraint
+ *
+ * @tparam P The type of the property to constrain
+ * @tparam T The type of the object
*/
- template <class P>
- static Constraint New( Property::Index target,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- ConstraintSource source4,
- ConstraintSource source5,
- ConstraintSource source6,
- boost::function<P (const P& current,
- const PropertyInput& input1,
- const PropertyInput& input2,
- const PropertyInput& input3,
- const PropertyInput& input4,
- const PropertyInput& input5,
- const PropertyInput& input6)> func )
+ template<class P, class T>
+ static Constraint New(Handle handle, Property::Index targetIndex, const T& object, void (T::*memberFunction)(P&, const PropertyInputContainer&))
{
- return New( target,
- PropertyTypes::Get<P>(),
- source1,
- source2,
- source3,
- source4,
- source5,
- source6,
- func );
+ CallbackBase* function = new Constraint::Function<P>(object, memberFunction);
+ return New(handle, targetIndex, PropertyTypes::Get<P>(), function);
}
/**
- * @brief Downcast an Object handle to Constraint handle.
+ * @brief Creates a clone of this constraint for another object.
*
- * If handle points to a Constraint object the
- * downcast produces valid handle. If not the returned handle is left uninitialized.
- * @param[in] handle to An object
- * @return handle to a Constraint object or an uninitialized handle
+ * @SINCE_1_0.0
+ * @param[in] handle The handle to the property-owning object this constraint is to be cloned for
+ * @return The new constraint
*/
- static Constraint DownCast( BaseHandle handle );
+ Constraint Clone(Handle handle);
/**
- * @brief Destructor
+ * @brief Destructor.
*
* This is non-virtual since derived Handle types must not contain data or virtual methods.
+ * @SINCE_1_0.0
*/
~Constraint();
/**
* @brief This copy constructor is required for (smart) pointer semantics.
*
- * @param [in] handle A reference to the copied handle
+ * @SINCE_1_0.0
+ * @param[in] constraint A reference to the copied handle
*/
- Constraint(const Constraint& handle);
+ Constraint(const Constraint& constraint);
/**
* @brief This assignment operator is required for (smart) pointer semantics.
*
- * @param [in] rhs A reference to the copied handle
+ * @SINCE_1_0.0
+ * @param[in] rhs A reference to the copied handle
* @return A reference to this
*/
Constraint& operator=(const Constraint& rhs);
/**
- * @brief Set the time taken for the constraint to be fully applied.
+ * @brief Move constructor.
*
- * The default is zero, meaning that the constraint is applied immediately.
- * @param [in] timePeriod The constraint will be applied during this time period.
+ * @SINCE_1_9.22
+ * @param[in] rhs A reference to the moved handle
*/
- void SetApplyTime( TimePeriod timePeriod );
+ Constraint(Constraint&& rhs) noexcept;
/**
- * @brief Retrieve the time taken for the constraint to be fully applied.
+ * @brief Move assignment operator.
*
- * @return The apply time.
+ * @SINCE_1_9.22
+ * @param[in] rhs A reference to the moved handle
+ * @return A reference to this handle
*/
- TimePeriod GetApplyTime() const;
+ Constraint& operator=(Constraint&& rhs) noexcept;
/**
- * @brief Set the alpha function for a constraint; the default is AlphaFunctions::Linear.
+ * @brief Downcasts a handle to Constraint handle.
*
- * @param [in] func The alpha function to use when applying/removing the constraint.
+ * If handle points to a Constraint object, the downcast produces valid handle.
+ * If not, the returned handle is left uninitialized.
+ * @SINCE_1_0.0
+ * @param[in] baseHandle BaseHandle to an object
+ * @return Handle to a Constraint object or an uninitialized handle
*/
- void SetAlphaFunction( AlphaFunction func );
+ static Constraint DownCast(BaseHandle baseHandle);
/**
- * @brief Retrieve the alpha function of a constraint.
+ * @brief Adds a constraint source to the constraint.
*
- * @return The function.
+ * @SINCE_1_0.0
+ * @param[in] source The constraint source input to add
*/
- AlphaFunction GetAlphaFunction();
+ void AddSource(ConstraintSource source);
/**
- * @brief Set whether the constraint will "bake" a value when fully-applied.
+ * @brief Applies this constraint.
*
- * Otherwise the constrained value will be discarded, when the constraint is removed.
- * The default value is Constraint::Bake.
- * @param[in] action The remove-action.
+ * @SINCE_1_0.0
+ * @pre The constraint must be initialized.
+ * @pre The target object must still be alive.
+ * @pre The source inputs should not have been destroyed.
*/
- void SetRemoveAction( RemoveAction action );
+ void Apply();
/**
- * @brief Query whether the constraint will "bake" a value when fully-applied.
- *
- * Otherwise the constrained value will be discarded, when the constraint is removed.
- * @return The apply-action.
+ * @brief Removes this constraint.
+ * @SINCE_1_0.0
*/
- RemoveAction GetRemoveAction() const;
+ void Remove();
/**
- * @brief Set a tag for the constraint so it can be identified later
+ * @brief Retrieves the object which this constraint is targeting.
*
- * @param[in] tag An integer to identify the constraint
+ * @SINCE_1_0.0
+ * @return The target object
*/
- void SetTag( const unsigned int tag );
+ Handle GetTargetObject();
/**
- * @brief Get the tag
+ * @brief Retrieves the property which this constraint is targeting.
*
- * @return The tag
- */
- unsigned int GetTag() const;
-
-public: // Not intended for use by Application developers
-
- /**
- * @brief This constructor is used by Dali New() methods
- * @param [in] constraint A pointer to a newly allocated Dali resource
+ * @SINCE_1_0.0
+ * @return The target property
*/
- explicit DALI_INTERNAL Constraint( Internal::Constraint* constraint );
-
-private: // Not intended for use by Application developers
+ Dali::Property::Index GetTargetProperty();
/**
- * @brief Construct a new constraint which targets a property.
+ * @brief Sets the remove action. Constraint::BAKE will "bake" a value when fully-applied.
*
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] func The constraint function.
- * @return The new constraint.
+ * In case of Constraint::DISCARD, the constrained value will be discarded, when the constraint is removed.
+ * The default value is Constraint::BAKE.
+ * @SINCE_1_0.0
+ * @param[in] action The remove-action
*/
- static Constraint New( Property::Index target,
- Property::Type targetType,
- AnyFunction func );
+ void SetRemoveAction(RemoveAction action);
/**
- * @brief Construct a new constraint which targets a property.
+ * @brief Retrieves the remove action that will happen when the constraint is removed.
*
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] func The constraint function.
- * @return The new constraint.
+ * @SINCE_1_0.0
+ * @return The remove-action
*/
- static Constraint New( Property::Index target,
- Property::Type targetType,
- ConstraintSource source1,
- AnyFunction func );
-
- /**
- * @brief Construct a new constraint which targets a property.
- *
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] func The constraint function.
- * @return The new constraint.
- */
- static Constraint New( Property::Index target,
- Property::Type targetType,
- ConstraintSource source1,
- ConstraintSource source2,
- AnyFunction func );
+ RemoveAction GetRemoveAction() const;
/**
- * @brief Construct a new constraint which targets a property.
- *
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] func The constraint function.
- * @return The new constraint.
+ * @brief Sets a tag for the constraint so it can be identified later.
+ *
+ * @SINCE_1_0.0
+ * @param[in] tag An integer to identify the constraint
*/
- static Constraint New( Property::Index target,
- Property::Type targetType,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- AnyFunction func );
+ void SetTag(const uint32_t tag);
/**
- * @brief Construct a new constraint which targets a property.
- *
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] source4 The source of a property; the current value will be passed as the 5th parameter of func.
- * @param [in] func The constraint function.
- * @return The new constraint.
+ * @brief Gets the tag.
+ *
+ * @SINCE_1_0.0
+ * @return The tag
*/
- static Constraint New( Property::Index target,
- Property::Type targetType,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- ConstraintSource source4,
- AnyFunction func );
+ uint32_t GetTag() const;
+public: // Not intended for use by Application developers
+ /// @cond internal
/**
- * @brief Construct a new constraint which targets a property.
- *
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] source4 The source of a property; the current value will be passed as the 5th parameter of func.
- * @param [in] source5 The source of a property; the current value will be passed as the 6th parameter of func.
- * @param [in] func The constraint function.
- * @return The new constraint.
+ * @brief This constructor is used by Constraint::New() methods.
+ * @SINCE_1_0.0
+ * @param[in] constraint A pointer to a newly allocated Dali resource
*/
- static Constraint New( Property::Index target,
- Property::Type targetType,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- ConstraintSource source4,
- ConstraintSource source5,
- AnyFunction func );
+ explicit DALI_INTERNAL Constraint(Internal::ConstraintBase* constraint);
+ /// @endcond
+private: // Not intended for use by Application developers
+ /// @cond internal
/**
- * @brief Construct a new constraint which targets a property.
- *
- * @param [in] target The index of the property to constrain.
- * @param [in] targetType The type of the constrained property.
- * @param [in] source1 The source of a property; the current value will be passed as the 2nd parameter of func.
- * @param [in] source2 The source of a property; the current value will be passed as the 3rd parameter of func.
- * @param [in] source3 The source of a property; the current value will be passed as the 4th parameter of func.
- * @param [in] source4 The source of a property; the current value will be passed as the 5th parameter of func.
- * @param [in] source5 The source of a property; the current value will be passed as the 6th parameter of func.
- * @param [in] source6 The source of a property; the current value will be passed as the 7th parameter of func.
- * @param [in] func The constraint function.
- * @return The new constraint.
+ * @brief Constructs a new constraint which targets a property.
+ *
+ * @SINCE_1_0.0
+ * @param[in] handle The handle to the property-owning object
+ * @param[in] targetIndex The index of the property to constrain
+ * @param[in] targetType Type The type of the constrained property
+ * @param[in] function The constraint function
+ * @return The new constraint
*/
- static Constraint New( Property::Index target,
- Property::Type targetType,
- ConstraintSource source1,
- ConstraintSource source2,
- ConstraintSource source3,
- ConstraintSource source4,
- ConstraintSource source5,
- ConstraintSource source6,
- AnyFunction func );
+ static Constraint New(Handle handle, Property::Index targetIndex, Property::Type targetType, CallbackBase* function);
+ /// @endcond
};
+/**
+ * @}
+ */
} // namespace Dali
-#endif // __DALI_CONSTRAINT_H__
+#endif // DALI_CONSTRAINT_H