SVG support for ImageView ( CPU rendering version )
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / renderers / renderer-factory-cache.cpp
index c7b53b6..ecfc6b5 100644 (file)
@@ -22,6 +22,7 @@
 
 // INTERNAL HEADER
 #include <dali-toolkit/internal/controls/renderers/color/color-renderer.h>
+#include <dali-toolkit/internal/controls/renderers/svg/svg-renderer.h>
 
 namespace Dali
 {
@@ -33,11 +34,13 @@ namespace Internal
 {
 
 RendererFactoryCache::RendererFactoryCache()
+: mSvgRasterizeThread( NULL )
 {
 }
 
 RendererFactoryCache::~RendererFactoryCache()
 {
+  SvgRasterizeThread::TerminateThread( mSvgRasterizeThread );
 }
 
 Geometry RendererFactoryCache::GetGeometry( GeometryType type )
@@ -122,7 +125,7 @@ void RendererFactoryCache::SaveRenderer( const std::string& key, Renderer& rende
   }
 }
 
-void RendererFactoryCache::CleanRendererCache( const std::string& key )
+bool RendererFactoryCache::CleanRendererCache( const std::string& key )
 {
   int index = FindRenderer( key );
   if( index != -1 )
@@ -134,8 +137,20 @@ void RendererFactoryCache::CleanRendererCache( const std::string& key )
 
       delete cachedRenderer;
       cachedRenderer = NULL;
+      return true;
     }
   }
+  return false;
+}
+
+void RendererFactoryCache::CacheDebugRenderer( Renderer& renderer )
+{
+  mDebugRenderer = renderer;
+}
+
+Renderer RendererFactoryCache::GetDebugRenderer()
+{
+  return mDebugRenderer;
 }
 
 Geometry RendererFactoryCache::CreateQuadGeometry()
@@ -153,8 +168,8 @@ 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();
@@ -164,6 +179,24 @@ Geometry RendererFactoryCache::CreateQuadGeometry()
   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