X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fsvg%2Fsvg-visual.cpp;h=55ada4acb018ff39f80181557ba430e7d8e45e23;hb=refs%2Fchanges%2F20%2F238520%2F3;hp=051affee8cc3191cb1cb20258a1c8a14dc976f7f;hpb=5a6809a40da6a50d2edce9202466aa289ad96162;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/svg/svg-visual.cpp b/dali-toolkit/internal/visuals/svg/svg-visual.cpp index 051affe..55ada4a 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-visual.cpp @@ -20,6 +20,7 @@ // INTERNAL INCLUDES #include +#include #include #include #include @@ -28,7 +29,8 @@ #include // EXTERNAL INCLUDES -#include +#include +#include namespace Dali { @@ -44,9 +46,8 @@ 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 ) @@ -67,7 +68,7 @@ SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShader } SvgVisual::SvgVisual( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl ) -: Visual::Base( factoryCache, Visual::FittingMode::FILL ), +: Visual::Base( factoryCache, Visual::FittingMode::FILL, Toolkit::Visual::SVG ), mImageVisualShaderFactory( shaderFactory ), mAtlasRect( FULL_TEXTURE_RECT ), mImageUrl( imageUrl ), @@ -102,6 +103,10 @@ void SvgVisual::DoSetProperties( const Property::Map& propertyMap ) { DoSetProperty( Toolkit::ImageVisual::Property::ATLASING, keyValue.second ); } + else if( keyValue.first == SYNCHRONOUS_LOADING ) + { + DoSetProperty( Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, keyValue.second ); + } } } @@ -114,6 +119,26 @@ void SvgVisual::DoSetProperty( Property::Index index, const Property::Value& val value.Get( mAttemptAtlasing ); break; } + case Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING: + { + bool sync = false; + if( value.Get( sync ) ) + { + if( sync ) + { + mImpl->mFlags |= Impl::IS_SYNCHRONOUS_RESOURCE_LOADING; + } + else + { + mImpl->mFlags &= ~Impl::IS_SYNCHRONOUS_RESOURCE_LOADING; + } + } + else + { + DALI_LOG_ERROR("ImageVisual: synchronousLoading property has incorrect type\n"); + } + break; + } } } @@ -122,7 +147,7 @@ void SvgVisual::DoSetOnStage( Actor& actor ) Shader shader; if( !mImpl->mCustomShader ) { - shader = mImageVisualShaderFactory.GetShader( mFactoryCache, mAttemptAtlasing, true ); + shader = mImageVisualShaderFactory.GetShader( mFactoryCache, mAttemptAtlasing, true, false ); } else { @@ -218,12 +243,25 @@ void SvgVisual::AddRasterizationTask( const Vector2& size ) float meanDpi = ( dpi.height + dpi.width ) * 0.5f; RasterizingTaskPtr newTask = new RasterizingTask( this, mParsedImage, mImageUrl, meanDpi, width, height ); - mFactoryCache.GetSVGRasterizationThread()->AddTask( newTask ); + if ( IsSynchronousLoadingRequired() ) + { + newTask->Rasterize(); + ApplyRasterizedImage( newTask->GetParsedImage(), newTask->GetPixelData() ); + } + else + { + mFactoryCache.GetSVGRasterizationThread()->AddTask( newTask ); + } } } void SvgVisual::ApplyRasterizedImage( NSVGimage* parsedSvg, PixelData rasterizedPixelData ) { + if( mParsedImage == NULL) + { + mParsedImage = parsedSvg; + } + if( mParsedImage && IsOnStage() ) { TextureSet currentTextureSet = mImpl->mRenderer.GetTextures(); @@ -288,6 +326,10 @@ void SvgVisual::ApplyRasterizedImage( NSVGimage* parsedSvg, PixelData rasterized // Svg loaded and ready to display ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } + else if( !mParsedImage ) + { + ResourceReady( Toolkit::Visual::ResourceStatus::FAILED ); + } } void SvgVisual::OnSetTransform() @@ -309,6 +351,12 @@ void SvgVisual::OnSetTransform() } } +bool SvgVisual::IsResourceReady() const +{ + return ( mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::READY || + mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::FAILED ); +} + } // namespace Internal } // namespace Toolkit