-#ifndef TRANSFORM_MANAGER_PROPERTY_H_
-#define TRANSFORM_MANAGER_PROPERTY_H_
+#ifndef DALI_INTERNAL_UPDATE_TRANSFORM_MANAGER_PROPERTY_H
+#define DALI_INTERNAL_UPDATE_TRANSFORM_MANAGER_PROPERTY_H
/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
*
*/
-#include <dali/internal/update/manager/transform-manager.h>
#include <dali/internal/update/common/animatable-property.h>
+#include <dali/internal/update/manager/transform-manager.h>
namespace Dali
{
{
namespace SceneGraph
{
-
-template <typename T>
+template<typename T>
struct TransformManagerPropertyHandler : public AnimatablePropertyBase
{
/**
* Constructor
*/
- TransformManagerPropertyHandler()
- :mTxManager(0),
- mId( INVALID_TRANSFORM_ID )
- {}
+ TransformManagerPropertyHandler() = default;
/**
* @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType()
*/
- virtual Dali::Property::Type GetType() const = 0;
+ Dali::Property::Type GetType() const override = 0;
/**
* @copydoc Dali::SceneGraph::AnimatableProperty::Get()
*/
- virtual T& Get( BufferIndex bufferIndex ) = 0;
+ virtual T& Get(BufferIndex bufferIndex) = 0;
/**
* @copydoc Dali::SceneGraph::AnimatableProperty::Get()
*/
- virtual const T& Get( BufferIndex bufferIndex ) const = 0;
+ virtual const T& Get(BufferIndex bufferIndex) const = 0;
/**
* @copydoc Dali::PropertyInput::GetVector3()
*/
- virtual const Vector3& GetVector3( BufferIndex bufferIndex ) const{ return Vector3::ZERO; }
+ const Vector3& GetVector3(BufferIndex bufferIndex) const override
+ {
+ return Vector3::ZERO;
+ }
/**
* Retrieve a component of property
* @param[in] component The component of the property
*/
- virtual const float& GetFloatComponent(uint32_t component)=0;
+ virtual const float& GetFloatComponent(uint32_t component) const
+ {
+ DALI_ASSERT_DEBUG(0 && "Invalid call");
+
+ static const float value = 0.0f;
+ return value;
+ }
/**
* Set the property value. This will only persist for the current frame; the property
* @param[in] value The new value of the component
* @param[in] component The component of the property
*/
- virtual void SetFloatComponent( float value, uint32_t component){}
+ virtual void SetFloatComponent(float value, uint32_t component)
+ {
+ }
/**
* @copydoc Dali::AnimatableProperty::Bake()
* @param[in] value The new value of the component
* @param[in] component The component of the property
*/
- virtual void BakeFloatComponent( float value, uint32_t component){}
+ virtual void BakeFloatComponent(float value, uint32_t component)
+ {
+ }
/**
* @copydoc Dali::AnimatableProperty::BakeX()
*/
- virtual void BakeX(BufferIndex bufferIndex, float value){}
+ virtual void BakeX(BufferIndex bufferIndex, float value)
+ {
+ }
/**
* @copydoc Dali::AnimatableProperty::BakeY()
*/
- virtual void BakeY(BufferIndex bufferIndex, float value){}
+ virtual void BakeY(BufferIndex bufferIndex, float value)
+ {
+ }
/**
* @copydoc Dali::AnimatableProperty::BakeZ()
*/
- virtual void BakeZ(BufferIndex bufferIndex, float value){}
+ virtual void BakeZ(BufferIndex bufferIndex, float value)
+ {
+ }
/**
* @copydoc Dali::AnimatableProperty::BakeRelative()
/**
* @copydoc Dali::AnimatableProperty::ResetToBaseValue()
*/
- virtual void ResetToBaseValue(BufferIndex updateBufferIndex){}
+ void ResetToBaseValue(BufferIndex updateBufferIndex) override
+ {
+ }
/**
* @copydoc Dali::AnimatableProperty::IsClean()
*/
- virtual bool IsClean() const{ return false; }
-
- /**
- * Initializes the property
- * @param[in] transformManager Pointer to the transform manager
- * @param[in] Id of the transformation the property is associated with
- */
- void Initialize( TransformManager* transformManager, TransformId id )
+ bool IsClean() const override
{
- mTxManager = transformManager;
- mId = id;
+ return false;
}
/**
* @copydoc Dali::Internal::PropertyInputImpl::IsTransformManagerProperty()
*/
- virtual bool IsTransformManagerProperty() const
+ bool IsTransformManagerProperty() const override
{
return true;
}
-
- TransformManager* mTxManager;
- TransformId mId;
};
-struct TransformManagerPropertyVector3 : public TransformManagerPropertyHandler<Vector3>
+template<TransformManagerProperty PropertyT, size_t TxMgrDataOffset>
+struct TransformManagerPropertyVector3 final : public TransformManagerPropertyHandler<Vector3>
{
+ enum
+ {
+ TRANSFORM_MANAGER_DATA_OFFSET = TxMgrDataOffset
+ };
+ TransformManagerData* GetTxManagerData()
+ {
+ return reinterpret_cast<TransformManagerData*>(
+ reinterpret_cast<uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
+ const TransformManagerData* GetTxManagerData() const
+ {
+ return reinterpret_cast<const TransformManagerData*>(
+ reinterpret_cast<const uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
- TransformManagerPropertyVector3(TransformManagerProperty property)
- :TransformManagerPropertyHandler(),
- mProperty( property )
- {}
+ TransformManagerPropertyVector3() = default;
- Dali::Property::Type GetType() const
+ Dali::Property::Type GetType() const override
{
return Dali::PropertyTypes::Get<Vector3>();
}
- Vector3& Get( BufferIndex bufferIndex )
+ Vector3& Get(BufferIndex bufferIndex) override
{
- return mTxManager->GetVector3PropertyValue( mId, mProperty );
+ return GetTxManagerData()->Manager()->GetVector3PropertyValue(GetTxManagerData()->Id(), PropertyT);
}
- const Vector3& Get( BufferIndex bufferIndex ) const
+ const Vector3& Get(BufferIndex bufferIndex) const override
{
- return mTxManager->GetVector3PropertyValue( mId, mProperty );
+ return GetTxManagerData()->Manager()->GetVector3PropertyValue(GetTxManagerData()->Id(), PropertyT);
}
- virtual const Vector3& GetVector3( BufferIndex bufferIndex ) const
+ const Vector3& GetVector3(BufferIndex bufferIndex) const override
{
return Get(bufferIndex);
}
- const float& GetFloatComponent( uint32_t component )
+ const float& GetFloatComponent(uint32_t component) const override
{
- return mTxManager->GetVector3PropertyComponentValue( mId, mProperty, component );
+ return GetTxManagerData()->Manager()->GetVector3PropertyComponentValue(GetTxManagerData()->Id(), PropertyT, component);
}
- void Set(BufferIndex bufferIndex, const Vector3& value)
+ void Set(BufferIndex bufferIndex, const Vector3& value) override
{
- mTxManager->SetVector3PropertyValue( mId, mProperty, value );
+ GetTxManagerData()->Manager()->SetVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
void SetComponent(BufferIndex bufferIndex, float value, uint32_t component)
{
- mTxManager->SetVector3PropertyComponentValue( mId, mProperty, value, component);
+ GetTxManagerData()->Manager()->SetVector3PropertyComponentValue(GetTxManagerData()->Id(), PropertyT, value, component);
}
void BakeComponent(BufferIndex bufferIndex, float value, uint32_t component)
{
- mTxManager->BakeVector3PropertyComponentValue( mId, mProperty, value, component);
+ GetTxManagerData()->Manager()->BakeVector3PropertyComponentValue(GetTxManagerData()->Id(), PropertyT, value, component);
}
- void Bake(BufferIndex bufferIndex, const Vector3& value)
+ void Bake(BufferIndex bufferIndex, const Vector3& value) override
{
- mTxManager->BakeVector3PropertyValue(mId, mProperty, value );
+ GetTxManagerData()->Manager()->BakeVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
- void BakeX(BufferIndex bufferIndex, float value)
+ void BakeX(BufferIndex bufferIndex, float value) override
{
- mTxManager->BakeXVector3PropertyValue(mId, mProperty, value );
+ GetTxManagerData()->Manager()->BakeXVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
- void BakeY(BufferIndex bufferIndex, float value)
+ void BakeY(BufferIndex bufferIndex, float value) override
{
- mTxManager->BakeYVector3PropertyValue(mId, mProperty, value );
+ GetTxManagerData()->Manager()->BakeYVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
- void BakeZ(BufferIndex bufferIndex, float value)
+ void BakeZ(BufferIndex bufferIndex, float value) override
{
- mTxManager->BakeZVector3PropertyValue(mId, mProperty, value );
+ GetTxManagerData()->Manager()->BakeZVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
- void SetFloatComponent( float value, uint32_t component)
+ void SetFloatComponent(float value, uint32_t component) override
{
- mTxManager->SetVector3PropertyComponentValue( mId, mProperty, value, component);
+ GetTxManagerData()->Manager()->SetVector3PropertyComponentValue(GetTxManagerData()->Id(), PropertyT, value, component);
}
- void BakeFloatComponent( float value, uint32_t component )
+ void BakeFloatComponent(float value, uint32_t component) override
{
- mTxManager->BakeVector3PropertyComponentValue( mId, mProperty, value, component);
+ GetTxManagerData()->Manager()->BakeVector3PropertyComponentValue(GetTxManagerData()->Id(), PropertyT, value, component);
}
- void BakeRelative(BufferIndex bufferIndex, const Vector3& value)
+ void BakeRelative(BufferIndex bufferIndex, const Vector3& value) override
{
- mTxManager->BakeRelativeVector3PropertyValue(mId, mProperty, value );
+ GetTxManagerData()->Manager()->BakeRelativeVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
- void BakeRelativeMultiply(BufferIndex bufferIndex, const Vector3& value)
+ void BakeRelativeMultiply(BufferIndex bufferIndex, const Vector3& value) override
{
- mTxManager->BakeMultiplyVector3PropertyValue(mId, mProperty, value );
+ GetTxManagerData()->Manager()->BakeMultiplyVector3PropertyValue(GetTxManagerData()->Id(), PropertyT, value);
}
-
- TransformManagerProperty mProperty;
};
-class TransformManagerPropertyQuaternion : public TransformManagerPropertyHandler<Quaternion>
+template<size_t TxMgrDataOffset>
+class TransformManagerPropertyQuaternion final : public TransformManagerPropertyHandler<Quaternion>
{
public:
-
- TransformManagerPropertyQuaternion()
- :TransformManagerPropertyHandler()
- {}
-
- virtual Dali::Property::Type GetType() const
+ enum
{
- return Dali::PropertyTypes::Get<Quaternion>();
+ TRANSFORM_MANAGER_DATA_OFFSET = TxMgrDataOffset
+ };
+ TransformManagerData* GetTxManagerData()
+ {
+ return reinterpret_cast<TransformManagerData*>(
+ reinterpret_cast<uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
+ const TransformManagerData* GetTxManagerData() const
+ {
+ return reinterpret_cast<const TransformManagerData*>(
+ reinterpret_cast<const uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
}
- Quaternion& Get( BufferIndex bufferIndex )
+ TransformManagerPropertyQuaternion() = default;
+
+ Dali::Property::Type GetType() const override
{
- return mTxManager->GetQuaternionPropertyValue( mId );
+ return Dali::PropertyTypes::Get<Quaternion>();
}
- const Quaternion& Get( BufferIndex bufferIndex ) const
+ Quaternion& Get(BufferIndex bufferIndex) override
{
- return mTxManager->GetQuaternionPropertyValue( mId );
+ return GetTxManagerData()->Manager()->GetQuaternionPropertyValue(GetTxManagerData()->Id());
}
- const float& GetFloatComponent( uint32_t component)
+ const Quaternion& Get(BufferIndex bufferIndex) const override
{
- return mTxManager->GetQuaternionPropertyValue( mId ).mVector[component];
+ return GetTxManagerData()->Manager()->GetQuaternionPropertyValue(GetTxManagerData()->Id());
}
- void Set(BufferIndex bufferIndex, const Quaternion& value)
+ void Set(BufferIndex bufferIndex, const Quaternion& value) override
{
- return mTxManager->SetQuaternionPropertyValue( mId, value );
+ return GetTxManagerData()->Manager()->SetQuaternionPropertyValue(GetTxManagerData()->Id(), value);
}
- void Bake(BufferIndex bufferIndex, const Quaternion& value)
+ void Bake(BufferIndex bufferIndex, const Quaternion& value) override
{
- return mTxManager->BakeQuaternionPropertyValue( mId, value );
+ return GetTxManagerData()->Manager()->BakeQuaternionPropertyValue(GetTxManagerData()->Id(), value);
}
- void BakeRelative(BufferIndex bufferIndex, const Quaternion& value)
+ void BakeRelative(BufferIndex bufferIndex, const Quaternion& value) override
{
- return mTxManager->BakeRelativeQuaternionPropertyValue( mId, value );
+ return GetTxManagerData()->Manager()->BakeRelativeQuaternionPropertyValue(GetTxManagerData()->Id(), value);
}
- virtual const Quaternion& GetQuaternion( BufferIndex bufferIndex ) const
+ const Quaternion& GetQuaternion(BufferIndex bufferIndex) const override
{
return Get(bufferIndex);
}
-
};
/**
* A Vector3 property used as input.
*/
+template<size_t TxMgrDataOffset>
class TransformManagerVector3Input : public PropertyInputImpl
{
public:
+ enum
+ {
+ TRANSFORM_MANAGER_DATA_OFFSET = TxMgrDataOffset
+ };
+ TransformManagerData* GetTxManagerData()
+ {
+ return reinterpret_cast<TransformManagerData*>(
+ reinterpret_cast<uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
+ const TransformManagerData* GetTxManagerData() const
+ {
+ return reinterpret_cast<const TransformManagerData*>(
+ reinterpret_cast<const uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
/**
* Create an TransformManagerVector3Input
*/
- TransformManagerVector3Input( TransformManagerProperty property, const Vector3& initialValue )
- :mTxManager(0),
- mId(INVALID_TRANSFORM_ID),
- mProperty(property),
- mValue(initialValue)
- {}
+ TransformManagerVector3Input(TransformManagerProperty property, const Vector3& initialValue)
+ : mProperty(property),
+ mValue(initialValue)
+ {
+ }
/**
* Virtual destructor.
*/
- virtual ~TransformManagerVector3Input()
- {
- }
+ ~TransformManagerVector3Input() override = default;
/**
* @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType()
*/
- virtual Dali::Property::Type GetType() const
+ Dali::Property::Type GetType() const override
{
return Dali::PropertyTypes::Get<Vector3>();
}
/**
* @copydoc Dali::Internal::PropertyInputImpl::InputInitialized()
*/
- virtual bool InputInitialized() const
+ bool InputInitialized() const override
{
return true;
}
* @copydoc Dali::Internal::PropertyInputImpl::InputChanged()
* @note A constraint can only receive the inherited property from the previous frame.
*/
- virtual bool InputChanged() const
+ bool InputChanged() const override
{
return true;
}
*/
void ComputeTransformComponent() const
{
- if( mTxManager )
+ auto transformManagerData = GetTxManagerData();
+ auto id = transformManagerData->Id();
+ if(id != INVALID_TRANSFORM_ID)
{
- const Matrix& worldMatrix = mTxManager->GetWorldMatrix(mId);
-
- if( mProperty == TRANSFORM_PROPERTY_WORLD_POSITION )
+ const Matrix& worldMatrix = transformManagerData->Manager()->GetWorldMatrix(id);
+ if(mProperty == TRANSFORM_PROPERTY_WORLD_POSITION)
{
mValue = worldMatrix.GetTranslation3();
}
- else if( mProperty == TRANSFORM_PROPERTY_WORLD_SCALE )
+ else if(mProperty == TRANSFORM_PROPERTY_WORLD_SCALE)
{
- Vector3 position;
+ Vector3 position;
Quaternion orientation;
worldMatrix.GetTransformComponents(position, orientation, mValue);
}
/**
* @copydoc Dali::PropertyInput::GetVector3()
*/
- virtual const Vector3& GetVector3( BufferIndex bufferIndex ) const
+ const Vector3& GetVector3(BufferIndex bufferIndex) const override
{
ComputeTransformComponent();
return mValue;
/**
* @copydoc Dali::PropertyInput::GetConstraintInputVector3()
*/
- virtual const Vector3& GetConstraintInputVector3( BufferIndex bufferIndex ) const
+ const Vector3& GetConstraintInputVector3(BufferIndex bufferIndex) const override
{
ComputeTransformComponent();
return mValue;
/**
* @copydoc Dali::SceneGraph::PropertyInterface::Get()
*/
- Vector3& Get( BufferIndex bufferIndex )
+ Vector3& Get(BufferIndex bufferIndex)
{
ComputeTransformComponent();
return mValue;
/**
* @copydoc Dali::SceneGraph::PropertyInterface::Get()
*/
- const Vector3& Get( BufferIndex bufferIndex ) const
+ const Vector3& Get(BufferIndex bufferIndex) const
{
ComputeTransformComponent();
return mValue;
* @param[in] bufferIndex The buffer to read.
* @return The property value.
*/
- const Vector3& operator[]( BufferIndex bufferIndex ) const
+ const Vector3& operator[](BufferIndex bufferIndex) const
{
ComputeTransformComponent();
return mValue;
}
/**
- * Initializes the property
- * @param[in] transformManager Pointer to the transform manager
- * @param[in] Id of the transformation the property is associated with
- */
- void Initialize( TransformManager* transformManager, TransformId id )
- {
- mTxManager = transformManager;
- mId = id;
- }
-
- /**
* @copydoc Dali::Internal::PropertyInputImpl::IsTransformManagerProperty()
*/
- virtual bool IsTransformManagerProperty() const
+ bool IsTransformManagerProperty() const override
{
return true;
}
private:
-
- // Undefined
- TransformManagerVector3Input(const TransformManagerVector3Input& property);
-
- // Undefined
- TransformManagerVector3Input& operator=(const TransformManagerVector3Input& rhs);
+ TransformManagerVector3Input(const TransformManagerVector3Input& property) = delete;
+ TransformManagerVector3Input& operator=(const TransformManagerVector3Input& rhs) = delete;
public:
-
- TransformManager* mTxManager;
- TransformId mId;
TransformManagerProperty mProperty;
- mutable Vector3 mValue;
+ mutable Vector3 mValue;
};
/**
* A Quaternion property used as input.
*/
-class TransformManagerQuaternionInput : public PropertyInputImpl
+template<size_t TxMgrDataOffset>
+class TransformManagerQuaternionInput final : public PropertyInputImpl
{
public:
-
- /**
- * Constructor
- */
- TransformManagerQuaternionInput()
- :mTxManager(0),
- mId(INVALID_TRANSFORM_ID),
- mValue(1.0f,0.0f,0.0f,0.0f)
+ enum
{
+ TRANSFORM_MANAGER_DATA_OFFSET = TxMgrDataOffset
+ };
+ TransformManagerData* GetTxManagerData()
+ {
+ return reinterpret_cast<TransformManagerData*>(
+ reinterpret_cast<uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
+ const TransformManagerData* GetTxManagerData() const
+ {
+ return reinterpret_cast<const TransformManagerData*>(
+ reinterpret_cast<const uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
}
/**
- * Virtual destructor.
+ * Constructor
*/
- virtual ~TransformManagerQuaternionInput()
- {
- }
+ TransformManagerQuaternionInput() = default;
/**
* @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType()
*/
- virtual Dali::Property::Type GetType() const
+ Dali::Property::Type GetType() const override
{
return Dali::PropertyTypes::Get<Quaternion>();
}
/**
* @copydoc Dali::Internal::PropertyInputImpl::InputInitialized()
*/
- virtual bool InputInitialized() const
+ bool InputInitialized() const override
{
return true;
}
* @copydoc Dali::Internal::PropertyInputImpl::InputChanged()
* @note A constraint can only receive the inherited property from the previous frame.
*/
- virtual bool InputChanged() const
+ bool InputChanged() const override
{
return true;
}
*/
void ComputeTransformComponent() const
{
- if( mTxManager )
+ auto transformManagerData = GetTxManagerData();
+ auto id = transformManagerData->Id();
+ if(id != INVALID_TRANSFORM_ID)
{
- const Matrix& worldMatrix = mTxManager->GetWorldMatrix(mId);
- Vector3 position, scale;
+ const Matrix& worldMatrix = transformManagerData->Manager()->GetWorldMatrix(id);
+ Vector3 position, scale;
worldMatrix.GetTransformComponents(position, mValue, scale);
}
}
/**
* @copydoc Dali::PropertyInput::GetQuaternion()
*/
- virtual const Quaternion& GetQuaternion( BufferIndex bufferIndex ) const
+ const Quaternion& GetQuaternion(BufferIndex bufferIndex) const override
{
ComputeTransformComponent();
return mValue;
/**
* @copydoc Dali::PropertyInput::GetConstraintInputQuaternion()
*/
- virtual const Quaternion& GetConstraintInputQuaternion( BufferIndex bufferIndex ) const
+ const Quaternion& GetConstraintInputQuaternion(BufferIndex bufferIndex) const override
{
ComputeTransformComponent();
return mValue;
/**
* @copydoc Dali::SceneGraph::PropertyInterface::Get()
*/
- Quaternion& Get( BufferIndex bufferIndex )
+ Quaternion& Get(BufferIndex bufferIndex)
{
ComputeTransformComponent();
return mValue;
/**
* @copydoc Dali::SceneGraph::PropertyInterface::Get()
*/
- const Quaternion& Get( BufferIndex bufferIndex ) const
+ const Quaternion& Get(BufferIndex bufferIndex) const
{
ComputeTransformComponent();
return mValue;
* @param[in] bufferIndex The buffer to read.
* @return The property value.
*/
- const Quaternion& operator[]( BufferIndex bufferIndex) const
+ const Quaternion& operator[](BufferIndex bufferIndex) const
{
ComputeTransformComponent();
return mValue;
}
/**
- * Initializes the property
- * @param[in] transformManager Pointer to the transform manager
- * @param[in] Id of the transformation the property is associated with
- */
- void Initialize( TransformManager* transformManager, TransformId id )
- {
- mTxManager = transformManager;
- mId = id;
- }
-
- /**
* @copydoc Dali::Internal::PropertyInputImpl::IsTransformManagerProperty()
*/
- virtual bool IsTransformManagerProperty() const
+ bool IsTransformManagerProperty() const override
{
return true;
}
private:
-
- // Undefined
- TransformManagerQuaternionInput(const TransformManagerQuaternionInput& property);
-
- // Undefined
- TransformManagerQuaternionInput& operator=(const TransformManagerQuaternionInput& rhs);
+ TransformManagerQuaternionInput(const TransformManagerQuaternionInput& property) = delete;
+ TransformManagerQuaternionInput& operator=(const TransformManagerQuaternionInput& rhs) = delete;
public:
-
- TransformManager* mTxManager;
- TransformId mId;
mutable Quaternion mValue;
};
/**
* A Matrix property used as input.
*/
-class TransformManagerMatrixInput : public PropertyInputImpl
+template<size_t TxMgrDataOffset>
+class TransformManagerMatrixInput final : public PropertyInputImpl
{
public:
-
- /**
- * Constructor
- */
- TransformManagerMatrixInput()
- :mTxManager(0),
- mId(INVALID_TRANSFORM_ID)
+ enum
{
+ TRANSFORM_MANAGER_DATA_OFFSET = TxMgrDataOffset
+ };
+ TransformManagerData* GetTxManagerData()
+ {
+ return reinterpret_cast<TransformManagerData*>(
+ reinterpret_cast<uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
+ }
+ const TransformManagerData* GetTxManagerData() const
+ {
+ return reinterpret_cast<const TransformManagerData*>(
+ reinterpret_cast<const uint8_t*>(this) - TRANSFORM_MANAGER_DATA_OFFSET);
}
/**
- * Virtual destructor.
+ * Constructor
*/
- virtual ~TransformManagerMatrixInput()
- {
- }
+ TransformManagerMatrixInput() = default;
/**
* @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType()
*/
- virtual Dali::Property::Type GetType() const
+ Dali::Property::Type GetType() const override
{
return Dali::PropertyTypes::Get<Matrix>();
}
/**
* @copydoc Dali::Internal::PropertyInputImpl::InputInitialized()
*/
- virtual bool InputInitialized() const
+ bool InputInitialized() const override
{
return true;
}
* @copydoc Dali::Internal::PropertyInputImpl::InputChanged()
* @note A constraint can only receive the inherited property from the previous frame.
*/
- virtual bool InputChanged() const
+ bool InputChanged() const override
{
return true;
}
/**
* @copydoc Dali::PropertyInput::GetMatrix()
*/
- virtual const Matrix& GetMatrix( BufferIndex bufferIndex ) const
+ const Matrix& GetMatrix(BufferIndex bufferIndex) const override
{
- if( mTxManager )
+ auto transformManagerData = GetTxManagerData();
+ auto id = transformManagerData->Id();
+ if(id != INVALID_TRANSFORM_ID)
{
- return mTxManager->GetWorldMatrix(mId);
+ return transformManagerData->Manager()->GetWorldMatrix(id);
}
-
return Matrix::IDENTITY;
}
/**
* @copydoc Dali::PropertyInput::GetConstraintInputMatrix()
*/
- virtual const Matrix& GetConstraintInputMatrix( BufferIndex bufferIndex ) const
+ const Matrix& GetConstraintInputMatrix(BufferIndex bufferIndex) const override
{
- if( mTxManager )
+ auto transformManagerData = GetTxManagerData();
+ auto id = transformManagerData->Id();
+ if(id != INVALID_TRANSFORM_ID)
{
- return mTxManager->GetWorldMatrix(mId);
+ return transformManagerData->Manager()->GetWorldMatrix(id);
}
-
return Matrix::IDENTITY;
}
/**
* @copydoc Dali::SceneGraph::PropertyInterface::Get()
*/
- Matrix& Get( BufferIndex bufferIndex )
+ Matrix& Get(BufferIndex bufferIndex)
{
- DALI_ASSERT_ALWAYS( mTxManager != 0 );
- return mTxManager->GetWorldMatrix(mId);
+ auto transformManagerData = GetTxManagerData();
+ auto id = transformManagerData->Id();
+ DALI_ASSERT_ALWAYS(id != INVALID_TRANSFORM_ID);
+ return transformManagerData->Manager()->GetWorldMatrix(id);
}
/**
* @copydoc Dali::SceneGraph::PropertyInterface::Get()
*/
- const Matrix& Get( BufferIndex bufferIndex ) const
+ const Matrix& Get(BufferIndex bufferIndex) const
{
- return GetMatrix( bufferIndex );
+ return GetMatrix(bufferIndex);
}
/**
* @param[in] bufferIndex The buffer to read.
* @return The property value.
*/
- const Matrix& operator[]( BufferIndex bufferIndex ) const
- {
- return GetMatrix( bufferIndex );
- }
-
- void Initialize( TransformManager* transformManager, TransformId id )
+ const Matrix& operator[](BufferIndex bufferIndex) const
{
- mTxManager = transformManager;
- mId = id;
+ return GetMatrix(bufferIndex);
}
/**
* @copydoc Dali::Internal::PropertyInputImpl::IsTransformManagerProperty()
*/
- virtual bool IsTransformManagerProperty() const
+ bool IsTransformManagerProperty() const override
{
return true;
}
private:
-
- // Undefined
- TransformManagerMatrixInput(const TransformManagerMatrixInput& property);
-
- // Undefined
- TransformManagerMatrixInput& operator=(const TransformManagerMatrixInput& rhs);
-
-public:
-
- TransformManager* mTxManager;
- TransformId mId;
+ TransformManagerMatrixInput(const TransformManagerMatrixInput& property) = delete;
+ TransformManagerMatrixInput& operator=(const TransformManagerMatrixInput& rhs) = delete;
};
+} // namespace SceneGraph
+} // namespace Internal
+} // namespace Dali
-} //namespace SceneGraph
-} //namespace Internal
-} //namespace Dali
-
-#endif // TRANSFORM_MANAGER_PROPERTY_H_
+#endif // DALI_INTERNAL_UPDATE_TRANSFORM_MANAGER_PROPERTY_H