[Tizen] Download remote svg file
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / svg / svg-visual.cpp
index cc7b660..69748ee 100644 (file)
 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
 #include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
 #include <dali-toolkit/internal/visuals/image-visual-shader-factory.h>
+#include <dali/devel-api/adaptor-framework/file-loader.h>
 
 // EXTERNAL INCLUDES
 #include <dali/public-api/common/stage.h>
 
-namespace
-{
-// property name
-const char * const IMAGE_ATLASING( "atlasing" );
-
-const Dali::Vector4 FULL_TEXTURE_RECT(0.f, 0.f, 1.f, 1.f);
-}
-
 namespace Dali
 {
 
@@ -46,9 +39,20 @@ namespace Toolkit
 namespace Internal
 {
 
+namespace
+{
+// property name
+const char * const UNITS("px");
+
+const char * const IMAGE_ATLASING( "atlasing" );
+
+const Dali::Vector4 FULL_TEXTURE_RECT(0.f, 0.f, 1.f, 1.f);
+}
+
 SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl, const Property::Map& properties )
 {
   SvgVisualPtr svgVisual( new SvgVisual( factoryCache, shaderFactory, imageUrl ) );
+  svgVisual->ParseFromUrl( imageUrl );
   svgVisual->SetProperties( properties );
 
   return svgVisual;
@@ -57,6 +61,7 @@ SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShader
 SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl )
 {
   SvgVisualPtr svgVisual( new SvgVisual( factoryCache, shaderFactory, imageUrl ) );
+  svgVisual->ParseFromUrl( imageUrl );
 
   return svgVisual;
 }
@@ -181,6 +186,21 @@ void SvgVisual::DoCreatePropertyMap( Property::Map& map ) const
   }
 }
 
+void SvgVisual::ParseFromUrl( const VisualUrl& imageUrl )
+{
+  mImageUrl = imageUrl;
+  if( mImageUrl.IsLocalResource() )
+  {
+    Vector2 dpi = Stage::GetCurrent().GetDpi();
+    float meanDpi = ( dpi.height + dpi.width ) * 0.5f;
+    Dali::Vector<char> buffer;
+    if ( Dali::FileLoader::ReadFile( mImageUrl.GetUrl(), buffer ) )
+    {
+      mParsedImage = nsvgParse( buffer.Begin(), UNITS, meanDpi );
+    }
+  }
+}
+
 void SvgVisual::DoCreateInstancePropertyMap( Property::Map& map ) const
 {
   // Do nothing
@@ -208,7 +228,7 @@ void SvgVisual::ApplyRasterizedImage( NSVGimage* parsedSvg, PixelData rasterized
     mParsedImage = parsedSvg;
   }
 
-  if( IsOnStage() )
+  if( mParsedImage && IsOnStage() )
   {
     TextureSet currentTextureSet = mImpl->mRenderer.GetTextures();
     if( mImpl->mFlags |= Impl::IS_ATLASING_APPLIED )