// EXTERNAL HEADER
#include <dali/devel-api/common/hash.h>
#include <dali/devel-api/images/texture-set-image.h>
+#include <dali-toolkit/public-api/image-loader/sync-image-loader.h>
namespace Dali
{
{
}
-std::size_t NPatchLoader::Load( const std::string& url )
+std::size_t NPatchLoader::Load( const std::string& url, const Rect< int >& border )
{
std::size_t hash = CalculateHash( url );
OwnerContainer< Data* >::SizeType index = UNINITIALIZED_ID;
}
}
// got to the end so no match, decode N patch and append new item to cache
- NinePatchImage ninePatch = NinePatchImage::New( url );
- if( ninePatch )
+ if( border == Rect< int >( 0, 0, 0, 0 ) )
{
- BufferImage croppedImage = ninePatch.CreateCroppedBufferImage();
- if( croppedImage )
+ NinePatchImage ninePatch = NinePatchImage::New( url );
+ if( ninePatch )
+ {
+ BufferImage croppedImage = ninePatch.CreateCroppedBufferImage();
+ if( croppedImage )
+ {
+ Data* data = new Data();
+ data->hash = hash;
+ data->url = url;
+ data->textureSet = TextureSet::New();
+ TextureSetImage( data->textureSet, 0u, croppedImage );
+ data->croppedWidth = croppedImage.GetWidth();
+ data->croppedHeight = croppedImage.GetHeight();
+ data->stretchPixelsX = ninePatch.GetStretchPixelsX();
+ data->stretchPixelsY = ninePatch.GetStretchPixelsY();
+ mCache.PushBack( data );
+
+ return mCache.Count(); // valid ids start from 1u
+ }
+ }
+ }
+ else
+ {
+ // Load image from file
+ PixelData pixels = SyncImageLoader::Load( url );
+ if( pixels )
{
Data* data = new Data();
data->hash = hash;
data->url = url;
+ data->croppedWidth = pixels.GetWidth();
+ data->croppedHeight = pixels.GetHeight();
+
+ Texture texture = Texture::New( TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight() );
+ texture.Upload( pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight() );
+
data->textureSet = TextureSet::New();
- TextureSetImage( data->textureSet, 0u, croppedImage );
- data->croppedWidth = croppedImage.GetWidth();
- data->croppedHeight = croppedImage.GetHeight();
- data->stretchPixelsX = ninePatch.GetStretchPixelsX();
- data->stretchPixelsY = ninePatch.GetStretchPixelsY();
+ data->textureSet.SetTexture( 0u, texture );
+
+ NinePatchImage::StretchRanges stretchRangesX;
+ stretchRangesX.PushBack( Uint16Pair( border.left, data->croppedWidth - border.right ) );
+
+ NinePatchImage::StretchRanges stretchRangesY;
+ stretchRangesY.PushBack( Uint16Pair( border.top, data->croppedHeight - border.bottom ) );
+
+ data->stretchPixelsX = stretchRangesX;
+ data->stretchPixelsY = stretchRangesY;
+
mCache.PushBack( data );
return mCache.Count(); // valid ids start from 1u
}
}
+
return 0u;
}