-#ifndef __DALI_INTERNAL_SCENE_GRAPH_CONSTRAINT_BASE_H__
-#define __DALI_INTERNAL_SCENE_GRAPH_CONSTRAINT_BASE_H__
+#ifndef DALI_INTERNAL_SCENE_GRAPH_CONSTRAINT_BASE_H
+#define DALI_INTERNAL_SCENE_GRAPH_CONSTRAINT_BASE_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 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.
* An abstract base class for Constraints.
* This can be used to constrain a property of a scene-object, after animations have been applied.
*/
-class ConstraintBase : public PropertyOwner, public PropertyOwner::Observer
+class ConstraintBase : public PropertyOwner::Observer
{
public:
+ /**
+ * Observer to determine when the constraint is no longer present
+ */
+ class LifecycleObserver
+ {
+ public:
+ /**
+ * Called shortly before the constraint is destroyed.
+ */
+ virtual void ObjectDestroyed() = 0;
+
+ protected:
+ /**
+ * Virtual destructor, no deletion through this interface
+ */
+ virtual ~LifecycleObserver() = default;
+ };
+
+public:
typedef Dali::Constraint::RemoveAction RemoveAction;
/**
* Constructor
+ * @param ownerContainer the properties to constraint
+ * @oparam removeAction perform when removed
*/
- ConstraintBase( PropertyOwnerContainer& ownerContainer );
+ ConstraintBase( PropertyOwnerContainer& ownerContainer, RemoveAction removeAction );
/**
* Virtual destructor.
virtual ~ConstraintBase();
/**
+ * Property resetter observes the lifecycle of this object
+ */
+ void AddLifecycleObserver( LifecycleObserver& observer )
+ {
+ mLifecycleObserver = &observer;
+ }
+
+ /**
+ * Property resetter observers the lifecycle of this object
+ */
+ void RemoveLifecycleObserver( LifecycleObserver& observer )
+ {
+ mLifecycleObserver = nullptr;
+ }
+
+ /**
* Initialize the constraint.
* This should by called by a scene-object, when the constraint is connected.
*/
}
/**
- * Bake the weight property.
- * @param[in] updateBufferIndex The current update buffer index.
- * @param[in] weight The new weight.
- */
- void BakeWeight( BufferIndex updateBufferIndex, float weight )
- {
- mWeight.Bake( updateBufferIndex, weight );
- }
-
- /**
- * Set the initial weight.
- * @pre The constraint has not been connected to the scene-graph.
- * @param[in] weight The new weight.
- */
- void SetInitialWeight( float weight )
- {
- mWeight.SetInitial( weight );
- }
-
- /**
- * Retrieve the weight property.
- * @param[in] bufferIndex The buffer index to read from.
- * @return The current weight.
- */
- float GetWeight( BufferIndex bufferIndex ) const
- {
- return mWeight[ bufferIndex ];
- }
-
- /**
* Constrain the associated scene object.
* @param[in] updateBufferIndex The current update buffer index.
*/
* Helper for internal test cases; only available for debug builds.
* @return The current number of Constraint instances in existence.
*/
- static unsigned int GetCurrentInstanceCount();
+ static uint32_t GetCurrentInstanceCount();
/**
* Helper for internal test cases; only available for debug builds.
* @return The total number of Constraint instances created during the Dali core lifetime.
*/
- static unsigned int GetTotalInstanceCount();
+ static uint32_t GetTotalInstanceCount();
private:
}
/**
- * @copydoc Dali::Internal::SceneGraph::PropertyOwner::ResetDefaultProperties()
- */
- virtual void ResetDefaultProperties( BufferIndex updateBufferIndex );
-
- /**
* Notify the derived class to disconnect from property owners
*/
virtual void OnDisconnect() = 0;
-public:
-
- AnimatableProperty<float> mWeight; ///< The constraint is "fully-applied" when weight = 1
-
protected:
RemoveAction mRemoveAction;
private:
PropertyOwnerContainer mObservedOwners; ///< A set of pointers to each observed object. Not owned.
+ LifecycleObserver* mLifecycleObserver; ///< Resetter observers this object
#ifdef DEBUG_ENABLED
- static unsigned int mCurrentInstanceCount; ///< The current number of Constraint instances in existence.
- static unsigned int mTotalInstanceCount; ///< The total number of Constraint instances created during the Dali core lifetime.
+ static uint32_t mCurrentInstanceCount; ///< The current number of Constraint instances in existence.
+ static uint32_t mTotalInstanceCount; ///< The total number of Constraint instances created during the Dali core lifetime.
#endif
};
// Messages for ConstraintBase
-inline void BakeWeightMessage( EventThreadServices& eventThreadServices, const ConstraintBase& constraint, float weight )
-{
- typedef MessageDoubleBuffered1< ConstraintBase, float > LocalType;
-
- // Reserve some memory inside the message queue
- unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
-
- // Construct message in the message queue memory; note that delete should not be called on the return value
- new (slot) LocalType( &constraint, &ConstraintBase::BakeWeight, weight );
-}
-
inline void SetRemoveActionMessage( EventThreadServices& eventThreadServices, const ConstraintBase& constraint, Dali::Constraint::RemoveAction removeAction )
{
typedef MessageValue1< ConstraintBase, Dali::Constraint::RemoveAction > LocalType;
// Reserve some memory inside the message queue
- unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
+ uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
// Construct message in the message queue memory; note that delete should not be called on the return value
new (slot) LocalType( &constraint, &ConstraintBase::SetRemoveAction, removeAction );
} // namespace Dali
-#endif // __DALI_INTERNAL_SCENE_GRAPH_CONSTRAINT_BASE_H__
+#endif // DALI_INTERNAL_SCENE_GRAPH_CONSTRAINT_BASE_H