From: Eunki, Hong Date: Mon, 9 Dec 2024 08:01:29 +0000 (+0900) Subject: [Tizen] Remove already applied dynamicProperties X-Git-Tag: accepted/tizen/7.0/unified/20241211.061015^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c1d9f58dbdb72b44de73765cf11f54820a9147e3;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [Tizen] Remove already applied dynamicProperties Let we remove the list of dynamic properties info what we already send to task Change-Id: Ib3a8024288cbcfae52a47ec2fd22d456a9a5b155 Signed-off-by: Eunki, Hong --- diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp index eee47b8117..87ce93b1b4 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include #include #include @@ -26,6 +28,7 @@ #include #include #include +#include namespace Dali { @@ -130,9 +133,12 @@ public: mNeedDroppedFrames = false; } - if(mDynamicPropertyCallback) + if(!mDynamicPropertyCallbacks.empty()) { - CallbackBase::ExecuteReturn(*mDynamicPropertyCallback, 0, 0, frameNumber); + for(auto&& dynamicPropertyCallbackPair : mDynamicPropertyCallbacks) + { + CallbackBase::ExecuteReturn(*dynamicPropertyCallbackPair.second, dynamicPropertyCallbackPair.first, 0, frameNumber); + } } if(mNeedTrigger) @@ -198,7 +204,7 @@ public: void AddPropertyValueCallback(const std::string& keyPath, Dali::VectorAnimationRenderer::VectorProperty property, CallbackBase* callback, int32_t id) { - mDynamicPropertyCallback = std::unique_ptr(callback); + mDynamicPropertyCallbacks.emplace_back(id, std::unique_ptr(callback)); } Dali::VectorAnimationRenderer::UploadCompletedSignalType& UploadCompletedSignal() @@ -227,10 +233,10 @@ public: public: static uint32_t mCount; - std::string mUrl; - Dali::Renderer mRenderer; - Dali::Mutex mMutex; - std::unique_ptr mDynamicPropertyCallback{nullptr}; + std::string mUrl; + Dali::Renderer mRenderer; + Dali::Mutex mMutex; + std::vector>> mDynamicPropertyCallbacks; uint32_t mWidth; uint32_t mHeight; diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp index 59559e3f2a..0b234c1bd3 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -2082,11 +2083,11 @@ int UtcDaliAnimatedVectorImageVisualSize(void) namespace { -bool gDynamicPropertyCallbackFired = false; +std::map gDynamicPropertyCallbackFiredMap; Property::Value FillColorCallback(int32_t id, VectorAnimationRenderer::VectorProperty property, uint32_t frameNumber) { - gDynamicPropertyCallbackFired = true; + gDynamicPropertyCallbackFiredMap[id] = true; if(frameNumber < 3) { @@ -2097,12 +2098,39 @@ Property::Value FillColorCallback(int32_t id, VectorAnimationRenderer::VectorPro return Vector3(1, 0, 0); } } + +Property::Value FillOpacityCallback(int32_t id, VectorAnimationRenderer::VectorProperty property, uint32_t frameNumber) +{ + gDynamicPropertyCallbackFiredMap[id] = true; + + if(frameNumber < 3) + { + return 1.0f; + } + else + { + return 0.5f; + } +} +Property::Value TransformScaleCallback(int32_t id, VectorAnimationRenderer::VectorProperty property, uint32_t frameNumber) +{ + gDynamicPropertyCallbackFiredMap[id] = true; + + if(frameNumber < 3) + { + return Vector2(0.5f, 1.5f); + } + else + { + return Vector2(1.5f, 0.5f); + } +} } // namespace -int UtcDaliAnimatedVectorImageVisualDynamicProperty(void) +int UtcDaliAnimatedVectorImageVisualDynamicProperty01(void) { ToolkitTestApplication application; - tet_infoline("UtcDaliAnimatedVectorImageVisualDynamicProperty"); + tet_infoline("UtcDaliAnimatedVectorImageVisualDynamicProperty01"); VisualFactory factory = VisualFactory::Get(); Visual::Base visual = factory.CreateVisual( @@ -2118,7 +2146,7 @@ int UtcDaliAnimatedVectorImageVisualDynamicProperty(void) application.GetScene().Add(actor); - gDynamicPropertyCallbackFired = false; + gDynamicPropertyCallbackFiredMap.clear(); // Set dynamic property DevelAnimatedVectorImageVisual::DynamicPropertyInfo info; @@ -2139,7 +2167,77 @@ int UtcDaliAnimatedVectorImageVisualDynamicProperty(void) DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); // Test whether the property callback is called - DALI_TEST_EQUALS(gDynamicPropertyCallbackFired, true, TEST_LOCATION); + DALI_TEST_EQUALS(gDynamicPropertyCallbackFiredMap[1], true, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliAnimatedVectorImageVisualDynamicProperty02(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliAnimatedVectorImageVisualDynamicProperty02 Add dynamic property callback multiple times."); + + VisualFactory factory = VisualFactory::Get(); + Visual::Base visual = factory.CreateVisual( + Property::Map() + .Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE) + .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME) + .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false)); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(true); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); + + Vector2 controlSize(20.f, 30.f); + actor.SetProperty(Actor::Property::SIZE, controlSize); + + application.GetScene().Add(actor); + + gDynamicPropertyCallbackFiredMap.clear(); + + // Set dynamic property + DevelAnimatedVectorImageVisual::DynamicPropertyInfo info1; + info1.id = 1; + info1.keyPath = "Test.Path"; + info1.property = static_cast(VectorAnimationRenderer::VectorProperty::FILL_COLOR); + info1.callback = MakeCallback(FillColorCallback); + + DevelControl::DoActionExtension(actor, DummyControl::Property::TEST_VISUAL, DevelAnimatedVectorImageVisual::Action::SET_DYNAMIC_PROPERTY, Any(info1)); + + DevelAnimatedVectorImageVisual::DynamicPropertyInfo info2; + info2.id = 2; + info2.keyPath = "Test.Path"; + info2.property = static_cast(VectorAnimationRenderer::VectorProperty::FILL_OPACITY); + info2.callback = MakeCallback(FillOpacityCallback); + + DevelControl::DoActionExtension(actor, DummyControl::Property::TEST_VISUAL, DevelAnimatedVectorImageVisual::Action::SET_DYNAMIC_PROPERTY, Any(info2)); + + application.SendNotification(); + application.Render(); + + DevelAnimatedVectorImageVisual::DynamicPropertyInfo info3; + info3.id = 3; + info3.keyPath = "Test.Path"; + info3.property = static_cast(VectorAnimationRenderer::VectorProperty::TRANSFORM_SCALE); + info3.callback = MakeCallback(TransformScaleCallback); + + // Add third property after Notification. + DevelControl::DoActionExtension(actor, DummyControl::Property::TEST_VISUAL, DevelAnimatedVectorImageVisual::Action::SET_DYNAMIC_PROPERTY, Any(info3)); + + Property::Map attributes; + DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes); + + application.SendNotification(); + application.Render(); + + // Trigger count is 2 - load & render a frame + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + + // Test whether the property callback is called + DALI_TEST_EQUALS(gDynamicPropertyCallbackFiredMap[1], true, TEST_LOCATION); + DALI_TEST_EQUALS(gDynamicPropertyCallbackFiredMap[2], true, TEST_LOCATION); + DALI_TEST_EQUALS(gDynamicPropertyCallbackFiredMap[3], true, TEST_LOCATION); END_TEST; } 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 a8d8dab4e4..93577fb4c0 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 @@ -705,6 +705,12 @@ void AnimatedVectorImageVisual::SendAnimationData() } mVectorAnimationTask->SetAnimationData(mAnimationData); + if(mAnimationData.resendFlag & VectorAnimationTask::RESEND_DYNAMIC_PROPERTY) + { + // Remove applied dynamic properties + mAnimationData.dynamicProperties.clear(); + } + if(mImpl->mRenderer && ((mAnimationData.resendFlag & VectorAnimationTask::RESEND_PLAY_STATE) || (mAnimationData.resendFlag & VectorAnimationTask::RESEND_NOTIFY_AFTER_RASTERIZATION)))