#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
{
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;
SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl )
{
SvgVisualPtr svgVisual( new SvgVisual( factoryCache, shaderFactory, imageUrl ) );
+ svgVisual->ParseFromUrl( imageUrl );
return svgVisual;
}
}
}
+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
mParsedImage = parsedSvg;
}
- if( IsOnStage() )
+ if( mParsedImage && IsOnStage() )
{
TextureSet currentTextureSet = mImpl->mRenderer.GetTextures();
if( mImpl->mFlags |= Impl::IS_ATLASING_APPLIED )