X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fsvg%2Fsvg-rasterize-thread.cpp;h=8bd9f0a02ed8e91e1be6cc469eea81eb17366709;hp=75286cad6c48de2ad1fc11694b9c62df8dc0d182;hb=2038d8cd8f472a8264498556ff949446313b57c3;hpb=6763e32fdd621d4fd7d2d1de9277865d7b685d1e diff --git a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp index 75286ca..8bd9f0a 100644 --- a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp @@ -121,15 +121,20 @@ PixelData RasterizingTask::GetPixelData() const return mPixelData; } -SvgRasterizeThread::SvgRasterizeThread( EventThreadCallback* trigger ) -: mTrigger( std::unique_ptr< EventThreadCallback >(trigger) ), +SvgRasterizeThread::SvgRasterizeThread() +: mTrigger( new EventThreadCallback( MakeCallback( this, &SvgRasterizeThread::ApplyRasterizedSVGToSampler ) ) ), mLogFactory( Dali::Adaptor::Get().GetLogFactory() ), - mIsThreadWaiting( false ) + mIsThreadWaiting( false ), + mProcessorRegistered( false ) { } SvgRasterizeThread::~SvgRasterizeThread() { + if( mProcessorRegistered ) + { + Adaptor::Get().UnregisterProcessor( *this ); + } } void SvgRasterizeThread::TerminateThread( SvgRasterizeThread*& thread ) @@ -168,6 +173,12 @@ void SvgRasterizeThread::AddTask( RasterizingTaskPtr task ) } } mRasterizeTasks.push_back( task ); + + if( !mProcessorRegistered ) + { + Adaptor::Get().RegisterProcessor( *this ); + mProcessorRegistered = true; + } } if( wasEmpty) @@ -209,6 +220,8 @@ void SvgRasterizeThread::RemoveTask( SvgVisual* visual ) } } } + + UnregisterProcessor(); } void SvgRasterizeThread::DeleteImage( VectorImageRenderer vectorRenderer ) @@ -276,6 +289,34 @@ void SvgRasterizeThread::Run() } } +void SvgRasterizeThread::ApplyRasterizedSVGToSampler() +{ + while( RasterizingTaskPtr task = NextCompletedTask() ) + { + task->GetSvgVisual()->ApplyRasterizedImage(task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded()); + } + + UnregisterProcessor(); +} + +void SvgRasterizeThread::Process() +{ + ApplyRasterizedSVGToSampler(); +} + +void SvgRasterizeThread::UnregisterProcessor() +{ + if ( mProcessorRegistered ) + { + if( mRasterizeTasks.empty() && mCompletedTasks.empty() ) + { + Adaptor::Get().UnregisterProcessor( *this ); + mProcessorRegistered = false; + } + } +} + + } // namespace Internal } // namespace Toolkit