2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali/devel-api/object/handle-devel.h>
24 #include <dali/devel-api/text-abstraction/font-client.h>
25 #include <dali-toolkit/devel-api/controls/control-devel.h>
26 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
27 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
28 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
29 #include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
31 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
32 #include <dali-toolkit/devel-api/visuals/text-visual-properties-devel.h>
33 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
34 #include <dali-toolkit/dali-toolkit.h>
36 #include "dummy-control.h"
39 using namespace Dali::Toolkit;
43 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
44 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
45 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
46 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
47 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
48 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
49 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
52 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
54 Property::Map DefaultTransform()
56 Property::Map transformMap;
58 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
59 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
60 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
61 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
62 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
63 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
67 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
69 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
71 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
73 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
75 Property::Value* valueSet = NULL;
76 if ( valueGet.first.type == Property::Key::INDEX )
78 valueSet = fontStyleMapSet.Find( valueGet.first.indexKey );
82 // Get Key is a string so searching Set Map for a string key
83 valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
86 if( NULL != valueSet )
88 if( valueSet->GetType() == Dali::Property::STRING && ( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() ) )
90 tet_printf( "Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
93 else if( valueSet->GetType() == Dali::Property::BOOLEAN && ( valueGet.second.Get<bool>() != valueSet->Get<bool>() ) )
95 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>() );
98 else if( valueSet->GetType() == Dali::Property::INTEGER && ( valueGet.second.Get<int>() != valueSet->Get<int>() ) )
100 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>() );
103 else if( valueSet->GetType() == Dali::Property::FLOAT && ( valueGet.second.Get<float>() != valueSet->Get<float>() ) )
105 tet_printf( "Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>() );
108 else if( valueSet->GetType() == Dali::Property::VECTOR2 && ( valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>() ) )
110 Vector2 vector2Get = valueGet.second.Get<Vector2>();
111 Vector2 vector2Set = valueSet->Get<Vector2>();
112 tet_printf( "Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y );
115 else if( valueSet->GetType() == Dali::Property::VECTOR4 && ( valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>() ) )
117 Vector4 vector4Get = valueGet.second.Get<Vector4>();
118 Vector4 vector4Set = valueSet->Get<Vector4>();
119 tet_printf( "Value got : [%f, %f, %f, %f], expected : [%f, %f, %f, %f]", vector4Get.r, vector4Get.g, vector4Get.b, vector4Get.a, vector4Set.r, vector4Set.g, vector4Set.b, vector4Set.a );
125 if ( valueGet.first.type == Property::Key::INDEX )
127 tet_printf( " The key %d doesn't exist.", valueGet.first.indexKey );
131 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
141 void PrepareResourceImage( ToolkitTestApplication& application, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
143 TestPlatformAbstraction& platform = application.GetPlatform();
144 platform.SetClosestImageSize(Vector2( imageWidth, imageHeight));
146 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
147 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
148 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
149 unsigned int initialColor = 0xFF;
150 memset( pixbuffer, initialColor, imageHeight*imageWidth*bytesPerPixel);
152 Integration::ResourcePointer resourcePtr(bitmap);
153 platform.SetSynchronouslyLoadedResource( resourcePtr );
157 void dali_visual_startup(void)
159 test_return_value = TET_UNDEF;
162 void dali_visual_cleanup(void)
164 test_return_value = TET_PASS;
168 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
171 visual.CreatePropertyMap(map);
172 Property::Value* value = map.Find( mixColorIndex );
173 DALI_TEST_CHECK( value );
175 DALI_TEST_CHECK( value->Get( mixColor1 ) );
176 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
178 value = map.Find( Visual::Property::MIX_COLOR );
179 DALI_TEST_CHECK( value );
181 DALI_TEST_CHECK( value->Get( mixColor2 ) );
182 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
184 value = map.Find( Visual::Property::OPACITY );
185 DALI_TEST_CHECK( value );
187 DALI_TEST_CHECK( value->Get( opacity ) );
188 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
192 int UtcDaliVisualCopyAndAssignment(void)
194 ToolkitTestApplication application;
195 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
197 VisualFactory factory = VisualFactory::Get();
198 Property::Map propertyMap;
199 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
200 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
201 Visual::Base visual = factory.CreateVisual( propertyMap );
203 Visual::Base visualCopy( visual );
204 DALI_TEST_CHECK(visual == visualCopy);
206 Visual::Base emptyVisual;
207 Visual::Base emptyVisualCopy( emptyVisual );
208 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
210 Visual::Base visualEquals;
211 visualEquals = visual;
212 DALI_TEST_CHECK(visual == visualEquals);
214 Visual::Base emptyVisualEquals;
215 emptyVisualEquals = emptyVisual;
216 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
220 DALI_TEST_CHECK( visual = visualCopy );
225 int UtcDaliVisualSetName01(void)
227 ToolkitTestApplication application;
228 tet_infoline( "UtcDaliVisualSetName" );
230 VisualFactory factory = VisualFactory::Get();
231 Property::Map propertyMap;
232 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
233 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
234 Visual::Base visual = factory.CreateVisual( propertyMap );
236 const char* visualName = "backgroundVisual";
237 visual.SetName( visualName );
239 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
244 int UtcDaliVisualSetGetDepthIndex(void)
246 ToolkitTestApplication application;
247 tet_infoline( "UtcDaliVisualSetDepthIndex" );
249 VisualFactory factory = VisualFactory::Get();
250 Property::Map propertyMap;
251 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
252 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
253 Visual::Base visual = factory.CreateVisual( propertyMap );
255 visual.SetDepthIndex( 1 );
257 DummyControl dummyControl = DummyControl::New(true);
258 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
259 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
261 dummyControl.SetSize(200.f, 200.f);
262 Stage::GetCurrent().Add( dummyControl );
265 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
266 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
267 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
269 visual.SetDepthIndex( -1 );
270 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
271 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
272 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
277 int UtcDaliVisualSize(void)
279 ToolkitTestApplication application;
280 tet_infoline( "UtcDaliVisualSize" );
282 VisualFactory factory = VisualFactory::Get();
283 Vector2 controlSize( 20.f, 30.f );
287 Dali::Property::Map map;
288 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
289 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
291 Visual::Base colorVisual = factory.CreateVisual( map );
292 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
294 colorVisual.GetNaturalSize(naturalSize);
295 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
298 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
299 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
300 Visual::Base imageVisual = factory.CreateVisual( image );
301 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
303 imageVisual.GetNaturalSize(naturalSize);
304 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
306 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
309 float borderSize = 5.f;
311 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
312 map[ BorderVisual::Property::COLOR ] = Color::RED;
313 map[ BorderVisual::Property::SIZE ] = borderSize;
314 Visual::Base borderVisual = factory.CreateVisual( map );
315 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
316 borderVisual.GetNaturalSize(naturalSize);
317 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
319 // gradient gradientVisual
320 Property::Map propertyMap;
321 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
322 Vector2 start(-1.f, -1.f);
323 Vector2 end(1.f, 1.f);
324 propertyMap.Insert( "mixColor", Color::MAGENTA );
325 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
326 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
327 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
328 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
329 Property::Array stopColors;
330 stopColors.PushBack( Color::RED );
331 stopColors.PushBack( Color::GREEN );
332 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
333 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
334 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
335 gradientVisual.GetNaturalSize(naturalSize);
336 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
338 // animated gradient visual
339 Vector2 animated_gradient_visual_size(10.f, 10.f);
341 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
342 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
343 animatedGradientVisual.GetNaturalSize(naturalSize);
344 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
345 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
348 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
349 svgVisual.GetNaturalSize(naturalSize);
351 // <svg width="100" height="100">
352 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
354 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
356 // svg visual with a size
357 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
358 svgVisual2.GetNaturalSize(naturalSize);
359 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
363 // Load some fonts to get the same metrics on different platforms.
364 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
365 fontClient.SetDpi( 96u, 96u );
367 char* pathNamePtr = get_current_dir_name();
368 const std::string pathName( pathNamePtr );
371 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
373 // Create a TextVisual with a font size of 12 first
375 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
376 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
377 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
378 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
380 Visual::Base smallTextVisual = factory.CreateVisual( propertyMap );
381 Vector2 smallTextVisualNaturalSize;
382 smallTextVisual.GetNaturalSize( smallTextVisualNaturalSize );
384 // Then create a TextVisual with a font size of 20
385 propertyMap[ TextVisual::Property::TEXT ] = "<font family='TizenSans' size='20'>Hello world</font>";
386 Visual::Base largeTextVisual = factory.CreateVisual( propertyMap );
387 Vector2 largeTextVisualNaturalSize;
388 largeTextVisual.GetNaturalSize( largeTextVisualNaturalSize );
390 // Compare the sizes of the two text visuals, the second one should be bigger as it has a larger point size in the markup.
391 DALI_TEST_CHECK( smallTextVisualNaturalSize.width < largeTextVisualNaturalSize.width &&
392 smallTextVisualNaturalSize.height < largeTextVisualNaturalSize.height );
394 // The height returned for a particular width should also be greater for the large text visual
395 DALI_TEST_CHECK( smallTextVisual.GetHeightForWidth( 40.f ) < largeTextVisual.GetHeightForWidth( 40.f ) );
397 //AnimatedImageVisual
398 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
399 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
400 animatedImageVisual.GetNaturalSize(naturalSize);
401 // TEST_GIF_FILE: anim.gif
402 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
403 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
408 int UtcDaliVisualSetOnOffStage(void)
410 ToolkitTestApplication application;
411 tet_infoline( "UtcDaliVisualSetOnOffStage" );
413 VisualFactory factory = VisualFactory::Get();
414 Property::Map propertyMap;
415 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
416 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
417 Visual::Base visual = factory.CreateVisual( propertyMap );
419 DummyControl actor = DummyControl::New(true);
420 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
421 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
423 actor.SetSize(200.f, 200.f);
425 application.SendNotification();
426 application.Render(0);
427 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
429 Stage::GetCurrent().Add( actor );
431 application.SendNotification();
432 application.Render(0);
433 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
435 Stage::GetCurrent().Remove( actor );
437 application.SendNotification();
438 application.Render(0);
439 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
444 int UtcDaliVisualSetOnOffStage2(void)
446 ToolkitTestApplication application;
447 tet_infoline( "UtcDaliVisualSetOnOffStage2" );
449 VisualFactory factory = VisualFactory::Get();
450 Property::Map propertyMap;
451 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
452 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
453 Visual::Base visual = factory.CreateVisual( propertyMap );
455 DummyControl actor = DummyControl::New(true);
456 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
457 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
459 actor.SetSize(200.f, 200.f);
461 application.SendNotification();
462 application.Render(0);
463 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
466 Stage::GetCurrent().Add( actor );
468 application.SendNotification();
469 application.Render(0);
470 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
471 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
472 Renderer renderer = actor.GetRendererAt( 0 );
473 auto textures = renderer.GetTextures();
474 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
476 Stage::GetCurrent().Remove( actor );
478 application.SendNotification();
479 application.Render(0);
480 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
483 Stage::GetCurrent().Add( actor );
485 application.SendNotification();
486 application.Render(0);
487 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
488 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
489 renderer = actor.GetRendererAt( 0 );
490 textures = renderer.GetTextures();
491 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
493 Stage::GetCurrent().Remove( actor );
495 application.SendNotification();
496 application.Render(0);
497 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
502 int UtcDaliVisualGetPropertyMap1(void)
504 ToolkitTestApplication application;
505 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
507 VisualFactory factory = VisualFactory::Get();
508 Property::Map propertyMap;
509 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
510 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
511 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
513 Property::Map resultMap;
514 colorVisual.CreatePropertyMap( resultMap );
516 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
517 DALI_TEST_CHECK( typeValue );
518 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
520 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
521 DALI_TEST_CHECK( colorValue );
522 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
524 // change the blend color
525 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
526 colorVisual = factory.CreateVisual( propertyMap );
527 colorVisual.CreatePropertyMap( resultMap );
529 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
530 DALI_TEST_CHECK( colorValue );
531 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
536 int UtcDaliVisualGetPropertyMap2(void)
538 ToolkitTestApplication application;
539 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
541 VisualFactory factory = VisualFactory::Get();
542 Property::Map propertyMap;
543 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
544 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
545 propertyMap.Insert("borderColor", Color::BLUE);
546 propertyMap.Insert("borderSize", 5.f);
547 propertyMap.Insert("antiAliasing", true);
548 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
550 Property::Map resultMap;
551 borderVisual.CreatePropertyMap( resultMap );
553 // check the property values from the returned map from visual
554 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
555 DALI_TEST_CHECK( typeValue );
556 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
558 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
559 DALI_TEST_CHECK( colorValue );
560 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
562 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
563 DALI_TEST_CHECK( sizeValue );
564 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
566 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
567 DALI_TEST_CHECK( AAValue );
568 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
570 Property::Map propertyMap1;
571 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
572 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
573 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
574 borderVisual = factory.CreateVisual( propertyMap1 );
575 borderVisual.CreatePropertyMap( resultMap );
577 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
578 DALI_TEST_CHECK( typeValue );
579 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
581 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
582 DALI_TEST_CHECK( colorValue );
583 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
585 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
586 DALI_TEST_CHECK( colorValue );
587 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
593 int UtcDaliVisualGetPropertyMap2N(void)
595 ToolkitTestApplication application;
596 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
598 VisualFactory factory = VisualFactory::Get();
599 Property::Map propertyMap;
600 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
601 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
603 tet_infoline( "Test that the visual is created, with a default renderer" );
604 DALI_TEST_CHECK( borderVisual );
606 DummyControl dummyControl = DummyControl::New(true);
607 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
608 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
609 Stage::GetCurrent().Add( dummyControl );
611 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
617 int UtcDaliVisualGetPropertyMap3(void)
619 ToolkitTestApplication application;
620 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
622 VisualFactory factory = VisualFactory::Get();
623 DALI_TEST_CHECK( factory );
625 Property::Map propertyMap;
626 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
628 Vector2 start(-1.f, -1.f);
629 Vector2 end(1.f, 1.f);
630 propertyMap.Insert( "startPosition", start);
631 propertyMap.Insert( "endPosition", end);
632 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
634 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
636 Property::Array stopColors;
637 stopColors.PushBack( Color::RED );
638 stopColors.PushBack( Color::GREEN );
639 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
641 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
643 Property::Map resultMap;
644 gradientVisual.CreatePropertyMap( resultMap );
646 // check the property values from the returned map from visual
647 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
648 DALI_TEST_CHECK( value );
649 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
651 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
652 DALI_TEST_CHECK( value );
653 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
655 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
656 DALI_TEST_CHECK( value );
657 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
659 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
660 DALI_TEST_CHECK( value );
661 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
663 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
664 DALI_TEST_CHECK( value );
665 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
667 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
668 DALI_TEST_CHECK( value );
669 Property::Array* offsetArray = value->GetArray();
670 DALI_TEST_CHECK( offsetArray->Count() == 2 );
671 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
672 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
674 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
675 DALI_TEST_CHECK( value );
676 Property::Array* colorArray = value->GetArray();
677 DALI_TEST_CHECK( colorArray->Count() == 2 );
678 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
679 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
684 int UtcDaliVisualGetPropertyMap4(void)
686 ToolkitTestApplication application;
687 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
689 VisualFactory factory = VisualFactory::Get();
690 DALI_TEST_CHECK( factory );
692 Property::Map propertyMap;
693 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
695 Vector2 center(100.f, 100.f);
696 float radius = 100.f;
697 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
698 propertyMap.Insert(GradientVisual::Property::CENTER, center);
699 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
700 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
702 Property::Array stopColors;
703 stopColors.PushBack( Color::RED );
704 stopColors.PushBack( Color::BLACK );
705 stopColors.PushBack( Color::GREEN );
706 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
708 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
709 DALI_TEST_CHECK( gradientVisual );
711 Property::Map resultMap;
712 gradientVisual.CreatePropertyMap( resultMap );
714 // check the property values from the returned map from visual
715 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
716 DALI_TEST_CHECK( value );
717 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
719 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
720 DALI_TEST_CHECK( value );
721 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
723 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
724 DALI_TEST_CHECK( value );
725 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
727 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
728 DALI_TEST_CHECK( value );
729 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
731 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
732 DALI_TEST_CHECK( value );
733 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
735 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
736 DALI_TEST_CHECK( value );
737 Property::Array* offsetArray = value->GetArray();
738 DALI_TEST_CHECK( offsetArray->Count() == 3 );
739 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
740 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
741 // any stop value will be clamped to [0.0, 1.0];
742 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
744 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
745 DALI_TEST_CHECK( value );
746 Property::Array* colorArray = value->GetArray();
747 DALI_TEST_CHECK( colorArray->Count() == 3 );
748 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
749 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
750 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
755 int UtcDaliVisualGetPropertyMap5(void)
757 ToolkitTestApplication application;
758 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
760 VisualFactory factory = VisualFactory::Get();
761 Property::Map propertyMap;
762 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
763 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
764 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
765 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
766 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
767 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
768 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
769 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
770 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
771 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
772 propertyMap.Insert( "synchronousLoading", true );
774 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
775 DALI_TEST_CHECK( imageVisual );
777 Property::Map resultMap;
778 imageVisual.CreatePropertyMap( resultMap );
780 // check the property values from the returned map from visual
781 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
782 DALI_TEST_CHECK( value );
783 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
785 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
786 DALI_TEST_CHECK( value );
787 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
789 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
790 DALI_TEST_CHECK( value );
791 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
793 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
794 DALI_TEST_CHECK( value );
795 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
797 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
798 DALI_TEST_CHECK( value );
799 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
801 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
802 DALI_TEST_CHECK( value );
803 DALI_TEST_CHECK( value->Get<int>() == 20 );
805 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
806 DALI_TEST_CHECK( value );
807 DALI_TEST_CHECK( value->Get<int>() == 30 );
809 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
810 DALI_TEST_CHECK( value );
811 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
813 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
814 DALI_TEST_CHECK( value );
815 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
817 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
818 DALI_TEST_CHECK( value );
819 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
821 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
822 DALI_TEST_CHECK( value );
823 DALI_TEST_CHECK( value->Get<bool>() == true );
825 // Get an image visual with an image handle, and test the default property values
826 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
827 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
828 imageVisual = factory.CreateVisual(image);
829 imageVisual.CreatePropertyMap( resultMap );
831 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
832 DALI_TEST_CHECK( value );
833 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
835 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
836 DALI_TEST_CHECK( value );
837 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
839 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
840 DALI_TEST_CHECK( value );
841 DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
843 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
844 DALI_TEST_CHECK( value );
845 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
847 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
848 DALI_TEST_CHECK( value );
849 DALI_TEST_CHECK( value->Get<int>() == 100 );
851 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
852 DALI_TEST_CHECK( value );
853 DALI_TEST_CHECK( value->Get<int>() == 200 );
855 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
856 DALI_TEST_CHECK( value );
857 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
859 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
860 DALI_TEST_CHECK( value );
861 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
863 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
864 DALI_TEST_CHECK( value );
865 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
867 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
868 DALI_TEST_CHECK( value );
869 DALI_TEST_CHECK( value->Get<bool>() == false );
874 int UtcDaliVisualGetPropertyMap6(void)
876 ToolkitTestApplication application;
877 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
879 Rect< int > border( 1, 1, 1, 1 );
881 VisualFactory factory = VisualFactory::Get();
882 Property::Map propertyMap;
883 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
884 propertyMap.Insert( "mixColor", Color::MAGENTA );
885 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
886 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
887 propertyMap.Insert( ImageVisual::Property::BORDER, border );
888 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
889 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
890 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
892 Property::Map resultMap;
893 nPatchVisual.CreatePropertyMap( resultMap );
895 // check the property values from the returned map from visual
896 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
897 DALI_TEST_CHECK( value );
898 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
900 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
901 DALI_TEST_CHECK( value );
902 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
904 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
905 DALI_TEST_CHECK( value );
906 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
908 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
909 DALI_TEST_CHECK( value );
910 DALI_TEST_CHECK( value->Get<bool>() );
912 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
913 DALI_TEST_CHECK( value );
914 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
916 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
917 DALI_TEST_CHECK( value );
918 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
920 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
921 DALI_TEST_CHECK( value );
922 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
924 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
926 Property::Map propertyMap1;
927 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
928 propertyMap1.Insert( "mixColor", Color::MAGENTA );
929 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
930 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
931 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
932 nPatchVisual = factory.CreateVisual( propertyMap1 );
934 nPatchVisual.CreatePropertyMap( resultMap );
936 // check the property values from the returned map from visual
937 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
938 DALI_TEST_CHECK( value );
939 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
941 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
942 DALI_TEST_CHECK( value );
943 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
945 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
946 DALI_TEST_CHECK( value );
947 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
949 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
950 DALI_TEST_CHECK( value );
951 DALI_TEST_CHECK( value->Get<bool>() );
953 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
954 DALI_TEST_CHECK( value );
955 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
960 int UtcDaliVisualGetPropertyMap7(void)
962 ToolkitTestApplication application;
963 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
965 // request SvgVisual with a property map
966 VisualFactory factory = VisualFactory::Get();
967 Property::Map propertyMap;
968 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
969 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
970 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
971 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
972 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
974 Property::Map resultMap;
975 svgVisual.CreatePropertyMap( resultMap );
976 // check the property values from the returned map from a visual
977 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
978 DALI_TEST_CHECK( value );
979 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
981 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
982 DALI_TEST_CHECK( value );
983 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
985 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
986 DALI_TEST_CHECK( value );
987 DALI_TEST_CHECK( value->Get<bool>() == false );
989 // request SvgVisual with a property map 2
991 propertyMap[ "visualType" ] = Visual::SVG;
992 propertyMap[ "mixColor" ] = Color::WHITE;
993 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
994 propertyMap[ "atlasing" ] = true;
995 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
998 svgVisual1.CreatePropertyMap( resultMap );
999 // check the property values from the returned map from a visual
1000 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1001 DALI_TEST_CHECK( value );
1002 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1004 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1005 DALI_TEST_CHECK( value );
1006 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1008 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1009 DALI_TEST_CHECK( value );
1010 DALI_TEST_CHECK( value->Get<bool>() == true );
1012 // request SvgVisual with an URL
1013 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1015 svgVisual2.CreatePropertyMap( resultMap );
1016 // check the property values from the returned map from a visual
1017 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1018 DALI_TEST_CHECK( value );
1019 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1021 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1022 DALI_TEST_CHECK( value );
1023 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1029 int UtcDaliVisualGetPropertyMap8(void)
1031 ToolkitTestApplication application;
1032 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
1034 //Request MeshVisual using a property map.
1035 VisualFactory factory = VisualFactory::Get();
1036 Property::Map propertyMap;
1037 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1038 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
1039 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1040 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1041 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1042 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1043 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1044 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
1046 Property::Map resultMap;
1047 meshVisual.CreatePropertyMap( resultMap );
1048 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
1050 //Check values in the result map are identical to the initial map's values.
1051 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1052 DALI_TEST_CHECK( value );
1053 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
1055 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
1056 DALI_TEST_CHECK( value );
1057 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
1059 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
1060 DALI_TEST_CHECK( value );
1061 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
1063 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
1064 DALI_TEST_CHECK( value );
1065 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
1067 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
1068 DALI_TEST_CHECK( value );
1069 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1071 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1072 DALI_TEST_CHECK( value );
1073 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1078 //Primitive shape visual
1079 int UtcDaliVisualGetPropertyMap9(void)
1081 ToolkitTestApplication application;
1082 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1084 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1085 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1087 //Request PrimitiveVisual using a property map.
1088 VisualFactory factory = VisualFactory::Get();
1089 Property::Map propertyMap;
1090 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1091 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1092 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1093 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1094 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1095 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1096 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1097 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1098 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1099 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1100 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1101 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1102 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1103 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1105 Property::Map resultMap;
1106 primitiveVisual.CreatePropertyMap( resultMap );
1108 //Check values in the result map are identical to the initial map's values.
1109 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1110 DALI_TEST_CHECK( value );
1111 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1113 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1114 DALI_TEST_CHECK( value );
1115 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1117 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1118 DALI_TEST_CHECK( value );
1119 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1120 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1122 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1123 DALI_TEST_CHECK( value );
1124 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1126 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1127 DALI_TEST_CHECK( value );
1128 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1130 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1131 DALI_TEST_CHECK( value );
1132 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1134 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1135 DALI_TEST_CHECK( value );
1136 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1138 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1139 DALI_TEST_CHECK( value );
1140 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1142 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1143 DALI_TEST_CHECK( value );
1144 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1146 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1147 DALI_TEST_CHECK( value );
1148 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1150 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1151 DALI_TEST_CHECK( value );
1152 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1154 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1155 DALI_TEST_CHECK( value );
1156 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1158 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1159 DALI_TEST_CHECK( value );
1160 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1166 int UtcDaliVisualGetPropertyMap10(void)
1168 ToolkitTestApplication application;
1169 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1171 //Request PrimitiveVisual using a property map.
1172 VisualFactory factory = VisualFactory::Get();
1174 Property::Map propertyMap;
1175 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1176 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1177 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1178 propertyMap.Insert( "enableMarkup", false );
1179 propertyMap.Insert( "text", "Hello world" );
1180 propertyMap.Insert( "fontFamily", "TizenSans" );
1182 Property::Map fontStyleMapSet;
1183 fontStyleMapSet.Insert( "weight", "bold" );
1184 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1186 propertyMap.Insert( "pointSize", 12.f );
1187 propertyMap.Insert( "multiLine", true );
1188 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1189 propertyMap.Insert( "verticalAlignment", "CENTER" );
1190 propertyMap.Insert( "textColor", Color::RED );
1192 Property::Map shadowMapSet;
1193 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1195 Property::Map underlineMapSet;
1196 propertyMap.Insert( "underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1) );
1198 Property::Map outlineMapSet;
1199 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1201 Property::Map backgroundMapSet;
1202 propertyMap.Insert( "textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN) );
1204 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1206 Property::Map resultMap;
1207 textVisual.CreatePropertyMap( resultMap );
1209 //Check values in the result map are identical to the initial map's values.
1210 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1211 DALI_TEST_CHECK( value );
1212 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1214 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1215 DALI_TEST_CHECK( value );
1216 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1218 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1219 DALI_TEST_CHECK( value );
1220 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1222 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1223 DALI_TEST_CHECK( value );
1224 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1226 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1227 DALI_TEST_CHECK( value );
1229 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1230 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1231 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1233 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1234 DALI_TEST_CHECK( value );
1235 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1237 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1238 DALI_TEST_CHECK( value );
1239 DALI_TEST_CHECK( value->Get<bool>() );
1241 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1242 DALI_TEST_CHECK( value );
1243 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1245 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1246 DALI_TEST_CHECK( value );
1247 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1249 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1250 DALI_TEST_CHECK( value );
1251 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1253 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1254 DALI_TEST_CHECK( value );
1255 DALI_TEST_CHECK( !value->Get<bool>() );
1257 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1258 DALI_TEST_CHECK( value );
1260 Property::Map shadowMapGet = value->Get<Property::Map>();
1261 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1262 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1264 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1265 DALI_TEST_CHECK( value );
1267 Property::Map underlineMapGet = value->Get<Property::Map>();
1268 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1269 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1271 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1272 DALI_TEST_CHECK( value );
1274 Property::Map outlineMapGet = value->Get<Property::Map>();
1275 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1276 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1278 value = resultMap.Find( DevelTextVisual::Property::BACKGROUND, Property::MAP );
1279 DALI_TEST_CHECK( value );
1281 Property::Map backgroundMapGet = value->Get<Property::Map>();
1282 DALI_TEST_EQUALS( backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION );
1283 DALI_TEST_EQUALS( DaliTestCheckMaps( backgroundMapGet, backgroundMapSet ), true, TEST_LOCATION );
1288 int UtcDaliVisualGetPropertyMap11(void)
1290 ToolkitTestApplication application;
1291 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1293 VisualFactory factory = VisualFactory::Get();
1294 DALI_TEST_CHECK( factory );
1296 Property::Map propertyMap;
1297 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1299 Vector2 start(-0.5f, 0.5f);
1300 Vector2 end (0.5f, -0.0f);
1301 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1302 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1303 Vector2 rotate_center(0.0f, 0.4f);
1304 float rotate_amount = 1.57f;
1305 float offset = 100.f;
1307 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1308 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1309 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1311 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1312 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1313 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1314 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1315 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1316 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1317 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1319 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1320 DALI_TEST_CHECK( animatedGradientVisual );
1322 Property::Map resultMap;
1323 animatedGradientVisual.CreatePropertyMap( resultMap );
1325 // check the property values from the returned map from visual
1326 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1327 DALI_TEST_CHECK( value );
1328 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1330 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1331 DALI_TEST_CHECK( value );
1332 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1334 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1335 DALI_TEST_CHECK( value );
1336 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1338 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1339 DALI_TEST_CHECK( value );
1340 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1343 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1344 DALI_TEST_CHECK( value );
1345 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1347 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1348 DALI_TEST_CHECK( value );
1349 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1351 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1352 DALI_TEST_CHECK( value );
1353 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1355 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1356 DALI_TEST_CHECK( value );
1357 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1359 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1360 DALI_TEST_CHECK( value );
1361 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1363 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1364 DALI_TEST_CHECK( value );
1365 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1367 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1368 DALI_TEST_CHECK( value );
1369 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1374 int UtcDaliVisualGetPropertyMap12(void)
1376 ToolkitTestApplication application;
1377 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1379 // Case 1 : Set values by index
1381 tet_printf( " - Set Values by Index\n" );
1382 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1383 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1384 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1386 tet_printf( "test with delay [%f]\n", _delay );
1387 VisualFactory factory = VisualFactory::Get();
1388 DALI_TEST_CHECK( factory );
1390 Property::Map propertyMap;
1391 Property::Map animationMap;
1392 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1394 float duration = 1.1f;
1395 float delay = _delay;
1396 float repeat_delay = 0.4f;
1398 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1400 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1401 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1403 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1405 animationMap.Clear();
1406 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1407 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1408 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1409 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1410 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1411 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1412 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1413 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1414 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1416 return animationMap;
1419 Vector2 start1(-0.5f, 0.5f);
1420 Vector2 end1 (0.5f, -0.5f);
1421 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1422 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1423 Vector2 rotate_center1(0.0f, 0.4f);
1424 float rotate_amount1 = 0.0f;
1425 float offset1 = 0.f;
1427 Vector2 start2(-0.5f, -0.5f);
1428 Vector2 end2 (0.5f, 0.5f);
1429 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1430 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1431 Vector2 rotate_center2(0.0f, -0.4f);
1432 float rotate_amount2 = 6.2832f;
1433 float offset2 = 2.f;
1435 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1436 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1437 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1439 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1440 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1441 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1442 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1443 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1444 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1445 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1447 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1448 DALI_TEST_CHECK( animatedGradientVisual );
1450 Property::Map resultMap;
1451 animatedGradientVisual.CreatePropertyMap( resultMap );
1453 // check the property values from the returned map from visual
1454 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1455 DALI_TEST_CHECK( value );
1456 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1458 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1459 DALI_TEST_CHECK( value );
1460 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1462 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1463 DALI_TEST_CHECK( value );
1464 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1466 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1467 DALI_TEST_CHECK( value );
1468 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1470 auto checkAnimatedMap = [&value, &resultMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Index &index, const Property::Value &start, const Property::Value &target, int line_num)->void
1472 tet_printf("Check value at %d\n", line_num);
1473 value = resultMap.Find( index, Property::MAP );
1474 DALI_TEST_CHECK( value );
1475 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1476 Property::Map *temp_map = value->GetMap();
1477 DALI_TEST_CHECK( temp_map );
1479 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1481 Property::Value *res = temp_map->Find( index );
1482 DALI_TEST_CHECK( res );
1486 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1487 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1488 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1489 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1490 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1491 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1492 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1493 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1494 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1497 // check the animation map data is good
1498 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1499 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1500 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1501 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1502 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1503 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1504 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1508 // Case 2 : Set values by string
1510 tet_printf( " - Set Values by String\n" );
1511 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1512 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1513 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1515 tet_printf( "test with delay [%f]\n", _delay );
1516 VisualFactory factory = VisualFactory::Get();
1517 DALI_TEST_CHECK( factory );
1519 Property::Map propertyMap;
1520 Property::Map animationMap;
1521 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1523 float duration = 1.1f;
1524 float delay = _delay;
1525 float repeat_delay = 0.4f;
1527 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1529 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1530 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1532 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1534 animationMap.Clear();
1535 animationMap.Insert("startValue" , start);
1536 animationMap.Insert("targetValue" , target);
1537 animationMap.Insert("directionType", "BACKWARD");
1538 animationMap.Insert("duration" , duration);
1539 animationMap.Insert("delay" , delay);
1540 animationMap.Insert("repeat" , loop_count);
1541 animationMap.Insert("repeatDelay" , repeat_delay);
1542 animationMap.Insert("motionType" , "MIRROR");
1543 animationMap.Insert("easingType" , "IN_OUT");
1545 return animationMap;
1548 Vector2 start1(-0.5f, 0.5f);
1549 Vector2 end1 (0.5f, -0.5f);
1550 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1551 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1552 Vector2 rotate_center1(0.0f, 0.4f);
1553 float rotate_amount1 = 0.0f;
1554 float offset1 = 0.f;
1556 Vector2 start2(-0.5f, -0.5f);
1557 Vector2 end2 (0.5f, 0.5f);
1558 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1559 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1560 Vector2 rotate_center2(0.0f, -0.4f);
1561 float rotate_amount2 = 6.2832f;
1562 float offset2 = 2.f;
1564 // For test mix the type string/index key and string/index value works well.
1565 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1566 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1567 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1569 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1570 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1571 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1572 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1573 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1574 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1575 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1577 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1578 DALI_TEST_CHECK( animatedGradientVisual );
1580 Property::Map resultMap;
1581 animatedGradientVisual.CreatePropertyMap( resultMap );
1583 // check the property values from the returned map from visual
1584 // Note : resultMap from CreatePropertyMap only contain indexKey
1585 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1586 DALI_TEST_CHECK( value );
1587 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1589 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1590 DALI_TEST_CHECK( value );
1591 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1593 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1594 DALI_TEST_CHECK( value );
1595 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1597 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1598 DALI_TEST_CHECK( value );
1599 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1601 auto checkAnimatedMap = [&value, &resultMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Index &index, const Property::Value &start, const Property::Value &target, int line_num)->void
1603 tet_printf("Check value at %d\n", line_num);
1604 value = resultMap.Find( index, Property::MAP );
1605 DALI_TEST_CHECK( value );
1606 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1607 Property::Map *temp_map = value->GetMap();
1608 DALI_TEST_CHECK( temp_map );
1610 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1612 Property::Value *res = temp_map->Find( index );
1613 DALI_TEST_CHECK( res );
1617 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1618 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1619 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1620 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1621 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1622 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1623 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1624 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1625 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1628 // check the animation map data is good
1629 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1630 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1631 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1632 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1633 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1634 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1635 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1641 int UtcDaliVisualGetPropertyMap13(void)
1643 ToolkitTestApplication application;
1644 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1646 for(int _direction = 0; _direction <= 1; ++_direction)
1648 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1650 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1651 VisualFactory factory = VisualFactory::Get();
1652 DALI_TEST_CHECK( factory );
1654 Property::Map propertyMap;
1655 Property::Map animationMap;
1656 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1658 float duration = 1.0f;
1659 float delay = _delay;
1660 float repeat_delay = 0.5f;
1662 int direction = _direction;
1663 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1664 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1665 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1667 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1669 animationMap.Clear();
1670 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1671 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1672 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1673 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1674 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1675 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1676 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1677 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1678 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1679 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1680 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1682 return animationMap;
1685 Vector2 start1(-0.5f, 0.5f);
1686 Vector2 end1 (0.5f, -0.5f);
1687 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1688 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1689 Vector2 rotate_center1(1.0f, 0.4f);
1690 float rotate_amount1 = 2.0f;
1691 float offset1 = 1.f;
1693 Vector2 start2(-0.5f, -0.5f);
1694 Vector2 end2 (0.5f, 0.5f);
1695 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1696 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1697 Vector2 rotate_center2(1.0f, -0.4f);
1698 float rotate_amount2 = 1.0f;
1699 float offset2 = 3.f;
1701 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1702 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1703 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1705 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1706 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1707 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1708 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1709 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1710 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1711 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1713 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1714 DALI_TEST_CHECK( animatedGradientVisual );
1716 Property::Map resultMap;
1717 animatedGradientVisual.CreatePropertyMap( resultMap );
1719 // check the property values from the returned map from visual
1720 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1721 DALI_TEST_CHECK( value );
1722 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1724 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1725 DALI_TEST_CHECK( value );
1726 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1728 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1729 DALI_TEST_CHECK( value );
1730 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1732 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1733 DALI_TEST_CHECK( value );
1734 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1736 // If loop_count = 0, Animation doesn't created.
1737 // Optimized resultMap only have one value, which is target value
1738 // Note: target value will be changed by direction option.
1739 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1740 DALI_TEST_CHECK( value );
1741 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1743 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1744 DALI_TEST_CHECK( value );
1745 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1747 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1748 DALI_TEST_CHECK( value );
1749 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1751 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1752 DALI_TEST_CHECK( value );
1753 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1755 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1756 DALI_TEST_CHECK( value );
1757 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1759 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1760 DALI_TEST_CHECK( value );
1761 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1763 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1764 DALI_TEST_CHECK( value );
1765 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1772 int UtcDaliVisualAnimateBorderVisual01(void)
1774 ToolkitTestApplication application;
1775 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1777 VisualFactory factory = VisualFactory::Get();
1778 Property::Map propertyMap;
1779 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1780 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1781 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1782 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1783 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1786 map["target"] = "testVisual";
1787 map["property"] = "mixColor";
1788 map["targetValue"] = Vector4(1,1,1,0.1);
1789 map["animator"] = Property::Map()
1790 .Add("alphaFunction", "LINEAR")
1791 .Add("timePeriod", Property::Map()
1793 .Add("duration", 4.0f));
1795 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1797 DummyControl actor = DummyControl::New(true);
1798 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1799 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1800 actor.SetSize(2000, 2000);
1801 actor.SetParentOrigin(ParentOrigin::CENTER);
1802 Stage::GetCurrent().Add(actor);
1804 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1806 Renderer renderer = actor.GetRendererAt(0);
1807 Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR );
1808 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
1810 Animation animation = dummyImpl.CreateTransition( transition );
1812 // Animate the mix color through the transition, and the border color through
1813 // programmatic method.
1814 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1817 application.SendNotification();
1818 application.Render(0);
1819 application.Render(2000u); // halfway point between blue and white
1821 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1822 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1823 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1824 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1826 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1827 testColor = Vector4( 1,1,1,0.45f );
1828 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1829 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1832 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1833 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1835 application.Render(2000u);
1837 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1838 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1839 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1841 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1842 testColor = Vector4(1,1,1,0.1);
1843 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), TEST_LOCATION );
1844 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1846 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1847 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1853 int UtcDaliVisualAnimateBorderVisual02(void)
1855 ToolkitTestApplication application;
1856 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1858 VisualFactory factory = VisualFactory::Get();
1859 Property::Map propertyMap;
1860 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1861 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1862 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1863 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1865 DummyControl actor = DummyControl::New(true);
1866 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1867 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1868 actor.SetSize(2000, 2000);
1869 actor.SetParentOrigin(ParentOrigin::CENTER);
1870 Stage::GetCurrent().Add(actor);
1872 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1874 Renderer renderer = actor.GetRendererAt(0);
1875 Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE );
1877 Animation animation = Animation::New(4.0f);
1878 animation.AnimateTo( Property(renderer, index), 9.0f );
1881 application.SendNotification();
1882 application.Render(0);
1883 application.Render(2000u); // halfway point
1885 float size = renderer.GetCurrentProperty< float >( index );
1886 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1887 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1889 application.Render(2000u); // halfway point between blue and white
1891 size = renderer.GetCurrentProperty< float >( index );
1892 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1893 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1898 int UtcDaliVisualAnimateColorVisual(void)
1900 ToolkitTestApplication application;
1901 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1903 VisualFactory factory = VisualFactory::Get();
1904 Property::Map propertyMap;
1905 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1906 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1907 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1909 DummyControl actor = DummyControl::New(true);
1910 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1911 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1912 actor.SetSize(2000, 2000);
1913 actor.SetParentOrigin(ParentOrigin::CENTER);
1914 Stage::GetCurrent().Add(actor);
1916 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1918 Renderer renderer = actor.GetRendererAt(0);
1919 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR );
1921 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1922 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1924 Animation animation = Animation::New(4.0f);
1925 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1928 application.SendNotification();
1929 application.Render(0);
1930 application.Render(2000u); // halfway point
1932 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1933 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1934 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1936 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1938 application.Render(2000u); // halfway point between blue and white
1940 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1941 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1943 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1945 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1946 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1951 int UtcDaliVisualAnimatePrimitiveVisual(void)
1953 ToolkitTestApplication application;
1954 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1957 VisualFactory factory = VisualFactory::Get();
1958 Property::Map propertyMap;
1959 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1960 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1961 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1962 Visual::Base visual = factory.CreateVisual( propertyMap );
1964 DummyControl actor = DummyControl::New(true);
1965 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1966 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1967 actor.SetSize(2000, 2000);
1968 actor.SetParentOrigin(ParentOrigin::CENTER);
1969 actor.SetColor(Color::BLACK);
1970 Stage::GetCurrent().Add(actor);
1972 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1974 Renderer renderer = actor.GetRendererAt(0);
1975 Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR );
1977 tet_infoline("Test that the renderer has the Primitive mix color");
1978 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
1980 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
1981 const Vector4 TARGET_MIX_COLOR( Color::RED );
1984 map["target"] = "testVisual";
1985 map["property"] = "mixColor";
1986 map["initialValue"] = INITIAL_MIX_COLOR;
1987 map["targetValue"] = TARGET_MIX_COLOR;
1988 map["animator"] = Property::Map()
1989 .Add("alphaFunction", "LINEAR")
1990 .Add("timePeriod", Property::Map()
1992 .Add("duration", 4.0f));
1994 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1996 Animation animation = dummyImpl.CreateTransition( transition );
1997 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1998 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
2000 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
2003 application.SendNotification();
2004 application.Render(0);
2005 application.Render(2000u); // halfway point
2006 application.SendNotification();
2008 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
2009 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a )), true, TEST_LOCATION );
2010 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
2012 application.Render(2001u); // go past end
2013 application.SendNotification(); // Trigger signals
2015 DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
2016 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4( 1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a ) ), true, TEST_LOCATION );
2017 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
2019 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
2020 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2028 int UtcDaliVisualAnimatedGradientVisual01(void)
2030 ToolkitTestApplication application;
2031 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
2034 VisualFactory factory = VisualFactory::Get();
2035 Property::Map propertyMap;
2036 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2037 Visual::Base visual = factory.CreateVisual( propertyMap );
2039 DummyControl actor = DummyControl::New(true);
2040 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2041 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2042 actor.SetSize(2000, 2000);
2043 actor.SetParentOrigin(ParentOrigin::CENTER);
2044 actor.SetColor(Color::BLACK);
2045 Stage::GetCurrent().Add(actor);
2047 application.SendNotification();
2048 application.Render(0);
2049 application.SendNotification();
2051 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2053 for(int step_iter = 0; step_iter < 3; step_iter++)
2055 application.SendNotification();
2056 application.Render(0);
2057 application.Render(750u); // step i/4
2058 application.SendNotification();
2060 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
2061 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
2062 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2063 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2064 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
2065 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
2066 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
2069 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2070 application.Render(750u); // go to end
2071 application.SendNotification();
2073 application.Render(10u); // finish
2074 application.SendNotification();
2077 application.SendNotification();
2078 application.Render(0u);
2079 application.SendNotification();
2085 int UtcDaliVisualAnimatedGradientVisual02(void)
2087 ToolkitTestApplication application;
2088 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2091 float _delay[4] = {0.0f, -1.35f, 0.15f, -0.4f}; // fract(_delay) must NOT be 1/4, 2/4, 3/4. cause we don't know progress is 1.0f or 0.0f
2092 int _direction[2] = {0, 1};
2093 int _loop_count[3] = {-1, 0, 1};
2094 int _motion[2] = {0, 1};
2095 int _easing[4] = {0, 1, 2, 3};
2097 int test_case_max = 4 * 2 * 3 * 2 * 4;
2099 int test_case_d = 7; // 7 is the number of animated properties.
2101 float _duration = 0.4f;
2102 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2103 float noise_maker = 0.0f;
2104 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2105 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2107 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2109 VisualFactory factory = VisualFactory::Get();
2110 Property::Map propertyMap;
2111 Property::Map animationMap;
2112 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2114 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2115 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2116 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2118 auto buildAnimatedMap = [&animationMap, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const Property::Value &start, const Property::Value &target, int tc_offset)->Property::Map&
2120 int tc = (test_case + tc_offset);
2121 int idx_easing = tc % 4; tc /= 4;
2122 int idx_motion = tc % 2; tc /= 2;
2123 int idx_loop_count = tc % 3; tc /= 3;
2124 int idx_direction = tc % 2; tc /= 2;
2125 int idx_delay = tc % 4; tc /= 4;
2127 float duration = _duration - _repeat_delay;
2128 float repeat_delay = _repeat_delay;
2129 float delay = _delay[idx_delay] * _duration;
2130 int direction = _direction[idx_direction];
2131 int loop_count = _loop_count[idx_loop_count];
2132 int motion = _motion[idx_motion];
2133 int easing = _easing[idx_easing];
2135 animationMap.Clear();
2136 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2137 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2138 if( direction == 0 )
2140 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2144 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2146 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2147 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2148 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2149 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2152 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2156 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2160 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2162 else if( easing == 1 )
2164 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2166 else if( easing == 2 )
2168 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2172 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2175 return animationMap;
2178 // Give different values for debuging
2179 noise_maker += 1.0f;
2180 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2181 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2182 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2183 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2184 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2185 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2186 float offset1 = 0.f + noise_maker * 0.1f;
2188 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2189 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2190 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2191 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2192 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2193 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2194 float offset2 = 2.f + noise_maker * 0.1f;
2196 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2197 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2198 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2200 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2201 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2202 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2203 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2204 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2205 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2206 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2208 Visual::Base visual = factory.CreateVisual( propertyMap );
2210 DummyControl actor = DummyControl::New( true );
2211 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2212 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2213 actor.SetSize( 2000, 2000 );
2214 actor.SetParentOrigin(ParentOrigin::CENTER);
2215 actor.SetColor(Color::BLACK);
2216 Stage::GetCurrent().Add(actor);
2218 application.SendNotification();
2219 application.Render( 0 );
2220 application.SendNotification();
2222 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2224 application.SendNotification();
2226 //Compare between CPU calculated value and Shader Visual calculated value
2227 auto testProperty = [&application, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const char* name, const Property::Value& start, const Property::Value& target, int tc_offset, int value_type, float progress)->void
2229 int tc = (test_case + tc_offset);
2230 int idx_easing = tc % 4; tc /= 4;
2231 int idx_motion = tc % 2; tc /= 2;
2232 int idx_loop_count = tc % 3; tc /= 3;
2233 int idx_direction = tc % 2; tc /= 2;
2234 int idx_delay = tc % 4; tc /= 4;
2236 float duration = _duration - _repeat_delay;
2237 float repeat_delay = _repeat_delay;
2238 float delay = _delay[idx_delay] * _duration;
2239 int direction = _direction[idx_direction];
2240 int loop_count = _loop_count[idx_loop_count];
2241 int motion = _motion[idx_motion];
2242 int easing = _easing[idx_easing];
2244 progress -= delay / _duration;
2246 Property::Value s = start;
2247 Property::Value t = target;
2248 if( direction == 1 )
2253 float x; ///< Animator progress value
2254 if( loop_count == 0 )
2258 else if( loop_count > 0 && progress + 0.01f > loop_count )
2260 x = ( motion == 0 ) ? 1.0f : 0.0f;
2264 if( progress < 0.0f )
2268 progress = fmodf( progress, 1.0f );
2269 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2274 x = progress * 2.0f;
2281 if( easing == 1 ) // EASE_IN
2285 else if( easing == 2 ) // EASE_OUT
2289 else if( easing == 3 ) // EASE_IN_OUT
2291 x = x * x * (3.0f - 2.0f * x);
2294 if( value_type == 0 ) // result type is Float
2298 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2299 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2300 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2302 else if( value_type == 1 ) // result type is Vector2
2306 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2307 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2308 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2310 else if( value_type == 2 ) // result type is Vector3
2314 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2315 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2316 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2318 else // result type is Vector4
2322 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2323 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2324 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2329 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2331 for( int step_iter = 0; step_iter < 3; step_iter++ )
2333 application.SendNotification();
2334 application.Render( _duration * 250.f ); // step i/4
2335 application.SendNotification();
2338 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2339 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2340 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2341 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2342 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2343 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2344 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2346 application.SendNotification();
2347 application.Render(_duration * 250.f); // step 4/4 will not test
2348 application.SendNotification();
2352 application.SendNotification();
2354 application.SendNotification();
2355 application.Render(10.f); // tempral time
2356 application.SendNotification();
2363 int UtcDaliVisualAnimatedGradientVisual03(void)
2365 ToolkitTestApplication application;
2366 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2369 float _delay[4] = {0.0f, -1.35f, 0.15f, -0.4f}; // fract(_delay) must NOT be 1/4, 2/4, 3/4. cause we don't know progress is 1.0f or 0.0f
2370 int _direction[2] = {0, 1};
2371 int _loop_count[3] = {-1, 0, 1};
2372 int _motion[2] = {0, 1};
2373 int _easing[4] = {0, 1, 2, 3};
2375 int test_case_max = 4 * 2 * 3 * 2 * 4;
2377 int test_case_d = 7; // 7 is the number of animated properties.
2379 float _duration = 0.4f;
2380 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2381 float noise_maker = 0.2f;
2382 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2383 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2385 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2387 VisualFactory factory = VisualFactory::Get();
2388 Property::Map propertyMap;
2389 Property::Map animationMap;
2390 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2392 auto buildAnimatedMap = [&animationMap, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const Property::Value &start, const Property::Value &target, int tc_offset)->Property::Map&
2394 int tc = (test_case + tc_offset);
2395 int idx_easing = tc % 4; tc /= 4;
2396 int idx_motion = tc % 2; tc /= 2;
2397 int idx_loop_count = tc % 3; tc /= 3;
2398 int idx_direction = tc % 2; tc /= 2;
2399 int idx_delay = tc % 4; tc /= 4;
2401 float duration = _duration - _repeat_delay;
2402 float repeat_delay = _repeat_delay;
2403 float delay = _delay[idx_delay] * _duration;
2404 int direction = _direction[idx_direction];
2405 int loop_count = _loop_count[idx_loop_count];
2406 int motion = _motion[idx_motion];
2407 int easing = _easing[idx_easing];
2409 animationMap.Clear();
2410 animationMap.Insert( "startValue", start );
2411 animationMap.Insert( "targetValue", target );
2412 if( direction == 0 )
2414 animationMap.Insert("directionType", "FORWARD");
2418 animationMap.Insert("directionType", "BACKWARD");
2420 animationMap.Insert("duration", duration);
2421 animationMap.Insert("delay", delay);
2422 animationMap.Insert("repeat", loop_count);
2423 animationMap.Insert("repeatDelay", repeat_delay);
2426 animationMap.Insert("motionType", "LOOP");
2430 animationMap.Insert("motionType", "MIRROR");
2434 animationMap.Insert("easingType", "LINEAR");
2436 else if( easing == 1 )
2438 animationMap.Insert("easingType", "IN");
2440 else if( easing == 2 )
2442 animationMap.Insert("easingType", "OUT");
2446 animationMap.Insert("easingType", "IN_OUT");
2449 return animationMap;
2452 // Give different values for debuging
2453 noise_maker += 0.8f;
2454 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2455 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2456 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2457 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2458 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2459 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2460 float offset1 = 0.f + noise_maker * 0.1f;
2462 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2463 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2464 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2465 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2466 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2467 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2468 float offset2 = 2.f + noise_maker * 0.1f;
2470 propertyMap.Insert("gradientType", "LINEAR");
2471 propertyMap.Insert("unitType", "USER_SPACE");
2472 propertyMap.Insert("spreadType", "CLAMP");
2474 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2475 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2476 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2477 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2478 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2479 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2480 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2482 Visual::Base visual = factory.CreateVisual( propertyMap );
2484 DummyControl actor = DummyControl::New( true );
2485 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2486 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2487 actor.SetSize( 2000, 2000 );
2488 actor.SetParentOrigin(ParentOrigin::CENTER);
2489 actor.SetColor(Color::BLACK);
2490 Stage::GetCurrent().Add(actor);
2492 application.SendNotification();
2493 application.Render( 0 );
2494 application.SendNotification();
2496 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2498 application.SendNotification();
2500 //Compare between CPU calculated value and Shader Visual calculated value
2501 auto testProperty = [&application, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const char* name, const Property::Value& start, const Property::Value& target, int tc_offset, int value_type, float progress)->void
2503 int tc = (test_case + tc_offset);
2504 int idx_easing = tc % 4; tc /= 4;
2505 int idx_motion = tc % 2; tc /= 2;
2506 int idx_loop_count = tc % 3; tc /= 3;
2507 int idx_direction = tc % 2; tc /= 2;
2508 int idx_delay = tc % 4; tc /= 4;
2510 float duration = _duration - _repeat_delay;
2511 float repeat_delay = _repeat_delay;
2512 float delay = _delay[idx_delay] * _duration;
2513 int direction = _direction[idx_direction];
2514 int loop_count = _loop_count[idx_loop_count];
2515 int motion = _motion[idx_motion];
2516 int easing = _easing[idx_easing];
2518 progress -= delay / _duration;
2520 Property::Value s = start;
2521 Property::Value t = target;
2522 if( direction == 1 )
2527 float x; ///< Animator progress value
2528 if( loop_count == 0 )
2532 else if( loop_count > 0 && progress + 0.01f > loop_count )
2534 x = ( motion == 0 ) ? 1.0f : 0.0f;
2538 if( progress < 0.0f )
2542 progress = fmodf( progress, 1.0f );
2543 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2548 x = progress * 2.0f;
2555 if( easing == 1 ) // EASE_IN
2559 else if( easing == 2 ) // EASE_OUT
2563 else if( easing == 3 ) // EASE_IN_OUT
2565 x = x * x * (3.0f - 2.0f * x);
2568 if( value_type == 0 ) // result type is Float
2572 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2573 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2574 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2576 else if( value_type == 1 ) // result type is Vector2
2580 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2581 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2582 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2584 else if( value_type == 2 ) // result type is Vector3
2588 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2589 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2590 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2592 else // result type is Vector4
2596 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2597 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2598 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2603 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2605 for( int step_iter = 0; step_iter < 3; step_iter++ )
2607 application.SendNotification();
2608 application.Render( _duration * 250.f ); // step i/4
2609 application.SendNotification();
2612 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2613 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2614 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2615 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2616 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2617 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2618 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2620 application.SendNotification();
2621 application.Render(_duration * 250.f); // step 4/4 will not test
2622 application.SendNotification();
2626 application.SendNotification();
2628 application.SendNotification();
2629 application.Render(10.f); // tempral time
2630 application.SendNotification();
2637 int UtcDaliVisualWireframeVisual(void)
2639 ToolkitTestApplication application;
2641 VisualFactory factory = VisualFactory::Get();
2642 Property::Map propertyMap;
2643 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2645 // Create the visual.
2646 Visual::Base visual = factory.CreateVisual( propertyMap );
2648 DALI_TEST_CHECK( visual );
2650 Property::Map resultMap;
2651 visual.CreatePropertyMap( resultMap );
2653 // Check the property values from the returned map from visual
2654 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2655 DALI_TEST_CHECK( value );
2656 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2661 int UtcDaliVisualGetTransform(void)
2663 ToolkitTestApplication application;
2664 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2666 VisualFactory factory = VisualFactory::Get();
2667 Property::Map propertyMap;
2668 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2669 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2670 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2672 Dali::Property::Map visualMap;
2673 colorVisual.CreatePropertyMap( visualMap );
2674 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2675 Dali::Property::Map* map = value->GetMap();
2676 DALI_TEST_CHECK( map );
2678 //Test default values
2680 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2681 DALI_TEST_CHECK( typeValue );
2682 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2685 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2686 DALI_TEST_CHECK( typeValue );
2687 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2690 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2691 DALI_TEST_CHECK( typeValue );
2692 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2695 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2696 DALI_TEST_CHECK( typeValue );
2697 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2700 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2701 DALI_TEST_CHECK( typeValue );
2702 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2705 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2706 DALI_TEST_CHECK( typeValue );
2707 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2713 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2715 Property::Map transform;
2716 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2717 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2718 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2719 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2720 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2722 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2724 Dali::Property::Map visualMap;
2725 visual.CreatePropertyMap( visualMap );
2726 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2727 Dali::Property::Map* map = value->GetMap();
2728 DALI_TEST_CHECK( map );
2731 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2732 DALI_TEST_CHECK( typeValue );
2733 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2736 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2737 DALI_TEST_CHECK( typeValue );
2738 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2741 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2742 DALI_TEST_CHECK( typeValue );
2743 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2746 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2747 DALI_TEST_CHECK( typeValue );
2748 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2751 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2752 DALI_TEST_CHECK( typeValue );
2753 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2756 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2757 DALI_TEST_CHECK( typeValue );
2758 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2761 //Put the visual on the stage
2762 DummyControl actor = DummyControl::New(true);
2763 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2764 actor.SetSize(2000, 2000);
2765 actor.SetParentOrigin(ParentOrigin::CENTER);
2766 Stage::GetCurrent().Add(actor);
2768 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2769 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2771 application.SendNotification();
2772 application.Render(0);
2773 Renderer renderer( actor.GetRendererAt(0) );
2775 //Check that the properties have been registered on the Renderer
2776 Property::Index index = renderer.GetPropertyIndex( "offset" );
2777 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2778 Vector2 offset = renderer.GetProperty<Vector2>( index );
2779 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2781 index = renderer.GetPropertyIndex( "size" );
2782 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2783 Vector2 size = renderer.GetProperty<Vector2>( index );
2784 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2786 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2787 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2788 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2789 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2791 index = renderer.GetPropertyIndex( "origin" );
2792 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2793 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2794 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2796 index = renderer.GetPropertyIndex( "anchorPoint" );
2797 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2798 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2799 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2801 //Set a new transform
2803 transform = DefaultTransform();
2804 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2805 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2806 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2807 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2808 application.SendNotification();
2809 application.Render(0);
2811 //Check that the values have changed in the renderer
2812 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2813 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2815 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2816 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2818 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2819 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2821 //Parent origin and anchor point should have the default values
2822 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2823 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2825 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2826 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2829 int UtcDaliVisualSetTransform0(void)
2831 ToolkitTestApplication application;
2832 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2834 VisualFactory factory = VisualFactory::Get();
2835 Property::Map propertyMap;
2836 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2837 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2838 Visual::Base visual = factory.CreateVisual( propertyMap );
2839 TestTransform( application, visual );
2840 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2845 int UtcDaliVisualSetTransform1(void)
2847 ToolkitTestApplication application;
2848 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2850 VisualFactory factory = VisualFactory::Get();
2851 Property::Map propertyMap;
2852 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2853 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2854 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2855 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2856 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2857 Visual::Base visual = factory.CreateVisual( propertyMap );
2858 TestTransform( application, visual );
2859 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2864 int UtcDaliVisualSetTransform2(void)
2866 ToolkitTestApplication application;
2867 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2869 VisualFactory factory = VisualFactory::Get();
2870 Property::Map propertyMap;
2871 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2872 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2874 Property::Array stopOffsets;
2875 stopOffsets.PushBack( 0.0f );
2876 stopOffsets.PushBack( 0.3f );
2877 stopOffsets.PushBack( 0.6f );
2878 stopOffsets.PushBack( 0.8f );
2879 stopOffsets.PushBack( 1.0f );
2880 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2882 Property::Array stopColors;
2883 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2884 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2885 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2886 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2887 stopColors.PushBack( Color::YELLOW );
2888 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2889 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2890 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2891 Visual::Base visual = factory.CreateVisual( propertyMap );
2892 TestTransform( application, visual );
2893 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2898 int UtcDaliVisualSetTransform3(void)
2900 ToolkitTestApplication application;
2901 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2903 VisualFactory factory = VisualFactory::Get();
2904 Property::Map propertyMap;
2905 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2906 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2907 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2908 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2909 Visual::Base visual = factory.CreateVisual( propertyMap );
2910 TestTransform( application, visual );
2911 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2916 int UtcDaliVisualSetTransform4(void)
2918 ToolkitTestApplication application;
2919 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2921 VisualFactory factory = VisualFactory::Get();
2922 Property::Map propertyMap;
2923 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2924 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2926 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2927 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2928 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2929 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2930 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2931 Visual::Base visual = factory.CreateVisual( propertyMap );
2932 TestTransform( application, visual );
2933 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2938 int UtcDaliVisualSetTransform5(void)
2940 ToolkitTestApplication application;
2941 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
2943 VisualFactory factory = VisualFactory::Get();
2944 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
2945 Visual::Base visual = factory.CreateVisual(image);
2946 TestTransform( application, visual );
2947 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2952 int UtcDaliVisualSetTransform6(void)
2954 ToolkitTestApplication application;
2955 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
2957 VisualFactory factory = VisualFactory::Get();
2958 Property::Map propertyMap;
2959 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2960 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
2961 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
2962 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
2963 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
2964 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
2965 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
2966 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2967 Visual::Base visual = factory.CreateVisual(propertyMap);
2968 TestTransform( application, visual );
2969 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
2974 int UtcDaliVisualSetTransform7(void)
2976 ToolkitTestApplication application;
2977 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
2979 VisualFactory factory = VisualFactory::Get();
2980 Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200));
2981 Visual::Base visual = factory.CreateVisual(image);
2982 TestTransform( application, visual );
2983 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2988 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
2990 ToolkitTestApplication application;
2991 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
2993 VisualFactory factory = VisualFactory::Get();
2994 Property::Map propertyMap;
2995 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2996 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2997 Visual::Base visual = factory.CreateVisual( propertyMap );
2999 Property::Map transform;
3000 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
3002 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
3004 visual.SetTransformAndSize( transform, Vector2(100, 100) );
3006 Dali::Property::Map visualMap;
3007 visual.CreatePropertyMap( visualMap );
3008 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
3009 Dali::Property::Map* map = value->GetMap();
3010 DALI_TEST_CHECK( map );
3013 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
3014 DALI_TEST_CHECK( typeValue );
3015 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
3018 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
3019 DALI_TEST_CHECK( typeValue );
3020 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
3026 int UtcDaliNPatchVisualCustomShader(void)
3028 ToolkitTestApplication application;
3029 tet_infoline( "NPatchVisual with custom shader" );
3031 VisualFactory factory = VisualFactory::Get();
3032 Property::Map properties;
3033 Property::Map shader;
3034 const std::string vertexShader = "Foobar";
3035 const std::string fragmentShader = "Foobar";
3036 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3037 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3039 Property::Map transformMap;
3040 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
3041 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
3042 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
3043 transformMap["anchorPoint"] = Align::CENTER;
3044 transformMap["origin"] = Align::CENTER;
3045 properties[Visual::Property::TRANSFORM] = transformMap;
3047 properties[Visual::Property::TYPE] = Visual::IMAGE;
3048 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
3049 properties[Visual::Property::SHADER]=shader;
3050 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3052 Visual::Base visual = factory.CreateVisual( properties );
3053 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
3055 // trigger creation through setting on stage
3056 DummyControl dummy = DummyControl::New(true);
3057 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3058 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3059 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
3060 dummy.SetSize(2000, 2000);
3061 dummy.SetParentOrigin(ParentOrigin::CENTER);
3062 Stage::GetCurrent().Add(dummy);
3063 application.SendNotification();
3065 Renderer renderer = dummy.GetRendererAt( 0 );
3066 Shader shader2 = renderer.GetShader();
3067 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3068 Property::Map* map = value.GetMap();
3069 DALI_TEST_CHECK( map );
3071 Property::Index index = renderer.GetPropertyIndex("size");
3072 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
3074 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3075 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
3077 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3078 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
3083 int UtcDaliGradientVisualBlendMode(void)
3085 ToolkitTestApplication application;
3086 VisualFactory factory = VisualFactory::Get();
3088 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3089 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3090 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3091 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3092 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3093 .Add( Color::GREEN ) ) );
3095 Visual::Base alphaGradientVisual = factory.CreateVisual(
3096 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3097 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3098 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3099 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3100 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
3102 DummyControl control = DummyControl::New(true);
3103 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3104 Stage::GetCurrent().Add( control );
3106 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
3107 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
3108 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
3110 application.SendNotification();
3111 application.Render();
3113 // 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
3114 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
3115 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
3116 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
3121 int UtcDaliVisualRendererRemovalAndReAddition(void)
3123 ToolkitTestApplication application;
3124 tet_infoline( "UtcDaliVisualRendererRemoval" );
3126 VisualFactory factory = VisualFactory::Get();
3127 Property::Map propertyMap;
3128 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3129 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3130 Visual::Base visual = factory.CreateVisual( propertyMap );
3132 visual.SetDepthIndex( 1 );
3134 DummyControl dummyControl = DummyControl::New(true);
3135 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3136 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3137 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3139 dummyControl.SetSize(200.f, 200.f);
3140 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
3142 Stage::GetCurrent().Add( dummyControl );
3144 application.SendNotification();
3145 application.Render();
3147 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3149 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
3150 Stage::GetCurrent().Remove( dummyControl );
3151 application.SendNotification();
3152 application.Render();
3154 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3156 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
3158 Stage::GetCurrent().Add( dummyControl );
3160 application.SendNotification();
3161 application.Render();
3163 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3170 int UtcDaliVisualTextVisualRender(void)
3172 ToolkitTestApplication application;
3173 tet_infoline( "UtcDaliVisualTextVisualRender" );
3175 VisualFactory factory = VisualFactory::Get();
3176 Property::Map propertyMap;
3177 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3178 propertyMap.Insert( "mixColor", Color::WHITE );
3179 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3180 propertyMap.Insert( "enableMarkup", false );
3181 propertyMap.Insert( "text", "Hello world" );
3182 propertyMap.Insert( "fontFamily", "TizenSans" );
3184 Property::Map fontStyleMapSet;
3185 fontStyleMapSet.Insert( "weight", "bold" );
3186 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3188 propertyMap.Insert( "pointSize", 12.f );
3189 propertyMap.Insert( "multiLine", true );
3190 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3191 propertyMap.Insert( "verticalAlignment", "CENTER" );
3192 propertyMap.Insert( "textColor", Color::RED );
3193 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3194 textVisual.SetDepthIndex( 1 );
3196 DummyControl dummyControl = DummyControl::New(true);
3197 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3198 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3199 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3201 dummyControl.SetSize(200.f, 200.f);
3202 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3204 Stage::GetCurrent().Add( dummyControl );
3205 application.SendNotification();
3206 application.Render();
3209 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3210 propertyMap.Clear();
3211 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3212 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3213 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3214 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3216 Property::Map transformMap;
3217 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3218 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3220 textVisual = factory.CreateVisual( propertyMap );
3221 textVisual.SetDepthIndex( 1 );
3223 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3224 dummyControl.SetSize( 720.f, 640.f );
3226 application.SendNotification(); // force process events to ensure text visual
3227 // adds renderer to the dummy control in OnRelayout
3228 application.Render();
3230 Renderer renderer = dummyControl.GetRendererAt(0u);
3231 Property::Index index = renderer.GetPropertyIndex("size");
3233 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3234 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3239 int UtcDaliVisualTextVisualDisableEnable(void)
3241 ToolkitTestApplication application;
3242 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3244 VisualFactory factory = VisualFactory::Get();
3245 Property::Map propertyMap;
3246 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3247 propertyMap.Insert( "mixColor", Color::WHITE );
3248 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3249 propertyMap.Insert( "enableMarkup", false );
3250 propertyMap.Insert( "text", "Hello world" );
3251 propertyMap.Insert( "fontFamily", "TizenSans" );
3253 Property::Map fontStyleMapSet;
3254 fontStyleMapSet.Insert( "weight", "bold" );
3255 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3257 propertyMap.Insert( "pointSize", 12.f );
3258 propertyMap.Insert( "multiLine", true );
3259 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3260 propertyMap.Insert( "verticalAlignment", "CENTER" );
3261 propertyMap.Insert( "textColor", Color::RED );
3262 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3263 textVisual.SetDepthIndex( 1 );
3265 DummyControl dummyControl = DummyControl::New(true);
3266 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3267 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3268 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3270 dummyControl.SetSize(200.f, 200.f);
3271 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3273 Stage::GetCurrent().Add( dummyControl );
3274 application.SendNotification();
3275 application.Render();
3277 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3279 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3281 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3283 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3285 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3290 int UtcDaliVisualPremultipliedAlpha(void)
3292 ToolkitTestApplication application;
3293 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3295 VisualFactory factory = VisualFactory::Get();
3297 // image visual, test default value ( true )
3299 Visual::Base imageVisual = factory.CreateVisual(
3301 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3302 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3304 Dali::Property::Map visualMap;
3305 imageVisual.CreatePropertyMap( visualMap );
3306 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3309 DALI_TEST_CHECK( value );
3310 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3313 // image visual, override premultiplied
3315 Visual::Base imageVisual = factory.CreateVisual(
3317 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3318 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3319 .Add( Visual::Property::PREMULTIPLIED_ALPHA, false ) );
3321 Dali::Property::Map visualMap;
3322 imageVisual.CreatePropertyMap( visualMap );
3323 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3326 DALI_TEST_CHECK( value );
3327 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION);
3330 // svg visual ( premultiplied alpha by default is true )
3332 Visual::Base imageVisual = factory.CreateVisual(
3334 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3335 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3337 Dali::Property::Map visualMap;
3338 imageVisual.CreatePropertyMap( visualMap );
3339 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3342 DALI_TEST_CHECK( value );
3343 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3349 int UtcDaliRegisterVisualOrder(void)
3351 ToolkitTestApplication application;
3352 tet_infoline( "Register Visual Order" );
3354 DummyControl dummyControl = DummyControl::New(true);
3355 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3357 VisualFactory factory = VisualFactory::Get();
3358 Property::Map propertyMap;
3359 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3360 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3362 tet_infoline( "Register visual, should have depth index of 0.0f" );
3363 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3364 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3365 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3367 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3369 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3370 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3371 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3373 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3374 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3375 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3377 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3378 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3379 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3381 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3382 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3383 labelVisual.SetDepthIndex( -2000 );
3384 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3385 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3387 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3388 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3389 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3390 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3391 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3392 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3394 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3395 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3396 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3397 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3398 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3400 dummyControl.SetSize(200.f, 200.f);
3401 Stage::GetCurrent().Add( dummyControl );
3406 int UtcDaliRegisterVisualOrder02(void)
3408 ToolkitTestApplication application;
3409 tet_infoline( "Register Visual Order with Background Set" );
3411 DummyControl dummyControl = DummyControl::New(true);
3412 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3414 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3416 VisualFactory factory = VisualFactory::Get();
3417 Property::Map propertyMap;
3418 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3419 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3421 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3423 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3425 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3426 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3427 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3428 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3429 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3431 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3432 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3433 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3434 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3436 dummyControl.SetSize(200.f, 200.f);
3437 Stage::GetCurrent().Add( dummyControl );
3442 int UtcDaliRegisterVisualWithDepthIndex(void)
3444 ToolkitTestApplication application;
3445 tet_infoline( "Register a Visual With Depth Index" );
3447 DummyControl dummyControl = DummyControl::New(true);
3448 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3450 VisualFactory factory = VisualFactory::Get();
3451 Property::Map propertyMap;
3452 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3453 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3455 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3456 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3457 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3458 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3459 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3461 tet_infoline( "Register another visual with a depth index and it disabled" );
3462 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3463 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3464 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3465 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3467 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3468 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3469 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3470 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3471 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3473 dummyControl.SetSize(200.f, 200.f);
3474 Stage::GetCurrent().Add( dummyControl );
3479 int UtcDaliColorVisualRenderIfTransparentProperty(void)
3481 ToolkitTestApplication application;
3482 tet_infoline( "Test the renderIfTransparent property of ColorVisual" );
3484 VisualFactory factory = VisualFactory::Get();
3485 Property::Map propertyMap;
3486 propertyMap.Insert( Visual::Property::TYPE, Visual::COLOR );
3487 propertyMap.Insert( ColorVisual::Property::MIX_COLOR, Color::BLUE );
3489 tet_infoline( "Check default value" );
3491 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3492 Property::Map returnedMap;
3493 testVisual.CreatePropertyMap( returnedMap );
3495 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3496 DALI_TEST_CHECK( renderIfTransparentProperty );
3497 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3500 propertyMap.Insert( DevelColorVisual::Property::RENDER_IF_TRANSPARENT, true );
3502 tet_infoline( "Ensure set to value required" );
3504 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3505 Property::Map returnedMap;
3506 testVisual.CreatePropertyMap( returnedMap );
3508 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3509 DALI_TEST_CHECK( renderIfTransparentProperty );
3510 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), true, TEST_LOCATION );
3513 propertyMap[ DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = Color::BLUE;
3515 tet_infoline( "Ensure it returns default value if set to wrong type" );
3517 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3518 Property::Map returnedMap;
3519 testVisual.CreatePropertyMap( returnedMap );
3521 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3522 DALI_TEST_CHECK( renderIfTransparentProperty );
3523 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3529 int UtcDaliSvgVisualCustomShader(void)
3531 ToolkitTestApplication application;
3532 tet_infoline( "SvgVisual with custom shader" );
3534 VisualFactory factory = VisualFactory::Get();
3535 Property::Map properties;
3536 Property::Map shader;
3537 const std::string vertexShader = "Foobar";
3538 const std::string fragmentShader = "Foobar";
3539 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3540 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3542 properties[Visual::Property::TYPE] = Visual::IMAGE;
3543 properties[Visual::Property::SHADER] = shader;
3544 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3546 Visual::Base visual = factory.CreateVisual( properties );
3548 // trigger creation through setting on stage
3549 DummyControl dummy = DummyControl::New( true );
3550 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3551 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3553 dummy.SetSize( 200.f, 200.f );
3554 dummy.SetParentOrigin( ParentOrigin::CENTER );
3555 Stage::GetCurrent().Add( dummy );
3557 application.SendNotification();
3558 application.Render();
3560 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3562 Renderer renderer = dummy.GetRendererAt( 0 );
3563 Shader shader2 = renderer.GetShader();
3564 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3565 Property::Map* map = value.GetMap();
3566 DALI_TEST_CHECK( map );
3568 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3569 DALI_TEST_EQUALS( fragmentShader, fragment->Get< std::string >(), TEST_LOCATION );
3571 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3572 DALI_TEST_EQUALS( vertexShader, vertex->Get< std::string >(), TEST_LOCATION );