-#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.
namespace SceneGraph
{
-
-typedef Dali::Vector<PropertyOwner*> PropertyOwnerContainer;
-typedef PropertyOwnerContainer::Iterator PropertyOwnerIter;
+using PropertyOwnerContainer = Dali::Vector<PropertyOwner*>;
+using PropertyOwnerIter = PropertyOwnerContainer::Iterator;
/**
* 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;
+ };
- typedef Dali::Constraint::RemoveAction RemoveAction;
+public:
+ using RemoveAction = Dali::Constraint::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.
*/
* 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;
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
};
inline void SetRemoveActionMessage( EventThreadServices& eventThreadServices, const ConstraintBase& constraint, Dali::Constraint::RemoveAction removeAction )
{
- typedef MessageValue1< ConstraintBase, Dali::Constraint::RemoveAction > LocalType;
+ using LocalType = MessageValue1<ConstraintBase, Dali::Constraint::RemoveAction>;
// 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