2 * Copyright (c) 2020 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 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS, 10.0f );
512 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
514 Property::Map resultMap;
515 colorVisual.CreatePropertyMap( resultMap );
517 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
518 DALI_TEST_CHECK( typeValue );
519 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
521 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
522 DALI_TEST_CHECK( colorValue );
523 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
525 Property::Value* radiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT );
526 DALI_TEST_CHECK( radiusValue );
527 DALI_TEST_CHECK( radiusValue->Get< float >() == 10.0f );
529 // change the blend color
530 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
531 colorVisual = factory.CreateVisual( propertyMap );
532 colorVisual.CreatePropertyMap( resultMap );
534 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
535 DALI_TEST_CHECK( colorValue );
536 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
541 int UtcDaliVisualGetPropertyMap2(void)
543 ToolkitTestApplication application;
544 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
546 VisualFactory factory = VisualFactory::Get();
547 Property::Map propertyMap;
548 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
549 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
550 propertyMap.Insert("borderColor", Color::BLUE);
551 propertyMap.Insert("borderSize", 5.f);
552 propertyMap.Insert("antiAliasing", true);
553 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
555 Property::Map resultMap;
556 borderVisual.CreatePropertyMap( resultMap );
558 // check the property values from the returned map from visual
559 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
560 DALI_TEST_CHECK( typeValue );
561 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
563 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
564 DALI_TEST_CHECK( colorValue );
565 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
567 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
568 DALI_TEST_CHECK( sizeValue );
569 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
571 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
572 DALI_TEST_CHECK( AAValue );
573 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
575 Property::Map propertyMap1;
576 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
577 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
578 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
579 borderVisual = factory.CreateVisual( propertyMap1 );
580 borderVisual.CreatePropertyMap( resultMap );
582 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
583 DALI_TEST_CHECK( typeValue );
584 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
586 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
587 DALI_TEST_CHECK( colorValue );
588 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
590 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
591 DALI_TEST_CHECK( colorValue );
592 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
598 int UtcDaliVisualGetPropertyMap2N(void)
600 ToolkitTestApplication application;
601 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
603 VisualFactory factory = VisualFactory::Get();
604 Property::Map propertyMap;
605 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
606 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
608 tet_infoline( "Test that the visual is created, with a default renderer" );
609 DALI_TEST_CHECK( borderVisual );
611 DummyControl dummyControl = DummyControl::New(true);
612 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
613 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
614 Stage::GetCurrent().Add( dummyControl );
616 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
622 int UtcDaliVisualGetPropertyMap3(void)
624 ToolkitTestApplication application;
625 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
627 VisualFactory factory = VisualFactory::Get();
628 DALI_TEST_CHECK( factory );
630 Property::Map propertyMap;
631 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
633 Vector2 start(-1.f, -1.f);
634 Vector2 end(1.f, 1.f);
635 propertyMap.Insert( "startPosition", start);
636 propertyMap.Insert( "endPosition", end);
637 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
639 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
641 Property::Array stopColors;
642 stopColors.PushBack( Color::RED );
643 stopColors.PushBack( Color::GREEN );
644 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
646 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
648 Property::Map resultMap;
649 gradientVisual.CreatePropertyMap( resultMap );
651 // check the property values from the returned map from visual
652 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
653 DALI_TEST_CHECK( value );
654 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
656 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
657 DALI_TEST_CHECK( value );
658 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
660 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
661 DALI_TEST_CHECK( value );
662 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
664 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
665 DALI_TEST_CHECK( value );
666 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
668 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
669 DALI_TEST_CHECK( value );
670 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
672 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
673 DALI_TEST_CHECK( value );
674 Property::Array* offsetArray = value->GetArray();
675 DALI_TEST_CHECK( offsetArray->Count() == 2 );
676 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
677 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
679 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
680 DALI_TEST_CHECK( value );
681 Property::Array* colorArray = value->GetArray();
682 DALI_TEST_CHECK( colorArray->Count() == 2 );
683 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
684 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
689 int UtcDaliVisualGetPropertyMap4(void)
691 ToolkitTestApplication application;
692 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
694 VisualFactory factory = VisualFactory::Get();
695 DALI_TEST_CHECK( factory );
697 Property::Map propertyMap;
698 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
700 Vector2 center(100.f, 100.f);
701 float radius = 100.f;
702 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
703 propertyMap.Insert(GradientVisual::Property::CENTER, center);
704 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
705 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
707 Property::Array stopColors;
708 stopColors.PushBack( Color::RED );
709 stopColors.PushBack( Color::BLACK );
710 stopColors.PushBack( Color::GREEN );
711 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
713 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
714 DALI_TEST_CHECK( gradientVisual );
716 Property::Map resultMap;
717 gradientVisual.CreatePropertyMap( resultMap );
719 // check the property values from the returned map from visual
720 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
721 DALI_TEST_CHECK( value );
722 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
724 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
725 DALI_TEST_CHECK( value );
726 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
728 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
729 DALI_TEST_CHECK( value );
730 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
732 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
733 DALI_TEST_CHECK( value );
734 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
736 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
737 DALI_TEST_CHECK( value );
738 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
740 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
741 DALI_TEST_CHECK( value );
742 Property::Array* offsetArray = value->GetArray();
743 DALI_TEST_CHECK( offsetArray->Count() == 3 );
744 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
745 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
746 // any stop value will be clamped to [0.0, 1.0];
747 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
749 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
750 DALI_TEST_CHECK( value );
751 Property::Array* colorArray = value->GetArray();
752 DALI_TEST_CHECK( colorArray->Count() == 3 );
753 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
754 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
755 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
760 int UtcDaliVisualGetPropertyMap5(void)
762 ToolkitTestApplication application;
763 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
765 VisualFactory factory = VisualFactory::Get();
766 Property::Map propertyMap;
767 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
768 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
769 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
770 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
771 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
772 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
773 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
774 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
775 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
776 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
777 propertyMap.Insert( "synchronousLoading", true );
779 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
780 DALI_TEST_CHECK( imageVisual );
782 Property::Map resultMap;
783 imageVisual.CreatePropertyMap( resultMap );
785 // check the property values from the returned map from visual
786 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
787 DALI_TEST_CHECK( value );
788 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
790 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
791 DALI_TEST_CHECK( value );
792 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
794 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
795 DALI_TEST_CHECK( value );
796 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
798 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
799 DALI_TEST_CHECK( value );
800 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
802 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
803 DALI_TEST_CHECK( value );
804 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
806 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
807 DALI_TEST_CHECK( value );
808 DALI_TEST_CHECK( value->Get<int>() == 20 );
810 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
811 DALI_TEST_CHECK( value );
812 DALI_TEST_CHECK( value->Get<int>() == 30 );
814 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
815 DALI_TEST_CHECK( value );
816 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
818 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
819 DALI_TEST_CHECK( value );
820 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
822 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
823 DALI_TEST_CHECK( value );
824 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
826 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
827 DALI_TEST_CHECK( value );
828 DALI_TEST_CHECK( value->Get<bool>() == true );
830 // Get an image visual with an image handle, and test the default property values
831 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
832 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
833 imageVisual = factory.CreateVisual(image);
834 imageVisual.CreatePropertyMap( resultMap );
836 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
837 DALI_TEST_CHECK( value );
838 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
840 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
841 DALI_TEST_CHECK( value );
842 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
844 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
845 DALI_TEST_CHECK( value );
846 DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
848 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
849 DALI_TEST_CHECK( value );
850 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
852 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
853 DALI_TEST_CHECK( value );
854 DALI_TEST_CHECK( value->Get<int>() == 100 );
856 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
857 DALI_TEST_CHECK( value );
858 DALI_TEST_CHECK( value->Get<int>() == 200 );
860 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
861 DALI_TEST_CHECK( value );
862 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
864 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
865 DALI_TEST_CHECK( value );
866 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
868 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
869 DALI_TEST_CHECK( value );
870 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
872 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
873 DALI_TEST_CHECK( value );
874 DALI_TEST_CHECK( value->Get<bool>() == false );
879 int UtcDaliVisualGetPropertyMap6(void)
881 ToolkitTestApplication application;
882 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
884 Rect< int > border( 1, 1, 1, 1 );
886 VisualFactory factory = VisualFactory::Get();
887 Property::Map propertyMap;
888 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
889 propertyMap.Insert( "mixColor", Color::MAGENTA );
890 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
891 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
892 propertyMap.Insert( ImageVisual::Property::BORDER, border );
893 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
894 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
895 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
897 Property::Map resultMap;
898 nPatchVisual.CreatePropertyMap( resultMap );
900 // check the property values from the returned map from visual
901 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
902 DALI_TEST_CHECK( value );
903 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
905 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
906 DALI_TEST_CHECK( value );
907 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
909 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
910 DALI_TEST_CHECK( value );
911 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
913 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
914 DALI_TEST_CHECK( value );
915 DALI_TEST_CHECK( value->Get<bool>() );
917 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
918 DALI_TEST_CHECK( value );
919 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
921 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
922 DALI_TEST_CHECK( value );
923 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
925 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
926 DALI_TEST_CHECK( value );
927 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
929 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
931 Property::Map propertyMap1;
932 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
933 propertyMap1.Insert( "mixColor", Color::MAGENTA );
934 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
935 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
936 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
937 nPatchVisual = factory.CreateVisual( propertyMap1 );
939 nPatchVisual.CreatePropertyMap( resultMap );
941 // check the property values from the returned map from visual
942 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
943 DALI_TEST_CHECK( value );
944 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
946 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
947 DALI_TEST_CHECK( value );
948 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
950 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
951 DALI_TEST_CHECK( value );
952 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
954 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
955 DALI_TEST_CHECK( value );
956 DALI_TEST_CHECK( value->Get<bool>() );
958 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
959 DALI_TEST_CHECK( value );
960 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
965 int UtcDaliVisualGetPropertyMap7(void)
967 ToolkitTestApplication application;
968 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
970 // request SvgVisual with a property map
971 VisualFactory factory = VisualFactory::Get();
972 Property::Map propertyMap;
973 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
974 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
975 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
976 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
977 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
979 Property::Map resultMap;
980 svgVisual.CreatePropertyMap( resultMap );
981 // check the property values from the returned map from a visual
982 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
983 DALI_TEST_CHECK( value );
984 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
986 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
987 DALI_TEST_CHECK( value );
988 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
990 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
991 DALI_TEST_CHECK( value );
992 DALI_TEST_CHECK( value->Get<bool>() == false );
994 // request SvgVisual with a property map 2
996 propertyMap[ "visualType" ] = Visual::SVG;
997 propertyMap[ "mixColor" ] = Color::WHITE;
998 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
999 propertyMap[ "atlasing" ] = true;
1000 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
1003 svgVisual1.CreatePropertyMap( resultMap );
1004 // check the property values from the returned map from a visual
1005 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1006 DALI_TEST_CHECK( value );
1007 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1009 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1010 DALI_TEST_CHECK( value );
1011 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1013 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1014 DALI_TEST_CHECK( value );
1015 DALI_TEST_CHECK( value->Get<bool>() == true );
1017 // request SvgVisual with an URL
1018 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1020 svgVisual2.CreatePropertyMap( resultMap );
1021 // check the property values from the returned map from a visual
1022 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1023 DALI_TEST_CHECK( value );
1024 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1026 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1027 DALI_TEST_CHECK( value );
1028 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1034 int UtcDaliVisualGetPropertyMap8(void)
1036 ToolkitTestApplication application;
1037 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
1039 //Request MeshVisual using a property map.
1040 VisualFactory factory = VisualFactory::Get();
1041 Property::Map propertyMap;
1042 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1043 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
1044 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1045 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1046 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1047 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1048 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1049 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
1051 Property::Map resultMap;
1052 meshVisual.CreatePropertyMap( resultMap );
1053 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
1055 //Check values in the result map are identical to the initial map's values.
1056 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1057 DALI_TEST_CHECK( value );
1058 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
1060 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
1061 DALI_TEST_CHECK( value );
1062 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
1064 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
1065 DALI_TEST_CHECK( value );
1066 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
1068 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
1069 DALI_TEST_CHECK( value );
1070 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
1072 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
1073 DALI_TEST_CHECK( value );
1074 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1076 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1077 DALI_TEST_CHECK( value );
1078 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1083 //Primitive shape visual
1084 int UtcDaliVisualGetPropertyMap9(void)
1086 ToolkitTestApplication application;
1087 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1089 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1090 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1092 //Request PrimitiveVisual using a property map.
1093 VisualFactory factory = VisualFactory::Get();
1094 Property::Map propertyMap;
1095 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1096 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1097 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1098 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1099 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1100 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1101 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1102 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1103 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1104 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1105 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1106 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1107 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1108 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1110 Property::Map resultMap;
1111 primitiveVisual.CreatePropertyMap( resultMap );
1113 //Check values in the result map are identical to the initial map's values.
1114 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1115 DALI_TEST_CHECK( value );
1116 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1118 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1119 DALI_TEST_CHECK( value );
1120 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1122 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1123 DALI_TEST_CHECK( value );
1124 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1125 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1127 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1128 DALI_TEST_CHECK( value );
1129 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1131 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1132 DALI_TEST_CHECK( value );
1133 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1135 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1136 DALI_TEST_CHECK( value );
1137 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1139 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1140 DALI_TEST_CHECK( value );
1141 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1143 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1144 DALI_TEST_CHECK( value );
1145 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1147 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1148 DALI_TEST_CHECK( value );
1149 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1151 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1152 DALI_TEST_CHECK( value );
1153 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1155 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1156 DALI_TEST_CHECK( value );
1157 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1159 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1160 DALI_TEST_CHECK( value );
1161 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1163 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1164 DALI_TEST_CHECK( value );
1165 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1171 int UtcDaliVisualGetPropertyMap10(void)
1173 ToolkitTestApplication application;
1174 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1176 //Request PrimitiveVisual using a property map.
1177 VisualFactory factory = VisualFactory::Get();
1179 Property::Map propertyMap;
1180 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1181 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1182 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1183 propertyMap.Insert( "enableMarkup", false );
1184 propertyMap.Insert( "text", "Hello world" );
1185 propertyMap.Insert( "fontFamily", "TizenSans" );
1187 Property::Map fontStyleMapSet;
1188 fontStyleMapSet.Insert( "weight", "bold" );
1189 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1191 propertyMap.Insert( "pointSize", 12.f );
1192 propertyMap.Insert( "multiLine", true );
1193 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1194 propertyMap.Insert( "verticalAlignment", "CENTER" );
1195 propertyMap.Insert( "textColor", Color::RED );
1197 Property::Map shadowMapSet;
1198 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1200 Property::Map underlineMapSet;
1201 propertyMap.Insert( "underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1) );
1203 Property::Map outlineMapSet;
1204 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1206 Property::Map backgroundMapSet;
1207 propertyMap.Insert( "textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN) );
1209 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1211 Property::Map resultMap;
1212 textVisual.CreatePropertyMap( resultMap );
1214 //Check values in the result map are identical to the initial map's values.
1215 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1216 DALI_TEST_CHECK( value );
1217 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1219 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1220 DALI_TEST_CHECK( value );
1221 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1223 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1224 DALI_TEST_CHECK( value );
1225 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1227 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1228 DALI_TEST_CHECK( value );
1229 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1231 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1232 DALI_TEST_CHECK( value );
1234 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1235 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1236 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1238 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1239 DALI_TEST_CHECK( value );
1240 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1242 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1243 DALI_TEST_CHECK( value );
1244 DALI_TEST_CHECK( value->Get<bool>() );
1246 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1247 DALI_TEST_CHECK( value );
1248 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1250 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1251 DALI_TEST_CHECK( value );
1252 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1254 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1255 DALI_TEST_CHECK( value );
1256 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1258 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1259 DALI_TEST_CHECK( value );
1260 DALI_TEST_CHECK( !value->Get<bool>() );
1262 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1263 DALI_TEST_CHECK( value );
1265 Property::Map shadowMapGet = value->Get<Property::Map>();
1266 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1267 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1269 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1270 DALI_TEST_CHECK( value );
1272 Property::Map underlineMapGet = value->Get<Property::Map>();
1273 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1274 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1276 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1277 DALI_TEST_CHECK( value );
1279 Property::Map outlineMapGet = value->Get<Property::Map>();
1280 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1281 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1283 value = resultMap.Find( DevelTextVisual::Property::BACKGROUND, Property::MAP );
1284 DALI_TEST_CHECK( value );
1286 Property::Map backgroundMapGet = value->Get<Property::Map>();
1287 DALI_TEST_EQUALS( backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION );
1288 DALI_TEST_EQUALS( DaliTestCheckMaps( backgroundMapGet, backgroundMapSet ), true, TEST_LOCATION );
1293 int UtcDaliVisualGetPropertyMap11(void)
1295 ToolkitTestApplication application;
1296 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1298 VisualFactory factory = VisualFactory::Get();
1299 DALI_TEST_CHECK( factory );
1301 Property::Map propertyMap;
1302 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1304 Vector2 start(-0.5f, 0.5f);
1305 Vector2 end (0.5f, -0.0f);
1306 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1307 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1308 Vector2 rotate_center(0.0f, 0.4f);
1309 float rotate_amount = 1.57f;
1310 float offset = 100.f;
1312 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1313 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1314 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1316 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1317 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1318 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1319 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1320 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1321 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1322 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1324 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1325 DALI_TEST_CHECK( animatedGradientVisual );
1327 Property::Map resultMap;
1328 animatedGradientVisual.CreatePropertyMap( resultMap );
1330 // check the property values from the returned map from visual
1331 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1332 DALI_TEST_CHECK( value );
1333 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1335 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1336 DALI_TEST_CHECK( value );
1337 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1339 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1340 DALI_TEST_CHECK( value );
1341 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1343 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1344 DALI_TEST_CHECK( value );
1345 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1348 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1349 DALI_TEST_CHECK( value );
1350 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1352 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1353 DALI_TEST_CHECK( value );
1354 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1356 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1357 DALI_TEST_CHECK( value );
1358 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1360 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1361 DALI_TEST_CHECK( value );
1362 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1364 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1365 DALI_TEST_CHECK( value );
1366 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1368 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1369 DALI_TEST_CHECK( value );
1370 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1372 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1373 DALI_TEST_CHECK( value );
1374 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1379 int UtcDaliVisualGetPropertyMap12(void)
1381 ToolkitTestApplication application;
1382 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1384 // Case 1 : Set values by index
1386 tet_printf( " - Set Values by Index\n" );
1387 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1388 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1389 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1391 tet_printf( "test with delay [%f]\n", _delay );
1392 VisualFactory factory = VisualFactory::Get();
1393 DALI_TEST_CHECK( factory );
1395 Property::Map propertyMap;
1396 Property::Map animationMap;
1397 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1399 float duration = 1.1f;
1400 float delay = _delay;
1401 float repeat_delay = 0.4f;
1403 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1405 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1406 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1408 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1410 animationMap.Clear();
1411 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1412 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1413 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1414 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1415 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1416 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1417 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1418 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1419 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1421 return animationMap;
1424 Vector2 start1(-0.5f, 0.5f);
1425 Vector2 end1 (0.5f, -0.5f);
1426 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1427 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1428 Vector2 rotate_center1(0.0f, 0.4f);
1429 float rotate_amount1 = 0.0f;
1430 float offset1 = 0.f;
1432 Vector2 start2(-0.5f, -0.5f);
1433 Vector2 end2 (0.5f, 0.5f);
1434 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1435 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1436 Vector2 rotate_center2(0.0f, -0.4f);
1437 float rotate_amount2 = 6.2832f;
1438 float offset2 = 2.f;
1440 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1441 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1442 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1444 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1445 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1446 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1447 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1448 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1449 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1450 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1452 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1453 DALI_TEST_CHECK( animatedGradientVisual );
1455 Property::Map resultMap;
1456 animatedGradientVisual.CreatePropertyMap( resultMap );
1458 // check the property values from the returned map from visual
1459 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1460 DALI_TEST_CHECK( value );
1461 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1463 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1464 DALI_TEST_CHECK( value );
1465 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1467 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1468 DALI_TEST_CHECK( value );
1469 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1471 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1472 DALI_TEST_CHECK( value );
1473 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1475 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
1477 tet_printf("Check value at %d\n", line_num);
1478 value = resultMap.Find( index, Property::MAP );
1479 DALI_TEST_CHECK( value );
1480 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1481 Property::Map *temp_map = value->GetMap();
1482 DALI_TEST_CHECK( temp_map );
1484 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1486 Property::Value *res = temp_map->Find( index );
1487 DALI_TEST_CHECK( res );
1491 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1492 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1493 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1494 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1495 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1496 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1497 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1498 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1499 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1502 // check the animation map data is good
1503 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1504 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1505 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1506 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1507 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1508 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1509 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1513 // Case 2 : Set values by string
1515 tet_printf( " - Set Values by String\n" );
1516 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1517 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1518 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1520 tet_printf( "test with delay [%f]\n", _delay );
1521 VisualFactory factory = VisualFactory::Get();
1522 DALI_TEST_CHECK( factory );
1524 Property::Map propertyMap;
1525 Property::Map animationMap;
1526 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1528 float duration = 1.1f;
1529 float delay = _delay;
1530 float repeat_delay = 0.4f;
1532 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1534 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1535 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1537 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1539 animationMap.Clear();
1540 animationMap.Insert("startValue" , start);
1541 animationMap.Insert("targetValue" , target);
1542 animationMap.Insert("directionType", "BACKWARD");
1543 animationMap.Insert("duration" , duration);
1544 animationMap.Insert("delay" , delay);
1545 animationMap.Insert("repeat" , loop_count);
1546 animationMap.Insert("repeatDelay" , repeat_delay);
1547 animationMap.Insert("motionType" , "MIRROR");
1548 animationMap.Insert("easingType" , "IN_OUT");
1550 return animationMap;
1553 Vector2 start1(-0.5f, 0.5f);
1554 Vector2 end1 (0.5f, -0.5f);
1555 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1556 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1557 Vector2 rotate_center1(0.0f, 0.4f);
1558 float rotate_amount1 = 0.0f;
1559 float offset1 = 0.f;
1561 Vector2 start2(-0.5f, -0.5f);
1562 Vector2 end2 (0.5f, 0.5f);
1563 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1564 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1565 Vector2 rotate_center2(0.0f, -0.4f);
1566 float rotate_amount2 = 6.2832f;
1567 float offset2 = 2.f;
1569 // For test mix the type string/index key and string/index value works well.
1570 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1571 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1572 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1574 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1575 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1576 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1577 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1578 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1579 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1580 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1582 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1583 DALI_TEST_CHECK( animatedGradientVisual );
1585 Property::Map resultMap;
1586 animatedGradientVisual.CreatePropertyMap( resultMap );
1588 // check the property values from the returned map from visual
1589 // Note : resultMap from CreatePropertyMap only contain indexKey
1590 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1591 DALI_TEST_CHECK( value );
1592 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1594 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1595 DALI_TEST_CHECK( value );
1596 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1598 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1599 DALI_TEST_CHECK( value );
1600 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1602 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1603 DALI_TEST_CHECK( value );
1604 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1606 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
1608 tet_printf("Check value at %d\n", line_num);
1609 value = resultMap.Find( index, Property::MAP );
1610 DALI_TEST_CHECK( value );
1611 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1612 Property::Map *temp_map = value->GetMap();
1613 DALI_TEST_CHECK( temp_map );
1615 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1617 Property::Value *res = temp_map->Find( index );
1618 DALI_TEST_CHECK( res );
1622 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1623 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1624 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1625 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1626 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1627 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1628 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1629 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1630 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1633 // check the animation map data is good
1634 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1635 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1636 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1637 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1638 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1639 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1640 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1646 int UtcDaliVisualGetPropertyMap13(void)
1648 ToolkitTestApplication application;
1649 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1651 for(int _direction = 0; _direction <= 1; ++_direction)
1653 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1655 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1656 VisualFactory factory = VisualFactory::Get();
1657 DALI_TEST_CHECK( factory );
1659 Property::Map propertyMap;
1660 Property::Map animationMap;
1661 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1663 float duration = 1.0f;
1664 float delay = _delay;
1665 float repeat_delay = 0.5f;
1667 int direction = _direction;
1668 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1669 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1670 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1672 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1674 animationMap.Clear();
1675 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1676 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1677 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1678 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1679 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1680 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1681 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1682 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1683 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1684 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1685 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1687 return animationMap;
1690 Vector2 start1(-0.5f, 0.5f);
1691 Vector2 end1 (0.5f, -0.5f);
1692 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1693 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1694 Vector2 rotate_center1(1.0f, 0.4f);
1695 float rotate_amount1 = 2.0f;
1696 float offset1 = 1.f;
1698 Vector2 start2(-0.5f, -0.5f);
1699 Vector2 end2 (0.5f, 0.5f);
1700 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1701 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1702 Vector2 rotate_center2(1.0f, -0.4f);
1703 float rotate_amount2 = 1.0f;
1704 float offset2 = 3.f;
1706 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1707 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1708 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1710 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1711 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1712 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1713 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1714 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1715 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1716 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1718 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1719 DALI_TEST_CHECK( animatedGradientVisual );
1721 Property::Map resultMap;
1722 animatedGradientVisual.CreatePropertyMap( resultMap );
1724 // check the property values from the returned map from visual
1725 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1726 DALI_TEST_CHECK( value );
1727 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1729 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1730 DALI_TEST_CHECK( value );
1731 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1733 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1734 DALI_TEST_CHECK( value );
1735 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1737 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1738 DALI_TEST_CHECK( value );
1739 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1741 // If loop_count = 0, Animation doesn't created.
1742 // Optimized resultMap only have one value, which is target value
1743 // Note: target value will be changed by direction option.
1744 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1745 DALI_TEST_CHECK( value );
1746 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1748 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1749 DALI_TEST_CHECK( value );
1750 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1752 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1753 DALI_TEST_CHECK( value );
1754 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1756 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1757 DALI_TEST_CHECK( value );
1758 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1760 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1761 DALI_TEST_CHECK( value );
1762 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1764 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1765 DALI_TEST_CHECK( value );
1766 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1768 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1769 DALI_TEST_CHECK( value );
1770 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1777 int UtcDaliVisualAnimateBorderVisual01(void)
1779 ToolkitTestApplication application;
1780 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1782 VisualFactory factory = VisualFactory::Get();
1783 Property::Map propertyMap;
1784 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1785 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1786 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1787 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1788 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1791 map["target"] = "testVisual";
1792 map["property"] = "mixColor";
1793 map["targetValue"] = Vector4(1,1,1,0.1);
1794 map["animator"] = Property::Map()
1795 .Add("alphaFunction", "LINEAR")
1796 .Add("timePeriod", Property::Map()
1798 .Add("duration", 4.0f));
1800 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1802 DummyControl actor = DummyControl::New(true);
1803 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1804 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1805 actor.SetSize(2000, 2000);
1806 actor.SetParentOrigin(ParentOrigin::CENTER);
1807 Stage::GetCurrent().Add(actor);
1809 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1811 Renderer renderer = actor.GetRendererAt(0);
1812 Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR );
1813 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
1815 Animation animation = dummyImpl.CreateTransition( transition );
1817 // Animate the mix color through the transition, and the border color through
1818 // programmatic method.
1819 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1822 application.SendNotification();
1823 application.Render(0);
1824 application.Render(2000u); // halfway point between blue and white
1826 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1827 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1828 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1829 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1831 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1832 testColor = Vector4( 1,1,1,0.45f );
1833 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1834 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1837 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1838 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1840 application.Render(2000u);
1842 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1843 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1844 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1846 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1847 testColor = Vector4(1,1,1,0.1);
1848 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), TEST_LOCATION );
1849 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1851 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1852 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1858 int UtcDaliVisualAnimateBorderVisual02(void)
1860 ToolkitTestApplication application;
1861 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1863 VisualFactory factory = VisualFactory::Get();
1864 Property::Map propertyMap;
1865 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1866 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1867 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1868 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1870 DummyControl actor = DummyControl::New(true);
1871 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1872 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1873 actor.SetSize(2000, 2000);
1874 actor.SetParentOrigin(ParentOrigin::CENTER);
1875 Stage::GetCurrent().Add(actor);
1877 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1879 Renderer renderer = actor.GetRendererAt(0);
1880 Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE );
1882 Animation animation = Animation::New(4.0f);
1883 animation.AnimateTo( Property(renderer, index), 9.0f );
1886 application.SendNotification();
1887 application.Render(0);
1888 application.Render(2000u); // halfway point
1890 float size = renderer.GetCurrentProperty< float >( index );
1891 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1892 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1894 application.Render(2000u); // halfway point between blue and white
1896 size = renderer.GetCurrentProperty< float >( index );
1897 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1898 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1903 int UtcDaliVisualAnimateColorVisual(void)
1905 ToolkitTestApplication application;
1906 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1908 VisualFactory factory = VisualFactory::Get();
1909 Property::Map propertyMap;
1910 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1911 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1912 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1914 DummyControl actor = DummyControl::New(true);
1915 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1916 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1917 actor.SetSize(2000, 2000);
1918 actor.SetParentOrigin(ParentOrigin::CENTER);
1919 Stage::GetCurrent().Add(actor);
1921 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1923 Renderer renderer = actor.GetRendererAt(0);
1924 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR );
1926 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1927 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1929 Animation animation = Animation::New(4.0f);
1930 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1933 application.SendNotification();
1934 application.Render(0);
1935 application.Render(2000u); // halfway point
1937 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1938 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1939 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1941 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1943 application.Render(2000u); // halfway point between blue and white
1945 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1946 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1948 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1950 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1951 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1956 int UtcDaliVisualAnimatePrimitiveVisual(void)
1958 ToolkitTestApplication application;
1959 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1962 VisualFactory factory = VisualFactory::Get();
1963 Property::Map propertyMap;
1964 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1965 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1966 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1967 Visual::Base visual = factory.CreateVisual( propertyMap );
1969 DummyControl actor = DummyControl::New(true);
1970 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1971 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1972 actor.SetSize(2000, 2000);
1973 actor.SetParentOrigin(ParentOrigin::CENTER);
1974 actor.SetColor(Color::BLACK);
1975 Stage::GetCurrent().Add(actor);
1977 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1979 Renderer renderer = actor.GetRendererAt(0);
1980 Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR );
1982 tet_infoline("Test that the renderer has the Primitive mix color");
1983 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
1985 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
1986 const Vector4 TARGET_MIX_COLOR( Color::RED );
1989 map["target"] = "testVisual";
1990 map["property"] = "mixColor";
1991 map["initialValue"] = INITIAL_MIX_COLOR;
1992 map["targetValue"] = TARGET_MIX_COLOR;
1993 map["animator"] = Property::Map()
1994 .Add("alphaFunction", "LINEAR")
1995 .Add("timePeriod", Property::Map()
1997 .Add("duration", 4.0f));
1999 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
2001 Animation animation = dummyImpl.CreateTransition( transition );
2002 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
2003 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
2005 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
2008 application.SendNotification();
2009 application.Render(0);
2010 application.Render(2000u); // halfway point
2011 application.SendNotification();
2013 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
2014 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a )), true, TEST_LOCATION );
2015 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
2017 application.Render(2001u); // go past end
2018 application.SendNotification(); // Trigger signals
2020 DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
2021 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4( 1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a ) ), true, TEST_LOCATION );
2022 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
2024 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
2025 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2033 int UtcDaliVisualAnimatedGradientVisual01(void)
2035 ToolkitTestApplication application;
2036 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
2039 VisualFactory factory = VisualFactory::Get();
2040 Property::Map propertyMap;
2041 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2042 Visual::Base visual = factory.CreateVisual( propertyMap );
2044 DummyControl actor = DummyControl::New(true);
2045 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2046 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2047 actor.SetSize(2000, 2000);
2048 actor.SetParentOrigin(ParentOrigin::CENTER);
2049 actor.SetColor(Color::BLACK);
2050 Stage::GetCurrent().Add(actor);
2052 application.SendNotification();
2053 application.Render(0);
2054 application.SendNotification();
2056 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2058 for(int step_iter = 0; step_iter < 3; step_iter++)
2060 application.SendNotification();
2061 application.Render(0);
2062 application.Render(750u); // step i/4
2063 application.SendNotification();
2065 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
2066 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
2067 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2068 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2069 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
2070 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
2071 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
2074 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2075 application.Render(750u); // go to end
2076 application.SendNotification();
2078 application.Render(10u); // finish
2079 application.SendNotification();
2082 application.SendNotification();
2083 application.Render(0u);
2084 application.SendNotification();
2090 int UtcDaliVisualAnimatedGradientVisual02(void)
2092 ToolkitTestApplication application;
2093 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2096 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
2097 int _direction[2] = {0, 1};
2098 int _loop_count[3] = {-1, 0, 1};
2099 int _motion[2] = {0, 1};
2100 int _easing[4] = {0, 1, 2, 3};
2102 int test_case_max = 4 * 2 * 3 * 2 * 4;
2104 int test_case_d = 7; // 7 is the number of animated properties.
2106 float _duration = 0.4f;
2107 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2108 float noise_maker = 0.0f;
2109 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2110 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2112 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2114 VisualFactory factory = VisualFactory::Get();
2115 Property::Map propertyMap;
2116 Property::Map animationMap;
2117 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2119 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2120 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2121 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2123 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&
2125 int tc = (test_case + tc_offset);
2126 int idx_easing = tc % 4; tc /= 4;
2127 int idx_motion = tc % 2; tc /= 2;
2128 int idx_loop_count = tc % 3; tc /= 3;
2129 int idx_direction = tc % 2; tc /= 2;
2130 int idx_delay = tc % 4; tc /= 4;
2132 float duration = _duration - _repeat_delay;
2133 float repeat_delay = _repeat_delay;
2134 float delay = _delay[idx_delay] * _duration;
2135 int direction = _direction[idx_direction];
2136 int loop_count = _loop_count[idx_loop_count];
2137 int motion = _motion[idx_motion];
2138 int easing = _easing[idx_easing];
2140 animationMap.Clear();
2141 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2142 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2143 if( direction == 0 )
2145 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2149 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2151 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2152 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2153 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2154 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2157 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2161 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2165 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2167 else if( easing == 1 )
2169 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2171 else if( easing == 2 )
2173 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2177 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2180 return animationMap;
2183 // Give different values for debuging
2184 noise_maker += 1.0f;
2185 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2186 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2187 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2188 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2189 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2190 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2191 float offset1 = 0.f + noise_maker * 0.1f;
2193 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2194 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2195 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2196 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2197 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2198 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2199 float offset2 = 2.f + noise_maker * 0.1f;
2201 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2202 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2203 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2205 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2206 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2207 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2208 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2209 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2210 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2211 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2213 Visual::Base visual = factory.CreateVisual( propertyMap );
2215 DummyControl actor = DummyControl::New( true );
2216 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2217 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2218 actor.SetSize( 2000, 2000 );
2219 actor.SetParentOrigin(ParentOrigin::CENTER);
2220 actor.SetColor(Color::BLACK);
2221 Stage::GetCurrent().Add(actor);
2223 application.SendNotification();
2224 application.Render( 0 );
2225 application.SendNotification();
2227 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2229 application.SendNotification();
2231 //Compare between CPU calculated value and Shader Visual calculated value
2232 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
2234 int tc = (test_case + tc_offset);
2235 int idx_easing = tc % 4; tc /= 4;
2236 int idx_motion = tc % 2; tc /= 2;
2237 int idx_loop_count = tc % 3; tc /= 3;
2238 int idx_direction = tc % 2; tc /= 2;
2239 int idx_delay = tc % 4; tc /= 4;
2241 float duration = _duration - _repeat_delay;
2242 float repeat_delay = _repeat_delay;
2243 float delay = _delay[idx_delay] * _duration;
2244 int direction = _direction[idx_direction];
2245 int loop_count = _loop_count[idx_loop_count];
2246 int motion = _motion[idx_motion];
2247 int easing = _easing[idx_easing];
2249 progress -= delay / _duration;
2251 Property::Value s = start;
2252 Property::Value t = target;
2253 if( direction == 1 )
2258 float x; ///< Animator progress value
2259 if( loop_count == 0 )
2263 else if( loop_count > 0 && progress + 0.01f > loop_count )
2265 x = ( motion == 0 ) ? 1.0f : 0.0f;
2269 if( progress < 0.0f )
2273 progress = fmodf( progress, 1.0f );
2274 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2279 x = progress * 2.0f;
2286 if( easing == 1 ) // EASE_IN
2290 else if( easing == 2 ) // EASE_OUT
2294 else if( easing == 3 ) // EASE_IN_OUT
2296 x = x * x * (3.0f - 2.0f * x);
2299 if( value_type == 0 ) // result type is Float
2303 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2304 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2305 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2307 else if( value_type == 1 ) // result type is Vector2
2311 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2312 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2313 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2315 else if( value_type == 2 ) // result type is Vector3
2319 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2320 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2321 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2323 else // result type is Vector4
2327 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2328 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2329 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2334 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2336 for( int step_iter = 0; step_iter < 3; step_iter++ )
2338 application.SendNotification();
2339 application.Render( _duration * 250.f ); // step i/4
2340 application.SendNotification();
2343 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2344 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2345 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2346 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2347 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2348 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2349 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2351 application.SendNotification();
2352 application.Render(_duration * 250.f); // step 4/4 will not test
2353 application.SendNotification();
2357 application.SendNotification();
2359 application.SendNotification();
2360 application.Render(10.f); // tempral time
2361 application.SendNotification();
2368 int UtcDaliVisualAnimatedGradientVisual03(void)
2370 ToolkitTestApplication application;
2371 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2374 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
2375 int _direction[2] = {0, 1};
2376 int _loop_count[3] = {-1, 0, 1};
2377 int _motion[2] = {0, 1};
2378 int _easing[4] = {0, 1, 2, 3};
2380 int test_case_max = 4 * 2 * 3 * 2 * 4;
2382 int test_case_d = 7; // 7 is the number of animated properties.
2384 float _duration = 0.4f;
2385 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2386 float noise_maker = 0.2f;
2387 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2388 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2390 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2392 VisualFactory factory = VisualFactory::Get();
2393 Property::Map propertyMap;
2394 Property::Map animationMap;
2395 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2397 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&
2399 int tc = (test_case + tc_offset);
2400 int idx_easing = tc % 4; tc /= 4;
2401 int idx_motion = tc % 2; tc /= 2;
2402 int idx_loop_count = tc % 3; tc /= 3;
2403 int idx_direction = tc % 2; tc /= 2;
2404 int idx_delay = tc % 4; tc /= 4;
2406 float duration = _duration - _repeat_delay;
2407 float repeat_delay = _repeat_delay;
2408 float delay = _delay[idx_delay] * _duration;
2409 int direction = _direction[idx_direction];
2410 int loop_count = _loop_count[idx_loop_count];
2411 int motion = _motion[idx_motion];
2412 int easing = _easing[idx_easing];
2414 animationMap.Clear();
2415 animationMap.Insert( "startValue", start );
2416 animationMap.Insert( "targetValue", target );
2417 if( direction == 0 )
2419 animationMap.Insert("directionType", "FORWARD");
2423 animationMap.Insert("directionType", "BACKWARD");
2425 animationMap.Insert("duration", duration);
2426 animationMap.Insert("delay", delay);
2427 animationMap.Insert("repeat", loop_count);
2428 animationMap.Insert("repeatDelay", repeat_delay);
2431 animationMap.Insert("motionType", "LOOP");
2435 animationMap.Insert("motionType", "MIRROR");
2439 animationMap.Insert("easingType", "LINEAR");
2441 else if( easing == 1 )
2443 animationMap.Insert("easingType", "IN");
2445 else if( easing == 2 )
2447 animationMap.Insert("easingType", "OUT");
2451 animationMap.Insert("easingType", "IN_OUT");
2454 return animationMap;
2457 // Give different values for debuging
2458 noise_maker += 0.8f;
2459 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2460 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2461 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2462 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2463 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2464 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2465 float offset1 = 0.f + noise_maker * 0.1f;
2467 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2468 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2469 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2470 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2471 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2472 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2473 float offset2 = 2.f + noise_maker * 0.1f;
2475 propertyMap.Insert("gradientType", "LINEAR");
2476 propertyMap.Insert("unitType", "USER_SPACE");
2477 propertyMap.Insert("spreadType", "CLAMP");
2479 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2480 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2481 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2482 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2483 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2484 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2485 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2487 Visual::Base visual = factory.CreateVisual( propertyMap );
2489 DummyControl actor = DummyControl::New( true );
2490 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2491 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2492 actor.SetSize( 2000, 2000 );
2493 actor.SetParentOrigin(ParentOrigin::CENTER);
2494 actor.SetColor(Color::BLACK);
2495 Stage::GetCurrent().Add(actor);
2497 application.SendNotification();
2498 application.Render( 0 );
2499 application.SendNotification();
2501 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2503 application.SendNotification();
2505 //Compare between CPU calculated value and Shader Visual calculated value
2506 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
2508 int tc = (test_case + tc_offset);
2509 int idx_easing = tc % 4; tc /= 4;
2510 int idx_motion = tc % 2; tc /= 2;
2511 int idx_loop_count = tc % 3; tc /= 3;
2512 int idx_direction = tc % 2; tc /= 2;
2513 int idx_delay = tc % 4; tc /= 4;
2515 float duration = _duration - _repeat_delay;
2516 float repeat_delay = _repeat_delay;
2517 float delay = _delay[idx_delay] * _duration;
2518 int direction = _direction[idx_direction];
2519 int loop_count = _loop_count[idx_loop_count];
2520 int motion = _motion[idx_motion];
2521 int easing = _easing[idx_easing];
2523 progress -= delay / _duration;
2525 Property::Value s = start;
2526 Property::Value t = target;
2527 if( direction == 1 )
2532 float x; ///< Animator progress value
2533 if( loop_count == 0 )
2537 else if( loop_count > 0 && progress + 0.01f > loop_count )
2539 x = ( motion == 0 ) ? 1.0f : 0.0f;
2543 if( progress < 0.0f )
2547 progress = fmodf( progress, 1.0f );
2548 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2553 x = progress * 2.0f;
2560 if( easing == 1 ) // EASE_IN
2564 else if( easing == 2 ) // EASE_OUT
2568 else if( easing == 3 ) // EASE_IN_OUT
2570 x = x * x * (3.0f - 2.0f * x);
2573 if( value_type == 0 ) // result type is Float
2577 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2578 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2579 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2581 else if( value_type == 1 ) // result type is Vector2
2585 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2586 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2587 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2589 else if( value_type == 2 ) // result type is Vector3
2593 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2594 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2595 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2597 else // result type is Vector4
2601 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2602 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2603 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2608 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2610 for( int step_iter = 0; step_iter < 3; step_iter++ )
2612 application.SendNotification();
2613 application.Render( _duration * 250.f ); // step i/4
2614 application.SendNotification();
2617 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2618 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2619 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2620 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2621 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2622 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2623 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2625 application.SendNotification();
2626 application.Render(_duration * 250.f); // step 4/4 will not test
2627 application.SendNotification();
2631 application.SendNotification();
2633 application.SendNotification();
2634 application.Render(10.f); // tempral time
2635 application.SendNotification();
2642 int UtcDaliVisualWireframeVisual(void)
2644 ToolkitTestApplication application;
2646 VisualFactory factory = VisualFactory::Get();
2647 Property::Map propertyMap;
2648 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2650 // Create the visual.
2651 Visual::Base visual = factory.CreateVisual( propertyMap );
2653 DALI_TEST_CHECK( visual );
2655 Property::Map resultMap;
2656 visual.CreatePropertyMap( resultMap );
2658 // Check the property values from the returned map from visual
2659 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2660 DALI_TEST_CHECK( value );
2661 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2666 int UtcDaliVisualGetTransform(void)
2668 ToolkitTestApplication application;
2669 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2671 VisualFactory factory = VisualFactory::Get();
2672 Property::Map propertyMap;
2673 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2674 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2675 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2677 Dali::Property::Map visualMap;
2678 colorVisual.CreatePropertyMap( visualMap );
2679 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2680 Dali::Property::Map* map = value->GetMap();
2681 DALI_TEST_CHECK( map );
2683 //Test default values
2685 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2686 DALI_TEST_CHECK( typeValue );
2687 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2690 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2691 DALI_TEST_CHECK( typeValue );
2692 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2695 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_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::SIZE_POLICY );
2701 DALI_TEST_CHECK( typeValue );
2702 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2705 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2706 DALI_TEST_CHECK( typeValue );
2707 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2710 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2711 DALI_TEST_CHECK( typeValue );
2712 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2718 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2720 Property::Map transform;
2721 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2722 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2723 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2724 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2725 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2727 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2729 Dali::Property::Map visualMap;
2730 visual.CreatePropertyMap( visualMap );
2731 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2732 Dali::Property::Map* map = value->GetMap();
2733 DALI_TEST_CHECK( map );
2736 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2737 DALI_TEST_CHECK( typeValue );
2738 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2741 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2742 DALI_TEST_CHECK( typeValue );
2743 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2746 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2747 DALI_TEST_CHECK( typeValue );
2748 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2751 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2752 DALI_TEST_CHECK( typeValue );
2753 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2756 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2757 DALI_TEST_CHECK( typeValue );
2758 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2761 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2762 DALI_TEST_CHECK( typeValue );
2763 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2766 //Put the visual on the stage
2767 DummyControl actor = DummyControl::New(true);
2768 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2769 actor.SetSize(2000, 2000);
2770 actor.SetParentOrigin(ParentOrigin::CENTER);
2771 Stage::GetCurrent().Add(actor);
2773 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2774 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2776 application.SendNotification();
2777 application.Render(0);
2778 Renderer renderer( actor.GetRendererAt(0) );
2780 //Check that the properties have been registered on the Renderer
2781 Property::Index index = renderer.GetPropertyIndex( "offset" );
2782 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2783 Vector2 offset = renderer.GetProperty<Vector2>( index );
2784 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2786 index = renderer.GetPropertyIndex( "size" );
2787 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2788 Vector2 size = renderer.GetProperty<Vector2>( index );
2789 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2791 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2792 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2793 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2794 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2796 index = renderer.GetPropertyIndex( "origin" );
2797 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2798 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2799 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2801 index = renderer.GetPropertyIndex( "anchorPoint" );
2802 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2803 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2804 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2806 //Set a new transform
2808 transform = DefaultTransform();
2809 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2810 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2811 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2812 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2813 application.SendNotification();
2814 application.Render(0);
2816 //Check that the values have changed in the renderer
2817 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2818 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2820 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2821 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2823 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2824 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2826 //Parent origin and anchor point should have the default values
2827 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2828 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2830 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2831 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2834 int UtcDaliVisualSetTransform0(void)
2836 ToolkitTestApplication application;
2837 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2839 VisualFactory factory = VisualFactory::Get();
2840 Property::Map propertyMap;
2841 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2842 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2843 Visual::Base visual = factory.CreateVisual( propertyMap );
2844 TestTransform( application, visual );
2845 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2850 int UtcDaliVisualSetTransform1(void)
2852 ToolkitTestApplication application;
2853 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2855 VisualFactory factory = VisualFactory::Get();
2856 Property::Map propertyMap;
2857 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2858 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2859 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2860 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2861 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2862 Visual::Base visual = factory.CreateVisual( propertyMap );
2863 TestTransform( application, visual );
2864 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2869 int UtcDaliVisualSetTransform2(void)
2871 ToolkitTestApplication application;
2872 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2874 VisualFactory factory = VisualFactory::Get();
2875 Property::Map propertyMap;
2876 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2877 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2879 Property::Array stopOffsets;
2880 stopOffsets.PushBack( 0.0f );
2881 stopOffsets.PushBack( 0.3f );
2882 stopOffsets.PushBack( 0.6f );
2883 stopOffsets.PushBack( 0.8f );
2884 stopOffsets.PushBack( 1.0f );
2885 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2887 Property::Array stopColors;
2888 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2889 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2890 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2891 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2892 stopColors.PushBack( Color::YELLOW );
2893 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2894 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2895 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2896 Visual::Base visual = factory.CreateVisual( propertyMap );
2897 TestTransform( application, visual );
2898 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2903 int UtcDaliVisualSetTransform3(void)
2905 ToolkitTestApplication application;
2906 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2908 VisualFactory factory = VisualFactory::Get();
2909 Property::Map propertyMap;
2910 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2911 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2912 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2913 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2914 Visual::Base visual = factory.CreateVisual( propertyMap );
2915 TestTransform( application, visual );
2916 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2921 int UtcDaliVisualSetTransform4(void)
2923 ToolkitTestApplication application;
2924 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2926 VisualFactory factory = VisualFactory::Get();
2927 Property::Map propertyMap;
2928 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2929 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2931 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2932 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2933 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2934 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2935 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2936 Visual::Base visual = factory.CreateVisual( propertyMap );
2937 TestTransform( application, visual );
2938 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2943 int UtcDaliVisualSetTransform5(void)
2945 ToolkitTestApplication application;
2946 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
2948 VisualFactory factory = VisualFactory::Get();
2949 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
2950 Visual::Base visual = factory.CreateVisual(image);
2951 TestTransform( application, visual );
2952 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2957 int UtcDaliVisualSetTransform6(void)
2959 ToolkitTestApplication application;
2960 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
2962 VisualFactory factory = VisualFactory::Get();
2963 Property::Map propertyMap;
2964 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2965 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
2966 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
2967 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
2968 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
2969 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
2970 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
2971 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2972 Visual::Base visual = factory.CreateVisual(propertyMap);
2973 TestTransform( application, visual );
2974 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
2979 int UtcDaliVisualSetTransform7(void)
2981 ToolkitTestApplication application;
2982 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
2984 VisualFactory factory = VisualFactory::Get();
2985 Property::Map propertyMap;
2986 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2987 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
2988 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2989 Visual::Base visual = factory.CreateVisual(propertyMap);
2990 TestTransform( application, visual );
2991 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2996 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
2998 ToolkitTestApplication application;
2999 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
3001 VisualFactory factory = VisualFactory::Get();
3002 Property::Map propertyMap;
3003 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3004 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3005 Visual::Base visual = factory.CreateVisual( propertyMap );
3007 Property::Map transform;
3008 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
3010 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
3012 visual.SetTransformAndSize( transform, Vector2(100, 100) );
3014 Dali::Property::Map visualMap;
3015 visual.CreatePropertyMap( visualMap );
3016 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
3017 Dali::Property::Map* map = value->GetMap();
3018 DALI_TEST_CHECK( map );
3021 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
3022 DALI_TEST_CHECK( typeValue );
3023 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
3026 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
3027 DALI_TEST_CHECK( typeValue );
3028 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
3034 int UtcDaliNPatchVisualCustomShader(void)
3036 ToolkitTestApplication application;
3037 tet_infoline( "NPatchVisual with custom shader" );
3039 VisualFactory factory = VisualFactory::Get();
3040 Property::Map properties;
3041 Property::Map shader;
3042 const std::string vertexShader = "Foobar";
3043 const std::string fragmentShader = "Foobar";
3044 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3045 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3047 Property::Map transformMap;
3048 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
3049 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
3050 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
3051 transformMap["anchorPoint"] = Align::CENTER;
3052 transformMap["origin"] = Align::CENTER;
3053 properties[Visual::Property::TRANSFORM] = transformMap;
3055 properties[Visual::Property::TYPE] = Visual::IMAGE;
3056 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
3057 properties[Visual::Property::SHADER]=shader;
3058 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3059 properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3061 Visual::Base visual = factory.CreateVisual( properties );
3062 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
3064 // trigger creation through setting on stage
3065 DummyControl dummy = DummyControl::New(true);
3066 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3067 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3068 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
3069 dummy.SetSize(2000, 2000);
3070 dummy.SetParentOrigin(ParentOrigin::CENTER);
3071 Stage::GetCurrent().Add(dummy);
3072 application.SendNotification();
3074 Renderer renderer = dummy.GetRendererAt( 0 );
3075 Shader shader2 = renderer.GetShader();
3076 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3077 Property::Map* map = value.GetMap();
3078 DALI_TEST_CHECK( map );
3080 Property::Index index = renderer.GetPropertyIndex("size");
3081 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
3083 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3084 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
3086 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3087 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
3092 int UtcDaliGradientVisualBlendMode(void)
3094 ToolkitTestApplication application;
3095 VisualFactory factory = VisualFactory::Get();
3097 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3098 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3099 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3100 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3101 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3102 .Add( Color::GREEN ) ) );
3104 Visual::Base alphaGradientVisual = factory.CreateVisual(
3105 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3106 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3107 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3108 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3109 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
3111 DummyControl control = DummyControl::New(true);
3112 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3113 Stage::GetCurrent().Add( control );
3115 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
3116 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
3117 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
3119 application.SendNotification();
3120 application.Render();
3122 // 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
3123 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
3124 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
3125 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
3130 int UtcDaliVisualRendererRemovalAndReAddition(void)
3132 ToolkitTestApplication application;
3133 tet_infoline( "UtcDaliVisualRendererRemoval" );
3135 VisualFactory factory = VisualFactory::Get();
3136 Property::Map propertyMap;
3137 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3138 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3139 Visual::Base visual = factory.CreateVisual( propertyMap );
3141 visual.SetDepthIndex( 1 );
3143 DummyControl dummyControl = DummyControl::New(true);
3144 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3145 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3146 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3148 dummyControl.SetSize(200.f, 200.f);
3149 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
3151 Stage::GetCurrent().Add( dummyControl );
3153 application.SendNotification();
3154 application.Render();
3156 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3158 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
3159 Stage::GetCurrent().Remove( dummyControl );
3160 application.SendNotification();
3161 application.Render();
3163 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3165 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
3167 Stage::GetCurrent().Add( dummyControl );
3169 application.SendNotification();
3170 application.Render();
3172 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3179 int UtcDaliVisualTextVisualRender(void)
3181 ToolkitTestApplication application;
3182 tet_infoline( "UtcDaliVisualTextVisualRender" );
3184 VisualFactory factory = VisualFactory::Get();
3185 Property::Map propertyMap;
3186 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3187 propertyMap.Insert( "mixColor", Color::WHITE );
3188 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3189 propertyMap.Insert( "enableMarkup", false );
3190 propertyMap.Insert( "text", "Hello world" );
3191 propertyMap.Insert( "fontFamily", "TizenSans" );
3193 Property::Map fontStyleMapSet;
3194 fontStyleMapSet.Insert( "weight", "bold" );
3195 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3197 propertyMap.Insert( "pointSize", 12.f );
3198 propertyMap.Insert( "multiLine", true );
3199 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3200 propertyMap.Insert( "verticalAlignment", "CENTER" );
3201 propertyMap.Insert( "textColor", Color::RED );
3202 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3203 textVisual.SetDepthIndex( 1 );
3205 DummyControl dummyControl = DummyControl::New(true);
3206 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3207 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3208 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3210 dummyControl.SetSize(200.f, 200.f);
3211 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3213 Stage::GetCurrent().Add( dummyControl );
3214 application.SendNotification();
3215 application.Render();
3218 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3219 propertyMap.Clear();
3220 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3221 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3222 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3223 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3225 Property::Map transformMap;
3226 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3227 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3229 textVisual = factory.CreateVisual( propertyMap );
3230 textVisual.SetDepthIndex( 1 );
3232 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3233 dummyControl.SetSize( 720.f, 640.f );
3235 application.SendNotification(); // force process events to ensure text visual
3236 // adds renderer to the dummy control in OnRelayout
3237 application.Render();
3239 Renderer renderer = dummyControl.GetRendererAt(0u);
3240 Property::Index index = renderer.GetPropertyIndex("size");
3242 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3243 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3248 int UtcDaliVisualTextVisualDisableEnable(void)
3250 ToolkitTestApplication application;
3251 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3253 VisualFactory factory = VisualFactory::Get();
3254 Property::Map propertyMap;
3255 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3256 propertyMap.Insert( "mixColor", Color::WHITE );
3257 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3258 propertyMap.Insert( "enableMarkup", false );
3259 propertyMap.Insert( "text", "Hello world" );
3260 propertyMap.Insert( "fontFamily", "TizenSans" );
3262 Property::Map fontStyleMapSet;
3263 fontStyleMapSet.Insert( "weight", "bold" );
3264 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3266 propertyMap.Insert( "pointSize", 12.f );
3267 propertyMap.Insert( "multiLine", true );
3268 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3269 propertyMap.Insert( "verticalAlignment", "CENTER" );
3270 propertyMap.Insert( "textColor", Color::RED );
3271 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3272 textVisual.SetDepthIndex( 1 );
3274 DummyControl dummyControl = DummyControl::New(true);
3275 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3276 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3277 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3279 dummyControl.SetSize(200.f, 200.f);
3280 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3282 Stage::GetCurrent().Add( dummyControl );
3283 application.SendNotification();
3284 application.Render();
3286 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3288 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3290 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3292 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3294 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3299 int UtcDaliVisualPremultipliedAlpha(void)
3301 ToolkitTestApplication application;
3302 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3304 VisualFactory factory = VisualFactory::Get();
3306 // image visual, test default value ( true )
3308 Visual::Base imageVisual = factory.CreateVisual(
3310 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3311 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3313 Dali::Property::Map visualMap;
3314 imageVisual.CreatePropertyMap( visualMap );
3315 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3318 DALI_TEST_CHECK( value );
3319 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3322 // image visual, override premultiplied
3324 Visual::Base imageVisual = factory.CreateVisual(
3326 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3327 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3328 .Add( Visual::Property::PREMULTIPLIED_ALPHA, false ) );
3330 Dali::Property::Map visualMap;
3331 imageVisual.CreatePropertyMap( visualMap );
3332 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3335 DALI_TEST_CHECK( value );
3336 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION);
3339 // svg visual ( premultiplied alpha by default is true )
3341 Visual::Base imageVisual = factory.CreateVisual(
3343 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3344 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3346 Dali::Property::Map visualMap;
3347 imageVisual.CreatePropertyMap( visualMap );
3348 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3351 DALI_TEST_CHECK( value );
3352 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3358 int UtcDaliRegisterVisualOrder(void)
3360 ToolkitTestApplication application;
3361 tet_infoline( "Register Visual Order" );
3363 DummyControl dummyControl = DummyControl::New(true);
3364 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3366 VisualFactory factory = VisualFactory::Get();
3367 Property::Map propertyMap;
3368 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3369 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3371 tet_infoline( "Register visual, should have depth index of 0.0f" );
3372 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3373 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3374 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3376 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3378 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3379 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3380 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3382 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3383 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3384 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3386 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3387 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3388 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3390 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3391 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3392 labelVisual.SetDepthIndex( -2000 );
3393 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3394 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3396 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3397 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3398 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3399 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3400 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3401 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3403 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3404 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3405 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3406 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3407 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3409 dummyControl.SetSize(200.f, 200.f);
3410 Stage::GetCurrent().Add( dummyControl );
3415 int UtcDaliRegisterVisualOrder02(void)
3417 ToolkitTestApplication application;
3418 tet_infoline( "Register Visual Order with Background Set" );
3420 DummyControl dummyControl = DummyControl::New(true);
3421 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3423 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3425 VisualFactory factory = VisualFactory::Get();
3426 Property::Map propertyMap;
3427 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3428 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3430 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3432 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3434 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3435 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3436 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3437 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3438 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3440 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3441 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3442 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3443 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3445 dummyControl.SetSize(200.f, 200.f);
3446 Stage::GetCurrent().Add( dummyControl );
3451 int UtcDaliRegisterVisualWithDepthIndex(void)
3453 ToolkitTestApplication application;
3454 tet_infoline( "Register a Visual With Depth Index" );
3456 DummyControl dummyControl = DummyControl::New(true);
3457 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3459 VisualFactory factory = VisualFactory::Get();
3460 Property::Map propertyMap;
3461 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3462 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3464 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3465 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3466 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3467 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3468 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3470 tet_infoline( "Register another visual with a depth index and it disabled" );
3471 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3472 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3473 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3474 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3476 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3477 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3478 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3479 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3480 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3482 dummyControl.SetSize(200.f, 200.f);
3483 Stage::GetCurrent().Add( dummyControl );
3488 int UtcDaliColorVisualRenderIfTransparentProperty(void)
3490 ToolkitTestApplication application;
3491 tet_infoline( "Test the renderIfTransparent property of ColorVisual" );
3493 VisualFactory factory = VisualFactory::Get();
3494 Property::Map propertyMap;
3495 propertyMap.Insert( Visual::Property::TYPE, Visual::COLOR );
3496 propertyMap.Insert( ColorVisual::Property::MIX_COLOR, Color::BLUE );
3498 tet_infoline( "Check default value" );
3500 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3501 Property::Map returnedMap;
3502 testVisual.CreatePropertyMap( returnedMap );
3504 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3505 DALI_TEST_CHECK( renderIfTransparentProperty );
3506 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3509 propertyMap.Insert( DevelColorVisual::Property::RENDER_IF_TRANSPARENT, true );
3511 tet_infoline( "Ensure set to value required" );
3513 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3514 Property::Map returnedMap;
3515 testVisual.CreatePropertyMap( returnedMap );
3517 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3518 DALI_TEST_CHECK( renderIfTransparentProperty );
3519 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), true, TEST_LOCATION );
3522 propertyMap[ DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = Color::BLUE;
3524 tet_infoline( "Ensure it returns default value if set to wrong type" );
3526 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3527 Property::Map returnedMap;
3528 testVisual.CreatePropertyMap( returnedMap );
3530 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3531 DALI_TEST_CHECK( renderIfTransparentProperty );
3532 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3538 int UtcDaliSvgVisualCustomShader(void)
3540 ToolkitTestApplication application;
3541 tet_infoline( "SvgVisual with custom shader" );
3543 VisualFactory factory = VisualFactory::Get();
3544 Property::Map properties;
3545 Property::Map shader;
3546 const std::string vertexShader = "Foobar";
3547 const std::string fragmentShader = "Foobar";
3548 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3549 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3551 properties[Visual::Property::TYPE] = Visual::IMAGE;
3552 properties[Visual::Property::SHADER] = shader;
3553 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3555 Visual::Base visual = factory.CreateVisual( properties );
3557 // trigger creation through setting on stage
3558 DummyControl dummy = DummyControl::New( true );
3559 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3560 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3562 dummy.SetSize( 200.f, 200.f );
3563 dummy.SetParentOrigin( ParentOrigin::CENTER );
3564 Stage::GetCurrent().Add( dummy );
3566 application.SendNotification();
3567 application.Render();
3569 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3571 Renderer renderer = dummy.GetRendererAt( 0 );
3572 Shader shader2 = renderer.GetShader();
3573 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3574 Property::Map* map = value.GetMap();
3575 DALI_TEST_CHECK( map );
3577 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3578 DALI_TEST_EQUALS( fragmentShader, fragment->Get< std::string >(), TEST_LOCATION );
3580 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3581 DALI_TEST_EQUALS( vertexShader, vertex->Get< std::string >(), TEST_LOCATION );
3586 int UtcDaliVisualRoundedCorner(void)
3588 ToolkitTestApplication application;
3589 tet_infoline( "UtcDaliVisualRoundedCorner" );
3593 VisualFactory factory = VisualFactory::Get();
3594 Property::Map properties;
3595 float cornerRadius = 30.0f;
3597 properties[Visual::Property::TYPE] = Visual::IMAGE;
3598 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3599 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3601 Visual::Base visual = factory.CreateVisual( properties );
3603 // trigger creation through setting on stage
3604 DummyControl dummy = DummyControl::New( true );
3605 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3606 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3608 dummy.SetSize( 200.f, 200.f );
3609 dummy.SetParentOrigin( ParentOrigin::CENTER );
3610 Stage::GetCurrent().Add( dummy );
3612 application.SendNotification();
3613 application.Render();
3615 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3617 application.SendNotification();
3618 application.Render();
3620 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3625 VisualFactory factory = VisualFactory::Get();
3626 Property::Map properties;
3627 float cornerRadius = 30.0f;
3629 properties[Visual::Property::TYPE] = Visual::COLOR;
3630 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3631 properties["cornerRadius"] = cornerRadius;
3633 Visual::Base visual = factory.CreateVisual( properties );
3635 // trigger creation through setting on stage
3636 DummyControl dummy = DummyControl::New( true );
3637 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3638 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3640 dummy.SetSize( 200.f, 200.f );
3641 dummy.SetParentOrigin( ParentOrigin::CENTER );
3642 Stage::GetCurrent().Add( dummy );
3644 application.SendNotification();
3645 application.Render();
3647 application.SendNotification();
3648 application.Render();
3650 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );