/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
auto animatableDecoratedVisualProperties = new SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties();
// Append extended properties as AnimatableDecoratedVisualProperties.
- animatableVisualProperties->mExtendedProperties = animatableDecoratedVisualProperties;
- animatableVisualProperties->mExtendedPropertiesDeleteFunction = SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties::DeleteFunction;
+ animatableVisualProperties->mExtendedProperties = animatableDecoratedVisualProperties;
sceneObjectKey->SetVisualProperties(animatableVisualProperties);
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mCornerRadius[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mCornerRadiusPolicy[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBorderlineWidth[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBorderlineColor[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBorderlineOffset[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = sceneObject.GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
value = decoratedVisualProperties->mBlurRadius[GetEventThreadServices().GetEventBufferIndex()];
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mCornerRadius;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBorderlineWidth;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBorderlineColor;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBorderlineOffset;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
property = &decoratedVisualProperties->mBlurRadius;
auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
if(visualProperties)
{
- auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+ auto decoratedVisualProperties = visualProperties->mExtendedProperties;
if(decoratedVisualProperties)
{
return &decoratedVisualProperties->mCornerRadiusPolicy;
namespace Dali::Internal::SceneGraph::VisualRenderer
{
-struct AnimatableVisualProperties
+struct AnimatableDecoratedVisualProperties
{
- AnimatableVisualProperties()
- : mTransformOffset(Vector2::ZERO),
- mTransformSize(Vector2::ONE),
- mTransformOrigin(Vector2::ZERO),
- mTransformAnchorPoint(Vector2::ZERO),
- mTransformOffsetSizeMode(Vector4::ZERO),
- mExtraSize(Vector2::ZERO),
- mMixColor(Vector3::ONE),
- mPreMultipliedAlpha(0.0f),
- mExtendedPropertiesDeleteFunction(nullptr)
+ AnimatableDecoratedVisualProperties()
+ : mBorderlineWidth(0.0f),
+ mBorderlineOffset(0.0f),
+ mBlurRadius(0.0f),
+ mBorderlineColor(Color::BLACK),
+ mCornerRadius(Vector4::ZERO),
+ mCornerRadiusPolicy(1.0f)
{
}
- ~AnimatableVisualProperties()
+ ~AnimatableDecoratedVisualProperties()
{
- if(mExtendedProperties && mExtendedPropertiesDeleteFunction)
- {
- mExtendedPropertiesDeleteFunction(mExtendedProperties);
- }
}
public: // Public API
*/
bool Updated() const;
- /**
- * @copydoc RenderDataProvider::GetVisualTransformedUpdateArea()
- */
- Vector4 GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex, const Vector4& originalUpdateArea) noexcept;
-
public:
/**
* @brief Prepare properties and ready to render sequence
* @brief Cached coefficient value when we calculate visual transformed update size.
* It can reduce complexity of calculate the vertex position.
*
- * Vector2 vertexPosition = (XA * aPosition + XB) * originalSize + (CA * aPosition + CB)
+ * Vector2 vertexPosition += Vector2(D, D) * aPosition
*/
- struct VisualTransformedUpdateSizeCoefficientCache : public VisualRendererCoefficientCacheBase
+ struct DecoratedVisualTransformedUpdateSizeCoefficientCache : public VisualRendererCoefficientCacheBase
{
- VisualTransformedUpdateSizeCoefficientCache()
+ DecoratedVisualTransformedUpdateSizeCoefficientCache()
: VisualRendererCoefficientCacheBase(),
- coefXA(Vector2::ZERO),
- coefXB(Vector2::ZERO),
- coefCA(Vector2::ZERO),
- coefCB(Vector2::ZERO)
+ coefD(0.0f)
{
}
- ~VisualTransformedUpdateSizeCoefficientCache() override = default;
+ ~DecoratedVisualTransformedUpdateSizeCoefficientCache() override = default;
- Vector2 coefXA;
- Vector2 coefXB;
- Vector2 coefCA;
- Vector2 coefCB;
+ float coefD;
};
public: // Default properties
// Define a base offset for the following wrappers. The wrapper macros calculate offsets from the previous
// element such that each wrapper type generates a compile time offset to the CoefficientCache data.
- BASE(VisualTransformedUpdateSizeCoefficientCache, mCoefficient); ///< Coefficient value to calculate visual transformed update size by VisualProperties more faster.
+ BASE(DecoratedVisualTransformedUpdateSizeCoefficientCache, mCoefficient); ///< Coefficient value to calculate visual transformed update size by VisualProperties more faster.
- PROPERTY_WRAPPER(mCoefficient, VisualRendererProperty, Vector2, mTransformOffset);
- PROPERTY_WRAPPER(mTransformOffset, VisualRendererProperty, Vector2, mTransformSize);
- PROPERTY_WRAPPER(mTransformSize, VisualRendererProperty, Vector2, mTransformOrigin);
- PROPERTY_WRAPPER(mTransformOrigin, VisualRendererProperty, Vector2, mTransformAnchorPoint);
- PROPERTY_WRAPPER(mTransformAnchorPoint, VisualRendererProperty, Vector4, mTransformOffsetSizeMode);
- PROPERTY_WRAPPER(mTransformOffsetSizeMode, VisualRendererProperty, Vector2, mExtraSize);
+ PROPERTY_WRAPPER(mCoefficient, VisualRendererProperty, float, mBorderlineWidth);
+ PROPERTY_WRAPPER(mBorderlineWidth, VisualRendererProperty, float, mBorderlineOffset);
+ PROPERTY_WRAPPER(mBorderlineOffset, VisualRendererProperty, float, mBlurRadius);
// Properties that don't give any effort to coefficient.
- AnimatableProperty<Vector3> mMixColor;
- AnimatableProperty<float> mPreMultipliedAlpha;
-
-public: // Extended properties
- void* mExtendedProperties{nullptr}; // Enable derived class to extend properties further
- void (*mExtendedPropertiesDeleteFunction)(void*){nullptr}; // Derived class's custom delete functor
+ AnimatableProperty<Vector4> mBorderlineColor;
+ AnimatableProperty<Vector4> mCornerRadius;
+ AnimatableProperty<float> mCornerRadiusPolicy;
};
-struct AnimatableDecoratedVisualProperties
+struct AnimatableVisualProperties
{
- AnimatableDecoratedVisualProperties()
- : mBorderlineWidth(0.0f),
- mBorderlineOffset(0.0f),
- mBlurRadius(0.0f),
- mBorderlineColor(Color::BLACK),
- mCornerRadius(Vector4::ZERO),
- mCornerRadiusPolicy(1.0f)
- {
- }
- ~AnimatableDecoratedVisualProperties()
+ AnimatableVisualProperties()
+ : mTransformOffset(Vector2::ZERO),
+ mTransformSize(Vector2::ONE),
+ mTransformOrigin(Vector2::ZERO),
+ mTransformAnchorPoint(Vector2::ZERO),
+ mTransformOffsetSizeMode(Vector4::ZERO),
+ mExtraSize(Vector2::ZERO),
+ mMixColor(Vector3::ONE),
+ mPreMultipliedAlpha(0.0f),
+ mExtendedProperties(nullptr)
{
}
-public: // Public API
- // Delete function of AnimatableDecoratedVisualProperties* converted as void*
- static void DeleteFunction(void* data)
+ ~AnimatableVisualProperties()
{
- delete static_cast<AnimatableDecoratedVisualProperties*>(data);
+ if(mExtendedProperties)
+ {
+ delete mExtendedProperties;
+ }
}
+public: // Public API
/**
* @copydoc Dali::Internal::SceneGraph::Renderer::RequestResetToBaseValues
*/
*/
bool Updated() const;
+ /**
+ * @copydoc RenderDataProvider::GetVisualTransformedUpdateArea()
+ */
+ Vector4 GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex, const Vector4& originalUpdateArea) noexcept;
+
public:
/**
* @brief Prepare properties and ready to render sequence
* @brief Cached coefficient value when we calculate visual transformed update size.
* It can reduce complexity of calculate the vertex position.
*
- * Vector2 vertexPosition += Vector2(D, D) * aPosition
+ * Vector2 vertexPosition = (XA * aPosition + XB) * originalSize + (CA * aPosition + CB)
*/
- struct DecoratedVisualTransformedUpdateSizeCoefficientCache : public VisualRendererCoefficientCacheBase
+ struct VisualTransformedUpdateSizeCoefficientCache : public VisualRendererCoefficientCacheBase
{
- DecoratedVisualTransformedUpdateSizeCoefficientCache()
+ VisualTransformedUpdateSizeCoefficientCache()
: VisualRendererCoefficientCacheBase(),
- coefD(0.0f)
+ coefXA(Vector2::ZERO),
+ coefXB(Vector2::ZERO),
+ coefCA(Vector2::ZERO),
+ coefCB(Vector2::ZERO)
{
}
- ~DecoratedVisualTransformedUpdateSizeCoefficientCache() override = default;
+ ~VisualTransformedUpdateSizeCoefficientCache() override = default;
- float coefD;
+ Vector2 coefXA;
+ Vector2 coefXB;
+ Vector2 coefCA;
+ Vector2 coefCB;
};
public: // Default properties
// Define a base offset for the following wrappers. The wrapper macros calculate offsets from the previous
// element such that each wrapper type generates a compile time offset to the CoefficientCache data.
- BASE(DecoratedVisualTransformedUpdateSizeCoefficientCache, mCoefficient); ///< Coefficient value to calculate visual transformed update size by VisualProperties more faster.
+ BASE(VisualTransformedUpdateSizeCoefficientCache, mCoefficient); ///< Coefficient value to calculate visual transformed update size by VisualProperties more faster.
- PROPERTY_WRAPPER(mCoefficient, VisualRendererProperty, float, mBorderlineWidth);
- PROPERTY_WRAPPER(mBorderlineWidth, VisualRendererProperty, float, mBorderlineOffset);
- PROPERTY_WRAPPER(mBorderlineOffset, VisualRendererProperty, float, mBlurRadius);
+ PROPERTY_WRAPPER(mCoefficient, VisualRendererProperty, Vector2, mTransformOffset);
+ PROPERTY_WRAPPER(mTransformOffset, VisualRendererProperty, Vector2, mTransformSize);
+ PROPERTY_WRAPPER(mTransformSize, VisualRendererProperty, Vector2, mTransformOrigin);
+ PROPERTY_WRAPPER(mTransformOrigin, VisualRendererProperty, Vector2, mTransformAnchorPoint);
+ PROPERTY_WRAPPER(mTransformAnchorPoint, VisualRendererProperty, Vector4, mTransformOffsetSizeMode);
+ PROPERTY_WRAPPER(mTransformOffsetSizeMode, VisualRendererProperty, Vector2, mExtraSize);
// Properties that don't give any effort to coefficient.
- AnimatableProperty<Vector4> mBorderlineColor;
- AnimatableProperty<Vector4> mCornerRadius;
- AnimatableProperty<float> mCornerRadiusPolicy;
+ AnimatableProperty<Vector3> mMixColor;
+ AnimatableProperty<float> mPreMultipliedAlpha;
+
+public: // Extended properties for decorated visual properties
+ AnimatableDecoratedVisualProperties* mExtendedProperties{nullptr};
};
} // namespace Dali::Internal::SceneGraph::VisualRenderer