From 4d3140d11ea9df2cf933d32419f49fc5e63fa4a9 Mon Sep 17 00:00:00 2001 From: Jiyun Yang Date: Wed, 18 Dec 2019 14:52:32 +0900 Subject: [PATCH 1/1] Add property SHADOW to Control * The SHADOW will take a set of properties as a map type * Same as BACKGROUND, it can be any type of visuals Change-Id: I0b203929021f2c2cda01af4131a9f3f0baaa86ac Signed-off-by: Jiyun Yang --- .../src/dali-toolkit/utc-Dali-Control.cpp | 36 ++++++++++++++++++++++ dali-toolkit/devel-api/controls/control-devel.h | 8 ++++- .../controls/control/control-data-impl.cpp | 29 +++++++++++++++++ .../internal/controls/control/control-data-impl.h | 1 + dali-toolkit/public-api/controls/control-impl.cpp | 22 +++++++++++++ dali-toolkit/public-api/controls/control-impl.h | 11 +++++++ 6 files changed, 106 insertions(+), 1 deletion(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp index 2692fd1..bd15bb0 100755 --- a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp @@ -616,6 +616,42 @@ int UtcDaliControlBackgroundProperties(void) END_TEST; } +int UtcDaliControlShadowProperties(void) +{ + ToolkitTestApplication application; + Control control = Control::New(); + + DALI_TEST_CHECK( control.GetProperty( DevelControl::Property::SHADOW ).Get< Property::Map >().Empty() ); + + Property::Map imageMap; + imageMap[ Toolkit::Visual::Property::TYPE ] = Visual::IMAGE; + imageMap[ ImageVisual::Property::URL ] = "TestImage"; + control.SetProperty( DevelControl::Property::SHADOW, imageMap ); + Property::Value propValue = control.GetProperty( DevelControl::Property::SHADOW ); + Property::Map* resultMap = propValue.GetMap(); + DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) ); + DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get(),(int)Visual::IMAGE, TEST_LOCATION ); + DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) ); + DALI_TEST_EQUALS( resultMap->Find( ImageVisual::Property::URL )->Get(), "TestImage", TEST_LOCATION ); + + Property::Map colorMap; + colorMap[Visual::Property::TYPE] = Visual::COLOR; + colorMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN; + control.SetProperty( DevelControl::Property::SHADOW, colorMap ); + propValue = control.GetProperty( DevelControl::Property::SHADOW ); + resultMap = propValue.GetMap(); + DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) ); + DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get(), (int)Visual::COLOR, TEST_LOCATION ); + DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) ); + DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get(), Color::CYAN, TEST_LOCATION ); + + Property::Map emptyMap; + control.SetProperty( DevelControl::Property::SHADOW, emptyMap ); + DALI_TEST_CHECK( control.GetProperty( DevelControl::Property::SHADOW ).Get< Property::Map >().Empty() ); + + END_TEST; +} + int UtcDaliControlKeyProperties(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index eb2bcda..04e8205 100755 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -115,7 +115,13 @@ enum * @details Name "downFocusableActorId", type Property::INTEGER. * */ - DOWN_FOCUSABLE_ACTOR_ID = PADDING + 7 + DOWN_FOCUSABLE_ACTOR_ID = PADDING + 7, + + /** + * @brief The shadow of the control. + * @details Name "shadow", type Property::MAP. + */ + SHADOW = PADDING + 8 }; } // namespace Property diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index aa11d14..fb42012 100755 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -311,6 +311,7 @@ const PropertyRegistration Control::Impl::PROPERTY_11( typeRegistration, "leftFo const PropertyRegistration Control::Impl::PROPERTY_12( typeRegistration, "rightFocusableActorId", Toolkit::DevelControl::Property::RIGHT_FOCUSABLE_ACTOR_ID,Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty ); const PropertyRegistration Control::Impl::PROPERTY_13( typeRegistration, "upFocusableActorId", Toolkit::DevelControl::Property::UP_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty ); const PropertyRegistration Control::Impl::PROPERTY_14( typeRegistration, "downFocusableActorId", Toolkit::DevelControl::Property::DOWN_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty ); +const PropertyRegistration Control::Impl::PROPERTY_15( typeRegistration, "shadow", Toolkit::DevelControl::Property::SHADOW, Property::MAP, &Control::Impl::SetProperty, &Control::Impl::GetProperty ); Control::Impl::Impl( Control& controlImpl ) @@ -983,6 +984,21 @@ void Control::Impl::SetProperty( BaseObject* object, Property::Index index, cons break; } + case Toolkit::DevelControl::Property::SHADOW: + { + const Property::Map* map = value.GetMap(); + if( map && !map->Empty() ) + { + controlImpl.SetShadow( *map ); + } + else + { + // The shadow is an empty property map, so we should clear the shadow + controlImpl.ClearShadow(); + } + break; + } + } } } @@ -1082,6 +1098,19 @@ Property::Value Control::Impl::GetProperty( BaseObject* object, Property::Index value = map; break; } + + case Toolkit::DevelControl::Property::SHADOW: + { + Property::Map map; + Toolkit::Visual::Base visual = controlImpl.mImpl->GetVisual( Toolkit::DevelControl::Property::SHADOW ); + if( visual ) + { + visual.CreatePropertyMap( map ); + } + + value = map; + break; + } } } diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 2223215..370cf2e 100755 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -431,6 +431,7 @@ public: static const PropertyRegistration PROPERTY_12; static const PropertyRegistration PROPERTY_13; static const PropertyRegistration PROPERTY_14; + static const PropertyRegistration PROPERTY_15; }; diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index c469d1c..46f24d8 100755 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -207,6 +207,28 @@ void Control::ClearBackground() RelayoutRequest(); } +void Control::SetShadow( const Property::Map& map ) +{ + Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( map ); + visual.SetName("shadow"); + + if( visual ) + { + mImpl->RegisterVisual( Toolkit::DevelControl::Property::SHADOW, visual, DepthIndex::BACKGROUND_EFFECT ); + + RelayoutRequest(); + } +} + +void Control::ClearShadow() +{ + mImpl->UnregisterVisual( Toolkit::DevelControl::Property::SHADOW ); + + // Trigger a size negotiation request that may be needed when unregistering a visual. + RelayoutRequest(); +} + + void Control::EnableGestureDetection(Gesture::Type type) { if ( (type & Gesture::Pinch) && !mImpl->mPinchGestureDetector ) diff --git a/dali-toolkit/public-api/controls/control-impl.h b/dali-toolkit/public-api/controls/control-impl.h index f2e4402..1e3110f 100644 --- a/dali-toolkit/public-api/controls/control-impl.h +++ b/dali-toolkit/public-api/controls/control-impl.h @@ -110,6 +110,17 @@ public: */ void ClearBackground(); + /** + * @brief Sets the shadow with a property map. + * @param[in] map The shadow property map + */ + void SetShadow(const Property::Map& map); + + /** + * @brief Clear the shadow. + */ + void ClearShadow(); + // Gesture Detection /** -- 2.7.4