#include "svg-visual.h"
// INTERNAL INCLUDES
-#ifdef NO_THORVG
-#include <dali-toolkit/third-party/nanosvg/nanosvg.h>
-#include <dali-toolkit/third-party/nanosvg/nanosvgrast.h>
-#endif /* NO_THORVG */
#include <dali-toolkit/internal/visuals/svg/svg-rasterize-thread.h>
#include <dali-toolkit/internal/visuals/image-atlas-manager.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
namespace
{
// property name
-const char * const UNITS("px");
-
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 ) );
-#ifdef NO_THORVG
- svgVisual->ParseFromUrl( imageUrl );
- svgVisual->SetProperties( properties );
-#else /* NO_THORVG */
svgVisual->Load();
- svgVisual->SetProperties( properties );
-#endif /* NO_THORVG */
-
+ svgVisual->SetProperties(properties);
return svgVisual;
}
SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl )
{
SvgVisualPtr svgVisual( new SvgVisual( factoryCache, shaderFactory, imageUrl ) );
-#ifdef NO_THORVG
- svgVisual->ParseFromUrl( imageUrl );
-#else /* NO_THORVG */
svgVisual->Load();
-#endif /* NO_THORVG */
-
return svgVisual;
}
mImageVisualShaderFactory( shaderFactory ),
mAtlasRect( FULL_TEXTURE_RECT ),
mImageUrl( imageUrl ),
-#ifdef NO_THORVG
- mParsedImage( NULL ),
-#else
mVectorRenderer( VectorImageRenderer::New() ),
mDefaultWidth( 0 ),
mDefaultHeight( 0 ),
mLoaded( false ),
- mLocalResource( true ),
-#endif /* NO_THORVG */
mPlacementActor(),
mVisualSize(Vector2::ZERO),
mAttemptAtlasing( false )
SvgVisual::~SvgVisual()
{
-#ifdef NO_THORVG
- if( mParsedImage )
- {
- nsvgDelete( mParsedImage );
- }
-#endif /* NO_THORVG */
}
void SvgVisual::DoSetProperties( const Property::Map& propertyMap )
void SvgVisual::GetNaturalSize( Vector2& naturalSize )
{
-#ifdef NO_THORVG
- if( mParsedImage )
- {
- naturalSize.x = mParsedImage->width;
- naturalSize.y = mParsedImage->height;
- }
-#else /* NO_THORVG */
- if ( mLoaded )
+ if(mLoaded)
{
naturalSize.x = mDefaultWidth;
naturalSize.y = mDefaultHeight;
}
-#endif /* NO_THORVG */
else
{
naturalSize = Vector2::ZERO;
// Do nothing
}
-#ifdef NO_THORVG
-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 ) )
- {
- buffer.PushBack( '\0' );
- mParsedImage = nsvgParse( buffer.Begin(), UNITS, meanDpi );
- }
- }
-}
-#else /* NO_THORVG */
void SvgVisual::Load()
{
- if( mLoaded || !mLocalResource )
+ // load remote resource on svg rasterize thread.
+ if(!mLoaded && mImageUrl.IsLocalResource())
{
- return;
- }
-
- mLocalResource = mImageUrl.IsLocalResource();
-
- if( !mLocalResource )
- {
- // load remote resource on svg rasterize thread.
- return;
- }
+ Dali::Vector<uint8_t> buffer;
+ if(Dali::FileLoader::ReadFile(mImageUrl.GetUrl(), buffer))
+ {
+ buffer.PushBack('\0');
- if( !mVectorRenderer.Load( mImageUrl.GetUrl() ) )
- {
- DALI_LOG_ERROR( "Failed to load file!\n" );
- return;
+ Vector2 dpi = Stage::GetCurrent().GetDpi();
+ float meanDpi = (dpi.height + dpi.width) * 0.5f;
+ if(!mVectorRenderer.Load(buffer, meanDpi))
+ {
+ DALI_LOG_ERROR("SvgVisual::Load: Failed to load file! [%s]\n", mImageUrl.GetUrl().c_str());
+ return;
+ }
+ mVectorRenderer.GetDefaultSize(mDefaultWidth, mDefaultHeight);
+ mLoaded = true;
+ }
+ else
+ {
+ DALI_LOG_ERROR("SvgVisual::Load: Failed to read file! [%s]\n", mImageUrl.GetUrl().c_str());
+ }
}
-
- mVectorRenderer.GetDefaultSize(mDefaultWidth, mDefaultHeight);
- mLoaded = true;
}
-#endif /* NO_THORVG */
-
void SvgVisual::AddRasterizationTask( const Vector2& size )
{
Vector2 dpi = Stage::GetCurrent().GetDpi();
float meanDpi = ( dpi.height + dpi.width ) * 0.5f;
-#ifdef NO_THORVG
- RasterizingTaskPtr newTask = new RasterizingTask( this, mParsedImage, mImageUrl, meanDpi, width, height );
-#else /* NO_THORVG */
- RasterizingTaskPtr newTask = new RasterizingTask( this, mVectorRenderer, mImageUrl, meanDpi, width, height, mLoaded );
-#endif /* NO_THORVG */
- if ( IsSynchronousLoadingRequired() )
+ RasterizingTaskPtr newTask = new RasterizingTask(this, mVectorRenderer, mImageUrl, meanDpi, width, height, mLoaded);
+ if(IsSynchronousLoadingRequired())
{
-#ifdef NO_THORVG
- newTask->Rasterize();
- ApplyRasterizedImage( newTask->GetParsedImage(), newTask->GetPixelData() );
-#else /* NO_THORVG */
newTask->Load();
newTask->Rasterize();
- ApplyRasterizedImage( newTask->GetVectorRenderer(), newTask->GetPixelData(), newTask->IsLoaded() );
-#endif /* NO_THORVG */
+ ApplyRasterizedImage(newTask->GetVectorRenderer(), newTask->GetPixelData(), newTask->IsLoaded());
}
else
{
}
}
-#ifdef NO_THORVG
-void SvgVisual::ApplyRasterizedImage( NSVGimage* parsedSvg, PixelData rasterizedPixelData )
-{
- if( mParsedImage == NULL)
- {
- mParsedImage = parsedSvg;
- }
-
- if( mParsedImage && IsOnScene() )
-#else /* NO_THORVG */
void SvgVisual::ApplyRasterizedImage( VectorImageRenderer vectorRenderer, PixelData rasterizedPixelData, bool isLoaded )
{
mLoaded = isLoaded;
- if( isLoaded && rasterizedPixelData && IsOnScene() )
-#endif /* NO_THORVG */
+ if(isLoaded && rasterizedPixelData && IsOnScene())
{
TextureSet currentTextureSet = mImpl->mRenderer.GetTextures();
if( mImpl->mFlags & Impl::IS_ATLASING_APPLIED )
mPlacementActor.Reset();
}
- // Svg loaded and ready to display
- ResourceReady( Toolkit::Visual::ResourceStatus::READY );
+ // Svg loaded and ready to display
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
-#ifdef NO_THORVG
- else if( !mParsedImage )
-#else /* NO_THORVG */
- else if( !isLoaded || !rasterizedPixelData )
-#endif /* NO_THORVG */
+ else if(!isLoaded || !rasterizedPixelData)
{
ResourceReady( Toolkit::Visual::ResourceStatus::FAILED );
}