X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-factory-cache.cpp;h=ad5bcb35860dfc8e26d544baa78df9df8c28d87e;hp=307791b686ac57568e49e5c3671087676b7c5b18;hb=bb764a75b719ea839f4c255ab015b8fa54fd8039;hpb=01db027faaf245de80dfee0928fbd6f72360f7bd diff --git a/dali-toolkit/internal/visuals/visual-factory-cache.cpp b/dali-toolkit/internal/visuals/visual-factory-cache.cpp index 307791b..ad5bcb3 100644 --- a/dali-toolkit/internal/visuals/visual-factory-cache.cpp +++ b/dali-toolkit/internal/visuals/visual-factory-cache.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,17 +19,13 @@ // EXTERNAL INCLUDES #include -#include +#include // INTERNAL INCLUDES #include #include #include - -namespace -{ -const char * const BROKEN_VISUAL_IMAGE_URL( DALI_IMAGE_DIR "broken.png"); -} +#include namespace Dali { @@ -42,6 +38,8 @@ namespace Internal VisualFactoryCache::VisualFactoryCache( bool preMultiplyOnLoad ) : mSvgRasterizeThread( NULL ), + mVectorAnimationManager(), + mBrokenImageUrl(""), mPreMultiplyOnLoad( preMultiplyOnLoad ) { } @@ -91,7 +89,7 @@ Geometry VisualFactoryCache::CreateQuadGeometry() Property::Map quadVertexFormat; quadVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer quadVertices = PropertyBuffer::New( quadVertexFormat ); + VertexBuffer quadVertices = VertexBuffer::New( quadVertexFormat ); quadVertices.SetData( quadVertexData, 4 ); // Create the geometry object @@ -107,7 +105,7 @@ ImageAtlasManagerPtr VisualFactoryCache::GetAtlasManager() if( !mAtlasManager ) { mAtlasManager = new ImageAtlasManager(); - mAtlasManager->SetBrokenImage( BROKEN_VISUAL_IMAGE_URL ); + mAtlasManager->SetBrokenImage( mBrokenImageUrl ); } return mAtlasManager; @@ -133,11 +131,24 @@ SvgRasterizeThread* VisualFactoryCache::GetSVGRasterizationThread() return mSvgRasterizeThread; } +VectorAnimationManager& VisualFactoryCache::GetVectorAnimationManager() +{ + if( !mVectorAnimationManager ) + { + mVectorAnimationManager = std::unique_ptr< VectorAnimationManager >( new VectorAnimationManager() ); + } + return *mVectorAnimationManager; +} + void VisualFactoryCache::ApplyRasterizedSVGToSampler() { while( RasterizingTaskPtr task = mSvgRasterizeThread->NextCompletedTask() ) { - task->GetSvgVisual()->ApplyRasterizedImage( task->GetPixelData() ); +#ifdef NO_THORVG + task->GetSvgVisual()->ApplyRasterizedImage( task->GetParsedImage(), task->GetPixelData() ); +#else /* NO_THORVG */ + task->GetSvgVisual()->ApplyRasterizedImage( task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded() ); +#endif /* NO_THORVG */ } } @@ -186,20 +197,20 @@ Geometry VisualFactoryCache::CreateGridGeometry( Uint16Pair gridSize ) Property::Map vertexFormat; vertexFormat[ "aPosition" ] = Property::VECTOR2; - PropertyBuffer vertexPropertyBuffer = PropertyBuffer::New( vertexFormat ); + VertexBuffer vertexBuffer = VertexBuffer::New( vertexFormat ); if( vertices.Size() > 0 ) { - vertexPropertyBuffer.SetData( &vertices[ 0 ], vertices.Size() ); + vertexBuffer.SetData( &vertices[ 0 ], vertices.Size() ); } Property::Map indexFormat; indexFormat[ "indices" ] = Property::INTEGER; - PropertyBuffer indexPropertyBuffer = PropertyBuffer::New( indexFormat ); + VertexBuffer indexVertexBuffer = VertexBuffer::New( indexFormat ); // Create the geometry object Geometry geometry = Geometry::New(); - geometry.AddVertexBuffer( vertexPropertyBuffer ); + geometry.AddVertexBuffer( vertexBuffer ); if( indices.Size() > 0 ) { geometry.SetIndexBuffer( &indices[ 0 ], indices.Size() ); @@ -210,9 +221,21 @@ Geometry VisualFactoryCache::CreateGridGeometry( Uint16Pair gridSize ) return geometry; } -Image VisualFactoryCache::GetBrokenVisualImage() +Texture VisualFactoryCache::GetBrokenVisualImage() { - return ResourceImage::New( BROKEN_VISUAL_IMAGE_URL ); + if(!mBrokenImageTexture && mBrokenImageUrl.size()) + { + PixelData data; + Devel::PixelBuffer pixelBuffer = LoadImageFromFile( mBrokenImageUrl ); + if( pixelBuffer ) + { + data = Devel::PixelBuffer::Convert(pixelBuffer); // takes ownership of buffer + mBrokenImageTexture = Texture::New( Dali::TextureType::TEXTURE_2D, data.GetPixelFormat(), + data.GetWidth(), data.GetHeight() ); + mBrokenImageTexture.Upload( data ); + } + } + return mBrokenImageTexture; } void VisualFactoryCache::SetPreMultiplyOnLoad( bool preMultiply ) @@ -225,6 +248,19 @@ bool VisualFactoryCache::GetPreMultiplyOnLoad() return mPreMultiplyOnLoad; } +void VisualFactoryCache::SetBrokenImageUrl(const std::string& brokenImageUrl) +{ + mBrokenImageUrl = brokenImageUrl; + + if( !mAtlasManager ) + { + mAtlasManager = new ImageAtlasManager(); + } + + mAtlasManager->SetBrokenImage( mBrokenImageUrl ); + mTextureManager.SetBrokenImageUrl( mBrokenImageUrl ); +} + } // namespace Internal } // namespace Toolkit