// CLASS HEADER
#include <dali-toolkit/internal/visuals/npatch-loader.h>
-// EXTERNAL INCLUDES
+// INTERNAL HEADERS
+#include <dali-toolkit/internal/visuals/rendering-addon.h>
+
+// EXTERNAL HEADERS
#include <dali/devel-api/common/hash.h>
#include <dali/integration-api/debug.h>
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() );
} // 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()
{
}
{
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
{
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() );
}
}