Remove static_cast when we try to get decorated visual properties 94/313194/3
authorEunki, Hong <eunkiki.hong@samsung.com>
Thu, 20 Jun 2024 04:35:07 +0000 (13:35 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Thu, 20 Jun 2024 07:22:33 +0000 (16:22 +0900)
Since we don't have any plan to add extra data for VisualRenderer now,
let we specify the class of Extension of VisualRenderer, instead of void*

Change-Id: Ib8bae68c58082c93fb9a7dbe673c589f3b523766
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/internal/event/rendering/decorated-visual-renderer-impl.cpp
dali/internal/update/rendering/scene-graph-visual-renderer.cpp
dali/internal/update/rendering/scene-graph-visual-renderer.h

index f68862d..aaef139 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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.
@@ -82,8 +82,7 @@ DecoratedVisualRendererPtr DecoratedVisualRenderer::New()
   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);
 
@@ -123,7 +122,7 @@ void DecoratedVisualRenderer::SetDefaultProperty(Property::Index        index,
 
     if(visualProperties)
     {
-      auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+      auto decoratedVisualProperties = visualProperties->mExtendedProperties;
 
       if(decoratedVisualProperties)
       {
@@ -243,7 +242,7 @@ Property::Value DecoratedVisualRenderer::GetDefaultPropertyCurrentValue(Property
         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()];
@@ -256,7 +255,7 @@ Property::Value DecoratedVisualRenderer::GetDefaultPropertyCurrentValue(Property
         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()];
@@ -269,7 +268,7 @@ Property::Value DecoratedVisualRenderer::GetDefaultPropertyCurrentValue(Property
         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()];
@@ -282,7 +281,7 @@ Property::Value DecoratedVisualRenderer::GetDefaultPropertyCurrentValue(Property
         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()];
@@ -295,7 +294,7 @@ Property::Value DecoratedVisualRenderer::GetDefaultPropertyCurrentValue(Property
         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()];
@@ -308,7 +307,7 @@ Property::Value DecoratedVisualRenderer::GetDefaultPropertyCurrentValue(Property
         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()];
@@ -412,7 +411,7 @@ const SceneGraph::PropertyBase* DecoratedVisualRenderer::GetSceneObjectAnimatabl
       auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
       if(visualProperties)
       {
-        auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+        auto decoratedVisualProperties = visualProperties->mExtendedProperties;
         if(decoratedVisualProperties)
         {
           property = &decoratedVisualProperties->mCornerRadius;
@@ -425,7 +424,7 @@ const SceneGraph::PropertyBase* DecoratedVisualRenderer::GetSceneObjectAnimatabl
       auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
       if(visualProperties)
       {
-        auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+        auto decoratedVisualProperties = visualProperties->mExtendedProperties;
         if(decoratedVisualProperties)
         {
           property = &decoratedVisualProperties->mBorderlineWidth;
@@ -438,7 +437,7 @@ const SceneGraph::PropertyBase* DecoratedVisualRenderer::GetSceneObjectAnimatabl
       auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
       if(visualProperties)
       {
-        auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+        auto decoratedVisualProperties = visualProperties->mExtendedProperties;
         if(decoratedVisualProperties)
         {
           property = &decoratedVisualProperties->mBorderlineColor;
@@ -451,7 +450,7 @@ const SceneGraph::PropertyBase* DecoratedVisualRenderer::GetSceneObjectAnimatabl
       auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
       if(visualProperties)
       {
-        auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+        auto decoratedVisualProperties = visualProperties->mExtendedProperties;
         if(decoratedVisualProperties)
         {
           property = &decoratedVisualProperties->mBorderlineOffset;
@@ -464,7 +463,7 @@ const SceneGraph::PropertyBase* DecoratedVisualRenderer::GetSceneObjectAnimatabl
       auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
       if(visualProperties)
       {
-        auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+        auto decoratedVisualProperties = visualProperties->mExtendedProperties;
         if(decoratedVisualProperties)
         {
           property = &decoratedVisualProperties->mBlurRadius;
@@ -496,7 +495,7 @@ const PropertyInputImpl* DecoratedVisualRenderer::GetSceneObjectInputProperty(Pr
       auto visualProperties = GetVisualRendererSceneObject().GetVisualProperties();
       if(visualProperties)
       {
-        auto decoratedVisualProperties = static_cast<SceneGraph::VisualRenderer::AnimatableDecoratedVisualProperties*>(visualProperties->mExtendedProperties);
+        auto decoratedVisualProperties = visualProperties->mExtendedProperties;
         if(decoratedVisualProperties)
         {
           return &decoratedVisualProperties->mCornerRadiusPolicy;
index 81b5a67..3b23a20 100644 (file)
@@ -40,14 +40,13 @@ void AnimatableVisualProperties::RequestResetToBaseValues()
   mPreMultipliedAlpha.RequestResetToBaseValue();
   if(mExtendedProperties)
   {
-    auto* decoratedVisualProperties = static_cast<VisualRenderer::AnimatableDecoratedVisualProperties*>(mExtendedProperties);
-    decoratedVisualProperties->RequestResetToBaseValues();
+    mExtendedProperties->RequestResetToBaseValues();
   }
 }
 
 bool AnimatableVisualProperties::Updated() const
 {
-  return mCoefficient.IsUpdated() || (mExtendedProperties && static_cast<VisualRenderer::AnimatableDecoratedVisualProperties*>(mExtendedProperties)->Updated());
+  return mCoefficient.IsUpdated() || (mExtendedProperties && mExtendedProperties->Updated());
 }
 
 Vector4 AnimatableVisualProperties::GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex, const Vector4& originalUpdateArea) noexcept
@@ -115,17 +114,15 @@ Vector4 AnimatableVisualProperties::GetVisualTransformedUpdateArea(BufferIndex u
 
   if(mExtendedProperties)
   {
-    const auto decoratedVisualProperties = static_cast<VisualRenderer::AnimatableDecoratedVisualProperties*>(mExtendedProperties);
-
-    auto& decoratedCoefficient = decoratedVisualProperties->mCoefficient;
+    auto& decoratedCoefficient = mExtendedProperties->mCoefficient;
 
     // Recalculate only if coefficient need to be updated.
     if(!decoratedCoefficient.IsCoefficientCalculated())
     {
       // DecoratedVisualProperty
-      const float borderlineWidth  = decoratedVisualProperties->mBorderlineWidth.Get(updateBufferIndex);
-      const float borderlineOffset = decoratedVisualProperties->mBorderlineOffset.Get(updateBufferIndex);
-      const float blurRadius       = decoratedVisualProperties->mBlurRadius.Get(updateBufferIndex);
+      const float borderlineWidth  = mExtendedProperties->mBorderlineWidth.Get(updateBufferIndex);
+      const float borderlineOffset = mExtendedProperties->mBorderlineOffset.Get(updateBufferIndex);
+      const float blurRadius       = mExtendedProperties->mBlurRadius.Get(updateBufferIndex);
 
       // Extra padding information for anti-alias
       const float extraPadding = 2.0f;
@@ -184,8 +181,7 @@ bool AnimatableVisualProperties::PrepareProperties()
 
   if(mExtendedProperties)
   {
-    auto* decoratedVisualProperties = static_cast<VisualRenderer::AnimatableDecoratedVisualProperties*>(mExtendedProperties);
-    rendererUpdated |= (decoratedVisualProperties->PrepareProperties());
+    rendererUpdated |= mExtendedProperties->PrepareProperties();
   }
 
   return rendererUpdated;
index 6ca2d64..7a96a7e 100644 (file)
 
 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
@@ -60,11 +53,6 @@ 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
@@ -78,70 +66,60 @@ public:
    * @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
    */
@@ -152,6 +130,11 @@ 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
@@ -165,34 +148,45 @@ public:
    * @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