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=5da7bd1f5b74bdd97da8c36f03ecf1d0d3607d2f;hp=6e3c8ec04de64b76930233570bb709bd07ee212f;hb=9455df45d5cb37bb71a34334e1c9dc8a96683f20;hpb=a41e7c198d4b694ce2f5af2e5a6b2ca255ed5819 diff --git a/dali-toolkit/internal/visuals/npatch-loader.cpp b/dali-toolkit/internal/visuals/npatch-loader.cpp index 6e3c8ec..5da7bd1 100644 --- a/dali-toolkit/internal/visuals/npatch-loader.cpp +++ b/dali-toolkit/internal/visuals/npatch-loader.cpp @@ -21,6 +21,7 @@ // EXTERNAL HEADER #include #include +#include namespace Dali { @@ -39,7 +40,7 @@ NPatchLoader::~NPatchLoader() { } -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; @@ -56,26 +57,62 @@ std::size_t NPatchLoader::Load( const std::string& url ) } } // 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; }