2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali/devel-api/actors/actor-devel.h>
24 #include <dali/devel-api/object/handle-devel.h>
25 #include <dali/devel-api/text-abstraction/font-client.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
28 #include <dali-toolkit/devel-api/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/image-visual-properties-devel.h>
34 #include <dali-toolkit/devel-api/visuals/text-visual-properties-devel.h>
35 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
36 #include <dali-toolkit/dali-toolkit.h>
38 #include "dummy-control.h"
41 using namespace Dali::Toolkit;
45 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
46 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
47 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
48 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
49 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
50 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
51 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
52 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
55 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
57 Property::Map DefaultTransform()
59 Property::Map transformMap;
61 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
62 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
63 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
64 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
65 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
66 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
70 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
72 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
74 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
76 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
78 Property::Value* valueSet = NULL;
79 if ( valueGet.first.type == Property::Key::INDEX )
81 valueSet = fontStyleMapSet.Find( valueGet.first.indexKey );
85 // Get Key is a string so searching Set Map for a string key
86 valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
89 if( NULL != valueSet )
91 if( valueSet->GetType() == Dali::Property::STRING && ( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() ) )
93 tet_printf( "Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
96 else if( valueSet->GetType() == Dali::Property::BOOLEAN && ( valueGet.second.Get<bool>() != valueSet->Get<bool>() ) )
98 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>() );
101 else if( valueSet->GetType() == Dali::Property::INTEGER && ( valueGet.second.Get<int>() != valueSet->Get<int>() ) )
103 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>() );
106 else if( valueSet->GetType() == Dali::Property::FLOAT && ( valueGet.second.Get<float>() != valueSet->Get<float>() ) )
108 tet_printf( "Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>() );
111 else if( valueSet->GetType() == Dali::Property::VECTOR2 && ( valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>() ) )
113 Vector2 vector2Get = valueGet.second.Get<Vector2>();
114 Vector2 vector2Set = valueSet->Get<Vector2>();
115 tet_printf( "Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y );
118 else if( valueSet->GetType() == Dali::Property::VECTOR4 && ( valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>() ) )
120 Vector4 vector4Get = valueGet.second.Get<Vector4>();
121 Vector4 vector4Set = valueSet->Get<Vector4>();
122 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 );
128 if ( valueGet.first.type == Property::Key::INDEX )
130 tet_printf( " The key %d doesn't exist.", valueGet.first.indexKey );
134 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
146 void dali_visual_startup(void)
148 test_return_value = TET_UNDEF;
151 void dali_visual_cleanup(void)
153 test_return_value = TET_PASS;
157 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
160 visual.CreatePropertyMap(map);
161 Property::Value* value = map.Find( mixColorIndex );
162 DALI_TEST_CHECK( value );
164 DALI_TEST_CHECK( value->Get( mixColor1 ) );
165 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
167 value = map.Find( Visual::Property::MIX_COLOR );
168 DALI_TEST_CHECK( value );
170 DALI_TEST_CHECK( value->Get( mixColor2 ) );
171 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
173 value = map.Find( Visual::Property::OPACITY );
174 DALI_TEST_CHECK( value );
176 DALI_TEST_CHECK( value->Get( opacity ) );
177 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
181 int UtcDaliVisualCopyAndAssignment(void)
183 ToolkitTestApplication application;
184 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
186 VisualFactory factory = VisualFactory::Get();
187 Property::Map propertyMap;
188 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
189 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
190 Visual::Base visual = factory.CreateVisual( propertyMap );
192 Visual::Base visualCopy( visual );
193 DALI_TEST_CHECK(visual == visualCopy);
195 Visual::Base emptyVisual;
196 Visual::Base emptyVisualCopy( emptyVisual );
197 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
199 Visual::Base visualEquals;
200 visualEquals = visual;
201 DALI_TEST_CHECK(visual == visualEquals);
203 Visual::Base emptyVisualEquals;
204 emptyVisualEquals = emptyVisual;
205 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
209 DALI_TEST_CHECK( visual = visualCopy );
214 int UtcDaliVisualSetName01(void)
216 ToolkitTestApplication application;
217 tet_infoline( "UtcDaliVisualSetName" );
219 VisualFactory factory = VisualFactory::Get();
220 Property::Map propertyMap;
221 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
222 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
223 Visual::Base visual = factory.CreateVisual( propertyMap );
225 const char* visualName = "backgroundVisual";
226 visual.SetName( visualName );
228 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
233 int UtcDaliVisualSetGetDepthIndex(void)
235 ToolkitTestApplication application;
236 tet_infoline( "UtcDaliVisualSetDepthIndex" );
238 VisualFactory factory = VisualFactory::Get();
239 Property::Map propertyMap;
240 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
241 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
242 Visual::Base visual = factory.CreateVisual( propertyMap );
244 visual.SetDepthIndex( 1 );
246 DummyControl dummyControl = DummyControl::New(true);
247 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
248 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
250 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
251 application.GetScene().Add( dummyControl );
254 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
255 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
256 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
258 visual.SetDepthIndex( -1 );
259 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
260 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
261 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
266 int UtcDaliVisualSize(void)
268 ToolkitTestApplication application;
269 tet_infoline( "UtcDaliVisualSize" );
271 VisualFactory factory = VisualFactory::Get();
272 Vector2 controlSize( 20.f, 30.f );
276 Dali::Property::Map map;
277 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
278 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
280 Visual::Base colorVisual = factory.CreateVisual( map );
281 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
283 colorVisual.GetNaturalSize(naturalSize);
284 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
288 map[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
289 map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
290 map[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
291 map[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 200.0f;
292 Visual::Base imageVisual = factory.CreateVisual( map );
293 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
295 imageVisual.GetNaturalSize(naturalSize);
296 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
298 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
301 float borderSize = 5.f;
303 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
304 map[ BorderVisual::Property::COLOR ] = Color::RED;
305 map[ BorderVisual::Property::SIZE ] = borderSize;
306 Visual::Base borderVisual = factory.CreateVisual( map );
307 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
308 borderVisual.GetNaturalSize(naturalSize);
309 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
311 // gradient gradientVisual
312 Property::Map propertyMap;
313 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
314 Vector2 start(-1.f, -1.f);
315 Vector2 end(1.f, 1.f);
316 propertyMap.Insert( "mixColor", Color::MAGENTA );
317 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
318 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
319 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
320 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
321 Property::Array stopColors;
322 stopColors.PushBack( Color::RED );
323 stopColors.PushBack( Color::GREEN );
324 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
325 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
326 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
327 gradientVisual.GetNaturalSize(naturalSize);
328 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
330 // animated gradient visual
331 Vector2 animated_gradient_visual_size(10.f, 10.f);
333 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
334 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
335 animatedGradientVisual.GetNaturalSize(naturalSize);
336 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
337 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
340 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
341 svgVisual.GetNaturalSize(naturalSize);
343 // <svg width="100" height="100">
344 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
346 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
348 // svg visual with a size
349 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
350 svgVisual2.GetNaturalSize(naturalSize);
351 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
355 // Load some fonts to get the same metrics on different platforms.
356 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
357 fontClient.SetDpi( 96u, 96u );
359 char* pathNamePtr = get_current_dir_name();
360 const std::string pathName( pathNamePtr );
363 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
365 // Create a TextVisual with a font size of 12 first
367 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
368 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
369 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
370 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
372 Visual::Base smallTextVisual = factory.CreateVisual( propertyMap );
373 Vector2 smallTextVisualNaturalSize;
374 smallTextVisual.GetNaturalSize( smallTextVisualNaturalSize );
376 // Then create a TextVisual with a font size of 20
377 propertyMap[ TextVisual::Property::TEXT ] = "<font family='TizenSans' size='20'>Hello world</font>";
378 Visual::Base largeTextVisual = factory.CreateVisual( propertyMap );
379 Vector2 largeTextVisualNaturalSize;
380 largeTextVisual.GetNaturalSize( largeTextVisualNaturalSize );
382 // Compare the sizes of the two text visuals, the second one should be bigger as it has a larger point size in the markup.
383 DALI_TEST_CHECK( smallTextVisualNaturalSize.width < largeTextVisualNaturalSize.width &&
384 smallTextVisualNaturalSize.height < largeTextVisualNaturalSize.height );
386 // The height returned for a particular width should also be greater for the large text visual
387 DALI_TEST_CHECK( smallTextVisual.GetHeightForWidth( 40.f ) < largeTextVisual.GetHeightForWidth( 40.f ) );
389 //AnimatedImageVisual
390 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
391 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
392 animatedImageVisual.GetNaturalSize(naturalSize);
393 // TEST_GIF_FILE: anim.gif
394 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
395 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
400 int UtcDaliVisualSetOnOffScene(void)
402 ToolkitTestApplication application;
403 tet_infoline( "UtcDaliVisualSetOnOffScene" );
405 VisualFactory factory = VisualFactory::Get();
406 Property::Map propertyMap;
407 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
408 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
409 Visual::Base visual = factory.CreateVisual( propertyMap );
411 DummyControl actor = DummyControl::New(true);
412 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
413 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
415 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
417 application.SendNotification();
418 application.Render(0);
419 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
421 application.GetScene().Add( actor );
423 application.SendNotification();
424 application.Render(0);
425 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
427 application.GetScene().Remove( actor );
429 application.SendNotification();
430 application.Render(0);
431 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
436 int UtcDaliVisualSetOnOffScene2(void)
438 ToolkitTestApplication application;
439 tet_infoline( "UtcDaliVisualSetOnOffScene2" );
441 VisualFactory factory = VisualFactory::Get();
442 Property::Map propertyMap;
443 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
444 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
445 Visual::Base visual = factory.CreateVisual( propertyMap );
447 DummyControl actor = DummyControl::New(true);
448 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
449 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
451 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
453 application.SendNotification();
454 application.Render(0);
455 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
458 application.GetScene().Add( actor );
460 application.SendNotification();
461 application.Render(0);
462 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
463 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
464 Renderer renderer = actor.GetRendererAt( 0 );
465 auto textures = renderer.GetTextures();
466 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
468 application.GetScene().Remove( actor );
470 application.SendNotification();
471 application.Render(0);
472 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
475 application.GetScene().Add( actor );
477 application.SendNotification();
478 application.Render(0);
479 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
480 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
481 renderer = actor.GetRendererAt( 0 );
482 textures = renderer.GetTextures();
483 DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
485 application.GetScene().Remove( actor );
487 application.SendNotification();
488 application.Render(0);
489 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
494 int UtcDaliVisualGetPropertyMap1(void)
496 ToolkitTestApplication application;
497 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
499 VisualFactory factory = VisualFactory::Get();
500 Property::Map propertyMap;
501 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
502 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
503 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS, 10.0f );
504 propertyMap.Insert( DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE );
505 propertyMap.Insert( DevelColorVisual::Property::BLUR_RADIUS, 20.0f );
506 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
508 Property::Map resultMap;
509 colorVisual.CreatePropertyMap( resultMap );
511 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
512 DALI_TEST_CHECK( typeValue );
513 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
515 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
516 DALI_TEST_CHECK( colorValue );
517 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
519 Property::Value* cornerRadiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT );
520 DALI_TEST_CHECK( cornerRadiusValue );
521 DALI_TEST_CHECK( cornerRadiusValue->Get< float >() == 10.0f );
523 Property::Value* cornerRadiusPolicyValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER );
524 DALI_TEST_CHECK( cornerRadiusPolicyValue );
525 DALI_TEST_CHECK( cornerRadiusPolicyValue->Get< int >() == Toolkit::Visual::Transform::Policy::RELATIVE );
527 Property::Value* blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
528 DALI_TEST_CHECK( blurRadiusValue );
529 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 20.0f );
531 // change the blend color
532 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
533 colorVisual = factory.CreateVisual( propertyMap );
534 colorVisual.CreatePropertyMap( resultMap );
536 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
537 DALI_TEST_CHECK( colorValue );
538 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
541 propertyMap[DevelColorVisual::Property::BLUR_RADIUS] = "3.0f";
543 colorVisual = factory.CreateVisual( propertyMap );
544 colorVisual.CreatePropertyMap( resultMap );
546 blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
547 DALI_TEST_CHECK( blurRadiusValue );
548 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 0.0f );
553 int UtcDaliVisualGetPropertyMap2(void)
555 ToolkitTestApplication application;
556 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
558 VisualFactory factory = VisualFactory::Get();
559 Property::Map propertyMap;
560 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
561 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
562 propertyMap.Insert("borderColor", Color::BLUE);
563 propertyMap.Insert("borderSize", 5.f);
564 propertyMap.Insert("antiAliasing", true);
565 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
567 Property::Map resultMap;
568 borderVisual.CreatePropertyMap( resultMap );
570 // check the property values from the returned map from visual
571 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
572 DALI_TEST_CHECK( typeValue );
573 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
575 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
576 DALI_TEST_CHECK( colorValue );
577 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
579 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
580 DALI_TEST_CHECK( sizeValue );
581 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
583 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
584 DALI_TEST_CHECK( AAValue );
585 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
587 Property::Map propertyMap1;
588 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
589 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
590 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
591 borderVisual = factory.CreateVisual( propertyMap1 );
592 borderVisual.CreatePropertyMap( resultMap );
594 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
595 DALI_TEST_CHECK( typeValue );
596 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
598 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
599 DALI_TEST_CHECK( colorValue );
600 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
602 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
603 DALI_TEST_CHECK( colorValue );
604 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
610 int UtcDaliVisualGetPropertyMap2N(void)
612 ToolkitTestApplication application;
613 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
615 VisualFactory factory = VisualFactory::Get();
616 Property::Map propertyMap;
617 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
618 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
620 tet_infoline( "Test that the visual is created, with a default renderer" );
621 DALI_TEST_CHECK( borderVisual );
623 DummyControl dummyControl = DummyControl::New(true);
624 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
625 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
626 application.GetScene().Add( dummyControl );
628 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
634 int UtcDaliVisualGetPropertyMap3(void)
636 ToolkitTestApplication application;
637 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
639 VisualFactory factory = VisualFactory::Get();
640 DALI_TEST_CHECK( factory );
642 Property::Map propertyMap;
643 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
645 Vector2 start(-1.f, -1.f);
646 Vector2 end(1.f, 1.f);
647 propertyMap.Insert( "startPosition", start);
648 propertyMap.Insert( "endPosition", end);
649 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
651 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
653 Property::Array stopColors;
654 stopColors.PushBack( Color::RED );
655 stopColors.PushBack( Color::GREEN );
656 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
658 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
660 Property::Map resultMap;
661 gradientVisual.CreatePropertyMap( resultMap );
663 // check the property values from the returned map from visual
664 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
665 DALI_TEST_CHECK( value );
666 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
668 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
669 DALI_TEST_CHECK( value );
670 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
672 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
673 DALI_TEST_CHECK( value );
674 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
676 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
677 DALI_TEST_CHECK( value );
678 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
680 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
681 DALI_TEST_CHECK( value );
682 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
684 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
685 DALI_TEST_CHECK( value );
686 Property::Array* offsetArray = value->GetArray();
687 DALI_TEST_CHECK( offsetArray->Count() == 2 );
688 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
689 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
691 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
692 DALI_TEST_CHECK( value );
693 Property::Array* colorArray = value->GetArray();
694 DALI_TEST_CHECK( colorArray->Count() == 2 );
695 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
696 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
701 int UtcDaliVisualGetPropertyMap4(void)
703 ToolkitTestApplication application;
704 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
706 VisualFactory factory = VisualFactory::Get();
707 DALI_TEST_CHECK( factory );
709 Property::Map propertyMap;
710 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
712 Vector2 center(100.f, 100.f);
713 float radius = 100.f;
714 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
715 propertyMap.Insert(GradientVisual::Property::CENTER, center);
716 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
717 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
719 Property::Array stopColors;
720 stopColors.PushBack( Color::RED );
721 stopColors.PushBack( Color::BLACK );
722 stopColors.PushBack( Color::GREEN );
723 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
725 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
726 DALI_TEST_CHECK( gradientVisual );
728 Property::Map resultMap;
729 gradientVisual.CreatePropertyMap( resultMap );
731 // check the property values from the returned map from visual
732 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
733 DALI_TEST_CHECK( value );
734 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
736 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
737 DALI_TEST_CHECK( value );
738 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
740 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
741 DALI_TEST_CHECK( value );
742 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
744 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
745 DALI_TEST_CHECK( value );
746 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
748 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
749 DALI_TEST_CHECK( value );
750 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
752 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
753 DALI_TEST_CHECK( value );
754 Property::Array* offsetArray = value->GetArray();
755 DALI_TEST_CHECK( offsetArray->Count() == 3 );
756 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
757 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
758 // any stop value will be clamped to [0.0, 1.0];
759 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
761 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
762 DALI_TEST_CHECK( value );
763 Property::Array* colorArray = value->GetArray();
764 DALI_TEST_CHECK( colorArray->Count() == 3 );
765 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
766 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
767 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
772 int UtcDaliVisualGetPropertyMap5(void)
774 ToolkitTestApplication application;
775 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
777 VisualFactory factory = VisualFactory::Get();
778 Property::Map propertyMap;
779 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
780 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
781 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
782 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
783 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
784 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
785 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
786 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
787 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
788 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
789 propertyMap.Insert( "synchronousLoading", true );
791 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
792 DALI_TEST_CHECK( imageVisual );
794 Property::Map resultMap;
795 imageVisual.CreatePropertyMap( resultMap );
797 // check the property values from the returned map from visual
798 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
799 DALI_TEST_CHECK( value );
800 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
802 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
803 DALI_TEST_CHECK( value );
804 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
806 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
807 DALI_TEST_CHECK( value );
808 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
810 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
811 DALI_TEST_CHECK( value );
812 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
814 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
815 DALI_TEST_CHECK( value );
816 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
818 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
819 DALI_TEST_CHECK( value );
820 DALI_TEST_CHECK( value->Get<int>() == 20 );
822 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
823 DALI_TEST_CHECK( value );
824 DALI_TEST_CHECK( value->Get<int>() == 30 );
826 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
827 DALI_TEST_CHECK( value );
828 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
830 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
831 DALI_TEST_CHECK( value );
832 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
834 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
835 DALI_TEST_CHECK( value );
836 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
838 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
839 DALI_TEST_CHECK( value );
840 DALI_TEST_CHECK( value->Get<bool>() == true );
845 int UtcDaliVisualGetPropertyMap6(void)
847 ToolkitTestApplication application;
848 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
850 Rect< int > border( 1, 1, 1, 1 );
852 VisualFactory factory = VisualFactory::Get();
853 Property::Map propertyMap;
854 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
855 propertyMap.Insert( "mixColor", Color::MAGENTA );
856 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
857 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
858 propertyMap.Insert( ImageVisual::Property::BORDER, border );
859 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
860 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
861 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
863 Property::Map resultMap;
864 nPatchVisual.CreatePropertyMap( resultMap );
866 // check the property values from the returned map from visual
867 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
868 DALI_TEST_CHECK( value );
869 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
871 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
872 DALI_TEST_CHECK( value );
873 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
875 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
876 DALI_TEST_CHECK( value );
877 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
879 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
880 DALI_TEST_CHECK( value );
881 DALI_TEST_CHECK( value->Get<bool>() );
883 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
884 DALI_TEST_CHECK( value );
885 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
887 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
888 DALI_TEST_CHECK( value );
889 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
891 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
892 DALI_TEST_CHECK( value );
893 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
895 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
897 Property::Map propertyMap1;
898 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
899 propertyMap1.Insert( "mixColor", Color::MAGENTA );
900 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
901 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
902 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
903 nPatchVisual = factory.CreateVisual( propertyMap1 );
905 nPatchVisual.CreatePropertyMap( resultMap );
907 // check the property values from the returned map from visual
908 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
909 DALI_TEST_CHECK( value );
910 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
912 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
913 DALI_TEST_CHECK( value );
914 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
916 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
917 DALI_TEST_CHECK( value );
918 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
920 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
921 DALI_TEST_CHECK( value );
922 DALI_TEST_CHECK( value->Get<bool>() );
924 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
925 DALI_TEST_CHECK( value );
926 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
931 int UtcDaliVisualGetPropertyMap7(void)
933 ToolkitTestApplication application;
934 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
936 // request SvgVisual with a property map
937 VisualFactory factory = VisualFactory::Get();
938 Property::Map propertyMap;
939 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
940 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
941 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
942 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
943 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
945 Property::Map resultMap;
946 svgVisual.CreatePropertyMap( resultMap );
947 // check the property values from the returned map from a visual
948 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
949 DALI_TEST_CHECK( value );
950 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
952 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
953 DALI_TEST_CHECK( value );
954 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
956 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
957 DALI_TEST_CHECK( value );
958 DALI_TEST_CHECK( value->Get<bool>() == false );
960 // request SvgVisual with a property map 2
962 propertyMap[ "visualType" ] = Visual::SVG;
963 propertyMap[ "mixColor" ] = Color::WHITE;
964 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
965 propertyMap[ "atlasing" ] = true;
966 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
969 svgVisual1.CreatePropertyMap( resultMap );
970 // check the property values from the returned map from a visual
971 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
972 DALI_TEST_CHECK( value );
973 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
975 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
976 DALI_TEST_CHECK( value );
977 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
979 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
980 DALI_TEST_CHECK( value );
981 DALI_TEST_CHECK( value->Get<bool>() == true );
983 // request SvgVisual with an URL
984 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
986 svgVisual2.CreatePropertyMap( resultMap );
987 // check the property values from the returned map from a visual
988 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
989 DALI_TEST_CHECK( value );
990 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
992 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
993 DALI_TEST_CHECK( value );
994 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1000 int UtcDaliVisualGetPropertyMap8(void)
1002 ToolkitTestApplication application;
1003 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
1005 //Request MeshVisual using a property map.
1006 VisualFactory factory = VisualFactory::Get();
1007 Property::Map propertyMap;
1008 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1009 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
1010 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1011 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1012 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1013 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1014 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1015 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
1017 Property::Map resultMap;
1018 meshVisual.CreatePropertyMap( resultMap );
1019 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
1021 //Check values in the result map are identical to the initial map's values.
1022 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1023 DALI_TEST_CHECK( value );
1024 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
1026 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
1027 DALI_TEST_CHECK( value );
1028 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
1030 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
1031 DALI_TEST_CHECK( value );
1032 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
1034 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
1035 DALI_TEST_CHECK( value );
1036 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
1038 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
1039 DALI_TEST_CHECK( value );
1040 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1042 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1043 DALI_TEST_CHECK( value );
1044 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1049 //Primitive shape visual
1050 int UtcDaliVisualGetPropertyMap9(void)
1052 ToolkitTestApplication application;
1053 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1055 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1056 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1058 //Request PrimitiveVisual using a property map.
1059 VisualFactory factory = VisualFactory::Get();
1060 Property::Map propertyMap;
1061 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1062 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1063 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1064 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1065 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1066 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1067 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1068 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1069 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1070 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1071 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1072 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1073 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1074 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1076 Property::Map resultMap;
1077 primitiveVisual.CreatePropertyMap( resultMap );
1079 //Check values in the result map are identical to the initial map's values.
1080 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1081 DALI_TEST_CHECK( value );
1082 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1084 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1085 DALI_TEST_CHECK( value );
1086 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1088 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1089 DALI_TEST_CHECK( value );
1090 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1091 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1093 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1094 DALI_TEST_CHECK( value );
1095 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1097 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1098 DALI_TEST_CHECK( value );
1099 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1101 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1102 DALI_TEST_CHECK( value );
1103 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1105 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1106 DALI_TEST_CHECK( value );
1107 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1109 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1110 DALI_TEST_CHECK( value );
1111 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1113 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1114 DALI_TEST_CHECK( value );
1115 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1117 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1118 DALI_TEST_CHECK( value );
1119 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1121 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1122 DALI_TEST_CHECK( value );
1123 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1125 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1126 DALI_TEST_CHECK( value );
1127 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1129 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1130 DALI_TEST_CHECK( value );
1131 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1137 int UtcDaliVisualGetPropertyMap10(void)
1139 ToolkitTestApplication application;
1140 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1142 //Request PrimitiveVisual using a property map.
1143 VisualFactory factory = VisualFactory::Get();
1145 Property::Map propertyMap;
1146 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1147 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1148 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
1149 propertyMap.Insert( "enableMarkup", false );
1150 propertyMap.Insert( "text", "Hello world" );
1151 propertyMap.Insert( "fontFamily", "TizenSans" );
1153 Property::Map fontStyleMapSet;
1154 fontStyleMapSet.Insert( "weight", "bold" );
1155 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1157 propertyMap.Insert( "pointSize", 12.f );
1158 propertyMap.Insert( "multiLine", true );
1159 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1160 propertyMap.Insert( "verticalAlignment", "CENTER" );
1161 propertyMap.Insert( "textColor", Color::RED );
1163 Property::Map shadowMapSet;
1164 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1166 Property::Map underlineMapSet;
1167 propertyMap.Insert( "underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1) );
1169 Property::Map outlineMapSet;
1170 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1172 Property::Map backgroundMapSet;
1173 propertyMap.Insert( "textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN) );
1175 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1177 Property::Map resultMap;
1178 textVisual.CreatePropertyMap( resultMap );
1180 //Check values in the result map are identical to the initial map's values.
1181 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1182 DALI_TEST_CHECK( value );
1183 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1185 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1186 DALI_TEST_CHECK( value );
1187 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1189 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1190 DALI_TEST_CHECK( value );
1191 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1193 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1194 DALI_TEST_CHECK( value );
1195 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1197 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1198 DALI_TEST_CHECK( value );
1200 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1201 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1202 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1204 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1205 DALI_TEST_CHECK( value );
1206 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1208 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1209 DALI_TEST_CHECK( value );
1210 DALI_TEST_CHECK( value->Get<bool>() );
1212 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1213 DALI_TEST_CHECK( value );
1214 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1216 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1217 DALI_TEST_CHECK( value );
1218 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1220 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1221 DALI_TEST_CHECK( value );
1222 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1224 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1225 DALI_TEST_CHECK( value );
1226 DALI_TEST_CHECK( !value->Get<bool>() );
1228 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1229 DALI_TEST_CHECK( value );
1231 Property::Map shadowMapGet = value->Get<Property::Map>();
1232 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1233 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1235 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1236 DALI_TEST_CHECK( value );
1238 Property::Map underlineMapGet = value->Get<Property::Map>();
1239 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1240 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1242 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1243 DALI_TEST_CHECK( value );
1245 Property::Map outlineMapGet = value->Get<Property::Map>();
1246 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1247 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1249 value = resultMap.Find( DevelTextVisual::Property::BACKGROUND, Property::MAP );
1250 DALI_TEST_CHECK( value );
1252 Property::Map backgroundMapGet = value->Get<Property::Map>();
1253 DALI_TEST_EQUALS( backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION );
1254 DALI_TEST_EQUALS( DaliTestCheckMaps( backgroundMapGet, backgroundMapSet ), true, TEST_LOCATION );
1259 int UtcDaliVisualGetPropertyMap11(void)
1261 ToolkitTestApplication application;
1262 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1264 VisualFactory factory = VisualFactory::Get();
1265 DALI_TEST_CHECK( factory );
1267 Property::Map propertyMap;
1268 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1270 Vector2 start(-0.5f, 0.5f);
1271 Vector2 end (0.5f, -0.0f);
1272 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1273 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1274 Vector2 rotate_center(0.0f, 0.4f);
1275 float rotate_amount = 1.57f;
1276 float offset = 100.f;
1278 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1279 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1280 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1282 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1283 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1284 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1285 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1286 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1287 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1288 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1290 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1291 DALI_TEST_CHECK( animatedGradientVisual );
1293 Property::Map resultMap;
1294 animatedGradientVisual.CreatePropertyMap( resultMap );
1296 // check the property values from the returned map from visual
1297 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1298 DALI_TEST_CHECK( value );
1299 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1301 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1302 DALI_TEST_CHECK( value );
1303 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1305 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1306 DALI_TEST_CHECK( value );
1307 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1309 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1310 DALI_TEST_CHECK( value );
1311 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1314 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1315 DALI_TEST_CHECK( value );
1316 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1318 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1319 DALI_TEST_CHECK( value );
1320 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1322 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1323 DALI_TEST_CHECK( value );
1324 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1326 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1327 DALI_TEST_CHECK( value );
1328 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1330 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1331 DALI_TEST_CHECK( value );
1332 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1334 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1335 DALI_TEST_CHECK( value );
1336 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1338 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1339 DALI_TEST_CHECK( value );
1340 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1345 int UtcDaliVisualGetPropertyMap12(void)
1347 ToolkitTestApplication application;
1348 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1350 // Case 1 : Set values by index
1352 tet_printf( " - Set Values by Index\n" );
1353 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1354 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1355 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1357 tet_printf( "test with delay [%f]\n", _delay );
1358 VisualFactory factory = VisualFactory::Get();
1359 DALI_TEST_CHECK( factory );
1361 Property::Map propertyMap;
1362 Property::Map animationMap;
1363 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1365 float duration = 1.1f;
1366 float delay = _delay;
1367 float repeat_delay = 0.4f;
1369 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1371 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1372 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1374 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1376 animationMap.Clear();
1377 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1378 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1379 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1380 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1381 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1382 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1383 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1384 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1385 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1387 return animationMap;
1390 Vector2 start1(-0.5f, 0.5f);
1391 Vector2 end1 (0.5f, -0.5f);
1392 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1393 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1394 Vector2 rotate_center1(0.0f, 0.4f);
1395 float rotate_amount1 = 0.0f;
1396 float offset1 = 0.f;
1398 Vector2 start2(-0.5f, -0.5f);
1399 Vector2 end2 (0.5f, 0.5f);
1400 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1401 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1402 Vector2 rotate_center2(0.0f, -0.4f);
1403 float rotate_amount2 = 6.2832f;
1404 float offset2 = 2.f;
1406 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1407 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1408 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1410 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1411 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1412 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1413 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1414 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1415 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1416 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1418 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1419 DALI_TEST_CHECK( animatedGradientVisual );
1421 Property::Map resultMap;
1422 animatedGradientVisual.CreatePropertyMap( resultMap );
1424 // check the property values from the returned map from visual
1425 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1426 DALI_TEST_CHECK( value );
1427 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1429 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1430 DALI_TEST_CHECK( value );
1431 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1433 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1434 DALI_TEST_CHECK( value );
1435 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1437 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1438 DALI_TEST_CHECK( value );
1439 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1441 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
1443 tet_printf("Check value at %d\n", line_num);
1444 value = resultMap.Find( index, Property::MAP );
1445 DALI_TEST_CHECK( value );
1446 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1447 Property::Map *temp_map = value->GetMap();
1448 DALI_TEST_CHECK( temp_map );
1450 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1452 Property::Value *res = temp_map->Find( index );
1453 DALI_TEST_CHECK( res );
1457 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1458 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1459 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1460 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1461 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1462 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1463 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1464 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1465 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1468 // check the animation map data is good
1469 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1470 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1471 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1472 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1473 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1474 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1475 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1479 // Case 2 : Set values by string
1481 tet_printf( " - Set Values by String\n" );
1482 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1483 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1484 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1486 tet_printf( "test with delay [%f]\n", _delay );
1487 VisualFactory factory = VisualFactory::Get();
1488 DALI_TEST_CHECK( factory );
1490 Property::Map propertyMap;
1491 Property::Map animationMap;
1492 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1494 float duration = 1.1f;
1495 float delay = _delay;
1496 float repeat_delay = 0.4f;
1498 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1500 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1501 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1503 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1505 animationMap.Clear();
1506 animationMap.Insert("startValue" , start);
1507 animationMap.Insert("targetValue" , target);
1508 animationMap.Insert("directionType", "BACKWARD");
1509 animationMap.Insert("duration" , duration);
1510 animationMap.Insert("delay" , delay);
1511 animationMap.Insert("repeat" , loop_count);
1512 animationMap.Insert("repeatDelay" , repeat_delay);
1513 animationMap.Insert("motionType" , "MIRROR");
1514 animationMap.Insert("easingType" , "IN_OUT");
1516 return animationMap;
1519 Vector2 start1(-0.5f, 0.5f);
1520 Vector2 end1 (0.5f, -0.5f);
1521 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1522 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1523 Vector2 rotate_center1(0.0f, 0.4f);
1524 float rotate_amount1 = 0.0f;
1525 float offset1 = 0.f;
1527 Vector2 start2(-0.5f, -0.5f);
1528 Vector2 end2 (0.5f, 0.5f);
1529 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1530 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1531 Vector2 rotate_center2(0.0f, -0.4f);
1532 float rotate_amount2 = 6.2832f;
1533 float offset2 = 2.f;
1535 // For test mix the type string/index key and string/index value works well.
1536 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1537 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1538 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1540 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1541 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1542 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1543 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1544 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1545 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1546 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1548 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1549 DALI_TEST_CHECK( animatedGradientVisual );
1551 Property::Map resultMap;
1552 animatedGradientVisual.CreatePropertyMap( resultMap );
1554 // check the property values from the returned map from visual
1555 // Note : resultMap from CreatePropertyMap only contain indexKey
1556 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1557 DALI_TEST_CHECK( value );
1558 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1560 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1561 DALI_TEST_CHECK( value );
1562 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1564 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1565 DALI_TEST_CHECK( value );
1566 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1568 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1569 DALI_TEST_CHECK( value );
1570 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1572 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
1574 tet_printf("Check value at %d\n", line_num);
1575 value = resultMap.Find( index, Property::MAP );
1576 DALI_TEST_CHECK( value );
1577 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1578 Property::Map *temp_map = value->GetMap();
1579 DALI_TEST_CHECK( temp_map );
1581 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1583 Property::Value *res = temp_map->Find( index );
1584 DALI_TEST_CHECK( res );
1588 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1589 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1590 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1591 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1592 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1593 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1594 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1595 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1596 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1599 // check the animation map data is good
1600 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1601 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1602 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1603 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1604 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1605 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1606 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1612 int UtcDaliVisualGetPropertyMap13(void)
1614 ToolkitTestApplication application;
1615 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1617 for(int _direction = 0; _direction <= 1; ++_direction)
1619 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1621 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1622 VisualFactory factory = VisualFactory::Get();
1623 DALI_TEST_CHECK( factory );
1625 Property::Map propertyMap;
1626 Property::Map animationMap;
1627 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1629 float duration = 1.0f;
1630 float delay = _delay;
1631 float repeat_delay = 0.5f;
1633 int direction = _direction;
1634 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1635 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1636 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1638 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1640 animationMap.Clear();
1641 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1642 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1643 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1644 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1645 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1646 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1647 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1648 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1649 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1650 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1651 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1653 return animationMap;
1656 Vector2 start1(-0.5f, 0.5f);
1657 Vector2 end1 (0.5f, -0.5f);
1658 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1659 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1660 Vector2 rotate_center1(1.0f, 0.4f);
1661 float rotate_amount1 = 2.0f;
1662 float offset1 = 1.f;
1664 Vector2 start2(-0.5f, -0.5f);
1665 Vector2 end2 (0.5f, 0.5f);
1666 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1667 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1668 Vector2 rotate_center2(1.0f, -0.4f);
1669 float rotate_amount2 = 1.0f;
1670 float offset2 = 3.f;
1672 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1673 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1674 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1676 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1677 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1678 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1679 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1680 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1681 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1682 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1684 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1685 DALI_TEST_CHECK( animatedGradientVisual );
1687 Property::Map resultMap;
1688 animatedGradientVisual.CreatePropertyMap( resultMap );
1690 // check the property values from the returned map from visual
1691 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1692 DALI_TEST_CHECK( value );
1693 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1695 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1696 DALI_TEST_CHECK( value );
1697 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1699 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1700 DALI_TEST_CHECK( value );
1701 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1703 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1704 DALI_TEST_CHECK( value );
1705 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1707 // If loop_count = 0, Animation doesn't created.
1708 // Optimized resultMap only have one value, which is target value
1709 // Note: target value will be changed by direction option.
1710 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1711 DALI_TEST_CHECK( value );
1712 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1714 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1715 DALI_TEST_CHECK( value );
1716 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1718 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1719 DALI_TEST_CHECK( value );
1720 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1722 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1723 DALI_TEST_CHECK( value );
1724 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1726 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1727 DALI_TEST_CHECK( value );
1728 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1730 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1731 DALI_TEST_CHECK( value );
1732 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1734 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1735 DALI_TEST_CHECK( value );
1736 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1743 int UtcDaliVisualAnimateBorderVisual01(void)
1745 ToolkitTestApplication application;
1746 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1748 VisualFactory factory = VisualFactory::Get();
1749 Property::Map propertyMap;
1750 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1751 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1752 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1753 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1754 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1757 map["target"] = "testVisual";
1758 map["property"] = "mixColor";
1759 map["targetValue"] = Vector4(1,1,1,0.1);
1760 map["animator"] = Property::Map()
1761 .Add("alphaFunction", "LINEAR")
1762 .Add("timePeriod", Property::Map()
1764 .Add("duration", 4.0f));
1766 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1768 DummyControl actor = DummyControl::New(true);
1769 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1770 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1771 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1772 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1773 application.GetScene().Add(actor);
1775 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1777 Renderer renderer = actor.GetRendererAt(0);
1778 Property::Index borderColorIndex = renderer.GetPropertyIndex( BorderVisual::Property::COLOR );
1779 Property::Index mixColorIndex = renderer.GetPropertyIndex( Visual::Property::MIX_COLOR );
1781 Animation animation = dummyImpl.CreateTransition( transition );
1783 // Animate the mix color through the transition, and the border color through
1784 // programmatic method.
1785 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1788 application.SendNotification();
1789 application.Render(0);
1790 application.Render(2000u); // halfway point between blue and white
1792 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1793 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1794 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1795 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1797 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1798 testColor = Vector4( 1,1,1,0.45f );
1799 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1800 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1803 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1804 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1806 application.Render(2000u);
1808 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1809 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1810 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1812 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1813 testColor = Vector4(1,1,1,0.1);
1814 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), TEST_LOCATION );
1815 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1817 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1818 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1824 int UtcDaliVisualAnimateBorderVisual02(void)
1826 ToolkitTestApplication application;
1827 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1829 VisualFactory factory = VisualFactory::Get();
1830 Property::Map propertyMap;
1831 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1832 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1833 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1834 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1836 DummyControl actor = DummyControl::New(true);
1837 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1838 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1839 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1840 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1841 application.GetScene().Add(actor);
1843 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1845 Renderer renderer = actor.GetRendererAt(0);
1846 Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE );
1848 Animation animation = Animation::New(4.0f);
1849 animation.AnimateTo( Property(renderer, index), 9.0f );
1852 application.SendNotification();
1853 application.Render(0);
1854 application.Render(2000u); // halfway point
1856 float size = renderer.GetCurrentProperty< float >( index );
1857 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1858 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1860 application.Render(2000u); // halfway point between blue and white
1862 size = renderer.GetCurrentProperty< float >( index );
1863 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1864 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1869 int UtcDaliVisualAnimateColorVisual(void)
1871 ToolkitTestApplication application;
1872 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1874 VisualFactory factory = VisualFactory::Get();
1875 Property::Map propertyMap;
1876 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1877 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1878 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1880 DummyControl actor = DummyControl::New(true);
1881 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1882 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1883 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1884 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1885 application.GetScene().Add(actor);
1887 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1889 Renderer renderer = actor.GetRendererAt(0);
1890 Property::Index mixColorIndex = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
1892 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1893 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1895 Animation animation = Animation::New(4.0f);
1896 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1899 application.SendNotification();
1900 application.Render(0);
1901 application.Render(2000u); // halfway point
1903 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1904 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1905 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1907 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1909 application.Render(2000u); // halfway point between blue and white
1911 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1912 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1914 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1916 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1917 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1922 int UtcDaliVisualAnimatePrimitiveVisual(void)
1924 ToolkitTestApplication application;
1925 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1928 VisualFactory factory = VisualFactory::Get();
1929 Property::Map propertyMap;
1930 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1931 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1932 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1933 Visual::Base visual = factory.CreateVisual( propertyMap );
1935 DummyControl actor = DummyControl::New(true);
1936 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1937 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1938 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1939 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1940 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
1941 application.GetScene().Add(actor);
1943 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1945 Renderer renderer = actor.GetRendererAt(0);
1946 Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::MIX_COLOR );
1948 tet_infoline("Test that the renderer has the Primitive mix color");
1949 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
1951 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
1952 const Vector4 TARGET_MIX_COLOR( Color::RED );
1955 map["target"] = "testVisual";
1956 map["property"] = "mixColor";
1957 map["initialValue"] = INITIAL_MIX_COLOR;
1958 map["targetValue"] = TARGET_MIX_COLOR;
1959 map["animator"] = Property::Map()
1960 .Add("alphaFunction", "LINEAR")
1961 .Add("timePeriod", Property::Map()
1963 .Add("duration", 4.0f));
1965 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1967 Animation animation = dummyImpl.CreateTransition( transition );
1968 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1971 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
1972 glAbstraction.EnableEnableDisableCallTrace( true );
1973 TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace();
1974 std::ostringstream blendStr;
1975 blendStr << GL_BLEND;
1977 application.SendNotification();
1978 application.Render(0);
1979 application.Render(2000u); // halfway point
1980 application.SendNotification();
1982 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
1983 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a )), true, TEST_LOCATION );
1984 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
1986 DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Enable", blendStr.str().c_str() ) );
1988 glEnableStack.Reset();
1990 application.Render(2001u); // go past end
1991 application.SendNotification(); // Trigger signals
1993 DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), Color::WHITE, TEST_LOCATION );
1994 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4( 1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a ) ), true, TEST_LOCATION );
1995 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
1997 DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Disable", blendStr.str().c_str() ) );
2005 int UtcDaliVisualAnimatedGradientVisual01(void)
2007 ToolkitTestApplication application;
2008 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
2011 VisualFactory factory = VisualFactory::Get();
2012 Property::Map propertyMap;
2013 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2014 Visual::Base visual = factory.CreateVisual( propertyMap );
2016 DummyControl actor = DummyControl::New(true);
2017 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2018 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2019 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2020 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2021 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2022 application.GetScene().Add(actor);
2024 application.SendNotification();
2025 application.Render(0);
2026 application.SendNotification();
2028 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2030 for(int step_iter = 0; step_iter < 3; step_iter++)
2032 application.SendNotification();
2033 application.Render(0);
2034 application.Render(750u); // step i/4
2035 application.SendNotification();
2037 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
2038 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
2039 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2040 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2041 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
2042 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
2043 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
2046 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2047 application.Render(750u); // go to end
2048 application.SendNotification();
2050 application.Render(10u); // finish
2051 application.SendNotification();
2054 application.SendNotification();
2055 application.Render(0u);
2056 application.SendNotification();
2062 int UtcDaliVisualAnimatedGradientVisual02(void)
2064 ToolkitTestApplication application;
2065 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2068 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
2069 int _direction[2] = {0, 1};
2070 int _loop_count[3] = {-1, 0, 1};
2071 int _motion[2] = {0, 1};
2072 int _easing[4] = {0, 1, 2, 3};
2074 int test_case_max = 4 * 2 * 3 * 2 * 4;
2076 int test_case_d = 7; // 7 is the number of animated properties.
2078 float _duration = 0.4f;
2079 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2080 float noise_maker = 0.0f;
2081 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2082 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2084 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2086 VisualFactory factory = VisualFactory::Get();
2087 Property::Map propertyMap;
2088 Property::Map animationMap;
2089 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2091 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2092 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2093 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2095 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&
2097 int tc = (test_case + tc_offset);
2098 int idx_easing = tc % 4; tc /= 4;
2099 int idx_motion = tc % 2; tc /= 2;
2100 int idx_loop_count = tc % 3; tc /= 3;
2101 int idx_direction = tc % 2; tc /= 2;
2102 int idx_delay = tc % 4; tc /= 4;
2104 float duration = _duration - _repeat_delay;
2105 float repeat_delay = _repeat_delay;
2106 float delay = _delay[idx_delay] * _duration;
2107 int direction = _direction[idx_direction];
2108 int loop_count = _loop_count[idx_loop_count];
2109 int motion = _motion[idx_motion];
2110 int easing = _easing[idx_easing];
2112 animationMap.Clear();
2113 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2114 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2115 if( direction == 0 )
2117 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2121 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2123 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2124 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2125 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2126 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2129 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2133 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2137 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2139 else if( easing == 1 )
2141 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2143 else if( easing == 2 )
2145 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2149 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2152 return animationMap;
2155 // Give different values for debuging
2156 noise_maker += 1.0f;
2157 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2158 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2159 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2160 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2161 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2162 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2163 float offset1 = 0.f + noise_maker * 0.1f;
2165 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2166 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2167 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2168 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2169 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2170 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2171 float offset2 = 2.f + noise_maker * 0.1f;
2173 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2174 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2175 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2177 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2178 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2179 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2180 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2181 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2182 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2183 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2185 Visual::Base visual = factory.CreateVisual( propertyMap );
2187 DummyControl actor = DummyControl::New( true );
2188 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2189 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2190 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2191 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2192 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2193 application.GetScene().Add(actor);
2195 application.SendNotification();
2196 application.Render( 0 );
2197 application.SendNotification();
2199 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2201 application.SendNotification();
2203 //Compare between CPU calculated value and Shader Visual calculated value
2204 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
2206 int tc = (test_case + tc_offset);
2207 int idx_easing = tc % 4; tc /= 4;
2208 int idx_motion = tc % 2; tc /= 2;
2209 int idx_loop_count = tc % 3; tc /= 3;
2210 int idx_direction = tc % 2; tc /= 2;
2211 int idx_delay = tc % 4; tc /= 4;
2213 float duration = _duration - _repeat_delay;
2214 float repeat_delay = _repeat_delay;
2215 float delay = _delay[idx_delay] * _duration;
2216 int direction = _direction[idx_direction];
2217 int loop_count = _loop_count[idx_loop_count];
2218 int motion = _motion[idx_motion];
2219 int easing = _easing[idx_easing];
2221 progress -= delay / _duration;
2223 Property::Value s = start;
2224 Property::Value t = target;
2225 if( direction == 1 )
2230 float x; ///< Animator progress value
2231 if( loop_count == 0 )
2235 else if( loop_count > 0 && progress + 0.01f > loop_count )
2237 x = ( motion == 0 ) ? 1.0f : 0.0f;
2241 if( progress < 0.0f )
2245 progress = fmodf( progress, 1.0f );
2246 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2251 x = progress * 2.0f;
2258 if( easing == 1 ) // EASE_IN
2262 else if( easing == 2 ) // EASE_OUT
2266 else if( easing == 3 ) // EASE_IN_OUT
2268 x = x * x * (3.0f - 2.0f * x);
2271 if( value_type == 0 ) // result type is Float
2275 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2276 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2277 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2279 else if( value_type == 1 ) // result type is Vector2
2283 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2284 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2285 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2287 else if( value_type == 2 ) // result type is Vector3
2291 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2292 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2293 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2295 else // result type is Vector4
2299 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2300 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2301 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2306 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2308 for( int step_iter = 0; step_iter < 3; step_iter++ )
2310 application.SendNotification();
2311 application.Render( _duration * 250.f ); // step i/4
2312 application.SendNotification();
2315 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2316 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2317 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2318 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2319 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2320 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2321 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2323 application.SendNotification();
2324 application.Render(_duration * 250.f); // step 4/4 will not test
2325 application.SendNotification();
2329 application.SendNotification();
2331 application.SendNotification();
2332 application.Render(10.f); // tempral time
2333 application.SendNotification();
2340 int UtcDaliVisualAnimatedGradientVisual03(void)
2342 ToolkitTestApplication application;
2343 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2346 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
2347 int _direction[2] = {0, 1};
2348 int _loop_count[3] = {-1, 0, 1};
2349 int _motion[2] = {0, 1};
2350 int _easing[4] = {0, 1, 2, 3};
2352 int test_case_max = 4 * 2 * 3 * 2 * 4;
2354 int test_case_d = 7; // 7 is the number of animated properties.
2356 float _duration = 0.4f;
2357 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2358 float noise_maker = 0.2f;
2359 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2360 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2362 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2364 VisualFactory factory = VisualFactory::Get();
2365 Property::Map propertyMap;
2366 Property::Map animationMap;
2367 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2369 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&
2371 int tc = (test_case + tc_offset);
2372 int idx_easing = tc % 4; tc /= 4;
2373 int idx_motion = tc % 2; tc /= 2;
2374 int idx_loop_count = tc % 3; tc /= 3;
2375 int idx_direction = tc % 2; tc /= 2;
2376 int idx_delay = tc % 4; tc /= 4;
2378 float duration = _duration - _repeat_delay;
2379 float repeat_delay = _repeat_delay;
2380 float delay = _delay[idx_delay] * _duration;
2381 int direction = _direction[idx_direction];
2382 int loop_count = _loop_count[idx_loop_count];
2383 int motion = _motion[idx_motion];
2384 int easing = _easing[idx_easing];
2386 animationMap.Clear();
2387 animationMap.Insert( "startValue", start );
2388 animationMap.Insert( "targetValue", target );
2389 if( direction == 0 )
2391 animationMap.Insert("directionType", "FORWARD");
2395 animationMap.Insert("directionType", "BACKWARD");
2397 animationMap.Insert("duration", duration);
2398 animationMap.Insert("delay", delay);
2399 animationMap.Insert("repeat", loop_count);
2400 animationMap.Insert("repeatDelay", repeat_delay);
2403 animationMap.Insert("motionType", "LOOP");
2407 animationMap.Insert("motionType", "MIRROR");
2411 animationMap.Insert("easingType", "LINEAR");
2413 else if( easing == 1 )
2415 animationMap.Insert("easingType", "IN");
2417 else if( easing == 2 )
2419 animationMap.Insert("easingType", "OUT");
2423 animationMap.Insert("easingType", "IN_OUT");
2426 return animationMap;
2429 // Give different values for debuging
2430 noise_maker += 0.8f;
2431 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2432 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2433 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2434 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2435 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2436 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2437 float offset1 = 0.f + noise_maker * 0.1f;
2439 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2440 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2441 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2442 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2443 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2444 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2445 float offset2 = 2.f + noise_maker * 0.1f;
2447 propertyMap.Insert("gradientType", "LINEAR");
2448 propertyMap.Insert("unitType", "USER_SPACE");
2449 propertyMap.Insert("spreadType", "CLAMP");
2451 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2452 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2453 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2454 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2455 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2456 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2457 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2459 Visual::Base visual = factory.CreateVisual( propertyMap );
2461 DummyControl actor = DummyControl::New( true );
2462 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2463 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2464 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2465 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2466 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2467 application.GetScene().Add(actor);
2469 application.SendNotification();
2470 application.Render( 0 );
2471 application.SendNotification();
2473 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2475 application.SendNotification();
2477 //Compare between CPU calculated value and Shader Visual calculated value
2478 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
2480 int tc = (test_case + tc_offset);
2481 int idx_easing = tc % 4; tc /= 4;
2482 int idx_motion = tc % 2; tc /= 2;
2483 int idx_loop_count = tc % 3; tc /= 3;
2484 int idx_direction = tc % 2; tc /= 2;
2485 int idx_delay = tc % 4; tc /= 4;
2487 float duration = _duration - _repeat_delay;
2488 float repeat_delay = _repeat_delay;
2489 float delay = _delay[idx_delay] * _duration;
2490 int direction = _direction[idx_direction];
2491 int loop_count = _loop_count[idx_loop_count];
2492 int motion = _motion[idx_motion];
2493 int easing = _easing[idx_easing];
2495 progress -= delay / _duration;
2497 Property::Value s = start;
2498 Property::Value t = target;
2499 if( direction == 1 )
2504 float x; ///< Animator progress value
2505 if( loop_count == 0 )
2509 else if( loop_count > 0 && progress + 0.01f > loop_count )
2511 x = ( motion == 0 ) ? 1.0f : 0.0f;
2515 if( progress < 0.0f )
2519 progress = fmodf( progress, 1.0f );
2520 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2525 x = progress * 2.0f;
2532 if( easing == 1 ) // EASE_IN
2536 else if( easing == 2 ) // EASE_OUT
2540 else if( easing == 3 ) // EASE_IN_OUT
2542 x = x * x * (3.0f - 2.0f * x);
2545 if( value_type == 0 ) // result type is Float
2549 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2550 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2551 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2553 else if( value_type == 1 ) // result type is Vector2
2557 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2558 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2559 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2561 else if( value_type == 2 ) // result type is Vector3
2565 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2566 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2567 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2569 else // result type is Vector4
2573 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2574 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2575 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2580 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2582 for( int step_iter = 0; step_iter < 3; step_iter++ )
2584 application.SendNotification();
2585 application.Render( _duration * 250.f ); // step i/4
2586 application.SendNotification();
2589 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2590 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2591 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2592 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2593 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2594 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2595 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2597 application.SendNotification();
2598 application.Render(_duration * 250.f); // step 4/4 will not test
2599 application.SendNotification();
2603 application.SendNotification();
2605 application.SendNotification();
2606 application.Render(10.f); // tempral time
2607 application.SendNotification();
2614 int UtcDaliVisualWireframeVisual(void)
2616 ToolkitTestApplication application;
2618 VisualFactory factory = VisualFactory::Get();
2619 Property::Map propertyMap;
2620 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2622 // Create the visual.
2623 Visual::Base visual = factory.CreateVisual( propertyMap );
2625 DALI_TEST_CHECK( visual );
2627 Property::Map resultMap;
2628 visual.CreatePropertyMap( resultMap );
2630 // Check the property values from the returned map from visual
2631 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2632 DALI_TEST_CHECK( value );
2633 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2638 int UtcDaliVisualGetTransform(void)
2640 ToolkitTestApplication application;
2641 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2643 VisualFactory factory = VisualFactory::Get();
2644 Property::Map propertyMap;
2645 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2646 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2647 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2649 Dali::Property::Map visualMap;
2650 colorVisual.CreatePropertyMap( visualMap );
2651 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2652 Dali::Property::Map* map = value->GetMap();
2653 DALI_TEST_CHECK( map );
2655 //Test default values
2657 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2658 DALI_TEST_CHECK( typeValue );
2659 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2662 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2663 DALI_TEST_CHECK( typeValue );
2664 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2667 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2668 DALI_TEST_CHECK( typeValue );
2669 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2672 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2673 DALI_TEST_CHECK( typeValue );
2674 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2677 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2678 DALI_TEST_CHECK( typeValue );
2679 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2682 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2683 DALI_TEST_CHECK( typeValue );
2684 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2687 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2688 DALI_TEST_CHECK( typeValue );
2689 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2695 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2697 Property::Map transform;
2698 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2699 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2700 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2701 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2702 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2703 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(50.0f, 50.0f) );
2705 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2707 Dali::Property::Map visualMap;
2708 visual.CreatePropertyMap( visualMap );
2709 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2710 Dali::Property::Map* map = value->GetMap();
2711 DALI_TEST_CHECK( map );
2714 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2715 DALI_TEST_CHECK( typeValue );
2716 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2719 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2720 DALI_TEST_CHECK( typeValue );
2721 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2724 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2725 DALI_TEST_CHECK( typeValue );
2726 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2729 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2730 DALI_TEST_CHECK( typeValue );
2731 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2734 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2735 DALI_TEST_CHECK( typeValue );
2736 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2739 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2740 DALI_TEST_CHECK( typeValue );
2741 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2744 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2745 DALI_TEST_CHECK( typeValue );
2746 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(50.0f,50.0f), TEST_LOCATION );
2749 //Put the visual on the stage
2750 DummyControl actor = DummyControl::New(true);
2751 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2752 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2753 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2754 application.GetScene().Add(actor);
2756 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2757 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2759 application.SendNotification();
2760 application.Render(0);
2761 Renderer renderer( actor.GetRendererAt(0) );
2763 //Check that the properties have been registered on the Renderer
2764 Property::Index index = renderer.GetPropertyIndex( "offset" );
2765 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2766 Vector2 offset = renderer.GetProperty<Vector2>( index );
2767 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2769 index = renderer.GetPropertyIndex( "size" );
2770 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2771 Vector2 size = renderer.GetProperty<Vector2>( index );
2772 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2774 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2775 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2776 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2777 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2779 index = renderer.GetPropertyIndex( "origin" );
2780 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2781 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2782 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2784 index = renderer.GetPropertyIndex( "anchorPoint" );
2785 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2786 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2787 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2789 index = renderer.GetPropertyIndex( "extraSize" );
2790 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2791 Vector2 extraSize = renderer.GetProperty<Vector2>( index );
2792 DALI_TEST_EQUALS( extraSize, Vector2(50.0f,50.0f), TEST_LOCATION );
2794 //Set a new transform
2796 transform = DefaultTransform();
2797 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2798 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2799 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2800 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(0.5f, 0.5f) );
2801 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2802 application.SendNotification();
2803 application.Render(0);
2805 //Check that the values have changed in the renderer
2806 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2807 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2809 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2810 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2812 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2813 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2815 //Parent origin and anchor point should have the default values
2816 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2817 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2819 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2820 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2822 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
2823 DALI_TEST_EQUALS( extraSize, Vector2(0.5f,0.5f), TEST_LOCATION );
2826 int UtcDaliVisualSetTransform01(void)
2828 ToolkitTestApplication application;
2829 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2831 VisualFactory factory = VisualFactory::Get();
2832 Property::Map propertyMap;
2833 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2834 propertyMap.Insert(Visual::Property::OPACITY, 0.5f);
2835 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2836 Visual::Base visual = factory.CreateVisual( propertyMap );
2837 TestTransform( application, visual );
2838 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2843 int UtcDaliVisualSetTransform0(void)
2845 ToolkitTestApplication application;
2846 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2848 VisualFactory factory = VisualFactory::Get();
2849 Property::Map propertyMap;
2850 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2851 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2852 Visual::Base visual = factory.CreateVisual( propertyMap );
2853 TestTransform( application, visual );
2854 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2859 int UtcDaliVisualSetTransform1(void)
2861 ToolkitTestApplication application;
2862 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2864 VisualFactory factory = VisualFactory::Get();
2865 Property::Map propertyMap;
2866 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2867 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2868 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2869 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2870 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2871 Visual::Base visual = factory.CreateVisual( propertyMap );
2872 TestTransform( application, visual );
2873 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2878 int UtcDaliVisualSetTransform2(void)
2880 ToolkitTestApplication application;
2881 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2883 VisualFactory factory = VisualFactory::Get();
2884 Property::Map propertyMap;
2885 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2886 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2888 Property::Array stopOffsets;
2889 stopOffsets.PushBack( 0.0f );
2890 stopOffsets.PushBack( 0.3f );
2891 stopOffsets.PushBack( 0.6f );
2892 stopOffsets.PushBack( 0.8f );
2893 stopOffsets.PushBack( 1.0f );
2894 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2896 Property::Array stopColors;
2897 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2898 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2899 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2900 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2901 stopColors.PushBack( Color::YELLOW );
2902 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2903 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2904 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2905 Visual::Base visual = factory.CreateVisual( propertyMap );
2906 TestTransform( application, visual );
2907 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2912 int UtcDaliVisualSetTransform3(void)
2914 ToolkitTestApplication application;
2915 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2917 VisualFactory factory = VisualFactory::Get();
2918 Property::Map propertyMap;
2919 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2920 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2921 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2922 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2923 Visual::Base visual = factory.CreateVisual( propertyMap );
2924 TestTransform( application, visual );
2925 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2930 int UtcDaliVisualSetTransform4(void)
2932 ToolkitTestApplication application;
2933 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2935 VisualFactory factory = VisualFactory::Get();
2936 Property::Map propertyMap;
2937 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2938 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2940 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2941 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2942 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2943 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2944 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2945 Visual::Base visual = factory.CreateVisual( propertyMap );
2946 TestTransform( application, visual );
2947 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2952 int UtcDaliVisualSetTransform5(void)
2954 ToolkitTestApplication application;
2955 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
2957 VisualFactory factory = VisualFactory::Get();
2958 Property::Map propertyMap;
2959 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2960 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
2961 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
2962 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
2963 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
2964 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
2965 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
2966 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2967 Visual::Base visual = factory.CreateVisual(propertyMap);
2968 TestTransform( application, visual );
2969 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
2974 int UtcDaliVisualSetTransform6(void)
2976 ToolkitTestApplication application;
2977 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
2979 VisualFactory factory = VisualFactory::Get();
2980 Property::Map propertyMap;
2981 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2982 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
2983 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2984 Visual::Base visual = factory.CreateVisual(propertyMap);
2985 TestTransform( application, visual );
2986 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2991 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
2993 ToolkitTestApplication application;
2994 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
2996 VisualFactory factory = VisualFactory::Get();
2997 Property::Map propertyMap;
2998 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2999 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3000 Visual::Base visual = factory.CreateVisual( propertyMap );
3002 Property::Map transform;
3003 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
3005 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
3007 visual.SetTransformAndSize( transform, Vector2(100, 100) );
3009 Dali::Property::Map visualMap;
3010 visual.CreatePropertyMap( visualMap );
3011 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
3012 Dali::Property::Map* map = value->GetMap();
3013 DALI_TEST_CHECK( map );
3016 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
3017 DALI_TEST_CHECK( typeValue );
3018 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
3021 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
3022 DALI_TEST_CHECK( typeValue );
3023 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
3029 int UtcDaliNPatchVisualCustomShader(void)
3031 ToolkitTestApplication application;
3032 tet_infoline( "NPatchVisual with custom shader" );
3034 VisualFactory factory = VisualFactory::Get();
3035 Property::Map properties;
3036 Property::Map shader;
3037 const std::string vertexShader = "Foobar";
3038 const std::string fragmentShader = "Foobar";
3039 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3040 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3042 Property::Map transformMap;
3043 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
3044 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
3045 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
3046 transformMap["anchorPoint"] = Align::CENTER;
3047 transformMap["origin"] = Align::CENTER;
3048 transformMap["extraSize"] = Vector2( 0.0f, 50.0f );
3049 properties[Visual::Property::TRANSFORM] = transformMap;
3051 properties[Visual::Property::TYPE] = Visual::IMAGE;
3052 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
3053 properties[Visual::Property::SHADER]=shader;
3054 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3055 properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3057 Visual::Base visual = factory.CreateVisual( properties );
3058 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
3060 // trigger creation through setting on stage
3061 DummyControl dummy = DummyControl::New(true);
3062 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3063 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3064 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
3065 dummy.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
3066 dummy.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
3067 application.GetScene().Add(dummy);
3068 application.SendNotification();
3070 Renderer renderer = dummy.GetRendererAt( 0 );
3071 Shader shader2 = renderer.GetShader();
3072 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3073 Property::Map* map = value.GetMap();
3074 DALI_TEST_CHECK( map );
3076 Property::Index index = renderer.GetPropertyIndex("size");
3077 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
3079 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3080 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
3082 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3083 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
3085 Vector2 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
3086 DALI_TEST_EQUALS( extraSize, Vector2(0.0f, 50.0f), TEST_LOCATION );
3091 int UtcDaliGradientVisualBlendMode(void)
3093 ToolkitTestApplication application;
3094 VisualFactory factory = VisualFactory::Get();
3096 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3097 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3098 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3099 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3100 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3101 .Add( Color::GREEN ) ) );
3103 Visual::Base alphaGradientVisual = factory.CreateVisual(
3104 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3105 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3106 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3107 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3108 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
3110 DummyControl control = DummyControl::New(true);
3111 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3112 application.GetScene().Add( control );
3114 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
3115 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
3116 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
3118 application.SendNotification();
3119 application.Render();
3121 // Control should have two renderers, the first one is opaque so our blending mode should be off, the second one has some alpha so should be set to automatic
3122 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
3123 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
3124 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
3129 int UtcDaliVisualRendererRemovalAndReAddition(void)
3131 ToolkitTestApplication application;
3132 tet_infoline( "UtcDaliVisualRendererRemoval" );
3134 VisualFactory factory = VisualFactory::Get();
3135 Property::Map propertyMap;
3136 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3137 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3138 Visual::Base visual = factory.CreateVisual( propertyMap );
3140 visual.SetDepthIndex( 1 );
3142 DummyControl dummyControl = DummyControl::New(true);
3143 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3144 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3145 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3147 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3148 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
3150 application.GetScene().Add( dummyControl );
3152 application.SendNotification();
3153 application.Render();
3155 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3157 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
3158 application.GetScene().Remove( dummyControl );
3159 application.SendNotification();
3160 application.Render();
3162 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3164 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
3166 application.GetScene().Add( dummyControl );
3168 application.SendNotification();
3169 application.Render();
3171 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3178 int UtcDaliVisualTextVisualRender(void)
3180 ToolkitTestApplication application;
3181 tet_infoline( "UtcDaliVisualTextVisualRender" );
3183 VisualFactory factory = VisualFactory::Get();
3184 Property::Map propertyMap;
3185 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3186 propertyMap.Insert( "mixColor", Color::WHITE );
3187 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
3188 propertyMap.Insert( "enableMarkup", false );
3189 propertyMap.Insert( "text", "Hello world" );
3190 propertyMap.Insert( "fontFamily", "TizenSans" );
3192 Property::Map fontStyleMapSet;
3193 fontStyleMapSet.Insert( "weight", "bold" );
3194 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3196 propertyMap.Insert( "pointSize", 12.f );
3197 propertyMap.Insert( "multiLine", true );
3198 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3199 propertyMap.Insert( "verticalAlignment", "CENTER" );
3200 propertyMap.Insert( "textColor", Color::RED );
3201 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3202 textVisual.SetDepthIndex( 1 );
3204 DummyControl dummyControl = DummyControl::New(true);
3205 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3206 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3207 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3209 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3210 dummyControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3212 application.GetScene().Add( dummyControl );
3213 application.SendNotification();
3214 application.Render();
3217 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3218 propertyMap.Clear();
3219 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3220 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3221 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3222 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3224 Property::Map transformMap;
3225 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3226 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3228 textVisual = factory.CreateVisual( propertyMap );
3229 textVisual.SetDepthIndex( 1 );
3231 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3232 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 720.f, 640.f ) );
3234 application.SendNotification(); // force process events to ensure text visual
3235 // adds renderer to the dummy control in OnRelayout
3236 application.Render();
3238 Renderer renderer = dummyControl.GetRendererAt(0u);
3239 Property::Index index = renderer.GetPropertyIndex("size");
3241 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3242 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3247 int UtcDaliVisualTextVisualDisableEnable(void)
3249 ToolkitTestApplication application;
3250 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3252 VisualFactory factory = VisualFactory::Get();
3253 Property::Map propertyMap;
3254 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3255 propertyMap.Insert( "mixColor", Color::WHITE );
3256 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
3257 propertyMap.Insert( "enableMarkup", false );
3258 propertyMap.Insert( "text", "Hello world" );
3259 propertyMap.Insert( "fontFamily", "TizenSans" );
3261 Property::Map fontStyleMapSet;
3262 fontStyleMapSet.Insert( "weight", "bold" );
3263 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3265 propertyMap.Insert( "pointSize", 12.f );
3266 propertyMap.Insert( "multiLine", true );
3267 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3268 propertyMap.Insert( "verticalAlignment", "CENTER" );
3269 propertyMap.Insert( "textColor", Color::RED );
3270 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3271 textVisual.SetDepthIndex( 1 );
3273 DummyControl dummyControl = DummyControl::New(true);
3274 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3275 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3276 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3278 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3279 dummyControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3281 application.GetScene().Add( dummyControl );
3282 application.SendNotification();
3283 application.Render();
3285 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3287 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3289 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3291 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3293 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3298 int UtcDaliVisualPremultipliedAlpha(void)
3300 ToolkitTestApplication application;
3301 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3303 VisualFactory factory = VisualFactory::Get();
3305 // image visual, test default value ( true )
3307 Visual::Base imageVisual = factory.CreateVisual(
3309 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3310 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3312 Dali::Property::Map visualMap;
3313 imageVisual.CreatePropertyMap( visualMap );
3314 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3317 DALI_TEST_CHECK( value );
3318 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3321 // image visual, override premultiplied
3323 Visual::Base imageVisual = factory.CreateVisual(
3325 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3326 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3327 .Add( Visual::Property::PREMULTIPLIED_ALPHA, false ) );
3329 Dali::Property::Map visualMap;
3330 imageVisual.CreatePropertyMap( visualMap );
3331 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3334 DALI_TEST_CHECK( value );
3335 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION);
3338 // svg visual ( premultiplied alpha by default is true )
3340 Visual::Base imageVisual = factory.CreateVisual(
3342 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3343 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3345 Dali::Property::Map visualMap;
3346 imageVisual.CreatePropertyMap( visualMap );
3347 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3350 DALI_TEST_CHECK( value );
3351 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3357 int UtcDaliRegisterVisualOrder(void)
3359 ToolkitTestApplication application;
3360 tet_infoline( "Register Visual Order" );
3362 DummyControl dummyControl = DummyControl::New(true);
3363 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3365 VisualFactory factory = VisualFactory::Get();
3366 Property::Map propertyMap;
3367 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3368 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3370 tet_infoline( "Register visual, should have depth index of 0.0f" );
3371 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3372 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3373 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3375 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3377 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3378 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3379 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3381 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3382 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3383 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3385 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3386 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3387 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3389 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3390 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3391 labelVisual.SetDepthIndex( -2000 );
3392 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3393 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3395 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3396 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3397 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3398 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3399 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3400 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3402 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3403 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3404 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3405 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3406 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3408 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3409 application.GetScene().Add( dummyControl );
3414 int UtcDaliRegisterVisualOrder02(void)
3416 ToolkitTestApplication application;
3417 tet_infoline( "Register Visual Order with Background Set" );
3419 DummyControl dummyControl = DummyControl::New(true);
3420 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3422 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3424 VisualFactory factory = VisualFactory::Get();
3425 Property::Map propertyMap;
3426 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3427 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3429 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3431 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3433 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3434 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3435 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3436 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3437 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3439 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3440 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3441 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3442 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3444 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3445 application.GetScene().Add( dummyControl );
3450 int UtcDaliRegisterVisualWithDepthIndex(void)
3452 ToolkitTestApplication application;
3453 tet_infoline( "Register a Visual With Depth Index" );
3455 DummyControl dummyControl = DummyControl::New(true);
3456 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3458 VisualFactory factory = VisualFactory::Get();
3459 Property::Map propertyMap;
3460 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3461 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3463 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3464 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3465 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3466 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3467 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3469 tet_infoline( "Register another visual with a depth index and it disabled" );
3470 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3471 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3472 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3473 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3475 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3476 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3477 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3478 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3479 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3481 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3482 application.GetScene().Add( dummyControl );
3487 int UtcDaliColorVisualRenderIfTransparentProperty(void)
3489 ToolkitTestApplication application;
3490 tet_infoline( "Test the renderIfTransparent property of ColorVisual" );
3492 VisualFactory factory = VisualFactory::Get();
3493 Property::Map propertyMap;
3494 propertyMap.Insert( Visual::Property::TYPE, Visual::COLOR );
3495 propertyMap.Insert( ColorVisual::Property::MIX_COLOR, Color::BLUE );
3497 tet_infoline( "Check default value" );
3499 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3500 Property::Map returnedMap;
3501 testVisual.CreatePropertyMap( returnedMap );
3503 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3504 DALI_TEST_CHECK( renderIfTransparentProperty );
3505 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3508 propertyMap.Insert( DevelColorVisual::Property::RENDER_IF_TRANSPARENT, true );
3510 tet_infoline( "Ensure set to value required" );
3512 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3513 Property::Map returnedMap;
3514 testVisual.CreatePropertyMap( returnedMap );
3516 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3517 DALI_TEST_CHECK( renderIfTransparentProperty );
3518 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), true, TEST_LOCATION );
3521 propertyMap[ DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = Color::BLUE;
3523 tet_infoline( "Ensure it returns default value if set to wrong type" );
3525 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3526 Property::Map returnedMap;
3527 testVisual.CreatePropertyMap( returnedMap );
3529 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3530 DALI_TEST_CHECK( renderIfTransparentProperty );
3531 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3537 int UtcDaliSvgVisualCustomShader(void)
3539 ToolkitTestApplication application;
3540 tet_infoline( "SvgVisual with custom shader" );
3542 VisualFactory factory = VisualFactory::Get();
3543 Property::Map properties;
3544 Property::Map shader;
3545 const std::string vertexShader = "Foobar";
3546 const std::string fragmentShader = "Foobar";
3547 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3548 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3550 properties[Visual::Property::TYPE] = Visual::IMAGE;
3551 properties[Visual::Property::SHADER] = shader;
3552 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3554 Visual::Base visual = factory.CreateVisual( properties );
3556 // trigger creation through setting on stage
3557 DummyControl dummy = DummyControl::New( true );
3558 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3559 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3561 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3562 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3563 application.GetScene().Add( dummy );
3565 application.SendNotification();
3566 application.Render();
3568 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3570 Renderer renderer = dummy.GetRendererAt( 0 );
3571 Shader shader2 = renderer.GetShader();
3572 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3573 Property::Map* map = value.GetMap();
3574 DALI_TEST_CHECK( map );
3576 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3577 DALI_TEST_EQUALS( fragmentShader, fragment->Get< std::string >(), TEST_LOCATION );
3579 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3580 DALI_TEST_EQUALS( vertexShader, vertex->Get< std::string >(), TEST_LOCATION );
3585 int UtcDaliVisualRoundedCorner(void)
3587 ToolkitTestApplication application;
3588 tet_infoline( "UtcDaliVisualRoundedCorner" );
3592 VisualFactory factory = VisualFactory::Get();
3593 Property::Map properties;
3594 float cornerRadius = 30.0f;
3596 properties[Visual::Property::TYPE] = Visual::IMAGE;
3597 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3598 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3600 Visual::Base visual = factory.CreateVisual( properties );
3602 // trigger creation through setting on stage
3603 DummyControl dummy = DummyControl::New( true );
3604 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3605 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3607 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3608 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3609 application.GetScene().Add( dummy );
3611 application.SendNotification();
3612 application.Render();
3614 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3616 application.SendNotification();
3617 application.Render();
3619 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3624 VisualFactory factory = VisualFactory::Get();
3625 Property::Map properties;
3626 float cornerRadius = 30.0f;
3628 properties[Visual::Property::TYPE] = Visual::COLOR;
3629 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3630 properties["cornerRadius"] = cornerRadius;
3631 properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
3633 Visual::Base visual = factory.CreateVisual( properties );
3635 // trigger creation through setting on stage
3636 DummyControl dummy = DummyControl::New( true );
3637 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3638 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3640 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3641 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3642 application.GetScene().Add( dummy );
3644 application.SendNotification();
3645 application.Render();
3647 application.SendNotification();
3648 application.Render();
3650 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3651 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3656 VisualFactory factory = VisualFactory::Get();
3657 Property::Map properties;
3658 float cornerRadius = 0.5f;
3660 properties[Visual::Property::TYPE] = Visual::COLOR;
3661 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3662 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3663 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
3665 Visual::Base visual = factory.CreateVisual( properties );
3667 // trigger creation through setting on stage
3668 DummyControl dummy = DummyControl::New( true );
3669 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3670 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3672 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3673 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3674 application.GetScene().Add( dummy );
3676 application.SendNotification();
3677 application.Render();
3679 application.SendNotification();
3680 application.Render();
3682 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3683 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION );
3686 // color visual 3 - invalid value
3688 VisualFactory factory = VisualFactory::Get();
3689 Property::Map properties;
3690 float cornerRadius = 30.0f;
3692 properties[Visual::Property::TYPE] = Visual::COLOR;
3693 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3694 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3695 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = -1; // Set an invalid value
3697 Visual::Base visual = factory.CreateVisual( properties );
3699 // trigger creation through setting on stage
3700 DummyControl dummy = DummyControl::New( true );
3701 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3702 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3704 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3705 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3706 application.GetScene().Add( dummy );
3708 application.SendNotification();
3709 application.Render();
3711 application.SendNotification();
3712 application.Render();
3714 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3715 // Default corner radius policy is absolute.
3716 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3721 VisualFactory factory = VisualFactory::Get();
3722 Property::Map properties;
3723 float cornerRadius = 30.0f;
3725 properties[Visual::Property::TYPE] = Visual::GRADIENT;
3726 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3727 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3728 properties[GradientVisual::Property::START_POSITION] = Vector2( 0.5f, 0.5f );
3729 properties[GradientVisual::Property::END_POSITION] = Vector2( -0.5f, -0.5f );
3730 properties[GradientVisual::Property::UNITS] = GradientVisual::Units::USER_SPACE;
3732 Property::Array stopOffsets;
3733 stopOffsets.PushBack( 0.0f );
3734 stopOffsets.PushBack( 0.6f );
3735 stopOffsets.PushBack( 1.0f );
3736 properties[GradientVisual::Property::STOP_OFFSET] = stopOffsets;
3738 Property::Array stopColors;
3739 stopColors.PushBack( Color::RED );
3740 stopColors.PushBack( Color::YELLOW );
3741 stopColors.PushBack( Color::GREEN );
3742 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
3744 Visual::Base visual = factory.CreateVisual( properties );
3746 // trigger creation through setting on stage
3747 DummyControl dummy = DummyControl::New( true );
3748 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3749 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3751 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3752 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3753 application.GetScene().Add( dummy );
3755 application.SendNotification();
3756 application.Render();
3758 application.SendNotification();
3759 application.Render();
3761 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3767 int UtcDaliColorVisualBlurRadius(void)
3769 ToolkitTestApplication application;
3770 tet_infoline( "UtcDaliColorVisualBlurRadius" );
3772 VisualFactory factory = VisualFactory::Get();
3773 Property::Map properties;
3774 float blurRadius = 20.0f;
3776 properties[Visual::Property::TYPE] = Visual::COLOR;
3777 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3778 properties["blurRadius"] = blurRadius;
3780 Visual::Base visual = factory.CreateVisual( properties );
3782 // trigger creation through setting on stage
3783 DummyControl dummy = DummyControl::New( true );
3784 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3785 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3787 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3788 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3789 application.GetScene().Add( dummy );
3791 application.SendNotification();
3792 application.Render();
3794 application.SendNotification();
3795 application.Render();
3797 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "blurRadius", blurRadius ), true, TEST_LOCATION );
3802 int UtcDaliVisualGetType(void)
3804 ToolkitTestApplication application;
3805 tet_infoline( "UtcDaliVisualGetType" );
3807 VisualFactory factory = VisualFactory::Get();
3810 Property::Map properties;
3811 properties[Visual::Property::TYPE] = Visual::BORDER;
3812 Visual::Base visual = factory.CreateVisual( properties );
3814 DALI_TEST_CHECK( visual.GetType() == Visual::BORDER );
3818 Property::Map properties;
3819 properties[Visual::Property::TYPE] = Visual::COLOR;
3820 Visual::Base visual = factory.CreateVisual( properties );
3822 DALI_TEST_CHECK( visual.GetType() == Visual::COLOR );
3826 Property::Map properties;
3827 properties[Visual::Property::TYPE] = Visual::GRADIENT;
3828 properties[GradientVisual::Property::START_POSITION] = Vector2( -1.f, -1.f );
3829 properties[GradientVisual::Property::END_POSITION] = Vector2( 1.f, 1.f );
3830 properties[GradientVisual::Property::STOP_OFFSET] = Vector2(0.f, 1.f);
3831 // propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
3832 Property::Array stopColors;
3833 stopColors.PushBack( Color::RED );
3834 stopColors.PushBack( Color::GREEN );
3835 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
3836 Visual::Base visual = factory.CreateVisual( properties );
3838 DALI_TEST_CHECK( visual.GetType() == Visual::GRADIENT );
3842 Property::Map properties;
3843 properties[Visual::Property::TYPE] = Visual::IMAGE;
3844 properties.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
3845 Visual::Base visual = factory.CreateVisual( properties );
3847 DALI_TEST_CHECK( visual.GetType() == Visual::IMAGE );
3851 Property::Map properties;
3852 properties[Visual::Property::TYPE] = Visual::MESH;
3853 Visual::Base visual = factory.CreateVisual( properties );
3855 DALI_TEST_CHECK( visual.GetType() == Visual::MESH );
3859 Property::Map properties;
3860 properties[Visual::Property::TYPE] = Visual::PRIMITIVE;
3861 properties[PrimitiveVisual::Property::SHAPE] = PrimitiveVisual::Shape::CUBE;
3862 Visual::Base visual = factory.CreateVisual( properties );
3864 DALI_TEST_CHECK( visual.GetType() == Visual::PRIMITIVE );
3868 Property::Map properties;
3869 properties[Visual::Property::TYPE] = Visual::WIREFRAME;
3870 Visual::Base visual = factory.CreateVisual( properties );
3872 DALI_TEST_CHECK( visual.GetType() == Visual::WIREFRAME );
3876 Property::Map properties;
3877 properties[Visual::Property::TYPE] = Visual::TEXT;
3878 Visual::Base visual = factory.CreateVisual( properties );
3880 DALI_TEST_CHECK( visual.GetType() == Visual::TEXT );
3884 Property::Map properties;
3885 properties[Visual::Property::TYPE] = Visual::N_PATCH;
3886 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3887 Visual::Base visual = factory.CreateVisual( properties );
3889 DALI_TEST_CHECK( visual.GetType() == Visual::N_PATCH );
3893 Property::Map properties;
3894 properties[Visual::Property::TYPE] = Visual::SVG;
3895 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3896 Visual::Base visual = factory.CreateVisual( properties );
3898 DALI_TEST_CHECK( visual.GetType() == Visual::SVG );
3902 Property::Map properties;
3903 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
3904 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
3905 Visual::Base visual = factory.CreateVisual( properties );
3907 DALI_TEST_CHECK( visual.GetType() == Visual::ANIMATED_IMAGE );
3911 Property::Map properties;
3912 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_GRADIENT;
3913 Visual::Base visual = factory.CreateVisual( properties );
3915 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ANIMATED_GRADIENT ) );
3919 Property::Map properties;
3920 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
3921 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
3922 Visual::Base visual = factory.CreateVisual( properties );
3924 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ANIMATED_VECTOR_IMAGE ) );
3928 Property::Map properties;
3929 properties[Visual::Property::TYPE] = DevelVisual::ARC;
3930 Visual::Base visual = factory.CreateVisual( properties );
3932 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ARC ) );
3938 int UtcDaliVisualGetVisualProperty01(void)
3940 ToolkitTestApplication application;
3941 tet_infoline( "UtcDaliVisualGetVisualProperty01: Test animatable property, Visual::Base, ColorVisual" );
3943 VisualFactory factory = VisualFactory::Get();
3944 Property::Map propertyMap;
3945 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3946 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
3947 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 10.0f);
3948 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE);
3949 propertyMap.Insert(DevelColorVisual::Property::BLUR_RADIUS, 20.0f);
3950 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
3952 DummyControl dummyControl = DummyControl::New(true);
3953 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3954 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
3955 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
3956 application.GetScene().Add(dummyControl);
3958 application.SendNotification();
3959 application.Render();
3961 Vector3 targetColor(1.0f, 1.0f, 1.0f);
3962 Vector2 targetOffset(0.05f, 0.05f);
3963 Vector2 targetSize(1.1f, 1.1f);
3964 float targetOpacity = 0.5f;
3965 float targetCornerRadius = 20.0f;
3966 float targetBlurRadius = 10.0f;
3968 Animation animation = Animation::New(1.0f);
3969 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::MIX_COLOR), targetColor);
3970 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
3971 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Transform::Property::OFFSET), targetOffset);
3972 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Transform::Property::SIZE), targetSize);
3973 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
3974 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelColorVisual::Property::BLUR_RADIUS), targetBlurRadius);
3977 application.SendNotification();
3978 application.Render();
3979 application.Render(1001u); // End of animation
3981 Property::Map resultMap;
3982 colorVisual.CreatePropertyMap( resultMap );
3984 // Test property values: they should be updated
3985 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
3986 DALI_TEST_CHECK(colorValue);
3987 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetColor.r, targetColor.g, targetColor.b, targetOpacity), TEST_LOCATION);
3989 Property::Value* transformValue = resultMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
3990 Dali::Property::Map* transformMap = transformValue->GetMap();
3991 DALI_TEST_CHECK(transformMap);
3993 Property::Value* offsetValue = transformMap->Find(Toolkit::Visual::Transform::Property::OFFSET);
3994 DALI_TEST_CHECK(offsetValue);
3995 DALI_TEST_EQUALS(offsetValue->Get<Vector2>(), targetOffset, TEST_LOCATION);
3997 Property::Value* sizeValue = transformMap->Find(Toolkit::Visual::Transform::Property::SIZE);
3998 DALI_TEST_CHECK(sizeValue);
3999 DALI_TEST_EQUALS(sizeValue->Get<Vector2>(), targetSize, TEST_LOCATION);
4001 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT);
4002 DALI_TEST_CHECK(cornerRadiusValue);
4003 DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION);
4005 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
4006 DALI_TEST_CHECK(blurRadiusValue);
4007 DALI_TEST_EQUALS(blurRadiusValue->Get< float >(), targetBlurRadius, TEST_LOCATION);
4009 // Test uniform values
4010 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", targetColor), true, TEST_LOCATION);
4011 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("offset", targetOffset), true, TEST_LOCATION);
4012 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("size", targetSize), true, TEST_LOCATION);
4013 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
4014 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", targetBlurRadius), true, TEST_LOCATION);
4016 // Test not-supported property
4017 Property property1 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::PREMULTIPLIED_ALPHA);
4018 DALI_TEST_CHECK(!property1.object);
4019 DALI_TEST_CHECK(property1.propertyIndex == Property::INVALID_INDEX);
4021 // Test not-supported property
4022 Property property2 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelColorVisual::Property::RENDER_IF_TRANSPARENT);
4023 DALI_TEST_CHECK(!property2.object);
4024 DALI_TEST_CHECK(property2.propertyIndex == Property::INVALID_INDEX);
4026 // Test unregistered visual
4027 Property property3 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL2, Visual::Property::MIX_COLOR);
4028 DALI_TEST_CHECK(!property3.object);
4029 DALI_TEST_CHECK(property3.propertyIndex == Property::INVALID_INDEX);
4031 // Test after the control is unparented
4032 dummyControl.Unparent();
4034 Property property4 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::MIX_COLOR);
4035 DALI_TEST_CHECK(!property4.object);
4036 DALI_TEST_CHECK(property4.propertyIndex == Property::INVALID_INDEX);
4041 int UtcDaliVisualGetVisualProperty02(void)
4043 ToolkitTestApplication application;
4044 tet_infoline( "UtcDaliVisualGetVisualProperty02: Test animatable property" );
4046 VisualFactory factory = VisualFactory::Get();
4047 Property::Map propertyMap;
4048 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4049 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
4051 DummyControl dummyControl = DummyControl::New(true);
4052 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
4053 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
4054 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
4055 application.GetScene().Add(dummyControl);
4057 application.SendNotification();
4058 application.Render();
4060 Vector3 targetColor(1.0f, 1.0f, 1.0f);
4061 Vector2 targetOffset(0.05f, 0.05f);
4062 Vector2 targetSize(1.1f, 1.1f);
4063 float targetOpacity = 0.5f;
4064 float targetCornerRadius = 20.0f;
4065 float targetBlurRadius = 10.0f;
4067 // Should work when the properties are not set before
4068 Animation animation = Animation::New(1.0f);
4069 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "mixColor"), targetColor);
4070 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "opacity"), targetOpacity);
4071 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "offset"), targetOffset);
4072 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "size"), targetSize);
4073 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "cornerRadius"), targetCornerRadius);
4074 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "blurRadius"), targetBlurRadius);
4077 application.SendNotification();
4078 application.Render();
4079 application.Render(1001u); // End of animation
4081 Property::Map resultMap;
4082 colorVisual.CreatePropertyMap(resultMap);
4084 // Test property values: they should be updated
4085 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
4086 DALI_TEST_CHECK(colorValue);
4087 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetColor.r, targetColor.g, targetColor.b, targetOpacity), TEST_LOCATION);
4089 Property::Value* transformValue = resultMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
4090 Dali::Property::Map* transformMap = transformValue->GetMap();
4091 DALI_TEST_CHECK(transformMap);
4093 Property::Value* offsetValue = transformMap->Find(Toolkit::Visual::Transform::Property::OFFSET);
4094 DALI_TEST_CHECK(offsetValue);
4095 DALI_TEST_EQUALS(offsetValue->Get<Vector2>(), targetOffset, TEST_LOCATION);
4097 Property::Value* sizeValue = transformMap->Find(Toolkit::Visual::Transform::Property::SIZE);
4098 DALI_TEST_CHECK(sizeValue);
4099 DALI_TEST_EQUALS(sizeValue->Get<Vector2>(), targetSize, TEST_LOCATION);
4101 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT);
4102 DALI_TEST_CHECK(cornerRadiusValue);
4103 DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION);
4105 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
4106 DALI_TEST_CHECK(blurRadiusValue);
4107 DALI_TEST_EQUALS(blurRadiusValue->Get< float >(), targetBlurRadius, TEST_LOCATION);
4109 // Test uniform values
4110 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", targetColor), true, TEST_LOCATION);
4111 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("offset", targetOffset), true, TEST_LOCATION);
4112 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("size", targetSize), true, TEST_LOCATION);
4113 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
4114 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", targetBlurRadius), true, TEST_LOCATION);
4119 int UtcDaliVisualGetVisualProperty03(void)
4121 ToolkitTestApplication application;
4122 tet_infoline( "UtcDaliVisualGetVisualProperty01: Test animatable property, ImageVisual" );
4124 VisualFactory factory = VisualFactory::Get();
4125 Property::Map propertyMap;
4126 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
4127 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
4128 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
4130 DummyControl dummyControl = DummyControl::New(true);
4131 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
4132 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
4133 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
4134 application.GetScene().Add(dummyControl);
4136 // Wait for image loading
4137 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
4139 application.SendNotification();
4140 application.Render();
4142 float targetOpacity = 0.5f;
4143 float targetCornerRadius = 20.0f;
4145 Animation animation = Animation::New(1.0f);
4146 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
4147 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
4150 application.SendNotification();
4151 application.Render();
4152 application.Render(1001u); // End of animation
4154 Property::Map resultMap;
4155 imageVisual.CreatePropertyMap( resultMap );
4157 // Test property values: they should be updated
4158 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
4159 DALI_TEST_CHECK(colorValue);
4160 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
4162 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT);
4163 DALI_TEST_CHECK(cornerRadiusValue);
4164 DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION);
4166 // Test uniform value
4167 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
4172 int UtcDaliVisualGetVisualProperty04(void)
4174 ToolkitTestApplication application;
4175 tet_infoline( "UtcDaliVisualGetVisualProperty01: Test animatable property, GradientVisual" );
4177 Vector2 start(-1.f, -1.f);
4178 Vector2 end(1.f, 1.f);
4179 Property::Array stopColors;
4180 stopColors.PushBack( Color::RED );
4181 stopColors.PushBack( Color::GREEN );
4183 VisualFactory factory = VisualFactory::Get();
4184 Property::Map propertyMap;
4185 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
4186 propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
4187 propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
4188 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f));
4189 propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
4190 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
4191 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
4193 DummyControl dummyControl = DummyControl::New(true);
4194 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
4195 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, gradientVisual);
4196 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
4197 application.GetScene().Add(dummyControl);
4199 application.SendNotification();
4200 application.Render();
4202 float targetOpacity = 0.5f;
4203 float targetCornerRadius = 20.0f;
4205 Animation animation = Animation::New(1.0f);
4206 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
4207 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
4210 application.SendNotification();
4211 application.Render();
4212 application.Render(1001u); // End of animation
4214 Property::Map resultMap;
4215 gradientVisual.CreatePropertyMap( resultMap );
4217 // Test property values: they should be updated
4218 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
4219 DALI_TEST_CHECK(colorValue);
4220 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
4222 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT);
4223 DALI_TEST_CHECK(cornerRadiusValue);
4224 DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION);
4226 // Test uniform value
4227 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);