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-Visual.cpp;h=6d88a5194b367b1406736419a2170c4a5a42232d;hp=b061cf1bc059cbec6059180b6fef61e1e1ed3acc;hb=984fcbe3031a3ce3142515c515ccef9112c33c65;hpb=92a400c3857fbf6c1e63693f22c94dcffe50e522 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index b061cf1..6d88a51 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -16,26 +16,78 @@ #include #include +#include + #include #include #include #include +#include #include +#include +#include +#include +#include #include +#include "dummy-control.h" using namespace Dali; using namespace Dali::Toolkit; namespace { -const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg"; +const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg"; const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg"; +const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif"; const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj"; const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl"; const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/"; + +const std::string DEFAULT_FONT_DIR( "/resources/fonts" ); + +Property::Map DefaultTransform() +{ + Property::Map transformMap; + transformMap + .Add( Toolkit::DevelVisual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) ) + .Add( Toolkit::DevelVisual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) ) + .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::CENTER ) + .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, Toolkit::Align::CENTER ) + .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4::ZERO ); + return transformMap; +} + +bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet ) +{ + if( fontStyleMapGet.Count() == fontStyleMapSet.Count() ) + { + for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index ) + { + const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index ); + + Property::Value* valueSet = fontStyleMapSet.Find( valueGet.first.stringKey ); + if( NULL != valueSet ) + { + if( valueGet.second.Get() != valueSet->Get() ) + { + tet_printf( " Value got : [%s], expected : [%s]", valueGet.second.Get().c_str(), valueSet->Get().c_str() ); + return false; + } + } + else + { + tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() ); + return false; + } + } + } + + return true; } +} //namespace + void dali_visual_startup(void) { test_return_value = TET_UNDEF; @@ -46,6 +98,19 @@ void dali_visual_cleanup(void) test_return_value = TET_PASS; } + +static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor ) +{ + Property::Map map; + visual.CreatePropertyMap(map); + Property::Value* value = map.Find( mixColorIndex ); + DALI_TEST_CHECK( value ); + Vector4 mixColor; + DALI_TEST_CHECK( value->Get( mixColor ) ); + DALI_TEST_EQUALS( mixColor, testColor, 0.001, TEST_LOCATION ); +} + + int UtcDaliVisualCopyAndAssignment(void) { ToolkitTestApplication application; @@ -79,6 +144,25 @@ int UtcDaliVisualCopyAndAssignment(void) END_TEST; } +int UtcDaliVisualSetName01(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetName" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base visual = factory.CreateVisual( propertyMap ); + + const char* visualName = "backgroundVisual"; + visual.SetName( visualName ); + + DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliVisualSetGetDepthIndex(void) { ToolkitTestApplication application; @@ -92,17 +176,20 @@ int UtcDaliVisualSetGetDepthIndex(void) visual.SetDepthIndex( 1.f ); - Actor actor = Actor::New(); - actor.SetSize(200.f, 200.f); - Stage::GetCurrent().Add( actor ); - visual.SetOnStage( actor ); + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + + dummyControl.SetSize(200.f, 200.f); + Stage::GetCurrent().Add( dummyControl ); + - int depthIndex = actor.GetRendererAt(0u).GetProperty( Renderer::Property::DEPTH_INDEX ); + int depthIndex = dummyControl.GetRendererAt(0u).GetProperty( Renderer::Property::DEPTH_INDEX ); DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION ); DALI_TEST_EQUALS( visual.GetDepthIndex(), 1.f, TEST_LOCATION ); visual.SetDepthIndex( -1.f ); - depthIndex = actor.GetRendererAt(0u).GetProperty( Renderer::Property::DEPTH_INDEX ); + depthIndex = dummyControl.GetRendererAt(0u).GetProperty( Renderer::Property::DEPTH_INDEX ); DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION ); DALI_TEST_EQUALS( visual.GetDepthIndex(), -1.f, TEST_LOCATION ); @@ -115,37 +202,29 @@ int UtcDaliVisualSize(void) tet_infoline( "UtcDaliVisualGetNaturalSize" ); VisualFactory factory = VisualFactory::Get(); - Vector2 visualSize( 20.f, 30.f ); + Vector2 controlSize( 20.f, 30.f ); Vector2 naturalSize; // color colorVisual Dali::Property::Map map; map[ Visual::Property::TYPE ] = Visual::COLOR; map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA; + Visual::Base colorVisual = factory.CreateVisual( map ); - colorVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( colorVisual.GetSize(), visualSize, TEST_LOCATION ); + colorVisual.SetTransformAndSize(DefaultTransform(), controlSize ); + colorVisual.GetNaturalSize(naturalSize); DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION ); // image visual Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200)); Visual::Base imageVisual = factory.CreateVisual( image ); - imageVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( imageVisual.GetSize(), visualSize, TEST_LOCATION ); + imageVisual.SetTransformAndSize(DefaultTransform(), controlSize ); + imageVisual.GetNaturalSize(naturalSize); DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION ); - // n patch visual - TestPlatformAbstraction& platform = application.GetPlatform(); - Vector2 testSize(80.f, 160.f); - platform.SetClosestImageSize(testSize); - image = ResourceImage::New(TEST_NPATCH_FILE_NAME); - Visual::Base nPatchVisual = factory.CreateVisual( image ); - nPatchVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( nPatchVisual.GetSize(), visualSize, TEST_LOCATION ); - nPatchVisual.GetNaturalSize(naturalSize); - DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION ); + // n patch visual is tested in the utc-Dali-VisualFactory.cpp // border visual float borderSize = 5.f; @@ -154,8 +233,7 @@ int UtcDaliVisualSize(void) map[ BorderVisual::Property::COLOR ] = Color::RED; map[ BorderVisual::Property::SIZE ] = borderSize; Visual::Base borderVisual = factory.CreateVisual( map ); - borderVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( borderVisual.GetSize(), visualSize, TEST_LOCATION ); + borderVisual.SetTransformAndSize(DefaultTransform(), controlSize ); borderVisual.GetNaturalSize(naturalSize); DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION ); @@ -164,23 +242,23 @@ int UtcDaliVisualSize(void) propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT); Vector2 start(-1.f, -1.f); Vector2 end(1.f, 1.f); - propertyMap.Insert(GradientVisual::Property::START_POSITION, start); - propertyMap.Insert(GradientVisual::Property::END_POSITION, end); - propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f)); + propertyMap.Insert( "mixColor", Color::MAGENTA ); + propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ; + propertyMap.Insert( GradientVisual::Property::END_POSITION, end ); + propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) ); + propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ; Property::Array stopColors; stopColors.PushBack( Color::RED ); stopColors.PushBack( Color::GREEN ); propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors); Visual::Base gradientVisual = factory.CreateVisual(propertyMap); - gradientVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( gradientVisual.GetSize(), visualSize, TEST_LOCATION ); + gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize ); gradientVisual.GetNaturalSize(naturalSize); DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION ); // svg visual Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() ); - svgVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( svgVisual.GetSize(), visualSize, TEST_LOCATION ); + svgVisual.SetTransformAndSize(DefaultTransform(), controlSize ); svgVisual.GetNaturalSize(naturalSize); // TEST_SVG_FILE: // @@ -188,17 +266,57 @@ int UtcDaliVisualSize(void) // DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); + // svg visual with a size + Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) ); + svgVisual2.GetNaturalSize(naturalSize); + DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100 + // Batch Image visual + TestPlatformAbstraction& platform = application.GetPlatform(); + Vector2 testSize(80.f, 160.f); + platform.SetClosestImageSize(testSize); propertyMap.Clear(); propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true ); + propertyMap.Insert( "batchingEnabled", true ); Visual::Base batchImageVisual = factory.CreateVisual( propertyMap ); - batchImageVisual.SetSize( visualSize ); - DALI_TEST_EQUALS( batchImageVisual.GetSize(), visualSize, TEST_LOCATION ); + batchImageVisual.SetTransformAndSize(DefaultTransform(), controlSize ); batchImageVisual.GetNaturalSize( naturalSize ); DALI_TEST_EQUALS( naturalSize, Vector2( 80.0f, 160.0f ), TEST_LOCATION ); + // Text visual. + + // Load some fonts to get the same metrics on different platforms. + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.SetDpi( 96u, 96u ); + + char* pathNamePtr = get_current_dir_name(); + const std::string pathName( pathNamePtr ); + free( pathNamePtr ); + + fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" ); + + propertyMap.Clear(); + propertyMap.Insert( Visual::Property::TYPE, DevelVisual::TEXT ); + propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true ); + propertyMap.Insert( TextVisual::Property::TEXT, "Hello world" ); + propertyMap.Insert( TextVisual::Property::MULTI_LINE, true ); + + Visual::Base textVisual = factory.CreateVisual( propertyMap ); + textVisual.GetNaturalSize( naturalSize ); + DALI_TEST_EQUALS( naturalSize, Size( 80.f, 20.f ), TEST_LOCATION ); + + const float height = textVisual.GetHeightForWidth( 40.f ); + DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION ); + + //AnimatedImageVisual + Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() ); + animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize ); + animatedImageVisual.GetNaturalSize(naturalSize); + // TEST_GIF_FILE: anim.gif + // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame + DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION ); + END_TEST; } @@ -213,64 +331,27 @@ int UtcDaliVisualSetOnOffStage(void) propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); Visual::Base visual = factory.CreateVisual( propertyMap ); - Actor actor = Actor::New(); - actor.SetSize(200.f, 200.f); - Stage::GetCurrent().Add( actor ); + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); - application.SendNotification(); - application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - - visual.SetOnStage( actor ); - application.SendNotification(); - application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + actor.SetSize(200.f, 200.f); - visual.SetOffStage( actor ); application.SendNotification(); application.Render(0); DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - END_TEST; -} - -int UtcDaliVisualRemoveAndReset(void) -{ - ToolkitTestApplication application; - tet_infoline( "intUtcDaliVisualRemoveAndReset" ); - - VisualFactory factory = VisualFactory::Get(); - - Actor actor = Actor::New(); - actor.SetSize(200.f, 200.f); Stage::GetCurrent().Add( actor ); - Visual::Base imageVisual; - // test calling RemoveAndReset with an empty handle - try - { - imageVisual.RemoveAndReset( actor ); - tet_result(TET_PASS); - } - catch (DaliException& exception) - { - tet_result(TET_FAIL); - } - - Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200)); - imageVisual = factory.CreateVisual(image); - DALI_TEST_CHECK( imageVisual ); - - imageVisual.SetOnStage( actor ); application.SendNotification(); application.Render(0); DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - imageVisual.RemoveAndReset( actor ); + Stage::GetCurrent().Remove( actor ); + application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); // visual is removed from actor - DALI_TEST_CHECK( !imageVisual ); // visual is reset + DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); END_TEST; } @@ -278,12 +359,12 @@ int UtcDaliVisualRemoveAndReset(void) int UtcDaliVisualGetPropertyMap1(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual" ); + tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" ); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); - propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + propertyMap.Insert(DevelVisual::Property::MIX_COLOR, Color::BLUE); Visual::Base colorVisual = factory.CreateVisual( propertyMap ); Property::Map resultMap; @@ -298,8 +379,6 @@ int UtcDaliVisualGetPropertyMap1(void) DALI_TEST_CHECK( colorValue->Get() == Color::BLUE ); // change the blend color - Actor actor; - colorVisual.RemoveAndReset( actor ); propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN; colorVisual = factory.CreateVisual( propertyMap ); colorVisual.CreatePropertyMap( resultMap ); @@ -319,8 +398,10 @@ int UtcDaliVisualGetPropertyMap2(void) VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER); - propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE); - propertyMap.Insert(BorderVisual::Property::SIZE, 5.f); + propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) ); + propertyMap.Insert("borderColor", Color::BLUE); + propertyMap.Insert("borderSize", 5.f); + propertyMap.Insert("antiAliasing", true); Visual::Base borderVisual = factory.CreateVisual( propertyMap ); Property::Map resultMap; @@ -339,6 +420,10 @@ int UtcDaliVisualGetPropertyMap2(void) DALI_TEST_CHECK( sizeValue ); DALI_TEST_CHECK( sizeValue->Get() == 5.f ); + Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN ); + DALI_TEST_CHECK( AAValue ); + DALI_TEST_CHECK( AAValue->Get() == true ); + Property::Map propertyMap1; propertyMap1[ Visual::Property::TYPE ] = Visual::BORDER; propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN; @@ -358,9 +443,34 @@ int UtcDaliVisualGetPropertyMap2(void) DALI_TEST_CHECK( colorValue ); DALI_TEST_CHECK( colorValue->Get() == 10.f ); + END_TEST; } +int UtcDaliVisualGetPropertyMap2N(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER); + Visual::Base borderVisual = factory.CreateVisual( propertyMap ); + + tet_infoline( "Test that the visual is created, with a default renderer" ); + DALI_TEST_CHECK( borderVisual ); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual ); + Stage::GetCurrent().Add( dummyControl ); + + DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION ); + + END_TEST; +} + + int UtcDaliVisualGetPropertyMap3(void) { ToolkitTestApplication application; @@ -374,9 +484,9 @@ int UtcDaliVisualGetPropertyMap3(void) Vector2 start(-1.f, -1.f); Vector2 end(1.f, 1.f); - propertyMap.Insert(GradientVisual::Property::START_POSITION, start); - propertyMap.Insert(GradientVisual::Property::END_POSITION, end); - propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT); + propertyMap.Insert( "startPosition", start); + propertyMap.Insert( "endPosition", end); + propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT); propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f)); @@ -507,14 +617,15 @@ int UtcDaliVisualGetPropertyMap5(void) VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::MAGENTA ); propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 ); propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 ); - propertyMap.Insert( ImageVisual::Property::FITTING_MODE, FittingMode::FIT_HEIGHT ); - propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE, SamplingMode::BOX_THEN_NEAREST ); - propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) ); - propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT ); - propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::MIRRORED_REPEAT ); + propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT ); + propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST ); + propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) ); + propertyMap.Insert( "wrapModeU", WrapMode::REPEAT ); + propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT ); propertyMap.Insert( "synchronousLoading", true ); Visual::Base imageVisual = factory.CreateVisual(propertyMap); @@ -532,6 +643,10 @@ int UtcDaliVisualGetPropertyMap5(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == TEST_IMAGE_FILE_NAME ); + value = resultMap.Find( DevelVisual::Property::MIX_COLOR, Property::VECTOR4 ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() == Color::MAGENTA ); + value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER ); DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == FittingMode::FIT_HEIGHT ); @@ -620,6 +735,7 @@ int UtcDaliVisualGetPropertyMap6(void) VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); + propertyMap.Insert( "mixColor", Color::MAGENTA ); propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME ); propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true ); Visual::Base nPatchVisual = factory.CreateVisual( propertyMap ); @@ -632,6 +748,10 @@ int UtcDaliVisualGetPropertyMap6(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == Visual::IMAGE ); + value = resultMap.Find( DevelVisual::Property::MIX_COLOR, Property::VECTOR4 ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() == Color::MAGENTA ); + value = resultMap.Find( ImageVisual::Property::URL, Property::STRING ); DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == TEST_NPATCH_FILE_NAME ); @@ -640,6 +760,7 @@ int UtcDaliVisualGetPropertyMap6(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() ); + END_TEST; } @@ -652,7 +773,8 @@ int UtcDaliVisualGetPropertyMap7(void) VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::WHITE ); + propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ); Visual::Base svgVisual = factory.CreateVisual( propertyMap ); Property::Map resultMap; @@ -692,6 +814,7 @@ int UtcDaliVisualGetPropertyMap8(void) VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert( Visual::Property::TYPE, Visual::MESH ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::BLUE ); propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME ); propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME ); propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION ); @@ -701,6 +824,7 @@ int UtcDaliVisualGetPropertyMap8(void) Property::Map resultMap; meshVisual.CreatePropertyMap( resultMap ); + TestMixColor( meshVisual, DevelVisual::Property::MIX_COLOR, Color::BLUE ); //Check values in the result map are identical to the initial map's values. Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER ); @@ -727,7 +851,7 @@ int UtcDaliVisualGetPropertyMap8(void) DALI_TEST_CHECK( value ); DALI_TEST_EQUALS( value->Get(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION ); - END_TEST; + END_TEST; } //Primitive shape visual @@ -744,7 +868,7 @@ int UtcDaliVisualGetPropertyMap9(void) Property::Map propertyMap; propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE ); - propertyMap.Insert( PrimitiveVisual::Property::COLOR, color ); + propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color ); propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 ); propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 ); propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f ); @@ -769,7 +893,7 @@ int UtcDaliVisualGetPropertyMap9(void) DALI_TEST_CHECK( value ); DALI_TEST_EQUALS( value->Get(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION ); - value = resultMap.Find( PrimitiveVisual::Property::COLOR, Property::VECTOR4 ); + value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 ); DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == color ); DALI_TEST_EQUALS( value->Get(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION ); @@ -856,6 +980,127 @@ int UtcDaliVisualGetPropertyMapBatchImageVisual(void) END_TEST; } +//Text shape visual +int UtcDaliVisualGetPropertyMap10(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" ); + + //Request PrimitiveVisual using a property map. + VisualFactory factory = VisualFactory::Get(); + + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, DevelVisual::TEXT ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::BLACK ); + propertyMap.Insert( "renderingBackend", static_cast( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) ); + propertyMap.Insert( "enableMarkup", false ); + propertyMap.Insert( "text", "Hello world" ); + propertyMap.Insert( "fontFamily", "TizenSans" ); + + Property::Map fontStyleMapSet; + fontStyleMapSet.Insert( "weight", "bold" ); + propertyMap.Insert( "fontStyle", fontStyleMapSet ); + + propertyMap.Insert( "pointSize", 12.f ); + propertyMap.Insert( "multiLine", true ); + propertyMap.Insert( "horizontalAlignment", "CENTER" ); + propertyMap.Insert( "verticalAlignment", "CENTER" ); + propertyMap.Insert( "textColor", Color::RED ); + Visual::Base textVisual = factory.CreateVisual( propertyMap ); + + Property::Map resultMap; + textVisual.CreatePropertyMap( resultMap ); + + //Check values in the result map are identical to the initial map's values. + Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), (int)DevelVisual::TEXT, TEST_LOCATION ); + + value = resultMap.Find( DevelVisual::Property::MIX_COLOR, Property::VECTOR4 ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), Color::BLACK, 0.001f, TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), "Hello world", TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), "TizenSans", TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP ); + DALI_TEST_CHECK( value ); + + Property::Map fontStyleMapGet = value->Get(); + DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION ); + DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() ); + + value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::STRING ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), "CENTER", TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::STRING ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), "CENTER", TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 ); + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), Color::RED, TEST_LOCATION ); + + value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( !value->Get() ); + + END_TEST; +} + +int UtcDaliVisualGetPropertyMap11(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetPropertyMap7: AnimatedImageVisual" ); + + // request SvgVisual with a property map + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + Visual::Base svgVisual = factory.CreateVisual( Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_GIF_FILE_NAME ) ); + + Property::Map resultMap; + svgVisual.CreatePropertyMap( resultMap ); + // check the property values from the returned map from a visual + Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() == Visual::IMAGE ); + + value = resultMap.Find( ImageVisual::Property::URL, Property::STRING ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() == TEST_GIF_FILE_NAME ); + + // request SvgVisual with an URL + Visual::Base svgVisual2 = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() ); + resultMap.Clear(); + svgVisual2.CreatePropertyMap( resultMap ); + // check the property values from the returned map from a visual + value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() == Visual::IMAGE ); + + value = resultMap.Find( ImageVisual::Property::URL, Property::STRING ); + DALI_TEST_CHECK( value ); + DALI_TEST_CHECK( value->Get() == TEST_GIF_FILE_NAME ); + + END_TEST; +} + int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void) { ToolkitTestApplication application; @@ -876,10 +1121,12 @@ int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void) DALI_TEST_CHECK( batchImageVisual ); - Actor actor = Actor::New(); - batchImageVisual.SetOnStage( actor ); + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, batchImageVisual ); + Stage::GetCurrent().Add( dummyControl ); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + DALI_TEST_CHECK( dummyControl.GetRendererCount() == 1u ); END_TEST; } @@ -892,40 +1139,68 @@ int UtcDaliVisualAnimateBorderVisual01(void) VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER); + propertyMap.Insert(DevelVisual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f)); propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE); propertyMap.Insert(BorderVisual::Property::SIZE, 5.f); Visual::Base borderVisual = factory.CreateVisual( propertyMap ); - Actor actor = Actor::New(); + Property::Map map; + map["target"] = "testVisual"; + map["property"] = "mixColor"; + map["targetValue"] = Vector4(1,1,1,0); + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map() + .Add("delay", 0.0f) + .Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New( map ); + + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual ); actor.SetSize(2000, 2000); actor.SetParentOrigin(ParentOrigin::CENTER); Stage::GetCurrent().Add(actor); - borderVisual.SetOnStage( actor ); DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0); - Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::COLOR ); + Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR ); + Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, DevelVisual::Property::MIX_COLOR ); - Animation animation = Animation::New(4.0f); - animation.AnimateTo( Property(renderer, index), Color::WHITE ); + Animation animation = dummyImpl.CreateTransition( transition ); + + // Animate the mix color through the transition, and the border color through + // programmatic method. + animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE ); animation.Play(); application.SendNotification(); application.Render(0); application.Render(2000u); // halfway point between blue and white - Vector4 color = renderer.GetProperty( index ); + Vector4 color = renderer.GetProperty( borderColorIndex ); Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f; DALI_TEST_EQUALS( color, testColor, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("borderColor", testColor ), true, TEST_LOCATION ); + color = renderer.GetProperty( mixColorIndex ); + testColor = Vector4( 1,1,1,0.4f ); + DALI_TEST_EQUALS( color, testColor, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", testColor ), true, TEST_LOCATION ); + application.Render(2000u); // halfway point between blue and white - color = renderer.GetProperty( index ); + color = renderer.GetProperty( borderColorIndex ); DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("borderColor", Color::WHITE ), true, TEST_LOCATION ); + color = renderer.GetProperty( mixColorIndex ); + testColor = Vector4(1,1,1,0); + DALI_TEST_EQUALS( color, testColor, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", testColor ), true, TEST_LOCATION ); + END_TEST; } @@ -942,16 +1217,17 @@ int UtcDaliVisualAnimateBorderVisual02(void) propertyMap.Insert(BorderVisual::Property::SIZE, 5.f); Visual::Base borderVisual = factory.CreateVisual( propertyMap ); - Actor actor = Actor::New(); + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual ); actor.SetSize(2000, 2000); actor.SetParentOrigin(ParentOrigin::CENTER); Stage::GetCurrent().Add(actor); - borderVisual.SetOnStage( actor ); DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0); - Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE ); + Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE ); Animation animation = Animation::New(4.0f); animation.AnimateTo( Property(renderer, index), 9.0f ); @@ -985,16 +1261,20 @@ int UtcDaliVisualAnimateColorVisual(void) propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); Visual::Base borderVisual = factory.CreateVisual( propertyMap ); - Actor actor = Actor::New(); + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual ); actor.SetSize(2000, 2000); actor.SetParentOrigin(ParentOrigin::CENTER); Stage::GetCurrent().Add(actor); - borderVisual.SetOnStage( actor ); DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0); - Property::Index index = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR ); + Property::Index index = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR ); + + Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); Animation animation = Animation::New(4.0f); animation.AnimateTo( Property(renderer, index), Color::WHITE ); @@ -1017,38 +1297,144 @@ int UtcDaliVisualAnimateColorVisual(void) DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", Color::WHITE ), true, TEST_LOCATION ); + blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); END_TEST; } - int UtcDaliVisualAnimatePrimitiveVisual(void) { ToolkitTestApplication application; tet_infoline( "UtcDaliAnimatePrimitiveVisual color" ); + { + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE); + propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE); + propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base visual = factory.CreateVisual( propertyMap ); + + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + actor.SetSize(2000, 2000); + actor.SetParentOrigin(ParentOrigin::CENTER); + actor.SetColor(Color::BLACK); + Stage::GetCurrent().Add(actor); + + DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); + + Renderer renderer = actor.GetRendererAt(0); + Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR ); + + tet_infoline("Test that the renderer has the Primitive mix color"); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + + const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha + const Vector4 TARGET_MIX_COLOR( Color::RED ); + + Property::Map map; + map["target"] = "testVisual"; + map["property"] = "mixColor"; + map["initialValue"] = INITIAL_MIX_COLOR; + map["targetValue"] = TARGET_MIX_COLOR; + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map() + .Add("delay", 0.0f) + .Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New( map ); + + Animation animation = dummyImpl.CreateTransition( transition ); + Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + + animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE ); + animation.Play(); + + application.SendNotification(); + application.Render(0); + application.Render(2000u); // halfway point + application.SendNotification(); + + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION ); + + Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5; + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", halfwayColor ), true, TEST_LOCATION ); + + application.Render(2001u); // go past end + application.SendNotification(); // Trigger signals + + DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("uColor", Color::WHITE ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", TARGET_MIX_COLOR ), true, TEST_LOCATION ); + + blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); + + actor.Unparent(); + } + + END_TEST; +} + +int UtcDaliVisualAnimateImageVisualMixColor(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliAnimateImageVisual mix color" ); + + application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); + VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); - propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); - Visual::Base borderVisual = factory.CreateVisual( propertyMap ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert("mixColor", Color::BLUE); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); + Visual::Base visual = factory.CreateVisual( propertyMap ); + + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); - Actor actor = Actor::New(); actor.SetSize(2000, 2000); actor.SetParentOrigin(ParentOrigin::CENTER); actor.SetColor(Color::BLACK); Stage::GetCurrent().Add(actor); - borderVisual.SetOnStage( actor ); DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0); - Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::COLOR ); + Property::Index index = DevelHandle::GetPropertyIndex( renderer, DevelVisual::Property::MIX_COLOR ); + Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); - // The property isn't registered on the renderer, it's instead registered on the shader. - DALI_TEST_EQUALS( index, Property::INVALID_INDEX, TEST_LOCATION ); + tet_infoline("Test that the renderer has the mixColor property"); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + + const Vector4 TARGET_MIX_COLOR( 1.0f, 0.0f, 0.0f, 0.5f ); + + Property::Map map; + map["target"] = "testVisual"; + map["property"] = "mixColor"; + map["initialValue"] = Color::MAGENTA; + map["targetValue"] = TARGET_MIX_COLOR; + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map() + .Add("delay", 0.0f) + .Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New( map ); + + Animation animation = dummyImpl.CreateTransition( transition ); + + blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); - Animation animation = Animation::New(4.0f); animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE ); animation.Play(); @@ -1056,18 +1442,87 @@ int UtcDaliVisualAnimatePrimitiveVisual(void) application.Render(0); application.Render(2000u); // halfway point - // Actor color overrides renderer color. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", Vector4(1.0f, 0.0f, 0.5f, 0.75f )), true, TEST_LOCATION ); application.Render(2000u); // halfway point between blue and white DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("uColor", Color::WHITE ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("mixColor", TARGET_MIX_COLOR), true, TEST_LOCATION ); + + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, TARGET_MIX_COLOR ); + + blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); + DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliVisualAnimateImageVisualPixelArea(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliAnimateImageVisual pixel area" ); + + application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert("mixColor", Color::BLUE); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); + Visual::Base visual = factory.CreateVisual( propertyMap ); + + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + + actor.SetSize(2000, 2000); + actor.SetParentOrigin(ParentOrigin::CENTER); + actor.SetColor(Color::BLACK); + Stage::GetCurrent().Add(actor); + + DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); + + Renderer renderer = actor.GetRendererAt(0); + Property::Index index = DevelHandle::GetPropertyIndex( renderer, DevelVisual::Property::MIX_COLOR ); + + tet_infoline("Test that the renderer has the mixColor property"); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + + // TransitionData only takes string keys + Property::Map map; + map["target"] = "testVisual"; + map["property"] = "pixelArea"; + map["initialValue"] = Vector4( 0,0,0,1 ); + map["targetValue"] = Vector4( 0,0,1,1 ); // Animate width from zero to full + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map() + .Add("delay", 0.0f) + .Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New( map ); + + Animation animation = dummyImpl.CreateTransition( transition ); + animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE ); + animation.Play(); + + application.SendNotification(); + application.Render(0); + application.Render(2000u); // halfway point + + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("pixelArea", Vector4(0.0f, 0.0f, 0.5f, 1.0f )), true, TEST_LOCATION ); + application.Render(2000u); + + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("pixelArea", Vector4( 0.0f, 0.0f, 1.0f, 1.0f )), true, TEST_LOCATION ); END_TEST; } + int UtcDaliVisualWireframeVisual(void) { ToolkitTestApplication application; @@ -1088,5 +1543,591 @@ int UtcDaliVisualWireframeVisual(void) Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER ); DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == Visual::WIREFRAME ); + + END_TEST; +} + +int UtcDaliVisualGetTransform(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base colorVisual = factory.CreateVisual( propertyMap ); + + Dali::Property::Map visualMap; + colorVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( Dali::Toolkit::DevelVisual::Property::TRANSFORM ); + Dali::Property::Map* map = value->GetMap(); + DALI_TEST_CHECK( map ); + + //Test default values + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::OFFSET ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector2(0.0f,0.0f) ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::SIZE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector2(1.0f,1.0f) ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector4(0.0f,0.0f,0.0f,0.0f) ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::ORIGIN ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get() == Toolkit::Align::CENTER ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get() == Toolkit::Align::CENTER ); + } + + END_TEST; +} + +static void TestTransform( ToolkitTestApplication& application, Visual::Base visual ) +{ + Property::Map transform; + transform.Insert( DevelVisual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) ); + transform.Insert( DevelVisual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) ); + transform.Insert( DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4(1.0f, 1.0f, 0.0f,0.0f) ); + transform.Insert( DevelVisual::Transform::Property::ORIGIN, "TOP_BEGIN" ); + transform.Insert( DevelVisual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END ); + + visual.SetTransformAndSize( transform, Vector2(100, 100) ); + + Dali::Property::Map visualMap; + visual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( Dali::Toolkit::DevelVisual::Property::TRANSFORM ); + Dali::Property::Map* map = value->GetMap(); + DALI_TEST_CHECK( map ); + + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::OFFSET ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(),Vector2(10.0f,10.0f), TEST_LOCATION ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::SIZE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(), Vector2(0.2f,0.2f), TEST_LOCATION ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(), Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::ORIGIN ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get(), Toolkit::Align::TOP_BEGIN, TEST_LOCATION ); + } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get(), Toolkit::Align::BOTTOM_END, TEST_LOCATION ); + } + + //Put the visual on the stage + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + actor.SetSize(2000, 2000); + actor.SetParentOrigin(ParentOrigin::CENTER); + Stage::GetCurrent().Add(actor); + + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform ); + + application.SendNotification(); + application.Render(0); + Renderer renderer( actor.GetRendererAt(0) ); + + //Check that the properties have been registered on the Renderer + Property::Index index = renderer.GetPropertyIndex( "offset" ); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + Vector2 offset = renderer.GetProperty( index ); + DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION ); + + index = renderer.GetPropertyIndex( "size" ); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + Vector2 size = renderer.GetProperty( index ); + DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION ); + + index = renderer.GetPropertyIndex( "offsetSizeMode" ); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + Vector4 offsetSizeMode = renderer.GetProperty( index ); + DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION ); + + index = renderer.GetPropertyIndex( "origin" ); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + Vector2 parentOrigin = renderer.GetProperty( index ); + DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION ); + + index = renderer.GetPropertyIndex( "anchorPoint" ); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + Vector2 anchorPoint = renderer.GetProperty( index ); + DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION ); + + //Set a new transform + transform.Clear(); + transform.Insert( DevelVisual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) ); + transform.Insert( DevelVisual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) ); + transform.Insert( DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4(0.0f, 0.0f, 1.0f,1.0f) ); + visual.SetTransformAndSize( transform, Vector2(100, 100) ); + application.SendNotification(); + application.Render(0); + + //Check that the values have changed in the renderer + offset = renderer.GetProperty( renderer.GetPropertyIndex( "offset" ) ); + DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION ); + + size = renderer.GetProperty( renderer.GetPropertyIndex( "size" ) ); + DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION ); + + offsetSizeMode = renderer.GetProperty( renderer.GetPropertyIndex( "offsetSizeMode" ) ); + DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION ); + + //Parent origin and anchor point should have default values + parentOrigin = renderer.GetProperty( renderer.GetPropertyIndex( "origin" ) ); + DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION ); + + anchorPoint = renderer.GetProperty( renderer.GetPropertyIndex( "anchorPoint" ) ); + DALI_TEST_EQUALS( anchorPoint, Vector2(0.0f,0.0f), TEST_LOCATION ); +} + +int UtcDaliVisualSetTransform0(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE ); + + END_TEST; +} + +int UtcDaliVisualSetTransform1(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap[ Visual::Property::TYPE ] = Visual::PRIMITIVE; + propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE; + propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE; + propertyMap[ PrimitiveVisual::Property::SLICES ] = 10; + propertyMap[ PrimitiveVisual::Property::STACKS ] = 10; + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE ); + + END_TEST; +} + +int UtcDaliVisualSetTransform2(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::GRADIENT ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::GREEN ); + + Property::Array stopOffsets; + stopOffsets.PushBack( 0.0f ); + stopOffsets.PushBack( 0.3f ); + stopOffsets.PushBack( 0.6f ); + stopOffsets.PushBack( 0.8f ); + stopOffsets.PushBack( 1.0f ); + propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets ); + + Property::Array stopColors; + stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f ); + stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f ); + stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f ); + stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f ); + stopColors.PushBack( Color::YELLOW ); + propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors ); + propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) ); + propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f ); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::GREEN ); + + END_TEST; +} + +int UtcDaliVisualSetTransform3(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::BORDER ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::MAGENTA ); + propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) ); + propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f ); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::MAGENTA ); + + END_TEST; +} + +int UtcDaliVisualSetTransform4(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::MESH ); + propertyMap.Insert( DevelVisual::Property::MIX_COLOR, Color::CYAN ); + + propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); + propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); + propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION ); + propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING ); + propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) ); + Visual::Base visual = factory.CreateVisual( propertyMap ); + TestTransform( application, visual ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::CYAN ); + + END_TEST; +} + +int UtcDaliVisualSetTransform5(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" ); + + VisualFactory factory = VisualFactory::Get(); + Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200)); + Visual::Base visual = factory.CreateVisual(image); + TestTransform( application, visual ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::WHITE ); + + END_TEST; +} + +int UtcDaliVisualSetTransform6(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE; + propertyMap[DevelVisual::Property::MIX_COLOR] = Color::YELLOW; + propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME; + propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f; + propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f; + propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL; + propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR; + propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true; + Visual::Base visual = factory.CreateVisual(propertyMap); + TestTransform( application, visual ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::YELLOW ); + + END_TEST; +} + +int UtcDaliVisualSetTransform7(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" ); + + VisualFactory factory = VisualFactory::Get(); + Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200)); + Visual::Base visual = factory.CreateVisual(image); + TestTransform( application, visual ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::WHITE ); + + END_TEST; +} + +int UtcDaliNPatchVisualCustomShader(void) +{ + ToolkitTestApplication application; + tet_infoline( "NPatchVisual with custom shader" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map properties; + Property::Map shader; + const std::string fragmentShader = "Foobar"; + shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader; + + Property::Map transformMap; + transformMap["size"] = Vector2( 0.5f, 0.5f ) ; + transformMap["offset"] = Vector2( 20.0f, 0.0f ) ; + transformMap["offsetSizeMode"] = Vector4( 1.0f, 1.0f, 0.0f, 0.0f ); + transformMap["anchorPoint"] = Align::CENTER; + transformMap["origin"] = Align::CENTER; + properties[DevelVisual::Property::TRANSFORM] = transformMap; + + properties[Visual::Property::TYPE] = Visual::IMAGE; + properties[DevelVisual::Property::MIX_COLOR] = Color::BLUE; + properties[Visual::Property::SHADER]=shader; + properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME; + + Visual::Base visual = factory.CreateVisual( properties ); + TestMixColor( visual, DevelVisual::Property::MIX_COLOR, Color::BLUE ); + + // trigger creation through setting on stage + DummyControl dummy = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummy.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap ); + dummy.SetSize(2000, 2000); + dummy.SetParentOrigin(ParentOrigin::CENTER); + Stage::GetCurrent().Add(dummy); + application.SendNotification(); + + Renderer renderer = dummy.GetRendererAt( 0 ); + Shader shader2 = renderer.GetShader(); + Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM ); + Property::Map* map = value.GetMap(); + DALI_TEST_CHECK( map ); + + Property::Index index = renderer.GetPropertyIndex("size"); + DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION ); + + Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp + // *map["vertex"]; is default here so not verifying it + + DALI_TEST_EQUALS( fragmentShader, fragment->Get(), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliGradientVisualBlendMode(void) +{ + ToolkitTestApplication application; + VisualFactory factory = VisualFactory::Get(); + + Visual::Base opaqueGradientVisual = factory.CreateVisual( + Property::Map().Add( Visual::Property::TYPE, Visual::GRADIENT ) + .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) ) + .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) ) + .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED ) + .Add( Color::GREEN ) ) ); + + Visual::Base alphaGradientVisual = factory.CreateVisual( + Property::Map().Add( Visual::Property::TYPE, Visual::GRADIENT ) + .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) ) + .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) ) + .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED ) + .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) ); + + DummyControl control = DummyControl::New(true); + control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + Stage::GetCurrent().Add( control ); + + Impl::DummyControl& dummyImpl = static_cast( control.GetImplementation() ); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual ); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual ); + + application.SendNotification(); + application.Render(); + + // Control should have two renderers, the first one is opaque so our blending mode should be off, the second one has some alpha so should be set to automatic + DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION ); + DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get(), (int)BlendMode::OFF, TEST_LOCATION ); + DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get(), (int)BlendMode::AUTO, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliVisualRendererRemovalAndReAddition(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualRendererRemoval" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); + propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE); + Visual::Base visual = factory.CreateVisual( propertyMap ); + + visual.SetDepthIndex( 1.f ); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION ); + + dummyControl.SetSize(200.f, 200.f); + tet_infoline( "Add control with visual to stage and check renderer count is 1" ); + + Stage::GetCurrent().Add( dummyControl ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION ); + + tet_infoline( "Remove control with visual from stage and check renderer count is 0" ); + Stage::GetCurrent().Remove( dummyControl ); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION ); + + tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" ); + + Stage::GetCurrent().Add( dummyControl ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION ); + + END_TEST; +} + + + +int UtcDaliVisualTextVisualRender(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualTextVisualRender" ); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, DevelVisual::TEXT ); + propertyMap.Insert( "mixColor", Color::WHITE ); + propertyMap.Insert( "renderingBackend", static_cast( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) ); + propertyMap.Insert( "enableMarkup", false ); + propertyMap.Insert( "text", "Hello world" ); + propertyMap.Insert( "fontFamily", "TizenSans" ); + + Property::Map fontStyleMapSet; + fontStyleMapSet.Insert( "weight", "bold" ); + propertyMap.Insert( "fontStyle", fontStyleMapSet ); + + propertyMap.Insert( "pointSize", 12.f ); + propertyMap.Insert( "multiLine", true ); + propertyMap.Insert( "horizontalAlignment", "CENTER" ); + propertyMap.Insert( "verticalAlignment", "CENTER" ); + propertyMap.Insert( "textColor", Color::RED ); + Visual::Base textVisual = factory.CreateVisual( propertyMap ); + textVisual.SetDepthIndex( 1.f ); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual ); + DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION ); + + dummyControl.SetSize(200.f, 200.f); + dummyControl.SetParentOrigin( ParentOrigin::CENTER ); + + Stage::GetCurrent().Add( dummyControl ); + application.SendNotification(); + application.Render(); + + + // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage. + propertyMap.Clear(); + propertyMap.Insert( Visual::Property::TYPE, DevelVisual::TEXT ); + propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true ); + propertyMap.Insert( TextVisual::Property::TEXT, "Hello world" ); + propertyMap.Insert( TextVisual::Property::MULTI_LINE, true ); + + Property::Map transformMap; + transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) ); + propertyMap.Insert( DevelVisual::Property::TRANSFORM, transformMap ); + + textVisual = factory.CreateVisual( propertyMap ); + textVisual.SetDepthIndex( 1.f ); + + dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual ); + dummyControl.SetSize( 720.f, 640.f ); + + application.SendNotification(); // force process events to ensure text visual + // adds renderer to the dummy control in OnRelayout + application.Render(); + + Renderer renderer = dummyControl.GetRendererAt(0u); + Property::Index index = renderer.GetPropertyIndex("size"); + + tet_infoline( "Test that the TextVisual overrides anything set by developer" ); + DALI_TEST_EQUALS( renderer.GetProperty(index), Vector2( 1.0, 1.0 ), 0.001f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliVisualPremultipliedAlpha(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualPremultipliedAlpha" ); + + VisualFactory factory = VisualFactory::Get(); + + // image visual, test default value ( false ) + { + Visual::Base imageVisual = factory.CreateVisual( + Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) ); + + Dali::Property::Map visualMap; + imageVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( DevelVisual::Property::PREMULTIPLIED_ALPHA ); + + // test values + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), false, TEST_LOCATION ); + } + + // image visual, override premultiplied + { + Visual::Base imageVisual = factory.CreateVisual( + Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) + .Add( DevelVisual::Property::PREMULTIPLIED_ALPHA, true ) ); + + Dali::Property::Map visualMap; + imageVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( DevelVisual::Property::PREMULTIPLIED_ALPHA ); + + // test values + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), true, TEST_LOCATION); + } + + // svg visual ( premultiplied alpha by default is true ) + { + Visual::Base imageVisual = factory.CreateVisual( + Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) ); + + Dali::Property::Map visualMap; + imageVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( DevelVisual::Property::PREMULTIPLIED_ALPHA ); + + // test values + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), true, TEST_LOCATION ); + } + END_TEST; }