#include <dali/devel-api/common/stage.h>
#include <dali/devel-api/rendering/renderer-devel.h>
#include <dali/devel-api/adaptor-framework/window-devel.h>
-#include <dali/integration-api/adaptor-framework/adaptor.h>
#include <dali/integration-api/debug.h>
// INTERNAL INCLUDES
#include <dali-toolkit/internal/visuals/visual-factory-cache.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
#include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
+#include <dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.h>
namespace Dali
{
mVisualScale( Vector2::ONE ),
mPlacementActor(),
mPlayState( DevelImageVisual::PlayState::STOPPED ),
- mRendererAdded( false ),
- mRasterizationTriggered( false )
+ mEventCallback( nullptr ),
+ mRendererAdded( false )
{
// the rasterized image is with pre-multiplied alpha format
mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
AnimatedVectorImageVisual::~AnimatedVectorImageVisual()
{
- if( mRasterizationTriggered && Adaptor::IsAvailable() )
+ if( mEventCallback )
{
- Adaptor::Get().UnregisterProcessor( *this );
+ mFactoryCache.GetVectorAnimationManager().UnregisterEventCallback( mEventCallback );
}
// Finalize animation task and disconnect the signal in the main thread
}
case Toolkit::DevelImageVisual::Property::PLAY_RANGE:
{
- Property::Array* array = value.GetArray();
+ const Property::Array* array = value.GetArray();
if( array )
{
mAnimationData.playRange = *array;
}
}
-void AnimatedVectorImageVisual::DoSetOnStage( Actor& actor )
+void AnimatedVectorImageVisual::DoSetOnScene( Actor& actor )
{
Shader shader;
DevelWindow::VisibilityChangedSignal( window ).Connect( this, &AnimatedVectorImageVisual::OnWindowVisibilityChanged );
}
- DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOnStage [%p]\n", this );
+ DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOnScene [%p]\n", this );
}
-void AnimatedVectorImageVisual::DoSetOffStage( Actor& actor )
+void AnimatedVectorImageVisual::DoSetOffScene( Actor& actor )
{
StopAnimation();
SendAnimationData();
mVisualSize = Vector2::ZERO;
mVisualScale = Vector2::ONE;
- DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOffStage [%p]\n", this );
+ DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOffScene [%p]\n", this );
}
void AnimatedVectorImageVisual::OnSetTransform()
{
Vector2 visualSize = mImpl->mTransform.GetVisualSize( mImpl->mControlSize );
- if( IsOnStage() && visualSize != mVisualSize )
+ if( IsOnScene() && visualSize != mVisualSize )
{
DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnSetTransform: width = %f, height = %f [%p]\n", visualSize.width, visualSize.height, this );
{
case DevelAnimatedVectorImageVisual::Action::PLAY:
{
- if( IsOnStage() && mVisualSize != Vector2::ZERO )
+ if( IsOnScene() && mVisualSize != Vector2::ZERO )
{
if( mAnimationData.playState != DevelImageVisual::PlayState::PLAYING )
{
}
case DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY:
{
- Property::Map* map = attributes.GetMap();
+ const Property::Map* map = attributes.GetMap();
if( map )
{
DoSetProperties( *map );
TriggerVectorRasterization();
}
-void AnimatedVectorImageVisual::Process()
-{
- SendAnimationData();
-
- mRasterizationTriggered = false;
-
- Adaptor::Get().UnregisterProcessor( *this );
-}
-
void AnimatedVectorImageVisual::OnUploadCompleted()
{
// If weak handle is holding a placement actor, it is the time to add the renderer to actor.
void AnimatedVectorImageVisual::TriggerVectorRasterization()
{
- if( !mRasterizationTriggered )
+ if( !mEventCallback )
{
+ mEventCallback = MakeCallback( this, &AnimatedVectorImageVisual::OnProcessEvents );
+ mFactoryCache.GetVectorAnimationManager().RegisterEventCallback( mEventCallback );
Stage::GetCurrent().KeepRendering( 0.0f ); // Trigger event processing
-
- Adaptor::Get().RegisterProcessor( *this );
- mRasterizationTriggered = true;
}
}
}
}
+void AnimatedVectorImageVisual::OnProcessEvents()
+{
+ SendAnimationData();
+
+ mEventCallback = nullptr; // The callback will be deleted in the VectorAnimationManager
+}
+
} // namespace Internal
} // namespace Toolkit