X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fsvg%2Fsvg-visual.cpp;h=cd59107306ef868ab277195ab7647b80ac56d441;hb=refs%2Fheads%2Faccepted%2Ftizen_7.0_unified_hotfix;hp=a92f7f837fd0fe22ba54327592ea04fa9d0da176;hpb=ce4a6e3803b711fa4c399160c48bcaa9f51f31e4;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 a92f7f8..cd59107 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-visual.cpp @@ -29,6 +29,7 @@ // EXTERNAL INCLUDES #include #include +#include namespace Dali { @@ -38,7 +39,7 @@ namespace Internal { namespace { -const int CUSTOM_PROPERTY_COUNT(6); // atlas + corner/border +const int CUSTOM_PROPERTY_COUNT(1); // atlas // property name const Dali::Vector4 FULL_TEXTURE_RECT(0.f, 0.f, 1.f, 1.f); @@ -47,20 +48,20 @@ 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)); + SvgVisualPtr svgVisual(new SvgVisual(factoryCache, shaderFactory, imageUrl, ImageDimensions{})); svgVisual->SetProperties(properties); svgVisual->Initialize(); return svgVisual; } -SvgVisualPtr SvgVisual::New(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl) +SvgVisualPtr SvgVisual::New(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl, ImageDimensions size) { - SvgVisualPtr svgVisual(new SvgVisual(factoryCache, shaderFactory, imageUrl)); + SvgVisualPtr svgVisual(new SvgVisual(factoryCache, shaderFactory, imageUrl, size)); svgVisual->Initialize(); return svgVisual; } -SvgVisual::SvgVisual(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl) +SvgVisual::SvgVisual(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl, ImageDimensions size) : Visual::Base(factoryCache, Visual::FittingMode::FILL, Toolkit::Visual::SVG), mImageVisualShaderFactory(shaderFactory), mAtlasRect(FULL_TEXTURE_RECT), @@ -70,6 +71,7 @@ SvgVisual::SvgVisual(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& mDefaultHeight(0), mPlacementActor(), mRasterizedSize(Vector2::ZERO), + mDesiredSize(size), mLoadFailed(false), mAttemptAtlasing(false) { @@ -85,7 +87,7 @@ void SvgVisual::OnInitialize() { Shader shader = GenerateShader(); Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); - mImpl->mRenderer = VisualRenderer::New(geometry, shader); + mImpl->mRenderer = DecoratedVisualRenderer::New(geometry, shader); mImpl->mRenderer.ReserveCustomProperties(CUSTOM_PROPERTY_COUNT); Vector2 dpi = Stage::GetCurrent().GetDpi(); @@ -99,7 +101,7 @@ void SvgVisual::OnInitialize() } else { - mFactoryCache.GetSVGRasterizationThread()->AddTask(newTask); + mFactoryCache.GetSVGRasterizationManager()->AddTask(newTask); } } @@ -121,6 +123,14 @@ void SvgVisual::DoSetProperties(const Property::Map& propertyMap) { DoSetProperty(Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, keyValue.second); } + else if(keyValue.first == IMAGE_DESIRED_WIDTH) + { + DoSetProperty(Toolkit::ImageVisual::Property::DESIRED_WIDTH, keyValue.second); + } + else if(keyValue.first == IMAGE_DESIRED_HEIGHT) + { + DoSetProperty(Toolkit::ImageVisual::Property::DESIRED_HEIGHT, keyValue.second); + } } } @@ -153,6 +163,24 @@ void SvgVisual::DoSetProperty(Property::Index index, const Property::Value& valu } break; } + case Toolkit::ImageVisual::Property::DESIRED_WIDTH: + { + int32_t desiredWidth = 0; + if(value.Get(desiredWidth)) + { + mDesiredSize.SetWidth(desiredWidth); + } + break; + } + case Toolkit::ImageVisual::Property::DESIRED_HEIGHT: + { + int32_t desiredHeight = 0; + if(value.Get(desiredHeight)) + { + mDesiredSize.SetHeight(desiredHeight); + } + break; + } } } @@ -190,7 +218,7 @@ void SvgVisual::DoSetOnScene(Actor& actor) void SvgVisual::DoSetOffScene(Actor& actor) { - mFactoryCache.GetSVGRasterizationThread()->RemoveTask(this); + mFactoryCache.GetSVGRasterizationManager()->RemoveTask(this); actor.RemoveRenderer(mImpl->mRenderer); mPlacementActor.Reset(); @@ -201,7 +229,12 @@ void SvgVisual::DoSetOffScene(Actor& actor) void SvgVisual::GetNaturalSize(Vector2& naturalSize) { - if(mLoadFailed && mImpl->mRenderer) + if(mDesiredSize.GetWidth() > 0 && mDesiredSize.GetHeight() > 0) + { + naturalSize.x = mDesiredSize.GetWidth(); + naturalSize.y = mDesiredSize.GetHeight(); + } + else if(mLoadFailed && mImpl->mRenderer) { // Load failed, use broken image size auto textureSet = mImpl->mRenderer.GetTextures(); @@ -233,6 +266,8 @@ void SvgVisual::DoCreatePropertyMap(Property::Map& map) const map.Insert(Toolkit::ImageVisual::Property::ATLASING, mAttemptAtlasing); } map.Insert(Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, IsSynchronousLoadingRequired()); + map.Insert(Toolkit::ImageVisual::Property::DESIRED_WIDTH, mDesiredSize.GetWidth()); + map.Insert(Toolkit::ImageVisual::Property::DESIRED_HEIGHT, mDesiredSize.GetHeight()); } void SvgVisual::DoCreateInstancePropertyMap(Property::Map& map) const @@ -265,7 +300,7 @@ void SvgVisual::AddRasterizationTask(const Vector2& size) } else { - mFactoryCache.GetSVGRasterizationThread()->AddTask(newTask); + mFactoryCache.GetSVGRasterizationManager()->AddTask(newTask); } } } @@ -366,14 +401,24 @@ void SvgVisual::ApplyRasterizedImage(PixelData rasterizedPixelData, bool success void SvgVisual::OnSetTransform() { - Vector2 visualSize = mImpl->mTransform.GetVisualSize(mImpl->mControlSize); - if(IsOnScene() && !mLoadFailed) { - if(visualSize != mRasterizedSize || mDefaultWidth == 0 || mDefaultHeight == 0) + Vector2 size; + if(mDesiredSize.GetWidth() > 0 && mDesiredSize.GetHeight() > 0) + { + // Use desired size + size = Vector2(mDesiredSize.GetWidth(), mDesiredSize.GetHeight()); + } + else + { + // Use visual size + size = mImpl->mTransform.GetVisualSize(mImpl->mControlSize); + } + + if(size != mRasterizedSize || mDefaultWidth == 0 || mDefaultHeight == 0) { - mRasterizedSize = visualSize; - AddRasterizationTask(visualSize); + mRasterizedSize = size; + AddRasterizationTask(size); } }