X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fanimated-vector-image-visual.cpp;h=ca3b93d1e8a4b2013bfde38efd7279b35daee806;hp=b23f0668caf25e7b6d7c678f9b25d8c1c9e2b9f8;hb=HEAD;hpb=5e0fb26403041c3865e5ac2b5d56a5b479a9015d 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 b23f066..9fc2fda 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 @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -100,10 +101,10 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual(VisualFactoryCache& factory mLastSentPlayStateId(0u), mLoadFailed(false), mRendererAdded(false), - mCoreShutdown(false), mRedrawInScalingDown(true), mEnableFrameCache(false), - mUseNativeImage(false) + mUseNativeImage(false), + mNotifyAfterRasterization(false) { // the rasterized image is with pre-multiplied alpha format mImpl->mFlags |= Visual::Base::Impl::IS_PREMULTIPLIED_ALPHA; @@ -114,7 +115,7 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual(VisualFactoryCache& factory AnimatedVectorImageVisual::~AnimatedVectorImageVisual() { - if(!mCoreShutdown) + if(Dali::Adaptor::IsAvailable()) { if(mImageUrl.IsBufferResource()) { @@ -122,9 +123,6 @@ AnimatedVectorImageVisual::~AnimatedVectorImageVisual() textureManager.RemoveEncodedImageBuffer(mImageUrl.GetUrl()); } - auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager(); - vectorAnimationManager.RemoveObserver(*this); - if(mEventCallback) { mFactoryCache.GetVectorAnimationManager().UnregisterEventCallback(mEventCallback); @@ -137,12 +135,6 @@ AnimatedVectorImageVisual::~AnimatedVectorImageVisual() } } -void AnimatedVectorImageVisual::VectorAnimationManagerDestroyed() -{ - // Core is shutting down. Don't talk to the plugin any more. - mCoreShutdown = true; -} - void AnimatedVectorImageVisual::GetNaturalSize(Vector2& naturalSize) { if(mDesiredSize.GetWidth() > 0 && mDesiredSize.GetHeight() > 0) @@ -221,6 +213,7 @@ void AnimatedVectorImageVisual::DoCreatePropertyMap(Property::Map& map) const map.Insert(Toolkit::ImageVisual::Property::DESIRED_WIDTH, mDesiredSize.GetWidth()); map.Insert(Toolkit::ImageVisual::Property::DESIRED_HEIGHT, mDesiredSize.GetHeight()); map.Insert(Toolkit::DevelImageVisual::Property::ENABLE_FRAME_CACHE, mEnableFrameCache); + map.Insert(Toolkit::DevelImageVisual::Property::NOTIFY_AFTER_RASTERIZATION, mNotifyAfterRasterization); } void AnimatedVectorImageVisual::DoCreateInstancePropertyMap(Property::Map& map) const @@ -285,6 +278,10 @@ void AnimatedVectorImageVisual::DoSetProperties(const Property::Map& propertyMap { DoSetProperty(Toolkit::DevelImageVisual::Property::ENABLE_FRAME_CACHE, keyValue.second); } + else if(keyValue.first == NOTIFY_AFTER_RASTERIZATION) + { + DoSetProperty(Toolkit::DevelImageVisual::Property::NOTIFY_AFTER_RASTERIZATION, keyValue.second); + } } } @@ -404,6 +401,22 @@ void AnimatedVectorImageVisual::DoSetProperty(Property::Index index, const Prope } break; } + + case Toolkit::DevelImageVisual::Property::NOTIFY_AFTER_RASTERIZATION: + { + bool notifyAfterRasterization = false; + if(value.Get(notifyAfterRasterization)) + { + if(mNotifyAfterRasterization != notifyAfterRasterization) + { + mNotifyAfterRasterization = notifyAfterRasterization; + + mAnimationData.notifyAfterRasterization = mNotifyAfterRasterization; + mAnimationData.resendFlag |= VectorAnimationTask::RESEND_NOTIFY_AFTER_RASTERIZATION; + } + } + break; + } } } @@ -411,7 +424,6 @@ void AnimatedVectorImageVisual::OnInitialize(void) { mVectorAnimationTask->ResourceReadySignal().Connect(this, &AnimatedVectorImageVisual::OnResourceReady); mVectorAnimationTask->SetAnimationFinishedCallback(MakeCallback(this, &AnimatedVectorImageVisual::OnAnimationFinished)); - mVectorAnimationTask->SetForceRenderOnceCallback(MakeCallback(this, &AnimatedVectorImageVisual::OnForceRendering)); EncodedImageBuffer encodedImageBuffer; @@ -429,9 +441,6 @@ void AnimatedVectorImageVisual::OnInitialize(void) mVectorAnimationTask->KeepRasterizedBuffer(mEnableFrameCache); mVectorAnimationTask->RequestLoad(mImageUrl, encodedImageBuffer, IsSynchronousLoadingRequired()); - auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager(); - vectorAnimationManager.AddObserver(*this); - Shader shader = GenerateShader(); Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); @@ -472,11 +481,12 @@ void AnimatedVectorImageVisual::DoSetOnScene(Actor& actor) mSizeNotification = actor.AddPropertyNotification(Actor::Property::SIZE, StepCondition(3.0f)); mSizeNotification.NotifySignal().Connect(this, &AnimatedVectorImageVisual::OnSizeNotification); - DevelActor::VisibilityChangedSignal(actor).Connect(this, &AnimatedVectorImageVisual::OnControlVisibilityChanged); + actor.InheritedVisibilityChangedSignal().Connect(this, &AnimatedVectorImageVisual::OnControlInheritedVisibilityChanged); Window window = DevelWindow::Get(actor); if(window) { + mPlacementWindow = window; DevelWindow::VisibilityChangedSignal(window).Connect(this, &AnimatedVectorImageVisual::OnWindowVisibilityChanged); } @@ -508,12 +518,13 @@ void AnimatedVectorImageVisual::DoSetOffScene(Actor& actor) actor.RemovePropertyNotification(mScaleNotification); actor.RemovePropertyNotification(mSizeNotification); - DevelActor::VisibilityChangedSignal(actor).Disconnect(this, &AnimatedVectorImageVisual::OnControlVisibilityChanged); + actor.InheritedVisibilityChangedSignal().Disconnect(this, &AnimatedVectorImageVisual::OnControlInheritedVisibilityChanged); - Window window = DevelWindow::Get(actor); + Window window = mPlacementWindow.GetHandle(); if(window) { DevelWindow::VisibilityChangedSignal(window).Disconnect(this, &AnimatedVectorImageVisual::OnWindowVisibilityChanged); + mPlacementWindow.Reset(); } mPlacementActor.Reset(); @@ -606,7 +617,7 @@ void AnimatedVectorImageVisual::OnDoAction(const Property::Index actionId, const } case DevelAnimatedVectorImageVisual::Action::FLUSH: { - if(DALI_LIKELY(!mCoreShutdown)) + if(DALI_LIKELY(Dali::Adaptor::IsAvailable())) { SendAnimationData(); } @@ -719,20 +730,12 @@ void AnimatedVectorImageVisual::OnAnimationFinished(uint32_t playStateId) } } - if(mImpl->mRenderer) + if(!mNotifyAfterRasterization && mImpl->mRenderer) { mImpl->mRenderer.SetProperty(DevelRenderer::Property::RENDERING_BEHAVIOR, DevelRenderer::Rendering::IF_REQUIRED); } } -void AnimatedVectorImageVisual::OnForceRendering(uint32_t playStateId) -{ - if(!mCoreShutdown) - { - Stage::GetCurrent().KeepRendering(0.0f); // Trigger event processing - } -} - void AnimatedVectorImageVisual::SendAnimationData() { if(mAnimationData.resendFlag) @@ -746,14 +749,18 @@ void AnimatedVectorImageVisual::SendAnimationData() } mVectorAnimationTask->SetAnimationData(mAnimationData); - if(mImpl->mRenderer) + if(mImpl->mRenderer && + ((mAnimationData.resendFlag & VectorAnimationTask::RESEND_PLAY_STATE) || + (mAnimationData.resendFlag & VectorAnimationTask::RESEND_NOTIFY_AFTER_RASTERIZATION))) { - if(mAnimationData.playState == DevelImageVisual::PlayState::PLAYING) + if(!mNotifyAfterRasterization && mPlayState == DevelImageVisual::PlayState::PLAYING) { + // Make rendering behaviour if we don't notify after rasterization, but animation playing. mImpl->mRenderer.SetProperty(DevelRenderer::Property::RENDERING_BEHAVIOR, DevelRenderer::Rendering::CONTINUOUSLY); } else { + // Otherwise, notify will be sended after rasterization. Make behaviour as required. mImpl->mRenderer.SetProperty(DevelRenderer::Property::RENDERING_BEHAVIOR, DevelRenderer::Rendering::IF_REQUIRED); } } @@ -797,7 +804,7 @@ void AnimatedVectorImageVisual::StopAnimation() void AnimatedVectorImageVisual::TriggerVectorRasterization() { - if(!mEventCallback && !mCoreShutdown) + if(!mEventCallback && Dali::Adaptor::IsAvailable()) { mEventCallback = MakeCallback(this, &AnimatedVectorImageVisual::OnProcessEvents); auto& vectorAnimationManager = mFactoryCache.GetVectorAnimationManager(); @@ -850,14 +857,14 @@ void AnimatedVectorImageVisual::OnSizeNotification(PropertyNotification& source) } } -void AnimatedVectorImageVisual::OnControlVisibilityChanged(Actor actor, bool visible, DevelActor::VisibilityChange::Type type) +void AnimatedVectorImageVisual::OnControlInheritedVisibilityChanged(Actor actor, bool visible) { if(!visible) { StopAnimation(); TriggerVectorRasterization(); - DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnControlVisibilityChanged: invisibile. Pause animation [%p]\n", this); + DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnControlInheritedVisibilityChanged: invisibile. Pause animation [%p]\n", this); } }