From 55e5ea8082729deca6f0f43f01aeae8dd51a4bdb Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Wed, 2 Dec 2020 15:02:06 +0900 Subject: [PATCH] Add AnimatedVectorImageVisual property A property not to render again when the visual is scaled down. Change-Id: I53d1e78d1376a24318055fa787ea8ee16e4fa0f2 --- .../utc-Dali-AnimatedVectorImageVisual.cpp | 11 +++++++- .../visuals/image-visual-properties-devel.h | 9 +++++- .../animated-vector-image-visual.cpp | 33 +++++++++++++++++----- .../animated-vector-image-visual.h | 1 + .../internal/visuals/visual-string-constants.cpp | 1 + .../internal/visuals/visual-string-constants.h | 1 + 6 files changed, 47 insertions(+), 9 deletions(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp index dd7827f..534aeb6 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp @@ -180,7 +180,8 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void) .Add( "loopCount", 3 ) .Add( "playRange", playRange ) .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME ) - .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE ); + .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE ) + .Add( "redrawInScalingDown", false ); Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap ); DALI_TEST_CHECK( visual ); @@ -232,6 +233,10 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE ); + value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get< bool >() == false ); + actor.Unparent( ); DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); @@ -308,6 +313,10 @@ int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void) value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP ); DALI_TEST_CHECK( value ); + value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value + // request AnimatedVectorImageVisual with an URL Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() ); diff --git a/dali-toolkit/devel-api/visuals/image-visual-properties-devel.h b/dali-toolkit/devel-api/visuals/image-visual-properties-devel.h index 63efcb3..a10a3f8 100644 --- a/dali-toolkit/devel-api/visuals/image-visual-properties-devel.h +++ b/dali-toolkit/devel-api/visuals/image-visual-properties-devel.h @@ -138,7 +138,14 @@ enum Type * And the array contains 2 integer values which are the frame numbers, the start frame number and the end frame number of the layer. * @note This property is read-only. */ - CONTENT_INFO = ORIENTATION_CORRECTION + 10 + CONTENT_INFO = ORIENTATION_CORRECTION + 10, + + /** + * @brief Whether to redraw the image when the visual is scaled down. + * @details Name "redrawInScalingDown", type Property::BOOLEAN. + * @note It is used in the AnimatedVectorImageVisual. The default is true. + */ + REDRAW_IN_SCALING_DOWN }; } //namespace Property diff --git a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp index 93c0966..a2d102a 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp @@ -95,7 +95,8 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual( VisualFactoryCache& factor mPlayState( DevelImageVisual::PlayState::STOPPED ), mEventCallback( nullptr ), mRendererAdded( false ), - mCoreShutdown(false) + mCoreShutdown(false), + mRedrawInScalingDown(true) { // the rasterized image is with pre-multiplied alpha format mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA; @@ -172,6 +173,7 @@ void AnimatedVectorImageVisual::DoCreatePropertyMap( Property::Map& map ) const map.Insert( Toolkit::DevelImageVisual::Property::STOP_BEHAVIOR, mAnimationData.stopBehavior ); map.Insert( Toolkit::DevelImageVisual::Property::LOOPING_MODE, mAnimationData.loopingMode ); + map.Insert( Toolkit::DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, mRedrawInScalingDown ); Property::Map layerInfo; mVectorAnimationTask->GetLayerInfo( layerInfo ); @@ -211,6 +213,10 @@ void AnimatedVectorImageVisual::DoSetProperties( const Property::Map& propertyMa { DoSetProperty( Toolkit::DevelImageVisual::Property::LOOPING_MODE, keyValue.second ); } + else if( keyValue.first == REDRAW_IN_SCALING_DOWN_NAME ) + { + DoSetProperty( Toolkit::DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, keyValue.second ); + } } } @@ -261,6 +267,15 @@ void AnimatedVectorImageVisual::DoSetProperty( Property::Index index, const Prop } break; } + case Toolkit::DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN: + { + bool redraw; + if( value.Get( redraw ) ) + { + mRedrawInScalingDown = redraw; + } + break; + } } } @@ -531,15 +546,19 @@ void AnimatedVectorImageVisual::OnScaleNotification( PropertyNotification& sourc if( actor ) { Vector3 scale = actor.GetProperty< Vector3 >( Actor::Property::WORLD_SCALE ); - mVisualScale.width = scale.width; - mVisualScale.height = scale.height; - DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnScaleNotification: scale = %f, %f [%p]\n", mVisualScale.width, mVisualScale.height, this ); + if(mRedrawInScalingDown || scale.width >= 1.0f || scale.height >= 1.0f) + { + mVisualScale.width = scale.width; + mVisualScale.height = scale.height; - SetVectorImageSize(); - SendAnimationData(); + DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnScaleNotification: scale = %f, %f [%p]\n", mVisualScale.width, mVisualScale.height, this ); - Stage::GetCurrent().KeepRendering( 0.0f ); // Trigger event processing + SetVectorImageSize(); + SendAnimationData(); + + Stage::GetCurrent().KeepRendering( 0.0f ); // Trigger event processing + } } } diff --git a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h index 6196e39..5bf0f4e 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h +++ b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h @@ -229,6 +229,7 @@ private: CallbackBase* mEventCallback; // Not owned bool mRendererAdded; bool mCoreShutdown; + bool mRedrawInScalingDown; }; } // namespace Internal diff --git a/dali-toolkit/internal/visuals/visual-string-constants.cpp b/dali-toolkit/internal/visuals/visual-string-constants.cpp index fa1b1fd..b9b78d0 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.cpp +++ b/dali-toolkit/internal/visuals/visual-string-constants.cpp @@ -120,6 +120,7 @@ const char * const IMAGE_SAMPLING_MODE( "samplingMode" ); const char * const IMAGE_DESIRED_WIDTH( "desiredWidth" ); const char * const IMAGE_DESIRED_HEIGHT( "desiredHeight" ); const char * const ALPHA_MASK_URL("alphaMaskUrl"); +const char * const REDRAW_IN_SCALING_DOWN_NAME("redrawInScalingDown"); // Text visual const char * const TEXT_PROPERTY( "text" ); diff --git a/dali-toolkit/internal/visuals/visual-string-constants.h b/dali-toolkit/internal/visuals/visual-string-constants.h index f972f37..c30033a 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.h +++ b/dali-toolkit/internal/visuals/visual-string-constants.h @@ -104,6 +104,7 @@ extern const char * const IMAGE_SAMPLING_MODE; extern const char * const IMAGE_DESIRED_WIDTH; extern const char * const IMAGE_DESIRED_HEIGHT; extern const char * const ALPHA_MASK_URL; +extern const char * const REDRAW_IN_SCALING_DOWN_NAME; // Text visual extern const char * const TEXT_PROPERTY; -- 2.7.4