Make CornerSquareness property for Control 22/322022/3
authorEunki, Hong <eunkiki.hong@samsung.com>
Wed, 2 Apr 2025 07:29:37 +0000 (16:29 +0900)
committerEunki Hong <eunkiki.hong@samsung.com>
Thu, 3 Apr 2025 04:11:00 +0000 (04:11 +0000)
Let we make CornerSquareness property, and let this value
propagate to render effect and offscreen.

Change-Id: Ib7e0fa3e4c7efcfb70f6f51adff94b77d28117f0
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-Control.cpp
automated-tests/src/dali-toolkit/utc-Dali-RenderEffect.cpp
dali-toolkit/devel-api/controls/control-devel.h
dali-toolkit/internal/controls/control/control-data-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.h
dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp

index dc710c3c996da85a2dcc51e815294d117ca2faee..f8d749eebfb1a5547f1d45cc357cac67e2742e0a 100644 (file)
@@ -1638,9 +1638,11 @@ int UtcDaliControlCornerRadius(void)
   control.SetRenderEffect(effect);
   control.SetProperty(DevelControl::Property::OFFSCREEN_RENDERING, DevelControl::OffScreenRenderingType::REFRESH_ALWAYS);
 
-  Vector4 vector = Vector4(0.5f, 0.5f, 0.5f, 0.5f);
-  control.SetProperty(DevelControl::Property::CORNER_RADIUS, vector); // default: relative policy
+  Vector4 radius    = Vector4(0.5f, 0.5f, 0.5f, 0.5f);
+  Vector4 squreness = Vector4(0.3f, 0.3f, 0.3f, 0.3f);
+  control.SetProperty(DevelControl::Property::CORNER_RADIUS, radius); // default: relative policy
   control.SetProperty(DevelControl::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::Type::RELATIVE);
+  control.SetProperty(DevelControl::Property::CORNER_SQUARENESS, squreness);
   tet_infoline("Sync with render effects.");
 
   application.SendNotification();
@@ -1648,7 +1650,9 @@ int UtcDaliControlCornerRadius(void)
 
   Vector4 retrievedVector;
   control.GetProperty(DevelControl::Property::CORNER_RADIUS).Get(retrievedVector);
-  DALI_TEST_CHECK(retrievedVector == vector);
+  DALI_TEST_CHECK(retrievedVector == radius);
+  control.GetProperty(DevelControl::Property::CORNER_SQUARENESS).Get(retrievedVector);
+  DALI_TEST_CHECK(retrievedVector == squreness);
 
   control.ClearRenderEffect();
   control.ClearBackground();
index 486cb95405e49d330f8b4553e5e626e429090a3b..4346c2f03f45f7656b5cb35d9d8cc8d49b4b9b2c 100644 (file)
@@ -259,7 +259,7 @@ int UtcDaliRenderEffectSynchronizeControlCornerRadius(void)
   control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
   control.SetProperty(Toolkit::DevelControl::Property::CORNER_RADIUS, Vector4(30.0f, 30.0f, 30.0f, 30.0f));
   control.SetProperty(Toolkit::DevelControl::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::Type::ABSOLUTE);
-  // TODO set squarness
+  control.SetProperty(Toolkit::DevelControl::Property::CORNER_SQUARENESS, Vector4(0.7f, 0.7f, 0.7f, 0.7f));
   scene.Add(control);
 
   control.SetProperty(Toolkit::Control::Property::BACKGROUND, blackDimmerMap);
@@ -271,8 +271,8 @@ int UtcDaliRenderEffectSynchronizeControlCornerRadius(void)
   Vector4  radius   = Vector4::ZERO;
   renderer.GetProperty(renderer.GetPropertyIndex(std::string("uCornerRadius"))).Get(radius);
 
-  //Vector4 squreness = Vector4::ZERO;
-  //renderer.GetProperty(renderer.GetPropertyIndex(std::string("uCornerSquareness"))).Get(squreness);
+  Vector4 squreness = Vector4::ZERO;
+  renderer.GetProperty(renderer.GetPropertyIndex(std::string("uCornerSquareness"))).Get(squreness);
 
   Toolkit::Visual::Transform::Policy::Type policy;
   renderer.GetProperty(renderer.GetPropertyIndex(std::string("uCornerRadiusPolicy"))).Get(policy);
@@ -283,10 +283,10 @@ int UtcDaliRenderEffectSynchronizeControlCornerRadius(void)
   DALI_TEST_CHECK(radius.z == 30.0f);
   DALI_TEST_CHECK(radius.w == 30.0f);
 
-  //DALI_TEST_CHECK(squreness.x == 0.3f);
-  //DALI_TEST_CHECK(squreness.y == 0.3f);
-  //DALI_TEST_CHECK(squreness.z == 0.3f);
-  //DALI_TEST_CHECK(squreness.w == 0.3f);
+  DALI_TEST_CHECK(squreness.x == 0.7f);
+  DALI_TEST_CHECK(squreness.y == 0.7f);
+  DALI_TEST_CHECK(squreness.z == 0.7f);
+  DALI_TEST_CHECK(squreness.w == 0.7f);
 
   END_TEST;
 }
index 6c80d7f387005b5626f1688f602107e864b745d0..6cbde7345750460427033268a1ce2bb270857438 100644 (file)
@@ -267,7 +267,7 @@ enum
 
   /**
    * @brief The radius for the rounded corners of the control.
-   * @details Name "cornerRadius", type Property::VECTOR4, animatable
+   * @details Name "cornerRadius", type Property::VECTOR4
    * @note By default, it is Vector::ZERO.
    * @note Applies to specific visuals inside the control.
    * @see Dali::Toolkit::DevelVisual::Property::Type::CORNER_RADIUS
@@ -280,7 +280,16 @@ enum
    * @see Policy::Type
    * @see Dali::Toolkit::DevelVisual::Property::Type::CORNER_RADIUS_POLICY
    */
-  CORNER_RADIUS_POLICY
+  CORNER_RADIUS_POLICY,
+
+  /**
+   * @brief The squareness for the rounded corners of the control.
+   * @details Name "cornerSquareness", type Property::VECTOR4
+   * @note By default, it is Vector::ZERO.
+   * @note Applies to specific visuals inside the control.
+   * @see Dali::Toolkit::DevelVisual::Property::Type::CORNER_SQUARENESS
+   */
+  CORNER_SQUARENESS,
 };
 
 } // namespace Property
index 14b4451af6d04ba1d9f89cfaf93ae00bca05acf3..989997a47b84658ccb7fbbd1787a28b066911f3d 100644 (file)
@@ -375,8 +375,9 @@ const PropertyRegistration Control::Impl::PROPERTY_28(typeRegistration, "accessi
 const PropertyRegistration Control::Impl::PROPERTY_29(typeRegistration, "accessibilityStates",            Toolkit::DevelControl::Property::ACCESSIBILITY_STATES,             Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
 const PropertyRegistration Control::Impl::PROPERTY_30(typeRegistration, "accessibilityIsModal",           Toolkit::DevelControl::Property::ACCESSIBILITY_IS_MODAL,           Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
 const PropertyRegistration Control::Impl::PROPERTY_31(typeRegistration, "offScreenRendering",             Toolkit::DevelControl::Property::OFFSCREEN_RENDERING,              Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
-const PropertyRegistration Control::Impl::PROPERTY_32(typeRegistration, "cornerRadius",             Toolkit::DevelControl::Property::CORNER_RADIUS,              Property::VECTOR4, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
-const PropertyRegistration Control::Impl::PROPERTY_33(typeRegistration, "cornerRadiusPolicy", Toolkit::DevelControl::Property::CORNER_RADIUS_POLICY, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_32(typeRegistration, "cornerRadius",                   Toolkit::DevelControl::Property::CORNER_RADIUS,                    Property::VECTOR4, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_33(typeRegistration, "cornerRadiusPolicy",             Toolkit::DevelControl::Property::CORNER_RADIUS_POLICY,             Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
+const PropertyRegistration Control::Impl::PROPERTY_34(typeRegistration, "cornerSquareness",               Toolkit::DevelControl::Property::CORNER_SQUARENESS,                Property::VECTOR4, &Control::Impl::SetProperty, &Control::Impl::GetProperty);
 
 // clang-format on
 
@@ -396,6 +397,7 @@ Control::Impl::Impl(Control& controlImpl)
   mBackgroundColor(Color::TRANSPARENT),
   mCornerRadius(Vector4::ZERO),
   mCornerRadiusPolicy(Toolkit::Visual::Transform::Policy::Type::ABSOLUTE),
+  mCornerSquareness(Vector4::ZERO),
   mRenderEffect(nullptr),
   mStartingPinchScale(nullptr),
   mMargin(0, 0, 0, 0),
@@ -609,6 +611,7 @@ void Control::Impl::EnableCornerPropertiesOverridden(Toolkit::Visual::Base& visu
     Property::Map map;
     map[Toolkit::DevelVisual::Property::CORNER_RADIUS]        = mCornerRadius;
     map[Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY] = mCornerRadiusPolicy;
+    map[Toolkit::DevelVisual::Property::CORNER_SQUARENESS]    = mCornerSquareness;
 
     mVisualData->EnableCornerPropertiesOverridden(visual, enable, map);
   }
@@ -1090,10 +1093,10 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
 
       case Toolkit::DevelControl::Property::CORNER_RADIUS:
       {
-        Vector4 vector;
-        if(value.Get(vector))
+        Vector4 radius;
+        if(value.Get(radius))
         {
-          controlImpl.mImpl->SetCornerRadius(vector, controlImpl.mImpl->mCornerRadiusPolicy);
+          controlImpl.mImpl->SetCornerRadius(radius, controlImpl.mImpl->mCornerRadiusPolicy, controlImpl.mImpl->mCornerSquareness);
         }
         break;
       }
@@ -1104,7 +1107,18 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const
         if(value.Get(policy))
         {
           controlImpl.mImpl->SetCornerRadius(controlImpl.mImpl->mCornerRadius,
-                                             static_cast<Toolkit::Visual::Transform::Policy::Type>(policy));
+                                             static_cast<Toolkit::Visual::Transform::Policy::Type>(policy),
+                                             controlImpl.mImpl->mCornerSquareness);
+        }
+        break;
+      }
+
+      case Toolkit::DevelControl::Property::CORNER_SQUARENESS:
+      {
+        Vector4 squareness;
+        if(value.Get(squareness))
+        {
+          controlImpl.mImpl->SetCornerRadius(controlImpl.mImpl->mCornerRadius, controlImpl.mImpl->mCornerRadiusPolicy, squareness);
         }
         break;
       }
@@ -1332,6 +1346,12 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i
         value = static_cast<int32_t>(controlImpl.mImpl->mCornerRadiusPolicy);
         break;
       }
+
+      case Toolkit::DevelControl::Property::CORNER_SQUARENESS:
+      {
+        value = controlImpl.mImpl->mCornerSquareness;
+        break;
+      }
     }
   }
 
@@ -1730,19 +1750,21 @@ void Control::Impl::SetOffScreenRendering(int32_t offScreenRenderingType)
   mOffScreenRenderingType = newType;
 }
 
-void Control::Impl::SetCornerRadius(Vector4 vector, Toolkit::Visual::Transform::Policy::Type policy)
+void Control::Impl::SetCornerRadius(Vector4 radius, Toolkit::Visual::Transform::Policy::Type policy, Vector4 squareness)
 {
-  if(vector == mCornerRadius && policy == mCornerRadiusPolicy)
+  if(radius == mCornerRadius && policy == mCornerRadiusPolicy && squareness == mCornerSquareness)
   {
     return;
   }
 
-  mCornerRadius       = vector;
+  mCornerRadius       = radius;
   mCornerRadiusPolicy = policy;
+  mCornerSquareness   = squareness;
 
   Property::Map map;
-  map[Toolkit::DevelVisual::Property::CORNER_RADIUS]        = vector;
+  map[Toolkit::DevelVisual::Property::CORNER_RADIUS]        = radius;
   map[Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY] = policy;
+  map[Toolkit::DevelVisual::Property::CORNER_SQUARENESS]    = squareness;
 
   RegisteredVisualContainer& visuals = mVisualData->mVisuals;
   for(auto it = visuals.begin(); it != visuals.end(); it++)
index e2e9c10f3388e60f48b909b19d55e8525d8be2d1..4e7ccfb3df9bbc3976820dd2e59bf95417488d6d 100644 (file)
@@ -491,10 +491,11 @@ private:
 
   /**
    * Set corner radius to this control.
-   * @param[in] vector Corner radius property value
+   * @param[in] radius Corner radius property value
    * @param[in] policy Corner radius policy. Default value is ABSOLUTE.
+   * @param[in] squareness Corner squareness property value
    */
-  void SetCornerRadius(Vector4 vector, Toolkit::Visual::Transform::Policy::Type policy);
+  void SetCornerRadius(Vector4 radius, Toolkit::Visual::Transform::Policy::Type policy, Vector4 squareness);
 
 public:
   Control&            mControlImpl;
@@ -515,6 +516,7 @@ public:
   Vector4                                   mBackgroundColor;    ///< The color of the background visual
   Vector4                                   mCornerRadius;       ///< The corner radius of this control
   Toolkit::Visual::Transform::Policy::Type  mCornerRadiusPolicy; ///< The corner radius policy of this control
+  Vector4                                   mCornerSquareness;   ///< The corner squareness of this control
   RenderEffectImplPtr                       mRenderEffect;       ///< The render effect on this control
   Vector3*                                  mStartingPinchScale; ///< The scale when a pinch gesture starts, TODO: consider removing this
   Extents                                   mMargin;             ///< The margin values
@@ -583,6 +585,7 @@ public:
   static const PropertyRegistration PROPERTY_31;
   static const PropertyRegistration PROPERTY_32;
   static const PropertyRegistration PROPERTY_33;
+  static const PropertyRegistration PROPERTY_34;
 };
 
 } // namespace Internal
index 3c77f68f5695c22af9f29aaad7e37f5074b48e05..7e569fccf94dbe1debb17665018485d36d8e1d25 100644 (file)
@@ -201,10 +201,12 @@ void RenderEffectImpl::Activate()
     if(cornerRadius != Vector4::ZERO)
     {
       int32_t cornerRadiusPolicy = ownerControl.GetProperty<int32_t>(Toolkit::DevelControl::Property::CORNER_RADIUS_POLICY);
+      Vector4 cornerSquareness   = ownerControl.GetProperty<Vector4>(Toolkit::DevelControl::Property::CORNER_SQUARENESS);
 
       Property::Map map;
       map[Toolkit::DevelVisual::Property::CORNER_RADIUS]        = cornerRadius;
       map[Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY] = static_cast<Toolkit::Visual::Transform::Policy::Type>(cornerRadiusPolicy);
+      map[Toolkit::DevelVisual::Property::CORNER_SQUARENESS]    = cornerSquareness;
 
       SetCornerConstants(map);
     }