// INTERNAL HEADER
#include <dali-toolkit/internal/controls/renderers/color/color-renderer.h>
+#include <dali-toolkit/internal/controls/renderers/svg/svg-renderer.h>
namespace Dali
{
{
RendererFactoryCache::RendererFactoryCache()
+: mSvgRasterizeThread( NULL )
{
}
RendererFactoryCache::~RendererFactoryCache()
{
+ SvgRasterizeThread::TerminateThread( mSvgRasterizeThread );
}
Geometry RendererFactoryCache::GetGeometry( GeometryType type )
if( it != mRendererHashes.End() )
{
int index = it - mRendererHashes.Begin();
- const CachedRendererPtr& cachedRenderer = mRenderers[ index ];
+ const CachedRenderer* cachedRenderer = mRenderers[ index ];
if( cachedRenderer && cachedRenderer->mKey == key )
{
return -1;
}
-RendererFactoryCache::CachedRendererPtr RendererFactoryCache::GetRenderer( const std::string& key ) const
+Renderer RendererFactoryCache::GetRenderer( const std::string& key ) const
{
int index = FindRenderer( key );
if( index != -1 )
{
- return mRenderers[ index ];
+ return mRenderers[ index ]->mRenderer.GetHandle();
}
else
{
- return CachedRendererPtr();
+ return Renderer();
}
}
-RendererFactoryCache::CachedRendererPtr RendererFactoryCache::SaveRenderer( const std::string& key, Renderer& renderer )
+void RendererFactoryCache::SaveRenderer( const std::string& key, Renderer& renderer )
{
int hash = Dali::CalculateHash( key );
- CachedRendererPtr newCachedRenderer = new CachedRenderer( key, renderer );
+ const CachedRenderer* cachedRenderer = new CachedRenderer( key, renderer );
- CachedRenderers::iterator it = std::find(mRenderers.begin(), mRenderers.end(), CachedRendererPtr() );
- if( it != mRenderers.end() )
+ CachedRenderers::Iterator it = std::find( mRenderers.Begin(), mRenderers.End(), static_cast< CachedRenderer* >( NULL ) );
+ if( it != mRenderers.End() )
{
- *it = newCachedRenderer;
- int index = it - mRenderers.begin();
+ *it = cachedRenderer;
+ int index = it - mRenderers.Begin();
mRendererHashes[ index ] = hash;
}
else
{
mRendererHashes.PushBack( hash );
- mRenderers.push_back( newCachedRenderer );
+ mRenderers.PushBack( cachedRenderer );
}
-
- return newCachedRenderer;
}
-void RendererFactoryCache::RemoveRenderer( const std::string& key )
+bool RendererFactoryCache::CleanRendererCache( const std::string& key )
{
int index = FindRenderer( key );
if( index != -1 )
{
- mRendererHashes[ index ] = Dali::CalculateHash( "" );
- mRenderers[ index ].Reset();
+ const CachedRenderer*& cachedRenderer = mRenderers[ index ];
+ if( !cachedRenderer->mRenderer.GetHandle() )
+ {
+ mRendererHashes[ index ] = Dali::INITIAL_HASH_VALUE;
+
+ delete cachedRenderer;
+ cachedRenderer = NULL;
+ return true;
+ }
}
+ return false;
+}
+
+void RendererFactoryCache::CacheDebugRenderer( Renderer& renderer )
+{
+ mDebugRenderer = renderer;
+}
+
+Renderer RendererFactoryCache::GetDebugRenderer()
+{
+ return mDebugRenderer;
}
Geometry RendererFactoryCache::CreateQuadGeometry()
Property::Map quadVertexFormat;
quadVertexFormat["aPosition"] = Property::VECTOR2;
- PropertyBuffer quadVertices = PropertyBuffer::New( quadVertexFormat, 4 );
- quadVertices.SetData(quadVertexData);
+ PropertyBuffer quadVertices = PropertyBuffer::New( quadVertexFormat );
+ quadVertices.SetData( quadVertexData, 4 );
// Create the geometry object
Geometry geometry = Geometry::New();
return geometry;
}
+SvgRasterizeThread* RendererFactoryCache::GetSVGRasterizationThread()
+{
+ if( !mSvgRasterizeThread )
+ {
+ mSvgRasterizeThread = new SvgRasterizeThread( new EventThreadCallback( MakeCallback( this, &RendererFactoryCache::ApplyRasterizedSVGToSampler ) ) );
+ mSvgRasterizeThread->Start();
+ }
+ return mSvgRasterizeThread;
+}
+
+void RendererFactoryCache::ApplyRasterizedSVGToSampler()
+{
+ while( RasterizingTaskPtr task = mSvgRasterizeThread->NextCompletedTask() )
+ {
+ task->GetSvgRenderer()->ApplyRasterizedImage( task->GetPixelData() );
+ }
+}
+
} // namespace Internal
} // namespace Toolkit