X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-ImageAtlas.cpp;h=cca026f4ac49a8be1b58c581b2ebd4033dc312c2;hp=0bee5e58a3bf375204477b45a2a5fdd006ae328d;hb=9795d65d103bdf0524aa92e96475019eff2705f3;hpb=be7711b99f7e5db0b712194636745045d4da1154 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageAtlas.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageAtlas.cpp index 0bee5e5..cca026f 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageAtlas.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageAtlas.cpp @@ -21,7 +21,10 @@ #include #include #include +#include + #include +#include using namespace Dali; using namespace Dali::Toolkit; @@ -40,14 +43,35 @@ static const char* gImageNonExist = "non-exist.jpg"; const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS) +PixelData CreatePixelData( unsigned int width, unsigned int height ) +{ + unsigned int bufferSize = width*height*Pixel::GetBytesPerPixel( Pixel::RGBA8888 ); + + unsigned char* buffer= reinterpret_cast( malloc( bufferSize ) ); + PixelData pixelData = PixelData::New( buffer, bufferSize, width, height, Pixel::RGBA8888, PixelData::FREE ); + + return pixelData; +} + Rect TextureCoordinateToPixelArea( const Vector4& textureCoordinate, float size ) { Vector4 temp = textureCoordinate * size; Rect pixelArea; pixelArea.x = static_cast( temp.x ); pixelArea.y = static_cast( temp.y ); - pixelArea.width = static_cast( temp.z-temp.x+1.f ); - pixelArea.height = static_cast( temp.w-temp.y+1.f ); + pixelArea.width = static_cast( temp.z-temp.x+1.01f ); + pixelArea.height = static_cast( temp.w-temp.y+1.01f ); + + return pixelArea; +} + +Rect TextureCoordinateToPixelArea( const Vector4& textureCoordinate, float width, float height ) +{ + Rect pixelArea; + pixelArea.x = static_cast( textureCoordinate.x*width ); + pixelArea.y = static_cast( textureCoordinate.y*height); + pixelArea.width = static_cast( (textureCoordinate.z-textureCoordinate.x)*width+1.01f ); + pixelArea.height = static_cast( (textureCoordinate.w-textureCoordinate.y)*height+1.01f ); return pixelArea; } @@ -369,8 +393,25 @@ int UtcDaliImageAtlasImageView(void) callStack.Reset(); callStack.Enable(true); - ImageView imageView1 = ImageView::New( gImage_34_RGBA, ImageDimensions(34, 34) ); - ImageView imageView2 = ImageView::New( gImage_50_RGBA, ImageDimensions(50, 50) ); + Property::Map imageMap1; + + imageMap1[ ImageVisual::Property::URL ] = gImage_34_RGBA; + imageMap1[ ImageVisual::Property::DESIRED_HEIGHT ] = 34; + imageMap1[ ImageVisual::Property::DESIRED_WIDTH ] = 34; + imageMap1[ DevelImageVisual::Property::ATLASING] = true; + + Property::Map imageMap2; + + imageMap2[ ImageVisual::Property::URL ] = gImage_50_RGBA; + imageMap2[ ImageVisual::Property::DESIRED_HEIGHT ] = 50; + imageMap2[ ImageVisual::Property::DESIRED_WIDTH ] = 50; + imageMap2[ DevelImageVisual::Property::ATLASING ] = true; + + ImageView imageView1 = ImageView::New(); + imageView1.SetProperty( ImageView::Property::IMAGE, imageMap1 ); + + ImageView imageView2 = ImageView::New(); + imageView2.SetProperty( ImageView::Property::IMAGE, imageMap2 ); // ImageView doesn't do size negotiation properly: it only listens to OnSizeSet: imageView1.SetSize( 100, 100 ); @@ -413,11 +454,20 @@ int UtcDaliImageAtlasImageView(void) Stage::GetCurrent().Remove( imageView2 ); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - ImageView imageView3 = ImageView::New( gImage_128_RGB, ImageDimensions(100, 100) ); + + Property::Map imageMap3; + imageMap3[ ImageVisual::Property::URL ] = gImage_128_RGB; + imageMap3[ ImageVisual::Property::DESIRED_HEIGHT ] = 100; + imageMap3[ ImageVisual::Property::DESIRED_WIDTH ] = 100; + imageMap3[ DevelImageVisual::Property::ATLASING ] = true; + + ImageView imageView3 = ImageView::New(); + imageView3.SetProperty( ImageView::Property::IMAGE, imageMap3 ); + application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); Stage::GetCurrent().Add( imageView3 ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 3 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); @@ -434,3 +484,56 @@ int UtcDaliImageAtlasImageView(void) END_TEST; } + +int UtcDaliImageAtlasPackToAtlas(void) +{ + ToolkitTestApplication application; + + std::vector pixelDataContainer; + pixelDataContainer.push_back( CreatePixelData( 20, 30 ) ); + pixelDataContainer.push_back( CreatePixelData( 10, 10 ) ); + pixelDataContainer.push_back( CreatePixelData( 45, 30 ) ); + pixelDataContainer.push_back( CreatePixelData( 20, 20 ) ); + + Dali::Vector textureRects; + Texture texture = ImageAtlas::PackToAtlas( pixelDataContainer, textureRects ); + + // -------------- + // | | + // | 45*30 | +// | | +// -------------- +// | 20 | | 20*20 +// | * |____| +// | 30 | | 10*10 +// -------- + + DALI_TEST_EQUALS( texture.GetWidth(), 45, TEST_LOCATION ); + DALI_TEST_EQUALS( texture.GetHeight(), 60, TEST_LOCATION ); + + Rect pixelArea = TextureCoordinateToPixelArea(textureRects[0], texture.GetWidth(), texture.GetHeight()); + DALI_TEST_EQUALS( pixelArea.x, 0, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.y, 30, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.width, 20, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.height, 30, TEST_LOCATION ); + + pixelArea = TextureCoordinateToPixelArea(textureRects[1], texture.GetWidth(), texture.GetHeight()); + DALI_TEST_EQUALS( pixelArea.x, 20, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.y, 50, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.width, 10, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.height, 10, TEST_LOCATION ); + + pixelArea = TextureCoordinateToPixelArea(textureRects[2], texture.GetWidth(), texture.GetHeight()); + DALI_TEST_EQUALS( pixelArea.x, 0, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.y, 0, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.width, 45, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.height, 30, TEST_LOCATION ); + + pixelArea = TextureCoordinateToPixelArea(textureRects[3], texture.GetWidth(), texture.GetHeight()); + DALI_TEST_EQUALS( pixelArea.x, 20, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.y, 30, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.width, 20, TEST_LOCATION ); + DALI_TEST_EQUALS( pixelArea.height, 20, TEST_LOCATION ); + + END_TEST; +}