2 * Copyright (c) 2021 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/text/rendering-backend.h>
29 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
30 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
31 #include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
32 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
33 #include <dali-toolkit/devel-api/visuals/visual-actions-devel.h>
34 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
35 #include <dali-toolkit/devel-api/visuals/text-visual-properties-devel.h>
36 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
37 #include <dali-toolkit/dali-toolkit.h>
39 #include "dummy-control.h"
42 using namespace Dali::Toolkit;
46 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
47 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
48 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
49 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
50 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
51 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
52 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
53 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
56 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
58 Property::Map DefaultTransform()
60 Property::Map transformMap;
62 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
63 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
64 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
65 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
66 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
67 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
71 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
73 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
75 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
77 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
79 Property::Value* valueSet = NULL;
80 if ( valueGet.first.type == Property::Key::INDEX )
82 valueSet = fontStyleMapSet.Find( valueGet.first.indexKey );
86 // Get Key is a string so searching Set Map for a string key
87 valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
90 if( NULL != valueSet )
92 if( valueSet->GetType() == Dali::Property::STRING && ( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() ) )
94 tet_printf( "Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
97 else if( valueSet->GetType() == Dali::Property::BOOLEAN && ( valueGet.second.Get<bool>() != valueSet->Get<bool>() ) )
99 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>() );
102 else if( valueSet->GetType() == Dali::Property::INTEGER && ( valueGet.second.Get<int>() != valueSet->Get<int>() ) )
104 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>() );
107 else if( valueSet->GetType() == Dali::Property::FLOAT && ( valueGet.second.Get<float>() != valueSet->Get<float>() ) )
109 tet_printf( "Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>() );
112 else if( valueSet->GetType() == Dali::Property::VECTOR2 && ( valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>() ) )
114 Vector2 vector2Get = valueGet.second.Get<Vector2>();
115 Vector2 vector2Set = valueSet->Get<Vector2>();
116 tet_printf( "Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y );
119 else if( valueSet->GetType() == Dali::Property::VECTOR4 && ( valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>() ) )
121 Vector4 vector4Get = valueGet.second.Get<Vector4>();
122 Vector4 vector4Set = valueSet->Get<Vector4>();
123 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 );
129 if ( valueGet.first.type == Property::Key::INDEX )
131 tet_printf( " The key %d doesn't exist.", valueGet.first.indexKey );
135 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
147 void dali_visual_startup(void)
149 test_return_value = TET_UNDEF;
152 void dali_visual_cleanup(void)
154 test_return_value = TET_PASS;
158 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
161 visual.CreatePropertyMap(map);
162 Property::Value* value = map.Find( mixColorIndex );
163 DALI_TEST_CHECK( value );
165 DALI_TEST_CHECK( value->Get( mixColor1 ) );
166 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
168 value = map.Find( Visual::Property::MIX_COLOR );
169 DALI_TEST_CHECK( value );
171 DALI_TEST_CHECK( value->Get( mixColor2 ) );
172 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
174 value = map.Find( Visual::Property::OPACITY );
175 DALI_TEST_CHECK( value );
177 DALI_TEST_CHECK( value->Get( opacity ) );
178 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
182 int UtcDaliVisualCopyAndAssignment(void)
184 ToolkitTestApplication application;
185 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
187 VisualFactory factory = VisualFactory::Get();
188 Property::Map propertyMap;
189 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
190 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
191 Visual::Base visual = factory.CreateVisual( propertyMap );
193 Visual::Base visualCopy( visual );
194 DALI_TEST_CHECK(visual == visualCopy);
196 Visual::Base emptyVisual;
197 Visual::Base emptyVisualCopy( emptyVisual );
198 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
200 Visual::Base visualEquals;
201 visualEquals = visual;
202 DALI_TEST_CHECK(visual == visualEquals);
204 Visual::Base emptyVisualEquals;
205 emptyVisualEquals = emptyVisual;
206 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
210 DALI_TEST_CHECK( visual = visualCopy );
215 int UtcDaliVisualSetName01(void)
217 ToolkitTestApplication application;
218 tet_infoline( "UtcDaliVisualSetName" );
220 VisualFactory factory = VisualFactory::Get();
221 Property::Map propertyMap;
222 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
223 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
224 Visual::Base visual = factory.CreateVisual( propertyMap );
226 const char* visualName = "backgroundVisual";
227 visual.SetName( visualName );
229 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
234 int UtcDaliVisualSetGetDepthIndex(void)
236 ToolkitTestApplication application;
237 tet_infoline( "UtcDaliVisualSetDepthIndex" );
239 VisualFactory factory = VisualFactory::Get();
240 Property::Map propertyMap;
241 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
242 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
243 Visual::Base visual = factory.CreateVisual( propertyMap );
245 visual.SetDepthIndex( 1 );
247 DummyControl dummyControl = DummyControl::New(true);
248 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
249 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
251 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
252 application.GetScene().Add( dummyControl );
255 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
256 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
257 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
259 visual.SetDepthIndex( -1 );
260 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
261 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
262 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
267 int UtcDaliVisualSize(void)
269 ToolkitTestApplication application;
270 tet_infoline( "UtcDaliVisualSize" );
272 VisualFactory factory = VisualFactory::Get();
273 Vector2 controlSize( 20.f, 30.f );
277 Dali::Property::Map map;
278 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
279 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
281 Visual::Base colorVisual = factory.CreateVisual( map );
282 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
284 colorVisual.GetNaturalSize(naturalSize);
285 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
289 map[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
290 map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
291 map[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
292 map[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 200.0f;
293 Visual::Base imageVisual = factory.CreateVisual( map );
294 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
296 imageVisual.GetNaturalSize(naturalSize);
297 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
299 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
302 float borderSize = 5.f;
304 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
305 map[ BorderVisual::Property::COLOR ] = Color::RED;
306 map[ BorderVisual::Property::SIZE ] = borderSize;
307 Visual::Base borderVisual = factory.CreateVisual( map );
308 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
309 borderVisual.GetNaturalSize(naturalSize);
310 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
312 // gradient gradientVisual
313 Property::Map propertyMap;
314 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
315 Vector2 start(-1.f, -1.f);
316 Vector2 end(1.f, 1.f);
317 propertyMap.Insert( "mixColor", Color::MAGENTA );
318 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
319 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
320 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
321 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
322 Property::Array stopColors;
323 stopColors.PushBack( Color::RED );
324 stopColors.PushBack( Color::GREEN );
325 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
326 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
327 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
328 gradientVisual.GetNaturalSize(naturalSize);
329 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
331 // animated gradient visual
332 Vector2 animated_gradient_visual_size(10.f, 10.f);
334 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
335 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
336 animatedGradientVisual.GetNaturalSize(naturalSize);
337 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
338 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
341 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
342 svgVisual.GetNaturalSize(naturalSize);
344 // <svg width="100" height="100">
345 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
347 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
349 // svg visual with a size
350 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
351 svgVisual2.GetNaturalSize(naturalSize);
352 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
356 // Load some fonts to get the same metrics on different platforms.
357 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
358 fontClient.SetDpi( 96u, 96u );
360 char* pathNamePtr = get_current_dir_name();
361 const std::string pathName( pathNamePtr );
364 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
366 // Create a TextVisual with a font size of 12 first
368 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
369 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
370 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
371 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
373 Visual::Base smallTextVisual = factory.CreateVisual( propertyMap );
374 Vector2 smallTextVisualNaturalSize;
375 smallTextVisual.GetNaturalSize( smallTextVisualNaturalSize );
377 // Then create a TextVisual with a font size of 20
378 propertyMap[ TextVisual::Property::TEXT ] = "<font family='TizenSans' size='20'>Hello world</font>";
379 Visual::Base largeTextVisual = factory.CreateVisual( propertyMap );
380 Vector2 largeTextVisualNaturalSize;
381 largeTextVisual.GetNaturalSize( largeTextVisualNaturalSize );
383 // Compare the sizes of the two text visuals, the second one should be bigger as it has a larger point size in the markup.
384 DALI_TEST_CHECK( smallTextVisualNaturalSize.width < largeTextVisualNaturalSize.width &&
385 smallTextVisualNaturalSize.height < largeTextVisualNaturalSize.height );
387 // The height returned for a particular width should also be greater for the large text visual
388 DALI_TEST_CHECK( smallTextVisual.GetHeightForWidth( 40.f ) < largeTextVisual.GetHeightForWidth( 40.f ) );
390 //AnimatedImageVisual
391 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
392 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
393 animatedImageVisual.GetNaturalSize(naturalSize);
394 // TEST_GIF_FILE: anim.gif
395 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
396 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
401 int UtcDaliVisualSetOnOffScene(void)
403 ToolkitTestApplication application;
404 tet_infoline( "UtcDaliVisualSetOnOffScene" );
406 VisualFactory factory = VisualFactory::Get();
407 Property::Map propertyMap;
408 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
409 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
410 Visual::Base visual = factory.CreateVisual( propertyMap );
412 DummyControl actor = DummyControl::New(true);
413 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
414 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
416 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
418 application.SendNotification();
419 application.Render(0);
420 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
422 application.GetScene().Add( actor );
424 application.SendNotification();
425 application.Render(0);
426 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
428 application.GetScene().Remove( actor );
430 application.SendNotification();
431 application.Render(0);
432 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
437 int UtcDaliVisualSetOnOffScene2(void)
439 ToolkitTestApplication application;
440 tet_infoline( "UtcDaliVisualSetOnOffScene2" );
442 VisualFactory factory = VisualFactory::Get();
443 Property::Map propertyMap;
444 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
445 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
446 Visual::Base visual = factory.CreateVisual( propertyMap );
448 DummyControl actor = DummyControl::New(true);
449 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
450 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
452 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
454 application.SendNotification();
455 application.Render(0);
456 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
459 application.GetScene().Add( actor );
461 application.SendNotification();
462 application.Render(0);
463 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
464 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
465 Renderer renderer = actor.GetRendererAt( 0 );
466 auto textures = renderer.GetTextures();
467 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
469 application.GetScene().Remove( actor );
471 application.SendNotification();
472 application.Render(0);
473 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
476 application.GetScene().Add( actor );
478 application.SendNotification();
479 application.Render(0);
480 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
481 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
482 renderer = actor.GetRendererAt( 0 );
483 textures = renderer.GetTextures();
484 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
486 application.GetScene().Remove( actor );
488 application.SendNotification();
489 application.Render(0);
490 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
495 int UtcDaliVisualGetPropertyMap1(void)
497 ToolkitTestApplication application;
498 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
500 VisualFactory factory = VisualFactory::Get();
501 Property::Map propertyMap;
502 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
503 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
504 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS, 10.0f );
505 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE );
506 propertyMap.Insert( DevelVisual::Property::BORDERLINE_WIDTH, 20.0f );
507 propertyMap.Insert( DevelVisual::Property::BORDERLINE_COLOR, Color::RED );
508 propertyMap.Insert( DevelVisual::Property::BORDERLINE_OFFSET, -1.0f );
509 propertyMap.Insert( DevelColorVisual::Property::BLUR_RADIUS, 20.0f );
510 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
512 Property::Map resultMap;
513 colorVisual.CreatePropertyMap( resultMap );
515 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
516 DALI_TEST_CHECK( typeValue );
517 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
519 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
520 DALI_TEST_CHECK( colorValue );
521 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
523 Property::Value* cornerRadiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
524 DALI_TEST_CHECK( cornerRadiusValue );
525 DALI_TEST_CHECK( cornerRadiusValue->Get< Vector4 >() == Vector4(10.0f, 10.0f, 10.0f, 10.0f) );
527 Property::Value* cornerRadiusPolicyValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER );
528 DALI_TEST_CHECK( cornerRadiusPolicyValue );
529 DALI_TEST_CHECK( cornerRadiusPolicyValue->Get< int >() == Toolkit::Visual::Transform::Policy::RELATIVE );
531 Property::Value* borderlineWidthValue = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
532 DALI_TEST_CHECK( borderlineWidthValue );
533 DALI_TEST_CHECK( borderlineWidthValue->Get< float >() == 20.0f );
535 Property::Value* borderlineColorValue = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
536 DALI_TEST_CHECK( borderlineColorValue );
537 DALI_TEST_CHECK( borderlineColorValue->Get< Vector4 >() == Color::RED );
539 Property::Value* borderlineOffsetValue = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
540 DALI_TEST_CHECK( borderlineOffsetValue );
541 DALI_TEST_CHECK( borderlineOffsetValue->Get< float >() == -1.0f );
543 Property::Value* blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
544 DALI_TEST_CHECK( blurRadiusValue );
545 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 20.0f );
547 // change the blend color
548 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
549 colorVisual = factory.CreateVisual( propertyMap );
550 colorVisual.CreatePropertyMap( resultMap );
552 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
553 DALI_TEST_CHECK( colorValue );
554 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
557 propertyMap[DevelColorVisual::Property::BLUR_RADIUS] = "3.0f";
559 colorVisual = factory.CreateVisual( propertyMap );
560 colorVisual.CreatePropertyMap( resultMap );
562 blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
563 DALI_TEST_CHECK( blurRadiusValue );
564 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 0.0f );
569 int UtcDaliVisualGetPropertyMap2(void)
571 ToolkitTestApplication application;
572 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
574 VisualFactory factory = VisualFactory::Get();
575 Property::Map propertyMap;
576 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
577 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
578 propertyMap.Insert("borderColor", Color::BLUE);
579 propertyMap.Insert("borderSize", 5.f);
580 propertyMap.Insert("antiAliasing", true);
581 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
583 Property::Map resultMap;
584 borderVisual.CreatePropertyMap( resultMap );
586 // check the property values from the returned map from visual
587 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
588 DALI_TEST_CHECK( typeValue );
589 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
591 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
592 DALI_TEST_CHECK( colorValue );
593 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
595 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
596 DALI_TEST_CHECK( sizeValue );
597 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
599 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
600 DALI_TEST_CHECK( AAValue );
601 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
603 Property::Map propertyMap1;
604 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
605 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
606 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
607 borderVisual = factory.CreateVisual( propertyMap1 );
608 borderVisual.CreatePropertyMap( resultMap );
610 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
611 DALI_TEST_CHECK( typeValue );
612 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
614 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
615 DALI_TEST_CHECK( colorValue );
616 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
618 sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
619 DALI_TEST_CHECK( sizeValue );
620 DALI_TEST_CHECK( sizeValue->Get<float>() == 10.f );
622 // Get default value of borderline values here
624 sizeValue = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
625 DALI_TEST_CHECK( sizeValue );
626 DALI_TEST_CHECK( sizeValue->Get<float>() == 0.0f );
628 colorValue = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
629 DALI_TEST_CHECK( colorValue );
630 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLACK );
632 sizeValue = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
633 DALI_TEST_CHECK( sizeValue );
634 DALI_TEST_CHECK( sizeValue->Get<float>() == 0.0f );
639 int UtcDaliVisualGetPropertyMap2N(void)
641 ToolkitTestApplication application;
642 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
644 VisualFactory factory = VisualFactory::Get();
645 Property::Map propertyMap;
646 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
647 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
649 tet_infoline( "Test that the visual is created, with a default renderer" );
650 DALI_TEST_CHECK( borderVisual );
652 DummyControl dummyControl = DummyControl::New(true);
653 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
654 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
655 application.GetScene().Add( dummyControl );
657 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
663 int UtcDaliVisualGetPropertyMap3(void)
665 ToolkitTestApplication application;
666 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
668 VisualFactory factory = VisualFactory::Get();
669 DALI_TEST_CHECK( factory );
671 Property::Map propertyMap;
672 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
674 Vector2 start(-1.f, -1.f);
675 Vector2 end(1.f, 1.f);
676 propertyMap.Insert( "startPosition", start);
677 propertyMap.Insert( "endPosition", end);
678 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
680 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
682 Property::Array stopColors;
683 stopColors.PushBack( Color::RED );
684 stopColors.PushBack( Color::GREEN );
685 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
687 float borderlineWidth = 4.0f;
688 Vector4 cornerRadius(7.0f, 10.0f, 13.0f, 16.0f);
689 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth);
690 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, cornerRadius);
692 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
694 Property::Map resultMap;
695 gradientVisual.CreatePropertyMap( resultMap );
697 // check the property values from the returned map from visual
698 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
699 DALI_TEST_CHECK( value );
700 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
702 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
703 DALI_TEST_CHECK( value );
704 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
706 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
707 DALI_TEST_CHECK( value );
708 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
710 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
711 DALI_TEST_CHECK( value );
712 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
714 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
715 DALI_TEST_CHECK( value );
716 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
718 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
719 DALI_TEST_CHECK( value );
720 DALI_TEST_EQUALS( value->Get<float>(), borderlineWidth , Math::MACHINE_EPSILON_100, TEST_LOCATION );
722 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
723 DALI_TEST_CHECK( value );
724 DALI_TEST_EQUALS( value->Get<Vector4>(), cornerRadius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
726 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
727 DALI_TEST_CHECK( value );
728 Property::Array* offsetArray = value->GetArray();
729 DALI_TEST_CHECK( offsetArray->Count() == 2 );
730 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
731 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
733 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
734 DALI_TEST_CHECK( value );
735 Property::Array* colorArray = value->GetArray();
736 DALI_TEST_CHECK( colorArray->Count() == 2 );
737 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
738 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
743 int UtcDaliVisualGetPropertyMap4(void)
745 ToolkitTestApplication application;
746 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
748 VisualFactory factory = VisualFactory::Get();
749 DALI_TEST_CHECK( factory );
751 Property::Map propertyMap;
752 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
754 Vector2 center(100.f, 100.f);
755 float radius = 100.f;
756 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
757 propertyMap.Insert(GradientVisual::Property::CENTER, center);
758 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
759 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
761 Property::Array stopColors;
762 stopColors.PushBack( Color::RED );
763 stopColors.PushBack( Color::BLACK );
764 stopColors.PushBack( Color::GREEN );
765 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
767 float borderlineWidth = 8.0f;
768 Vector4 cornerRadius(1.0f, 2.0f, 4.0f, 8.0f);
769 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth);
770 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, cornerRadius);
772 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
773 DALI_TEST_CHECK( gradientVisual );
775 Property::Map resultMap;
776 gradientVisual.CreatePropertyMap( resultMap );
778 // check the property values from the returned map from visual
779 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
780 DALI_TEST_CHECK( value );
781 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
783 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
784 DALI_TEST_CHECK( value );
785 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
787 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
788 DALI_TEST_CHECK( value );
789 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
791 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
792 DALI_TEST_CHECK( value );
793 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
795 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
796 DALI_TEST_CHECK( value );
797 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
799 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
800 DALI_TEST_CHECK( value );
801 DALI_TEST_EQUALS( value->Get<float>(), borderlineWidth , Math::MACHINE_EPSILON_100, TEST_LOCATION );
803 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
804 DALI_TEST_CHECK( value );
805 DALI_TEST_EQUALS( value->Get<Vector4>(), cornerRadius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
807 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
808 DALI_TEST_CHECK( value );
809 Property::Array* offsetArray = value->GetArray();
810 DALI_TEST_CHECK( offsetArray->Count() == 3 );
811 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
812 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
813 // any stop value will be clamped to [0.0, 1.0];
814 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
816 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
817 DALI_TEST_CHECK( value );
818 Property::Array* colorArray = value->GetArray();
819 DALI_TEST_CHECK( colorArray->Count() == 3 );
820 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
821 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
822 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
827 int UtcDaliVisualGetPropertyMap5(void)
829 ToolkitTestApplication application;
830 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
832 VisualFactory factory = VisualFactory::Get();
833 Property::Map propertyMap;
834 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
835 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
836 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
837 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
838 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
839 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
840 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
841 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
842 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
843 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
844 propertyMap.Insert( "synchronousLoading", true );
846 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
847 DALI_TEST_CHECK( imageVisual );
849 Property::Map resultMap;
850 imageVisual.CreatePropertyMap( resultMap );
852 // check the property values from the returned map from visual
853 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
854 DALI_TEST_CHECK( value );
855 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
857 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
858 DALI_TEST_CHECK( value );
859 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
861 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
862 DALI_TEST_CHECK( value );
863 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
865 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
866 DALI_TEST_CHECK( value );
867 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
869 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
870 DALI_TEST_CHECK( value );
871 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
873 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
874 DALI_TEST_CHECK( value );
875 DALI_TEST_CHECK( value->Get<int>() == 20 );
877 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
878 DALI_TEST_CHECK( value );
879 DALI_TEST_CHECK( value->Get<int>() == 30 );
881 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
882 DALI_TEST_CHECK( value );
883 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
885 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
886 DALI_TEST_CHECK( value );
887 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
889 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
890 DALI_TEST_CHECK( value );
891 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
893 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
894 DALI_TEST_CHECK( value );
895 DALI_TEST_CHECK( value->Get<bool>() == true );
900 int UtcDaliVisualGetPropertyMap6(void)
902 ToolkitTestApplication application;
903 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
905 Rect< int > border( 1, 1, 1, 1 );
907 VisualFactory factory = VisualFactory::Get();
908 Property::Map propertyMap;
909 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
910 propertyMap.Insert( "mixColor", Color::MAGENTA );
911 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
912 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
913 propertyMap.Insert( ImageVisual::Property::BORDER, border );
914 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
915 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
916 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
918 Property::Map resultMap;
919 nPatchVisual.CreatePropertyMap( resultMap );
921 // check the property values from the returned map from visual
922 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
923 DALI_TEST_CHECK( value );
924 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
926 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
927 DALI_TEST_CHECK( value );
928 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
930 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
931 DALI_TEST_CHECK( value );
932 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
934 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
935 DALI_TEST_CHECK( value );
936 DALI_TEST_CHECK( value->Get<bool>() );
938 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
939 DALI_TEST_CHECK( value );
940 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
942 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
943 DALI_TEST_CHECK( value );
944 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
946 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
947 DALI_TEST_CHECK( value );
948 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
950 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
952 Property::Map propertyMap1;
953 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
954 propertyMap1.Insert( "mixColor", Color::MAGENTA );
955 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
956 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
957 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
958 nPatchVisual = factory.CreateVisual( propertyMap1 );
960 nPatchVisual.CreatePropertyMap( resultMap );
962 // check the property values from the returned map from visual
963 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
964 DALI_TEST_CHECK( value );
965 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
967 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
968 DALI_TEST_CHECK( value );
969 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
971 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
972 DALI_TEST_CHECK( value );
973 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
975 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
976 DALI_TEST_CHECK( value );
977 DALI_TEST_CHECK( value->Get<bool>() );
979 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
980 DALI_TEST_CHECK( value );
981 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
986 int UtcDaliVisualGetPropertyMap7(void)
988 ToolkitTestApplication application;
989 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
991 // request SvgVisual with a property map
992 VisualFactory factory = VisualFactory::Get();
993 Property::Map propertyMap;
994 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
995 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
996 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
997 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
998 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
1000 Property::Map resultMap;
1001 svgVisual.CreatePropertyMap( resultMap );
1002 // check the property values from the returned map from a visual
1003 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1004 DALI_TEST_CHECK( value );
1005 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1007 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1008 DALI_TEST_CHECK( value );
1009 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1011 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1012 DALI_TEST_CHECK( value );
1013 DALI_TEST_CHECK( value->Get<bool>() == false );
1015 // request SvgVisual with a property map 2
1016 propertyMap.Clear();
1017 propertyMap[ "visualType" ] = Visual::SVG;
1018 propertyMap[ "mixColor" ] = Color::WHITE;
1019 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
1020 propertyMap[ "atlasing" ] = true;
1021 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
1024 svgVisual1.CreatePropertyMap( resultMap );
1025 // check the property values from the returned map from a visual
1026 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1027 DALI_TEST_CHECK( value );
1028 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1030 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1031 DALI_TEST_CHECK( value );
1032 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1034 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1035 DALI_TEST_CHECK( value );
1036 DALI_TEST_CHECK( value->Get<bool>() == true );
1038 // request SvgVisual with an URL
1039 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1041 svgVisual2.CreatePropertyMap( resultMap );
1042 // check the property values from the returned map from a visual
1043 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1044 DALI_TEST_CHECK( value );
1045 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1047 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1048 DALI_TEST_CHECK( value );
1049 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1055 int UtcDaliVisualGetPropertyMap8(void)
1057 ToolkitTestApplication application;
1058 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
1060 //Request MeshVisual using a property map.
1061 VisualFactory factory = VisualFactory::Get();
1062 Property::Map propertyMap;
1063 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1064 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
1065 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1066 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1067 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1068 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1069 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1070 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
1072 Property::Map resultMap;
1073 meshVisual.CreatePropertyMap( resultMap );
1074 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
1076 //Check values in the result map are identical to the initial map's values.
1077 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1078 DALI_TEST_CHECK( value );
1079 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
1081 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
1082 DALI_TEST_CHECK( value );
1083 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
1085 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
1086 DALI_TEST_CHECK( value );
1087 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
1089 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
1090 DALI_TEST_CHECK( value );
1091 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
1093 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
1094 DALI_TEST_CHECK( value );
1095 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1097 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1098 DALI_TEST_CHECK( value );
1099 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1104 //Primitive shape visual
1105 int UtcDaliVisualGetPropertyMap9(void)
1107 ToolkitTestApplication application;
1108 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1110 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1111 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1113 //Request PrimitiveVisual using a property map.
1114 VisualFactory factory = VisualFactory::Get();
1115 Property::Map propertyMap;
1116 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1117 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1118 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1119 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1120 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1121 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1122 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1123 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1124 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1125 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1126 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1127 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1128 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1129 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1131 Property::Map resultMap;
1132 primitiveVisual.CreatePropertyMap( resultMap );
1134 //Check values in the result map are identical to the initial map's values.
1135 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1136 DALI_TEST_CHECK( value );
1137 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1139 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1140 DALI_TEST_CHECK( value );
1141 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1143 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1144 DALI_TEST_CHECK( value );
1145 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1146 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1148 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1149 DALI_TEST_CHECK( value );
1150 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1152 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1153 DALI_TEST_CHECK( value );
1154 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1156 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1157 DALI_TEST_CHECK( value );
1158 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1160 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1161 DALI_TEST_CHECK( value );
1162 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1164 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1165 DALI_TEST_CHECK( value );
1166 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1168 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1169 DALI_TEST_CHECK( value );
1170 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1172 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1173 DALI_TEST_CHECK( value );
1174 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1176 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1177 DALI_TEST_CHECK( value );
1178 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1180 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1181 DALI_TEST_CHECK( value );
1182 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1184 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1185 DALI_TEST_CHECK( value );
1186 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1192 int UtcDaliVisualGetPropertyMap10(void)
1194 ToolkitTestApplication application;
1195 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1197 //Request PrimitiveVisual using a property map.
1198 VisualFactory factory = VisualFactory::Get();
1200 Property::Map propertyMap;
1201 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1202 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1203 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
1204 propertyMap.Insert( "enableMarkup", false );
1205 propertyMap.Insert( "text", "Hello world" );
1206 propertyMap.Insert( "fontFamily", "TizenSans" );
1208 Property::Map fontStyleMapSet;
1209 fontStyleMapSet.Insert( "weight", "bold" );
1210 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1212 propertyMap.Insert( "pointSize", 12.f );
1213 propertyMap.Insert( "multiLine", true );
1214 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1215 propertyMap.Insert( "verticalAlignment", "CENTER" );
1216 propertyMap.Insert( "textColor", Color::RED );
1218 Property::Map shadowMapSet;
1219 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1221 Property::Map underlineMapSet;
1222 propertyMap.Insert( "underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1) );
1224 Property::Map outlineMapSet;
1225 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1227 Property::Map backgroundMapSet;
1228 propertyMap.Insert( "textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN) );
1230 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1232 Property::Map resultMap;
1233 textVisual.CreatePropertyMap( resultMap );
1235 //Check values in the result map are identical to the initial map's values.
1236 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1237 DALI_TEST_CHECK( value );
1238 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1240 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1241 DALI_TEST_CHECK( value );
1242 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1244 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1245 DALI_TEST_CHECK( value );
1246 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1248 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1249 DALI_TEST_CHECK( value );
1250 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1252 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1253 DALI_TEST_CHECK( value );
1255 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1256 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1257 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1259 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1260 DALI_TEST_CHECK( value );
1261 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1263 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1264 DALI_TEST_CHECK( value );
1265 DALI_TEST_CHECK( value->Get<bool>() );
1267 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1268 DALI_TEST_CHECK( value );
1269 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1271 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1272 DALI_TEST_CHECK( value );
1273 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1275 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1276 DALI_TEST_CHECK( value );
1277 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1279 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1280 DALI_TEST_CHECK( value );
1281 DALI_TEST_CHECK( !value->Get<bool>() );
1283 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1284 DALI_TEST_CHECK( value );
1286 Property::Map shadowMapGet = value->Get<Property::Map>();
1287 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1288 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1290 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1291 DALI_TEST_CHECK( value );
1293 Property::Map underlineMapGet = value->Get<Property::Map>();
1294 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1295 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1297 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1298 DALI_TEST_CHECK( value );
1300 Property::Map outlineMapGet = value->Get<Property::Map>();
1301 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1302 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1304 value = resultMap.Find( DevelTextVisual::Property::BACKGROUND, Property::MAP );
1305 DALI_TEST_CHECK( value );
1307 Property::Map backgroundMapGet = value->Get<Property::Map>();
1308 DALI_TEST_EQUALS( backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION );
1309 DALI_TEST_EQUALS( DaliTestCheckMaps( backgroundMapGet, backgroundMapSet ), true, TEST_LOCATION );
1314 int UtcDaliVisualGetPropertyMap11(void)
1316 ToolkitTestApplication application;
1317 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1319 VisualFactory factory = VisualFactory::Get();
1320 DALI_TEST_CHECK( factory );
1322 Property::Map propertyMap;
1323 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1325 Vector2 start(-0.5f, 0.5f);
1326 Vector2 end (0.5f, -0.0f);
1327 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1328 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1329 Vector2 rotate_center(0.0f, 0.4f);
1330 float rotate_amount = 1.57f;
1331 float offset = 100.f;
1333 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1334 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1335 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1337 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1338 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1339 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1340 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1341 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1342 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1343 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1345 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1346 DALI_TEST_CHECK( animatedGradientVisual );
1348 Property::Map resultMap;
1349 animatedGradientVisual.CreatePropertyMap( resultMap );
1351 // check the property values from the returned map from visual
1352 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1353 DALI_TEST_CHECK( value );
1354 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1356 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1357 DALI_TEST_CHECK( value );
1358 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1360 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1361 DALI_TEST_CHECK( value );
1362 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1364 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1365 DALI_TEST_CHECK( value );
1366 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1369 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1370 DALI_TEST_CHECK( value );
1371 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1373 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1374 DALI_TEST_CHECK( value );
1375 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1377 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1378 DALI_TEST_CHECK( value );
1379 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1381 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1382 DALI_TEST_CHECK( value );
1383 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1385 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1386 DALI_TEST_CHECK( value );
1387 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1389 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1390 DALI_TEST_CHECK( value );
1391 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1393 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1394 DALI_TEST_CHECK( value );
1395 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1400 int UtcDaliVisualGetPropertyMap12(void)
1402 ToolkitTestApplication application;
1403 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1405 // Case 1 : Set values by index
1407 tet_printf( " - Set Values by Index\n" );
1408 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1409 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1410 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1412 tet_printf( "test with delay [%f]\n", _delay );
1413 VisualFactory factory = VisualFactory::Get();
1414 DALI_TEST_CHECK( factory );
1416 Property::Map propertyMap;
1417 Property::Map animationMap;
1418 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1420 float duration = 1.1f;
1421 float delay = _delay;
1422 float repeat_delay = 0.4f;
1424 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1426 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1427 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1429 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1431 animationMap.Clear();
1432 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1433 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1434 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1435 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1436 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1437 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1438 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1439 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1440 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1442 return animationMap;
1445 Vector2 start1(-0.5f, 0.5f);
1446 Vector2 end1 (0.5f, -0.5f);
1447 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1448 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1449 Vector2 rotate_center1(0.0f, 0.4f);
1450 float rotate_amount1 = 0.0f;
1451 float offset1 = 0.f;
1453 Vector2 start2(-0.5f, -0.5f);
1454 Vector2 end2 (0.5f, 0.5f);
1455 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1456 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1457 Vector2 rotate_center2(0.0f, -0.4f);
1458 float rotate_amount2 = 6.2832f;
1459 float offset2 = 2.f;
1461 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1462 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1463 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1465 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1466 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1467 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1468 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1469 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1470 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1471 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1473 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1474 DALI_TEST_CHECK( animatedGradientVisual );
1476 Property::Map resultMap;
1477 animatedGradientVisual.CreatePropertyMap( resultMap );
1479 // check the property values from the returned map from visual
1480 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1481 DALI_TEST_CHECK( value );
1482 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1484 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1485 DALI_TEST_CHECK( value );
1486 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1488 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1489 DALI_TEST_CHECK( value );
1490 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1492 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1493 DALI_TEST_CHECK( value );
1494 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1496 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
1498 tet_printf("Check value at %d\n", line_num);
1499 value = resultMap.Find( index, Property::MAP );
1500 DALI_TEST_CHECK( value );
1501 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1502 Property::Map *temp_map = value->GetMap();
1503 DALI_TEST_CHECK( temp_map );
1505 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1507 Property::Value *res = temp_map->Find( index );
1508 DALI_TEST_CHECK( res );
1512 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1513 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1514 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1515 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1516 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1517 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1518 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1519 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1520 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1523 // check the animation map data is good
1524 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1525 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1526 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1527 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1528 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1529 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1530 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1534 // Case 2 : Set values by string
1536 tet_printf( " - Set Values by String\n" );
1537 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1538 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1539 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1541 tet_printf( "test with delay [%f]\n", _delay );
1542 VisualFactory factory = VisualFactory::Get();
1543 DALI_TEST_CHECK( factory );
1545 Property::Map propertyMap;
1546 Property::Map animationMap;
1547 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1549 float duration = 1.1f;
1550 float delay = _delay;
1551 float repeat_delay = 0.4f;
1553 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1555 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1556 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1558 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1560 animationMap.Clear();
1561 animationMap.Insert("startValue" , start);
1562 animationMap.Insert("targetValue" , target);
1563 animationMap.Insert("directionType", "BACKWARD");
1564 animationMap.Insert("duration" , duration);
1565 animationMap.Insert("delay" , delay);
1566 animationMap.Insert("repeat" , loop_count);
1567 animationMap.Insert("repeatDelay" , repeat_delay);
1568 animationMap.Insert("motionType" , "MIRROR");
1569 animationMap.Insert("easingType" , "IN_OUT");
1571 return animationMap;
1574 Vector2 start1(-0.5f, 0.5f);
1575 Vector2 end1 (0.5f, -0.5f);
1576 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1577 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1578 Vector2 rotate_center1(0.0f, 0.4f);
1579 float rotate_amount1 = 0.0f;
1580 float offset1 = 0.f;
1582 Vector2 start2(-0.5f, -0.5f);
1583 Vector2 end2 (0.5f, 0.5f);
1584 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1585 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1586 Vector2 rotate_center2(0.0f, -0.4f);
1587 float rotate_amount2 = 6.2832f;
1588 float offset2 = 2.f;
1590 // For test mix the type string/index key and string/index value works well.
1591 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1592 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1593 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1595 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1596 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1597 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1598 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1599 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1600 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1601 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1603 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1604 DALI_TEST_CHECK( animatedGradientVisual );
1606 Property::Map resultMap;
1607 animatedGradientVisual.CreatePropertyMap( resultMap );
1609 // check the property values from the returned map from visual
1610 // Note : resultMap from CreatePropertyMap only contain indexKey
1611 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1612 DALI_TEST_CHECK( value );
1613 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1615 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1616 DALI_TEST_CHECK( value );
1617 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1619 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1620 DALI_TEST_CHECK( value );
1621 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1623 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1624 DALI_TEST_CHECK( value );
1625 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1627 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
1629 tet_printf("Check value at %d\n", line_num);
1630 value = resultMap.Find( index, Property::MAP );
1631 DALI_TEST_CHECK( value );
1632 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1633 Property::Map *temp_map = value->GetMap();
1634 DALI_TEST_CHECK( temp_map );
1636 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1638 Property::Value *res = temp_map->Find( index );
1639 DALI_TEST_CHECK( res );
1643 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1644 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1645 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1646 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1647 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1648 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1649 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1650 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1651 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1654 // check the animation map data is good
1655 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1656 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1657 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1658 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1659 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1660 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1661 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1667 int UtcDaliVisualGetPropertyMap13(void)
1669 ToolkitTestApplication application;
1670 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1672 for(int _direction = 0; _direction <= 1; ++_direction)
1674 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1676 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1677 VisualFactory factory = VisualFactory::Get();
1678 DALI_TEST_CHECK( factory );
1680 Property::Map propertyMap;
1681 Property::Map animationMap;
1682 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1684 float duration = 1.0f;
1685 float delay = _delay;
1686 float repeat_delay = 0.5f;
1688 int direction = _direction;
1689 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1690 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1691 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1693 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1695 animationMap.Clear();
1696 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1697 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1698 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1699 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1700 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1701 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1702 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1703 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1704 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1705 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1706 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1708 return animationMap;
1711 Vector2 start1(-0.5f, 0.5f);
1712 Vector2 end1 (0.5f, -0.5f);
1713 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1714 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1715 Vector2 rotate_center1(1.0f, 0.4f);
1716 float rotate_amount1 = 2.0f;
1717 float offset1 = 1.f;
1719 Vector2 start2(-0.5f, -0.5f);
1720 Vector2 end2 (0.5f, 0.5f);
1721 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1722 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1723 Vector2 rotate_center2(1.0f, -0.4f);
1724 float rotate_amount2 = 1.0f;
1725 float offset2 = 3.f;
1727 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1728 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1729 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1731 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1732 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1733 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1734 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1735 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1736 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1737 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1739 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1740 DALI_TEST_CHECK( animatedGradientVisual );
1742 Property::Map resultMap;
1743 animatedGradientVisual.CreatePropertyMap( resultMap );
1745 // check the property values from the returned map from visual
1746 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1747 DALI_TEST_CHECK( value );
1748 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1750 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1751 DALI_TEST_CHECK( value );
1752 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1754 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1755 DALI_TEST_CHECK( value );
1756 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1758 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1759 DALI_TEST_CHECK( value );
1760 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1762 // If loop_count = 0, Animation doesn't created.
1763 // Optimized resultMap only have one value, which is target value
1764 // Note: target value will be changed by direction option.
1765 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1766 DALI_TEST_CHECK( value );
1767 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1769 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1770 DALI_TEST_CHECK( value );
1771 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1773 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1774 DALI_TEST_CHECK( value );
1775 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1777 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1778 DALI_TEST_CHECK( value );
1779 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1781 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1782 DALI_TEST_CHECK( value );
1783 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1785 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1786 DALI_TEST_CHECK( value );
1787 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1789 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1790 DALI_TEST_CHECK( value );
1791 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1798 int UtcDaliVisualAnimateBorderVisual01(void)
1800 ToolkitTestApplication application;
1801 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1803 static std::vector<UniformData> customUniforms =
1805 UniformData("borderColor", Property::Type::VECTOR4),
1806 UniformData("mixColor", Property::Type::VECTOR3),
1809 TestGraphicsController& graphics = application.GetGraphicsController();
1810 graphics.AddCustomUniforms(customUniforms);
1812 VisualFactory factory = VisualFactory::Get();
1813 Property::Map propertyMap;
1814 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1815 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1816 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1817 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1818 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1821 map["target"] = "testVisual";
1822 map["property"] = "mixColor";
1823 map["targetValue"] = Vector4(1,1,1,0.1);
1824 map["animator"] = Property::Map()
1825 .Add("alphaFunction", "LINEAR")
1826 .Add("timePeriod", Property::Map()
1828 .Add("duration", 4.0f));
1830 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1832 DummyControl actor = DummyControl::New(true);
1833 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1834 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1835 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1836 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1837 application.GetScene().Add(actor);
1839 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1841 Renderer renderer = actor.GetRendererAt(0);
1842 Property::Index borderColorIndex = renderer.GetPropertyIndex( BorderVisual::Property::COLOR );
1843 Property::Index mixColorIndex = renderer.GetPropertyIndex( Visual::Property::MIX_COLOR );
1845 Animation animation = dummyImpl.CreateTransition( transition );
1847 // Animate the mix color through the transition, and the border color through
1848 // programmatic method.
1849 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1852 application.SendNotification();
1853 application.Render(0);
1854 application.Render(2000u); // halfway point between blue and white
1856 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1857 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1858 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1859 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1861 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1862 testColor = Vector4( 1,1,1,0.45f );
1863 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1864 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1867 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1868 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1870 application.Render(2000u);
1872 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1873 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1874 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1876 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1877 testColor = Vector4(1,1,1,0.1);
1878 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), TEST_LOCATION );
1879 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1881 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1882 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1888 int UtcDaliVisualAnimateBorderVisual02(void)
1890 ToolkitTestApplication application;
1891 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1893 static std::vector<UniformData> customUniforms =
1895 UniformData("borderSize", Property::Type::FLOAT),
1898 TestGraphicsController& graphics = application.GetGraphicsController();
1899 graphics.AddCustomUniforms(customUniforms);
1901 VisualFactory factory = VisualFactory::Get();
1902 Property::Map propertyMap;
1903 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1904 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1905 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1906 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1908 DummyControl actor = DummyControl::New(true);
1909 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1910 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1911 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1912 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1913 application.GetScene().Add(actor);
1915 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1917 Renderer renderer = actor.GetRendererAt(0);
1918 Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE );
1920 Animation animation = Animation::New(4.0f);
1921 animation.AnimateTo( Property(renderer, index), 9.0f );
1924 application.SendNotification();
1925 application.Render(0);
1926 application.Render(2000u); // halfway point
1928 float size = renderer.GetCurrentProperty< float >( index );
1929 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1930 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1932 application.Render(2000u); // halfway point between blue and white
1934 size = renderer.GetCurrentProperty< float >( index );
1935 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1936 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1941 int UtcDaliVisualAnimateColorVisual(void)
1943 ToolkitTestApplication application;
1944 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1946 static std::vector<UniformData> customUniforms =
1948 UniformData("mixColor", Property::Type::VECTOR3),
1951 TestGraphicsController& graphics = application.GetGraphicsController();
1952 graphics.AddCustomUniforms(customUniforms);
1954 VisualFactory factory = VisualFactory::Get();
1955 Property::Map propertyMap;
1956 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1957 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1958 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1960 DummyControl actor = DummyControl::New(true);
1961 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1962 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1963 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1964 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1965 application.GetScene().Add(actor);
1967 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1969 Renderer renderer = actor.GetRendererAt(0);
1970 Property::Index mixColorIndex = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
1972 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1973 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1975 Animation animation = Animation::New(4.0f);
1976 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1979 application.SendNotification();
1980 application.Render(0);
1981 application.Render(2000u); // halfway point
1983 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1984 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1985 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1987 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1989 application.Render(2000u); // halfway point between blue and white
1991 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1992 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1994 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1996 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1997 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2002 int UtcDaliVisualAnimatePrimitiveVisual(void)
2004 ToolkitTestApplication application;
2005 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
2007 static std::vector<UniformData> customUniforms =
2009 UniformData("mixColor", Property::Type::VECTOR3),
2012 TestGraphicsController& graphics = application.GetGraphicsController();
2013 graphics.AddCustomUniforms(customUniforms);
2016 VisualFactory factory = VisualFactory::Get();
2017 Property::Map propertyMap;
2018 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
2019 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
2020 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
2021 Visual::Base visual = factory.CreateVisual( propertyMap );
2023 DummyControl actor = DummyControl::New(true);
2024 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2025 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2026 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2027 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2028 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2029 application.GetScene().Add(actor);
2031 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2033 Renderer renderer = actor.GetRendererAt(0);
2034 Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::MIX_COLOR );
2036 tet_infoline("Test that the renderer has the Primitive mix color");
2037 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2039 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
2040 const Vector4 TARGET_MIX_COLOR( Color::RED );
2043 map["target"] = "testVisual";
2044 map["property"] = "mixColor";
2045 map["initialValue"] = INITIAL_MIX_COLOR;
2046 map["targetValue"] = TARGET_MIX_COLOR;
2047 map["animator"] = Property::Map()
2048 .Add("alphaFunction", "LINEAR")
2049 .Add("timePeriod", Property::Map()
2051 .Add("duration", 4.0f));
2053 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
2055 Animation animation = dummyImpl.CreateTransition( transition );
2056 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
2059 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
2060 glAbstraction.EnableEnableDisableCallTrace( true );
2061 TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace();
2062 std::ostringstream blendStr;
2063 blendStr << std::hex << GL_BLEND;
2065 application.SendNotification();
2066 application.Render(0);
2067 application.Render(2000u); // halfway point
2068 application.SendNotification();
2070 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
2071 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a )), true, TEST_LOCATION );
2072 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
2074 DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Enable", blendStr.str() ) );
2076 glEnableStack.Reset();
2078 application.Render(2001u); // go past end
2079 application.SendNotification(); // Trigger signals
2081 DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), Color::WHITE, TEST_LOCATION );
2082 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4( 1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a ) ), true, TEST_LOCATION );
2083 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
2085 DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Disable", blendStr.str() ) );
2093 int UtcDaliVisualAnimatedGradientVisual01(void)
2095 ToolkitTestApplication application;
2096 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
2098 static std::vector<UniformData> customUniforms =
2100 UniformData("start_point", Property::Type::VECTOR2),
2101 UniformData("end_point", Property::Type::VECTOR2),
2102 UniformData("start_color", Property::Type::VECTOR4),
2103 UniformData("end_color", Property::Type::VECTOR4),
2104 UniformData("rotate_center", Property::Type::VECTOR2),
2105 UniformData("rotate_angle", Property::Type::FLOAT),
2106 UniformData("gradient_offset", Property::Type::FLOAT),
2109 TestGraphicsController& graphics = application.GetGraphicsController();
2110 graphics.AddCustomUniforms(customUniforms);
2113 VisualFactory factory = VisualFactory::Get();
2114 Property::Map propertyMap;
2115 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2116 Visual::Base visual = factory.CreateVisual( propertyMap );
2118 DummyControl actor = DummyControl::New(true);
2119 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2120 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2121 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2122 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2123 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2124 application.GetScene().Add(actor);
2126 application.SendNotification();
2127 application.Render(0);
2128 application.SendNotification();
2130 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2132 for(int step_iter = 0; step_iter < 3; step_iter++)
2134 application.SendNotification();
2135 application.Render(0);
2136 application.Render(750u); // step i/4
2137 application.SendNotification();
2139 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
2140 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
2141 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2142 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2143 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
2144 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
2145 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
2148 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2149 application.Render(750u); // go to end
2150 application.SendNotification();
2152 application.Render(10u); // finish
2153 application.SendNotification();
2156 application.SendNotification();
2157 application.Render(0u);
2158 application.SendNotification();
2164 int UtcDaliVisualAnimatedGradientVisual02(void)
2166 ToolkitTestApplication application;
2167 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2169 static std::vector<UniformData> customUniforms =
2171 UniformData("start_point", Property::Type::VECTOR2),
2172 UniformData("end_point", Property::Type::VECTOR2),
2173 UniformData("start_color", Property::Type::VECTOR4),
2174 UniformData("end_color", Property::Type::VECTOR4),
2175 UniformData("rotate_center", Property::Type::VECTOR2),
2176 UniformData("rotate_angle", Property::Type::FLOAT),
2177 UniformData("gradient_offset", Property::Type::FLOAT),
2180 TestGraphicsController& graphics = application.GetGraphicsController();
2181 graphics.AddCustomUniforms(customUniforms);
2184 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
2185 int _direction[2] = {0, 1};
2186 int _loop_count[3] = {-1, 0, 1};
2187 int _motion[2] = {0, 1};
2188 int _easing[4] = {0, 1, 2, 3};
2190 int test_case_max = 4 * 2 * 3 * 2 * 4;
2192 int test_case_d = 7; // 7 is the number of animated properties.
2194 float _duration = 0.4f;
2195 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2196 float noise_maker = 0.0f;
2197 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2198 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2200 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2202 VisualFactory factory = VisualFactory::Get();
2203 Property::Map propertyMap;
2204 Property::Map animationMap;
2205 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2207 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2208 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2209 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2211 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&
2213 int tc = (test_case + tc_offset);
2214 int idx_easing = tc % 4; tc /= 4;
2215 int idx_motion = tc % 2; tc /= 2;
2216 int idx_loop_count = tc % 3; tc /= 3;
2217 int idx_direction = tc % 2; tc /= 2;
2218 int idx_delay = tc % 4; tc /= 4;
2220 float duration = _duration - _repeat_delay;
2221 float repeat_delay = _repeat_delay;
2222 float delay = _delay[idx_delay] * _duration;
2223 int direction = _direction[idx_direction];
2224 int loop_count = _loop_count[idx_loop_count];
2225 int motion = _motion[idx_motion];
2226 int easing = _easing[idx_easing];
2228 animationMap.Clear();
2229 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2230 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2231 if( direction == 0 )
2233 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2237 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2239 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2240 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2241 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2242 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2245 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2249 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2253 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2255 else if( easing == 1 )
2257 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2259 else if( easing == 2 )
2261 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2265 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2268 return animationMap;
2271 // Give different values for debuging
2272 noise_maker += 1.0f;
2273 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2274 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2275 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2276 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2277 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2278 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2279 float offset1 = 0.f + noise_maker * 0.1f;
2281 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2282 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2283 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2284 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2285 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2286 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2287 float offset2 = 2.f + noise_maker * 0.1f;
2289 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2290 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2291 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2293 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2294 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2295 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2296 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2297 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2298 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2299 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2301 Visual::Base visual = factory.CreateVisual( propertyMap );
2303 DummyControl actor = DummyControl::New( true );
2304 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2305 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2306 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2307 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2308 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2309 application.GetScene().Add(actor);
2311 application.SendNotification();
2312 application.Render( 0 );
2313 application.SendNotification();
2315 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2317 application.SendNotification();
2319 //Compare between CPU calculated value and Shader Visual calculated value
2320 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
2322 int tc = (test_case + tc_offset);
2323 int idx_easing = tc % 4; tc /= 4;
2324 int idx_motion = tc % 2; tc /= 2;
2325 int idx_loop_count = tc % 3; tc /= 3;
2326 int idx_direction = tc % 2; tc /= 2;
2327 int idx_delay = tc % 4; tc /= 4;
2329 float duration = _duration - _repeat_delay;
2330 float repeat_delay = _repeat_delay;
2331 float delay = _delay[idx_delay] * _duration;
2332 int direction = _direction[idx_direction];
2333 int loop_count = _loop_count[idx_loop_count];
2334 int motion = _motion[idx_motion];
2335 int easing = _easing[idx_easing];
2337 progress -= delay / _duration;
2339 Property::Value s = start;
2340 Property::Value t = target;
2341 if( direction == 1 )
2346 float x; ///< Animator progress value
2347 if( loop_count == 0 )
2351 else if( loop_count > 0 && progress + 0.01f > loop_count )
2353 x = ( motion == 0 ) ? 1.0f : 0.0f;
2357 if( progress < 0.0f )
2361 progress = fmodf( progress, 1.0f );
2362 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2367 x = progress * 2.0f;
2374 if( easing == 1 ) // EASE_IN
2378 else if( easing == 2 ) // EASE_OUT
2382 else if( easing == 3 ) // EASE_IN_OUT
2384 x = x * x * (3.0f - 2.0f * x);
2387 if( value_type == 0 ) // result type is Float
2391 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2392 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2393 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2395 else if( value_type == 1 ) // result type is Vector2
2399 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2400 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2401 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2403 else if( value_type == 2 ) // result type is Vector3
2407 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2408 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2409 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2411 else // result type is Vector4
2415 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2416 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2417 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2422 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2424 for( int step_iter = 0; step_iter < 3; step_iter++ )
2426 application.SendNotification();
2427 application.Render( _duration * 250.f ); // step i/4
2428 application.SendNotification();
2431 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2432 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2433 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2434 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2435 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2436 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2437 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2439 application.SendNotification();
2440 application.Render(_duration * 250.f); // step 4/4 will not test
2441 application.SendNotification();
2445 application.SendNotification();
2447 application.SendNotification();
2448 application.Render(10.f); // tempral time
2449 application.SendNotification();
2456 int UtcDaliVisualAnimatedGradientVisual03(void)
2458 ToolkitTestApplication application;
2459 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2461 static std::vector<UniformData> customUniforms =
2463 UniformData("start_point", Property::Type::VECTOR2),
2464 UniformData("end_point", Property::Type::VECTOR2),
2465 UniformData("start_color", Property::Type::VECTOR4),
2466 UniformData("end_color", Property::Type::VECTOR4),
2467 UniformData("rotate_center", Property::Type::VECTOR2),
2468 UniformData("rotate_angle", Property::Type::FLOAT),
2469 UniformData("gradient_offset", Property::Type::FLOAT),
2472 TestGraphicsController& graphics = application.GetGraphicsController();
2473 graphics.AddCustomUniforms(customUniforms);
2476 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
2477 int _direction[2] = {0, 1};
2478 int _loop_count[3] = {-1, 0, 1};
2479 int _motion[2] = {0, 1};
2480 int _easing[4] = {0, 1, 2, 3};
2482 int test_case_max = 4 * 2 * 3 * 2 * 4;
2484 int test_case_d = 7; // 7 is the number of animated properties.
2486 float _duration = 0.4f;
2487 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2488 float noise_maker = 0.2f;
2489 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2490 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2492 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2494 VisualFactory factory = VisualFactory::Get();
2495 Property::Map propertyMap;
2496 Property::Map animationMap;
2497 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2499 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&
2501 int tc = (test_case + tc_offset);
2502 int idx_easing = tc % 4; tc /= 4;
2503 int idx_motion = tc % 2; tc /= 2;
2504 int idx_loop_count = tc % 3; tc /= 3;
2505 int idx_direction = tc % 2; tc /= 2;
2506 int idx_delay = tc % 4; tc /= 4;
2508 float duration = _duration - _repeat_delay;
2509 float repeat_delay = _repeat_delay;
2510 float delay = _delay[idx_delay] * _duration;
2511 int direction = _direction[idx_direction];
2512 int loop_count = _loop_count[idx_loop_count];
2513 int motion = _motion[idx_motion];
2514 int easing = _easing[idx_easing];
2516 animationMap.Clear();
2517 animationMap.Insert( "startValue", start );
2518 animationMap.Insert( "targetValue", target );
2519 if( direction == 0 )
2521 animationMap.Insert("directionType", "FORWARD");
2525 animationMap.Insert("directionType", "BACKWARD");
2527 animationMap.Insert("duration", duration);
2528 animationMap.Insert("delay", delay);
2529 animationMap.Insert("repeat", loop_count);
2530 animationMap.Insert("repeatDelay", repeat_delay);
2533 animationMap.Insert("motionType", "LOOP");
2537 animationMap.Insert("motionType", "MIRROR");
2541 animationMap.Insert("easingType", "LINEAR");
2543 else if( easing == 1 )
2545 animationMap.Insert("easingType", "IN");
2547 else if( easing == 2 )
2549 animationMap.Insert("easingType", "OUT");
2553 animationMap.Insert("easingType", "IN_OUT");
2556 return animationMap;
2559 // Give different values for debuging
2560 noise_maker += 0.8f;
2561 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2562 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2563 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2564 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2565 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2566 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2567 float offset1 = 0.f + noise_maker * 0.1f;
2569 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2570 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2571 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2572 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2573 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2574 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2575 float offset2 = 2.f + noise_maker * 0.1f;
2577 propertyMap.Insert("gradientType", "LINEAR");
2578 propertyMap.Insert("unitType", "USER_SPACE");
2579 propertyMap.Insert("spreadType", "CLAMP");
2581 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2582 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2583 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2584 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2585 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2586 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2587 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2589 Visual::Base visual = factory.CreateVisual( propertyMap );
2591 DummyControl actor = DummyControl::New( true );
2592 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2593 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2594 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2595 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2596 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2597 application.GetScene().Add(actor);
2599 application.SendNotification();
2600 application.Render( 0 );
2601 application.SendNotification();
2603 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2605 application.SendNotification();
2607 //Compare between CPU calculated value and Shader Visual calculated value
2608 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
2610 int tc = (test_case + tc_offset);
2611 int idx_easing = tc % 4; tc /= 4;
2612 int idx_motion = tc % 2; tc /= 2;
2613 int idx_loop_count = tc % 3; tc /= 3;
2614 int idx_direction = tc % 2; tc /= 2;
2615 int idx_delay = tc % 4; tc /= 4;
2617 float duration = _duration - _repeat_delay;
2618 float repeat_delay = _repeat_delay;
2619 float delay = _delay[idx_delay] * _duration;
2620 int direction = _direction[idx_direction];
2621 int loop_count = _loop_count[idx_loop_count];
2622 int motion = _motion[idx_motion];
2623 int easing = _easing[idx_easing];
2625 progress -= delay / _duration;
2627 Property::Value s = start;
2628 Property::Value t = target;
2629 if( direction == 1 )
2634 float x; ///< Animator progress value
2635 if( loop_count == 0 )
2639 else if( loop_count > 0 && progress + 0.01f > loop_count )
2641 x = ( motion == 0 ) ? 1.0f : 0.0f;
2645 if( progress < 0.0f )
2649 progress = fmodf( progress, 1.0f );
2650 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2655 x = progress * 2.0f;
2662 if( easing == 1 ) // EASE_IN
2666 else if( easing == 2 ) // EASE_OUT
2670 else if( easing == 3 ) // EASE_IN_OUT
2672 x = x * x * (3.0f - 2.0f * x);
2675 if( value_type == 0 ) // result type is Float
2679 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2680 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2681 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2683 else if( value_type == 1 ) // result type is Vector2
2687 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2688 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2689 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2691 else if( value_type == 2 ) // result type is Vector3
2695 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2696 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2697 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2699 else // result type is Vector4
2703 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2704 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2705 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2710 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2712 for( int step_iter = 0; step_iter < 3; step_iter++ )
2714 application.SendNotification();
2715 application.Render( _duration * 250.f ); // step i/4
2716 application.SendNotification();
2719 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2720 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2721 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2722 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2723 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2724 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2725 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2727 application.SendNotification();
2728 application.Render(_duration * 250.f); // step 4/4 will not test
2729 application.SendNotification();
2733 application.SendNotification();
2735 application.SendNotification();
2736 application.Render(10.f); // tempral time
2737 application.SendNotification();
2744 int UtcDaliVisualWireframeVisual(void)
2746 ToolkitTestApplication application;
2748 VisualFactory factory = VisualFactory::Get();
2749 Property::Map propertyMap;
2750 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2752 // Create the visual.
2753 Visual::Base visual = factory.CreateVisual( propertyMap );
2755 DALI_TEST_CHECK( visual );
2757 Property::Map resultMap;
2758 visual.CreatePropertyMap( resultMap );
2760 // Check the property values from the returned map from visual
2761 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2762 DALI_TEST_CHECK( value );
2763 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2768 int UtcDaliVisualGetTransform(void)
2770 ToolkitTestApplication application;
2771 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2773 VisualFactory factory = VisualFactory::Get();
2774 Property::Map propertyMap;
2775 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2776 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2777 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2779 Dali::Property::Map visualMap;
2780 colorVisual.CreatePropertyMap( visualMap );
2781 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2782 Dali::Property::Map* map = value->GetMap();
2783 DALI_TEST_CHECK( map );
2785 //Test default values
2787 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2788 DALI_TEST_CHECK( typeValue );
2789 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2792 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2793 DALI_TEST_CHECK( typeValue );
2794 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2797 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2798 DALI_TEST_CHECK( typeValue );
2799 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2802 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2803 DALI_TEST_CHECK( typeValue );
2804 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2807 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2808 DALI_TEST_CHECK( typeValue );
2809 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2812 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2813 DALI_TEST_CHECK( typeValue );
2814 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2817 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2818 DALI_TEST_CHECK( typeValue );
2819 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2825 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2827 Property::Map transform;
2828 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2829 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2830 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2831 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2832 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2833 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(50.0f, 50.0f) );
2835 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2837 Dali::Property::Map visualMap;
2838 visual.CreatePropertyMap( visualMap );
2839 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2840 Dali::Property::Map* map = value->GetMap();
2841 DALI_TEST_CHECK( map );
2844 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2845 DALI_TEST_CHECK( typeValue );
2846 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2849 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2850 DALI_TEST_CHECK( typeValue );
2851 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2854 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2855 DALI_TEST_CHECK( typeValue );
2856 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2859 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2860 DALI_TEST_CHECK( typeValue );
2861 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2864 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2865 DALI_TEST_CHECK( typeValue );
2866 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2869 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2870 DALI_TEST_CHECK( typeValue );
2871 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2874 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2875 DALI_TEST_CHECK( typeValue );
2876 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(50.0f,50.0f), TEST_LOCATION );
2879 //Put the visual on the stage
2880 DummyControl actor = DummyControl::New(true);
2881 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2882 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2883 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2884 application.GetScene().Add(actor);
2886 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2887 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2889 application.SendNotification();
2890 application.Render(0);
2891 Renderer renderer( actor.GetRendererAt(0) );
2893 //Check that the properties have been registered on the Renderer
2894 Property::Index index = renderer.GetPropertyIndex( "offset" );
2895 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2896 Vector2 offset = renderer.GetProperty<Vector2>( index );
2897 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2899 index = renderer.GetPropertyIndex( "size" );
2900 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2901 Vector2 size = renderer.GetProperty<Vector2>( index );
2902 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2904 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2905 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2906 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2907 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2909 index = renderer.GetPropertyIndex( "origin" );
2910 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2911 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2912 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2914 index = renderer.GetPropertyIndex( "anchorPoint" );
2915 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2916 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2917 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2919 index = renderer.GetPropertyIndex( "extraSize" );
2920 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2921 Vector2 extraSize = renderer.GetProperty<Vector2>( index );
2922 DALI_TEST_EQUALS( extraSize, Vector2(50.0f,50.0f), TEST_LOCATION );
2924 //Set a new transform
2926 transform = DefaultTransform();
2927 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2928 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2929 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2930 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(0.5f, 0.5f) );
2931 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2932 application.SendNotification();
2933 application.Render(0);
2935 //Check that the values have changed in the renderer
2936 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2937 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2939 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2940 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2942 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2943 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2945 //Parent origin and anchor point should have the default values
2946 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2947 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2949 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2950 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2952 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
2953 DALI_TEST_EQUALS( extraSize, Vector2(0.5f,0.5f), TEST_LOCATION );
2956 int UtcDaliVisualSetTransform01(void)
2958 ToolkitTestApplication application;
2959 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2961 VisualFactory factory = VisualFactory::Get();
2962 Property::Map propertyMap;
2963 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2964 propertyMap.Insert(Visual::Property::OPACITY, 0.5f);
2965 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2966 Visual::Base visual = factory.CreateVisual( propertyMap );
2967 TestTransform( application, visual );
2968 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2973 int UtcDaliVisualSetTransform0(void)
2975 ToolkitTestApplication application;
2976 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2978 VisualFactory factory = VisualFactory::Get();
2979 Property::Map propertyMap;
2980 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2981 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2982 Visual::Base visual = factory.CreateVisual( propertyMap );
2983 TestTransform( application, visual );
2984 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2989 int UtcDaliVisualSetTransform1(void)
2991 ToolkitTestApplication application;
2992 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2994 VisualFactory factory = VisualFactory::Get();
2995 Property::Map propertyMap;
2996 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2997 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2998 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2999 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
3000 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
3001 Visual::Base visual = factory.CreateVisual( propertyMap );
3002 TestTransform( application, visual );
3003 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
3008 int UtcDaliVisualSetTransform2(void)
3010 ToolkitTestApplication application;
3011 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
3013 VisualFactory factory = VisualFactory::Get();
3014 Property::Map propertyMap;
3015 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
3016 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
3018 Property::Array stopOffsets;
3019 stopOffsets.PushBack( 0.0f );
3020 stopOffsets.PushBack( 0.3f );
3021 stopOffsets.PushBack( 0.6f );