+void AnimatedVectorImageVisual::SetVectorImageSize()
+{
+ uint32_t width = static_cast<uint32_t>(mVisualSize.width * mVisualScale.width);
+ uint32_t height = static_cast<uint32_t>(mVisualSize.height * mVisualScale.height);
+
+ mAnimationData.width = width;
+ mAnimationData.height = height;
+ mAnimationData.resendFlag |= VectorAnimationTask::RESEND_SIZE;
+}
+
+void AnimatedVectorImageVisual::StopAnimation()
+{
+ if(mAnimationData.playState != DevelImageVisual::PlayState::STOPPED)
+ {
+ mAnimationData.playState = DevelImageVisual::PlayState::STOPPED;
+ mAnimationData.resendFlag |= VectorAnimationTask::RESEND_PLAY_STATE;
+
+ mPlayState = DevelImageVisual::PlayState::STOPPED;
+ }
+}
+
+void AnimatedVectorImageVisual::TriggerVectorRasterization()
+{
+ if(!mEventCallback && !mCoreShutdown)
+ {
+ mEventCallback = MakeCallback(this, &AnimatedVectorImageVisual::OnProcessEvents);
+ auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager();
+ vectorAnimationManager.RegisterEventCallback(mEventCallback);
+ Stage::GetCurrent().KeepRendering(0.0f); // Trigger event processing
+ }
+}
+
+void AnimatedVectorImageVisual::OnScaleNotification(PropertyNotification& source)
+{
+ Actor actor = mPlacementActor.GetHandle();
+ if(actor)
+ {
+ Vector3 scale = actor.GetProperty<Vector3>(Actor::Property::WORLD_SCALE);
+
+ if(mRedrawInScalingDown || scale.width >= 1.0f || scale.height >= 1.0f)