From: Heeyong Song Date: Wed, 30 Dec 2020 06:45:01 +0000 (+0900) Subject: Support animation of ArcVisual properties X-Git-Tag: dali_2.0.8~6^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=368452e0541100af5ab3cd49353b427d2f38607f Support animation of ArcVisual properties Change-Id: I9bafe1960c633655847138b91d96528c04b76e6e --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ArcVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ArcVisual.cpp index dbc326d..0bde103 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ArcVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ArcVisual.cpp @@ -198,6 +198,52 @@ int UtcDaliArcVisualGetPropertyMap01(void) END_TEST; } +int UtcDaliArcVisualGetPropertyMap02(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliArcVisualGetPropertyMap02" ); + + float thickness = 20.0f; + float startAngle = 0.0f, sweepAngle = 90.0f; + + Property::Map propertyMap; + propertyMap.Add(Visual::Property::TYPE, DevelVisual::ARC) + .Add(Visual::Property::MIX_COLOR, Color::RED) + .Add(DevelArcVisual::Property::THICKNESS, thickness ) + .Add(DevelArcVisual::Property::START_ANGLE, startAngle ) + .Add(DevelArcVisual::Property::SWEEP_ANGLE, sweepAngle ) + .Add(DevelArcVisual::Property::CAP, DevelArcVisual::Cap::ROUND ); + + Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap ); + DALI_TEST_CHECK( visual ); + + Property::Map resultMap; + visual.CreatePropertyMap( resultMap ); + + // check the property values from the returned map from a visual + Property::Value* value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get< Vector4 >(), Color::RED, TEST_LOCATION ); + + value = resultMap.Find( DevelArcVisual::Property::THICKNESS, Property::FLOAT ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get< float >(), thickness, TEST_LOCATION ); + + value = resultMap.Find( DevelArcVisual::Property::START_ANGLE, Property::FLOAT ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get< float >(), startAngle, TEST_LOCATION ); + + value = resultMap.Find( DevelArcVisual::Property::SWEEP_ANGLE, Property::FLOAT ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get< float >(), sweepAngle, TEST_LOCATION ); + + value = resultMap.Find( DevelArcVisual::Property::CAP, Property::INTEGER ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get< int >() == DevelArcVisual::Cap::ROUND ); + + END_TEST; +} + int UtcDaliArcVisualUpdateProperty(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h b/dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h index e03515b..8be5a94 100644 --- a/dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h +++ b/dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h @@ -39,21 +39,21 @@ enum { /** * @brief The thickness of the arc. - * @details Name "thickness", type Property::FLOAT. + * @details Name "thickness", type Property::FLOAT, animatable. * @note Mandatory. */ THICKNESS = VISUAL_PROPERTY_START_INDEX, /** * @brief The start angle where the arc begins in degrees. - * @details Name "startAngle", type Property::FLOAT. + * @details Name "startAngle", type Property::FLOAT, animatable. * @note Optional. If not specified, the default is 0. */ START_ANGLE, /** * @brief The sweep angle of the arc in degrees. - * @details Name "sweepAngle", type Property::FLOAT. + * @details Name "sweepAngle", type Property::FLOAT, animatable. * The arc starts at a specified start angle and sweeps clockwise, drawing slices of pie. * @note Optional. If not specified, the default is 360. */ diff --git a/dali-toolkit/internal/visuals/arc/arc-visual.cpp b/dali-toolkit/internal/visuals/arc/arc-visual.cpp index 71e2383..d694235 100644 --- a/dali-toolkit/internal/visuals/arc/arc-visual.cpp +++ b/dali-toolkit/internal/visuals/arc/arc-visual.cpp @@ -244,13 +244,46 @@ void ArcVisual::DoSetOnScene( Actor& actor ) ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } +void ArcVisual::DoSetOffScene(Actor& actor) +{ + if(mImpl->mRenderer) + { + // Update values from Renderer + mThickness = mImpl->mRenderer.GetProperty(mThicknessIndex); + mStartAngle = mImpl->mRenderer.GetProperty(mStartAngleIndex); + mSweepAngle = mImpl->mRenderer.GetProperty(mSweepAngleIndex); + } + + actor.RemoveRenderer(mImpl->mRenderer); + mImpl->mRenderer.Reset(); + + mThicknessIndex = Property::INVALID_INDEX; + mStartAngleIndex = Property::INVALID_INDEX; + mSweepAngleIndex = Property::INVALID_INDEX; +} + void ArcVisual::DoCreatePropertyMap( Property::Map& map ) const { + float thickness, startAngle, sweepAngle; + if(mImpl->mRenderer) + { + // Update values from Renderer + thickness = mImpl->mRenderer.GetProperty(mThicknessIndex); + startAngle = mImpl->mRenderer.GetProperty(mStartAngleIndex); + sweepAngle = mImpl->mRenderer.GetProperty(mSweepAngleIndex); + } + else + { + thickness = mThickness; + startAngle = mStartAngle; + sweepAngle = mSweepAngle; + } + map.Clear(); map.Insert( Toolkit::Visual::Property::TYPE, Toolkit::DevelVisual::ARC ); - map.Insert( Toolkit::DevelArcVisual::Property::THICKNESS, mThickness ); - map.Insert( Toolkit::DevelArcVisual::Property::START_ANGLE, mStartAngle ); - map.Insert( Toolkit::DevelArcVisual::Property::SWEEP_ANGLE, mSweepAngle ); + map.Insert(Toolkit::DevelArcVisual::Property::THICKNESS, thickness); + map.Insert(Toolkit::DevelArcVisual::Property::START_ANGLE, startAngle); + map.Insert(Toolkit::DevelArcVisual::Property::SWEEP_ANGLE, sweepAngle); map.Insert( Toolkit::DevelArcVisual::Property::CAP, mCapType ); } @@ -313,9 +346,9 @@ void ArcVisual::InitializeRenderer() mImpl->mRenderer = Renderer::New( geometry, shader ); - mThicknessIndex = mImpl->mRenderer.RegisterProperty( THICKNESS_NAME, mThickness ); - mStartAngleIndex = mImpl->mRenderer.RegisterProperty( START_ANGLE_NAME, mStartAngle ); - mSweepAngleIndex = mImpl->mRenderer.RegisterProperty( SWEEP_ANGLE_NAME, mSweepAngle ); + mThicknessIndex = mImpl->mRenderer.RegisterProperty(DevelArcVisual::Property::THICKNESS, THICKNESS_NAME, mThickness); + mStartAngleIndex = mImpl->mRenderer.RegisterProperty(DevelArcVisual::Property::START_ANGLE, START_ANGLE_NAME, mStartAngle); + mSweepAngleIndex = mImpl->mRenderer.RegisterProperty(DevelArcVisual::Property::SWEEP_ANGLE, SWEEP_ANGLE_NAME, mSweepAngle); mRadiusIndex = mImpl->mRenderer.RegisterProperty( RADIUS_NAME, mRadius ); diff --git a/dali-toolkit/internal/visuals/arc/arc-visual.h b/dali-toolkit/internal/visuals/arc/arc-visual.h index 90ac861..15f57d3 100644 --- a/dali-toolkit/internal/visuals/arc/arc-visual.h +++ b/dali-toolkit/internal/visuals/arc/arc-visual.h @@ -99,6 +99,11 @@ protected: void DoSetOnScene( Actor& actor ) override; /** + * @copydoc Visual::Base::DoSetOffScene + */ + void DoSetOffScene(Actor& actor) override; + + /** * @copydoc Visual::Base::OnSetTransform */ void OnSetTransform() override;