From: jmm Date: Thu, 10 Apr 2025 05:01:52 +0000 (+0900) Subject: Enable specific visual's corner properties to be overridden X-Git-Tag: dali_2.4.15~3^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e7a7183e87c71732c4bcdee0d97d87fec979f1a0;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Enable specific visual's corner properties to be overridden Change-Id: Id43748623b3681f3a27303b8ff846168b4e710e4 --- diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Control-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Control-internal.cpp index af84c8f373..9a53b40e93 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Control-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Control-internal.cpp @@ -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. @@ -19,54 +19,52 @@ #include +#include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h> #include #include -#include -#include -#include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h> #include #include #include - +#include +#include 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(dummyControl.GetImplementation()); + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(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(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(DevelControl::Property::CORNER_RADIUS), cornerRadius, TEST_LOCATION); + DALI_TEST_EQUALS(dummy.GetProperty(DevelControl::Property::CORNER_RADIUS_POLICY), cornerRadiusPolicy, TEST_LOCATION); + DALI_TEST_EQUALS(dummy.GetProperty(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; } diff --git a/dali-toolkit/devel-api/controls/control-devel.cpp b/dali-toolkit/devel-api/controls/control-devel.cpp index f5516bb3af..579e6e1236 100644 --- a/dali-toolkit/devel-api/controls/control-devel.cpp +++ b/dali-toolkit/devel-api/controls/control-devel.cpp @@ -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); diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index 264670850c..5e866f63ee 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -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. *