From: Paul Wisbey Date: Tue, 4 Aug 2015 15:18:21 +0000 (-0700) Subject: Merge "Stop CreateSolidActor from creating an RGBA BufferImage when it isn't needed... X-Git-Tag: dali_1.0.52~5 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=88e08dd541d5441bd0b6661e392621c1d6ba4d6a;hp=ed6f7e547ef5521918a16b4e39c405ffba478e5f Merge "Stop CreateSolidActor from creating an RGBA BufferImage when it isn't needed" into devel/master --- diff --git a/dali-toolkit/public-api/controls/default-controls/solid-color-actor.cpp b/dali-toolkit/public-api/controls/default-controls/solid-color-actor.cpp index 5bf8561..2f849bb 100644 --- a/dali-toolkit/public-api/controls/default-controls/solid-color-actor.cpp +++ b/dali-toolkit/public-api/controls/default-controls/solid-color-actor.cpp @@ -42,7 +42,16 @@ ImageActor CreateSolidColorActor( const Vector4& color, bool border, const Vecto } const unsigned int bitmapWidth = borderSize * 2 + 2; - BufferImage imageData = BufferImage::New( bitmapWidth, bitmapWidth, Pixel::RGBA8888 ); + bool needAlphaChannel = (color.a < 1.0f) || ( border && borderColor.a < 1.0f ); + BufferImage imageData; + if( needAlphaChannel ) + { + imageData = BufferImage::New( bitmapWidth, bitmapWidth, Pixel::RGBA8888 ); + } + else + { + imageData = BufferImage::New( bitmapWidth, bitmapWidth, Pixel::RGB888 ); + } // Create the image PixelBuffer* pixbuf = imageData.GetBuffer(); @@ -65,24 +74,48 @@ ImageActor CreateSolidColorActor( const Vector4& color, bool border, const Vecto const unsigned int bottomLeft = bitmapWidth * (borderSize + 1) + borderSize; const unsigned int bottomRight = bottomLeft + 1; - for( size_t i = 0; i < bitmapSize; ++i ) + if( needAlphaChannel ) { - if( i == topLeft || - i == topRight || - i == bottomLeft || - i == bottomRight ) + for( size_t i = 0; i < bitmapSize; ++i ) { - pixbuf[i*4+0] = 0xFF * color.r; - pixbuf[i*4+1] = 0xFF * color.g; - pixbuf[i*4+2] = 0xFF * color.b; - pixbuf[i*4+3] = 0xFF * color.a; + if( i == topLeft || + i == topRight || + i == bottomLeft || + i == bottomRight ) + { + pixbuf[i*4+0] = 0xFF * color.r; + pixbuf[i*4+1] = 0xFF * color.g; + pixbuf[i*4+2] = 0xFF * color.b; + pixbuf[i*4+3] = 0xFF * color.a; + } + else + { + pixbuf[i*4+0] = 0xFF * outerColor.r; + pixbuf[i*4+1] = 0xFF * outerColor.g; + pixbuf[i*4+2] = 0xFF * outerColor.b; + pixbuf[i*4+3] = 0xFF * outerColor.a; + } } - else + } + else + { + for( size_t i = 0; i < bitmapSize; ++i ) { - pixbuf[i*4+0] = 0xFF * outerColor.r; - pixbuf[i*4+1] = 0xFF * outerColor.g; - pixbuf[i*4+2] = 0xFF * outerColor.b; - pixbuf[i*4+3] = 0xFF * outerColor.a; + if( i == topLeft || + i == topRight || + i == bottomLeft || + i == bottomRight ) + { + pixbuf[i*3+0] = 0xFF * color.r; + pixbuf[i*3+1] = 0xFF * color.g; + pixbuf[i*3+2] = 0xFF * color.b; + } + else + { + pixbuf[i*3+0] = 0xFF * outerColor.r; + pixbuf[i*3+1] = 0xFF * outerColor.g; + pixbuf[i*3+2] = 0xFF * outerColor.b; + } } }