X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fnpatch-loader.cpp;h=2550001067b70ffeb87d02d2465192ad59182369;hp=d4a1f0e4ae33f9ff47e47c2481ea42407f833db7;hb=f27c332dcf251d50ddfe3b2ab15ec2eaff5296b1;hpb=a645dd0d6b1199282c3950b9787b813ff1c28631 diff --git a/dali-toolkit/internal/visuals/npatch-loader.cpp b/dali-toolkit/internal/visuals/npatch-loader.cpp index d4a1f0e..2550001 100644 --- a/dali-toolkit/internal/visuals/npatch-loader.cpp +++ b/dali-toolkit/internal/visuals/npatch-loader.cpp @@ -18,7 +18,10 @@ // CLASS HEADER #include -// EXTERNAL INCLUDES +// INTERNAL HEADERS +#include + +// EXTERNAL HEADERS #include #include @@ -52,6 +55,9 @@ void SetLoadedNPatchData( NPatchLoader::Data* data, Devel::PixelBuffer& pixelBuf data->croppedWidth = pixelBuffer.GetWidth(); data->croppedHeight = pixelBuffer.GetHeight(); + // Create opacity map + data->renderingMap = RenderingAddOn::Get().IsValid() ? RenderingAddOn::Get().BuildNPatch(pixelBuffer, data ) : nullptr; + PixelData pixels = Devel::PixelBuffer::Convert( pixelBuffer ); // takes ownership of buffer Texture texture = Texture::New( TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight() ); @@ -65,6 +71,15 @@ void SetLoadedNPatchData( NPatchLoader::Data* data, Devel::PixelBuffer& pixelBuf } // namespace NPatchBuffer +NPatchLoader::Data::~Data() +{ + // If there is an opacity map, it has to be destroyed using addon call + if( renderingMap ) + { + RenderingAddOn::Get().DestroyNPatch( renderingMap ); + } +} + NPatchLoader::NPatchLoader() { } @@ -95,9 +110,9 @@ std::size_t NPatchLoader::Load( TextureManager& textureManager, TextureUploadObs { return index + 1u; // valid indices are from 1 onwards } + mCache[ index ]->observerList.PushBack( textureObserver ); data = mCache[ index ]; - cachedIndex = index + 1u; // valid indices are from 1 onwards - break; + return index + 1u; // valid indices are from 1 onwards } else { @@ -161,14 +176,25 @@ std::size_t NPatchLoader::Load( TextureManager& textureManager, TextureUploadObs return cachedIndex; } -void NPatchLoader::SetNPatchData( std::size_t id, Devel::PixelBuffer& pixelBuffer ) +void NPatchLoader::SetNPatchData( bool loadSuccess, std::size_t id, Devel::PixelBuffer& pixelBuffer, const Internal::VisualUrl& url, bool preMultiplied ) { Data* data; data = mCache[ id - 1u ]; - if( !data->loadCompleted ) + // To prevent recursion. + // data->loadCompleted will be set true in the NPatchBuffer::SetLoadedNPatchData when the first observer called this method. + if( data->loadCompleted ) { - NPatchBuffer::SetLoadedNPatchData( data, pixelBuffer ); + return; + } + + NPatchBuffer::SetLoadedNPatchData( data, pixelBuffer ); + + while( data->observerList.Count() ) + { + TextureUploadObserver* observer = data->observerList[0]; + observer->LoadComplete( loadSuccess, Devel::PixelBuffer(), url, preMultiplied ); + data->observerList.Erase( data->observerList.begin() ); } }