2 * Copyright (c) 2017 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 <dali-toolkit-test-suite-utils.h>
22 #include <dali/devel-api/object/handle-devel.h>
23 #include <dali-toolkit/devel-api/controls/control-devel.h>
24 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
27 #include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
28 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/text-visual-properties-devel.h>
31 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
32 #include <dali-toolkit/dali-toolkit.h>
34 #include "dummy-control.h"
37 using namespace Dali::Toolkit;
41 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
42 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
43 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
44 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
45 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
46 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
47 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
50 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
52 Property::Map DefaultTransform()
54 Property::Map transformMap;
56 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
57 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
58 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
59 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
60 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
61 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
65 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
67 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
69 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
71 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
73 Property::Value* valueSet = NULL;
74 if ( valueGet.first.type == Property::Key::INDEX )
76 valueSet = fontStyleMapSet.Find( valueGet.first.indexKey );
80 // Get Key is a string so searching Set Map for a string key
81 valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
84 if( NULL != valueSet )
86 if( valueSet->GetType() == Dali::Property::STRING && ( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() ) )
88 tet_printf( "Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
91 else if( valueSet->GetType() == Dali::Property::BOOLEAN && ( valueGet.second.Get<bool>() != valueSet->Get<bool>() ) )
93 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>() );
96 else if( valueSet->GetType() == Dali::Property::INTEGER && ( valueGet.second.Get<int>() != valueSet->Get<int>() ) )
98 tet_printf( "Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>() );
101 else if( valueSet->GetType() == Dali::Property::FLOAT && ( valueGet.second.Get<float>() != valueSet->Get<float>() ) )
103 tet_printf( "Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>() );
106 else if( valueSet->GetType() == Dali::Property::VECTOR2 && ( valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>() ) )
108 Vector2 vector2Get = valueGet.second.Get<Vector2>();
109 Vector2 vector2Set = valueSet->Get<Vector2>();
110 tet_printf( "Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y );
113 else if( valueSet->GetType() == Dali::Property::VECTOR4 && ( valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>() ) )
115 Vector4 vector4Get = valueGet.second.Get<Vector4>();
116 Vector4 vector4Set = valueSet->Get<Vector4>();
117 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 );
123 if ( valueGet.first.type == Property::Key::INDEX )
125 tet_printf( " The key %d doesn't exist.", valueGet.first.indexKey );
129 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
139 void PrepareResourceImage( ToolkitTestApplication& application, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
141 TestPlatformAbstraction& platform = application.GetPlatform();
142 platform.SetClosestImageSize(Vector2( imageWidth, imageHeight));
144 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
145 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
146 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
147 unsigned int initialColor = 0xFF;
148 memset( pixbuffer, initialColor, imageHeight*imageWidth*bytesPerPixel);
150 Integration::ResourcePointer resourcePtr(bitmap);
151 platform.SetSynchronouslyLoadedResource( resourcePtr );
155 void dali_visual_startup(void)
157 test_return_value = TET_UNDEF;
160 void dali_visual_cleanup(void)
162 test_return_value = TET_PASS;
166 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
169 visual.CreatePropertyMap(map);
170 Property::Value* value = map.Find( mixColorIndex );
171 DALI_TEST_CHECK( value );
173 DALI_TEST_CHECK( value->Get( mixColor1 ) );
174 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
176 value = map.Find( Visual::Property::MIX_COLOR );
177 DALI_TEST_CHECK( value );
179 DALI_TEST_CHECK( value->Get( mixColor2 ) );
180 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
182 value = map.Find( Visual::Property::OPACITY );
183 DALI_TEST_CHECK( value );
185 DALI_TEST_CHECK( value->Get( opacity ) );
186 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
190 int UtcDaliVisualCopyAndAssignment(void)
192 ToolkitTestApplication application;
193 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
195 VisualFactory factory = VisualFactory::Get();
196 Property::Map propertyMap;
197 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
198 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
199 Visual::Base visual = factory.CreateVisual( propertyMap );
201 Visual::Base visualCopy( visual );
202 DALI_TEST_CHECK(visual == visualCopy);
204 Visual::Base emptyVisual;
205 Visual::Base emptyVisualCopy( emptyVisual );
206 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
208 Visual::Base visualEquals;
209 visualEquals = visual;
210 DALI_TEST_CHECK(visual == visualEquals);
212 Visual::Base emptyVisualEquals;
213 emptyVisualEquals = emptyVisual;
214 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
218 DALI_TEST_CHECK( visual = visualCopy );
223 int UtcDaliVisualSetName01(void)
225 ToolkitTestApplication application;
226 tet_infoline( "UtcDaliVisualSetName" );
228 VisualFactory factory = VisualFactory::Get();
229 Property::Map propertyMap;
230 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
231 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
232 Visual::Base visual = factory.CreateVisual( propertyMap );
234 const char* visualName = "backgroundVisual";
235 visual.SetName( visualName );
237 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
242 int UtcDaliVisualSetGetDepthIndex(void)
244 ToolkitTestApplication application;
245 tet_infoline( "UtcDaliVisualSetDepthIndex" );
247 VisualFactory factory = VisualFactory::Get();
248 Property::Map propertyMap;
249 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
250 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
251 Visual::Base visual = factory.CreateVisual( propertyMap );
253 visual.SetDepthIndex( 1 );
255 DummyControl dummyControl = DummyControl::New(true);
256 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
257 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
259 dummyControl.SetSize(200.f, 200.f);
260 Stage::GetCurrent().Add( dummyControl );
263 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
264 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
265 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
267 visual.SetDepthIndex( -1 );
268 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
269 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
270 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
275 int UtcDaliVisualSize(void)
277 ToolkitTestApplication application;
278 tet_infoline( "UtcDaliVisualGetNaturalSize" );
280 VisualFactory factory = VisualFactory::Get();
281 Vector2 controlSize( 20.f, 30.f );
285 Dali::Property::Map map;
286 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
287 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
289 Visual::Base colorVisual = factory.CreateVisual( map );
290 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
292 colorVisual.GetNaturalSize(naturalSize);
293 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
296 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
297 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
298 Visual::Base imageVisual = factory.CreateVisual( image );
299 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
301 imageVisual.GetNaturalSize(naturalSize);
302 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
304 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
307 float borderSize = 5.f;
309 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
310 map[ BorderVisual::Property::COLOR ] = Color::RED;
311 map[ BorderVisual::Property::SIZE ] = borderSize;
312 Visual::Base borderVisual = factory.CreateVisual( map );
313 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
314 borderVisual.GetNaturalSize(naturalSize);
315 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
317 // gradient gradientVisual
318 Property::Map propertyMap;
319 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
320 Vector2 start(-1.f, -1.f);
321 Vector2 end(1.f, 1.f);
322 propertyMap.Insert( "mixColor", Color::MAGENTA );
323 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
324 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
325 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
326 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
327 Property::Array stopColors;
328 stopColors.PushBack( Color::RED );
329 stopColors.PushBack( Color::GREEN );
330 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
331 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
332 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
333 gradientVisual.GetNaturalSize(naturalSize);
334 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
336 // animated gradient visual
337 Vector2 animated_gradient_visual_size(10.f, 10.f);
339 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
340 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
341 animatedGradientVisual.GetNaturalSize(naturalSize);
342 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
343 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
346 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
347 svgVisual.SetTransformAndSize(DefaultTransform(), controlSize );
348 svgVisual.GetNaturalSize(naturalSize);
350 // <svg width="100" height="100">
351 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
353 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
355 // svg visual with a size
356 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
357 svgVisual2.GetNaturalSize(naturalSize);
358 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
362 // Load some fonts to get the same metrics on different platforms.
363 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
364 fontClient.SetDpi( 96u, 96u );
366 char* pathNamePtr = get_current_dir_name();
367 const std::string pathName( pathNamePtr );
370 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
373 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
374 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
375 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
376 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
378 Visual::Base textVisual = factory.CreateVisual( propertyMap );
379 textVisual.GetNaturalSize( naturalSize );
380 DALI_TEST_EQUALS( naturalSize, Size( 80.f, 20.f ), TEST_LOCATION );
382 const float height = textVisual.GetHeightForWidth( 40.f );
383 DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
385 //AnimatedImageVisual
386 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
387 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
388 animatedImageVisual.GetNaturalSize(naturalSize);
389 // TEST_GIF_FILE: anim.gif
390 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
391 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
396 int UtcDaliVisualSetOnOffStage(void)
398 ToolkitTestApplication application;
399 tet_infoline( "UtcDaliVisualSetDepthIndex" );
401 VisualFactory factory = VisualFactory::Get();
402 Property::Map propertyMap;
403 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
404 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
405 Visual::Base visual = factory.CreateVisual( propertyMap );
407 DummyControl actor = DummyControl::New(true);
408 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
409 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
411 actor.SetSize(200.f, 200.f);
413 application.SendNotification();
414 application.Render(0);
415 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
417 Stage::GetCurrent().Add( actor );
419 application.SendNotification();
420 application.Render(0);
421 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
423 Stage::GetCurrent().Remove( actor );
425 application.SendNotification();
426 application.Render(0);
427 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
432 int UtcDaliVisualGetPropertyMap1(void)
434 ToolkitTestApplication application;
435 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
437 VisualFactory factory = VisualFactory::Get();
438 Property::Map propertyMap;
439 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
440 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
441 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
443 Property::Map resultMap;
444 colorVisual.CreatePropertyMap( resultMap );
446 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
447 DALI_TEST_CHECK( typeValue );
448 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
450 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
451 DALI_TEST_CHECK( colorValue );
452 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
454 // change the blend color
455 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
456 colorVisual = factory.CreateVisual( propertyMap );
457 colorVisual.CreatePropertyMap( resultMap );
459 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
460 DALI_TEST_CHECK( colorValue );
461 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
466 int UtcDaliVisualGetPropertyMap2(void)
468 ToolkitTestApplication application;
469 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
471 VisualFactory factory = VisualFactory::Get();
472 Property::Map propertyMap;
473 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
474 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
475 propertyMap.Insert("borderColor", Color::BLUE);
476 propertyMap.Insert("borderSize", 5.f);
477 propertyMap.Insert("antiAliasing", true);
478 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
480 Property::Map resultMap;
481 borderVisual.CreatePropertyMap( resultMap );
483 // check the property values from the returned map from visual
484 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
485 DALI_TEST_CHECK( typeValue );
486 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
488 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
489 DALI_TEST_CHECK( colorValue );
490 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
492 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
493 DALI_TEST_CHECK( sizeValue );
494 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
496 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
497 DALI_TEST_CHECK( AAValue );
498 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
500 Property::Map propertyMap1;
501 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
502 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
503 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
504 borderVisual = factory.CreateVisual( propertyMap1 );
505 borderVisual.CreatePropertyMap( resultMap );
507 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
508 DALI_TEST_CHECK( typeValue );
509 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
511 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
512 DALI_TEST_CHECK( colorValue );
513 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
515 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
516 DALI_TEST_CHECK( colorValue );
517 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
523 int UtcDaliVisualGetPropertyMap2N(void)
525 ToolkitTestApplication application;
526 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
528 VisualFactory factory = VisualFactory::Get();
529 Property::Map propertyMap;
530 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
531 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
533 tet_infoline( "Test that the visual is created, with a default renderer" );
534 DALI_TEST_CHECK( borderVisual );
536 DummyControl dummyControl = DummyControl::New(true);
537 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
538 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
539 Stage::GetCurrent().Add( dummyControl );
541 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
547 int UtcDaliVisualGetPropertyMap3(void)
549 ToolkitTestApplication application;
550 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
552 VisualFactory factory = VisualFactory::Get();
553 DALI_TEST_CHECK( factory );
555 Property::Map propertyMap;
556 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
558 Vector2 start(-1.f, -1.f);
559 Vector2 end(1.f, 1.f);
560 propertyMap.Insert( "startPosition", start);
561 propertyMap.Insert( "endPosition", end);
562 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
564 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
566 Property::Array stopColors;
567 stopColors.PushBack( Color::RED );
568 stopColors.PushBack( Color::GREEN );
569 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
571 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
573 Property::Map resultMap;
574 gradientVisual.CreatePropertyMap( resultMap );
576 // check the property values from the returned map from visual
577 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
578 DALI_TEST_CHECK( value );
579 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
581 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
582 DALI_TEST_CHECK( value );
583 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
585 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
586 DALI_TEST_CHECK( value );
587 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
589 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
590 DALI_TEST_CHECK( value );
591 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
593 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
594 DALI_TEST_CHECK( value );
595 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
597 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
598 DALI_TEST_CHECK( value );
599 Property::Array* offsetArray = value->GetArray();
600 DALI_TEST_CHECK( offsetArray->Count() == 2 );
601 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
602 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
604 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
605 DALI_TEST_CHECK( value );
606 Property::Array* colorArray = value->GetArray();
607 DALI_TEST_CHECK( colorArray->Count() == 2 );
608 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
609 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
614 int UtcDaliVisualGetPropertyMap4(void)
616 ToolkitTestApplication application;
617 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
619 VisualFactory factory = VisualFactory::Get();
620 DALI_TEST_CHECK( factory );
622 Property::Map propertyMap;
623 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
625 Vector2 center(100.f, 100.f);
626 float radius = 100.f;
627 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
628 propertyMap.Insert(GradientVisual::Property::CENTER, center);
629 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
630 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
632 Property::Array stopColors;
633 stopColors.PushBack( Color::RED );
634 stopColors.PushBack( Color::BLACK );
635 stopColors.PushBack( Color::GREEN );
636 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
638 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
639 DALI_TEST_CHECK( gradientVisual );
641 Property::Map resultMap;
642 gradientVisual.CreatePropertyMap( resultMap );
644 // check the property values from the returned map from visual
645 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
646 DALI_TEST_CHECK( value );
647 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
649 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
650 DALI_TEST_CHECK( value );
651 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
653 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
654 DALI_TEST_CHECK( value );
655 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
657 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
658 DALI_TEST_CHECK( value );
659 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
661 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
662 DALI_TEST_CHECK( value );
663 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
665 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
666 DALI_TEST_CHECK( value );
667 Property::Array* offsetArray = value->GetArray();
668 DALI_TEST_CHECK( offsetArray->Count() == 3 );
669 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
670 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
671 // any stop value will be clamped to [0.0, 1.0];
672 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
674 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
675 DALI_TEST_CHECK( value );
676 Property::Array* colorArray = value->GetArray();
677 DALI_TEST_CHECK( colorArray->Count() == 3 );
678 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
679 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
680 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
685 int UtcDaliVisualGetPropertyMap5(void)
687 ToolkitTestApplication application;
688 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
690 VisualFactory factory = VisualFactory::Get();
691 Property::Map propertyMap;
692 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
693 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
694 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
695 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
696 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
697 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
698 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
699 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
700 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
701 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
702 propertyMap.Insert( "synchronousLoading", true );
704 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
705 DALI_TEST_CHECK( imageVisual );
707 Property::Map resultMap;
708 imageVisual.CreatePropertyMap( resultMap );
710 // check the property values from the returned map from visual
711 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
712 DALI_TEST_CHECK( value );
713 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
715 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
716 DALI_TEST_CHECK( value );
717 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
719 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
720 DALI_TEST_CHECK( value );
721 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
723 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
724 DALI_TEST_CHECK( value );
725 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
727 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
728 DALI_TEST_CHECK( value );
729 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
731 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
732 DALI_TEST_CHECK( value );
733 DALI_TEST_CHECK( value->Get<int>() == 20 );
735 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
736 DALI_TEST_CHECK( value );
737 DALI_TEST_CHECK( value->Get<int>() == 30 );
739 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
740 DALI_TEST_CHECK( value );
741 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
743 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
744 DALI_TEST_CHECK( value );
745 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
747 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
748 DALI_TEST_CHECK( value );
749 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
751 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
752 DALI_TEST_CHECK( value );
753 DALI_TEST_CHECK( value->Get<bool>() == true );
755 // Get an image visual with an image handle, and test the default property values
756 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
757 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
758 imageVisual = factory.CreateVisual(image);
759 imageVisual.CreatePropertyMap( resultMap );
761 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
762 DALI_TEST_CHECK( value );
763 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
765 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
766 DALI_TEST_CHECK( value );
767 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
769 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
770 DALI_TEST_CHECK( value );
771 DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
773 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
774 DALI_TEST_CHECK( value );
775 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
777 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
778 DALI_TEST_CHECK( value );
779 DALI_TEST_CHECK( value->Get<int>() == 100 );
781 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
782 DALI_TEST_CHECK( value );
783 DALI_TEST_CHECK( value->Get<int>() == 200 );
785 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
786 DALI_TEST_CHECK( value );
787 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
789 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
790 DALI_TEST_CHECK( value );
791 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
793 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
794 DALI_TEST_CHECK( value );
795 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
797 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
798 DALI_TEST_CHECK( value );
799 DALI_TEST_CHECK( value->Get<bool>() == false );
804 int UtcDaliVisualGetPropertyMap6(void)
806 ToolkitTestApplication application;
807 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
809 Rect< int > border( 1, 1, 1, 1 );
811 VisualFactory factory = VisualFactory::Get();
812 Property::Map propertyMap;
813 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
814 propertyMap.Insert( "mixColor", Color::MAGENTA );
815 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
816 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
817 propertyMap.Insert( ImageVisual::Property::BORDER, border );
818 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
819 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
820 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
822 Property::Map resultMap;
823 nPatchVisual.CreatePropertyMap( resultMap );
825 // check the property values from the returned map from visual
826 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
827 DALI_TEST_CHECK( value );
828 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
830 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
831 DALI_TEST_CHECK( value );
832 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
834 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
835 DALI_TEST_CHECK( value );
836 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
838 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
839 DALI_TEST_CHECK( value );
840 DALI_TEST_CHECK( value->Get<bool>() );
842 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
843 DALI_TEST_CHECK( value );
844 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
846 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
847 DALI_TEST_CHECK( value );
848 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
850 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
851 DALI_TEST_CHECK( value );
852 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
854 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
856 Property::Map propertyMap1;
857 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
858 propertyMap1.Insert( "mixColor", Color::MAGENTA );
859 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
860 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
861 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
862 nPatchVisual = factory.CreateVisual( propertyMap1 );
864 nPatchVisual.CreatePropertyMap( resultMap );
866 // check the property values from the returned map from visual
867 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
868 DALI_TEST_CHECK( value );
869 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
871 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
872 DALI_TEST_CHECK( value );
873 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
875 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
876 DALI_TEST_CHECK( value );
877 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
879 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
880 DALI_TEST_CHECK( value );
881 DALI_TEST_CHECK( value->Get<bool>() );
883 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
884 DALI_TEST_CHECK( value );
885 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
890 int UtcDaliVisualGetPropertyMap7(void)
892 ToolkitTestApplication application;
893 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
895 // request SvgVisual with a property map
896 VisualFactory factory = VisualFactory::Get();
897 Property::Map propertyMap;
898 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
899 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
900 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
901 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
902 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
904 Property::Map resultMap;
905 svgVisual.CreatePropertyMap( resultMap );
906 // check the property values from the returned map from a visual
907 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
908 DALI_TEST_CHECK( value );
909 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
911 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
912 DALI_TEST_CHECK( value );
913 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
915 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
916 DALI_TEST_CHECK( value );
917 DALI_TEST_CHECK( value->Get<bool>() == false );
919 // request SvgVisual with a property map 2
921 propertyMap[ "visualType" ] = Visual::SVG;
922 propertyMap[ "mixColor" ] = Color::WHITE;
923 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
924 propertyMap[ "atlasing" ] = true;
925 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
928 svgVisual1.CreatePropertyMap( resultMap );
929 // check the property values from the returned map from a visual
930 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
931 DALI_TEST_CHECK( value );
932 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
934 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
935 DALI_TEST_CHECK( value );
936 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
938 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
939 DALI_TEST_CHECK( value );
940 DALI_TEST_CHECK( value->Get<bool>() == true );
942 // request SvgVisual with an URL
943 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
945 svgVisual2.CreatePropertyMap( resultMap );
946 // check the property values from the returned map from a visual
947 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
948 DALI_TEST_CHECK( value );
949 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
951 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
952 DALI_TEST_CHECK( value );
953 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
959 int UtcDaliVisualGetPropertyMap8(void)
961 ToolkitTestApplication application;
962 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
964 //Request MeshVisual using a property map.
965 VisualFactory factory = VisualFactory::Get();
966 Property::Map propertyMap;
967 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
968 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
969 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
970 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
971 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
972 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
973 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
974 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
976 Property::Map resultMap;
977 meshVisual.CreatePropertyMap( resultMap );
978 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
980 //Check values in the result map are identical to the initial map's values.
981 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
982 DALI_TEST_CHECK( value );
983 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
985 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
986 DALI_TEST_CHECK( value );
987 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
989 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
990 DALI_TEST_CHECK( value );
991 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
993 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
994 DALI_TEST_CHECK( value );
995 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
997 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
998 DALI_TEST_CHECK( value );
999 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
1001 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1002 DALI_TEST_CHECK( value );
1003 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1008 //Primitive shape visual
1009 int UtcDaliVisualGetPropertyMap9(void)
1011 ToolkitTestApplication application;
1012 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
1014 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
1015 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
1017 //Request PrimitiveVisual using a property map.
1018 VisualFactory factory = VisualFactory::Get();
1019 Property::Map propertyMap;
1020 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1021 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1022 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
1023 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1024 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1025 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1026 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1027 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1028 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1029 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
1030 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
1031 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
1032 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1033 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
1035 Property::Map resultMap;
1036 primitiveVisual.CreatePropertyMap( resultMap );
1038 //Check values in the result map are identical to the initial map's values.
1039 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1040 DALI_TEST_CHECK( value );
1041 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
1043 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
1044 DALI_TEST_CHECK( value );
1045 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
1047 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1048 DALI_TEST_CHECK( value );
1049 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1050 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1052 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1053 DALI_TEST_CHECK( value );
1054 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1056 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1057 DALI_TEST_CHECK( value );
1058 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1060 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1061 DALI_TEST_CHECK( value );
1062 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1064 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1065 DALI_TEST_CHECK( value );
1066 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1068 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1069 DALI_TEST_CHECK( value );
1070 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1072 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1073 DALI_TEST_CHECK( value );
1074 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1076 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1077 DALI_TEST_CHECK( value );
1078 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1080 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1081 DALI_TEST_CHECK( value );
1082 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1084 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1085 DALI_TEST_CHECK( value );
1086 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1088 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1089 DALI_TEST_CHECK( value );
1090 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1096 int UtcDaliVisualGetPropertyMap10(void)
1098 ToolkitTestApplication application;
1099 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1101 //Request PrimitiveVisual using a property map.
1102 VisualFactory factory = VisualFactory::Get();
1104 Property::Map propertyMap;
1105 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1106 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1107 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1108 propertyMap.Insert( "enableMarkup", false );
1109 propertyMap.Insert( "text", "Hello world" );
1110 propertyMap.Insert( "fontFamily", "TizenSans" );
1112 Property::Map fontStyleMapSet;
1113 fontStyleMapSet.Insert( "weight", "bold" );
1114 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1116 propertyMap.Insert( "pointSize", 12.f );
1117 propertyMap.Insert( "multiLine", true );
1118 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1119 propertyMap.Insert( "verticalAlignment", "CENTER" );
1120 propertyMap.Insert( "textColor", Color::RED );
1122 Property::Map shadowMapSet;
1123 propertyMap.Insert( "shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f) );
1125 Property::Map underlineMapSet;
1126 propertyMap.Insert( "underline", underlineMapSet.Add("enable", "true").Add("color", "green").Add("height", "1") );
1128 Property::Map outlineMapSet;
1129 propertyMap.Insert( "outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1) );
1131 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1133 Property::Map resultMap;
1134 textVisual.CreatePropertyMap( resultMap );
1136 //Check values in the result map are identical to the initial map's values.
1137 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1138 DALI_TEST_CHECK( value );
1139 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1141 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1142 DALI_TEST_CHECK( value );
1143 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1145 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1146 DALI_TEST_CHECK( value );
1147 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1149 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1150 DALI_TEST_CHECK( value );
1151 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1153 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1154 DALI_TEST_CHECK( value );
1156 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1157 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1158 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1160 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1161 DALI_TEST_CHECK( value );
1162 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1164 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1165 DALI_TEST_CHECK( value );
1166 DALI_TEST_CHECK( value->Get<bool>() );
1168 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1169 DALI_TEST_CHECK( value );
1170 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1172 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1173 DALI_TEST_CHECK( value );
1174 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1176 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1177 DALI_TEST_CHECK( value );
1178 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1180 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1181 DALI_TEST_CHECK( value );
1182 DALI_TEST_CHECK( !value->Get<bool>() );
1184 value = resultMap.Find( TextVisual::Property::SHADOW, Property::MAP );
1185 DALI_TEST_CHECK( value );
1187 Property::Map shadowMapGet = value->Get<Property::Map>();
1188 DALI_TEST_EQUALS( shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION );
1189 DALI_TEST_EQUALS( DaliTestCheckMaps( shadowMapGet, shadowMapSet ), true, TEST_LOCATION );
1191 value = resultMap.Find( TextVisual::Property::UNDERLINE, Property::MAP );
1192 DALI_TEST_CHECK( value );
1194 Property::Map underlineMapGet = value->Get<Property::Map>();
1195 DALI_TEST_EQUALS( underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION );
1196 DALI_TEST_EQUALS( DaliTestCheckMaps( underlineMapGet, underlineMapSet ), true, TEST_LOCATION );
1198 value = resultMap.Find( DevelTextVisual::Property::OUTLINE, Property::MAP );
1199 DALI_TEST_CHECK( value );
1201 Property::Map outlineMapGet = value->Get<Property::Map>();
1202 DALI_TEST_EQUALS( outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION );
1203 DALI_TEST_EQUALS( DaliTestCheckMaps( outlineMapGet, outlineMapSet ), true, TEST_LOCATION );
1208 int UtcDaliVisualGetPropertyMap11(void)
1210 ToolkitTestApplication application;
1211 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1213 VisualFactory factory = VisualFactory::Get();
1214 DALI_TEST_CHECK( factory );
1216 Property::Map propertyMap;
1217 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1219 Vector2 start(-0.5f, 0.5f);
1220 Vector2 end (0.5f, -0.0f);
1221 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1222 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1223 Vector2 rotate_center(0.0f, 0.4f);
1224 float rotate_amount = 1.57f;
1225 float offset = 100.f;
1227 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1228 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1229 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1231 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1232 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1233 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1234 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1235 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1236 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1237 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1239 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1240 DALI_TEST_CHECK( animatedGradientVisual );
1242 Property::Map resultMap;
1243 animatedGradientVisual.CreatePropertyMap( resultMap );
1245 // check the property values from the returned map from visual
1246 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1247 DALI_TEST_CHECK( value );
1248 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1250 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1251 DALI_TEST_CHECK( value );
1252 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1254 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1255 DALI_TEST_CHECK( value );
1256 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1258 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1259 DALI_TEST_CHECK( value );
1260 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1263 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1264 DALI_TEST_CHECK( value );
1265 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1267 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1268 DALI_TEST_CHECK( value );
1269 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1271 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1272 DALI_TEST_CHECK( value );
1273 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1275 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1276 DALI_TEST_CHECK( value );
1277 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1279 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1280 DALI_TEST_CHECK( value );
1281 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1283 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1284 DALI_TEST_CHECK( value );
1285 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1287 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1288 DALI_TEST_CHECK( value );
1289 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1294 int UtcDaliVisualGetPropertyMap12(void)
1296 ToolkitTestApplication application;
1297 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1299 // Case 1 : Set values by index
1301 tet_printf( " - Set Values by Index\n" );
1302 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1303 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1304 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1306 tet_printf( "test with delay [%f]\n", _delay );
1307 VisualFactory factory = VisualFactory::Get();
1308 DALI_TEST_CHECK( factory );
1310 Property::Map propertyMap;
1311 Property::Map animationMap;
1312 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1314 float duration = 1.1f;
1315 float delay = _delay;
1316 float repeat_delay = 0.4f;
1318 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1320 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1321 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1323 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1325 animationMap.Clear();
1326 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1327 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1328 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1329 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1330 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1331 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1332 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1333 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1334 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1336 return animationMap;
1339 Vector2 start1(-0.5f, 0.5f);
1340 Vector2 end1 (0.5f, -0.5f);
1341 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1342 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1343 Vector2 rotate_center1(0.0f, 0.4f);
1344 float rotate_amount1 = 0.0f;
1345 float offset1 = 0.f;
1347 Vector2 start2(-0.5f, -0.5f);
1348 Vector2 end2 (0.5f, 0.5f);
1349 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1350 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1351 Vector2 rotate_center2(0.0f, -0.4f);
1352 float rotate_amount2 = 6.2832f;
1353 float offset2 = 2.f;
1355 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1356 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1357 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1359 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1360 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1361 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1362 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1363 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1364 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1365 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1367 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1368 DALI_TEST_CHECK( animatedGradientVisual );
1370 Property::Map resultMap;
1371 animatedGradientVisual.CreatePropertyMap( resultMap );
1373 // check the property values from the returned map from visual
1374 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1375 DALI_TEST_CHECK( value );
1376 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1378 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1379 DALI_TEST_CHECK( value );
1380 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1382 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1383 DALI_TEST_CHECK( value );
1384 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1386 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1387 DALI_TEST_CHECK( value );
1388 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1390 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
1392 tet_printf("Check value at %d\n", line_num);
1393 value = resultMap.Find( index, Property::MAP );
1394 DALI_TEST_CHECK( value );
1395 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1396 Property::Map *temp_map = value->GetMap();
1397 DALI_TEST_CHECK( temp_map );
1399 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1401 Property::Value *res = temp_map->Find( index );
1402 DALI_TEST_CHECK( res );
1406 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1407 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1408 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1409 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1410 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1411 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1412 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1413 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1414 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1417 // check the animation map data is good
1418 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1419 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1420 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1421 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1422 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1423 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1424 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1428 // Case 2 : Set values by string
1430 tet_printf( " - Set Values by String\n" );
1431 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1432 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1433 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1435 tet_printf( "test with delay [%f]\n", _delay );
1436 VisualFactory factory = VisualFactory::Get();
1437 DALI_TEST_CHECK( factory );
1439 Property::Map propertyMap;
1440 Property::Map animationMap;
1441 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1443 float duration = 1.1f;
1444 float delay = _delay;
1445 float repeat_delay = 0.4f;
1447 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1449 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1450 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1452 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1454 animationMap.Clear();
1455 animationMap.Insert("startValue" , start);
1456 animationMap.Insert("targetValue" , target);
1457 animationMap.Insert("directionType", "BACKWARD");
1458 animationMap.Insert("duration" , duration);
1459 animationMap.Insert("delay" , delay);
1460 animationMap.Insert("repeat" , loop_count);
1461 animationMap.Insert("repeatDelay" , repeat_delay);
1462 animationMap.Insert("motionType" , "MIRROR");
1463 animationMap.Insert("easingType" , "IN_OUT");
1465 return animationMap;
1468 Vector2 start1(-0.5f, 0.5f);
1469 Vector2 end1 (0.5f, -0.5f);
1470 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1471 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1472 Vector2 rotate_center1(0.0f, 0.4f);
1473 float rotate_amount1 = 0.0f;
1474 float offset1 = 0.f;
1476 Vector2 start2(-0.5f, -0.5f);
1477 Vector2 end2 (0.5f, 0.5f);
1478 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1479 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1480 Vector2 rotate_center2(0.0f, -0.4f);
1481 float rotate_amount2 = 6.2832f;
1482 float offset2 = 2.f;
1484 // For test mix the type string/index key and string/index value works well.
1485 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1486 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1487 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1489 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1490 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1491 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1492 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1493 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1494 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1495 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1497 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1498 DALI_TEST_CHECK( animatedGradientVisual );
1500 Property::Map resultMap;
1501 animatedGradientVisual.CreatePropertyMap( resultMap );
1503 // check the property values from the returned map from visual
1504 // Note : resultMap from CreatePropertyMap only contain indexKey
1505 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1506 DALI_TEST_CHECK( value );
1507 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1509 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1510 DALI_TEST_CHECK( value );
1511 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1513 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1514 DALI_TEST_CHECK( value );
1515 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1517 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1518 DALI_TEST_CHECK( value );
1519 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1521 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
1523 tet_printf("Check value at %d\n", line_num);
1524 value = resultMap.Find( index, Property::MAP );
1525 DALI_TEST_CHECK( value );
1526 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1527 Property::Map *temp_map = value->GetMap();
1528 DALI_TEST_CHECK( temp_map );
1530 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1532 Property::Value *res = temp_map->Find( index );
1533 DALI_TEST_CHECK( res );
1537 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1538 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1539 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1540 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1541 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1542 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1543 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1544 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1545 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1548 // check the animation map data is good
1549 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1550 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1551 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1552 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1553 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1554 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1555 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1561 int UtcDaliVisualGetPropertyMap13(void)
1563 ToolkitTestApplication application;
1564 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1566 for(int _direction = 0; _direction <= 1; ++_direction)
1568 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1570 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1571 VisualFactory factory = VisualFactory::Get();
1572 DALI_TEST_CHECK( factory );
1574 Property::Map propertyMap;
1575 Property::Map animationMap;
1576 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1578 float duration = 1.0f;
1579 float delay = _delay;
1580 float repeat_delay = 0.5f;
1582 int direction = _direction;
1583 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1584 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1585 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1587 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1589 animationMap.Clear();
1590 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1591 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1592 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1593 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1594 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1595 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1596 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1597 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1598 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1599 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1600 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1602 return animationMap;
1605 Vector2 start1(-0.5f, 0.5f);
1606 Vector2 end1 (0.5f, -0.5f);
1607 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1608 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1609 Vector2 rotate_center1(1.0f, 0.4f);
1610 float rotate_amount1 = 2.0f;
1611 float offset1 = 1.f;
1613 Vector2 start2(-0.5f, -0.5f);
1614 Vector2 end2 (0.5f, 0.5f);
1615 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1616 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1617 Vector2 rotate_center2(1.0f, -0.4f);
1618 float rotate_amount2 = 1.0f;
1619 float offset2 = 3.f;
1621 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1622 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1623 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1625 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1626 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1627 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1628 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1629 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1630 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1631 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1633 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1634 DALI_TEST_CHECK( animatedGradientVisual );
1636 Property::Map resultMap;
1637 animatedGradientVisual.CreatePropertyMap( resultMap );
1639 // check the property values from the returned map from visual
1640 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1641 DALI_TEST_CHECK( value );
1642 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1644 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1645 DALI_TEST_CHECK( value );
1646 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1648 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1649 DALI_TEST_CHECK( value );
1650 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1652 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1653 DALI_TEST_CHECK( value );
1654 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1656 // If loop_count = 0, Animation doesn't created.
1657 // Optimized resultMap only have one value, which is target value
1658 // Note: target value will be changed by direction option.
1659 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1660 DALI_TEST_CHECK( value );
1661 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1663 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1664 DALI_TEST_CHECK( value );
1665 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1667 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1668 DALI_TEST_CHECK( value );
1669 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1671 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1672 DALI_TEST_CHECK( value );
1673 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1675 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1676 DALI_TEST_CHECK( value );
1677 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1679 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1680 DALI_TEST_CHECK( value );
1681 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1683 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1684 DALI_TEST_CHECK( value );
1685 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1692 int UtcDaliVisualAnimateBorderVisual01(void)
1694 ToolkitTestApplication application;
1695 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1697 VisualFactory factory = VisualFactory::Get();
1698 Property::Map propertyMap;
1699 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1700 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1701 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1702 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1703 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1706 map["target"] = "testVisual";
1707 map["property"] = "mixColor";
1708 map["targetValue"] = Vector4(1,1,1,0);
1709 map["animator"] = Property::Map()
1710 .Add("alphaFunction", "LINEAR")
1711 .Add("timePeriod", Property::Map()
1713 .Add("duration", 4.0f));
1715 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1717 DummyControl actor = DummyControl::New(true);
1718 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1719 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1720 actor.SetSize(2000, 2000);
1721 actor.SetParentOrigin(ParentOrigin::CENTER);
1722 Stage::GetCurrent().Add(actor);
1724 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1726 Renderer renderer = actor.GetRendererAt(0);
1727 Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR );
1728 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
1730 Animation animation = dummyImpl.CreateTransition( transition );
1732 // Animate the mix color through the transition, and the border color through
1733 // programmatic method.
1734 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1737 application.SendNotification();
1738 application.Render(0);
1739 application.Render(2000u); // halfway point between blue and white
1741 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1742 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1743 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1744 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1746 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1747 testColor = Vector4( 1,1,1,0.4f );
1748 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1749 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1750 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a ) , true, TEST_LOCATION );
1752 application.Render(2000u);
1754 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1755 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1756 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1758 color = renderer.GetCurrentProperty< Vector4 >( mixColorIndex );
1759 testColor = Vector4(1,1,1,0);
1760 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1761 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1762 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a ), true, TEST_LOCATION );
1768 int UtcDaliVisualAnimateBorderVisual02(void)
1770 ToolkitTestApplication application;
1771 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1773 VisualFactory factory = VisualFactory::Get();
1774 Property::Map propertyMap;
1775 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1776 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1777 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1778 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1780 DummyControl actor = DummyControl::New(true);
1781 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1782 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1783 actor.SetSize(2000, 2000);
1784 actor.SetParentOrigin(ParentOrigin::CENTER);
1785 Stage::GetCurrent().Add(actor);
1787 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1789 Renderer renderer = actor.GetRendererAt(0);
1790 Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE );
1792 Animation animation = Animation::New(4.0f);
1793 animation.AnimateTo( Property(renderer, index), 9.0f );
1796 application.SendNotification();
1797 application.Render(0);
1798 application.Render(2000u); // halfway point
1800 float size = renderer.GetCurrentProperty< float >( index );
1801 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1802 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1804 application.Render(2000u); // halfway point between blue and white
1806 size = renderer.GetCurrentProperty< float >( index );
1807 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1808 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1813 int UtcDaliVisualAnimateColorVisual(void)
1815 ToolkitTestApplication application;
1816 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1818 VisualFactory factory = VisualFactory::Get();
1819 Property::Map propertyMap;
1820 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1821 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1822 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1824 DummyControl actor = DummyControl::New(true);
1825 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1826 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1827 actor.SetSize(2000, 2000);
1828 actor.SetParentOrigin(ParentOrigin::CENTER);
1829 Stage::GetCurrent().Add(actor);
1831 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1833 Renderer renderer = actor.GetRendererAt(0);
1834 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR );
1836 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1837 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1839 Animation animation = Animation::New(4.0f);
1840 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1843 application.SendNotification();
1844 application.Render(0);
1845 application.Render(2000u); // halfway point
1847 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1848 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1849 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1851 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1853 application.Render(2000u); // halfway point between blue and white
1855 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1856 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1858 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1860 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1861 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1866 int UtcDaliVisualAnimatePrimitiveVisual(void)
1868 ToolkitTestApplication application;
1869 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1872 VisualFactory factory = VisualFactory::Get();
1873 Property::Map propertyMap;
1874 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1875 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1876 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1877 Visual::Base visual = factory.CreateVisual( propertyMap );
1879 DummyControl actor = DummyControl::New(true);
1880 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1881 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1882 actor.SetSize(2000, 2000);
1883 actor.SetParentOrigin(ParentOrigin::CENTER);
1884 actor.SetColor(Color::BLACK);
1885 Stage::GetCurrent().Add(actor);
1887 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1889 Renderer renderer = actor.GetRendererAt(0);
1890 Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR );
1892 tet_infoline("Test that the renderer has the Primitive mix color");
1893 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
1895 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
1896 const Vector4 TARGET_MIX_COLOR( Color::RED );
1899 map["target"] = "testVisual";
1900 map["property"] = "mixColor";
1901 map["initialValue"] = INITIAL_MIX_COLOR;
1902 map["targetValue"] = TARGET_MIX_COLOR;
1903 map["animator"] = Property::Map()
1904 .Add("alphaFunction", "LINEAR")
1905 .Add("timePeriod", Property::Map()
1907 .Add("duration", 4.0f));
1909 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1911 Animation animation = dummyImpl.CreateTransition( transition );
1912 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1913 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
1915 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1918 application.SendNotification();
1919 application.Render(0);
1920 application.Render(2000u); // halfway point
1921 application.SendNotification();
1923 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
1925 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
1926 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
1927 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", halfwayColor.a ), true, TEST_LOCATION );
1929 application.Render(2001u); // go past end
1930 application.SendNotification(); // Trigger signals
1932 DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
1933 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
1934 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
1935 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", TARGET_MIX_COLOR.a ), true, TEST_LOCATION );
1937 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1938 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1946 int UtcDaliVisualAnimatedGradientVisual01(void)
1948 ToolkitTestApplication application;
1949 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
1952 VisualFactory factory = VisualFactory::Get();
1953 Property::Map propertyMap;
1954 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1955 Visual::Base visual = factory.CreateVisual( propertyMap );
1957 DummyControl actor = DummyControl::New(true);
1958 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1959 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1960 actor.SetSize(2000, 2000);
1961 actor.SetParentOrigin(ParentOrigin::CENTER);
1962 actor.SetColor(Color::BLACK);
1963 Stage::GetCurrent().Add(actor);
1965 application.SendNotification();
1966 application.Render(0);
1967 application.SendNotification();
1969 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1971 for(int step_iter = 0; step_iter < 3; step_iter++)
1973 application.SendNotification();
1974 application.Render(0);
1975 application.Render(750u); // step i/4
1976 application.SendNotification();
1978 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
1979 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
1980 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
1981 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
1982 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
1983 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
1984 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
1987 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
1988 application.Render(750u); // go to end
1989 application.SendNotification();
1991 application.Render(10u); // finish
1992 application.SendNotification();
1995 application.SendNotification();
1996 application.Render(0u);
1997 application.SendNotification();
2003 int UtcDaliVisualAnimatedGradientVisual02(void)
2005 ToolkitTestApplication application;
2006 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
2009 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
2010 int _direction[2] = {0, 1};
2011 int _loop_count[3] = {-1, 0, 1};
2012 int _motion[2] = {0, 1};
2013 int _easing[4] = {0, 1, 2, 3};
2015 int test_case_max = 4 * 2 * 3 * 2 * 4;
2017 int test_case_d = 7; // 7 is the number of animated properties.
2019 float _duration = 0.4f;
2020 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2021 float noise_maker = 0.0f;
2022 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2023 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2025 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2027 VisualFactory factory = VisualFactory::Get();
2028 Property::Map propertyMap;
2029 Property::Map animationMap;
2030 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2032 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2033 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2034 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2036 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&
2038 int tc = (test_case + tc_offset);
2039 int idx_easing = tc % 4; tc /= 4;
2040 int idx_motion = tc % 2; tc /= 2;
2041 int idx_loop_count = tc % 3; tc /= 3;
2042 int idx_direction = tc % 2; tc /= 2;
2043 int idx_delay = tc % 4; tc /= 4;
2045 float duration = _duration - _repeat_delay;
2046 float repeat_delay = _repeat_delay;
2047 float delay = _delay[idx_delay] * _duration;
2048 int direction = _direction[idx_direction];
2049 int loop_count = _loop_count[idx_loop_count];
2050 int motion = _motion[idx_motion];
2051 int easing = _easing[idx_easing];
2053 animationMap.Clear();
2054 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
2055 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
2056 if( direction == 0 )
2058 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2062 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2064 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2065 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2066 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2067 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2070 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2074 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2078 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2080 else if( easing == 1 )
2082 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2084 else if( easing == 2 )
2086 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2090 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2093 return animationMap;
2096 // Give different values for debuging
2097 noise_maker += 1.0f;
2098 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2099 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2100 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2101 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2102 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2103 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2104 float offset1 = 0.f + noise_maker * 0.1f;
2106 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2107 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2108 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2109 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2110 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2111 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2112 float offset2 = 2.f + noise_maker * 0.1f;
2114 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2115 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2116 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2118 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2119 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2120 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2121 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2122 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2123 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2124 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2126 Visual::Base visual = factory.CreateVisual( propertyMap );
2128 DummyControl actor = DummyControl::New( true );
2129 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2130 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2131 actor.SetSize( 2000, 2000 );
2132 actor.SetParentOrigin(ParentOrigin::CENTER);
2133 actor.SetColor(Color::BLACK);
2134 Stage::GetCurrent().Add(actor);
2136 application.SendNotification();
2137 application.Render( 0 );
2138 application.SendNotification();
2140 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2142 application.SendNotification();
2144 //Compare between CPU calculated value and Shader Visual calculated value
2145 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
2147 int tc = (test_case + tc_offset);
2148 int idx_easing = tc % 4; tc /= 4;
2149 int idx_motion = tc % 2; tc /= 2;
2150 int idx_loop_count = tc % 3; tc /= 3;
2151 int idx_direction = tc % 2; tc /= 2;
2152 int idx_delay = tc % 4; tc /= 4;
2154 float duration = _duration - _repeat_delay;
2155 float repeat_delay = _repeat_delay;
2156 float delay = _delay[idx_delay] * _duration;
2157 int direction = _direction[idx_direction];
2158 int loop_count = _loop_count[idx_loop_count];
2159 int motion = _motion[idx_motion];
2160 int easing = _easing[idx_easing];
2162 progress -= delay / _duration;
2164 Property::Value s = start;
2165 Property::Value t = target;
2166 if( direction == 1 )
2171 float x; ///< Animator progress value
2172 if( loop_count == 0 )
2176 else if( loop_count > 0 && progress + 0.01f > loop_count )
2178 x = ( motion == 0 ) ? 1.0f : 0.0f;
2182 if( progress < 0.0f )
2186 progress = fmodf( progress, 1.0f );
2187 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2192 x = progress * 2.0f;
2199 if( easing == 1 ) // EASE_IN
2203 else if( easing == 2 ) // EASE_OUT
2207 else if( easing == 3 ) // EASE_IN_OUT
2209 x = x * x * (3.0f - 2.0f * x);
2212 if( value_type == 0 ) // result type is Float
2216 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2217 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2218 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2220 else if( value_type == 1 ) // result type is Vector2
2224 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2225 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2226 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2228 else if( value_type == 2 ) // result type is Vector3
2232 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2233 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2234 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2236 else // result type is Vector4
2240 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2241 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2242 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2247 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2249 for( int step_iter = 0; step_iter < 3; step_iter++ )
2251 application.SendNotification();
2252 application.Render( _duration * 250.f ); // step i/4
2253 application.SendNotification();
2256 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2257 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2258 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2259 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2260 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2261 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2262 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2264 application.SendNotification();
2265 application.Render(_duration * 250.f); // step 4/4 will not test
2266 application.SendNotification();
2270 application.SendNotification();
2272 application.SendNotification();
2273 application.Render(10.f); // tempral time
2274 application.SendNotification();
2281 int UtcDaliVisualAnimatedGradientVisual03(void)
2283 ToolkitTestApplication application;
2284 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2287 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
2288 int _direction[2] = {0, 1};
2289 int _loop_count[3] = {-1, 0, 1};
2290 int _motion[2] = {0, 1};
2291 int _easing[4] = {0, 1, 2, 3};
2293 int test_case_max = 4 * 2 * 3 * 2 * 4;
2295 int test_case_d = 7; // 7 is the number of animated properties.
2297 float _duration = 0.4f;
2298 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2299 float noise_maker = 0.2f;
2300 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2301 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2303 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2305 VisualFactory factory = VisualFactory::Get();
2306 Property::Map propertyMap;
2307 Property::Map animationMap;
2308 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2310 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&
2312 int tc = (test_case + tc_offset);
2313 int idx_easing = tc % 4; tc /= 4;
2314 int idx_motion = tc % 2; tc /= 2;
2315 int idx_loop_count = tc % 3; tc /= 3;
2316 int idx_direction = tc % 2; tc /= 2;
2317 int idx_delay = tc % 4; tc /= 4;
2319 float duration = _duration - _repeat_delay;
2320 float repeat_delay = _repeat_delay;
2321 float delay = _delay[idx_delay] * _duration;
2322 int direction = _direction[idx_direction];
2323 int loop_count = _loop_count[idx_loop_count];
2324 int motion = _motion[idx_motion];
2325 int easing = _easing[idx_easing];
2327 animationMap.Clear();
2328 animationMap.Insert( "startValue", start );
2329 animationMap.Insert( "targetValue", target );
2330 if( direction == 0 )
2332 animationMap.Insert("directionType", "FORWARD");
2336 animationMap.Insert("directionType", "BACKWARD");
2338 animationMap.Insert("duration", duration);
2339 animationMap.Insert("delay", delay);
2340 animationMap.Insert("repeat", loop_count);
2341 animationMap.Insert("repeatDelay", repeat_delay);
2344 animationMap.Insert("motionType", "LOOP");
2348 animationMap.Insert("motionType", "MIRROR");
2352 animationMap.Insert("easingType", "LINEAR");
2354 else if( easing == 1 )
2356 animationMap.Insert("easingType", "IN");
2358 else if( easing == 2 )
2360 animationMap.Insert("easingType", "OUT");
2364 animationMap.Insert("easingType", "IN_OUT");
2367 return animationMap;
2370 // Give different values for debuging
2371 noise_maker += 0.8f;
2372 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2373 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2374 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2375 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2376 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2377 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2378 float offset1 = 0.f + noise_maker * 0.1f;
2380 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2381 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2382 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2383 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2384 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2385 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2386 float offset2 = 2.f + noise_maker * 0.1f;
2388 propertyMap.Insert("gradientType", "LINEAR");
2389 propertyMap.Insert("unitType", "USER_SPACE");
2390 propertyMap.Insert("spreadType", "CLAMP");
2392 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2393 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2394 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2395 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2396 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2397 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2398 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2400 Visual::Base visual = factory.CreateVisual( propertyMap );
2402 DummyControl actor = DummyControl::New( true );
2403 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2404 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2405 actor.SetSize( 2000, 2000 );
2406 actor.SetParentOrigin(ParentOrigin::CENTER);
2407 actor.SetColor(Color::BLACK);
2408 Stage::GetCurrent().Add(actor);
2410 application.SendNotification();
2411 application.Render( 0 );
2412 application.SendNotification();
2414 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2416 application.SendNotification();
2418 //Compare between CPU calculated value and Shader Visual calculated value
2419 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
2421 int tc = (test_case + tc_offset);
2422 int idx_easing = tc % 4; tc /= 4;
2423 int idx_motion = tc % 2; tc /= 2;
2424 int idx_loop_count = tc % 3; tc /= 3;
2425 int idx_direction = tc % 2; tc /= 2;
2426 int idx_delay = tc % 4; tc /= 4;
2428 float duration = _duration - _repeat_delay;
2429 float repeat_delay = _repeat_delay;
2430 float delay = _delay[idx_delay] * _duration;
2431 int direction = _direction[idx_direction];
2432 int loop_count = _loop_count[idx_loop_count];
2433 int motion = _motion[idx_motion];
2434 int easing = _easing[idx_easing];
2436 progress -= delay / _duration;
2438 Property::Value s = start;
2439 Property::Value t = target;
2440 if( direction == 1 )
2445 float x; ///< Animator progress value
2446 if( loop_count == 0 )
2450 else if( loop_count > 0 && progress + 0.01f > loop_count )
2452 x = ( motion == 0 ) ? 1.0f : 0.0f;
2456 if( progress < 0.0f )
2460 progress = fmodf( progress, 1.0f );
2461 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2466 x = progress * 2.0f;
2473 if( easing == 1 ) // EASE_IN
2477 else if( easing == 2 ) // EASE_OUT
2481 else if( easing == 3 ) // EASE_IN_OUT
2483 x = x * x * (3.0f - 2.0f * x);
2486 if( value_type == 0 ) // result type is Float
2490 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2491 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2492 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2494 else if( value_type == 1 ) // result type is Vector2
2498 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2499 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2500 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2502 else if( value_type == 2 ) // result type is Vector3
2506 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2507 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2508 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2510 else // result type is Vector4
2514 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2515 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2516 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2521 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2523 for( int step_iter = 0; step_iter < 3; step_iter++ )
2525 application.SendNotification();
2526 application.Render( _duration * 250.f ); // step i/4
2527 application.SendNotification();
2530 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2531 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2532 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2533 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2534 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2535 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2536 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2538 application.SendNotification();
2539 application.Render(_duration * 250.f); // step 4/4 will not test
2540 application.SendNotification();
2544 application.SendNotification();
2546 application.SendNotification();
2547 application.Render(10.f); // tempral time
2548 application.SendNotification();
2555 int UtcDaliVisualWireframeVisual(void)
2557 ToolkitTestApplication application;
2559 VisualFactory factory = VisualFactory::Get();
2560 Property::Map propertyMap;
2561 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2563 // Create the visual.
2564 Visual::Base visual = factory.CreateVisual( propertyMap );
2566 DALI_TEST_CHECK( visual );
2568 Property::Map resultMap;
2569 visual.CreatePropertyMap( resultMap );
2571 // Check the property values from the returned map from visual
2572 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2573 DALI_TEST_CHECK( value );
2574 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2579 int UtcDaliVisualGetTransform(void)
2581 ToolkitTestApplication application;
2582 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2584 VisualFactory factory = VisualFactory::Get();
2585 Property::Map propertyMap;
2586 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2587 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2588 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2590 Dali::Property::Map visualMap;
2591 colorVisual.CreatePropertyMap( visualMap );
2592 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2593 Dali::Property::Map* map = value->GetMap();
2594 DALI_TEST_CHECK( map );
2596 //Test default values
2598 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2599 DALI_TEST_CHECK( typeValue );
2600 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2603 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2604 DALI_TEST_CHECK( typeValue );
2605 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2608 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2609 DALI_TEST_CHECK( typeValue );
2610 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2613 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2614 DALI_TEST_CHECK( typeValue );
2615 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2618 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2619 DALI_TEST_CHECK( typeValue );
2620 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2623 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2624 DALI_TEST_CHECK( typeValue );
2625 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2631 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2633 Property::Map transform;
2634 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2635 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2636 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2637 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2638 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2640 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2642 Dali::Property::Map visualMap;
2643 visual.CreatePropertyMap( visualMap );
2644 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2645 Dali::Property::Map* map = value->GetMap();
2646 DALI_TEST_CHECK( map );
2649 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2650 DALI_TEST_CHECK( typeValue );
2651 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2654 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2655 DALI_TEST_CHECK( typeValue );
2656 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2659 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2660 DALI_TEST_CHECK( typeValue );
2661 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2664 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2665 DALI_TEST_CHECK( typeValue );
2666 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2669 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2670 DALI_TEST_CHECK( typeValue );
2671 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2674 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2675 DALI_TEST_CHECK( typeValue );
2676 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2679 //Put the visual on the stage
2680 DummyControl actor = DummyControl::New(true);
2681 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2682 actor.SetSize(2000, 2000);
2683 actor.SetParentOrigin(ParentOrigin::CENTER);
2684 Stage::GetCurrent().Add(actor);
2686 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2687 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2689 application.SendNotification();
2690 application.Render(0);
2691 Renderer renderer( actor.GetRendererAt(0) );
2693 //Check that the properties have been registered on the Renderer
2694 Property::Index index = renderer.GetPropertyIndex( "offset" );
2695 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2696 Vector2 offset = renderer.GetProperty<Vector2>( index );
2697 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2699 index = renderer.GetPropertyIndex( "size" );
2700 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2701 Vector2 size = renderer.GetProperty<Vector2>( index );
2702 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2704 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2705 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2706 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2707 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2709 index = renderer.GetPropertyIndex( "origin" );
2710 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2711 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2712 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2714 index = renderer.GetPropertyIndex( "anchorPoint" );
2715 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2716 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2717 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2719 //Set a new transform
2721 transform = DefaultTransform();
2722 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2723 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2724 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2725 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2726 application.SendNotification();
2727 application.Render(0);
2729 //Check that the values have changed in the renderer
2730 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2731 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2733 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2734 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2736 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2737 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2739 //Parent origin and anchor point should have the default values
2740 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2741 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2743 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2744 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2747 int UtcDaliVisualSetTransform0(void)
2749 ToolkitTestApplication application;
2750 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2752 VisualFactory factory = VisualFactory::Get();
2753 Property::Map propertyMap;
2754 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2755 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2756 Visual::Base visual = factory.CreateVisual( propertyMap );
2757 TestTransform( application, visual );
2758 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2763 int UtcDaliVisualSetTransform1(void)
2765 ToolkitTestApplication application;
2766 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2768 VisualFactory factory = VisualFactory::Get();
2769 Property::Map propertyMap;
2770 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2771 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2772 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2773 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2774 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2775 Visual::Base visual = factory.CreateVisual( propertyMap );
2776 TestTransform( application, visual );
2777 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2782 int UtcDaliVisualSetTransform2(void)
2784 ToolkitTestApplication application;
2785 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2787 VisualFactory factory = VisualFactory::Get();
2788 Property::Map propertyMap;
2789 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2790 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2792 Property::Array stopOffsets;
2793 stopOffsets.PushBack( 0.0f );
2794 stopOffsets.PushBack( 0.3f );
2795 stopOffsets.PushBack( 0.6f );
2796 stopOffsets.PushBack( 0.8f );
2797 stopOffsets.PushBack( 1.0f );
2798 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2800 Property::Array stopColors;
2801 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2802 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2803 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2804 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2805 stopColors.PushBack( Color::YELLOW );
2806 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2807 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2808 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2809 Visual::Base visual = factory.CreateVisual( propertyMap );
2810 TestTransform( application, visual );
2811 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2816 int UtcDaliVisualSetTransform3(void)
2818 ToolkitTestApplication application;
2819 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2821 VisualFactory factory = VisualFactory::Get();
2822 Property::Map propertyMap;
2823 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2824 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2825 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2826 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2827 Visual::Base visual = factory.CreateVisual( propertyMap );
2828 TestTransform( application, visual );
2829 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2834 int UtcDaliVisualSetTransform4(void)
2836 ToolkitTestApplication application;
2837 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2839 VisualFactory factory = VisualFactory::Get();
2840 Property::Map propertyMap;
2841 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2842 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2844 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2845 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2846 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2847 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2848 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2849 Visual::Base visual = factory.CreateVisual( propertyMap );
2850 TestTransform( application, visual );
2851 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2856 int UtcDaliVisualSetTransform5(void)
2858 ToolkitTestApplication application;
2859 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
2861 VisualFactory factory = VisualFactory::Get();
2862 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
2863 Visual::Base visual = factory.CreateVisual(image);
2864 TestTransform( application, visual );
2865 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2870 int UtcDaliVisualSetTransform6(void)
2872 ToolkitTestApplication application;
2873 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
2875 VisualFactory factory = VisualFactory::Get();
2876 Property::Map propertyMap;
2877 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2878 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
2879 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
2880 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
2881 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
2882 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
2883 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
2884 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2885 Visual::Base visual = factory.CreateVisual(propertyMap);
2886 TestTransform( application, visual );
2887 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
2892 int UtcDaliVisualSetTransform7(void)
2894 ToolkitTestApplication application;
2895 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
2897 VisualFactory factory = VisualFactory::Get();
2898 Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200));
2899 Visual::Base visual = factory.CreateVisual(image);
2900 TestTransform( application, visual );
2901 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2906 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
2908 ToolkitTestApplication application;
2909 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
2911 VisualFactory factory = VisualFactory::Get();
2912 Property::Map propertyMap;
2913 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2914 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2915 Visual::Base visual = factory.CreateVisual( propertyMap );
2917 Property::Map transform;
2918 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
2920 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
2922 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2924 Dali::Property::Map visualMap;
2925 visual.CreatePropertyMap( visualMap );
2926 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2927 Dali::Property::Map* map = value->GetMap();
2928 DALI_TEST_CHECK( map );
2931 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2932 DALI_TEST_CHECK( typeValue );
2933 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2936 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2937 DALI_TEST_CHECK( typeValue );
2938 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2944 int UtcDaliNPatchVisualCustomShader(void)
2946 ToolkitTestApplication application;
2947 tet_infoline( "NPatchVisual with custom shader" );
2949 VisualFactory factory = VisualFactory::Get();
2950 Property::Map properties;
2951 Property::Map shader;
2952 const std::string vertexShader = "Foobar";
2953 const std::string fragmentShader = "Foobar";
2954 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
2955 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
2957 Property::Map transformMap;
2958 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
2959 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
2960 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
2961 transformMap["anchorPoint"] = Align::CENTER;
2962 transformMap["origin"] = Align::CENTER;
2963 properties[Visual::Property::TRANSFORM] = transformMap;
2965 properties[Visual::Property::TYPE] = Visual::IMAGE;
2966 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
2967 properties[Visual::Property::SHADER]=shader;
2968 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
2970 Visual::Base visual = factory.CreateVisual( properties );
2971 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
2973 // trigger creation through setting on stage
2974 DummyControl dummy = DummyControl::New(true);
2975 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
2976 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2977 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
2978 dummy.SetSize(2000, 2000);
2979 dummy.SetParentOrigin(ParentOrigin::CENTER);
2980 Stage::GetCurrent().Add(dummy);
2981 application.SendNotification();
2983 Renderer renderer = dummy.GetRendererAt( 0 );
2984 Shader shader2 = renderer.GetShader();
2985 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
2986 Property::Map* map = value.GetMap();
2987 DALI_TEST_CHECK( map );
2989 Property::Index index = renderer.GetPropertyIndex("size");
2990 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
2992 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
2993 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
2995 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
2996 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
3001 int UtcDaliGradientVisualBlendMode(void)
3003 ToolkitTestApplication application;
3004 VisualFactory factory = VisualFactory::Get();
3006 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3007 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3008 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3009 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3010 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3011 .Add( Color::GREEN ) ) );
3013 Visual::Base alphaGradientVisual = factory.CreateVisual(
3014 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
3015 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
3016 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
3017 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
3018 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
3020 DummyControl control = DummyControl::New(true);
3021 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3022 Stage::GetCurrent().Add( control );
3024 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
3025 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
3026 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
3028 application.SendNotification();
3029 application.Render();
3031 // 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
3032 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
3033 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
3034 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
3039 int UtcDaliVisualRendererRemovalAndReAddition(void)
3041 ToolkitTestApplication application;
3042 tet_infoline( "UtcDaliVisualRendererRemoval" );
3044 VisualFactory factory = VisualFactory::Get();
3045 Property::Map propertyMap;
3046 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3047 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3048 Visual::Base visual = factory.CreateVisual( propertyMap );
3050 visual.SetDepthIndex( 1 );
3052 DummyControl dummyControl = DummyControl::New(true);
3053 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3054 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
3055 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3057 dummyControl.SetSize(200.f, 200.f);
3058 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
3060 Stage::GetCurrent().Add( dummyControl );
3062 application.SendNotification();
3063 application.Render();
3065 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3067 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
3068 Stage::GetCurrent().Remove( dummyControl );
3069 application.SendNotification();
3070 application.Render();
3072 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3074 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
3076 Stage::GetCurrent().Add( dummyControl );
3078 application.SendNotification();
3079 application.Render();
3081 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3088 int UtcDaliVisualTextVisualRender(void)
3090 ToolkitTestApplication application;
3091 tet_infoline( "UtcDaliVisualTextVisualRender" );
3093 VisualFactory factory = VisualFactory::Get();
3094 Property::Map propertyMap;
3095 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3096 propertyMap.Insert( "mixColor", Color::WHITE );
3097 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3098 propertyMap.Insert( "enableMarkup", false );
3099 propertyMap.Insert( "text", "Hello world" );
3100 propertyMap.Insert( "fontFamily", "TizenSans" );
3102 Property::Map fontStyleMapSet;
3103 fontStyleMapSet.Insert( "weight", "bold" );
3104 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3106 propertyMap.Insert( "pointSize", 12.f );
3107 propertyMap.Insert( "multiLine", true );
3108 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3109 propertyMap.Insert( "verticalAlignment", "CENTER" );
3110 propertyMap.Insert( "textColor", Color::RED );
3111 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3112 textVisual.SetDepthIndex( 1 );
3114 DummyControl dummyControl = DummyControl::New(true);
3115 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3116 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3117 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3119 dummyControl.SetSize(200.f, 200.f);
3120 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3122 Stage::GetCurrent().Add( dummyControl );
3123 application.SendNotification();
3124 application.Render();
3127 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3128 propertyMap.Clear();
3129 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3130 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3131 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3132 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3134 Property::Map transformMap;
3135 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3136 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3138 textVisual = factory.CreateVisual( propertyMap );
3139 textVisual.SetDepthIndex( 1 );
3141 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3142 dummyControl.SetSize( 720.f, 640.f );
3144 application.SendNotification(); // force process events to ensure text visual
3145 // adds renderer to the dummy control in OnRelayout
3146 application.Render();
3148 Renderer renderer = dummyControl.GetRendererAt(0u);
3149 Property::Index index = renderer.GetPropertyIndex("size");
3151 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3152 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3157 int UtcDaliVisualTextVisualDisableEnable(void)
3159 ToolkitTestApplication application;
3160 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3162 VisualFactory factory = VisualFactory::Get();
3163 Property::Map propertyMap;
3164 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3165 propertyMap.Insert( "mixColor", Color::WHITE );
3166 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3167 propertyMap.Insert( "enableMarkup", false );
3168 propertyMap.Insert( "text", "Hello world" );
3169 propertyMap.Insert( "fontFamily", "TizenSans" );
3171 Property::Map fontStyleMapSet;
3172 fontStyleMapSet.Insert( "weight", "bold" );
3173 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3175 propertyMap.Insert( "pointSize", 12.f );
3176 propertyMap.Insert( "multiLine", true );
3177 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3178 propertyMap.Insert( "verticalAlignment", "CENTER" );
3179 propertyMap.Insert( "textColor", Color::RED );
3180 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3181 textVisual.SetDepthIndex( 1 );
3183 DummyControl dummyControl = DummyControl::New(true);
3184 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3185 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3186 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3188 dummyControl.SetSize(200.f, 200.f);
3189 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3191 Stage::GetCurrent().Add( dummyControl );
3192 application.SendNotification();
3193 application.Render();
3195 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3197 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3199 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3201 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3203 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3208 int UtcDaliVisualPremultipliedAlpha(void)
3210 ToolkitTestApplication application;
3211 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3213 VisualFactory factory = VisualFactory::Get();
3215 // image visual, test default value ( false )
3217 Visual::Base imageVisual = factory.CreateVisual(
3219 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3220 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3222 Dali::Property::Map visualMap;
3223 imageVisual.CreatePropertyMap( visualMap );
3224 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3227 DALI_TEST_CHECK( value );
3228 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION );
3231 // image visual, override premultiplied
3233 Visual::Base imageVisual = factory.CreateVisual(
3235 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3236 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3237 .Add( Visual::Property::PREMULTIPLIED_ALPHA, true ) );
3239 Dali::Property::Map visualMap;
3240 imageVisual.CreatePropertyMap( visualMap );
3241 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3244 DALI_TEST_CHECK( value );
3245 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION);
3248 // svg visual ( premultiplied alpha by default is true )
3250 Visual::Base imageVisual = factory.CreateVisual(
3252 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3253 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3255 Dali::Property::Map visualMap;
3256 imageVisual.CreatePropertyMap( visualMap );
3257 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3260 DALI_TEST_CHECK( value );
3261 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3267 int UtcDaliRegisterVisualOrder(void)
3269 ToolkitTestApplication application;
3270 tet_infoline( "Register Visual Order" );
3272 DummyControl dummyControl = DummyControl::New(true);
3273 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3275 VisualFactory factory = VisualFactory::Get();
3276 Property::Map propertyMap;
3277 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3278 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3280 tet_infoline( "Register visual, should have depth index of 0.0f" );
3281 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3282 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3283 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3285 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3287 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3288 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3289 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3291 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3292 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3293 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3295 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3296 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3297 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3299 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3300 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3301 labelVisual.SetDepthIndex( -2000 );
3302 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3303 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3305 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3306 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3307 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3308 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3309 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3310 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3312 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3313 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3314 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3315 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3316 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3318 dummyControl.SetSize(200.f, 200.f);
3319 Stage::GetCurrent().Add( dummyControl );
3324 int UtcDaliRegisterVisualOrder02(void)
3326 ToolkitTestApplication application;
3327 tet_infoline( "Register Visual Order with Background Set" );
3329 DummyControl dummyControl = DummyControl::New(true);
3330 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3332 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3334 VisualFactory factory = VisualFactory::Get();
3335 Property::Map propertyMap;
3336 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3337 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3339 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3341 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3343 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3344 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3345 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3346 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3347 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3349 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3350 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3351 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3352 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3354 dummyControl.SetSize(200.f, 200.f);
3355 Stage::GetCurrent().Add( dummyControl );
3360 int UtcDaliRegisterVisualWithDepthIndex(void)
3362 ToolkitTestApplication application;
3363 tet_infoline( "Register a Visual With Depth Index" );
3365 DummyControl dummyControl = DummyControl::New(true);
3366 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3368 VisualFactory factory = VisualFactory::Get();
3369 Property::Map propertyMap;
3370 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3371 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3373 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3374 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3375 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3376 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3377 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3379 tet_infoline( "Register another visual with a depth index and it disabled" );
3380 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3381 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3382 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3383 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3385 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3386 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3387 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3388 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3389 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3391 dummyControl.SetSize(200.f, 200.f);
3392 Stage::GetCurrent().Add( dummyControl );
3397 int UtcDaliColorVisualRenderIfTransparentProperty(void)
3399 ToolkitTestApplication application;
3400 tet_infoline( "Test the renderIfTransparent property of ColorVisual" );
3402 VisualFactory factory = VisualFactory::Get();
3403 Property::Map propertyMap;
3404 propertyMap.Insert( Visual::Property::TYPE, Visual::COLOR );
3405 propertyMap.Insert( ColorVisual::Property::MIX_COLOR, Color::BLUE );
3407 tet_infoline( "Check default value" );
3409 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3410 Property::Map returnedMap;
3411 testVisual.CreatePropertyMap( returnedMap );
3413 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3414 DALI_TEST_CHECK( renderIfTransparentProperty );
3415 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );
3418 propertyMap.Insert( DevelColorVisual::Property::RENDER_IF_TRANSPARENT, true );
3420 tet_infoline( "Ensure set to value required" );
3422 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3423 Property::Map returnedMap;
3424 testVisual.CreatePropertyMap( returnedMap );
3426 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3427 DALI_TEST_CHECK( renderIfTransparentProperty );
3428 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), true, TEST_LOCATION );
3431 propertyMap[ DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = Color::BLUE;
3433 tet_infoline( "Ensure it returns default value if set to wrong type" );
3435 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3436 Property::Map returnedMap;
3437 testVisual.CreatePropertyMap( returnedMap );
3439 Property::Value* renderIfTransparentProperty = returnedMap.Find( DevelColorVisual::Property::RENDER_IF_TRANSPARENT );
3440 DALI_TEST_CHECK( renderIfTransparentProperty );
3441 DALI_TEST_EQUALS( renderIfTransparentProperty->Get< bool >(), false, TEST_LOCATION );