namespace Dali
{
-
namespace Toolkit
{
-
namespace NPatchUtility
{
-
namespace
{
-
-Uint16Pair ParseRange( uint32_t& index, uint32_t width, uint8_t*& pixel, uint32_t pixelStride, int32_t testByte, int32_t testBits, int32_t testValue )
+Uint16Pair ParseRange(uint32_t& index, uint32_t width, uint8_t*& pixel, uint32_t pixelStride, int32_t testByte, int32_t testBits, int32_t testValue)
{
- unsigned int start = 0xFFFF;
- for( ; index < width; ++index, pixel += pixelStride )
- {
- if( ( pixel[ testByte ] & testBits ) == testValue )
- {
- start = index;
- ++index;
- pixel += pixelStride;
- break;
- }
- }
+ unsigned int start = 0xFFFF;
+ for(; index < width; ++index, pixel += pixelStride)
+ {
+ if((pixel[testByte] & testBits) == testValue)
+ {
+ start = index;
+ ++index;
+ pixel += pixelStride;
+ break;
+ }
+ }
- unsigned int end = width;
- for( ; index < width; ++index, pixel += pixelStride )
- {
- if( ( pixel[ testByte ] & testBits ) != testValue )
- {
- end = index;
- ++index;
- pixel += pixelStride;
- break;
- }
- }
+ unsigned int end = width;
+ for(; index < width; ++index, pixel += pixelStride)
+ {
+ if((pixel[testByte] & testBits) != testValue)
+ {
+ end = index;
+ ++index;
+ pixel += pixelStride;
+ break;
+ }
+ }
- return Uint16Pair( start, end );
+ return Uint16Pair(start, end);
}
} // unnamed namespace
-void GetRedOffsetAndMask( Dali::Pixel::Format pixelFormat, int32_t& byteOffset, int32_t& bitMask )
+void GetRedOffsetAndMask(Dali::Pixel::Format pixelFormat, int32_t& byteOffset, int32_t& bitMask)
{
- switch( pixelFormat )
- {
- case Dali::Pixel::A8:
- case Dali::Pixel::L8:
- case Dali::Pixel::LA88:
- {
- byteOffset = 0;
- bitMask = 0;
- break;
- }
- case Dali::Pixel::RGB888:
- case Dali::Pixel::RGB8888:
- case Dali::Pixel::RGBA8888:
- {
- byteOffset = 0;
- bitMask = 0xFF;
- break;
- }
- case Dali::Pixel::BGR8888:
- case Dali::Pixel::BGRA8888:
- {
- byteOffset = 2;
- bitMask = 0xff;
- break;
- }
- case Dali::Pixel::RGB565:
- {
- byteOffset = 0;
- bitMask = 0xf8;
- break;
- }
- case Dali::Pixel::BGR565:
- {
- byteOffset = 1;
- bitMask = 0x1f;
- break;
- }
- case Dali::Pixel::RGBA4444:
- {
- byteOffset = 0;
- bitMask = 0xf0;
- break;
- }
- case Dali::Pixel::BGRA4444:
- {
- byteOffset = 1;
- bitMask = 0xf0;
- break;
- }
- case Dali::Pixel::RGBA5551:
- {
- byteOffset = 0;
- bitMask = 0xf8;
- break;
- }
- case Dali::Pixel::BGRA5551:
- {
- byteOffset = 1;
- bitMask = 0x1e;
- break;
- }
- case Dali::Pixel::INVALID:
- case Dali::Pixel::COMPRESSED_R11_EAC:
- case Dali::Pixel::COMPRESSED_SIGNED_R11_EAC:
- case Dali::Pixel::COMPRESSED_RG11_EAC:
- case Dali::Pixel::COMPRESSED_SIGNED_RG11_EAC:
- case Dali::Pixel::COMPRESSED_RGB8_ETC2:
- case Dali::Pixel::COMPRESSED_SRGB8_ETC2:
- case Dali::Pixel::COMPRESSED_RGB8_ETC1:
- case Dali::Pixel::COMPRESSED_RGB_PVRTC_4BPPV1:
- case Dali::Pixel::COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
- case Dali::Pixel::COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
- case Dali::Pixel::COMPRESSED_RGBA8_ETC2_EAC:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_4x4_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_5x4_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_5x5_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_6x5_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_6x6_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_8x5_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_8x6_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_8x8_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x5_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x6_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x8_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x10_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_12x10_KHR:
- case Dali::Pixel::COMPRESSED_RGBA_ASTC_12x12_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
- case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
- {
- DALI_LOG_ERROR("Pixel formats for compressed images are not compatible with simple masking-out of per-pixel alpha.\n");
- byteOffset=0;
- bitMask=0;
- break;
- }
- case Dali::Pixel::RGB16F:
- case Dali::Pixel::RGB32F:
- case Dali::Pixel::DEPTH_UNSIGNED_INT:
- case Dali::Pixel::DEPTH_FLOAT:
- case Dali::Pixel::DEPTH_STENCIL:
- {
- DALI_LOG_ERROR("Pixel format not compatible.\n");
- byteOffset=0;
- bitMask=0;
- break;
- }
- }
+ switch(pixelFormat)
+ {
+ case Dali::Pixel::A8:
+ case Dali::Pixel::L8:
+ case Dali::Pixel::LA88:
+ {
+ byteOffset = 0;
+ bitMask = 0;
+ break;
+ }
+ case Dali::Pixel::RGB888:
+ case Dali::Pixel::RGB8888:
+ case Dali::Pixel::RGBA8888:
+ {
+ byteOffset = 0;
+ bitMask = 0xFF;
+ break;
+ }
+ case Dali::Pixel::BGR8888:
+ case Dali::Pixel::BGRA8888:
+ {
+ byteOffset = 2;
+ bitMask = 0xff;
+ break;
+ }
+ case Dali::Pixel::RGB565:
+ {
+ byteOffset = 0;
+ bitMask = 0xf8;
+ break;
+ }
+ case Dali::Pixel::BGR565:
+ {
+ byteOffset = 1;
+ bitMask = 0x1f;
+ break;
+ }
+ case Dali::Pixel::RGBA4444:
+ {
+ byteOffset = 0;
+ bitMask = 0xf0;
+ break;
+ }
+ case Dali::Pixel::BGRA4444:
+ {
+ byteOffset = 1;
+ bitMask = 0xf0;
+ break;
+ }
+ case Dali::Pixel::RGBA5551:
+ {
+ byteOffset = 0;
+ bitMask = 0xf8;
+ break;
+ }
+ case Dali::Pixel::BGRA5551:
+ {
+ byteOffset = 1;
+ bitMask = 0x1e;
+ break;
+ }
+ case Dali::Pixel::INVALID:
+ case Dali::Pixel::COMPRESSED_R11_EAC:
+ case Dali::Pixel::COMPRESSED_SIGNED_R11_EAC:
+ case Dali::Pixel::COMPRESSED_RG11_EAC:
+ case Dali::Pixel::COMPRESSED_SIGNED_RG11_EAC:
+ case Dali::Pixel::COMPRESSED_RGB8_ETC2:
+ case Dali::Pixel::COMPRESSED_SRGB8_ETC2:
+ case Dali::Pixel::COMPRESSED_RGB8_ETC1:
+ case Dali::Pixel::COMPRESSED_RGB_PVRTC_4BPPV1:
+ case Dali::Pixel::COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case Dali::Pixel::COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case Dali::Pixel::COMPRESSED_RGBA8_ETC2_EAC:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_4x4_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_5x4_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_5x5_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_6x5_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_6x6_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_8x5_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_8x6_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_8x8_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x5_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x6_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x8_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_10x10_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_12x10_KHR:
+ case Dali::Pixel::COMPRESSED_RGBA_ASTC_12x12_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
+ case Dali::Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
+ {
+ DALI_LOG_ERROR("Pixel formats for compressed images are not compatible with simple masking-out of per-pixel alpha.\n");
+ byteOffset = 0;
+ bitMask = 0;
+ break;
+ }
+ case Dali::Pixel::RGB16F:
+ case Dali::Pixel::RGB32F:
+ case Dali::Pixel::DEPTH_UNSIGNED_INT:
+ case Dali::Pixel::DEPTH_FLOAT:
+ case Dali::Pixel::DEPTH_STENCIL:
+ {
+ DALI_LOG_ERROR("Pixel format not compatible.\n");
+ byteOffset = 0;
+ bitMask = 0;
+ break;
+ }
+ }
}
-void ParseBorders( Devel::PixelBuffer& pixelBuffer, StretchRanges& stretchPixelsX, StretchRanges& stretchPixelsY )
+void ParseBorders(Devel::PixelBuffer& pixelBuffer, StretchRanges& stretchPixelsX, StretchRanges& stretchPixelsY)
{
- stretchPixelsX.Clear();
- stretchPixelsY.Clear();
+ stretchPixelsX.Clear();
+ stretchPixelsY.Clear();
- Pixel::Format pixelFormat = pixelBuffer.GetPixelFormat();
+ Pixel::Format pixelFormat = pixelBuffer.GetPixelFormat();
- int32_t alphaByte = 0;
- int32_t alphaBits = 0;
- Pixel::GetAlphaOffsetAndMask( pixelFormat, alphaByte, alphaBits );
+ int32_t alphaByte = 0;
+ int32_t alphaBits = 0;
+ Pixel::GetAlphaOffsetAndMask(pixelFormat, alphaByte, alphaBits);
- int32_t testByte = alphaByte;
- int32_t testBits = alphaBits;
- int32_t testValue = alphaBits; // Opaque == stretch
- if( !alphaBits )
- {
- GetRedOffsetAndMask( pixelFormat, testByte, testBits );
- testValue = 0; // Black == stretch
- }
+ int32_t testByte = alphaByte;
+ int32_t testBits = alphaBits;
+ int32_t testValue = alphaBits; // Opaque == stretch
+ if(!alphaBits)
+ {
+ GetRedOffsetAndMask(pixelFormat, testByte, testBits);
+ testValue = 0; // Black == stretch
+ }
- uint32_t bytesPerPixel = Pixel::GetBytesPerPixel( pixelFormat );
- uint32_t width = pixelBuffer.GetWidth();
- uint32_t height = pixelBuffer.GetHeight();
- uint8_t* srcPixels = pixelBuffer.GetBuffer();
- uint32_t srcStride = width * bytesPerPixel;
+ uint32_t bytesPerPixel = Pixel::GetBytesPerPixel(pixelFormat);
+ uint32_t width = pixelBuffer.GetWidth();
+ uint32_t height = pixelBuffer.GetHeight();
+ uint8_t* srcPixels = pixelBuffer.GetBuffer();
+ uint32_t srcStride = width * bytesPerPixel;
- // TOP
- uint8_t* top = srcPixels + bytesPerPixel;
- uint32_t index = 0;
+ // TOP
+ uint8_t* top = srcPixels + bytesPerPixel;
+ uint32_t index = 0;
- for( ; index < width - 2; )
- {
- Uint16Pair range = ParseRange( index, width - 2, top, bytesPerPixel, testByte, testBits, testValue );
- if( range.GetX() != 0xFFFF )
- {
- stretchPixelsX.PushBack( range );
- }
- }
+ for(; index < width - 2;)
+ {
+ Uint16Pair range = ParseRange(index, width - 2, top, bytesPerPixel, testByte, testBits, testValue);
+ if(range.GetX() != 0xFFFF)
+ {
+ stretchPixelsX.PushBack(range);
+ }
+ }
- // LEFT
- uint8_t* left = srcPixels + srcStride;
- index = 0;
- for( ; index < height - 2; )
- {
- Uint16Pair range = ParseRange( index, height - 2, left, srcStride, testByte, testBits, testValue );
- if( range.GetX() != 0xFFFF )
- {
- stretchPixelsY.PushBack( range );
- }
- }
+ // LEFT
+ uint8_t* left = srcPixels + srcStride;
+ index = 0;
+ for(; index < height - 2;)
+ {
+ Uint16Pair range = ParseRange(index, height - 2, left, srcStride, testByte, testBits, testValue);
+ if(range.GetX() != 0xFFFF)
+ {
+ stretchPixelsY.PushBack(range);
+ }
+ }
- // If there are no stretch pixels then make the entire image stretchable
- if( stretchPixelsX.Size() == 0 )
- {
- stretchPixelsX.PushBack( Uint16Pair( 0, width - 2 ) );
- }
- if( stretchPixelsY.Size() == 0 )
- {
- stretchPixelsY.PushBack( Uint16Pair( 0, height - 2 ) );
- }
+ // If there are no stretch pixels then make the entire image stretchable
+ if(stretchPixelsX.Size() == 0)
+ {
+ stretchPixelsX.PushBack(Uint16Pair(0, width - 2));
+ }
+ if(stretchPixelsY.Size() == 0)
+ {
+ stretchPixelsY.PushBack(Uint16Pair(0, height - 2));
+ }
}
-bool IsNinePatchUrl( const std::string& url )
+bool IsNinePatchUrl(const std::string& url)
{
bool match = false;
std::string::const_reverse_iterator iter = url.rbegin();
- enum { SUFFIX, HASH, HASH_DOT, DONE } state = SUFFIX;
+ enum
+ {
+ SUFFIX,
+ HASH,
+ HASH_DOT,
+ DONE
+ } state = SUFFIX;
while(iter < url.rend())
{
switch(state)
break;
case HASH:
{
- if( *iter == '#' || *iter == '9' )
+ if(*iter == '#' || *iter == '9')
{
state = HASH_DOT;
}
}
// Satisfy prevent
- if( state == DONE )
+ if(state == DONE)
{
break;
}
return match;
}
-} // namespace NPatchBuffer
+} // namespace NPatchUtility
} // namespace Toolkit