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/actors/actor-devel.h>
24 #include <dali/devel-api/object/handle-devel.h>
25 #include <dali/devel-api/text-abstraction/font-client.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
28 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
29 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
30 #include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
31 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
32 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
33 #include <dali-toolkit/devel-api/visuals/text-visual-properties-devel.h>
34 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
35 #include <dali-toolkit/dali-toolkit.h>
37 #include "dummy-control.h"
40 using namespace Dali::Toolkit;
44 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
45 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
46 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
47 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
48 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
49 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
50 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
51 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
54 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
56 Property::Map DefaultTransform()
58 Property::Map transformMap;
60 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
61 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
62 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
63 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
64 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
65 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
69 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
71 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
73 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
75 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
77 Property::Value* valueSet = NULL;
78 if ( valueGet.first.type == Property::Key::INDEX )
80 valueSet = fontStyleMapSet.Find( valueGet.first.indexKey );
84 // Get Key is a string so searching Set Map for a string key
85 valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
88 if( NULL != valueSet )
90 if( valueSet->GetType() == Dali::Property::STRING && ( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() ) )
92 tet_printf( "Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
95 else if( valueSet->GetType() == Dali::Property::BOOLEAN && ( valueGet.second.Get<bool>() != valueSet->Get<bool>() ) )
97 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>() );
100 else if( valueSet->GetType() == Dali::Property::INTEGER && ( valueGet.second.Get<int>() != valueSet->Get<int>() ) )
102 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>() );
105 else if( valueSet->GetType() == Dali::Property::FLOAT && ( valueGet.second.Get<float>() != valueSet->Get<float>() ) )
107 tet_printf( "Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>() );
110 else if( valueSet->GetType() == Dali::Property::VECTOR2 && ( valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>() ) )
112 Vector2 vector2Get = valueGet.second.Get<Vector2>();
113 Vector2 vector2Set = valueSet->Get<Vector2>();
114 tet_printf( "Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y );
117 else if( valueSet->GetType() == Dali::Property::VECTOR4 && ( valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>() ) )
119 Vector4 vector4Get = valueGet.second.Get<Vector4>();
120 Vector4 vector4Set = valueSet->Get<Vector4>();
121 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 );
127 if ( valueGet.first.type == Property::Key::INDEX )
129 tet_printf( " The key %d doesn't exist.", valueGet.first.indexKey );
133 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
143 void PrepareResourceImage( ToolkitTestApplication& application, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
145 TestPlatformAbstraction& platform = application.GetPlatform();
146 platform.SetClosestImageSize(Vector2( imageWidth, imageHeight));
148 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
149 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
150 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
151 unsigned int initialColor = 0xFF;
152 memset( pixbuffer, initialColor, imageHeight*imageWidth*bytesPerPixel);
154 Integration::ResourcePointer resourcePtr(bitmap);
155 platform.SetSynchronouslyLoadedResource( resourcePtr );
159 void dali_visual_startup(void)
161 test_return_value = TET_UNDEF;
164 void dali_visual_cleanup(void)
166 test_return_value = TET_PASS;
170 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
173 visual.CreatePropertyMap(map);
174 Property::Value* value = map.Find( mixColorIndex );
175 DALI_TEST_CHECK( value );
177 DALI_TEST_CHECK( value->Get( mixColor1 ) );
178 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
180 value = map.Find( Visual::Property::MIX_COLOR );
181 DALI_TEST_CHECK( value );
183 DALI_TEST_CHECK( value->Get( mixColor2 ) );
184 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
186 value = map.Find( Visual::Property::OPACITY );
187 DALI_TEST_CHECK( value );
189 DALI_TEST_CHECK( value->Get( opacity ) );
190 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
194 int UtcDaliVisualCopyAndAssignment(void)
196 ToolkitTestApplication application;
197 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
199 VisualFactory factory = VisualFactory::Get();
200 Property::Map propertyMap;
201 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
202 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
203 Visual::Base visual = factory.CreateVisual( propertyMap );
205 Visual::Base visualCopy( visual );
206 DALI_TEST_CHECK(visual == visualCopy);
208 Visual::Base emptyVisual;
209 Visual::Base emptyVisualCopy( emptyVisual );
210 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
212 Visual::Base visualEquals;
213 visualEquals = visual;
214 DALI_TEST_CHECK(visual == visualEquals);
216 Visual::Base emptyVisualEquals;
217 emptyVisualEquals = emptyVisual;
218 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
222 DALI_TEST_CHECK( visual = visualCopy );
227 int UtcDaliVisualSetName01(void)
229 ToolkitTestApplication application;
230 tet_infoline( "UtcDaliVisualSetName" );
232 VisualFactory factory = VisualFactory::Get();
233 Property::Map propertyMap;
234 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
235 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
236 Visual::Base visual = factory.CreateVisual( propertyMap );
238 const char* visualName = "backgroundVisual";
239 visual.SetName( visualName );
241 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
246 int UtcDaliVisualSetGetDepthIndex(void)
248 ToolkitTestApplication application;
249 tet_infoline( "UtcDaliVisualSetDepthIndex" );
251 VisualFactory factory = VisualFactory::Get();
252 Property::Map propertyMap;
253 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
254 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
255 Visual::Base visual = factory.CreateVisual( propertyMap );
257 visual.SetDepthIndex( 1 );
259 DummyControl dummyControl = DummyControl::New(true);
260 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
261 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
263 dummyControl.SetSize(200.f, 200.f);
264 Stage::GetCurrent().Add( dummyControl );
267 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
268 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
269 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
271 visual.SetDepthIndex( -1 );
272 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
273 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
274 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
279 int UtcDaliVisualSize(void)
281 ToolkitTestApplication application;
282 tet_infoline( "UtcDaliVisualSize" );
284 VisualFactory factory = VisualFactory::Get();
285 Vector2 controlSize( 20.f, 30.f );
289 Dali::Property::Map map;
290 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
291 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
293 Visual::Base colorVisual = factory.CreateVisual( map );
294 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
296 colorVisual.GetNaturalSize(naturalSize);
297 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
300 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
301 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
302 Visual::Base imageVisual = factory.CreateVisual( image );
303 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
305 imageVisual.GetNaturalSize(naturalSize);
306 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
308 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
311 float borderSize = 5.f;
313 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
314 map[ BorderVisual::Property::COLOR ] = Color::RED;
315 map[ BorderVisual::Property::SIZE ] = borderSize;
316 Visual::Base borderVisual = factory.CreateVisual( map );
317 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
318 borderVisual.GetNaturalSize(naturalSize);
319 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
321 // gradient gradientVisual
322 Property::Map propertyMap;
323 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
324 Vector2 start(-1.f, -1.f);
325 Vector2 end(1.f, 1.f);
326 propertyMap.Insert( "mixColor", Color::MAGENTA );
327 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
328 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
329 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
330 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
331 Property::Array stopColors;
332 stopColors.PushBack( Color::RED );
333 stopColors.PushBack( Color::GREEN );
334 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
335 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
336 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
337 gradientVisual.GetNaturalSize(naturalSize);
338 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
340 // animated gradient visual
341 Vector2 animated_gradient_visual_size(10.f, 10.f);
343 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
344 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
345 animatedGradientVisual.GetNaturalSize(naturalSize);
346 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
347 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
350 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
351 svgVisual.GetNaturalSize(naturalSize);
353 // <svg width="100" height="100">
354 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
356 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
358 // svg visual with a size
359 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
360 svgVisual2.GetNaturalSize(naturalSize);
361 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
365 // Load some fonts to get the same metrics on different platforms.
366 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
367 fontClient.SetDpi( 96u, 96u );
369 char* pathNamePtr = get_current_dir_name();
370 const std::string pathName( pathNamePtr );
373 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
375 // Create a TextVisual with a font size of 12 first
377 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
378 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
379 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
380 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
382 Visual::Base smallTextVisual = factory.CreateVisual( propertyMap );
383 Vector2 smallTextVisualNaturalSize;
384 smallTextVisual.GetNaturalSize( smallTextVisualNaturalSize );
386 // Then create a TextVisual with a font size of 20
387 propertyMap[ TextVisual::Property::TEXT ] = "<font family='TizenSans' size='20'>Hello world</font>";
388 Visual::Base largeTextVisual = factory.CreateVisual( propertyMap );
389 Vector2 largeTextVisualNaturalSize;
390 largeTextVisual.GetNaturalSize( largeTextVisualNaturalSize );
392 // Compare the sizes of the two text visuals, the second one should be bigger as it has a larger point size in the markup.
393 DALI_TEST_CHECK( smallTextVisualNaturalSize.width < largeTextVisualNaturalSize.width &&
394 smallTextVisualNaturalSize.height < largeTextVisualNaturalSize.height );
396 // The height returned for a particular width should also be greater for the large text visual
397 DALI_TEST_CHECK( smallTextVisual.GetHeightForWidth( 40.f ) < largeTextVisual.GetHeightForWidth( 40.f ) );
399 //AnimatedImageVisual
400 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
401 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
402 animatedImageVisual.GetNaturalSize(naturalSize);
403 // TEST_GIF_FILE: anim.gif
404 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
405 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
410 int UtcDaliVisualSetOnOffStage(void)
412 ToolkitTestApplication application;
413 tet_infoline( "UtcDaliVisualSetOnOffStage" );
415 VisualFactory factory = VisualFactory::Get();
416 Property::Map propertyMap;
417 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
418 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
419 Visual::Base visual = factory.CreateVisual( propertyMap );
421 DummyControl actor = DummyControl::New(true);
422 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
423 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
425 actor.SetSize(200.f, 200.f);
427 application.SendNotification();
428 application.Render(0);
429 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
431 Stage::GetCurrent().Add( actor );
433 application.SendNotification();
434 application.Render(0);
435 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
437 Stage::GetCurrent().Remove( actor );
439 application.SendNotification();
440 application.Render(0);
441 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
446 int UtcDaliVisualSetOnOffStage2(void)
448 ToolkitTestApplication application;
449 tet_infoline( "UtcDaliVisualSetOnOffStage2" );
451 VisualFactory factory = VisualFactory::Get();
452 Property::Map propertyMap;
453 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
454 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
455 Visual::Base visual = factory.CreateVisual( propertyMap );
457 DummyControl actor = DummyControl::New(true);
458 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
459 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
461 actor.SetSize(200.f, 200.f);
463 application.SendNotification();
464 application.Render(0);
465 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
468 Stage::GetCurrent().Add( actor );
470 application.SendNotification();
471 application.Render(0);
472 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
473 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
474 Renderer renderer = actor.GetRendererAt( 0 );
475 auto textures = renderer.GetTextures();
476 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
478 Stage::GetCurrent().Remove( actor );
480 application.SendNotification();
481 application.Render(0);
482 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
485 Stage::GetCurrent().Add( actor );
487 application.SendNotification();
488 application.Render(0);
489 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
490 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
491 renderer = actor.GetRendererAt( 0 );
492 textures = renderer.GetTextures();
493 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
495 Stage::GetCurrent().Remove( actor );
497 application.SendNotification();
498 application.Render(0);
499 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
504 int UtcDaliVisualGetPropertyMap1(void)
506 ToolkitTestApplication application;
507 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
509 VisualFactory factory = VisualFactory::Get();
510 Property::Map propertyMap;
511 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
512 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
513 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS, 10.0f );
514 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE );
515 propertyMap.Insert( DevelColorVisual::Property::BLUR_RADIUS, 20.0f );
516 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
518 Property::Map resultMap;
519 colorVisual.CreatePropertyMap( resultMap );
521 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
522 DALI_TEST_CHECK( typeValue );
523 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
525 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
526 DALI_TEST_CHECK( colorValue );
527 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
529 Property::Value* cornerRadiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT );
530 DALI_TEST_CHECK( cornerRadiusValue );
531 DALI_TEST_CHECK( cornerRadiusValue->Get< float >() == 10.0f );
533 Property::Value* cornerRadiusPolicyValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER );
534 DALI_TEST_CHECK( cornerRadiusPolicyValue );
535 DALI_TEST_CHECK( cornerRadiusPolicyValue->Get< int >() == Toolkit::Visual::Transform::Policy::RELATIVE );
537 Property::Value* blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
538 DALI_TEST_CHECK( blurRadiusValue );
539 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 20.0f );
541 // change the blend color
542 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
543 colorVisual = factory.CreateVisual( propertyMap );
544 colorVisual.CreatePropertyMap( resultMap );
546 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
547 DALI_TEST_CHECK( colorValue );
548 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
551 propertyMap[DevelColorVisual::Property::BLUR_RADIUS] = "3.0f";
553 colorVisual = factory.CreateVisual( propertyMap );
554 colorVisual.CreatePropertyMap( resultMap );
556 blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
557 DALI_TEST_CHECK( blurRadiusValue );
558 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 0.0f );
563 int UtcDaliVisualGetPropertyMap2(void)
565 ToolkitTestApplication application;
566 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
568 VisualFactory factory = VisualFactory::Get();
569 Property::Map propertyMap;
570 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
571 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
572 propertyMap.Insert("borderColor", Color::BLUE);
573 propertyMap.Insert("borderSize", 5.f);
574 propertyMap.Insert("antiAliasing", true);
575 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
577 Property::Map resultMap;
578 borderVisual.CreatePropertyMap( resultMap );
580 // check the property values from the returned map from visual
581 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
582 DALI_TEST_CHECK( typeValue );
583 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
585 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
586 DALI_TEST_CHECK( colorValue );
587 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
589 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
590 DALI_TEST_CHECK( sizeValue );
591 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
593 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
594 DALI_TEST_CHECK( AAValue );
595 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
597 Property::Map propertyMap1;
598 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
599 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
600 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
601 borderVisual = factory.CreateVisual( propertyMap1 );
602 borderVisual.CreatePropertyMap( resultMap );
604 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
605 DALI_TEST_CHECK( typeValue );
606 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
608 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
609 DALI_TEST_CHECK( colorValue );
610 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
612 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
613 DALI_TEST_CHECK( colorValue );
614 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
620 int UtcDaliVisualGetPropertyMap2N(void)
622 ToolkitTestApplication application;
623 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
625 VisualFactory factory = VisualFactory::Get();
626 Property::Map propertyMap;
627 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
628 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
630 tet_infoline( "Test that the visual is created, with a default renderer" );
631 DALI_TEST_CHECK( borderVisual );
633 DummyControl dummyControl = DummyControl::New(true);
634 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
635 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
636 Stage::GetCurrent().Add( dummyControl );
638 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
644 int UtcDaliVisualGetPropertyMap3(void)
646 ToolkitTestApplication application;
647 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
649 VisualFactory factory = VisualFactory::Get();
650 DALI_TEST_CHECK( factory );
652 Property::Map propertyMap;
653 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
655 Vector2 start(-1.f, -1.f);
656 Vector2 end(1.f, 1.f);
657 propertyMap.Insert( "startPosition", start);
658 propertyMap.Insert( "endPosition", end);
659 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
661 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
663 Property::Array stopColors;
664 stopColors.PushBack( Color::RED );
665 stopColors.PushBack( Color::GREEN );
666 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
668 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
670 Property::Map resultMap;
671 gradientVisual.CreatePropertyMap( resultMap );
673 // check the property values from the returned map from visual
674 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
675 DALI_TEST_CHECK( value );
676 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
678 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
679 DALI_TEST_CHECK( value );
680 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
682 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
683 DALI_TEST_CHECK( value );
684 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
686 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
687 DALI_TEST_CHECK( value );
688 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
690 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
691 DALI_TEST_CHECK( value );
692 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
694 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
695 DALI_TEST_CHECK( value );
696 Property::Array* offsetArray = value->GetArray();
697 DALI_TEST_CHECK( offsetArray->Count() == 2 );
698 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
699 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
701 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
702 DALI_TEST_CHECK( value );
703 Property::Array* colorArray = value->GetArray();
704 DALI_TEST_CHECK( colorArray->Count() == 2 );
705 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
706 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
711 int UtcDaliVisualGetPropertyMap4(void)
713 ToolkitTestApplication application;
714 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
716 VisualFactory factory = VisualFactory::Get();
717 DALI_TEST_CHECK( factory );
719 Property::Map propertyMap;
720 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
722 Vector2 center(100.f, 100.f);
723 float radius = 100.f;
724 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
725 propertyMap.Insert(GradientVisual::Property::CENTER, center);
726 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
727 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
729 Property::Array stopColors;
730 stopColors.PushBack( Color::RED );
731 stopColors.PushBack( Color::BLACK );
732 stopColors.PushBack( Color::GREEN );
733 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
735 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
736 DALI_TEST_CHECK( gradientVisual );
738 Property::Map resultMap;
739 gradientVisual.CreatePropertyMap( resultMap );
741 // check the property values from the returned map from visual
742 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
743 DALI_TEST_CHECK( value );
744 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
746 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
747 DALI_TEST_CHECK( value );
748 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
750 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
751 DALI_TEST_CHECK( value );
752 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
754 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
755 DALI_TEST_CHECK( value );
756 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
758 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
759 DALI_TEST_CHECK( value );
760 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
762 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
763 DALI_TEST_CHECK( value );
764 Property::Array* offsetArray = value->GetArray();
765 DALI_TEST_CHECK( offsetArray->Count() == 3 );
766 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
767 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
768 // any stop value will be clamped to [0.0, 1.0];
769 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
771 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
772 DALI_TEST_CHECK( value );
773 Property::Array* colorArray = value->GetArray();
774 DALI_TEST_CHECK( colorArray->Count() == 3 );
775 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
776 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
777 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
782 int UtcDaliVisualGetPropertyMap5(void)
784 ToolkitTestApplication application;
785 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
787 VisualFactory factory = VisualFactory::Get();
788 Property::Map propertyMap;
789 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
790 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
791 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
792 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
793 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
794 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
795 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
796 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
797 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
798 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
799 propertyMap.Insert( "synchronousLoading", true );
801 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
802 DALI_TEST_CHECK( imageVisual );
804 Property::Map resultMap;
805 imageVisual.CreatePropertyMap( resultMap );
807 // check the property values from the returned map from visual
808 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
809 DALI_TEST_CHECK( value );
810 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
812 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
813 DALI_TEST_CHECK( value );
814 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
816 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
817 DALI_TEST_CHECK( value );
818 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
820 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
821 DALI_TEST_CHECK( value );
822 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
824 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
825 DALI_TEST_CHECK( value );
826 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
828 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
829 DALI_TEST_CHECK( value );
830 DALI_TEST_CHECK( value->Get<int>() == 20 );
832 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
833 DALI_TEST_CHECK( value );
834 DALI_TEST_CHECK( value->Get<int>() == 30 );
836 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
837 DALI_TEST_CHECK( value );
838 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
840 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
841 DALI_TEST_CHECK( value );
842 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
844 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
845 DALI_TEST_CHECK( value );
846 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
848 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
849 DALI_TEST_CHECK( value );
850 DALI_TEST_CHECK( value->Get<bool>() == true );
852 // Get an image visual with an image handle, and test the default property values
853 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
854 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
855 imageVisual = factory.CreateVisual(image);
856 imageVisual.CreatePropertyMap( resultMap );
858 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
859 DALI_TEST_CHECK( value );
860 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
862 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
863 DALI_TEST_CHECK( value );
864 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
866 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
867 DALI_TEST_CHECK( value );
868 DALI_TEST_CHECK( value->Get<int>() == FittingMode::DEFAULT );
870 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
871 DALI_TEST_CHECK( value );
872 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
874 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
875 DALI_TEST_CHECK( value );
876 DALI_TEST_CHECK( value->Get<int>() == 100 );
878 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
879 DALI_TEST_CHECK( value );
880 DALI_TEST_CHECK( value->Get<int>() == 200 );
882 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
883 DALI_TEST_CHECK( value );
884 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
886 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
887 DALI_TEST_CHECK( value );
888 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
890 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
891 DALI_TEST_CHECK( value );
892 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
894 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
895 DALI_TEST_CHECK( value );
896 DALI_TEST_CHECK( value->Get<bool>() == false );
901 int UtcDaliVisualGetPropertyMap6(void)
903 ToolkitTestApplication application;
904 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
906 Rect< int > border( 1, 1, 1, 1 );
908 VisualFactory factory = VisualFactory::Get();
909 Property::Map propertyMap;
910 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
911 propertyMap.Insert( "mixColor", Color::MAGENTA );
912 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
913 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
914 propertyMap.Insert( ImageVisual::Property::BORDER, border );
915 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
916 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
917 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
919 Property::Map resultMap;
920 nPatchVisual.CreatePropertyMap( resultMap );
922 // check the property values from the returned map from visual
923 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
924 DALI_TEST_CHECK( value );
925 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
927 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
928 DALI_TEST_CHECK( value );
929 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
931 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
932 DALI_TEST_CHECK( value );
933 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
935 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
936 DALI_TEST_CHECK( value );
937 DALI_TEST_CHECK( value->Get<bool>() );
939 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
940 DALI_TEST_CHECK( value );
941 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
943 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
944 DALI_TEST_CHECK( value );
945 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
947 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
948 DALI_TEST_CHECK( value );
949 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
951 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
953 Property::Map propertyMap1;
954 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
955 propertyMap1.Insert( "mixColor", Color::MAGENTA );
956 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
957 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
958 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
959 nPatchVisual = factory.CreateVisual( propertyMap1 );
961 nPatchVisual.CreatePropertyMap( resultMap );
963 // check the property values from the returned map from visual
964 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
965 DALI_TEST_CHECK( value );
966 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
968 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
969 DALI_TEST_CHECK( value );
970 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
972 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
973 DALI_TEST_CHECK( value );
974 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
976 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
977 DALI_TEST_CHECK( value );
978 DALI_TEST_CHECK( value->Get<bool>() );
980 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
981 DALI_TEST_CHECK( value );
982 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
987 int UtcDaliVisualGetPropertyMap7(void)
989 ToolkitTestApplication application;
990 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
992 // request SvgVisual with a property map
993 VisualFactory factory = VisualFactory::Get();
994 Property::Map propertyMap;
995 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
996 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
997 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
998 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
999 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
1001 Property::Map resultMap;
1002 svgVisual.CreatePropertyMap( resultMap );
1003 // check the property values from the returned map from a visual
1004 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1005 DALI_TEST_CHECK( value );
1006 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1008 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1009 DALI_TEST_CHECK( value );
1010 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1012 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1013 DALI_TEST_CHECK( value );
1014 DALI_TEST_CHECK( value->Get<bool>() == false );
1016 // request SvgVisual with a property map 2
1017 propertyMap.Clear();
1018 propertyMap[ "visualType" ] = Visual::SVG;
1019 propertyMap[ "mixColor" ] = Color::WHITE;
1020 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
1021 propertyMap[ "atlasing" ] = true;
1022 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
1025 svgVisual1.CreatePropertyMap( resultMap );
1026 // check the property values from the returned map from a visual
1027 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1028 DALI_TEST_CHECK( value );
1029 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1031 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1032 DALI_TEST_CHECK( value );
1033 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1035 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1036 DALI_TEST_CHECK( value );
1037 DALI_TEST_CHECK( value->Get<bool>() == true );
1039 // request SvgVisual with an URL
1040 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1042 svgVisual2.CreatePropertyMap( resultMap );
1043 // check the property values from the returned map from a visual
1044 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1045 DALI_TEST_CHECK( value );
1046 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1048 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1049 DALI_TEST_CHECK( value );
1050 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1056 int UtcDaliVisualGetPropertyMap8(void)
1058 ToolkitTestApplication application;
1059 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
1061 //Request MeshVisual using a property map.
1062 VisualFactory factory = VisualFactory::Get();
1063 Property::Map propertyMap;
1064 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1065 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
1066 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1067 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1068 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1069 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1070 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1071 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
1073 Property::Map resultMap;
1074 meshVisual.CreatePropertyMap( resultMap );
1075 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
1077 //Check values in the result map are identical to the initial map's values.
1078 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1079 DALI_TEST_CHECK( value );
1080 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
1082 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
1083 DALI_TEST_CHECK( value );
1084 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
1086 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
1087 DALI_TEST_CHECK( value );
1088 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
1090 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
1091 DALI_TEST_CHECK( value );
1092 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
1094 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
1095 DALI_TEST_CHECK( value );
1096 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1098 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1099 DALI_TEST_CHECK( value );
1100 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1105 //Primitive shape visual
1106 int UtcDaliVisualGetPropertyMap9(void)
1108 ToolkitTestApplication application;
1109 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1111 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1112 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1114 //Request PrimitiveVisual using a property map.
1115 VisualFactory factory = VisualFactory::Get();
1116 Property::Map propertyMap;
1117 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1118 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1119 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1120 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1121 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1122 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1123 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1124 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1125 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1126 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1127 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1128 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1129 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1130 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1132 Property::Map resultMap;
1133 primitiveVisual.CreatePropertyMap( resultMap );
1135 //Check values in the result map are identical to the initial map's values.
1136 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1137 DALI_TEST_CHECK( value );
1138 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1140 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1141 DALI_TEST_CHECK( value );
1142 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1144 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1145 DALI_TEST_CHECK( value );
1146 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1147 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1149 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1150 DALI_TEST_CHECK( value );
1151 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1153 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1154 DALI_TEST_CHECK( value );
1155 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1157 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1158 DALI_TEST_CHECK( value );
1159 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1161 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1162 DALI_TEST_CHECK( value );
1163 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1165 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1166 DALI_TEST_CHECK( value );
1167 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1169 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1170 DALI_TEST_CHECK( value );
1171 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1173 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1174 DALI_TEST_CHECK( value );
1175 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1177 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1178 DALI_TEST_CHECK( value );
1179 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1181 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1182 DALI_TEST_CHECK( value );
1183 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1185 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1186 DALI_TEST_CHECK( value );
1187 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1193 int UtcDaliVisualGetPropertyMap10(void)
1195 ToolkitTestApplication application;
1196 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1198 //Request PrimitiveVisual using a property map.
1199 VisualFactory factory = VisualFactory::Get();
1201 Property::Map propertyMap;
1202 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1203 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1204 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1205 propertyMap.Insert( "enableMarkup", false );
1206 propertyMap.Insert( "text", "Hello world" );
1207 propertyMap.Insert( "fontFamily", "TizenSans" );
1209 Property::Map fontStyleMapSet;
1210 fontStyleMapSet.Insert( "weight", "bold" );
1211 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1213 propertyMap.Insert( "pointSize", 12.f );
1214 propertyMap.Insert( "multiLine", true );
1215 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1216 propertyMap.Insert( "verticalAlignment", "CENTER" );
1217 propertyMap.Insert( "textColor", Color::RED );
1219 Property::Map shadowMapSet;
1220 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1222 Property::Map underlineMapSet;
1223 propertyMap.Insert( "underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1) );
1225 Property::Map outlineMapSet;
1226 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1228 Property::Map backgroundMapSet;
1229 propertyMap.Insert( "textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN) );
1231 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1233 Property::Map resultMap;
1234 textVisual.CreatePropertyMap( resultMap );
1236 //Check values in the result map are identical to the initial map's values.
1237 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1238 DALI_TEST_CHECK( value );
1239 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1241 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1242 DALI_TEST_CHECK( value );
1243 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1245 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1246 DALI_TEST_CHECK( value );
1247 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1249 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1250 DALI_TEST_CHECK( value );
1251 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1253 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1254 DALI_TEST_CHECK( value );
1256 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1257 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1258 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1260 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1261 DALI_TEST_CHECK( value );
1262 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1264 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1265 DALI_TEST_CHECK( value );
1266 DALI_TEST_CHECK( value->Get<bool>() );
1268 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1269 DALI_TEST_CHECK( value );
1270 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1272 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1273 DALI_TEST_CHECK( value );
1274 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1276 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1277 DALI_TEST_CHECK( value );
1278 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1280 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1281 DALI_TEST_CHECK( value );
1282 DALI_TEST_CHECK( !value->Get<bool>() );
1284 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1285 DALI_TEST_CHECK( value );
1287 Property::Map shadowMapGet = value->Get<Property::Map>();
1288 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1289 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1291 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1292 DALI_TEST_CHECK( value );
1294 Property::Map underlineMapGet = value->Get<Property::Map>();
1295 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1296 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1298 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1299 DALI_TEST_CHECK( value );
1301 Property::Map outlineMapGet = value->Get<Property::Map>();
1302 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1303 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1305 value = resultMap.Find( DevelTextVisual::Property::BACKGROUND, Property::MAP );
1306 DALI_TEST_CHECK( value );
1308 Property::Map backgroundMapGet = value->Get<Property::Map>();
1309 DALI_TEST_EQUALS( backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION );
1310 DALI_TEST_EQUALS( DaliTestCheckMaps( backgroundMapGet, backgroundMapSet ), true, TEST_LOCATION );
1315 int UtcDaliVisualGetPropertyMap11(void)
1317 ToolkitTestApplication application;
1318 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1320 VisualFactory factory = VisualFactory::Get();
1321 DALI_TEST_CHECK( factory );
1323 Property::Map propertyMap;
1324 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1326 Vector2 start(-0.5f, 0.5f);
1327 Vector2 end (0.5f, -0.0f);
1328 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1329 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1330 Vector2 rotate_center(0.0f, 0.4f);
1331 float rotate_amount = 1.57f;
1332 float offset = 100.f;
1334 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1335 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1336 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1338 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1339 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1340 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1341 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1342 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1343 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1344 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1346 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1347 DALI_TEST_CHECK( animatedGradientVisual );
1349 Property::Map resultMap;
1350 animatedGradientVisual.CreatePropertyMap( resultMap );
1352 // check the property values from the returned map from visual
1353 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1354 DALI_TEST_CHECK( value );
1355 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1357 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1358 DALI_TEST_CHECK( value );
1359 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1361 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1362 DALI_TEST_CHECK( value );
1363 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1365 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1366 DALI_TEST_CHECK( value );
1367 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1370 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1371 DALI_TEST_CHECK( value );
1372 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1374 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1375 DALI_TEST_CHECK( value );
1376 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1378 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1379 DALI_TEST_CHECK( value );
1380 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1382 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1383 DALI_TEST_CHECK( value );
1384 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1386 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1387 DALI_TEST_CHECK( value );
1388 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1390 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1391 DALI_TEST_CHECK( value );
1392 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1394 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1395 DALI_TEST_CHECK( value );
1396 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1401 int UtcDaliVisualGetPropertyMap12(void)
1403 ToolkitTestApplication application;
1404 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1406 // Case 1 : Set values by index
1408 tet_printf( " - Set Values by Index\n" );
1409 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1410 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1411 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1413 tet_printf( "test with delay [%f]\n", _delay );
1414 VisualFactory factory = VisualFactory::Get();
1415 DALI_TEST_CHECK( factory );
1417 Property::Map propertyMap;
1418 Property::Map animationMap;
1419 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1421 float duration = 1.1f;
1422 float delay = _delay;
1423 float repeat_delay = 0.4f;
1425 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1427 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1428 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1430 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1432 animationMap.Clear();
1433 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1434 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1435 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1436 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1437 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1438 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1439 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1440 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1441 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1443 return animationMap;
1446 Vector2 start1(-0.5f, 0.5f);
1447 Vector2 end1 (0.5f, -0.5f);
1448 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1449 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1450 Vector2 rotate_center1(0.0f, 0.4f);
1451 float rotate_amount1 = 0.0f;
1452 float offset1 = 0.f;
1454 Vector2 start2(-0.5f, -0.5f);
1455 Vector2 end2 (0.5f, 0.5f);
1456 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1457 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1458 Vector2 rotate_center2(0.0f, -0.4f);
1459 float rotate_amount2 = 6.2832f;
1460 float offset2 = 2.f;
1462 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1463 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1464 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1466 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1467 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1468 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1469 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1470 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1471 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1472 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1474 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1475 DALI_TEST_CHECK( animatedGradientVisual );
1477 Property::Map resultMap;
1478 animatedGradientVisual.CreatePropertyMap( resultMap );
1480 // check the property values from the returned map from visual
1481 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1482 DALI_TEST_CHECK( value );
1483 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1485 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1486 DALI_TEST_CHECK( value );
1487 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1489 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1490 DALI_TEST_CHECK( value );
1491 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1493 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1494 DALI_TEST_CHECK( value );
1495 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1497 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
1499 tet_printf("Check value at %d\n", line_num);
1500 value = resultMap.Find( index, Property::MAP );
1501 DALI_TEST_CHECK( value );
1502 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1503 Property::Map *temp_map = value->GetMap();
1504 DALI_TEST_CHECK( temp_map );
1506 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1508 Property::Value *res = temp_map->Find( index );
1509 DALI_TEST_CHECK( res );
1513 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1514 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1515 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1516 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1517 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1518 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1519 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1520 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1521 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1524 // check the animation map data is good
1525 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1526 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1527 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1528 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1529 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1530 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1531 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1535 // Case 2 : Set values by string
1537 tet_printf( " - Set Values by String\n" );
1538 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1539 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1540 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1542 tet_printf( "test with delay [%f]\n", _delay );
1543 VisualFactory factory = VisualFactory::Get();
1544 DALI_TEST_CHECK( factory );
1546 Property::Map propertyMap;
1547 Property::Map animationMap;
1548 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1550 float duration = 1.1f;
1551 float delay = _delay;
1552 float repeat_delay = 0.4f;
1554 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1556 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1557 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1559 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1561 animationMap.Clear();
1562 animationMap.Insert("startValue" , start);
1563 animationMap.Insert("targetValue" , target);
1564 animationMap.Insert("directionType", "BACKWARD");
1565 animationMap.Insert("duration" , duration);
1566 animationMap.Insert("delay" , delay);
1567 animationMap.Insert("repeat" , loop_count);
1568 animationMap.Insert("repeatDelay" , repeat_delay);
1569 animationMap.Insert("motionType" , "MIRROR");
1570 animationMap.Insert("easingType" , "IN_OUT");
1572 return animationMap;
1575 Vector2 start1(-0.5f, 0.5f);
1576 Vector2 end1 (0.5f, -0.5f);
1577 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1578 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1579 Vector2 rotate_center1(0.0f, 0.4f);
1580 float rotate_amount1 = 0.0f;
1581 float offset1 = 0.f;
1583 Vector2 start2(-0.5f, -0.5f);
1584 Vector2 end2 (0.5f, 0.5f);
1585 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1586 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1587 Vector2 rotate_center2(0.0f, -0.4f);
1588 float rotate_amount2 = 6.2832f;
1589 float offset2 = 2.f;
1591 // For test mix the type string/index key and string/index value works well.
1592 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1593 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1594 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1596 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1597 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1598 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1599 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1600 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1601 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1602 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1604 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1605 DALI_TEST_CHECK( animatedGradientVisual );
1607 Property::Map resultMap;
1608 animatedGradientVisual.CreatePropertyMap( resultMap );
1610 // check the property values from the returned map from visual
1611 // Note : resultMap from CreatePropertyMap only contain indexKey
1612 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1613 DALI_TEST_CHECK( value );
1614 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1616 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1617 DALI_TEST_CHECK( value );
1618 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1620 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1621 DALI_TEST_CHECK( value );
1622 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1624 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1625 DALI_TEST_CHECK( value );
1626 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1628 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
1630 tet_printf("Check value at %d\n", line_num);
1631 value = resultMap.Find( index, Property::MAP );
1632 DALI_TEST_CHECK( value );
1633 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1634 Property::Map *temp_map = value->GetMap();
1635 DALI_TEST_CHECK( temp_map );
1637 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1639 Property::Value *res = temp_map->Find( index );
1640 DALI_TEST_CHECK( res );
1644 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1645 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1646 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1647 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1648 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1649 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1650 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1651 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1652 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1655 // check the animation map data is good
1656 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1657 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1658 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1659 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1660 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1661 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1662 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1668 int UtcDaliVisualGetPropertyMap13(void)
1670 ToolkitTestApplication application;
1671 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1673 for(int _direction = 0; _direction <= 1; ++_direction)
1675 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1677 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1678 VisualFactory factory = VisualFactory::Get();
1679 DALI_TEST_CHECK( factory );
1681 Property::Map propertyMap;
1682 Property::Map animationMap;
1683 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1685 float duration = 1.0f;
1686 float delay = _delay;
1687 float repeat_delay = 0.5f;
1689 int direction = _direction;
1690 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1691 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1692 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1694 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1696 animationMap.Clear();
1697 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1698 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1699 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1700 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1701 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1702 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1703 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1704 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1705 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1706 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1707 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1709 return animationMap;
1712 Vector2 start1(-0.5f, 0.5f);
1713 Vector2 end1 (0.5f, -0.5f);
1714 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1715 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1716 Vector2 rotate_center1(1.0f, 0.4f);
1717 float rotate_amount1 = 2.0f;
1718 float offset1 = 1.f;
1720 Vector2 start2(-0.5f, -0.5f);
1721 Vector2 end2 (0.5f, 0.5f);
1722 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1723 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1724 Vector2 rotate_center2(1.0f, -0.4f);
1725 float rotate_amount2 = 1.0f;
1726 float offset2 = 3.f;
1728 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1729 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1730 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1732 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1733 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1734 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1735 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1736 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1737 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1738 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1740 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1741 DALI_TEST_CHECK( animatedGradientVisual );
1743 Property::Map resultMap;
1744 animatedGradientVisual.CreatePropertyMap( resultMap );
1746 // check the property values from the returned map from visual
1747 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1748 DALI_TEST_CHECK( value );
1749 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1751 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1752 DALI_TEST_CHECK( value );
1753 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1755 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1756 DALI_TEST_CHECK( value );
1757 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1759 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1760 DALI_TEST_CHECK( value );
1761 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1763 // If loop_count = 0, Animation doesn't created.
1764 // Optimized resultMap only have one value, which is target value
1765 // Note: target value will be changed by direction option.
1766 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1767 DALI_TEST_CHECK( value );
1768 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1770 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1771 DALI_TEST_CHECK( value );
1772 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1774 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1775 DALI_TEST_CHECK( value );
1776 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1778 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1779 DALI_TEST_CHECK( value );
1780 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1782 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1783 DALI_TEST_CHECK( value );
1784 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1786 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1787 DALI_TEST_CHECK( value );
1788 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1790 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1791 DALI_TEST_CHECK( value );
1792 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1799 int UtcDaliVisualAnimateBorderVisual01(void)
1801 ToolkitTestApplication application;
1802 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1804 VisualFactory factory = VisualFactory::Get();
1805 Property::Map propertyMap;
1806 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1807 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1808 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1809 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1810 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1813 map["target"] = "testVisual";
1814 map["property"] = "mixColor";
1815 map["targetValue"] = Vector4(1,1,1,0.1);
1816 map["animator"] = Property::Map()
1817 .Add("alphaFunction", "LINEAR")
1818 .Add("timePeriod", Property::Map()
1820 .Add("duration", 4.0f));
1822 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1824 DummyControl actor = DummyControl::New(true);
1825 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1826 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1827 actor.SetSize(2000, 2000);
1828 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1829 Stage::GetCurrent().Add(actor);
1831 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1833 Renderer renderer = actor.GetRendererAt(0);
1834 Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR );
1835 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
1837 Animation animation = dummyImpl.CreateTransition( transition );
1839 // Animate the mix color through the transition, and the border color through
1840 // programmatic method.
1841 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1844 application.SendNotification();
1845 application.Render(0);
1846 application.Render(2000u); // halfway point between blue and white
1848 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1849 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1850 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1851 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1853 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1854 testColor = Vector4( 1,1,1,0.45f );
1855 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1856 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1859 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1860 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1862 application.Render(2000u);
1864 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1865 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1866 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1868 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1869 testColor = Vector4(1,1,1,0.1);
1870 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), TEST_LOCATION );
1871 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1873 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1874 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1880 int UtcDaliVisualAnimateBorderVisual02(void)
1882 ToolkitTestApplication application;
1883 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1885 VisualFactory factory = VisualFactory::Get();
1886 Property::Map propertyMap;
1887 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1888 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1889 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1890 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1892 DummyControl actor = DummyControl::New(true);
1893 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1894 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1895 actor.SetSize(2000, 2000);
1896 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1897 Stage::GetCurrent().Add(actor);
1899 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1901 Renderer renderer = actor.GetRendererAt(0);
1902 Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE );
1904 Animation animation = Animation::New(4.0f);
1905 animation.AnimateTo( Property(renderer, index), 9.0f );
1908 application.SendNotification();
1909 application.Render(0);
1910 application.Render(2000u); // halfway point
1912 float size = renderer.GetCurrentProperty< float >( index );
1913 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1914 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1916 application.Render(2000u); // halfway point between blue and white
1918 size = renderer.GetCurrentProperty< float >( index );
1919 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1920 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1925 int UtcDaliVisualAnimateColorVisual(void)
1927 ToolkitTestApplication application;
1928 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1930 VisualFactory factory = VisualFactory::Get();
1931 Property::Map propertyMap;
1932 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1933 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1934 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1936 DummyControl actor = DummyControl::New(true);
1937 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1938 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1939 actor.SetSize(2000, 2000);
1940 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1941 Stage::GetCurrent().Add(actor);
1943 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1945 Renderer renderer = actor.GetRendererAt(0);
1946 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR );
1948 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1949 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1951 Animation animation = Animation::New(4.0f);
1952 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1955 application.SendNotification();
1956 application.Render(0);
1957 application.Render(2000u); // halfway point
1959 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1960 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1961 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1963 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1965 application.Render(2000u); // halfway point between blue and white
1967 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1968 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1970 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1972 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1973 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1978 int UtcDaliVisualAnimatePrimitiveVisual(void)
1980 ToolkitTestApplication application;
1981 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1984 VisualFactory factory = VisualFactory::Get();
1985 Property::Map propertyMap;
1986 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1987 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1988 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1989 Visual::Base visual = factory.CreateVisual( propertyMap );
1991 DummyControl actor = DummyControl::New(true);
1992 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1993 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1994 actor.SetSize(2000, 2000);
1995 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1996 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
1997 Stage::GetCurrent().Add(actor);
1999 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2001 Renderer renderer = actor.GetRendererAt(0);
2002 Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR );
2004 tet_infoline("Test that the renderer has the Primitive mix color");
2005 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2007 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
2008 const Vector4 TARGET_MIX_COLOR( Color::RED );
2011 map["target"] = "testVisual";
2012 map["property"] = "mixColor";
2013 map["initialValue"] = INITIAL_MIX_COLOR;
2014 map["targetValue"] = TARGET_MIX_COLOR;
2015 map["animator"] = Property::Map()
2016 .Add("alphaFunction", "LINEAR")
2017 .Add("timePeriod", Property::Map()
2019 .Add("duration", 4.0f));
2021 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
2023 Animation animation = dummyImpl.CreateTransition( transition );
2024 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
2025 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
2027 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
2030 application.SendNotification();
2031 application.Render(0);
2032 application.Render(2000u); // halfway point
2033 application.SendNotification();
2035 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
2036 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a )), true, TEST_LOCATION );
2037 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
2039 application.Render(2001u); // go past end
2040 application.SendNotification(); // Trigger signals
2042 DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), Color::WHITE, TEST_LOCATION );
2043 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4( 1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a ) ), true, TEST_LOCATION );
2044 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
2046 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
2047 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2055 int UtcDaliVisualAnimatedGradientVisual01(void)
2057 ToolkitTestApplication application;
2058 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
2061 VisualFactory factory = VisualFactory::Get();
2062 Property::Map propertyMap;
2063 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2064 Visual::Base visual = factory.CreateVisual( propertyMap );
2066 DummyControl actor = DummyControl::New(true);
2067 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2068 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2069 actor.SetSize(2000, 2000);
2070 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2071 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2072 Stage::GetCurrent().Add(actor);
2074 application.SendNotification();
2075 application.Render(0);
2076 application.SendNotification();
2078 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2080 for(int step_iter = 0; step_iter < 3; step_iter++)
2082 application.SendNotification();
2083 application.Render(0);
2084 application.Render(750u); // step i/4
2085 application.SendNotification();
2087 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
2088 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
2089 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2090 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2091 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
2092 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
2093 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
2096 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2097 application.Render(750u); // go to end
2098 application.SendNotification();
2100 application.Render(10u); // finish
2101 application.SendNotification();
2104 application.SendNotification();
2105 application.Render(0u);
2106 application.SendNotification();
2112 int UtcDaliVisualAnimatedGradientVisual02(void)
2114 ToolkitTestApplication application;
2115 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2118 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
2119 int _direction[2] = {0, 1};
2120 int _loop_count[3] = {-1, 0, 1};
2121 int _motion[2] = {0, 1};
2122 int _easing[4] = {0, 1, 2, 3};
2124 int test_case_max = 4 * 2 * 3 * 2 * 4;
2126 int test_case_d = 7; // 7 is the number of animated properties.
2128 float _duration = 0.4f;
2129 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2130 float noise_maker = 0.0f;
2131 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2132 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2134 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2136 VisualFactory factory = VisualFactory::Get();
2137 Property::Map propertyMap;
2138 Property::Map animationMap;
2139 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2141 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2142 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2143 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2145 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&
2147 int tc = (test_case + tc_offset);
2148 int idx_easing = tc % 4; tc /= 4;
2149 int idx_motion = tc % 2; tc /= 2;
2150 int idx_loop_count = tc % 3; tc /= 3;
2151 int idx_direction = tc % 2; tc /= 2;
2152 int idx_delay = tc % 4; tc /= 4;
2154 float duration = _duration - _repeat_delay;
2155 float repeat_delay = _repeat_delay;
2156 float delay = _delay[idx_delay] * _duration;
2157 int direction = _direction[idx_direction];
2158 int loop_count = _loop_count[idx_loop_count];
2159 int motion = _motion[idx_motion];
2160 int easing = _easing[idx_easing];
2162 animationMap.Clear();
2163 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2164 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2165 if( direction == 0 )
2167 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2171 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2173 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2174 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2175 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2176 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2179 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2183 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2187 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2189 else if( easing == 1 )
2191 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2193 else if( easing == 2 )
2195 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2199 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2202 return animationMap;
2205 // Give different values for debuging
2206 noise_maker += 1.0f;
2207 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2208 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2209 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2210 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2211 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2212 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2213 float offset1 = 0.f + noise_maker * 0.1f;
2215 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2216 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2217 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2218 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2219 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2220 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2221 float offset2 = 2.f + noise_maker * 0.1f;
2223 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2224 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2225 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2227 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2228 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2229 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2230 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2231 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2232 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2233 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2235 Visual::Base visual = factory.CreateVisual( propertyMap );
2237 DummyControl actor = DummyControl::New( true );
2238 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2239 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2240 actor.SetSize( 2000, 2000 );
2241 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2242 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2243 Stage::GetCurrent().Add(actor);
2245 application.SendNotification();
2246 application.Render( 0 );
2247 application.SendNotification();
2249 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2251 application.SendNotification();
2253 //Compare between CPU calculated value and Shader Visual calculated value
2254 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
2256 int tc = (test_case + tc_offset);
2257 int idx_easing = tc % 4; tc /= 4;
2258 int idx_motion = tc % 2; tc /= 2;
2259 int idx_loop_count = tc % 3; tc /= 3;
2260 int idx_direction = tc % 2; tc /= 2;
2261 int idx_delay = tc % 4; tc /= 4;
2263 float duration = _duration - _repeat_delay;
2264 float repeat_delay = _repeat_delay;
2265 float delay = _delay[idx_delay] * _duration;
2266 int direction = _direction[idx_direction];
2267 int loop_count = _loop_count[idx_loop_count];
2268 int motion = _motion[idx_motion];
2269 int easing = _easing[idx_easing];
2271 progress -= delay / _duration;
2273 Property::Value s = start;
2274 Property::Value t = target;
2275 if( direction == 1 )
2280 float x; ///< Animator progress value
2281 if( loop_count == 0 )
2285 else if( loop_count > 0 && progress + 0.01f > loop_count )
2287 x = ( motion == 0 ) ? 1.0f : 0.0f;
2291 if( progress < 0.0f )
2295 progress = fmodf( progress, 1.0f );
2296 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2301 x = progress * 2.0f;
2308 if( easing == 1 ) // EASE_IN
2312 else if( easing == 2 ) // EASE_OUT
2316 else if( easing == 3 ) // EASE_IN_OUT
2318 x = x * x * (3.0f - 2.0f * x);
2321 if( value_type == 0 ) // result type is Float
2325 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2326 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2327 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2329 else if( value_type == 1 ) // result type is Vector2
2333 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2334 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2335 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2337 else if( value_type == 2 ) // result type is Vector3
2341 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2342 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2343 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2345 else // result type is Vector4
2349 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2350 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2351 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2356 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2358 for( int step_iter = 0; step_iter < 3; step_iter++ )
2360 application.SendNotification();
2361 application.Render( _duration * 250.f ); // step i/4
2362 application.SendNotification();
2365 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2366 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2367 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2368 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2369 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2370 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2371 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2373 application.SendNotification();
2374 application.Render(_duration * 250.f); // step 4/4 will not test
2375 application.SendNotification();
2379 application.SendNotification();
2381 application.SendNotification();
2382 application.Render(10.f); // tempral time
2383 application.SendNotification();
2390 int UtcDaliVisualAnimatedGradientVisual03(void)
2392 ToolkitTestApplication application;
2393 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2396 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
2397 int _direction[2] = {0, 1};
2398 int _loop_count[3] = {-1, 0, 1};
2399 int _motion[2] = {0, 1};
2400 int _easing[4] = {0, 1, 2, 3};
2402 int test_case_max = 4 * 2 * 3 * 2 * 4;
2404 int test_case_d = 7; // 7 is the number of animated properties.
2406 float _duration = 0.4f;
2407 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2408 float noise_maker = 0.2f;
2409 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2410 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2412 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2414 VisualFactory factory = VisualFactory::Get();
2415 Property::Map propertyMap;
2416 Property::Map animationMap;
2417 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2419 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&
2421 int tc = (test_case + tc_offset);
2422 int idx_easing = tc % 4; tc /= 4;
2423 int idx_motion = tc % 2; tc /= 2;
2424 int idx_loop_count = tc % 3; tc /= 3;
2425 int idx_direction = tc % 2; tc /= 2;
2426 int idx_delay = tc % 4; tc /= 4;
2428 float duration = _duration - _repeat_delay;
2429 float repeat_delay = _repeat_delay;
2430 float delay = _delay[idx_delay] * _duration;
2431 int direction = _direction[idx_direction];
2432 int loop_count = _loop_count[idx_loop_count];
2433 int motion = _motion[idx_motion];
2434 int easing = _easing[idx_easing];
2436 animationMap.Clear();
2437 animationMap.Insert( "startValue", start );
2438 animationMap.Insert( "targetValue", target );
2439 if( direction == 0 )
2441 animationMap.Insert("directionType", "FORWARD");
2445 animationMap.Insert("directionType", "BACKWARD");
2447 animationMap.Insert("duration", duration);
2448 animationMap.Insert("delay", delay);
2449 animationMap.Insert("repeat", loop_count);
2450 animationMap.Insert("repeatDelay", repeat_delay);
2453 animationMap.Insert("motionType", "LOOP");
2457 animationMap.Insert("motionType", "MIRROR");
2461 animationMap.Insert("easingType", "LINEAR");
2463 else if( easing == 1 )
2465 animationMap.Insert("easingType", "IN");
2467 else if( easing == 2 )
2469 animationMap.Insert("easingType", "OUT");
2473 animationMap.Insert("easingType", "IN_OUT");
2476 return animationMap;
2479 // Give different values for debuging
2480 noise_maker += 0.8f;
2481 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2482 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2483 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2484 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2485 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2486 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2487 float offset1 = 0.f + noise_maker * 0.1f;
2489 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2490 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2491 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2492 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2493 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2494 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2495 float offset2 = 2.f + noise_maker * 0.1f;
2497 propertyMap.Insert("gradientType", "LINEAR");
2498 propertyMap.Insert("unitType", "USER_SPACE");
2499 propertyMap.Insert("spreadType", "CLAMP");
2501 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2502 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2503 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2504 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2505 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2506 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2507 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2509 Visual::Base visual = factory.CreateVisual( propertyMap );
2511 DummyControl actor = DummyControl::New( true );
2512 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2513 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2514 actor.SetSize( 2000, 2000 );
2515 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2516 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2517 Stage::GetCurrent().Add(actor);
2519 application.SendNotification();
2520 application.Render( 0 );
2521 application.SendNotification();
2523 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2525 application.SendNotification();
2527 //Compare between CPU calculated value and Shader Visual calculated value
2528 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
2530 int tc = (test_case + tc_offset);
2531 int idx_easing = tc % 4; tc /= 4;
2532 int idx_motion = tc % 2; tc /= 2;
2533 int idx_loop_count = tc % 3; tc /= 3;
2534 int idx_direction = tc % 2; tc /= 2;
2535 int idx_delay = tc % 4; tc /= 4;
2537 float duration = _duration - _repeat_delay;
2538 float repeat_delay = _repeat_delay;
2539 float delay = _delay[idx_delay] * _duration;
2540 int direction = _direction[idx_direction];
2541 int loop_count = _loop_count[idx_loop_count];
2542 int motion = _motion[idx_motion];
2543 int easing = _easing[idx_easing];
2545 progress -= delay / _duration;
2547 Property::Value s = start;
2548 Property::Value t = target;
2549 if( direction == 1 )
2554 float x; ///< Animator progress value
2555 if( loop_count == 0 )
2559 else if( loop_count > 0 && progress + 0.01f > loop_count )
2561 x = ( motion == 0 ) ? 1.0f : 0.0f;
2565 if( progress < 0.0f )
2569 progress = fmodf( progress, 1.0f );
2570 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2575 x = progress * 2.0f;
2582 if( easing == 1 ) // EASE_IN
2586 else if( easing == 2 ) // EASE_OUT
2590 else if( easing == 3 ) // EASE_IN_OUT
2592 x = x * x * (3.0f - 2.0f * x);
2595 if( value_type == 0 ) // result type is Float
2599 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2600 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2601 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2603 else if( value_type == 1 ) // result type is Vector2
2607 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2608 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2609 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2611 else if( value_type == 2 ) // result type is Vector3
2615 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2616 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2617 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2619 else // result type is Vector4
2623 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2624 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2625 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2630 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2632 for( int step_iter = 0; step_iter < 3; step_iter++ )
2634 application.SendNotification();
2635 application.Render( _duration * 250.f ); // step i/4
2636 application.SendNotification();
2639 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2640 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2641 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2642 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2643 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2644 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2645 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2647 application.SendNotification();
2648 application.Render(_duration * 250.f); // step 4/4 will not test
2649 application.SendNotification();
2653 application.SendNotification();
2655 application.SendNotification();
2656 application.Render(10.f); // tempral time
2657 application.SendNotification();
2664 int UtcDaliVisualWireframeVisual(void)
2666 ToolkitTestApplication application;
2668 VisualFactory factory = VisualFactory::Get();
2669 Property::Map propertyMap;
2670 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2672 // Create the visual.
2673 Visual::Base visual = factory.CreateVisual( propertyMap );
2675 DALI_TEST_CHECK( visual );
2677 Property::Map resultMap;
2678 visual.CreatePropertyMap( resultMap );
2680 // Check the property values from the returned map from visual
2681 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2682 DALI_TEST_CHECK( value );
2683 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2688 int UtcDaliVisualGetTransform(void)
2690 ToolkitTestApplication application;
2691 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2693 VisualFactory factory = VisualFactory::Get();
2694 Property::Map propertyMap;
2695 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2696 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2697 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2699 Dali::Property::Map visualMap;
2700 colorVisual.CreatePropertyMap( visualMap );
2701 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2702 Dali::Property::Map* map = value->GetMap();
2703 DALI_TEST_CHECK( map );
2705 //Test default values
2707 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2708 DALI_TEST_CHECK( typeValue );
2709 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2712 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2713 DALI_TEST_CHECK( typeValue );
2714 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2717 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2718 DALI_TEST_CHECK( typeValue );
2719 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2722 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2723 DALI_TEST_CHECK( typeValue );
2724 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2727 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2728 DALI_TEST_CHECK( typeValue );
2729 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2732 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2733 DALI_TEST_CHECK( typeValue );
2734 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2737 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2738 DALI_TEST_CHECK( typeValue );
2739 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2745 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2747 Property::Map transform;
2748 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2749 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2750 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2751 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2752 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2753 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(50.0f, 50.0f) );
2755 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2757 Dali::Property::Map visualMap;
2758 visual.CreatePropertyMap( visualMap );
2759 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2760 Dali::Property::Map* map = value->GetMap();
2761 DALI_TEST_CHECK( map );
2764 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2765 DALI_TEST_CHECK( typeValue );
2766 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2769 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2770 DALI_TEST_CHECK( typeValue );
2771 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2774 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2775 DALI_TEST_CHECK( typeValue );
2776 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2779 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2780 DALI_TEST_CHECK( typeValue );
2781 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2784 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2785 DALI_TEST_CHECK( typeValue );
2786 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2789 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2790 DALI_TEST_CHECK( typeValue );
2791 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2794 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2795 DALI_TEST_CHECK( typeValue );
2796 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(50.0f,50.0f), TEST_LOCATION );
2799 //Put the visual on the stage
2800 DummyControl actor = DummyControl::New(true);
2801 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2802 actor.SetSize(2000, 2000);
2803 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2804 Stage::GetCurrent().Add(actor);
2806 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2807 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2809 application.SendNotification();
2810 application.Render(0);
2811 Renderer renderer( actor.GetRendererAt(0) );
2813 //Check that the properties have been registered on the Renderer
2814 Property::Index index = renderer.GetPropertyIndex( "offset" );
2815 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2816 Vector2 offset = renderer.GetProperty<Vector2>( index );
2817 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2819 index = renderer.GetPropertyIndex( "size" );
2820 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2821 Vector2 size = renderer.GetProperty<Vector2>( index );
2822 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2824 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2825 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2826 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2827 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2829 index = renderer.GetPropertyIndex( "origin" );
2830 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2831 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2832 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2834 index = renderer.GetPropertyIndex( "anchorPoint" );
2835 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2836 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2837 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2839 index = renderer.GetPropertyIndex( "extraSize" );
2840 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2841 Vector2 extraSize = renderer.GetProperty<Vector2>( index );
2842 DALI_TEST_EQUALS( extraSize, Vector2(50.0f,50.0f), TEST_LOCATION );
2844 //Set a new transform
2846 transform = DefaultTransform();
2847 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2848 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2849 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2850 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(0.5f, 0.5f) );
2851 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2852 application.SendNotification();
2853 application.Render(0);
2855 //Check that the values have changed in the renderer
2856 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2857 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2859 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2860 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2862 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2863 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2865 //Parent origin and anchor point should have the default values
2866 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2867 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2869 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2870 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2872 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
2873 DALI_TEST_EQUALS( extraSize, Vector2(0.5f,0.5f), TEST_LOCATION );
2876 int UtcDaliVisualSetTransform0(void)
2878 ToolkitTestApplication application;
2879 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2881 VisualFactory factory = VisualFactory::Get();
2882 Property::Map propertyMap;
2883 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2884 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2885 Visual::Base visual = factory.CreateVisual( propertyMap );
2886 TestTransform( application, visual );
2887 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2892 int UtcDaliVisualSetTransform1(void)
2894 ToolkitTestApplication application;
2895 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2897 VisualFactory factory = VisualFactory::Get();
2898 Property::Map propertyMap;
2899 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2900 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2901 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2902 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2903 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2904 Visual::Base visual = factory.CreateVisual( propertyMap );
2905 TestTransform( application, visual );
2906 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2911 int UtcDaliVisualSetTransform2(void)
2913 ToolkitTestApplication application;
2914 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2916 VisualFactory factory = VisualFactory::Get();
2917 Property::Map propertyMap;
2918 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2919 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2921 Property::Array stopOffsets;
2922 stopOffsets.PushBack( 0.0f );
2923 stopOffsets.PushBack( 0.3f );
2924 stopOffsets.PushBack( 0.6f );
2925 stopOffsets.PushBack( 0.8f );
2926 stopOffsets.PushBack( 1.0f );
2927 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2929 Property::Array stopColors;
2930 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2931 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2932 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2933 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2934 stopColors.PushBack( Color::YELLOW );
2935 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2936 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2937 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2938 Visual::Base visual = factory.CreateVisual( propertyMap );
2939 TestTransform( application, visual );
2940 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2945 int UtcDaliVisualSetTransform3(void)
2947 ToolkitTestApplication application;
2948 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2950 VisualFactory factory = VisualFactory::Get();
2951 Property::Map propertyMap;
2952 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2953 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2954 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2955 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2956 Visual::Base visual = factory.CreateVisual( propertyMap );
2957 TestTransform( application, visual );
2958 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2963 int UtcDaliVisualSetTransform4(void)
2965 ToolkitTestApplication application;
2966 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2968 VisualFactory factory = VisualFactory::Get();
2969 Property::Map propertyMap;
2970 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2971 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2973 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2974 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2975 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2976 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2977 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2978 Visual::Base visual = factory.CreateVisual( propertyMap );
2979 TestTransform( application, visual );
2980 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2985 int UtcDaliVisualSetTransform5(void)
2987 ToolkitTestApplication application;
2988 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
2990 VisualFactory factory = VisualFactory::Get();
2991 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
2992 Visual::Base visual = factory.CreateVisual(image);
2993 TestTransform( application, visual );
2994 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2999 int UtcDaliVisualSetTransform6(void)
3001 ToolkitTestApplication application;
3002 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
3004 VisualFactory factory = VisualFactory::Get();
3005 Property::Map propertyMap;
3006 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
3007 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
3008 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3009 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
3010 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
3011 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
3012 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
3013 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3014 Visual::Base visual = factory.CreateVisual(propertyMap);
3015 TestTransform( application, visual );
3016 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
3021 int UtcDaliVisualSetTransform7(void)
3023 ToolkitTestApplication application;
3024 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
3026 VisualFactory factory = VisualFactory::Get();
3027 Property::Map propertyMap;
3028 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
3029 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3030 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3031 Visual::Base visual = factory.CreateVisual(propertyMap);
3032 TestTransform( application, visual );
3033 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
3038 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
3040 ToolkitTestApplication application;
3041 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
3043 VisualFactory factory = VisualFactory::Get();
3044 Property::Map propertyMap;
3045 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3046 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3047 Visual::Base visual = factory.CreateVisual( propertyMap );
3049 Property::Map transform;
3050 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
3052 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
3054 visual.SetTransformAndSize( transform, Vector2(100, 100) );
3056 Dali::Property::Map visualMap;
3057 visual.CreatePropertyMap( visualMap );
3058 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
3059 Dali::Property::Map* map = value->GetMap();
3060 DALI_TEST_CHECK( map );
3063 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
3064 DALI_TEST_CHECK( typeValue );
3065 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
3068 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
3069 DALI_TEST_CHECK( typeValue );
3070 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
3076 int UtcDaliNPatchVisualCustomShader(void)
3078 ToolkitTestApplication application;
3079 tet_infoline( "NPatchVisual with custom shader" );
3081 VisualFactory factory = VisualFactory::Get();
3082 Property::Map properties;
3083 Property::Map shader;
3084 const std::string vertexShader = "Foobar";
3085 const std::string fragmentShader = "Foobar";
3086 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3087 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3089 Property::Map transformMap;
3090 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
3091 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
3092 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
3093 transformMap["anchorPoint"] = Align::CENTER;
3094 transformMap["origin"] = Align::CENTER;
3095 transformMap["extraSize"] = Vector2( 0.0f, 50.0f );
3096 properties[Visual::Property::TRANSFORM] = transformMap;
3098 properties[Visual::Property::TYPE] = Visual::IMAGE;
3099 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
3100 properties[Visual::Property::SHADER]=shader;
3101 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3102 properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3104 Visual::Base visual = factory.CreateVisual( properties );
3105 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
3107 // trigger creation through setting on stage
3108 DummyControl dummy = DummyControl::New(true);
3109 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3110 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3111 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
3112 dummy.SetSize(2000, 2000);
3113 dummy.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
3114 Stage::GetCurrent().Add(dummy);
3115 application.SendNotification();
3117 Renderer renderer = dummy.GetRendererAt( 0 );
3118 Shader shader2 = renderer.GetShader();
3119 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3120 Property::Map* map = value.GetMap();
3121 DALI_TEST_CHECK( map );
3123 Property::Index index = renderer.GetPropertyIndex("size");
3124 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
3126 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3127 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
3129 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3130 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
3132 Vector2 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
3133 DALI_TEST_EQUALS( extraSize, Vector2(0.0f, 50.0f), TEST_LOCATION );
3138 int UtcDaliGradientVisualBlendMode(void)
3140 ToolkitTestApplication application;
3141 VisualFactory factory = VisualFactory::Get();
3143 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3144 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3145 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3146 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3147 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3148 .Add( Color::GREEN ) ) );
3150 Visual::Base alphaGradientVisual = factory.CreateVisual(
3151 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3152 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3153 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3154 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3155 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
3157 DummyControl control = DummyControl::New(true);
3158 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3159 Stage::GetCurrent().Add( control );
3161 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
3162 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
3163 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
3165 application.SendNotification();
3166 application.Render();
3168 // 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
3169 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
3170 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
3171 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
3176 int UtcDaliVisualRendererRemovalAndReAddition(void)
3178 ToolkitTestApplication application;
3179 tet_infoline( "UtcDaliVisualRendererRemoval" );
3181 VisualFactory factory = VisualFactory::Get();
3182 Property::Map propertyMap;
3183 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3184 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3185 Visual::Base visual = factory.CreateVisual( propertyMap );
3187 visual.SetDepthIndex( 1 );
3189 DummyControl dummyControl = DummyControl::New(true);
3190 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3191 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3192 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3194 dummyControl.SetSize(200.f, 200.f);
3195 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
3197 Stage::GetCurrent().Add( dummyControl );
3199 application.SendNotification();
3200 application.Render();
3202 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3204 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
3205 Stage::GetCurrent().Remove( dummyControl );
3206 application.SendNotification();
3207 application.Render();
3209 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3211 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
3213 Stage::GetCurrent().Add( dummyControl );
3215 application.SendNotification();
3216 application.Render();
3218 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3225 int UtcDaliVisualTextVisualRender(void)
3227 ToolkitTestApplication application;
3228 tet_infoline( "UtcDaliVisualTextVisualRender" );
3230 VisualFactory factory = VisualFactory::Get();
3231 Property::Map propertyMap;
3232 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3233 propertyMap.Insert( "mixColor", Color::WHITE );
3234 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3235 propertyMap.Insert( "enableMarkup", false );
3236 propertyMap.Insert( "text", "Hello world" );
3237 propertyMap.Insert( "fontFamily", "TizenSans" );
3239 Property::Map fontStyleMapSet;
3240 fontStyleMapSet.Insert( "weight", "bold" );
3241 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3243 propertyMap.Insert( "pointSize", 12.f );
3244 propertyMap.Insert( "multiLine", true );
3245 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3246 propertyMap.Insert( "verticalAlignment", "CENTER" );
3247 propertyMap.Insert( "textColor", Color::RED );
3248 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3249 textVisual.SetDepthIndex( 1 );
3251 DummyControl dummyControl = DummyControl::New(true);
3252 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3253 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3254 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3256 dummyControl.SetSize(200.f, 200.f);
3257 dummyControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3259 Stage::GetCurrent().Add( dummyControl );
3260 application.SendNotification();
3261 application.Render();
3264 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3265 propertyMap.Clear();
3266 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3267 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3268 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3269 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3271 Property::Map transformMap;
3272 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3273 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3275 textVisual = factory.CreateVisual( propertyMap );
3276 textVisual.SetDepthIndex( 1 );
3278 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3279 dummyControl.SetSize( 720.f, 640.f );
3281 application.SendNotification(); // force process events to ensure text visual
3282 // adds renderer to the dummy control in OnRelayout
3283 application.Render();
3285 Renderer renderer = dummyControl.GetRendererAt(0u);
3286 Property::Index index = renderer.GetPropertyIndex("size");
3288 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3289 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3294 int UtcDaliVisualTextVisualDisableEnable(void)
3296 ToolkitTestApplication application;
3297 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3299 VisualFactory factory = VisualFactory::Get();
3300 Property::Map propertyMap;
3301 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3302 propertyMap.Insert( "mixColor", Color::WHITE );
3303 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3304 propertyMap.Insert( "enableMarkup", false );
3305 propertyMap.Insert( "text", "Hello world" );
3306 propertyMap.Insert( "fontFamily", "TizenSans" );
3308 Property::Map fontStyleMapSet;
3309 fontStyleMapSet.Insert( "weight", "bold" );
3310 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3312 propertyMap.Insert( "pointSize", 12.f );
3313 propertyMap.Insert( "multiLine", true );
3314 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3315 propertyMap.Insert( "verticalAlignment", "CENTER" );
3316 propertyMap.Insert( "textColor", Color::RED );
3317 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3318 textVisual.SetDepthIndex( 1 );
3320 DummyControl dummyControl = DummyControl::New(true);
3321 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3322 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3323 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3325 dummyControl.SetSize(200.f, 200.f);
3326 dummyControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3328 Stage::GetCurrent().Add( dummyControl );
3329 application.SendNotification();
3330 application.Render();
3332 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3334 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3336 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3338 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3340 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3345 int UtcDaliVisualPremultipliedAlpha(void)
3347 ToolkitTestApplication application;
3348 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3350 VisualFactory factory = VisualFactory::Get();
3352 // image visual, test default value ( true )
3354 Visual::Base imageVisual = factory.CreateVisual(
3356 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3357 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3359 Dali::Property::Map visualMap;
3360 imageVisual.CreatePropertyMap( visualMap );
3361 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3364 DALI_TEST_CHECK( value );
3365 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3368 // image visual, override premultiplied
3370 Visual::Base imageVisual = factory.CreateVisual(
3372 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3373 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3374 .Add( Visual::Property::PREMULTIPLIED_ALPHA, false ) );
3376 Dali::Property::Map visualMap;
3377 imageVisual.CreatePropertyMap( visualMap );
3378 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3381 DALI_TEST_CHECK( value );
3382 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION);
3385 // svg visual ( premultiplied alpha by default is true )
3387 Visual::Base imageVisual = factory.CreateVisual(
3389 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3390 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3392 Dali::Property::Map visualMap;
3393 imageVisual.CreatePropertyMap( visualMap );
3394 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3397 DALI_TEST_CHECK( value );
3398 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3404 int UtcDaliRegisterVisualOrder(void)
3406 ToolkitTestApplication application;
3407 tet_infoline( "Register Visual Order" );
3409 DummyControl dummyControl = DummyControl::New(true);
3410 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3412 VisualFactory factory = VisualFactory::Get();
3413 Property::Map propertyMap;
3414 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3415 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3417 tet_infoline( "Register visual, should have depth index of 0.0f" );
3418 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3419 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3420 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3422 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3424 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3425 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3426 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3428 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3429 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3430 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3432 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3433 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3434 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3436 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3437 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3438 labelVisual.SetDepthIndex( -2000 );
3439 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3440 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3442 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3443 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3444 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3445 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3446 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3447 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3449 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3450 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3451 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3452 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3453 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3455 dummyControl.SetSize(200.f, 200.f);
3456 Stage::GetCurrent().Add( dummyControl );
3461 int UtcDaliRegisterVisualOrder02(void)
3463 ToolkitTestApplication application;
3464 tet_infoline( "Register Visual Order with Background Set" );
3466 DummyControl dummyControl = DummyControl::New(true);
3467 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3469 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3471 VisualFactory factory = VisualFactory::Get();
3472 Property::Map propertyMap;
3473 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3474 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3476 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3478 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3480 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3481 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3482 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3483 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3484 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3486 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3487 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3488 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3489 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3491 dummyControl.SetSize(200.f, 200.f);
3492 Stage::GetCurrent().Add( dummyControl );
3497 int UtcDaliRegisterVisualWithDepthIndex(void)
3499 ToolkitTestApplication application;
3500 tet_infoline( "Register a Visual With Depth Index" );
3502 DummyControl dummyControl = DummyControl::New(true);
3503 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3505 VisualFactory factory = VisualFactory::Get();
3506 Property::Map propertyMap;
3507 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3508 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3510 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3511 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3512 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3513 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3514 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3516 tet_infoline( "Register another visual with a depth index and it disabled" );
3517 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3518 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3519 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3520 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3522 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3523 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3524 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3525 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3526 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3528 dummyControl.SetSize(200.f, 200.f);
3529 Stage::GetCurrent().Add( dummyControl );
3534 int UtcDaliColorVisualRenderIfTransparentProperty(void)
3536 ToolkitTestApplication application;
3537 tet_infoline( "Test the renderIfTransparent property of ColorVisual" );
3539 VisualFactory factory = VisualFactory::Get();
3540 Property::Map propertyMap;
3541 propertyMap.Insert( Visual::Property::TYPE, Visual::COLOR );
3542 propertyMap.Insert( ColorVisual::Property::MIX_COLOR, Color::BLUE );
3544 tet_infoline( "Check default value" );
3546 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3547 Property::Map returnedMap;
3548 testVisual.CreatePropertyMap( returnedMap );
3550 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3551 DALI_TEST_CHECK( renderIfTransparentProperty );
3552 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3555 propertyMap.Insert( DevelColorVisual::Property::RENDER_IF_TRANSPARENT, true );
3557 tet_infoline( "Ensure set to value required" );
3559 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3560 Property::Map returnedMap;
3561 testVisual.CreatePropertyMap( returnedMap );
3563 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3564 DALI_TEST_CHECK( renderIfTransparentProperty );
3565 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), true, TEST_LOCATION );
3568 propertyMap[ DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = Color::BLUE;
3570 tet_infoline( "Ensure it returns default value if set to wrong type" );
3572 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3573 Property::Map returnedMap;
3574 testVisual.CreatePropertyMap( returnedMap );
3576 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3577 DALI_TEST_CHECK( renderIfTransparentProperty );
3578 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3584 int UtcDaliSvgVisualCustomShader(void)
3586 ToolkitTestApplication application;
3587 tet_infoline( "SvgVisual with custom shader" );
3589 VisualFactory factory = VisualFactory::Get();
3590 Property::Map properties;
3591 Property::Map shader;
3592 const std::string vertexShader = "Foobar";
3593 const std::string fragmentShader = "Foobar";
3594 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3595 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3597 properties[Visual::Property::TYPE] = Visual::IMAGE;
3598 properties[Visual::Property::SHADER] = shader;
3599 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
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.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3610 Stage::GetCurrent().Add( dummy );
3612 application.SendNotification();
3613 application.Render();
3615 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3617 Renderer renderer = dummy.GetRendererAt( 0 );
3618 Shader shader2 = renderer.GetShader();
3619 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3620 Property::Map* map = value.GetMap();
3621 DALI_TEST_CHECK( map );
3623 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3624 DALI_TEST_EQUALS( fragmentShader, fragment->Get< std::string >(), TEST_LOCATION );
3626 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3627 DALI_TEST_EQUALS( vertexShader, vertex->Get< std::string >(), TEST_LOCATION );
3632 int UtcDaliVisualRoundedCorner(void)
3634 ToolkitTestApplication application;
3635 tet_infoline( "UtcDaliVisualRoundedCorner" );
3639 VisualFactory factory = VisualFactory::Get();
3640 Property::Map properties;
3641 float cornerRadius = 30.0f;
3643 properties[Visual::Property::TYPE] = Visual::IMAGE;
3644 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3645 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3647 Visual::Base visual = factory.CreateVisual( properties );
3649 // trigger creation through setting on stage
3650 DummyControl dummy = DummyControl::New( true );
3651 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3652 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3654 dummy.SetSize( 200.f, 200.f );
3655 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3656 Stage::GetCurrent().Add( dummy );
3658 application.SendNotification();
3659 application.Render();
3661 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3663 application.SendNotification();
3664 application.Render();
3666 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3671 VisualFactory factory = VisualFactory::Get();
3672 Property::Map properties;
3673 float cornerRadius = 30.0f;
3675 properties[Visual::Property::TYPE] = Visual::COLOR;
3676 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3677 properties["cornerRadius"] = cornerRadius;
3678 properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
3680 Visual::Base visual = factory.CreateVisual( properties );
3682 // trigger creation through setting on stage
3683 DummyControl dummy = DummyControl::New( true );
3684 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3685 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3687 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3688 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3689 Stage::GetCurrent().Add( dummy );
3691 application.SendNotification();
3692 application.Render();
3694 application.SendNotification();
3695 application.Render();
3697 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3698 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3703 VisualFactory factory = VisualFactory::Get();
3704 Property::Map properties;
3705 float cornerRadius = 0.5f;
3707 properties[Visual::Property::TYPE] = Visual::COLOR;
3708 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3709 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3710 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
3712 Visual::Base visual = factory.CreateVisual( properties );
3714 // trigger creation through setting on stage
3715 DummyControl dummy = DummyControl::New( true );
3716 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3717 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3719 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3720 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3721 Stage::GetCurrent().Add( dummy );
3723 application.SendNotification();
3724 application.Render();
3726 application.SendNotification();
3727 application.Render();
3729 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3730 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION );
3733 // color visual 3 - invalid value
3735 VisualFactory factory = VisualFactory::Get();
3736 Property::Map properties;
3737 float cornerRadius = 30.0f;
3739 properties[Visual::Property::TYPE] = Visual::COLOR;
3740 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3741 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3742 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = -1; // Set an invalid value
3744 Visual::Base visual = factory.CreateVisual( properties );
3746 // trigger creation through setting on stage
3747 DummyControl dummy = DummyControl::New( true );
3748 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3749 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3751 dummy.SetSize( 200.f, 200.f );
3752 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3753 Stage::GetCurrent().Add( dummy );
3755 application.SendNotification();
3756 application.Render();
3758 application.SendNotification();
3759 application.Render();
3761 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3762 // Default corner radius policy is absolute.
3763 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3768 VisualFactory factory = VisualFactory::Get();
3769 Property::Map properties;
3770 float cornerRadius = 30.0f;
3772 properties[Visual::Property::TYPE] = Visual::GRADIENT;
3773 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3774 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3775 properties[GradientVisual::Property::START_POSITION] = Vector2( 0.5f, 0.5f );
3776 properties[GradientVisual::Property::END_POSITION] = Vector2( -0.5f, -0.5f );
3777 properties[GradientVisual::Property::UNITS] = GradientVisual::Units::USER_SPACE;
3779 Property::Array stopOffsets;
3780 stopOffsets.PushBack( 0.0f );
3781 stopOffsets.PushBack( 0.6f );
3782 stopOffsets.PushBack( 1.0f );
3783 properties[GradientVisual::Property::STOP_OFFSET] = stopOffsets;
3785 Property::Array stopColors;
3786 stopColors.PushBack( Color::RED );
3787 stopColors.PushBack( Color::YELLOW );
3788 stopColors.PushBack( Color::GREEN );
3789 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
3791 Visual::Base visual = factory.CreateVisual( properties );
3793 // trigger creation through setting on stage
3794 DummyControl dummy = DummyControl::New( true );
3795 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3796 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3798 dummy.SetSize( 200.f, 200.f );
3799 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3800 Stage::GetCurrent().Add( dummy );
3802 application.SendNotification();
3803 application.Render();
3805 application.SendNotification();
3806 application.Render();
3808 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3814 int UtcDaliColorVisualBlurRadius(void)
3816 ToolkitTestApplication application;
3817 tet_infoline( "UtcDaliColorVisualBlurRadius" );
3819 VisualFactory factory = VisualFactory::Get();
3820 Property::Map properties;
3821 float blurRadius = 20.0f;
3823 properties[Visual::Property::TYPE] = Visual::COLOR;
3824 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3825 properties["blurRadius"] = blurRadius;
3827 Visual::Base visual = factory.CreateVisual( properties );
3829 // trigger creation through setting on stage
3830 DummyControl dummy = DummyControl::New( true );
3831 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3832 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3834 dummy.SetSize( 200.f, 200.f );
3835 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3836 Stage::GetCurrent().Add( dummy );
3838 application.SendNotification();
3839 application.Render();
3841 application.SendNotification();
3842 application.Render();
3844 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "blurRadius", blurRadius ), true, TEST_LOCATION );
3849 int UtcDaliVisualGetType(void)
3851 ToolkitTestApplication application;
3852 tet_infoline( "UtcDaliVisualGetType" );
3854 VisualFactory factory = VisualFactory::Get();
3857 Property::Map properties;
3858 properties[Visual::Property::TYPE] = Visual::BORDER;
3859 Visual::Base visual = factory.CreateVisual( properties );
3861 DALI_TEST_CHECK( visual.GetType() == Visual::BORDER );
3865 Property::Map properties;
3866 properties[Visual::Property::TYPE] = Visual::COLOR;
3867 Visual::Base visual = factory.CreateVisual( properties );
3869 DALI_TEST_CHECK( visual.GetType() == Visual::COLOR );
3873 Property::Map properties;
3874 properties[Visual::Property::TYPE] = Visual::GRADIENT;
3875 properties[GradientVisual::Property::START_POSITION] = Vector2( -1.f, -1.f );
3876 properties[GradientVisual::Property::END_POSITION] = Vector2( 1.f, 1.f );
3877 properties[GradientVisual::Property::STOP_OFFSET] = Vector2(0.f, 1.f);
3878 // propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
3879 Property::Array stopColors;
3880 stopColors.PushBack( Color::RED );
3881 stopColors.PushBack( Color::GREEN );
3882 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
3883 Visual::Base visual = factory.CreateVisual( properties );
3885 DALI_TEST_CHECK( visual.GetType() == Visual::GRADIENT );
3889 Property::Map properties;
3890 properties[Visual::Property::TYPE] = Visual::IMAGE;
3891 properties.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
3892 Visual::Base visual = factory.CreateVisual( properties );
3894 DALI_TEST_CHECK( visual.GetType() == Visual::IMAGE );
3898 Property::Map properties;
3899 properties[Visual::Property::TYPE] = Visual::MESH;
3900 Visual::Base visual = factory.CreateVisual( properties );
3902 DALI_TEST_CHECK( visual.GetType() == Visual::MESH );
3906 Property::Map properties;
3907 properties[Visual::Property::TYPE] = Visual::PRIMITIVE;
3908 properties[PrimitiveVisual::Property::SHAPE] = PrimitiveVisual::Shape::CUBE;
3909 Visual::Base visual = factory.CreateVisual( properties );
3911 DALI_TEST_CHECK( visual.GetType() == Visual::PRIMITIVE );
3915 Property::Map properties;
3916 properties[Visual::Property::TYPE] = Visual::WIREFRAME;
3917 Visual::Base visual = factory.CreateVisual( properties );
3919 DALI_TEST_CHECK( visual.GetType() == Visual::WIREFRAME );
3923 Property::Map properties;
3924 properties[Visual::Property::TYPE] = Visual::TEXT;
3925 Visual::Base visual = factory.CreateVisual( properties );
3927 DALI_TEST_CHECK( visual.GetType() == Visual::TEXT );
3931 Property::Map properties;
3932 properties[Visual::Property::TYPE] = Visual::N_PATCH;
3933 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3934 Visual::Base visual = factory.CreateVisual( properties );
3936 DALI_TEST_CHECK( visual.GetType() == Visual::N_PATCH );
3940 Property::Map properties;
3941 properties[Visual::Property::TYPE] = Visual::SVG;
3942 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3943 Visual::Base visual = factory.CreateVisual( properties );
3945 DALI_TEST_CHECK( visual.GetType() == Visual::SVG );
3949 Property::Map properties;
3950 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
3951 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
3952 Visual::Base visual = factory.CreateVisual( properties );
3954 DALI_TEST_CHECK( visual.GetType() == Visual::ANIMATED_IMAGE );
3958 Property::Map properties;
3959 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_GRADIENT;
3960 Visual::Base visual = factory.CreateVisual( properties );
3962 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ANIMATED_GRADIENT ) );
3966 Property::Map properties;
3967 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
3968 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
3969 Visual::Base visual = factory.CreateVisual( properties );
3971 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ANIMATED_VECTOR_IMAGE ) );
3975 Property::Map properties;
3976 properties[Visual::Property::TYPE] = DevelVisual::ARC;
3977 Visual::Base visual = factory.CreateVisual( properties );
3979 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ARC ) );