2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali/devel-api/actors/actor-devel.h>
24 #include <dali/devel-api/object/handle-devel.h>
25 #include <dali/devel-api/text-abstraction/font-client.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
28 #include <dali-toolkit/devel-api/text/rendering-backend.h>
29 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
30 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
31 #include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
32 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
33 #include <dali-toolkit/devel-api/visuals/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( DevelVisual::Property::BORDERLINE_WIDTH, 20.0f );
506 propertyMap.Insert( DevelVisual::Property::BORDERLINE_COLOR, Color::RED );
507 propertyMap.Insert( DevelVisual::Property::BORDERLINE_OFFSET, -1.0f );
508 propertyMap.Insert( DevelColorVisual::Property::BLUR_RADIUS, 20.0f );
509 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
511 Property::Map resultMap;
512 colorVisual.CreatePropertyMap( resultMap );
514 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
515 DALI_TEST_CHECK( typeValue );
516 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
518 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
519 DALI_TEST_CHECK( colorValue );
520 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
522 Property::Value* cornerRadiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
523 DALI_TEST_CHECK( cornerRadiusValue );
524 DALI_TEST_CHECK( cornerRadiusValue->Get< Vector4 >() == Vector4(10.0f, 10.0f, 10.0f, 10.0f) );
526 Property::Value* cornerRadiusPolicyValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER );
527 DALI_TEST_CHECK( cornerRadiusPolicyValue );
528 DALI_TEST_CHECK( cornerRadiusPolicyValue->Get< int >() == Toolkit::Visual::Transform::Policy::RELATIVE );
530 Property::Value* borderlineWidthValue = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
531 DALI_TEST_CHECK( borderlineWidthValue );
532 DALI_TEST_CHECK( borderlineWidthValue->Get< float >() == 20.0f );
534 Property::Value* borderlineColorValue = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
535 DALI_TEST_CHECK( borderlineColorValue );
536 DALI_TEST_CHECK( borderlineColorValue->Get< Vector4 >() == Color::RED );
538 Property::Value* borderlineOffsetValue = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
539 DALI_TEST_CHECK( borderlineOffsetValue );
540 DALI_TEST_CHECK( borderlineOffsetValue->Get< float >() == -1.0f );
542 Property::Value* blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
543 DALI_TEST_CHECK( blurRadiusValue );
544 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 20.0f );
546 // change the blend color
547 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
548 colorVisual = factory.CreateVisual( propertyMap );
549 colorVisual.CreatePropertyMap( resultMap );
551 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
552 DALI_TEST_CHECK( colorValue );
553 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
556 propertyMap[DevelColorVisual::Property::BLUR_RADIUS] = "3.0f";
558 colorVisual = factory.CreateVisual( propertyMap );
559 colorVisual.CreatePropertyMap( resultMap );
561 blurRadiusValue = resultMap.Find( DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT );
562 DALI_TEST_CHECK( blurRadiusValue );
563 DALI_TEST_CHECK( blurRadiusValue->Get< float >() == 0.0f );
568 int UtcDaliVisualGetPropertyMap2(void)
570 ToolkitTestApplication application;
571 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
573 VisualFactory factory = VisualFactory::Get();
574 Property::Map propertyMap;
575 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
576 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
577 propertyMap.Insert("borderColor", Color::BLUE);
578 propertyMap.Insert("borderSize", 5.f);
579 propertyMap.Insert("antiAliasing", true);
580 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
582 Property::Map resultMap;
583 borderVisual.CreatePropertyMap( resultMap );
585 // check the property values from the returned map from visual
586 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
587 DALI_TEST_CHECK( typeValue );
588 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
590 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
591 DALI_TEST_CHECK( colorValue );
592 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
594 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
595 DALI_TEST_CHECK( sizeValue );
596 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
598 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
599 DALI_TEST_CHECK( AAValue );
600 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
602 Property::Map propertyMap1;
603 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
604 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
605 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
606 borderVisual = factory.CreateVisual( propertyMap1 );
607 borderVisual.CreatePropertyMap( resultMap );
609 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
610 DALI_TEST_CHECK( typeValue );
611 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
613 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
614 DALI_TEST_CHECK( colorValue );
615 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
617 sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
618 DALI_TEST_CHECK( sizeValue );
619 DALI_TEST_CHECK( sizeValue->Get<float>() == 10.f );
621 // Get default value of borderline values here
623 sizeValue = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
624 DALI_TEST_CHECK( sizeValue );
625 DALI_TEST_CHECK( sizeValue->Get<float>() == 0.0f );
627 colorValue = resultMap.Find( DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4 );
628 DALI_TEST_CHECK( colorValue );
629 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLACK );
631 sizeValue = resultMap.Find( DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT );
632 DALI_TEST_CHECK( sizeValue );
633 DALI_TEST_CHECK( sizeValue->Get<float>() == 0.0f );
638 int UtcDaliVisualGetPropertyMap2N(void)
640 ToolkitTestApplication application;
641 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
643 VisualFactory factory = VisualFactory::Get();
644 Property::Map propertyMap;
645 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
646 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
648 tet_infoline( "Test that the visual is created, with a default renderer" );
649 DALI_TEST_CHECK( borderVisual );
651 DummyControl dummyControl = DummyControl::New(true);
652 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
653 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
654 application.GetScene().Add( dummyControl );
656 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
662 int UtcDaliVisualGetPropertyMap3(void)
664 ToolkitTestApplication application;
665 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
667 VisualFactory factory = VisualFactory::Get();
668 DALI_TEST_CHECK( factory );
670 Property::Map propertyMap;
671 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
673 Vector2 start(-1.f, -1.f);
674 Vector2 end(1.f, 1.f);
675 propertyMap.Insert( "startPosition", start);
676 propertyMap.Insert( "endPosition", end);
677 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
679 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
681 Property::Array stopColors;
682 stopColors.PushBack( Color::RED );
683 stopColors.PushBack( Color::GREEN );
684 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
686 float borderlineWidth = 4.0f;
687 Vector4 cornerRadius(7.0f, 10.0f, 13.0f, 16.0f);
688 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth);
689 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, cornerRadius);
691 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
693 Property::Map resultMap;
694 gradientVisual.CreatePropertyMap( resultMap );
696 // check the property values from the returned map from visual
697 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
698 DALI_TEST_CHECK( value );
699 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
701 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
702 DALI_TEST_CHECK( value );
703 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
705 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
706 DALI_TEST_CHECK( value );
707 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
709 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
710 DALI_TEST_CHECK( value );
711 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
713 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
714 DALI_TEST_CHECK( value );
715 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
717 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
718 DALI_TEST_CHECK( value );
719 DALI_TEST_EQUALS( value->Get<float>(), borderlineWidth , Math::MACHINE_EPSILON_100, TEST_LOCATION );
721 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
722 DALI_TEST_CHECK( value );
723 DALI_TEST_EQUALS( value->Get<Vector4>(), cornerRadius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
725 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
726 DALI_TEST_CHECK( value );
727 Property::Array* offsetArray = value->GetArray();
728 DALI_TEST_CHECK( offsetArray->Count() == 2 );
729 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
730 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
732 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
733 DALI_TEST_CHECK( value );
734 Property::Array* colorArray = value->GetArray();
735 DALI_TEST_CHECK( colorArray->Count() == 2 );
736 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
737 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
742 int UtcDaliVisualGetPropertyMap4(void)
744 ToolkitTestApplication application;
745 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
747 VisualFactory factory = VisualFactory::Get();
748 DALI_TEST_CHECK( factory );
750 Property::Map propertyMap;
751 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
753 Vector2 center(100.f, 100.f);
754 float radius = 100.f;
755 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
756 propertyMap.Insert(GradientVisual::Property::CENTER, center);
757 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
758 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
760 Property::Array stopColors;
761 stopColors.PushBack( Color::RED );
762 stopColors.PushBack( Color::BLACK );
763 stopColors.PushBack( Color::GREEN );
764 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
766 float borderlineWidth = 8.0f;
767 Vector4 cornerRadius(1.0f, 2.0f, 4.0f, 8.0f);
768 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth);
769 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, cornerRadius);
771 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
772 DALI_TEST_CHECK( gradientVisual );
774 Property::Map resultMap;
775 gradientVisual.CreatePropertyMap( resultMap );
777 // check the property values from the returned map from visual
778 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
779 DALI_TEST_CHECK( value );
780 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
782 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
783 DALI_TEST_CHECK( value );
784 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
786 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
787 DALI_TEST_CHECK( value );
788 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
790 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
791 DALI_TEST_CHECK( value );
792 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
794 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
795 DALI_TEST_CHECK( value );
796 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
798 value = resultMap.Find( DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT );
799 DALI_TEST_CHECK( value );
800 DALI_TEST_EQUALS( value->Get<float>(), borderlineWidth , Math::MACHINE_EPSILON_100, TEST_LOCATION );
802 value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 );
803 DALI_TEST_CHECK( value );
804 DALI_TEST_EQUALS( value->Get<Vector4>(), cornerRadius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
806 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
807 DALI_TEST_CHECK( value );
808 Property::Array* offsetArray = value->GetArray();
809 DALI_TEST_CHECK( offsetArray->Count() == 3 );
810 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
811 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
812 // any stop value will be clamped to [0.0, 1.0];
813 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
815 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
816 DALI_TEST_CHECK( value );
817 Property::Array* colorArray = value->GetArray();
818 DALI_TEST_CHECK( colorArray->Count() == 3 );
819 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
820 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
821 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
826 int UtcDaliVisualGetPropertyMap5(void)
828 ToolkitTestApplication application;
829 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
831 VisualFactory factory = VisualFactory::Get();
832 Property::Map propertyMap;
833 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
834 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
835 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
836 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
837 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
838 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
839 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
840 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
841 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
842 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
843 propertyMap.Insert( "synchronousLoading", true );
845 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
846 DALI_TEST_CHECK( imageVisual );
848 Property::Map resultMap;
849 imageVisual.CreatePropertyMap( resultMap );
851 // check the property values from the returned map from visual
852 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
853 DALI_TEST_CHECK( value );
854 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
856 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
857 DALI_TEST_CHECK( value );
858 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
860 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
861 DALI_TEST_CHECK( value );
862 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
864 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
865 DALI_TEST_CHECK( value );
866 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
868 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
869 DALI_TEST_CHECK( value );
870 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
872 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
873 DALI_TEST_CHECK( value );
874 DALI_TEST_CHECK( value->Get<int>() == 20 );
876 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
877 DALI_TEST_CHECK( value );
878 DALI_TEST_CHECK( value->Get<int>() == 30 );
880 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
881 DALI_TEST_CHECK( value );
882 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
884 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
885 DALI_TEST_CHECK( value );
886 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
888 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
889 DALI_TEST_CHECK( value );
890 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
892 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
893 DALI_TEST_CHECK( value );
894 DALI_TEST_CHECK( value->Get<bool>() == true );
899 int UtcDaliVisualGetPropertyMap6(void)
901 ToolkitTestApplication application;
902 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
904 Rect< int > border( 1, 1, 1, 1 );
906 VisualFactory factory = VisualFactory::Get();
907 Property::Map propertyMap;
908 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
909 propertyMap.Insert( "mixColor", Color::MAGENTA );
910 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
911 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
912 propertyMap.Insert( ImageVisual::Property::BORDER, border );
913 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
914 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
915 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
917 Property::Map resultMap;
918 nPatchVisual.CreatePropertyMap( resultMap );
920 // check the property values from the returned map from visual
921 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
922 DALI_TEST_CHECK( value );
923 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
925 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
926 DALI_TEST_CHECK( value );
927 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
929 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
930 DALI_TEST_CHECK( value );
931 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
933 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
934 DALI_TEST_CHECK( value );
935 DALI_TEST_CHECK( value->Get<bool>() );
937 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
938 DALI_TEST_CHECK( value );
939 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
941 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
942 DALI_TEST_CHECK( value );
943 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
945 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
946 DALI_TEST_CHECK( value );
947 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
949 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
951 Property::Map propertyMap1;
952 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
953 propertyMap1.Insert( "mixColor", Color::MAGENTA );
954 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
955 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
956 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
957 nPatchVisual = factory.CreateVisual( propertyMap1 );
959 nPatchVisual.CreatePropertyMap( resultMap );
961 // check the property values from the returned map from visual
962 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
963 DALI_TEST_CHECK( value );
964 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
966 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
967 DALI_TEST_CHECK( value );
968 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
970 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
971 DALI_TEST_CHECK( value );
972 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
974 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
975 DALI_TEST_CHECK( value );
976 DALI_TEST_CHECK( value->Get<bool>() );
978 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
979 DALI_TEST_CHECK( value );
980 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
985 int UtcDaliVisualGetPropertyMap7(void)
987 ToolkitTestApplication application;
988 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
990 // request SvgVisual with a property map
991 VisualFactory factory = VisualFactory::Get();
992 Property::Map propertyMap;
993 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
994 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
995 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
996 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
997 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
999 Property::Map resultMap;
1000 svgVisual.CreatePropertyMap( resultMap );
1001 // check the property values from the returned map from a visual
1002 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1003 DALI_TEST_CHECK( value );
1004 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1006 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1007 DALI_TEST_CHECK( value );
1008 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1010 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1011 DALI_TEST_CHECK( value );
1012 DALI_TEST_CHECK( value->Get<bool>() == false );
1014 // request SvgVisual with a property map 2
1015 propertyMap.Clear();
1016 propertyMap[ "visualType" ] = Visual::SVG;
1017 propertyMap[ "mixColor" ] = Color::WHITE;
1018 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
1019 propertyMap[ "atlasing" ] = true;
1020 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
1023 svgVisual1.CreatePropertyMap( resultMap );
1024 // check the property values from the returned map from a visual
1025 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1026 DALI_TEST_CHECK( value );
1027 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1029 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1030 DALI_TEST_CHECK( value );
1031 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1033 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
1034 DALI_TEST_CHECK( value );
1035 DALI_TEST_CHECK( value->Get<bool>() == true );
1037 // request SvgVisual with an URL
1038 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1040 svgVisual2.CreatePropertyMap( resultMap );
1041 // check the property values from the returned map from a visual
1042 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1043 DALI_TEST_CHECK( value );
1044 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
1046 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
1047 DALI_TEST_CHECK( value );
1048 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
1054 int UtcDaliVisualGetPropertyMap8(void)
1056 ToolkitTestApplication application;
1057 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
1059 //Request MeshVisual using a property map.
1060 VisualFactory factory = VisualFactory::Get();
1061 Property::Map propertyMap;
1062 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1063 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
1064 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1065 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1066 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1067 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1068 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1069 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
1071 Property::Map resultMap;
1072 meshVisual.CreatePropertyMap( resultMap );
1073 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
1075 //Check values in the result map are identical to the initial map's values.
1076 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1077 DALI_TEST_CHECK( value );
1078 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
1080 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
1081 DALI_TEST_CHECK( value );
1082 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
1084 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
1085 DALI_TEST_CHECK( value );
1086 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
1088 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
1089 DALI_TEST_CHECK( value );
1090 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
1092 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
1093 DALI_TEST_CHECK( value );
1094 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1096 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1097 DALI_TEST_CHECK( value );
1098 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1103 //Primitive shape visual
1104 int UtcDaliVisualGetPropertyMap9(void)
1106 ToolkitTestApplication application;
1107 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1109 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1110 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1112 //Request PrimitiveVisual using a property map.
1113 VisualFactory factory = VisualFactory::Get();
1114 Property::Map propertyMap;
1115 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1116 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1117 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1118 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1119 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1120 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1121 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1122 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1123 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1124 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1125 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1126 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1127 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1128 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1130 Property::Map resultMap;
1131 primitiveVisual.CreatePropertyMap( resultMap );
1133 //Check values in the result map are identical to the initial map's values.
1134 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1135 DALI_TEST_CHECK( value );
1136 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1138 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1139 DALI_TEST_CHECK( value );
1140 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1142 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1143 DALI_TEST_CHECK( value );
1144 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1145 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1147 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1148 DALI_TEST_CHECK( value );
1149 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1151 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1152 DALI_TEST_CHECK( value );
1153 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1155 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1156 DALI_TEST_CHECK( value );
1157 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1159 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1160 DALI_TEST_CHECK( value );
1161 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1163 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1164 DALI_TEST_CHECK( value );
1165 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1167 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1168 DALI_TEST_CHECK( value );
1169 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1171 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1172 DALI_TEST_CHECK( value );
1173 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1175 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1176 DALI_TEST_CHECK( value );
1177 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1179 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1180 DALI_TEST_CHECK( value );
1181 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1183 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1184 DALI_TEST_CHECK( value );
1185 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1191 int UtcDaliVisualGetPropertyMap10(void)
1193 ToolkitTestApplication application;
1194 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1196 //Request PrimitiveVisual using a property map.
1197 VisualFactory factory = VisualFactory::Get();
1199 Property::Map propertyMap;
1200 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1201 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1202 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
1203 propertyMap.Insert( "enableMarkup", false );
1204 propertyMap.Insert( "text", "Hello world" );
1205 propertyMap.Insert( "fontFamily", "TizenSans" );
1207 Property::Map fontStyleMapSet;
1208 fontStyleMapSet.Insert( "weight", "bold" );
1209 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1211 propertyMap.Insert( "pointSize", 12.f );
1212 propertyMap.Insert( "multiLine", true );
1213 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1214 propertyMap.Insert( "verticalAlignment", "CENTER" );
1215 propertyMap.Insert( "textColor", Color::RED );
1217 Property::Map shadowMapSet;
1218 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1220 Property::Map underlineMapSet;
1221 propertyMap.Insert( "underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1) );
1223 Property::Map outlineMapSet;
1224 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1226 Property::Map backgroundMapSet;
1227 propertyMap.Insert( "textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN) );
1229 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1231 Property::Map resultMap;
1232 textVisual.CreatePropertyMap( resultMap );
1234 //Check values in the result map are identical to the initial map's values.
1235 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1236 DALI_TEST_CHECK( value );
1237 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1239 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1240 DALI_TEST_CHECK( value );
1241 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1243 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1244 DALI_TEST_CHECK( value );
1245 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1247 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1248 DALI_TEST_CHECK( value );
1249 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1251 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1252 DALI_TEST_CHECK( value );
1254 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1255 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1256 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1258 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1259 DALI_TEST_CHECK( value );
1260 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1262 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1263 DALI_TEST_CHECK( value );
1264 DALI_TEST_CHECK( value->Get<bool>() );
1266 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1267 DALI_TEST_CHECK( value );
1268 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1270 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1271 DALI_TEST_CHECK( value );
1272 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1274 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1275 DALI_TEST_CHECK( value );
1276 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1278 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1279 DALI_TEST_CHECK( value );
1280 DALI_TEST_CHECK( !value->Get<bool>() );
1282 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1283 DALI_TEST_CHECK( value );
1285 Property::Map shadowMapGet = value->Get<Property::Map>();
1286 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1287 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1289 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1290 DALI_TEST_CHECK( value );
1292 Property::Map underlineMapGet = value->Get<Property::Map>();
1293 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1294 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1296 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1297 DALI_TEST_CHECK( value );
1299 Property::Map outlineMapGet = value->Get<Property::Map>();
1300 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1301 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1303 value = resultMap.Find( DevelTextVisual::Property::BACKGROUND, Property::MAP );
1304 DALI_TEST_CHECK( value );
1306 Property::Map backgroundMapGet = value->Get<Property::Map>();
1307 DALI_TEST_EQUALS( backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION );
1308 DALI_TEST_EQUALS( DaliTestCheckMaps( backgroundMapGet, backgroundMapSet ), true, TEST_LOCATION );
1313 int UtcDaliVisualGetPropertyMap11(void)
1315 ToolkitTestApplication application;
1316 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1318 VisualFactory factory = VisualFactory::Get();
1319 DALI_TEST_CHECK( factory );
1321 Property::Map propertyMap;
1322 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1324 Vector2 start(-0.5f, 0.5f);
1325 Vector2 end (0.5f, -0.0f);
1326 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1327 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1328 Vector2 rotate_center(0.0f, 0.4f);
1329 float rotate_amount = 1.57f;
1330 float offset = 100.f;
1332 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1333 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1334 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1336 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1337 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1338 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1339 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1340 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1341 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1342 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1344 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1345 DALI_TEST_CHECK( animatedGradientVisual );
1347 Property::Map resultMap;
1348 animatedGradientVisual.CreatePropertyMap( resultMap );
1350 // check the property values from the returned map from visual
1351 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1352 DALI_TEST_CHECK( value );
1353 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1355 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1356 DALI_TEST_CHECK( value );
1357 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1359 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1360 DALI_TEST_CHECK( value );
1361 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1363 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1364 DALI_TEST_CHECK( value );
1365 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1368 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1369 DALI_TEST_CHECK( value );
1370 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1372 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1373 DALI_TEST_CHECK( value );
1374 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1376 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1377 DALI_TEST_CHECK( value );
1378 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1380 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1381 DALI_TEST_CHECK( value );
1382 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1384 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1385 DALI_TEST_CHECK( value );
1386 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1388 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1389 DALI_TEST_CHECK( value );
1390 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1392 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1393 DALI_TEST_CHECK( value );
1394 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1399 int UtcDaliVisualGetPropertyMap12(void)
1401 ToolkitTestApplication application;
1402 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1404 // Case 1 : Set values by index
1406 tet_printf( " - Set Values by Index\n" );
1407 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1408 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1409 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1411 tet_printf( "test with delay [%f]\n", _delay );
1412 VisualFactory factory = VisualFactory::Get();
1413 DALI_TEST_CHECK( factory );
1415 Property::Map propertyMap;
1416 Property::Map animationMap;
1417 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1419 float duration = 1.1f;
1420 float delay = _delay;
1421 float repeat_delay = 0.4f;
1423 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1425 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1426 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1428 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1430 animationMap.Clear();
1431 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1432 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1433 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1434 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1435 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1436 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1437 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1438 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1439 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1441 return animationMap;
1444 Vector2 start1(-0.5f, 0.5f);
1445 Vector2 end1 (0.5f, -0.5f);
1446 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1447 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1448 Vector2 rotate_center1(0.0f, 0.4f);
1449 float rotate_amount1 = 0.0f;
1450 float offset1 = 0.f;
1452 Vector2 start2(-0.5f, -0.5f);
1453 Vector2 end2 (0.5f, 0.5f);
1454 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1455 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1456 Vector2 rotate_center2(0.0f, -0.4f);
1457 float rotate_amount2 = 6.2832f;
1458 float offset2 = 2.f;
1460 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1461 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1462 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1464 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1465 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1466 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1467 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1468 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1469 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1470 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1472 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1473 DALI_TEST_CHECK( animatedGradientVisual );
1475 Property::Map resultMap;
1476 animatedGradientVisual.CreatePropertyMap( resultMap );
1478 // check the property values from the returned map from visual
1479 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1480 DALI_TEST_CHECK( value );
1481 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1483 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1484 DALI_TEST_CHECK( value );
1485 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1487 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1488 DALI_TEST_CHECK( value );
1489 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1491 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1492 DALI_TEST_CHECK( value );
1493 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1495 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
1497 tet_printf("Check value at %d\n", line_num);
1498 value = resultMap.Find( index, Property::MAP );
1499 DALI_TEST_CHECK( value );
1500 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1501 Property::Map *temp_map = value->GetMap();
1502 DALI_TEST_CHECK( temp_map );
1504 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1506 Property::Value *res = temp_map->Find( index );
1507 DALI_TEST_CHECK( res );
1511 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1512 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1513 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1514 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1515 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1516 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1517 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1518 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1519 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1522 // check the animation map data is good
1523 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1524 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1525 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1526 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1527 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1528 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1529 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1533 // Case 2 : Set values by string
1535 tet_printf( " - Set Values by String\n" );
1536 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1537 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1538 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1540 tet_printf( "test with delay [%f]\n", _delay );
1541 VisualFactory factory = VisualFactory::Get();
1542 DALI_TEST_CHECK( factory );
1544 Property::Map propertyMap;
1545 Property::Map animationMap;
1546 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1548 float duration = 1.1f;
1549 float delay = _delay;
1550 float repeat_delay = 0.4f;
1552 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1554 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1555 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1557 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1559 animationMap.Clear();
1560 animationMap.Insert("startValue" , start);
1561 animationMap.Insert("targetValue" , target);
1562 animationMap.Insert("directionType", "BACKWARD");
1563 animationMap.Insert("duration" , duration);
1564 animationMap.Insert("delay" , delay);
1565 animationMap.Insert("repeat" , loop_count);
1566 animationMap.Insert("repeatDelay" , repeat_delay);
1567 animationMap.Insert("motionType" , "MIRROR");
1568 animationMap.Insert("easingType" , "IN_OUT");
1570 return animationMap;
1573 Vector2 start1(-0.5f, 0.5f);
1574 Vector2 end1 (0.5f, -0.5f);
1575 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1576 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1577 Vector2 rotate_center1(0.0f, 0.4f);
1578 float rotate_amount1 = 0.0f;
1579 float offset1 = 0.f;
1581 Vector2 start2(-0.5f, -0.5f);
1582 Vector2 end2 (0.5f, 0.5f);
1583 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1584 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1585 Vector2 rotate_center2(0.0f, -0.4f);
1586 float rotate_amount2 = 6.2832f;
1587 float offset2 = 2.f;
1589 // For test mix the type string/index key and string/index value works well.
1590 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1591 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1592 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1594 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1595 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1596 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1597 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1598 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1599 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1600 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1602 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1603 DALI_TEST_CHECK( animatedGradientVisual );
1605 Property::Map resultMap;
1606 animatedGradientVisual.CreatePropertyMap( resultMap );
1608 // check the property values from the returned map from visual
1609 // Note : resultMap from CreatePropertyMap only contain indexKey
1610 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1611 DALI_TEST_CHECK( value );
1612 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1614 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1615 DALI_TEST_CHECK( value );
1616 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1618 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1619 DALI_TEST_CHECK( value );
1620 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1622 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1623 DALI_TEST_CHECK( value );
1624 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1626 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
1628 tet_printf("Check value at %d\n", line_num);
1629 value = resultMap.Find( index, Property::MAP );
1630 DALI_TEST_CHECK( value );
1631 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1632 Property::Map *temp_map = value->GetMap();
1633 DALI_TEST_CHECK( temp_map );
1635 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1637 Property::Value *res = temp_map->Find( index );
1638 DALI_TEST_CHECK( res );
1642 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1643 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1644 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1645 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1646 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1647 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1648 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1649 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1650 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1653 // check the animation map data is good
1654 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1655 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1656 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1657 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1658 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1659 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1660 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1666 int UtcDaliVisualGetPropertyMap13(void)
1668 ToolkitTestApplication application;
1669 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1671 for(int _direction = 0; _direction <= 1; ++_direction)
1673 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1675 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1676 VisualFactory factory = VisualFactory::Get();
1677 DALI_TEST_CHECK( factory );
1679 Property::Map propertyMap;
1680 Property::Map animationMap;
1681 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1683 float duration = 1.0f;
1684 float delay = _delay;
1685 float repeat_delay = 0.5f;
1687 int direction = _direction;
1688 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1689 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1690 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1692 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1694 animationMap.Clear();
1695 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1696 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1697 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1698 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1699 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1700 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1701 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1702 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1703 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1704 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1705 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1707 return animationMap;
1710 Vector2 start1(-0.5f, 0.5f);
1711 Vector2 end1 (0.5f, -0.5f);
1712 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1713 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1714 Vector2 rotate_center1(1.0f, 0.4f);
1715 float rotate_amount1 = 2.0f;
1716 float offset1 = 1.f;
1718 Vector2 start2(-0.5f, -0.5f);
1719 Vector2 end2 (0.5f, 0.5f);
1720 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1721 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1722 Vector2 rotate_center2(1.0f, -0.4f);
1723 float rotate_amount2 = 1.0f;
1724 float offset2 = 3.f;
1726 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1727 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1728 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1730 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1731 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1732 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1733 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1734 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1735 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1736 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1738 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1739 DALI_TEST_CHECK( animatedGradientVisual );
1741 Property::Map resultMap;
1742 animatedGradientVisual.CreatePropertyMap( resultMap );
1744 // check the property values from the returned map from visual
1745 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1746 DALI_TEST_CHECK( value );
1747 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1749 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1750 DALI_TEST_CHECK( value );
1751 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1753 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1754 DALI_TEST_CHECK( value );
1755 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1757 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1758 DALI_TEST_CHECK( value );
1759 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1761 // If loop_count = 0, Animation doesn't created.
1762 // Optimized resultMap only have one value, which is target value
1763 // Note: target value will be changed by direction option.
1764 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1765 DALI_TEST_CHECK( value );
1766 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1768 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1769 DALI_TEST_CHECK( value );
1770 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1772 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1773 DALI_TEST_CHECK( value );
1774 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1776 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1777 DALI_TEST_CHECK( value );
1778 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1780 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1781 DALI_TEST_CHECK( value );
1782 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1784 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1785 DALI_TEST_CHECK( value );
1786 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1788 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1789 DALI_TEST_CHECK( value );
1790 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1797 int UtcDaliVisualAnimateBorderVisual01(void)
1799 ToolkitTestApplication application;
1800 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1802 static std::vector<UniformData> customUniforms =
1804 UniformData("borderColor", Property::Type::VECTOR4),
1805 UniformData("mixColor", Property::Type::VECTOR3),
1808 TestGraphicsController& graphics = application.GetGraphicsController();
1809 graphics.AddCustomUniforms(customUniforms);
1811 VisualFactory factory = VisualFactory::Get();
1812 Property::Map propertyMap;
1813 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1814 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1815 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1816 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1817 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1820 map["target"] = "testVisual";
1821 map["property"] = "mixColor";
1822 map["targetValue"] = Vector4(1,1,1,0.1);
1823 map["animator"] = Property::Map()
1824 .Add("alphaFunction", "LINEAR")
1825 .Add("timePeriod", Property::Map()
1827 .Add("duration", 4.0f));
1829 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1831 DummyControl actor = DummyControl::New(true);
1832 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1833 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1834 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1835 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1836 application.GetScene().Add(actor);
1838 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1840 Renderer renderer = actor.GetRendererAt(0);
1841 Property::Index borderColorIndex = renderer.GetPropertyIndex( BorderVisual::Property::COLOR );
1842 Property::Index mixColorIndex = renderer.GetPropertyIndex( Visual::Property::MIX_COLOR );
1844 Animation animation = dummyImpl.CreateTransition( transition );
1846 // Animate the mix color through the transition, and the border color through
1847 // programmatic method.
1848 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1851 application.SendNotification();
1852 application.Render(0);
1853 application.Render(2000u); // halfway point between blue and white
1855 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1856 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1857 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1858 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1860 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1861 testColor = Vector4( 1,1,1,0.45f );
1862 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1863 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1866 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1867 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1869 application.Render(2000u);
1871 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1872 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1873 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1875 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1876 testColor = Vector4(1,1,1,0.1);
1877 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), TEST_LOCATION );
1878 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1880 DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", uColor ) );
1881 DALI_TEST_EQUALS( uColor.a, testColor.a, TEST_LOCATION );
1887 int UtcDaliVisualAnimateBorderVisual02(void)
1889 ToolkitTestApplication application;
1890 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1892 static std::vector<UniformData> customUniforms =
1894 UniformData("borderSize", Property::Type::FLOAT),
1897 TestGraphicsController& graphics = application.GetGraphicsController();
1898 graphics.AddCustomUniforms(customUniforms);
1900 VisualFactory factory = VisualFactory::Get();
1901 Property::Map propertyMap;
1902 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1903 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1904 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1905 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1907 DummyControl actor = DummyControl::New(true);
1908 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1909 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1910 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1911 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1912 application.GetScene().Add(actor);
1914 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1916 Renderer renderer = actor.GetRendererAt(0);
1917 Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE );
1919 Animation animation = Animation::New(4.0f);
1920 animation.AnimateTo( Property(renderer, index), 9.0f );
1923 application.SendNotification();
1924 application.Render(0);
1925 application.Render(2000u); // halfway point
1927 float size = renderer.GetCurrentProperty< float >( index );
1928 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1929 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1931 application.Render(2000u); // halfway point between blue and white
1933 size = renderer.GetCurrentProperty< float >( index );
1934 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1935 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1940 int UtcDaliVisualAnimateColorVisual(void)
1942 ToolkitTestApplication application;
1943 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1945 static std::vector<UniformData> customUniforms =
1947 UniformData("mixColor", Property::Type::VECTOR3),
1950 TestGraphicsController& graphics = application.GetGraphicsController();
1951 graphics.AddCustomUniforms(customUniforms);
1953 VisualFactory factory = VisualFactory::Get();
1954 Property::Map propertyMap;
1955 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1956 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1957 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1959 DummyControl actor = DummyControl::New(true);
1960 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1961 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1962 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
1963 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1964 application.GetScene().Add(actor);
1966 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1968 Renderer renderer = actor.GetRendererAt(0);
1969 Property::Index mixColorIndex = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
1971 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1972 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1974 Animation animation = Animation::New(4.0f);
1975 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1978 application.SendNotification();
1979 application.Render(0);
1980 application.Render(2000u); // halfway point
1982 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1983 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1984 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1986 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1988 application.Render(2000u); // halfway point between blue and white
1990 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1991 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1993 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1995 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1996 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2001 int UtcDaliVisualAnimatePrimitiveVisual(void)
2003 ToolkitTestApplication application;
2004 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
2006 static std::vector<UniformData> customUniforms =
2008 UniformData("mixColor", Property::Type::VECTOR3),
2011 TestGraphicsController& graphics = application.GetGraphicsController();
2012 graphics.AddCustomUniforms(customUniforms);
2015 VisualFactory factory = VisualFactory::Get();
2016 Property::Map propertyMap;
2017 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
2018 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
2019 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
2020 Visual::Base visual = factory.CreateVisual( propertyMap );
2022 DummyControl actor = DummyControl::New(true);
2023 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2024 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2025 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2026 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2027 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2028 application.GetScene().Add(actor);
2030 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2032 Renderer renderer = actor.GetRendererAt(0);
2033 Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::MIX_COLOR );
2035 tet_infoline("Test that the renderer has the Primitive mix color");
2036 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2038 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
2039 const Vector4 TARGET_MIX_COLOR( Color::RED );
2042 map["target"] = "testVisual";
2043 map["property"] = "mixColor";
2044 map["initialValue"] = INITIAL_MIX_COLOR;
2045 map["targetValue"] = TARGET_MIX_COLOR;
2046 map["animator"] = Property::Map()
2047 .Add("alphaFunction", "LINEAR")
2048 .Add("timePeriod", Property::Map()
2050 .Add("duration", 4.0f));
2052 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
2054 Animation animation = dummyImpl.CreateTransition( transition );
2055 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
2058 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
2059 glAbstraction.EnableEnableDisableCallTrace( true );
2060 TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace();
2061 std::ostringstream blendStr;
2062 blendStr << std::hex << GL_BLEND;
2064 application.SendNotification();
2065 application.Render(0);
2066 application.Render(2000u); // halfway point
2067 application.SendNotification();
2069 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
2070 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a )), true, TEST_LOCATION );
2071 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
2073 DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Enable", blendStr.str() ) );
2075 glEnableStack.Reset();
2077 application.Render(2001u); // go past end
2078 application.SendNotification(); // Trigger signals
2080 DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), Color::WHITE, TEST_LOCATION );
2081 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4( 1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a ) ), true, TEST_LOCATION );
2082 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
2084 DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Disable", blendStr.str() ) );
2092 int UtcDaliVisualAnimatedGradientVisual01(void)
2094 ToolkitTestApplication application;
2095 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
2097 static std::vector<UniformData> customUniforms =
2099 UniformData("start_point", Property::Type::VECTOR2),
2100 UniformData("end_point", Property::Type::VECTOR2),
2101 UniformData("start_color", Property::Type::VECTOR4),
2102 UniformData("end_color", Property::Type::VECTOR4),
2103 UniformData("rotate_center", Property::Type::VECTOR2),
2104 UniformData("rotate_angle", Property::Type::FLOAT),
2105 UniformData("gradient_offset", Property::Type::FLOAT),
2108 TestGraphicsController& graphics = application.GetGraphicsController();
2109 graphics.AddCustomUniforms(customUniforms);
2112 VisualFactory factory = VisualFactory::Get();
2113 Property::Map propertyMap;
2114 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2115 Visual::Base visual = factory.CreateVisual( propertyMap );
2117 DummyControl actor = DummyControl::New(true);
2118 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2119 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2120 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2121 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2122 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2123 application.GetScene().Add(actor);
2125 application.SendNotification();
2126 application.Render(0);
2127 application.SendNotification();
2129 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2131 for(int step_iter = 0; step_iter < 3; step_iter++)
2133 application.SendNotification();
2134 application.Render(0);
2135 application.Render(750u); // step i/4
2136 application.SendNotification();
2138 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
2139 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
2140 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2141 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
2142 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
2143 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
2144 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
2147 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2148 application.Render(750u); // go to end
2149 application.SendNotification();
2151 application.Render(10u); // finish
2152 application.SendNotification();
2155 application.SendNotification();
2156 application.Render(0u);
2157 application.SendNotification();
2163 int UtcDaliVisualAnimatedGradientVisual02(void)
2165 ToolkitTestApplication application;
2166 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2168 static std::vector<UniformData> customUniforms =
2170 UniformData("start_point", Property::Type::VECTOR2),
2171 UniformData("end_point", Property::Type::VECTOR2),
2172 UniformData("start_color", Property::Type::VECTOR4),
2173 UniformData("end_color", Property::Type::VECTOR4),
2174 UniformData("rotate_center", Property::Type::VECTOR2),
2175 UniformData("rotate_angle", Property::Type::FLOAT),
2176 UniformData("gradient_offset", Property::Type::FLOAT),
2179 TestGraphicsController& graphics = application.GetGraphicsController();
2180 graphics.AddCustomUniforms(customUniforms);
2183 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
2184 int _direction[2] = {0, 1};
2185 int _loop_count[3] = {-1, 0, 1};
2186 int _motion[2] = {0, 1};
2187 int _easing[4] = {0, 1, 2, 3};
2189 int test_case_max = 4 * 2 * 3 * 2 * 4;
2191 int test_case_d = 7; // 7 is the number of animated properties.
2193 float _duration = 0.4f;
2194 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2195 float noise_maker = 0.0f;
2196 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2197 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2199 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2201 VisualFactory factory = VisualFactory::Get();
2202 Property::Map propertyMap;
2203 Property::Map animationMap;
2204 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2206 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2207 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2208 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2210 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&
2212 int tc = (test_case + tc_offset);
2213 int idx_easing = tc % 4; tc /= 4;
2214 int idx_motion = tc % 2; tc /= 2;
2215 int idx_loop_count = tc % 3; tc /= 3;
2216 int idx_direction = tc % 2; tc /= 2;
2217 int idx_delay = tc % 4; tc /= 4;
2219 float duration = _duration - _repeat_delay;
2220 float repeat_delay = _repeat_delay;
2221 float delay = _delay[idx_delay] * _duration;
2222 int direction = _direction[idx_direction];
2223 int loop_count = _loop_count[idx_loop_count];
2224 int motion = _motion[idx_motion];
2225 int easing = _easing[idx_easing];
2227 animationMap.Clear();
2228 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2229 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2230 if( direction == 0 )
2232 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2236 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2238 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2239 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2240 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2241 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2244 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2248 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2252 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2254 else if( easing == 1 )
2256 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2258 else if( easing == 2 )
2260 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2264 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2267 return animationMap;
2270 // Give different values for debuging
2271 noise_maker += 1.0f;
2272 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2273 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2274 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2275 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2276 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2277 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2278 float offset1 = 0.f + noise_maker * 0.1f;
2280 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2281 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2282 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2283 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2284 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2285 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2286 float offset2 = 2.f + noise_maker * 0.1f;
2288 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2289 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2290 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2292 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2293 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2294 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2295 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2296 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2297 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2298 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2300 Visual::Base visual = factory.CreateVisual( propertyMap );
2302 DummyControl actor = DummyControl::New( true );
2303 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2304 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2305 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2306 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2307 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2308 application.GetScene().Add(actor);
2310 application.SendNotification();
2311 application.Render( 0 );
2312 application.SendNotification();
2314 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2316 application.SendNotification();
2318 //Compare between CPU calculated value and Shader Visual calculated value
2319 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
2321 int tc = (test_case + tc_offset);
2322 int idx_easing = tc % 4; tc /= 4;
2323 int idx_motion = tc % 2; tc /= 2;
2324 int idx_loop_count = tc % 3; tc /= 3;
2325 int idx_direction = tc % 2; tc /= 2;
2326 int idx_delay = tc % 4; tc /= 4;
2328 float duration = _duration - _repeat_delay;
2329 float repeat_delay = _repeat_delay;
2330 float delay = _delay[idx_delay] * _duration;
2331 int direction = _direction[idx_direction];
2332 int loop_count = _loop_count[idx_loop_count];
2333 int motion = _motion[idx_motion];
2334 int easing = _easing[idx_easing];
2336 progress -= delay / _duration;
2338 Property::Value s = start;
2339 Property::Value t = target;
2340 if( direction == 1 )
2345 float x; ///< Animator progress value
2346 if( loop_count == 0 )
2350 else if( loop_count > 0 && progress + 0.01f > loop_count )
2352 x = ( motion == 0 ) ? 1.0f : 0.0f;
2356 if( progress < 0.0f )
2360 progress = fmodf( progress, 1.0f );
2361 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2366 x = progress * 2.0f;
2373 if( easing == 1 ) // EASE_IN
2377 else if( easing == 2 ) // EASE_OUT
2381 else if( easing == 3 ) // EASE_IN_OUT
2383 x = x * x * (3.0f - 2.0f * x);
2386 if( value_type == 0 ) // result type is Float
2390 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2391 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2392 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2394 else if( value_type == 1 ) // result type is Vector2
2398 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2399 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2400 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2402 else if( value_type == 2 ) // result type is Vector3
2406 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2407 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2408 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2410 else // result type is Vector4
2414 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2415 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2416 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2421 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2423 for( int step_iter = 0; step_iter < 3; step_iter++ )
2425 application.SendNotification();
2426 application.Render( _duration * 250.f ); // step i/4
2427 application.SendNotification();
2430 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2431 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2432 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2433 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2434 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2435 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2436 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2438 application.SendNotification();
2439 application.Render(_duration * 250.f); // step 4/4 will not test
2440 application.SendNotification();
2444 application.SendNotification();
2446 application.SendNotification();
2447 application.Render(10.f); // tempral time
2448 application.SendNotification();
2455 int UtcDaliVisualAnimatedGradientVisual03(void)
2457 ToolkitTestApplication application;
2458 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2460 static std::vector<UniformData> customUniforms =
2462 UniformData("start_point", Property::Type::VECTOR2),
2463 UniformData("end_point", Property::Type::VECTOR2),
2464 UniformData("start_color", Property::Type::VECTOR4),
2465 UniformData("end_color", Property::Type::VECTOR4),
2466 UniformData("rotate_center", Property::Type::VECTOR2),
2467 UniformData("rotate_angle", Property::Type::FLOAT),
2468 UniformData("gradient_offset", Property::Type::FLOAT),
2471 TestGraphicsController& graphics = application.GetGraphicsController();
2472 graphics.AddCustomUniforms(customUniforms);
2475 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
2476 int _direction[2] = {0, 1};
2477 int _loop_count[3] = {-1, 0, 1};
2478 int _motion[2] = {0, 1};
2479 int _easing[4] = {0, 1, 2, 3};
2481 int test_case_max = 4 * 2 * 3 * 2 * 4;
2483 int test_case_d = 7; // 7 is the number of animated properties.
2485 float _duration = 0.4f;
2486 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2487 float noise_maker = 0.2f;
2488 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2489 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2491 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2493 VisualFactory factory = VisualFactory::Get();
2494 Property::Map propertyMap;
2495 Property::Map animationMap;
2496 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2498 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&
2500 int tc = (test_case + tc_offset);
2501 int idx_easing = tc % 4; tc /= 4;
2502 int idx_motion = tc % 2; tc /= 2;
2503 int idx_loop_count = tc % 3; tc /= 3;
2504 int idx_direction = tc % 2; tc /= 2;
2505 int idx_delay = tc % 4; tc /= 4;
2507 float duration = _duration - _repeat_delay;
2508 float repeat_delay = _repeat_delay;
2509 float delay = _delay[idx_delay] * _duration;
2510 int direction = _direction[idx_direction];
2511 int loop_count = _loop_count[idx_loop_count];
2512 int motion = _motion[idx_motion];
2513 int easing = _easing[idx_easing];
2515 animationMap.Clear();
2516 animationMap.Insert( "startValue", start );
2517 animationMap.Insert( "targetValue", target );
2518 if( direction == 0 )
2520 animationMap.Insert("directionType", "FORWARD");
2524 animationMap.Insert("directionType", "BACKWARD");
2526 animationMap.Insert("duration", duration);
2527 animationMap.Insert("delay", delay);
2528 animationMap.Insert("repeat", loop_count);
2529 animationMap.Insert("repeatDelay", repeat_delay);
2532 animationMap.Insert("motionType", "LOOP");
2536 animationMap.Insert("motionType", "MIRROR");
2540 animationMap.Insert("easingType", "LINEAR");
2542 else if( easing == 1 )
2544 animationMap.Insert("easingType", "IN");
2546 else if( easing == 2 )
2548 animationMap.Insert("easingType", "OUT");
2552 animationMap.Insert("easingType", "IN_OUT");
2555 return animationMap;
2558 // Give different values for debuging
2559 noise_maker += 0.8f;
2560 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2561 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2562 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2563 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2564 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2565 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2566 float offset1 = 0.f + noise_maker * 0.1f;
2568 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2569 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2570 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2571 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2572 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2573 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2574 float offset2 = 2.f + noise_maker * 0.1f;
2576 propertyMap.Insert("gradientType", "LINEAR");
2577 propertyMap.Insert("unitType", "USER_SPACE");
2578 propertyMap.Insert("spreadType", "CLAMP");
2580 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2581 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2582 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2583 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2584 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2585 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2586 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2588 Visual::Base visual = factory.CreateVisual( propertyMap );
2590 DummyControl actor = DummyControl::New( true );
2591 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2592 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2593 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2594 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2595 actor.SetProperty( Actor::Property::COLOR,Color::BLACK);
2596 application.GetScene().Add(actor);
2598 application.SendNotification();
2599 application.Render( 0 );
2600 application.SendNotification();
2602 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2604 application.SendNotification();
2606 //Compare between CPU calculated value and Shader Visual calculated value
2607 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
2609 int tc = (test_case + tc_offset);
2610 int idx_easing = tc % 4; tc /= 4;
2611 int idx_motion = tc % 2; tc /= 2;
2612 int idx_loop_count = tc % 3; tc /= 3;
2613 int idx_direction = tc % 2; tc /= 2;
2614 int idx_delay = tc % 4; tc /= 4;
2616 float duration = _duration - _repeat_delay;
2617 float repeat_delay = _repeat_delay;
2618 float delay = _delay[idx_delay] * _duration;
2619 int direction = _direction[idx_direction];
2620 int loop_count = _loop_count[idx_loop_count];
2621 int motion = _motion[idx_motion];
2622 int easing = _easing[idx_easing];
2624 progress -= delay / _duration;
2626 Property::Value s = start;
2627 Property::Value t = target;
2628 if( direction == 1 )
2633 float x; ///< Animator progress value
2634 if( loop_count == 0 )
2638 else if( loop_count > 0 && progress + 0.01f > loop_count )
2640 x = ( motion == 0 ) ? 1.0f : 0.0f;
2644 if( progress < 0.0f )
2648 progress = fmodf( progress, 1.0f );
2649 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2654 x = progress * 2.0f;
2661 if( easing == 1 ) // EASE_IN
2665 else if( easing == 2 ) // EASE_OUT
2669 else if( easing == 3 ) // EASE_IN_OUT
2671 x = x * x * (3.0f - 2.0f * x);
2674 if( value_type == 0 ) // result type is Float
2678 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2679 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2680 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2682 else if( value_type == 1 ) // result type is Vector2
2686 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2687 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2688 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2690 else if( value_type == 2 ) // result type is Vector3
2694 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2695 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2696 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2698 else // result type is Vector4
2702 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2703 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2704 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2709 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2711 for( int step_iter = 0; step_iter < 3; step_iter++ )
2713 application.SendNotification();
2714 application.Render( _duration * 250.f ); // step i/4
2715 application.SendNotification();
2718 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2719 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2720 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2721 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2722 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2723 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2724 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2726 application.SendNotification();
2727 application.Render(_duration * 250.f); // step 4/4 will not test
2728 application.SendNotification();
2732 application.SendNotification();
2734 application.SendNotification();
2735 application.Render(10.f); // tempral time
2736 application.SendNotification();
2743 int UtcDaliVisualWireframeVisual(void)
2745 ToolkitTestApplication application;
2747 VisualFactory factory = VisualFactory::Get();
2748 Property::Map propertyMap;
2749 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2751 // Create the visual.
2752 Visual::Base visual = factory.CreateVisual( propertyMap );
2754 DALI_TEST_CHECK( visual );
2756 Property::Map resultMap;
2757 visual.CreatePropertyMap( resultMap );
2759 // Check the property values from the returned map from visual
2760 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2761 DALI_TEST_CHECK( value );
2762 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2767 int UtcDaliVisualGetTransform(void)
2769 ToolkitTestApplication application;
2770 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2772 VisualFactory factory = VisualFactory::Get();
2773 Property::Map propertyMap;
2774 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2775 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2776 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2778 Dali::Property::Map visualMap;
2779 colorVisual.CreatePropertyMap( visualMap );
2780 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2781 Dali::Property::Map* map = value->GetMap();
2782 DALI_TEST_CHECK( map );
2784 //Test default values
2786 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2787 DALI_TEST_CHECK( typeValue );
2788 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2791 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2792 DALI_TEST_CHECK( typeValue );
2793 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2796 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2797 DALI_TEST_CHECK( typeValue );
2798 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2801 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2802 DALI_TEST_CHECK( typeValue );
2803 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2806 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2807 DALI_TEST_CHECK( typeValue );
2808 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2811 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2812 DALI_TEST_CHECK( typeValue );
2813 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2816 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2817 DALI_TEST_CHECK( typeValue );
2818 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2824 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2826 Property::Map transform;
2827 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2828 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2829 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2830 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2831 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2832 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(50.0f, 50.0f) );
2834 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2836 Dali::Property::Map visualMap;
2837 visual.CreatePropertyMap( visualMap );
2838 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2839 Dali::Property::Map* map = value->GetMap();
2840 DALI_TEST_CHECK( map );
2843 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2844 DALI_TEST_CHECK( typeValue );
2845 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2848 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2849 DALI_TEST_CHECK( typeValue );
2850 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2853 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2854 DALI_TEST_CHECK( typeValue );
2855 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2858 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2859 DALI_TEST_CHECK( typeValue );
2860 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2863 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2864 DALI_TEST_CHECK( typeValue );
2865 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2868 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2869 DALI_TEST_CHECK( typeValue );
2870 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2873 Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE );
2874 DALI_TEST_CHECK( typeValue );
2875 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(50.0f,50.0f), TEST_LOCATION );
2878 //Put the visual on the stage
2879 DummyControl actor = DummyControl::New(true);
2880 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2881 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
2882 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
2883 application.GetScene().Add(actor);
2885 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2886 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2888 application.SendNotification();
2889 application.Render(0);
2890 Renderer renderer( actor.GetRendererAt(0) );
2892 //Check that the properties have been registered on the Renderer
2893 Property::Index index = renderer.GetPropertyIndex( "offset" );
2894 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2895 Vector2 offset = renderer.GetProperty<Vector2>( index );
2896 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2898 index = renderer.GetPropertyIndex( "size" );
2899 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2900 Vector2 size = renderer.GetProperty<Vector2>( index );
2901 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2903 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2904 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2905 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2906 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2908 index = renderer.GetPropertyIndex( "origin" );
2909 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2910 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2911 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2913 index = renderer.GetPropertyIndex( "anchorPoint" );
2914 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2915 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2916 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2918 index = renderer.GetPropertyIndex( "extraSize" );
2919 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2920 Vector2 extraSize = renderer.GetProperty<Vector2>( index );
2921 DALI_TEST_EQUALS( extraSize, Vector2(50.0f,50.0f), TEST_LOCATION );
2923 //Set a new transform
2925 transform = DefaultTransform();
2926 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2927 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2928 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2929 transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(0.5f, 0.5f) );
2930 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2931 application.SendNotification();
2932 application.Render(0);
2934 //Check that the values have changed in the renderer
2935 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2936 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2938 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2939 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2941 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2942 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2944 //Parent origin and anchor point should have the default values
2945 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2946 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2948 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2949 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2951 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
2952 DALI_TEST_EQUALS( extraSize, Vector2(0.5f,0.5f), TEST_LOCATION );
2955 int UtcDaliVisualSetTransform01(void)
2957 ToolkitTestApplication application;
2958 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2960 VisualFactory factory = VisualFactory::Get();
2961 Property::Map propertyMap;
2962 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2963 propertyMap.Insert(Visual::Property::OPACITY, 0.5f);
2964 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2965 Visual::Base visual = factory.CreateVisual( propertyMap );
2966 TestTransform( application, visual );
2967 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2972 int UtcDaliVisualSetTransform0(void)
2974 ToolkitTestApplication application;
2975 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2977 VisualFactory factory = VisualFactory::Get();
2978 Property::Map propertyMap;
2979 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2980 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2981 Visual::Base visual = factory.CreateVisual( propertyMap );
2982 TestTransform( application, visual );
2983 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2988 int UtcDaliVisualSetTransform1(void)
2990 ToolkitTestApplication application;
2991 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2993 VisualFactory factory = VisualFactory::Get();
2994 Property::Map propertyMap;
2995 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2996 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2997 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2998 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2999 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
3000 Visual::Base visual = factory.CreateVisual( propertyMap );
3001 TestTransform( application, visual );
3002 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
3007 int UtcDaliVisualSetTransform2(void)
3009 ToolkitTestApplication application;
3010 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
3012 VisualFactory factory = VisualFactory::Get();
3013 Property::Map propertyMap;
3014 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
3015 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
3017 Property::Array stopOffsets;
3018 stopOffsets.PushBack( 0.0f );
3019 stopOffsets.PushBack( 0.3f );
3020 stopOffsets.PushBack( 0.6f );
3021 stopOffsets.PushBack( 0.8f );
3022 stopOffsets.PushBack( 1.0f );
3023 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
3025 Property::Array stopColors;
3026 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
3027 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
3028 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
3029 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
3030 stopColors.PushBack( Color::YELLOW );
3031 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
3032 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
3033 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
3034 Visual::Base visual = factory.CreateVisual( propertyMap );
3035 TestTransform( application, visual );
3036 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
3041 int UtcDaliVisualSetTransform3(void)
3043 ToolkitTestApplication application;
3044 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
3046 VisualFactory factory = VisualFactory::Get();
3047 Property::Map propertyMap;
3048 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
3049 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
3050 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
3051 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
3052 Visual::Base visual = factory.CreateVisual( propertyMap );
3053 TestTransform( application, visual );
3054 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
3059 int UtcDaliVisualSetTransform4(void)
3061 ToolkitTestApplication application;
3062 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
3064 VisualFactory factory = VisualFactory::Get();
3065 Property::Map propertyMap;
3066 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
3067 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
3069 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
3070 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
3071 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
3072 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
3073 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
3074 Visual::Base visual = factory.CreateVisual( propertyMap );
3075 TestTransform( application, visual );
3076 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
3081 int UtcDaliVisualSetTransform5(void)
3083 ToolkitTestApplication application;
3084 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
3086 VisualFactory factory = VisualFactory::Get();
3087 Property::Map propertyMap;
3088 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
3089 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
3090 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3091 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
3092 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
3093 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
3094 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
3095 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3096 Visual::Base visual = factory.CreateVisual(propertyMap);
3097 TestTransform( application, visual );
3098 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
3103 int UtcDaliVisualSetTransform6(void)
3105 ToolkitTestApplication application;
3106 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
3108 VisualFactory factory = VisualFactory::Get();
3109 Property::Map propertyMap;
3110 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
3111 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3112 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3113 Visual::Base visual = factory.CreateVisual(propertyMap);
3114 TestTransform( application, visual );
3115 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
3120 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
3122 ToolkitTestApplication application;
3123 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
3125 VisualFactory factory = VisualFactory::Get();
3126 Property::Map propertyMap;
3127 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3128 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3129 Visual::Base visual = factory.CreateVisual( propertyMap );
3131 Property::Map transform;
3132 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
3134 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
3136 visual.SetTransformAndSize( transform, Vector2(100, 100) );
3138 Dali::Property::Map visualMap;
3139 visual.CreatePropertyMap( visualMap );
3140 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
3141 Dali::Property::Map* map = value->GetMap();
3142 DALI_TEST_CHECK( map );
3145 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
3146 DALI_TEST_CHECK( typeValue );
3147 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
3150 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
3151 DALI_TEST_CHECK( typeValue );
3152 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
3158 int UtcDaliNPatchVisualCustomShader(void)
3160 ToolkitTestApplication application;
3161 tet_infoline( "NPatchVisual with custom shader" );
3163 VisualFactory factory = VisualFactory::Get();
3164 Property::Map properties;
3165 Property::Map shader;
3166 const std::string vertexShader = "Foobar";
3167 const std::string fragmentShader = "Foobar";
3168 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3169 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3171 Property::Map transformMap;
3172 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
3173 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
3174 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
3175 transformMap["anchorPoint"] = Align::CENTER;
3176 transformMap["origin"] = Align::CENTER;
3177 transformMap["extraSize"] = Vector2( 0.0f, 50.0f );
3178 properties[Visual::Property::TRANSFORM] = transformMap;
3180 properties[Visual::Property::TYPE] = Visual::IMAGE;
3181 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
3182 properties[Visual::Property::SHADER]=shader;
3183 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3184 properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3186 Visual::Base visual = factory.CreateVisual( properties );
3187 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
3189 // trigger creation through setting on stage
3190 DummyControl dummy = DummyControl::New(true);
3191 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3192 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3193 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
3194 dummy.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
3195 dummy.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
3196 application.GetScene().Add(dummy);
3197 application.SendNotification();
3199 Renderer renderer = dummy.GetRendererAt( 0 );
3200 Shader shader2 = renderer.GetShader();
3201 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3202 Property::Map* map = value.GetMap();
3203 DALI_TEST_CHECK( map );
3205 Property::Index index = renderer.GetPropertyIndex("size");
3206 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
3208 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3209 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
3211 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3212 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
3214 Vector2 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
3215 DALI_TEST_EQUALS( extraSize, Vector2(0.0f, 50.0f), TEST_LOCATION );
3220 int UtcDaliGradientVisualBlendMode(void)
3222 ToolkitTestApplication application;
3223 VisualFactory factory = VisualFactory::Get();
3225 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3226 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3227 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3228 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3229 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3230 .Add( Color::GREEN ) ) );
3232 Visual::Base alphaGradientVisual = factory.CreateVisual(
3233 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3234 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3235 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3236 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3237 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
3239 DummyControl control = DummyControl::New(true);
3240 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3241 application.GetScene().Add( control );
3243 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
3244 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
3245 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
3247 application.SendNotification();
3248 application.Render();
3250 // 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
3251 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
3252 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
3253 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
3258 int UtcDaliVisualRendererRemovalAndReAddition(void)
3260 ToolkitTestApplication application;
3261 tet_infoline( "UtcDaliVisualRendererRemoval" );
3263 VisualFactory factory = VisualFactory::Get();
3264 Property::Map propertyMap;
3265 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3266 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3267 Visual::Base visual = factory.CreateVisual( propertyMap );
3269 visual.SetDepthIndex( 1 );
3271 DummyControl dummyControl = DummyControl::New(true);
3272 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3273 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3274 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3276 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3277 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
3279 application.GetScene().Add( dummyControl );
3281 application.SendNotification();
3282 application.Render();
3284 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3286 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
3287 application.GetScene().Remove( dummyControl );
3288 application.SendNotification();
3289 application.Render();
3291 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3293 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
3295 application.GetScene().Add( dummyControl );
3297 application.SendNotification();
3298 application.Render();
3300 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3307 int UtcDaliVisualTextVisualRender(void)
3309 ToolkitTestApplication application;
3310 tet_infoline( "UtcDaliVisualTextVisualRender" );
3312 VisualFactory factory = VisualFactory::Get();
3313 Property::Map propertyMap;
3314 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3315 propertyMap.Insert( "mixColor", Color::WHITE );
3316 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
3317 propertyMap.Insert( "enableMarkup", false );
3318 propertyMap.Insert( "text", "Hello world" );
3319 propertyMap.Insert( "fontFamily", "TizenSans" );
3321 Property::Map fontStyleMapSet;
3322 fontStyleMapSet.Insert( "weight", "bold" );
3323 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3325 propertyMap.Insert( "pointSize", 12.f );
3326 propertyMap.Insert( "multiLine", true );
3327 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3328 propertyMap.Insert( "verticalAlignment", "CENTER" );
3329 propertyMap.Insert( "textColor", Color::RED );
3330 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3331 textVisual.SetDepthIndex( 1 );
3333 DummyControl dummyControl = DummyControl::New(true);
3334 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3335 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3336 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3338 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3339 dummyControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3341 application.GetScene().Add( dummyControl );
3342 application.SendNotification();
3343 application.Render();
3346 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3347 propertyMap.Clear();
3348 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3349 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3350 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3351 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3353 Property::Map transformMap;
3354 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3355 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3357 textVisual = factory.CreateVisual( propertyMap );
3358 textVisual.SetDepthIndex( 1 );
3360 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3361 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 720.f, 640.f ) );
3363 application.SendNotification(); // force process events to ensure text visual
3364 // adds renderer to the dummy control in OnRelayout
3365 application.Render();
3367 Renderer renderer = dummyControl.GetRendererAt(0u);
3368 Property::Index index = renderer.GetPropertyIndex("size");
3370 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3371 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3376 int UtcDaliVisualTextVisualDisableEnable(void)
3378 ToolkitTestApplication application;
3379 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3381 VisualFactory factory = VisualFactory::Get();
3382 Property::Map propertyMap;
3383 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3384 propertyMap.Insert( "mixColor", Color::WHITE );
3385 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::DevelText::DEFAULT_RENDERING_BACKEND ) );
3386 propertyMap.Insert( "enableMarkup", false );
3387 propertyMap.Insert( "text", "Hello world" );
3388 propertyMap.Insert( "fontFamily", "TizenSans" );
3390 Property::Map fontStyleMapSet;
3391 fontStyleMapSet.Insert( "weight", "bold" );
3392 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3394 propertyMap.Insert( "pointSize", 12.f );
3395 propertyMap.Insert( "multiLine", true );
3396 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3397 propertyMap.Insert( "verticalAlignment", "CENTER" );
3398 propertyMap.Insert( "textColor", Color::RED );
3399 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3400 textVisual.SetDepthIndex( 1 );
3402 DummyControl dummyControl = DummyControl::New(true);
3403 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3404 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3405 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3407 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3408 dummyControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3410 application.GetScene().Add( dummyControl );
3411 application.SendNotification();
3412 application.Render();
3414 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3416 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3418 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3420 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3422 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3427 int UtcDaliVisualPremultipliedAlpha(void)
3429 ToolkitTestApplication application;
3430 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3432 VisualFactory factory = VisualFactory::Get();
3434 // image visual, test default value ( true )
3436 Visual::Base imageVisual = factory.CreateVisual(
3438 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3439 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3441 Dali::Property::Map visualMap;
3442 imageVisual.CreatePropertyMap( visualMap );
3443 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3446 DALI_TEST_CHECK( value );
3447 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3450 // image visual, override premultiplied
3452 Visual::Base imageVisual = factory.CreateVisual(
3454 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3455 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3456 .Add( Visual::Property::PREMULTIPLIED_ALPHA, false ) );
3458 Dali::Property::Map visualMap;
3459 imageVisual.CreatePropertyMap( visualMap );
3460 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3463 DALI_TEST_CHECK( value );
3464 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION);
3467 // svg visual ( premultiplied alpha by default is true )
3469 Visual::Base imageVisual = factory.CreateVisual(
3471 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3472 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3474 Dali::Property::Map visualMap;
3475 imageVisual.CreatePropertyMap( visualMap );
3476 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3479 DALI_TEST_CHECK( value );
3480 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3486 int UtcDaliRegisterVisualOrder(void)
3488 ToolkitTestApplication application;
3489 tet_infoline( "Register Visual Order" );
3491 DummyControl dummyControl = DummyControl::New(true);
3492 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3494 VisualFactory factory = VisualFactory::Get();
3495 Property::Map propertyMap;
3496 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3497 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3499 tet_infoline( "Register visual, should have depth index of 0.0f" );
3500 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3501 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3502 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3504 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3506 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3507 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3508 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3510 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3511 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3512 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3514 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3515 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3516 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3518 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3519 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3520 labelVisual.SetDepthIndex( -2000 );
3521 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3522 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3524 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3525 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3526 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3527 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3528 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3529 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3531 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3532 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3533 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3534 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3535 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3537 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3538 application.GetScene().Add( dummyControl );
3543 int UtcDaliRegisterVisualOrder02(void)
3545 ToolkitTestApplication application;
3546 tet_infoline( "Register Visual Order with Background Set" );
3548 DummyControl dummyControl = DummyControl::New(true);
3549 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3551 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3553 VisualFactory factory = VisualFactory::Get();
3554 Property::Map propertyMap;
3555 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3556 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3558 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3560 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3562 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3563 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3564 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3565 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3566 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3568 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3569 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3570 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3571 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3573 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3574 application.GetScene().Add( dummyControl );
3579 int UtcDaliRegisterVisualWithDepthIndex(void)
3581 ToolkitTestApplication application;
3582 tet_infoline( "Register a Visual With Depth Index" );
3584 DummyControl dummyControl = DummyControl::New(true);
3585 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3587 VisualFactory factory = VisualFactory::Get();
3588 Property::Map propertyMap;
3589 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3590 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3592 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3593 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3594 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3595 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3596 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3598 tet_infoline( "Register another visual with a depth index and it disabled" );
3599 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3600 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3601 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3602 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3604 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3605 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3606 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3607 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3608 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3610 dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3611 application.GetScene().Add( dummyControl );
3616 int UtcDaliSvgVisualCustomShader(void)
3618 ToolkitTestApplication application;
3619 tet_infoline( "SvgVisual with custom shader" );
3621 VisualFactory factory = VisualFactory::Get();
3622 Property::Map properties;
3623 Property::Map shader;
3624 const std::string vertexShader = "Foobar";
3625 const std::string fragmentShader = "Foobar";
3626 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3627 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3629 properties[Visual::Property::TYPE] = Visual::IMAGE;
3630 properties[Visual::Property::SHADER] = shader;
3631 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
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 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3649 Renderer renderer = dummy.GetRendererAt( 0 );
3650 Shader shader2 = renderer.GetShader();
3651 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
3652 Property::Map* map = value.GetMap();
3653 DALI_TEST_CHECK( map );
3655 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
3656 DALI_TEST_EQUALS( fragmentShader, fragment->Get< std::string >(), TEST_LOCATION );
3658 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
3659 DALI_TEST_EQUALS( vertexShader, vertex->Get< std::string >(), TEST_LOCATION );
3664 int UtcDaliVisualRoundedCorner(void)
3666 ToolkitTestApplication application;
3667 tet_infoline( "UtcDaliVisualRoundedCorner" );
3669 static std::vector<UniformData> customUniforms =
3671 UniformData("cornerRadius", Property::Type::VECTOR4),
3672 UniformData("cornerRadiusPolicy", Property::Type::FLOAT),
3675 TestGraphicsController& graphics = application.GetGraphicsController();
3676 graphics.AddCustomUniforms(customUniforms);
3680 VisualFactory factory = VisualFactory::Get();
3681 Property::Map properties;
3682 float cornerRadius = 30.0f;
3684 properties[Visual::Property::TYPE] = Visual::IMAGE;
3685 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3686 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3688 Visual::Base visual = factory.CreateVisual( properties );
3690 // trigger creation through setting on stage
3691 DummyControl dummy = DummyControl::New( true );
3692 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3693 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3695 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3696 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3697 application.GetScene().Add( dummy );
3699 application.SendNotification();
3700 application.Render();
3702 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3704 application.SendNotification();
3705 application.Render();
3707 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION );
3708 // Default corner radius policy is absolute.
3709 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3714 VisualFactory factory = VisualFactory::Get();
3715 Property::Map properties;
3716 float cornerRadius = 30.0f;
3718 properties[Visual::Property::TYPE] = Visual::COLOR;
3719 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3720 properties["cornerRadius"] = cornerRadius;
3721 properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
3723 Visual::Base visual = factory.CreateVisual( properties );
3725 // trigger creation through setting on stage
3726 DummyControl dummy = DummyControl::New( true );
3727 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3728 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3730 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3731 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3732 application.GetScene().Add( dummy );
3734 application.SendNotification();
3735 application.Render();
3737 application.SendNotification();
3738 application.Render();
3740 #ifdef OLD_GRAPHICS_TEST
3741 // Currently test with multiple program doesn't work well. will fix another day
3742 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION );
3743 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3749 VisualFactory factory = VisualFactory::Get();
3750 Property::Map properties;
3751 Vector4 cornerRadius(0.5f, 0.5f, 0.5f, 0.3f);
3753 properties[Visual::Property::TYPE] = Visual::COLOR;
3754 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3755 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3756 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
3758 Visual::Base visual = factory.CreateVisual( properties );
3760 // trigger creation through setting on stage
3761 DummyControl dummy = DummyControl::New( true );
3762 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3763 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3765 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3766 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3767 application.GetScene().Add( dummy );
3769 application.SendNotification();
3770 application.Render();
3772 application.SendNotification();
3773 application.Render();
3775 #ifdef OLD_GRAPHICS_TEST
3776 // Currently test with multiple program doesn't work well. will fix another day
3777 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3778 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION );
3782 // color visual 3 - invalid value
3784 VisualFactory factory = VisualFactory::Get();
3785 Property::Map properties;
3786 Vector4 cornerRadius(30.0f, 30.0f, 30.0f, 20.0f);
3788 properties[Visual::Property::TYPE] = Visual::COLOR;
3789 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3790 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3791 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = -1; // Set an invalid value
3793 Visual::Base visual = factory.CreateVisual( properties );
3795 // trigger creation through setting on stage
3796 DummyControl dummy = DummyControl::New( true );
3797 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3798 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3800 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3801 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3802 application.GetScene().Add( dummy );
3804 application.SendNotification();
3805 application.Render();
3807 application.SendNotification();
3808 application.Render();
3810 #ifdef OLD_GRAPHICS_TEST
3811 // Currently test with multiple program doesn't work well. will fix another day
3812 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3813 // Default corner radius policy is absolute.
3814 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3820 VisualFactory factory = VisualFactory::Get();
3821 Property::Map properties;
3822 float cornerRadius = 30.0f;
3824 properties[Visual::Property::TYPE] = Visual::GRADIENT;
3825 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3826 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3827 properties[GradientVisual::Property::START_POSITION] = Vector2( 0.5f, 0.5f );
3828 properties[GradientVisual::Property::END_POSITION] = Vector2( -0.5f, -0.5f );
3829 properties[GradientVisual::Property::UNITS] = GradientVisual::Units::USER_SPACE;
3831 Property::Array stopOffsets;
3832 stopOffsets.PushBack( 0.0f );
3833 stopOffsets.PushBack( 0.6f );
3834 stopOffsets.PushBack( 1.0f );
3835 properties[GradientVisual::Property::STOP_OFFSET] = stopOffsets;
3837 Property::Array stopColors;
3838 stopColors.PushBack( Color::RED );
3839 stopColors.PushBack( Color::YELLOW );
3840 stopColors.PushBack( Color::GREEN );
3841 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
3843 Visual::Base visual = factory.CreateVisual( properties );
3845 // trigger creation through setting on stage
3846 DummyControl dummy = DummyControl::New( true );
3847 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3848 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3850 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3851 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3852 application.GetScene().Add( dummy );
3854 application.SendNotification();
3855 application.Render();
3857 application.SendNotification();
3858 application.Render();
3860 #ifdef OLD_GRAPHICS_TEST
3861 // Currently test with multiple program doesn't work well. will fix another day
3862 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION );
3863 // Default corner radius policy is absolute.
3864 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3868 // animated image visual
3870 VisualFactory factory = VisualFactory::Get();
3871 Property::Map properties;
3872 Vector4 cornerRadius(24.0f, 23.0f, 22.0f, 21.0f);
3874 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
3875 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
3876 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius.x + 10.0f; // Dummy Input
3877 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3878 properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
3880 Visual::Base visual = factory.CreateVisual( properties );
3882 // trigger creation through setting on stage
3883 DummyControl dummy = DummyControl::New( true );
3884 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3885 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3887 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3888 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3889 application.GetScene().Add( dummy );
3891 application.SendNotification();
3892 application.Render();
3894 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3896 application.SendNotification();
3897 application.Render();
3899 #ifdef OLD_GRAPHICS_TEST
3900 // Currently test with multiple program doesn't work well. will fix another day
3901 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3902 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3906 // vector image visual
3908 VisualFactory factory = VisualFactory::Get();
3909 Property::Map properties;
3910 Vector4 cornerRadius(27.0f, 72.0f, 11.0f, 500.5f);
3912 properties[Visual::Property::TYPE] = Visual::SVG;
3913 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3914 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3916 Visual::Base visual = factory.CreateVisual( properties );
3918 // trigger creation through setting on stage
3919 DummyControl dummy = DummyControl::New( true );
3920 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3921 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3923 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3924 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3925 application.GetScene().Add( dummy );
3927 application.SendNotification();
3928 application.Render();
3930 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3932 application.SendNotification();
3933 application.Render();
3935 #ifdef OLD_GRAPHICS_TEST
3936 // Currently test with multiple program doesn't work well. will fix another day
3937 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
3938 // Default corner radius policy is absolute.
3939 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
3943 // animated vector image visual
3945 VisualFactory factory = VisualFactory::Get();
3946 Property::Map properties;
3947 float cornerRadius = 1.3f;
3949 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
3950 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
3951 properties["cornerRadius"] = Vector4(1.0f, 100.0f, 10.0f, 0.1f); // Dummy Input
3952 properties["cornerRadius"] = cornerRadius;
3953 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
3955 Visual::Base visual = factory.CreateVisual( properties );
3957 // trigger creation through setting on stage
3958 DummyControl dummy = DummyControl::New( true );
3959 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
3960 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3962 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
3963 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
3964 application.GetScene().Add( dummy );
3966 application.SendNotification();
3967 application.Render();
3969 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
3971 application.SendNotification();
3972 application.Render();
3974 #ifdef OLD_GRAPHICS_TEST
3975 // Currently test with multiple program doesn't work well. will fix another day
3976 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION );
3977 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION );
3984 int UtcDaliVisualBorderline(void)
3986 ToolkitTestApplication application;
3987 tet_infoline( "UtcDaliVisualBorderline" );
3989 static std::vector<UniformData> customUniforms =
3991 UniformData("cornerRadius", Property::Type::VECTOR4),
3992 UniformData("cornerRadiusPolicy", Property::Type::FLOAT),
3993 UniformData("borderlineWidth", Property::Type::FLOAT),
3994 UniformData("borderlineColor", Property::Type::VECTOR4),
3995 UniformData("borderlineOffset", Property::Type::FLOAT),
3998 TestGraphicsController& graphics = application.GetGraphicsController();
3999 graphics.AddCustomUniforms(customUniforms);
4003 VisualFactory factory = VisualFactory::Get();
4004 Property::Map properties;
4005 float cornerRadius = 5.0f;
4006 float borderlineWidth = 30.0f;
4007 Vector4 borderlineColor(1.0f, 0.0f, 0.0f, 1.0f);
4008 float borderlineOffset = 1.0f;
4010 properties[Visual::Property::TYPE] = Visual::IMAGE;
4011 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
4012 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4013 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4014 properties[DevelVisual::Property::BORDERLINE_COLOR] = borderlineColor;
4015 properties[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset;
4017 Visual::Base visual = factory.CreateVisual( properties );
4019 // trigger creation through setting on stage
4020 DummyControl dummy = DummyControl::New( true );
4021 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4022 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4024 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4025 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4026 application.GetScene().Add( dummy );
4028 application.SendNotification();
4029 application.Render();
4031 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
4033 application.SendNotification();
4034 application.Render();
4036 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION );
4037 // Default corner radius policy is absolute.
4038 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
4039 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4040 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION );
4041 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION );
4046 VisualFactory factory = VisualFactory::Get();
4047 Property::Map properties;
4048 Vector4 cornerRadius(23.0f, 2.0f, 3.0f, 2.3f);
4049 float borderlineWidth = 30.0f;
4050 Vector4 borderlineColor(0.5f, 0.4f, 0.3f, 0.2f);
4051 float borderlineOffset = -0.4f;
4053 properties[Visual::Property::TYPE] = Visual::COLOR;
4054 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4055 properties["cornerRadius"] = cornerRadius;
4056 properties["borderlineWidth"] = borderlineWidth;
4057 properties["borderlineColor"] = borderlineColor;
4058 properties["borderlineOffset"] = borderlineOffset;
4060 Visual::Base visual = factory.CreateVisual( properties );
4062 // trigger creation through setting on stage
4063 DummyControl dummy = DummyControl::New( true );
4064 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4065 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4067 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4068 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4069 application.GetScene().Add( dummy );
4071 application.SendNotification();
4072 application.Render();
4074 application.SendNotification();
4075 application.Render();
4077 #ifdef OLD_GRAPHICS_TEST
4078 // Currently test with multiple program doesn't work well. will fix another day
4079 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
4080 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4081 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION );
4082 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION );
4086 // color visual 2, default color, default offset
4088 VisualFactory factory = VisualFactory::Get();
4089 Property::Map properties;
4090 float borderlineWidth = 30.0f;
4092 properties[Visual::Property::TYPE] = Visual::COLOR;
4093 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4094 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4096 Visual::Base visual = factory.CreateVisual( properties );
4098 // trigger creation through setting on stage
4099 DummyControl dummy = DummyControl::New( true );
4100 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4101 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4103 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4104 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4105 application.GetScene().Add( dummy );
4107 application.SendNotification();
4108 application.Render();
4110 application.SendNotification();
4111 application.Render();
4113 #ifdef OLD_GRAPHICS_TEST
4114 // Currently test with multiple program doesn't work well. will fix another day
4115 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4116 // Default borderline color is BLACK.
4117 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", Color::BLACK ), true, TEST_LOCATION );
4118 // Default borderline offset is 0.0f.
4119 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", 0.0f ), true, TEST_LOCATION );
4123 // color visual 3, offset not [-1.0 ~ 1.0], but uniform value is same anyway
4125 VisualFactory factory = VisualFactory::Get();
4126 Property::Map properties;
4127 float borderlineWidth = 30.0f;
4128 Vector4 borderlineColor(0.5f, 0.4f, 0.3f, 0.2f);
4129 float borderlineOffset = 37.4f;
4131 properties[Visual::Property::TYPE] = Visual::COLOR;
4132 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4133 properties["borderlineWidth"] = borderlineWidth;
4134 properties["borderlineColor"] = borderlineColor;
4135 properties["borderlineOffset"] = borderlineOffset;
4137 Visual::Base visual = factory.CreateVisual( properties );
4139 // trigger creation through setting on stage
4140 DummyControl dummy = DummyControl::New( true );
4141 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4142 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4144 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4145 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4146 application.GetScene().Add( dummy );
4148 application.SendNotification();
4149 application.Render();
4151 application.SendNotification();
4152 application.Render();
4154 #ifdef OLD_GRAPHICS_TEST
4155 // Currently test with multiple program doesn't work well. will fix another day
4156 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4157 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION );
4158 // NOTE : borderlineOffset will clamp in fragment shader. not visual itself
4159 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION );
4165 VisualFactory factory = VisualFactory::Get();
4166 Property::Map properties;
4167 float borderlineWidth = 30.0f;
4168 float cornerRadius = 70.0f;
4170 properties[Visual::Property::TYPE] = Visual::GRADIENT;
4171 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4172 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4173 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4174 properties[GradientVisual::Property::START_POSITION] = Vector2( 0.5f, 0.5f );
4175 properties[GradientVisual::Property::END_POSITION] = Vector2( -0.5f, -0.5f );
4176 properties[GradientVisual::Property::UNITS] = GradientVisual::Units::USER_SPACE;
4178 Property::Array stopOffsets;
4179 stopOffsets.PushBack( 0.0f );
4180 stopOffsets.PushBack( 0.6f );
4181 stopOffsets.PushBack( 1.0f );
4182 properties[GradientVisual::Property::STOP_OFFSET] = stopOffsets;
4184 Property::Array stopColors;
4185 stopColors.PushBack( Color::RED );
4186 stopColors.PushBack( Color::YELLOW );
4187 stopColors.PushBack( Color::GREEN );
4188 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
4190 Visual::Base visual = factory.CreateVisual( properties );
4192 // trigger creation through setting on stage
4193 DummyControl dummy = DummyControl::New( true );
4194 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4195 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4197 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4198 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4199 application.GetScene().Add( dummy );
4201 application.SendNotification();
4202 application.Render();
4204 application.SendNotification();
4205 application.Render();
4207 #ifdef OLD_GRAPHICS_TEST
4208 // Currently test with multiple program doesn't work well. will fix another day
4209 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION );
4210 // Default corner radius policy is absolute.
4211 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
4212 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4213 // Default borderline color is BLACK.
4214 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", Color::BLACK ), true, TEST_LOCATION );
4215 // Default borderline offset is 0.0f.
4216 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", 0.0f ), true, TEST_LOCATION );
4220 // animated image visual
4222 VisualFactory factory = VisualFactory::Get();
4223 Property::Map properties;
4224 float borderlineWidth = 24.0f;
4225 float borderlineOffset = -1.0f;
4227 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
4228 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
4229 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth + 10.0f; // Dummy Input
4230 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4231 properties["borderlineOffset"] = borderlineOffset;
4233 Visual::Base visual = factory.CreateVisual( properties );
4235 // trigger creation through setting on stage
4236 DummyControl dummy = DummyControl::New( true );
4237 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4238 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4240 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4241 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4242 application.GetScene().Add( dummy );
4244 application.SendNotification();
4245 application.Render();
4247 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
4249 application.SendNotification();
4250 application.Render();
4252 #ifdef OLD_GRAPHICS_TEST
4253 // Currently test with multiple program doesn't work well. will fix another day
4254 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4255 // Default borderline color is BLACK.
4256 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", Color::BLACK ), true, TEST_LOCATION );
4257 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION );
4261 // vector image visual
4263 VisualFactory factory = VisualFactory::Get();
4264 Property::Map properties;
4265 Vector4 cornerRadius(54.0f, 43.0f, 32.0f, 21.0f);
4266 float borderlineWidth = 27.0f;
4267 Vector4 borderlineColor(0.5f, 0.5f, 0.5f, 0.0f);
4269 properties[Visual::Property::TYPE] = Visual::SVG;
4270 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
4271 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4272 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4273 properties[DevelVisual::Property::BORDERLINE_COLOR] = borderlineColor;
4275 Visual::Base visual = factory.CreateVisual( properties );
4277 // trigger creation through setting on stage
4278 DummyControl dummy = DummyControl::New( true );
4279 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4280 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4282 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4283 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4284 application.GetScene().Add( dummy );
4286 application.SendNotification();
4287 application.Render();
4289 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
4291 application.SendNotification();
4292 application.Render();
4294 #ifdef OLD_GRAPHICS_TEST
4295 // Currently test with multiple program doesn't work well. will fix another day
4296 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
4297 // Default corner radius policy is absolute.
4298 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION );
4299 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4300 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION );
4301 // Default borderline offset is 0.0.
4302 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", 0.0f ), true, TEST_LOCATION );
4306 // animated vector image visual
4308 VisualFactory factory = VisualFactory::Get();
4309 Property::Map properties;
4310 Vector4 cornerRadius(1.3f, 0.0f, 0.4f, 0.2f);
4311 float borderlineWidth = 13.0f;
4312 Vector4 borderlineColor(0.3f, 0.3f, 0.3f, 1.0f);
4313 float borderlineOffset = 13.0f;
4315 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
4316 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
4317 properties["cornerRadius"] = cornerRadius;
4318 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
4319 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4320 properties["borderlineColor"] = borderlineColor;
4321 properties[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset;
4323 Visual::Base visual = factory.CreateVisual( properties );
4325 // trigger creation through setting on stage
4326 DummyControl dummy = DummyControl::New( true );
4327 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4328 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4330 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4331 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4332 application.GetScene().Add( dummy );
4334 application.SendNotification();
4335 application.Render();
4337 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
4339 application.SendNotification();
4340 application.Render();
4342 #ifdef OLD_GRAPHICS_TEST
4343 // Currently test with multiple program doesn't work well. will fix another day
4344 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION );
4345 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION );
4346 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION );
4347 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION );
4348 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION );
4355 int UtcDaliVisualBorderlineBlendModeTest(void)
4357 ToolkitTestApplication application;
4358 tet_infoline( "UtcDaliVisualBorderlineBlendModeTest" );
4359 VisualFactory factory = VisualFactory::Get();
4361 // Case 1 : Test which doesn't support borderline feature.
4363 tet_printf("Test Unsupported visual type\n");
4364 Property::Map propertyMap;
4365 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
4366 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
4367 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4368 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
4370 DummyControl actor = DummyControl::New(true);
4371 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4372 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
4373 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
4374 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
4375 application.GetScene().Add(actor);
4377 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
4379 Renderer renderer = actor.GetRendererAt(0);
4381 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4382 // Visual::BORDER doesn't support BORDERLINE. BlendMode is AUTO.
4383 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
4385 application.GetScene().Remove(actor);
4388 // Case 2 : Test which support borderline feature.
4390 tet_printf("Test normal case\n");
4391 Property::Map propertyMap;
4392 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4393 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
4394 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4395 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
4397 DummyControl actor = DummyControl::New(true);
4398 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4399 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, colorVisual );
4400 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
4401 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
4402 application.GetScene().Add(actor);
4404 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
4406 Renderer renderer = actor.GetRendererAt(0);
4408 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4409 // Visual::COLOR support BORDERLINE. BlendMode is ON_WITHOUT_CULL.
4410 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION );
4412 application.GetScene().Remove(actor);
4415 // Case 3 : Test which animated borderline.
4417 tet_printf("Test borderline animate case\n");
4418 Property::Map propertyMap;
4419 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4420 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
4421 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
4423 DummyControl actor = DummyControl::New(true);
4424 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4425 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, colorVisual );
4426 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
4427 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
4428 application.GetScene().Add(actor);
4430 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
4432 Renderer renderer = actor.GetRendererAt(0);
4434 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4435 // BlendMode is AUTO.
4436 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
4438 Animation animation = Animation::New(0.1f);
4439 animation.AnimateTo( DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), 1.0f );
4442 application.SendNotification();
4443 application.Render();
4444 application.Render(101u); // End of animation
4446 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4447 // BlendMode is ON_WITHOUT_CULL.
4448 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION );
4450 Animation revanimation = Animation::New(0.1f);
4451 revanimation.AnimateTo( DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), 0.0f );
4452 revanimation.Play();
4454 application.SendNotification();
4455 application.Render();
4456 application.Render(101u); // End of animation
4458 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4459 // BlendMode is still ON_WITHOUT_CULL.
4460 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION );
4462 application.GetScene().Remove(actor);
4465 // Case 4 : Test which animated corner radius occur.
4467 tet_printf("Test borderline animate case\n");
4468 Property::Map propertyMap;
4469 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4470 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
4471 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4472 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
4474 DummyControl actor = DummyControl::New(true);
4475 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4476 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, colorVisual );
4477 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
4478 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
4479 application.GetScene().Add(actor);
4481 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
4483 Renderer renderer = actor.GetRendererAt(0);
4485 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4486 // BlendMode is ON_WITHOUT_CULL.
4487 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION );
4489 Animation animation = Animation::New(0.1f);
4490 animation.AnimateTo( DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), Vector4(1.0f, 1.0f, 1.0f, 1.0f) );
4493 application.SendNotification();
4494 application.Render();
4495 application.Render(101u); // End of animation
4497 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
4498 // BlendMode is ON_WITHOUT_CULL.
4499 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION );
4501 application.GetScene().Remove(actor);
4507 int UtcDaliVisualBorderlineColorAnimateTest(void)
4509 ToolkitTestApplication application;
4510 tet_infoline( "UtcDaliVisualBorderlineColorAnimateTest color" );
4512 TestGraphicsController& graphics = application.GetGraphicsController();
4513 static std::vector<UniformData> customUniforms =
4515 UniformData("mixColor", Property::Type::VECTOR3),
4516 UniformData("cornerRadius", Property::Type::VECTOR4),
4517 UniformData("cornerRadiusPolicy", Property::Type::FLOAT),
4518 UniformData("borderlineWidth", Property::Type::FLOAT),
4519 UniformData("borderlineColor", Property::Type::VECTOR4),
4520 UniformData("borderlineOffset", Property::Type::FLOAT),
4522 graphics.AddCustomUniforms(customUniforms);
4525 const Vector3 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f );
4526 const float INITIAL_MIX_OPACITY( 0.5f );
4527 const Vector4 INITIAL_BORDERLINE_COLOR( 0.0f,1.0f,0.0f,1.0f );
4528 const float INITIAL_ACTOR_OPACITY( 1.0f );
4529 const Vector3 TARGET_MIX_COLOR( 1.0f, 0.0f, 0.0f );
4530 const float TARGET_MIX_OPACITY( 0.8f );
4531 const Vector4 TARGET_BORDERLINE_COLOR( 1.0f, 0.0f, 1.0f, 0.2f);
4532 const float TARGET_ACTOR_OPACITY( 0.5f );
4534 VisualFactory factory = VisualFactory::Get();
4535 Property::Map propertyMap;
4536 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4537 propertyMap.Insert(Visual::Property::MIX_COLOR, INITIAL_MIX_COLOR);
4538 propertyMap.Insert(Visual::Property::OPACITY, INITIAL_MIX_OPACITY);
4539 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4540 propertyMap.Insert(DevelVisual::Property::BORDERLINE_COLOR, INITIAL_BORDERLINE_COLOR);
4541 Visual::Base visual = factory.CreateVisual( propertyMap );
4543 DummyControl actor = DummyControl::New(true);
4544 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4545 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4546 actor.SetProperty( Actor::Property::SIZE, Vector2( 2000.f, 2000.f ) );
4547 actor.SetProperty( Actor::Property::OPACITY, INITIAL_ACTOR_OPACITY );
4548 actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
4549 application.GetScene().Add(actor);
4551 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
4553 Animation animation = Animation::New(4.0f);
4554 animation.AnimateTo( DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, Visual::Property::MIX_COLOR), TARGET_MIX_COLOR );
4555 animation.AnimateTo( DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), TARGET_MIX_OPACITY);
4556 animation.AnimateTo( DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), TARGET_BORDERLINE_COLOR );
4557 animation.AnimateTo( Property(actor, Actor::Property::OPACITY), TARGET_ACTOR_OPACITY);
4560 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4562 application.SendNotification();
4563 application.Render(0);
4564 application.Render(2000u); // halfway point
4565 application.SendNotification();
4567 Vector3 halfwayMixColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR ) * 0.5f;
4568 float halfwayMixOpacity = (INITIAL_MIX_OPACITY + TARGET_MIX_OPACITY ) * 0.5f;
4569 Vector4 halfwayBorderlineColor = (INITIAL_BORDERLINE_COLOR + TARGET_BORDERLINE_COLOR) * 0.5f;
4570 float halfwayActorOpacity = (INITIAL_ACTOR_OPACITY + TARGET_ACTOR_OPACITY ) * 0.5f;
4571 halfwayMixOpacity *= halfwayActorOpacity;
4572 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector3>("mixColor", halfwayMixColor), true, TEST_LOCATION );
4573 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector4>("uColor", Vector4(1.0f, 1.0f, 1.0f, halfwayMixOpacity)), true, TEST_LOCATION );
4574 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector4>("uActorColor", Vector4(1.0f, 1.0f, 1.0f, halfwayActorOpacity)), true, TEST_LOCATION );
4575 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector4>("borderlineColor", halfwayBorderlineColor), true, TEST_LOCATION );
4577 application.Render(2001u); // go past end
4578 application.SendNotification(); // Trigger signals
4580 DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), Vector4(1.0f, 1.0f, 1.0f, TARGET_ACTOR_OPACITY), TEST_LOCATION );
4581 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector3>("mixColor", TARGET_MIX_COLOR), true, TEST_LOCATION );
4582 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector4>("uColor", Vector4(1.0f, 1.0f, 1.0f, TARGET_MIX_OPACITY * TARGET_ACTOR_OPACITY) ), true, TEST_LOCATION );
4583 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector4>("uActorColor", Vector4(1.0f, 1.0f, 1.0f, TARGET_ACTOR_OPACITY)), true, TEST_LOCATION );
4584 DALI_TEST_EQUALS( glAbstraction.CheckUniformValue<Vector4>("borderlineColor", TARGET_BORDERLINE_COLOR ), true, TEST_LOCATION );
4592 int UtcDaliColorVisualBlurRadius(void)
4594 ToolkitTestApplication application;
4595 tet_infoline( "UtcDaliColorVisualBlurRadius" );
4597 static std::vector<UniformData> customUniforms =
4599 UniformData("blurRadius", Property::Type::FLOAT),
4602 TestGraphicsController& graphics = application.GetGraphicsController();
4603 graphics.AddCustomUniforms(customUniforms);
4605 VisualFactory factory = VisualFactory::Get();
4606 Property::Map properties;
4607 float blurRadius = 20.0f;
4609 properties[Visual::Property::TYPE] = Visual::COLOR;
4610 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4611 properties["blurRadius"] = blurRadius;
4613 Visual::Base visual = factory.CreateVisual( properties );
4615 // trigger creation through setting on stage
4616 DummyControl dummy = DummyControl::New( true );
4617 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
4618 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
4620 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
4621 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
4622 application.GetScene().Add( dummy );
4624 application.SendNotification();
4625 application.Render();
4627 application.SendNotification();
4628 application.Render();
4630 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "blurRadius", blurRadius ), true, TEST_LOCATION );
4635 int UtcDaliVisualGetType(void)
4637 ToolkitTestApplication application;
4638 tet_infoline( "UtcDaliVisualGetType" );
4640 VisualFactory factory = VisualFactory::Get();
4643 Property::Map properties;
4644 properties[Visual::Property::TYPE] = Visual::BORDER;
4645 Visual::Base visual = factory.CreateVisual( properties );
4647 DALI_TEST_CHECK( visual.GetType() == Visual::BORDER );
4651 Property::Map properties;
4652 properties[Visual::Property::TYPE] = Visual::COLOR;
4653 Visual::Base visual = factory.CreateVisual( properties );
4655 DALI_TEST_CHECK( visual.GetType() == Visual::COLOR );
4659 Property::Map properties;
4660 properties[Visual::Property::TYPE] = Visual::GRADIENT;
4661 properties[GradientVisual::Property::START_POSITION] = Vector2( -1.f, -1.f );
4662 properties[GradientVisual::Property::END_POSITION] = Vector2( 1.f, 1.f );
4663 properties[GradientVisual::Property::STOP_OFFSET] = Vector2(0.f, 1.f);
4664 // propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
4665 Property::Array stopColors;
4666 stopColors.PushBack( Color::RED );
4667 stopColors.PushBack( Color::GREEN );
4668 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
4669 Visual::Base visual = factory.CreateVisual( properties );
4671 DALI_TEST_CHECK( visual.GetType() == Visual::GRADIENT );
4675 Property::Map properties;
4676 properties[Visual::Property::TYPE] = Visual::IMAGE;
4677 properties.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
4678 Visual::Base visual = factory.CreateVisual( properties );
4680 DALI_TEST_CHECK( visual.GetType() == Visual::IMAGE );
4684 Property::Map properties;
4685 properties[Visual::Property::TYPE] = Visual::MESH;
4686 Visual::Base visual = factory.CreateVisual( properties );
4688 DALI_TEST_CHECK( visual.GetType() == Visual::MESH );
4692 Property::Map properties;
4693 properties[Visual::Property::TYPE] = Visual::PRIMITIVE;
4694 properties[PrimitiveVisual::Property::SHAPE] = PrimitiveVisual::Shape::CUBE;
4695 Visual::Base visual = factory.CreateVisual( properties );
4697 DALI_TEST_CHECK( visual.GetType() == Visual::PRIMITIVE );
4701 Property::Map properties;
4702 properties[Visual::Property::TYPE] = Visual::WIREFRAME;
4703 Visual::Base visual = factory.CreateVisual( properties );
4705 DALI_TEST_CHECK( visual.GetType() == Visual::WIREFRAME );
4709 Property::Map properties;
4710 properties[Visual::Property::TYPE] = Visual::TEXT;
4711 Visual::Base visual = factory.CreateVisual( properties );
4713 DALI_TEST_CHECK( visual.GetType() == Visual::TEXT );
4717 Property::Map properties;
4718 properties[Visual::Property::TYPE] = Visual::N_PATCH;
4719 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
4720 Visual::Base visual = factory.CreateVisual( properties );
4722 DALI_TEST_CHECK( visual.GetType() == Visual::N_PATCH );
4726 Property::Map properties;
4727 properties[Visual::Property::TYPE] = Visual::SVG;
4728 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
4729 Visual::Base visual = factory.CreateVisual( properties );
4731 DALI_TEST_CHECK( visual.GetType() == Visual::SVG );
4735 Property::Map properties;
4736 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
4737 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
4738 Visual::Base visual = factory.CreateVisual( properties );
4740 DALI_TEST_CHECK( visual.GetType() == Visual::ANIMATED_IMAGE );
4744 Property::Map properties;
4745 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_GRADIENT;
4746 Visual::Base visual = factory.CreateVisual( properties );
4748 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ANIMATED_GRADIENT ) );
4752 Property::Map properties;
4753 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
4754 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
4755 Visual::Base visual = factory.CreateVisual( properties );
4757 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ANIMATED_VECTOR_IMAGE ) );
4761 Property::Map properties;
4762 properties[Visual::Property::TYPE] = DevelVisual::ARC;
4763 Visual::Base visual = factory.CreateVisual( properties );
4765 DALI_TEST_CHECK( visual.GetType() == static_cast<Visual::Type>( DevelVisual::ARC ) );
4771 int UtcDaliVisualGetVisualProperty01(void)
4773 ToolkitTestApplication application;
4774 tet_infoline( "UtcDaliVisualGetVisualProperty01: Test animatable property, Visual::Base, ColorVisual" );
4776 static std::vector<UniformData> customUniforms =
4778 UniformData("mixColor", Property::Type::VECTOR3),
4779 UniformData("offset", Property::Type::VECTOR2),
4780 UniformData("size", Property::Type::VECTOR2),
4781 UniformData("cornerRadius", Property::Type::VECTOR4),
4782 UniformData("blurRadius", Property::Type::FLOAT),
4783 UniformData("borderlineWidth", Property::Type::FLOAT),
4784 UniformData("borderlineColor", Property::Type::VECTOR4),
4785 UniformData("borderlineOffset", Property::Type::FLOAT),
4788 TestGraphicsController& graphics = application.GetGraphicsController();
4789 graphics.AddCustomUniforms(customUniforms);
4791 VisualFactory factory = VisualFactory::Get();
4792 Property::Map propertyMap;
4793 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4794 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
4795 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, Vector4(10.0f, 0.0f, 2.0f, 4.0f));
4796 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE);
4797 propertyMap.Insert(DevelColorVisual::Property::BLUR_RADIUS, 20.0f);
4798 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 20.0f);
4799 propertyMap.Insert(DevelVisual::Property::BORDERLINE_COLOR, Color::RED);
4800 propertyMap.Insert(DevelVisual::Property::BORDERLINE_OFFSET, 1.0f);
4801 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
4803 DummyControl dummyControl = DummyControl::New(true);
4804 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
4805 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
4806 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
4807 application.GetScene().Add(dummyControl);
4809 application.SendNotification();
4810 application.Render();
4812 Vector3 targetColor(1.0f, 1.0f, 1.0f);
4813 Vector2 targetOffset(0.05f, 0.05f);
4814 Vector2 targetSize(1.1f, 1.1f);
4815 float targetOpacity = 0.5f;
4816 Vector4 targetCornerRadius(0.0f, 0.0f, 0.0f, 0.0f);
4817 float targetBlurRadius = 10.0f;
4818 float targetBorderlineWidth = 25.0f;
4819 Vector4 targetBorderlineColor(1.0f, 1.0f, 1.0f, 1.0f);
4820 float targetBorderlineOffset = -1.0f;
4822 Animation animation = Animation::New(1.0f);
4823 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::MIX_COLOR), targetColor);
4824 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
4825 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Transform::Property::OFFSET), targetOffset);
4826 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Transform::Property::SIZE), targetSize);
4827 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
4828 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelColorVisual::Property::BLUR_RADIUS), targetBlurRadius);
4829 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
4830 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
4831 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
4834 application.SendNotification();
4835 application.Render();
4836 application.Render(1001u); // End of animation
4838 Property::Map resultMap;
4839 colorVisual.CreatePropertyMap( resultMap );
4841 // Test property values: they should be updated
4842 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
4843 DALI_TEST_CHECK(colorValue);
4844 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetColor.r, targetColor.g, targetColor.b, targetOpacity), TEST_LOCATION);
4846 Property::Value* transformValue = resultMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
4847 Dali::Property::Map* transformMap = transformValue->GetMap();
4848 DALI_TEST_CHECK(transformMap);
4850 Property::Value* offsetValue = transformMap->Find(Toolkit::Visual::Transform::Property::OFFSET);
4851 DALI_TEST_CHECK(offsetValue);
4852 DALI_TEST_EQUALS(offsetValue->Get<Vector2>(), targetOffset, TEST_LOCATION);
4854 Property::Value* sizeValue = transformMap->Find(Toolkit::Visual::Transform::Property::SIZE);
4855 DALI_TEST_CHECK(sizeValue);
4856 DALI_TEST_EQUALS(sizeValue->Get<Vector2>(), targetSize, TEST_LOCATION);
4858 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
4859 DALI_TEST_CHECK(cornerRadiusValue);
4860 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
4862 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
4863 DALI_TEST_CHECK(blurRadiusValue);
4864 DALI_TEST_EQUALS(blurRadiusValue->Get< float >(), targetBlurRadius, TEST_LOCATION);
4866 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
4867 DALI_TEST_CHECK(borderlineWidthValue);
4868 DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION);
4870 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
4871 DALI_TEST_CHECK(borderlineColorValue);
4872 DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION);
4874 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
4875 DALI_TEST_CHECK(borderlineOffsetValue);
4876 DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION);
4878 // Test uniform values
4879 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", targetColor), true, TEST_LOCATION);
4880 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("offset", targetOffset), true, TEST_LOCATION);
4881 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("size", targetSize), true, TEST_LOCATION);
4882 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
4883 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", targetBlurRadius), true, TEST_LOCATION);
4884 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
4885 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
4886 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
4888 // Test not-supported property
4889 Property property1 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::PREMULTIPLIED_ALPHA);
4890 DALI_TEST_CHECK(!property1.object);
4891 DALI_TEST_CHECK(property1.propertyIndex == Property::INVALID_INDEX);
4893 // Test unregistered visual
4894 Property property3 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL2, Visual::Property::MIX_COLOR);
4895 DALI_TEST_CHECK(!property3.object);
4896 DALI_TEST_CHECK(property3.propertyIndex == Property::INVALID_INDEX);
4901 int UtcDaliVisualGetVisualProperty02(void)
4903 ToolkitTestApplication application;
4904 tet_infoline( "UtcDaliVisualGetVisualProperty02: Test animatable property, ColorVisual" );
4906 static std::vector<UniformData> customUniforms =
4908 UniformData("mixColor", Property::Type::VECTOR3),
4909 UniformData("offset", Property::Type::VECTOR2),
4910 UniformData("size", Property::Type::VECTOR2),
4911 UniformData("cornerRadius", Property::Type::VECTOR4),
4912 UniformData("borderlineWidth", Property::Type::FLOAT),
4913 UniformData("borderlineCOlor", Property::Type::VECTOR4),
4914 UniformData("borderlineOffset", Property::Type::FLOAT),
4915 UniformData("blurRadius", Property::Type::FLOAT),
4918 TestGraphicsController& graphics = application.GetGraphicsController();
4919 graphics.AddCustomUniforms(customUniforms);
4921 VisualFactory factory = VisualFactory::Get();
4922 Property::Map propertyMap;
4923 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4924 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
4926 DummyControl dummyControl = DummyControl::New(true);
4927 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
4928 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
4929 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
4930 application.GetScene().Add(dummyControl);
4932 application.SendNotification();
4933 application.Render();
4935 Vector3 targetColor(1.0f, 1.0f, 1.0f);
4936 Vector2 targetOffset(0.05f, 0.05f);
4937 Vector2 targetSize(1.1f, 1.1f);
4938 float targetOpacity = 0.5f;
4939 Vector4 targetCornerRadius(20.0f, 0.0f, 20.0f, 0.0f);
4940 float targetBorderlineWidth = 77.7f;
4941 Vector4 targetBorderlineColor(0.4f, 0.2f, 0.3f, 0.9f);
4942 float targetBorderlineOffset = 1.0f;
4943 float targetBlurRadius = 10.0f;
4945 // Should work when the properties are not set before
4946 Animation animation = Animation::New(1.0f);
4947 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "mixColor"), targetColor);
4948 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "opacity"), targetOpacity);
4949 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "offset"), targetOffset);
4950 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "size"), targetSize);
4951 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "cornerRadius"), targetCornerRadius);
4952 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "borderlineWidth"), targetBorderlineWidth);
4953 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "borderlineColor"), targetBorderlineColor);
4954 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "borderlineOffset"), targetBorderlineOffset);
4955 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "blurRadius"), targetBlurRadius);
4958 application.SendNotification();
4959 application.Render();
4960 application.Render(1001u); // End of animation
4962 Property::Map resultMap;
4963 colorVisual.CreatePropertyMap(resultMap);
4965 // Test property values: they should be updated
4966 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
4967 DALI_TEST_CHECK(colorValue);
4968 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetColor.r, targetColor.g, targetColor.b, targetOpacity), TEST_LOCATION);
4970 Property::Value* transformValue = resultMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
4971 Dali::Property::Map* transformMap = transformValue->GetMap();
4972 DALI_TEST_CHECK(transformMap);
4974 Property::Value* offsetValue = transformMap->Find(Toolkit::Visual::Transform::Property::OFFSET);
4975 DALI_TEST_CHECK(offsetValue);
4976 DALI_TEST_EQUALS(offsetValue->Get<Vector2>(), targetOffset, TEST_LOCATION);
4978 Property::Value* sizeValue = transformMap->Find(Toolkit::Visual::Transform::Property::SIZE);
4979 DALI_TEST_CHECK(sizeValue);
4980 DALI_TEST_EQUALS(sizeValue->Get<Vector2>(), targetSize, TEST_LOCATION);
4982 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
4983 DALI_TEST_CHECK(cornerRadiusValue);
4984 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
4986 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
4987 DALI_TEST_CHECK(borderlineWidthValue);
4988 DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION);
4990 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
4991 DALI_TEST_CHECK(borderlineColorValue);
4992 DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION);
4994 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
4995 DALI_TEST_CHECK(borderlineOffsetValue);
4996 DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION);
4998 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
4999 DALI_TEST_CHECK(blurRadiusValue);
5000 DALI_TEST_EQUALS(blurRadiusValue->Get< float >(), targetBlurRadius, TEST_LOCATION);
5002 #ifdef OLD_GRAPHICS_TEST
5003 // Currently test with multiple program doesn't work well. will fix another day
5004 // Test uniform values
5005 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", targetColor), true, TEST_LOCATION);
5006 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("offset", targetOffset), true, TEST_LOCATION);
5007 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("size", targetSize), true, TEST_LOCATION);
5008 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5009 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", targetBlurRadius), true, TEST_LOCATION);
5015 int UtcDaliVisualGetVisualProperty03(void)
5017 ToolkitTestApplication application;
5018 tet_infoline( "UtcDaliVisualGetVisualProperty03: Test animatable property, ImageVisual" );
5020 static std::vector<UniformData> customUniforms =
5022 UniformData("cornerRadius", Property::Type::VECTOR4),
5023 UniformData("borderlineWidth", Property::Type::FLOAT),
5024 UniformData("borderlineColor", Property::Type::VECTOR4),
5025 UniformData("borderlineOffset", Property::Type::FLOAT),
5028 TestGraphicsController& graphics = application.GetGraphicsController();
5029 graphics.AddCustomUniforms(customUniforms);
5031 VisualFactory factory = VisualFactory::Get();
5032 Property::Map propertyMap;
5033 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
5034 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
5036 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
5038 DummyControl dummyControl = DummyControl::New(true);
5039 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5040 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
5041 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5042 application.GetScene().Add(dummyControl);
5044 // Wait for image loading
5045 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5047 application.SendNotification();
5048 application.Render();
5050 float targetOpacity = 0.5f;
5051 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5052 float targetBorderlineWidth = 10.0f;
5053 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5054 float targetBorderlineOffset = -1.5f;
5056 Animation animation = Animation::New(1.0f);
5057 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5058 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5059 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5060 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5061 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5064 application.SendNotification();
5065 application.Render();
5066 application.Render(1001u); // End of animation
5068 Property::Map resultMap;
5069 imageVisual.CreatePropertyMap( resultMap );
5071 // Test property values: they should be updated
5072 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5073 DALI_TEST_CHECK(colorValue);
5074 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5076 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5077 DALI_TEST_CHECK(cornerRadiusValue);
5078 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
5080 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5081 DALI_TEST_CHECK(borderlineWidthValue);
5082 DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION);
5084 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5085 DALI_TEST_CHECK(borderlineColorValue);
5086 DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION);
5088 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5089 DALI_TEST_CHECK(borderlineOffsetValue);
5090 DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION);
5092 #ifdef OLD_GRAPHICS_TEST
5093 // Currently test with multiple program doesn't work well. will fix another day
5094 // Test uniform value
5095 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5096 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5097 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5098 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5104 int UtcDaliVisualGetVisualProperty04(void)
5106 ToolkitTestApplication application;
5107 tet_infoline( "UtcDaliVisualGetVisualProperty04: Test animatable property, GradientVisual" );
5109 static std::vector<UniformData> customUniforms =
5111 UniformData("cornerRadius", Property::Type::VECTOR4),
5114 TestGraphicsController& graphics = application.GetGraphicsController();
5115 graphics.AddCustomUniforms(customUniforms);
5117 Vector2 start(-1.f, -1.f);
5118 Vector2 end(1.f, 1.f);
5119 Property::Array stopColors;
5120 stopColors.PushBack( Color::RED );
5121 stopColors.PushBack( Color::GREEN );
5123 VisualFactory factory = VisualFactory::Get();
5124 Property::Map propertyMap;
5125 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
5126 propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
5127 propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
5128 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f));
5129 propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
5130 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
5131 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
5133 DummyControl dummyControl = DummyControl::New(true);
5134 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5135 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, gradientVisual);
5136 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5137 application.GetScene().Add(dummyControl);
5139 application.SendNotification();
5140 application.Render();
5142 float targetOpacity = 0.5f;
5143 Vector4 targetCornerRadius(20.0f, 30.0f, 10.0f, 20.0f);
5145 Animation animation = Animation::New(1.0f);
5146 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5147 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5150 application.SendNotification();
5151 application.Render();
5152 application.Render(1001u); // End of animation
5154 Property::Map resultMap;
5155 gradientVisual.CreatePropertyMap( resultMap );
5157 // Test property values: they should be updated
5158 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5159 DALI_TEST_CHECK(colorValue);
5160 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5162 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5163 DALI_TEST_CHECK(cornerRadiusValue);
5164 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
5166 #ifdef OLD_GRAPHICS_TEST
5167 // Currently test with multiple program doesn't work well. will fix another day
5168 // Test uniform value
5169 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5175 int UtcDaliVisualGetVisualProperty05(void)
5177 ToolkitTestApplication application;
5178 tet_infoline( "UtcDaliVisualGetVisualProperty05: Test animatable property, SvgVisual" );
5180 static std::vector<UniformData> customUniforms =
5182 UniformData("cornerRadius", Property::Type::VECTOR4),
5183 UniformData("borderlineWidth", Property::Type::FLOAT),
5184 UniformData("borderlineColor", Property::Type::VECTOR4),
5185 UniformData("borderlineOffset", Property::Type::FLOAT),
5188 TestGraphicsController& graphics = application.GetGraphicsController();
5189 graphics.AddCustomUniforms(customUniforms);
5191 VisualFactory factory = VisualFactory::Get();
5192 Property::Map propertyMap;
5193 propertyMap.Insert(Visual::Property::TYPE, Visual::SVG);
5194 propertyMap.Insert(ImageVisual::Property::URL, TEST_SVG_FILE_NAME);
5196 Visual::Base svgVisual = factory.CreateVisual(propertyMap);
5198 DummyControl dummyControl = DummyControl::New(true);
5199 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5200 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, svgVisual);
5201 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5202 application.GetScene().Add(dummyControl);
5204 application.SendNotification();
5205 application.Render();
5207 // Wait for image loading
5208 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5210 application.SendNotification();
5211 application.Render();
5213 float targetOpacity = 0.5f;
5214 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5215 float targetBorderlineWidth = 10.0f;
5216 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5217 float targetBorderlineOffset = -1.5f;
5219 Animation animation = Animation::New(1.0f);
5220 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5221 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5222 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5223 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5224 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5227 application.SendNotification();
5228 application.Render();
5229 application.Render(1001u); // End of animation
5231 Property::Map resultMap;
5232 svgVisual.CreatePropertyMap( resultMap );
5234 // Test property values: they should be updated
5235 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5236 DALI_TEST_CHECK(colorValue);
5237 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5239 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5240 DALI_TEST_CHECK(cornerRadiusValue);
5241 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
5243 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5244 DALI_TEST_CHECK(borderlineWidthValue);
5245 DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION);
5247 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5248 DALI_TEST_CHECK(borderlineColorValue);
5249 DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION);
5251 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5252 DALI_TEST_CHECK(borderlineOffsetValue);
5253 DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION);
5255 #ifdef OLD_GRAPHICS_TEST
5256 // Currently test with multiple program doesn't work well. will fix another day
5257 // Test uniform value
5258 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5259 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5260 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5261 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5267 int UtcDaliVisualGetVisualProperty06(void)
5269 ToolkitTestApplication application;
5270 tet_infoline( "UtcDaliVisualGetVisualProperty06: Test animatable property, AnimatedImageVisual" );
5272 static std::vector<UniformData> customUniforms =
5274 UniformData("cornerRadius", Property::Type::VECTOR4),
5275 UniformData("borderlineWidth", Property::Type::FLOAT),
5276 UniformData("borderlineColor", Property::Type::VECTOR4),
5277 UniformData("borderlineOffset", Property::Type::FLOAT),
5280 TestGraphicsController& graphics = application.GetGraphicsController();
5281 graphics.AddCustomUniforms(customUniforms);
5283 VisualFactory factory = VisualFactory::Get();
5284 Property::Map propertyMap;
5285 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
5286 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
5288 Visual::Base animatedImageVisual = factory.CreateVisual(propertyMap);
5290 DummyControl dummyControl = DummyControl::New(true);
5291 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5292 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
5293 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5294 application.GetScene().Add(dummyControl);
5296 application.SendNotification();
5297 application.Render();
5299 // Wait for image loading
5300 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5302 application.SendNotification();
5303 application.Render();
5305 float targetOpacity = 0.5f;
5306 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5307 float targetBorderlineWidth = 10.0f;
5308 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5309 float targetBorderlineOffset = -1.5f;
5311 Animation animation = Animation::New(1.0f);
5312 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5313 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5314 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5315 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5316 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5319 application.SendNotification();
5320 application.Render();
5321 application.Render(1001u); // End of animation
5323 Property::Map resultMap;
5324 animatedImageVisual.CreatePropertyMap( resultMap );
5326 // Test property values: they should be updated
5327 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5328 DALI_TEST_CHECK(colorValue);
5329 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5331 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5332 DALI_TEST_CHECK(cornerRadiusValue);
5333 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
5335 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5336 DALI_TEST_CHECK(borderlineWidthValue);
5337 DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION);
5339 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5340 DALI_TEST_CHECK(borderlineColorValue);
5341 DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION);
5343 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5344 DALI_TEST_CHECK(borderlineOffsetValue);
5345 DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION);
5347 #ifdef OLD_GRAPHICS_TEST
5348 // Currently test with multiple program doesn't work well. will fix another day
5349 // Test uniform value
5350 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5351 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5352 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5353 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5359 int UtcDaliVisualGetVisualProperty07(void)
5361 ToolkitTestApplication application;
5362 tet_infoline( "UtcDaliVisualGetVisualProperty07: Test animatable property, AnimatedVectorVisual" );
5364 static std::vector<UniformData> customUniforms =
5366 UniformData("cornerRadius", Property::Type::VECTOR4),
5367 UniformData("borderlineWidth", Property::Type::FLOAT),
5368 UniformData("borderlineColor", Property::Type::VECTOR4),
5369 UniformData("borderlineOffset", Property::Type::FLOAT),
5372 TestGraphicsController& graphics = application.GetGraphicsController();
5373 graphics.AddCustomUniforms(customUniforms);
5375 VisualFactory factory = VisualFactory::Get();
5376 Property::Map propertyMap;
5377 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::Type::ANIMATED_VECTOR_IMAGE);
5378 propertyMap.Insert(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
5380 Visual::Base animatedVectorVisual = factory.CreateVisual(propertyMap);
5382 DummyControl dummyControl = DummyControl::New(true);
5383 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5384 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedVectorVisual);
5385 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5386 application.GetScene().Add(dummyControl);
5388 application.SendNotification();
5389 application.Render();
5391 // Wait for image loading
5392 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5394 application.SendNotification();
5395 application.Render();
5397 float targetOpacity = 0.5f;
5398 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5399 float targetBorderlineWidth = 10.0f;
5400 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5401 float targetBorderlineOffset = -1.5f;
5403 Animation animation = Animation::New(1.0f);
5404 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5405 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5406 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5407 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5408 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5411 application.SendNotification();
5412 application.Render();
5413 application.Render(1001u); // End of animation
5415 Property::Map resultMap;
5416 animatedVectorVisual.CreatePropertyMap( resultMap );
5418 // Test property values: they should be updated
5419 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5420 DALI_TEST_CHECK(colorValue);
5421 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5423 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5424 DALI_TEST_CHECK(cornerRadiusValue);
5425 DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION);
5427 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5428 DALI_TEST_CHECK(borderlineWidthValue);
5429 DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION);
5431 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5432 DALI_TEST_CHECK(borderlineColorValue);
5433 DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION);
5435 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5436 DALI_TEST_CHECK(borderlineOffsetValue);
5437 DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION);
5439 #ifdef OLD_GRAPHICS_TEST
5440 // Currently test with multiple program doesn't work well. will fix another day
5441 // Test uniform value
5442 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5443 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5444 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5445 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);