Open GetPropertyObject() API of Visual::Base as devel-api 98/319798/5
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 1 Nov 2024 08:50:16 +0000 (17:50 +0900)
committerEunki Hong <eunkiki.hong@samsung.com>
Wed, 13 Nov 2024 01:25:50 +0000 (01:25 +0000)
Let we open Visual::Base::GetPropertyObject API, so let we
allow to call that API out of dali-toolkit without
DevelControl::GetVisualProperty()

Change-Id: I6af6e2ea4b2b05442cadc25743f9fe99408e8197
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp
dali-toolkit/devel-api/visual-factory/visual-base.cpp
dali-toolkit/devel-api/visual-factory/visual-base.h
dali-toolkit/internal/controls/control/control-visual-data.cpp

index e8e7d8d7b03341d5e8e0b0c0c7c01d50ccaa4b5d..652e007653ca3d2428a1519c2283f833539961f1 100644 (file)
@@ -5082,6 +5082,109 @@ int UtcDaliVisualGetType(void)
   END_TEST;
 }
 
+int UtcDaliVisualGetPropertyObject01(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline("UtcDaliVisualGetPropertyObject01 GetProperty by index");
+
+  VisualFactory factory = VisualFactory::Get();
+
+  Property::Map properties;
+  properties[Visual::Property::TYPE] = Visual::IMAGE;
+  properties.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
+  Visual::Base visual = factory.CreateVisual(properties);
+
+  DALI_TEST_CHECK(visual.GetType() == Visual::IMAGE);
+
+  auto propertyTest = [](Visual::Base visual, Property::Key key, bool expect) {
+    {
+      std::ostringstream oss;
+      oss << "Test for key[" << key << "]";
+      tet_printf("%s\n", oss.str().c_str());
+    }
+
+    Dali::Property property = visual.GetPropertyObject(std::move(key));
+    tet_printf("Result object[%p] index of property[%d]\n", property.object.GetObjectPtr(), property.propertyIndex);
+
+    if(expect)
+    {
+      DALI_TEST_CHECK(property.object && property.propertyIndex != Property::INVALID_INDEX);
+    }
+    else
+    {
+      DALI_TEST_CHECK(!property.object && property.propertyIndex == Property::INVALID_INDEX);
+    }
+  };
+
+  // Test to get valid objects
+  propertyTest(visual, Visual::Property::MIX_COLOR, true);
+  propertyTest(visual, Visual::Property::OPACITY, true);
+  propertyTest(visual, Visual::Transform::Property::SIZE, true);
+  propertyTest(visual, DevelVisual::Property::CORNER_RADIUS, true);
+  propertyTest(visual, DevelVisual::Property::BORDERLINE_WIDTH, true);
+  propertyTest(visual, ImageVisual::Property::PIXEL_AREA, true);
+
+  // Test to get invalid objects
+  propertyTest(visual, ImageVisual::Property::URL, false);
+  propertyTest(visual, DevelImageVisual::Property::FAST_TRACK_UPLOADING, false);
+  propertyTest(visual, Visual::Property::TYPE, false);
+  propertyTest(visual, Visual::Property::TRANSFORM, false);
+  propertyTest(visual, Actor::Property::POSITION, false);
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyObject02(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline("UtcDaliVisualGetPropertyObject02 GetProperty by string");
+
+  VisualFactory factory = VisualFactory::Get();
+
+  Property::Map properties;
+  properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
+  properties.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
+  Visual::Base visual = factory.CreateVisual(properties);
+
+  DALI_TEST_CHECK(visual.GetType() == Visual::IMAGE);
+
+  auto propertyTest = [](Visual::Base visual, Property::Key key, bool expect) {
+    {
+      std::ostringstream oss;
+      oss << "Test for key[" << key << "]";
+      tet_printf("%s\n", oss.str().c_str());
+    }
+
+    Dali::Property property = visual.GetPropertyObject(std::move(key));
+    tet_printf("Result object[%p] index of property[%d]\n", property.object.GetObjectPtr(), property.propertyIndex);
+
+    if(expect)
+    {
+      DALI_TEST_CHECK(property.object && property.propertyIndex != Property::INVALID_INDEX);
+    }
+    else
+    {
+      DALI_TEST_CHECK(!property.object && property.propertyIndex == Property::INVALID_INDEX);
+    }
+  };
+
+  // Test to get valid objects
+  propertyTest(visual, "mixColor", true);
+  propertyTest(visual, "opacity", true);
+  propertyTest(visual, "size", true);
+  propertyTest(visual, "cornerRadius", true);
+  propertyTest(visual, "borderlineOffset", true);
+  propertyTest(visual, "pixelArea", true);
+
+  // Test to get invalid objects
+  propertyTest(visual, "url", false);
+  propertyTest(visual, "type", false);
+  propertyTest(visual, "transform", false);
+  propertyTest(visual, "", false);
+
+  END_TEST;
+}
+
 int UtcDaliVisualGetVisualProperty01(void)
 {
   ToolkitTestApplication application;
index 9a21f90fa69870b1827c86a8c073ad2bc058f32d..46d412c94b35cc9a7598bf385363d285faea9a06 100644 (file)
@@ -109,6 +109,11 @@ Visual::Type Visual::Base::GetType() const
   return GetImplementation(*this).GetType();
 }
 
+Dali::Property Visual::Base::GetPropertyObject(Dali::Property::Key key)
+{
+  return GetImplementation(*this).GetPropertyObject(std::move(key));
+}
+
 } // namespace Toolkit
 
 } // namespace Dali
index 0025e65c36093a2d268991dc300b128c69dcb361..35f7fa81fcd73c6d3124a2ce2e1d6718305a3a97 100644 (file)
@@ -217,6 +217,14 @@ public:
    */
   Visual::Type GetType() const;
 
+  /**
+   * @brief Retrieve the property object associated with the property key.
+   *
+   * @param[in] key The Property key of the visual.
+   * @return The Property object
+   */
+  Dali::Property GetPropertyObject(Dali::Property::Key key);
+
 public: // Not intended for application developers
   explicit DALI_INTERNAL Base(Internal::Visual::Base* impl);
 };
index 5eaa4c425635ed3d2ec754eda0e87115849972e0..98c7740e242bd5411c0bbc55625ab000df6157f9 100644 (file)
@@ -831,8 +831,7 @@ Dali::Property Control::Impl::VisualData::GetVisualProperty(Dali::Property::Inde
   Toolkit::Visual::Base visual = GetVisualByIndex(mVisuals, index);
   if(visual)
   {
-    Internal::Visual::Base& visualImpl = Toolkit::GetImplementation(visual);
-    return visualImpl.GetPropertyObject(std::move(visualPropertyKey));
+    return visual.GetPropertyObject(std::move(visualPropertyKey));
   }
 
   Handle handle;