Enable specific visual's corner properties to be overridden 03/322503/6
authorjmm <j0064423.lee@samsung.com>
Thu, 10 Apr 2025 05:01:52 +0000 (14:01 +0900)
committerjmm <j0064423.lee@samsung.com>
Tue, 15 Apr 2025 01:55:57 +0000 (10:55 +0900)
Change-Id: Id43748623b3681f3a27303b8ff846168b4e710e4

automated-tests/src/dali-toolkit-internal/utc-Dali-Control-internal.cpp
dali-toolkit/devel-api/controls/control-devel.cpp
dali-toolkit/devel-api/controls/control-devel.h

index af84c8f3736d66b227a6088d1b9fbba328d39f1b..9a53b40e9372c6e541ea8e80deefa64d58049aa8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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 <stdlib.h>
 
+#include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
 #include <dali-toolkit-test-suite-utils.h>
 #include <dali-toolkit/dali-toolkit.h>
-#include <toolkit-text-utils.h>
-#include <dummy-visual.h>
-#include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
 #include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
 #include <dali-toolkit/internal/controls/control/control-debug.h>
-
+#include <dummy-visual.h>
+#include <toolkit-text-utils.h>
 
 using namespace Dali;
 using namespace Toolkit;
 
-
 int UtcDaliControlActionOnVisual(void)
 {
   ToolkitTestApplication application;
 
-  tet_infoline( "Register an ImageVisual and perform image reload Action on it. Tests Actions are completed." );
-  Vector2 controlSize( 20.f, 30.f );
+  tet_infoline("Register an ImageVisual and perform image reload Action on it. Tests Actions are completed.");
+  Vector2 controlSize(20.f, 30.f);
 
   //Created DummyVisual
-  Property::Map settings;
-  Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
+  Property::Map                     settings;
+  Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
 
-  DummyControl dummyControl = DummyControl::New( true );
-  Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
+  DummyControl        dummyControl = DummyControl::New(true);
+  Impl::DummyControl& dummyImpl    = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
 
-  tet_infoline( "Register test visual and stage control" );
+  tet_infoline("Register test visual and stage control");
 
-  Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( dummyVisualPtr.Get() );
-  dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
-  dummyControl.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) );
-  application.GetScene().Add( dummyControl );
+  Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(dummyVisualPtr.Get());
+  dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
+  dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
+  application.GetScene().Add(dummyControl);
 
   application.SendNotification();
   application.Render();
 
-  tet_infoline( "Check action counter is 0 before DoAction" );
-  DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
+  tet_infoline("Check action counter is 0 before DoAction");
+  DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
 
-  tet_infoline( "Perform TEST_ACTION action on registered test visual. Should increase the action counter" );
+  tet_infoline("Perform TEST_ACTION action on registered test visual. Should increase the action counter");
 
   Property::Map attributes;
-  DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
+  DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
 
   application.SendNotification();
-  DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 1, TEST_LOCATION );
+  DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 1, TEST_LOCATION);
 
   END_TEST;
 }
@@ -74,21 +72,73 @@ int UtcDaliControlActionOnVisual(void)
 int UtcDaliControlDebugHierarchy(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "Create a control hierarchy, and test that the debug produces output" );
+  tet_infoline("Create a control hierarchy, and test that the debug produces output");
 
   auto tableView = Toolkit::TableView::New(1, 2);
-  tableView.AddChild( ImageView::New( TEST_RESOURCE_DIR "/gallery-small-1.jpg" ), TableView::CellPosition( 1, 1 ) );
-  tableView.AddChild( TextLabel::New("Stuff"), TableView::CellPosition( 1, 2 ) );
+  tableView.AddChild(ImageView::New(TEST_RESOURCE_DIR "/gallery-small-1.jpg"), TableView::CellPosition(1, 1));
+  tableView.AddChild(TextLabel::New("Stuff"), TableView::CellPosition(1, 2));
 
-  application.GetScene().Add( tableView );
+  application.GetScene().Add(tableView);
 
   Property::Value v(Matrix3::IDENTITY);
-  tableView.RegisterProperty( "SomeMatrix3", v);
+  tableView.RegisterProperty("SomeMatrix3", v);
 
   std::ostringstream oss;
-  Dali::Toolkit::Internal::DumpControlHierarchy( oss, application.GetScene().GetRootLayer() );
-  DALI_TEST_CHECK( oss.str().length() != 0 );
-  tet_printf("Control hierarchy: \n%s\n", oss.str().c_str() );
+  Dali::Toolkit::Internal::DumpControlHierarchy(oss, application.GetScene().GetRootLayer());
+  DALI_TEST_CHECK(oss.str().length() != 0);
+  tet_printf("Control hierarchy: \n%s\n", oss.str().c_str());
+
+  END_TEST;
+}
+
+int UtcDaliControlOverrideCornerProperties(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline("Override corner properties of control to target visual.");
+
+  DummyControl      dummy     = DummyControl::New(true);
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
+
+  dummy.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
+  dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+
+  Vector4 cornerRadius       = Vector4(0.5f, 0.5f, 0.5f, 0.5f);
+  int     cornerRadiusPolicy = (int)Visual::Transform::Policy::Type::RELATIVE;
+  Vector4 cornerSquareness   = Vector4(0.3f, 0.3f, 0.3f, 0.3f);
+
+  dummy.SetProperty(DevelControl::Property::CORNER_RADIUS, cornerRadius);
+  dummy.SetProperty(DevelControl::Property::CORNER_RADIUS_POLICY, cornerRadiusPolicy);
+  dummy.SetProperty(DevelControl::Property::CORNER_SQUARENESS, cornerSquareness);
+
+  DALI_TEST_EQUALS(dummy.GetProperty<Vector4>(DevelControl::Property::CORNER_RADIUS), cornerRadius, TEST_LOCATION);
+  DALI_TEST_EQUALS(dummy.GetProperty<int>(DevelControl::Property::CORNER_RADIUS_POLICY), cornerRadiusPolicy, TEST_LOCATION);
+  DALI_TEST_EQUALS(dummy.GetProperty<Vector4>(DevelControl::Property::CORNER_SQUARENESS), cornerSquareness, TEST_LOCATION);
+  tet_infoline("Control properties are all set");
+
+  Property::Map imagePropertyMap;
+  imagePropertyMap.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE);
+  imagePropertyMap.Insert(Toolkit::ImageVisual::Property::URL, TEST_RESOURCE_DIR "/gallery-small-1.jpg");
+  Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual(imagePropertyMap);
+
+  dummyImpl.RegisterVisual(Toolkit::DummyControl::Property::TEST_VISUAL, visual);
+  tet_infoline("Register image visual into derived dummy control");
+
+  DevelControl::EnableCornerPropertiesOverridden(dummy, visual, true);
+
+  Property::Map map;
+  visual.CreatePropertyMap(map);
+
+  Vector4 visualCornerRadius;
+  int     visualCornerRadiusPolicy;
+  Vector4 visualCornerSquareness;
+
+  map[DevelVisual::Property::CORNER_RADIUS].Get(visualCornerRadius);
+  map[DevelVisual::Property::CORNER_RADIUS_POLICY].Get(visualCornerRadiusPolicy);
+  map[DevelVisual::Property::CORNER_SQUARENESS].Get(visualCornerSquareness);
+
+  DALI_TEST_EQUALS(cornerRadius, visualCornerRadius, TEST_LOCATION);
+  DALI_TEST_EQUALS(cornerRadiusPolicy, visualCornerRadiusPolicy, TEST_LOCATION);
+  DALI_TEST_EQUALS(cornerSquareness, visualCornerSquareness, TEST_LOCATION);
 
   END_TEST;
 }
index f5516bb3aff1ce4b8e122f393318c93b6c5b07ed..579e6e1236523053aee6d6c684a85fca36604d25 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
@@ -121,6 +121,13 @@ void DoActionExtension(Control& control, Dali::Property::Index visualIndex, Dali
   controlDataImpl.DoActionExtension(visualIndex, actionId, attributes);
 }
 
+void EnableCornerPropertiesOverridden(Control& control, Visual::Base& visual, bool enable)
+{
+  Internal::Control&       controlInternal = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(controlInternal);
+  controlDataImpl.EnableCornerPropertiesOverridden(visual, enable);
+}
+
 void SetInputMethodContext(Internal::Control& control, InputMethodContext& inputMethodContext)
 {
   Internal::Control::Impl::Get(control).SetInputMethodContext(inputMethodContext);
index 264670850c839621fd5240b9afff25cd68bce594..5e866f63ee414f7ee78411b773c2b59fb2b4f5c1 100644 (file)
@@ -448,6 +448,16 @@ DALI_TOOLKIT_API void DoAction(Control& control, Dali::Property::Index visualInd
  */
 DALI_TOOLKIT_API void DoActionExtension(Control& control, Dali::Property::Index visualIndex, Dali::Property::Index actionId, Dali::Any attributes);
 
+/**
+ * @brief Takes corner properties of control and overrides them to registered visual.
+ * @note This function is to support derived control classes that cannot use Control::Impl::EnableCornerPropertiesOverridden directly.
+ *
+ * @param[in] control The control.
+ * @param[in] visual A registered visual.
+ * @param[in] enable Whether to override corner properties of control to visual.
+ */
+DALI_TOOLKIT_API void EnableCornerPropertiesOverridden(Control& control, Visual::Base& visual, bool enable);
+
 /**
  * @brief Set input method context.
  *