namespace Internal
{
-
-RasterizingTask::RasterizingTask( SvgVisual* svgRenderer, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height, bool loaded)
-: mSvgVisual( svgRenderer ),
- mVectorRenderer( vectorRenderer ),
- mUrl( url ),
- mDpi( dpi ),
- mWidth( width ),
- mHeight( height ),
- mLoaded( loaded )
+RasterizingTask::RasterizingTask(SvgVisual* svgRenderer, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height)
+: mSvgVisual(svgRenderer),
+ mVectorRenderer(vectorRenderer),
+ mUrl(url),
+ mDpi(dpi),
+ mWidth(width),
+ mHeight(height),
+ mLoadSuccess(false)
{
}
void RasterizingTask::Load()
{
- if(!mLoaded && !mUrl.IsLocalResource())
+ if(!mUrl.IsLocalResource())
{
Dali::Vector<uint8_t> remoteBuffer;
if(!Dali::FileLoader::DownloadFileSynchronously(mUrl.GetUrl(), remoteBuffer))
return;
}
- mLoaded = true;
+ mLoadSuccess = true;
+ }
+ else
+ {
+ mLoadSuccess = true;
}
}
bool RasterizingTask::IsLoaded() const
{
- return mLoaded;
+ return mLoadSuccess;
}
SvgVisual* RasterizingTask::GetSvgVisual() 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 )
}
}
mRasterizeTasks.push_back( task );
+
+ if( !mProcessorRegistered )
+ {
+ Adaptor::Get().RegisterProcessor( *this );
+ mProcessorRegistered = true;
+ }
}
if( wasEmpty)
}
}
}
+
+ UnregisterProcessor();
}
void SvgRasterizeThread::DeleteImage( VectorImageRenderer vectorRenderer )
}
}
+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