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/visual-properties-devel.h>
28 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
29 #include <dali-toolkit/dali-toolkit.h>
30 #include "dummy-control.h"
33 using namespace Dali::Toolkit;
37 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
38 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
39 const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg";
40 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
41 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
42 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
43 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
45 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
47 Property::Map DefaultTransform()
49 Property::Map transformMap;
51 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
52 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
53 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
54 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
55 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
56 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
60 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
62 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
64 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
66 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
68 Property::Value* valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
69 if( NULL != valueSet )
71 if( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() )
73 tet_printf( " Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
79 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
88 void PrepareResourceImage( ToolkitTestApplication& application, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
90 TestPlatformAbstraction& platform = application.GetPlatform();
91 platform.SetClosestImageSize(Vector2( imageWidth, imageHeight));
93 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
94 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
95 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
96 unsigned int initialColor = 0xFF;
97 memset( pixbuffer, initialColor, imageHeight*imageWidth*bytesPerPixel);
99 Integration::ResourcePointer resourcePtr(bitmap);
100 platform.SetSynchronouslyLoadedResource( resourcePtr );
104 void dali_visual_startup(void)
106 test_return_value = TET_UNDEF;
109 void dali_visual_cleanup(void)
111 test_return_value = TET_PASS;
115 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
118 visual.CreatePropertyMap(map);
119 Property::Value* value = map.Find( mixColorIndex );
120 DALI_TEST_CHECK( value );
122 DALI_TEST_CHECK( value->Get( mixColor1 ) );
123 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
125 value = map.Find( Visual::Property::MIX_COLOR );
126 DALI_TEST_CHECK( value );
128 DALI_TEST_CHECK( value->Get( mixColor2 ) );
129 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
131 value = map.Find( Visual::Property::OPACITY );
132 DALI_TEST_CHECK( value );
134 DALI_TEST_CHECK( value->Get( opacity ) );
135 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
139 int UtcDaliVisualCopyAndAssignment(void)
141 ToolkitTestApplication application;
142 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
144 VisualFactory factory = VisualFactory::Get();
145 Property::Map propertyMap;
146 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
147 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
148 Visual::Base visual = factory.CreateVisual( propertyMap );
150 Visual::Base visualCopy( visual );
151 DALI_TEST_CHECK(visual == visualCopy);
153 Visual::Base emptyVisual;
154 Visual::Base emptyVisualCopy( emptyVisual );
155 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
157 Visual::Base visualEquals;
158 visualEquals = visual;
159 DALI_TEST_CHECK(visual == visualEquals);
161 Visual::Base emptyVisualEquals;
162 emptyVisualEquals = emptyVisual;
163 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
167 DALI_TEST_CHECK( visual = visualCopy );
172 int UtcDaliVisualSetName01(void)
174 ToolkitTestApplication application;
175 tet_infoline( "UtcDaliVisualSetName" );
177 VisualFactory factory = VisualFactory::Get();
178 Property::Map propertyMap;
179 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
180 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
181 Visual::Base visual = factory.CreateVisual( propertyMap );
183 const char* visualName = "backgroundVisual";
184 visual.SetName( visualName );
186 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
191 int UtcDaliVisualSetGetDepthIndex(void)
193 ToolkitTestApplication application;
194 tet_infoline( "UtcDaliVisualSetDepthIndex" );
196 VisualFactory factory = VisualFactory::Get();
197 Property::Map propertyMap;
198 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
199 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
200 Visual::Base visual = factory.CreateVisual( propertyMap );
202 visual.SetDepthIndex( 1 );
204 DummyControl dummyControl = DummyControl::New(true);
205 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
206 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
208 dummyControl.SetSize(200.f, 200.f);
209 Stage::GetCurrent().Add( dummyControl );
212 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
213 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
214 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
216 visual.SetDepthIndex( -1 );
217 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
218 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
219 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
224 int UtcDaliVisualSize(void)
226 ToolkitTestApplication application;
227 tet_infoline( "UtcDaliVisualGetNaturalSize" );
229 VisualFactory factory = VisualFactory::Get();
230 Vector2 controlSize( 20.f, 30.f );
234 Dali::Property::Map map;
235 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
236 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
238 Visual::Base colorVisual = factory.CreateVisual( map );
239 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
241 colorVisual.GetNaturalSize(naturalSize);
242 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
245 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
246 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
247 Visual::Base imageVisual = factory.CreateVisual( image );
248 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
250 imageVisual.GetNaturalSize(naturalSize);
251 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
253 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
256 float borderSize = 5.f;
258 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
259 map[ BorderVisual::Property::COLOR ] = Color::RED;
260 map[ BorderVisual::Property::SIZE ] = borderSize;
261 Visual::Base borderVisual = factory.CreateVisual( map );
262 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
263 borderVisual.GetNaturalSize(naturalSize);
264 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
266 // gradient gradientVisual
267 Property::Map propertyMap;
268 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
269 Vector2 start(-1.f, -1.f);
270 Vector2 end(1.f, 1.f);
271 propertyMap.Insert( "mixColor", Color::MAGENTA );
272 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
273 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
274 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
275 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
276 Property::Array stopColors;
277 stopColors.PushBack( Color::RED );
278 stopColors.PushBack( Color::GREEN );
279 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
280 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
281 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
282 gradientVisual.GetNaturalSize(naturalSize);
283 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
285 // animated gradient visual
286 Vector2 animated_gradient_visual_size(10.f, 10.f);
288 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
289 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
290 animatedGradientVisual.GetNaturalSize(naturalSize);
291 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
292 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
295 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
296 svgVisual.SetTransformAndSize(DefaultTransform(), controlSize );
297 svgVisual.GetNaturalSize(naturalSize);
299 // <svg width="100" height="100">
300 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
302 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
304 // svg visual with a size
305 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
306 svgVisual2.GetNaturalSize(naturalSize);
307 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
311 // Load some fonts to get the same metrics on different platforms.
312 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
313 fontClient.SetDpi( 96u, 96u );
315 char* pathNamePtr = get_current_dir_name();
316 const std::string pathName( pathNamePtr );
319 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
322 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
323 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
324 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
325 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
327 Visual::Base textVisual = factory.CreateVisual( propertyMap );
328 textVisual.GetNaturalSize( naturalSize );
329 DALI_TEST_EQUALS( naturalSize, Size( 80.f, 20.f ), TEST_LOCATION );
331 const float height = textVisual.GetHeightForWidth( 40.f );
332 DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
334 //AnimatedImageVisual
335 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
336 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
337 animatedImageVisual.GetNaturalSize(naturalSize);
338 // TEST_GIF_FILE: anim.gif
339 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
340 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
345 int UtcDaliVisualSetOnOffStage(void)
347 ToolkitTestApplication application;
348 tet_infoline( "UtcDaliVisualSetDepthIndex" );
350 VisualFactory factory = VisualFactory::Get();
351 Property::Map propertyMap;
352 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
353 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
354 Visual::Base visual = factory.CreateVisual( propertyMap );
356 DummyControl actor = DummyControl::New(true);
357 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
358 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
360 actor.SetSize(200.f, 200.f);
362 application.SendNotification();
363 application.Render(0);
364 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
366 Stage::GetCurrent().Add( actor );
368 application.SendNotification();
369 application.Render(0);
370 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
372 Stage::GetCurrent().Remove( actor );
374 application.SendNotification();
375 application.Render(0);
376 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
381 int UtcDaliVisualGetPropertyMap1(void)
383 ToolkitTestApplication application;
384 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
386 VisualFactory factory = VisualFactory::Get();
387 Property::Map propertyMap;
388 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
389 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
390 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
392 Property::Map resultMap;
393 colorVisual.CreatePropertyMap( resultMap );
395 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
396 DALI_TEST_CHECK( typeValue );
397 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
399 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
400 DALI_TEST_CHECK( colorValue );
401 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
403 // change the blend color
404 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
405 colorVisual = factory.CreateVisual( propertyMap );
406 colorVisual.CreatePropertyMap( resultMap );
408 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
409 DALI_TEST_CHECK( colorValue );
410 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
415 int UtcDaliVisualGetPropertyMap2(void)
417 ToolkitTestApplication application;
418 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
420 VisualFactory factory = VisualFactory::Get();
421 Property::Map propertyMap;
422 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
423 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
424 propertyMap.Insert("borderColor", Color::BLUE);
425 propertyMap.Insert("borderSize", 5.f);
426 propertyMap.Insert("antiAliasing", true);
427 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
429 Property::Map resultMap;
430 borderVisual.CreatePropertyMap( resultMap );
432 // check the property values from the returned map from visual
433 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
434 DALI_TEST_CHECK( typeValue );
435 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
437 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
438 DALI_TEST_CHECK( colorValue );
439 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
441 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
442 DALI_TEST_CHECK( sizeValue );
443 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
445 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
446 DALI_TEST_CHECK( AAValue );
447 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
449 Property::Map propertyMap1;
450 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
451 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
452 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
453 borderVisual = factory.CreateVisual( propertyMap1 );
454 borderVisual.CreatePropertyMap( resultMap );
456 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
457 DALI_TEST_CHECK( typeValue );
458 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
460 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
461 DALI_TEST_CHECK( colorValue );
462 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
464 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
465 DALI_TEST_CHECK( colorValue );
466 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
472 int UtcDaliVisualGetPropertyMap2N(void)
474 ToolkitTestApplication application;
475 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
477 VisualFactory factory = VisualFactory::Get();
478 Property::Map propertyMap;
479 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
480 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
482 tet_infoline( "Test that the visual is created, with a default renderer" );
483 DALI_TEST_CHECK( borderVisual );
485 DummyControl dummyControl = DummyControl::New(true);
486 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
487 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
488 Stage::GetCurrent().Add( dummyControl );
490 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
496 int UtcDaliVisualGetPropertyMap3(void)
498 ToolkitTestApplication application;
499 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
501 VisualFactory factory = VisualFactory::Get();
502 DALI_TEST_CHECK( factory );
504 Property::Map propertyMap;
505 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
507 Vector2 start(-1.f, -1.f);
508 Vector2 end(1.f, 1.f);
509 propertyMap.Insert( "startPosition", start);
510 propertyMap.Insert( "endPosition", end);
511 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
513 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
515 Property::Array stopColors;
516 stopColors.PushBack( Color::RED );
517 stopColors.PushBack( Color::GREEN );
518 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
520 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
522 Property::Map resultMap;
523 gradientVisual.CreatePropertyMap( resultMap );
525 // check the property values from the returned map from visual
526 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
527 DALI_TEST_CHECK( value );
528 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
530 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
531 DALI_TEST_CHECK( value );
532 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
534 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
535 DALI_TEST_CHECK( value );
536 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
538 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
539 DALI_TEST_CHECK( value );
540 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
542 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
543 DALI_TEST_CHECK( value );
544 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
546 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
547 DALI_TEST_CHECK( value );
548 Property::Array* offsetArray = value->GetArray();
549 DALI_TEST_CHECK( offsetArray->Count() == 2 );
550 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
551 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
553 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
554 DALI_TEST_CHECK( value );
555 Property::Array* colorArray = value->GetArray();
556 DALI_TEST_CHECK( colorArray->Count() == 2 );
557 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
558 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
563 int UtcDaliVisualGetPropertyMap4(void)
565 ToolkitTestApplication application;
566 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
568 VisualFactory factory = VisualFactory::Get();
569 DALI_TEST_CHECK( factory );
571 Property::Map propertyMap;
572 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
574 Vector2 center(100.f, 100.f);
575 float radius = 100.f;
576 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
577 propertyMap.Insert(GradientVisual::Property::CENTER, center);
578 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
579 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
581 Property::Array stopColors;
582 stopColors.PushBack( Color::RED );
583 stopColors.PushBack( Color::BLACK );
584 stopColors.PushBack( Color::GREEN );
585 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
587 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
588 DALI_TEST_CHECK( gradientVisual );
590 Property::Map resultMap;
591 gradientVisual.CreatePropertyMap( resultMap );
593 // check the property values from the returned map from visual
594 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
595 DALI_TEST_CHECK( value );
596 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
598 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
599 DALI_TEST_CHECK( value );
600 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
602 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
603 DALI_TEST_CHECK( value );
604 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
606 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
607 DALI_TEST_CHECK( value );
608 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
610 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
611 DALI_TEST_CHECK( value );
612 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
614 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
615 DALI_TEST_CHECK( value );
616 Property::Array* offsetArray = value->GetArray();
617 DALI_TEST_CHECK( offsetArray->Count() == 3 );
618 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
619 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
620 // any stop value will be clamped to [0.0, 1.0];
621 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
623 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
624 DALI_TEST_CHECK( value );
625 Property::Array* colorArray = value->GetArray();
626 DALI_TEST_CHECK( colorArray->Count() == 3 );
627 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
628 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
629 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
634 int UtcDaliVisualGetPropertyMap5(void)
636 ToolkitTestApplication application;
637 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
639 VisualFactory factory = VisualFactory::Get();
640 Property::Map propertyMap;
641 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
642 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
643 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
644 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
645 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
646 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
647 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
648 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
649 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
650 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
651 propertyMap.Insert( "synchronousLoading", true );
653 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
654 DALI_TEST_CHECK( imageVisual );
656 Property::Map resultMap;
657 imageVisual.CreatePropertyMap( resultMap );
659 // check the property values from the returned map from visual
660 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
661 DALI_TEST_CHECK( value );
662 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
664 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
665 DALI_TEST_CHECK( value );
666 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
668 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
669 DALI_TEST_CHECK( value );
670 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
672 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
673 DALI_TEST_CHECK( value );
674 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
676 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
677 DALI_TEST_CHECK( value );
678 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
680 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
681 DALI_TEST_CHECK( value );
682 DALI_TEST_CHECK( value->Get<int>() == 20 );
684 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
685 DALI_TEST_CHECK( value );
686 DALI_TEST_CHECK( value->Get<int>() == 30 );
688 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
689 DALI_TEST_CHECK( value );
690 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
692 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
693 DALI_TEST_CHECK( value );
694 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
696 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
697 DALI_TEST_CHECK( value );
698 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
700 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
701 DALI_TEST_CHECK( value );
702 DALI_TEST_CHECK( value->Get<bool>() == true );
704 // Get an image visual with an image handle, and test the default property values
705 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
706 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
707 imageVisual = factory.CreateVisual(image);
708 imageVisual.CreatePropertyMap( resultMap );
710 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
711 DALI_TEST_CHECK( value );
712 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
714 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
715 DALI_TEST_CHECK( value );
716 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
718 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
719 DALI_TEST_CHECK( value );
720 DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
722 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
723 DALI_TEST_CHECK( value );
724 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
726 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
727 DALI_TEST_CHECK( value );
728 DALI_TEST_CHECK( value->Get<int>() == 100 );
730 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
731 DALI_TEST_CHECK( value );
732 DALI_TEST_CHECK( value->Get<int>() == 200 );
734 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
735 DALI_TEST_CHECK( value );
736 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
738 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
739 DALI_TEST_CHECK( value );
740 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
742 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
743 DALI_TEST_CHECK( value );
744 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
746 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
747 DALI_TEST_CHECK( value );
748 DALI_TEST_CHECK( value->Get<bool>() == false );
753 int UtcDaliVisualGetPropertyMap6(void)
755 ToolkitTestApplication application;
756 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
758 Rect< int > border( 1, 1, 1, 1 );
760 VisualFactory factory = VisualFactory::Get();
761 Property::Map propertyMap;
762 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
763 propertyMap.Insert( "mixColor", Color::MAGENTA );
764 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
765 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
766 propertyMap.Insert( ImageVisual::Property::BORDER, border );
767 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
769 Property::Map resultMap;
770 nPatchVisual.CreatePropertyMap( resultMap );
772 // check the property values from the returned map from visual
773 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
774 DALI_TEST_CHECK( value );
775 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
777 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
778 DALI_TEST_CHECK( value );
779 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
781 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
782 DALI_TEST_CHECK( value );
783 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
785 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
786 DALI_TEST_CHECK( value );
787 DALI_TEST_CHECK( value->Get<bool>() );
789 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
790 DALI_TEST_CHECK( value );
791 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
793 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
795 Property::Map propertyMap1;
796 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
797 propertyMap1.Insert( "mixColor", Color::MAGENTA );
798 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
799 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
800 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
801 nPatchVisual = factory.CreateVisual( propertyMap1 );
803 nPatchVisual.CreatePropertyMap( resultMap );
805 // check the property values from the returned map from visual
806 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
807 DALI_TEST_CHECK( value );
808 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
810 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
811 DALI_TEST_CHECK( value );
812 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
814 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
815 DALI_TEST_CHECK( value );
816 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
818 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
819 DALI_TEST_CHECK( value );
820 DALI_TEST_CHECK( value->Get<bool>() );
822 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
823 DALI_TEST_CHECK( value );
824 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
829 int UtcDaliVisualGetPropertyMap7(void)
831 ToolkitTestApplication application;
832 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
834 // request SvgVisual with a property map
835 VisualFactory factory = VisualFactory::Get();
836 Property::Map propertyMap;
837 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
838 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
839 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
840 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
841 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
843 Property::Map resultMap;
844 svgVisual.CreatePropertyMap( resultMap );
845 // check the property values from the returned map from a visual
846 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
847 DALI_TEST_CHECK( value );
848 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
850 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
851 DALI_TEST_CHECK( value );
852 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
854 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
855 DALI_TEST_CHECK( value );
856 DALI_TEST_CHECK( value->Get<bool>() == false );
858 // request SvgVisual with a property map 2
860 propertyMap[ "visualType" ] = Visual::SVG;
861 propertyMap[ "mixColor" ] = Color::WHITE;
862 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
863 propertyMap[ "atlasing" ] = true;
864 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
867 svgVisual1.CreatePropertyMap( resultMap );
868 // check the property values from the returned map from a visual
869 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
870 DALI_TEST_CHECK( value );
871 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
873 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
874 DALI_TEST_CHECK( value );
875 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
877 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
878 DALI_TEST_CHECK( value );
879 DALI_TEST_CHECK( value->Get<bool>() == true );
881 // request SvgVisual with an URL
882 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
884 svgVisual2.CreatePropertyMap( resultMap );
885 // check the property values from the returned map from a visual
886 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
887 DALI_TEST_CHECK( value );
888 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
890 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
891 DALI_TEST_CHECK( value );
892 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
898 int UtcDaliVisualGetPropertyMap8(void)
900 ToolkitTestApplication application;
901 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
903 //Request MeshVisual using a property map.
904 VisualFactory factory = VisualFactory::Get();
905 Property::Map propertyMap;
906 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
907 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
908 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
909 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
910 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
911 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
912 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
913 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
915 Property::Map resultMap;
916 meshVisual.CreatePropertyMap( resultMap );
917 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
919 //Check values in the result map are identical to the initial map's values.
920 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
921 DALI_TEST_CHECK( value );
922 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
924 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
925 DALI_TEST_CHECK( value );
926 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
928 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
929 DALI_TEST_CHECK( value );
930 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
932 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
933 DALI_TEST_CHECK( value );
934 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
936 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
937 DALI_TEST_CHECK( value );
938 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
940 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
941 DALI_TEST_CHECK( value );
942 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
947 //Primitive shape visual
948 int UtcDaliVisualGetPropertyMap9(void)
950 ToolkitTestApplication application;
951 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
953 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
954 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
956 //Request PrimitiveVisual using a property map.
957 VisualFactory factory = VisualFactory::Get();
958 Property::Map propertyMap;
959 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
960 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
961 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
962 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
963 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
964 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
965 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
966 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
967 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
968 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
969 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
970 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
971 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
972 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
974 Property::Map resultMap;
975 primitiveVisual.CreatePropertyMap( resultMap );
977 //Check values in the result map are identical to the initial map's values.
978 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
979 DALI_TEST_CHECK( value );
980 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
982 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
983 DALI_TEST_CHECK( value );
984 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
986 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
987 DALI_TEST_CHECK( value );
988 DALI_TEST_CHECK( value->Get<Vector4>() == color );
989 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
991 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
992 DALI_TEST_CHECK( value );
993 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
995 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
996 DALI_TEST_CHECK( value );
997 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
999 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1000 DALI_TEST_CHECK( value );
1001 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1003 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1004 DALI_TEST_CHECK( value );
1005 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1007 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1008 DALI_TEST_CHECK( value );
1009 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1011 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1012 DALI_TEST_CHECK( value );
1013 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1015 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1016 DALI_TEST_CHECK( value );
1017 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1019 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1020 DALI_TEST_CHECK( value );
1021 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1023 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1024 DALI_TEST_CHECK( value );
1025 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1027 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1028 DALI_TEST_CHECK( value );
1029 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1035 int UtcDaliVisualGetPropertyMap10(void)
1037 ToolkitTestApplication application;
1038 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1040 //Request PrimitiveVisual using a property map.
1041 VisualFactory factory = VisualFactory::Get();
1043 Property::Map propertyMap;
1044 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1045 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1046 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1047 propertyMap.Insert( "enableMarkup", false );
1048 propertyMap.Insert( "text", "Hello world" );
1049 propertyMap.Insert( "fontFamily", "TizenSans" );
1051 Property::Map fontStyleMapSet;
1052 fontStyleMapSet.Insert( "weight", "bold" );
1053 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1055 propertyMap.Insert( "pointSize", 12.f );
1056 propertyMap.Insert( "multiLine", true );
1057 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1058 propertyMap.Insert( "verticalAlignment", "CENTER" );
1059 propertyMap.Insert( "textColor", Color::RED );
1060 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1062 Property::Map resultMap;
1063 textVisual.CreatePropertyMap( resultMap );
1065 //Check values in the result map are identical to the initial map's values.
1066 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1067 DALI_TEST_CHECK( value );
1068 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1070 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1071 DALI_TEST_CHECK( value );
1072 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1074 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1075 DALI_TEST_CHECK( value );
1076 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1078 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1079 DALI_TEST_CHECK( value );
1080 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1082 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1083 DALI_TEST_CHECK( value );
1085 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1086 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1087 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1089 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1090 DALI_TEST_CHECK( value );
1091 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1093 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1094 DALI_TEST_CHECK( value );
1095 DALI_TEST_CHECK( value->Get<bool>() );
1097 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1098 DALI_TEST_CHECK( value );
1099 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1101 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1102 DALI_TEST_CHECK( value );
1103 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1105 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1106 DALI_TEST_CHECK( value );
1107 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1109 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1110 DALI_TEST_CHECK( value );
1111 DALI_TEST_CHECK( !value->Get<bool>() );
1116 int UtcDaliVisualGetPropertyMap11(void)
1118 ToolkitTestApplication application;
1119 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1121 VisualFactory factory = VisualFactory::Get();
1122 DALI_TEST_CHECK( factory );
1124 Property::Map propertyMap;
1125 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1127 Vector2 start(-0.5f, 0.5f);
1128 Vector2 end (0.5f, -0.0f);
1129 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1130 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1131 Vector2 rotate_center(0.0f, 0.4f);
1132 float rotate_amount = 1.57f;
1133 float offset = 100.f;
1135 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1136 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1137 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1139 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1140 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1141 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1142 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1143 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1144 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1145 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1147 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1148 DALI_TEST_CHECK( animatedGradientVisual );
1150 Property::Map resultMap;
1151 animatedGradientVisual.CreatePropertyMap( resultMap );
1153 // check the property values from the returned map from visual
1154 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1155 DALI_TEST_CHECK( value );
1156 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1158 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1159 DALI_TEST_CHECK( value );
1160 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1162 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1163 DALI_TEST_CHECK( value );
1164 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1166 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1167 DALI_TEST_CHECK( value );
1168 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1171 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1172 DALI_TEST_CHECK( value );
1173 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1175 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1176 DALI_TEST_CHECK( value );
1177 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1179 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1180 DALI_TEST_CHECK( value );
1181 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1183 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1184 DALI_TEST_CHECK( value );
1185 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1187 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1188 DALI_TEST_CHECK( value );
1189 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1191 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1192 DALI_TEST_CHECK( value );
1193 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1195 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1196 DALI_TEST_CHECK( value );
1197 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1202 int UtcDaliVisualGetPropertyMap12(void)
1204 ToolkitTestApplication application;
1205 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1207 // Case 1 : Set values by index
1209 tet_printf( " - Set Values by Index\n" );
1210 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1211 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1212 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1214 tet_printf( "test with delay [%f]\n", _delay );
1215 VisualFactory factory = VisualFactory::Get();
1216 DALI_TEST_CHECK( factory );
1218 Property::Map propertyMap;
1219 Property::Map animationMap;
1220 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1222 float duration = 1.1f;
1223 float delay = _delay;
1224 float repeat_delay = 0.4f;
1226 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1228 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1229 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1231 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1233 animationMap.Clear();
1234 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1235 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1236 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1237 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1238 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1239 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1240 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1241 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1242 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1244 return animationMap;
1247 Vector2 start1(-0.5f, 0.5f);
1248 Vector2 end1 (0.5f, -0.5f);
1249 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1250 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1251 Vector2 rotate_center1(0.0f, 0.4f);
1252 float rotate_amount1 = 0.0f;
1253 float offset1 = 0.f;
1255 Vector2 start2(-0.5f, -0.5f);
1256 Vector2 end2 (0.5f, 0.5f);
1257 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1258 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1259 Vector2 rotate_center2(0.0f, -0.4f);
1260 float rotate_amount2 = 6.2832f;
1261 float offset2 = 2.f;
1263 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1264 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1265 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1267 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1268 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1269 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1270 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1271 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1272 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1273 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1275 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1276 DALI_TEST_CHECK( animatedGradientVisual );
1278 Property::Map resultMap;
1279 animatedGradientVisual.CreatePropertyMap( resultMap );
1281 // check the property values from the returned map from visual
1282 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1283 DALI_TEST_CHECK( value );
1284 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1286 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1287 DALI_TEST_CHECK( value );
1288 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1290 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1291 DALI_TEST_CHECK( value );
1292 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1294 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1295 DALI_TEST_CHECK( value );
1296 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1298 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
1300 tet_printf("Check value at %d\n", line_num);
1301 value = resultMap.Find( index, Property::MAP );
1302 DALI_TEST_CHECK( value );
1303 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1304 Property::Map *temp_map = value->GetMap();
1305 DALI_TEST_CHECK( temp_map );
1307 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1309 Property::Value *res = temp_map->Find( index );
1310 DALI_TEST_CHECK( res );
1314 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1315 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1316 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1317 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1318 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1319 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1320 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1321 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1322 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1325 // check the animation map data is good
1326 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1327 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1328 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1329 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1330 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1331 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1332 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1336 // Case 2 : Set values by string
1338 tet_printf( " - Set Values by String\n" );
1339 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1340 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1341 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1343 tet_printf( "test with delay [%f]\n", _delay );
1344 VisualFactory factory = VisualFactory::Get();
1345 DALI_TEST_CHECK( factory );
1347 Property::Map propertyMap;
1348 Property::Map animationMap;
1349 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1351 float duration = 1.1f;
1352 float delay = _delay;
1353 float repeat_delay = 0.4f;
1355 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1357 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1358 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1360 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1362 animationMap.Clear();
1363 animationMap.Insert("startValue" , start);
1364 animationMap.Insert("targetValue" , target);
1365 animationMap.Insert("directionType", "BACKWARD");
1366 animationMap.Insert("duration" , duration);
1367 animationMap.Insert("delay" , delay);
1368 animationMap.Insert("repeat" , loop_count);
1369 animationMap.Insert("repeatDelay" , repeat_delay);
1370 animationMap.Insert("motionType" , "MIRROR");
1371 animationMap.Insert("easingType" , "IN_OUT");
1373 return animationMap;
1376 Vector2 start1(-0.5f, 0.5f);
1377 Vector2 end1 (0.5f, -0.5f);
1378 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1379 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1380 Vector2 rotate_center1(0.0f, 0.4f);
1381 float rotate_amount1 = 0.0f;
1382 float offset1 = 0.f;
1384 Vector2 start2(-0.5f, -0.5f);
1385 Vector2 end2 (0.5f, 0.5f);
1386 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1387 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1388 Vector2 rotate_center2(0.0f, -0.4f);
1389 float rotate_amount2 = 6.2832f;
1390 float offset2 = 2.f;
1392 // For test mix the type string/index key and string/index value works well.
1393 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1394 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1395 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1397 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1398 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1399 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1400 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1401 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1402 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1403 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1405 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1406 DALI_TEST_CHECK( animatedGradientVisual );
1408 Property::Map resultMap;
1409 animatedGradientVisual.CreatePropertyMap( resultMap );
1411 // check the property values from the returned map from visual
1412 // Note : resultMap from CreatePropertyMap only contain indexKey
1413 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1414 DALI_TEST_CHECK( value );
1415 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1417 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1418 DALI_TEST_CHECK( value );
1419 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1421 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1422 DALI_TEST_CHECK( value );
1423 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1425 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1426 DALI_TEST_CHECK( value );
1427 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1429 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
1431 tet_printf("Check value at %d\n", line_num);
1432 value = resultMap.Find( index, Property::MAP );
1433 DALI_TEST_CHECK( value );
1434 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1435 Property::Map *temp_map = value->GetMap();
1436 DALI_TEST_CHECK( temp_map );
1438 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1440 Property::Value *res = temp_map->Find( index );
1441 DALI_TEST_CHECK( res );
1445 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1446 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1447 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1448 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1449 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1450 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1451 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1452 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1453 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1456 // check the animation map data is good
1457 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1458 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1459 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1460 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1461 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1462 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1463 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1469 int UtcDaliVisualGetPropertyMap13(void)
1471 ToolkitTestApplication application;
1472 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1474 for(int _direction = 0; _direction <= 1; ++_direction)
1476 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1478 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1479 VisualFactory factory = VisualFactory::Get();
1480 DALI_TEST_CHECK( factory );
1482 Property::Map propertyMap;
1483 Property::Map animationMap;
1484 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1486 float duration = 1.0f;
1487 float delay = _delay;
1488 float repeat_delay = 0.5f;
1490 int direction = _direction;
1491 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1492 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1493 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1495 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1497 animationMap.Clear();
1498 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1499 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1500 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1501 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1502 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1503 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1504 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1505 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1506 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1507 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1508 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1510 return animationMap;
1513 Vector2 start1(-0.5f, 0.5f);
1514 Vector2 end1 (0.5f, -0.5f);
1515 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1516 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1517 Vector2 rotate_center1(1.0f, 0.4f);
1518 float rotate_amount1 = 2.0f;
1519 float offset1 = 1.f;
1521 Vector2 start2(-0.5f, -0.5f);
1522 Vector2 end2 (0.5f, 0.5f);
1523 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1524 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1525 Vector2 rotate_center2(1.0f, -0.4f);
1526 float rotate_amount2 = 1.0f;
1527 float offset2 = 3.f;
1529 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1530 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1531 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1533 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1534 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1535 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1536 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1537 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1538 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1539 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1541 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1542 DALI_TEST_CHECK( animatedGradientVisual );
1544 Property::Map resultMap;
1545 animatedGradientVisual.CreatePropertyMap( resultMap );
1547 // check the property values from the returned map from visual
1548 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1549 DALI_TEST_CHECK( value );
1550 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1552 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1553 DALI_TEST_CHECK( value );
1554 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1556 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1557 DALI_TEST_CHECK( value );
1558 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1560 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1561 DALI_TEST_CHECK( value );
1562 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1564 // If loop_count = 0, Animation doesn't created.
1565 // Optimized resultMap only have one value, which is target value
1566 // Note: target value will be changed by direction option.
1567 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1568 DALI_TEST_CHECK( value );
1569 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1571 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1572 DALI_TEST_CHECK( value );
1573 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1575 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1576 DALI_TEST_CHECK( value );
1577 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1579 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1580 DALI_TEST_CHECK( value );
1581 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1583 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1584 DALI_TEST_CHECK( value );
1585 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1587 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1588 DALI_TEST_CHECK( value );
1589 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1591 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1592 DALI_TEST_CHECK( value );
1593 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1600 int UtcDaliVisualAnimateBorderVisual01(void)
1602 ToolkitTestApplication application;
1603 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1605 VisualFactory factory = VisualFactory::Get();
1606 Property::Map propertyMap;
1607 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1608 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1609 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1610 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1611 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1614 map["target"] = "testVisual";
1615 map["property"] = "mixColor";
1616 map["targetValue"] = Vector4(1,1,1,0);
1617 map["animator"] = Property::Map()
1618 .Add("alphaFunction", "LINEAR")
1619 .Add("timePeriod", Property::Map()
1621 .Add("duration", 4.0f));
1623 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1625 DummyControl actor = DummyControl::New(true);
1626 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1627 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1628 actor.SetSize(2000, 2000);
1629 actor.SetParentOrigin(ParentOrigin::CENTER);
1630 Stage::GetCurrent().Add(actor);
1632 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1634 Renderer renderer = actor.GetRendererAt(0);
1635 Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR );
1636 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
1638 Animation animation = dummyImpl.CreateTransition( transition );
1640 // Animate the mix color through the transition, and the border color through
1641 // programmatic method.
1642 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1645 application.SendNotification();
1646 application.Render(0);
1647 application.Render(2000u); // halfway point between blue and white
1649 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1650 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1651 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1652 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1654 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1655 testColor = Vector4( 1,1,1,0.4f );
1656 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1657 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1658 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a ) , true, TEST_LOCATION );
1660 application.Render(2000u);
1662 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1663 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1664 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1666 color = renderer.GetCurrentProperty< Vector4 >( mixColorIndex );
1667 testColor = Vector4(1,1,1,0);
1668 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1669 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1670 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a ), true, TEST_LOCATION );
1676 int UtcDaliVisualAnimateBorderVisual02(void)
1678 ToolkitTestApplication application;
1679 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1681 VisualFactory factory = VisualFactory::Get();
1682 Property::Map propertyMap;
1683 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1684 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1685 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1686 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1688 DummyControl actor = DummyControl::New(true);
1689 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1690 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1691 actor.SetSize(2000, 2000);
1692 actor.SetParentOrigin(ParentOrigin::CENTER);
1693 Stage::GetCurrent().Add(actor);
1695 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1697 Renderer renderer = actor.GetRendererAt(0);
1698 Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE );
1700 Animation animation = Animation::New(4.0f);
1701 animation.AnimateTo( Property(renderer, index), 9.0f );
1704 application.SendNotification();
1705 application.Render(0);
1706 application.Render(2000u); // halfway point
1708 float size = renderer.GetCurrentProperty< float >( index );
1709 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1710 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1712 application.Render(2000u); // halfway point between blue and white
1714 size = renderer.GetCurrentProperty< float >( index );
1715 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1716 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1721 int UtcDaliVisualAnimateColorVisual(void)
1723 ToolkitTestApplication application;
1724 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1726 VisualFactory factory = VisualFactory::Get();
1727 Property::Map propertyMap;
1728 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1729 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1730 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1732 DummyControl actor = DummyControl::New(true);
1733 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1734 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1735 actor.SetSize(2000, 2000);
1736 actor.SetParentOrigin(ParentOrigin::CENTER);
1737 Stage::GetCurrent().Add(actor);
1739 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1741 Renderer renderer = actor.GetRendererAt(0);
1742 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR );
1744 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1745 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1747 Animation animation = Animation::New(4.0f);
1748 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1751 application.SendNotification();
1752 application.Render(0);
1753 application.Render(2000u); // halfway point
1755 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1756 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1757 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1759 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1761 application.Render(2000u); // halfway point between blue and white
1763 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1764 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1766 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1768 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1769 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1774 int UtcDaliVisualAnimatePrimitiveVisual(void)
1776 ToolkitTestApplication application;
1777 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1780 VisualFactory factory = VisualFactory::Get();
1781 Property::Map propertyMap;
1782 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1783 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1784 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1785 Visual::Base visual = factory.CreateVisual( propertyMap );
1787 DummyControl actor = DummyControl::New(true);
1788 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1789 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1790 actor.SetSize(2000, 2000);
1791 actor.SetParentOrigin(ParentOrigin::CENTER);
1792 actor.SetColor(Color::BLACK);
1793 Stage::GetCurrent().Add(actor);
1795 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1797 Renderer renderer = actor.GetRendererAt(0);
1798 Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR );
1800 tet_infoline("Test that the renderer has the Primitive mix color");
1801 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
1803 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
1804 const Vector4 TARGET_MIX_COLOR( Color::RED );
1807 map["target"] = "testVisual";
1808 map["property"] = "mixColor";
1809 map["initialValue"] = INITIAL_MIX_COLOR;
1810 map["targetValue"] = TARGET_MIX_COLOR;
1811 map["animator"] = Property::Map()
1812 .Add("alphaFunction", "LINEAR")
1813 .Add("timePeriod", Property::Map()
1815 .Add("duration", 4.0f));
1817 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1819 Animation animation = dummyImpl.CreateTransition( transition );
1820 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1821 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
1823 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1826 application.SendNotification();
1827 application.Render(0);
1828 application.Render(2000u); // halfway point
1829 application.SendNotification();
1831 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
1833 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
1834 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
1835 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", halfwayColor.a ), true, TEST_LOCATION );
1837 application.Render(2001u); // go past end
1838 application.SendNotification(); // Trigger signals
1840 DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
1841 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
1842 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
1843 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", TARGET_MIX_COLOR.a ), true, TEST_LOCATION );
1845 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1846 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1854 int UtcDaliVisualAnimatedGradientVisual01(void)
1856 ToolkitTestApplication application;
1857 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
1860 VisualFactory factory = VisualFactory::Get();
1861 Property::Map propertyMap;
1862 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1863 Visual::Base visual = factory.CreateVisual( propertyMap );
1865 DummyControl actor = DummyControl::New(true);
1866 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1867 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1868 actor.SetSize(2000, 2000);
1869 actor.SetParentOrigin(ParentOrigin::CENTER);
1870 actor.SetColor(Color::BLACK);
1871 Stage::GetCurrent().Add(actor);
1873 application.SendNotification();
1874 application.Render(0);
1875 application.SendNotification();
1877 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1879 for(int step_iter = 0; step_iter < 3; step_iter++)
1881 application.SendNotification();
1882 application.Render(0);
1883 application.Render(750u); // step i/4
1884 application.SendNotification();
1886 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
1887 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
1888 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
1889 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
1890 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
1891 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
1892 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
1895 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
1896 application.Render(750u); // go to end
1897 application.SendNotification();
1899 application.Render(10u); // finish
1900 application.SendNotification();
1903 application.SendNotification();
1904 application.Render(0u);
1905 application.SendNotification();
1911 int UtcDaliVisualAnimatedGradientVisual02(void)
1913 ToolkitTestApplication application;
1914 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
1917 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
1918 int _direction[2] = {0, 1};
1919 int _loop_count[3] = {-1, 0, 1};
1920 int _motion[2] = {0, 1};
1921 int _easing[4] = {0, 1, 2, 3};
1923 int test_case_max = 4 * 2 * 3 * 2 * 4;
1925 int test_case_d = 7; // 7 is the number of animated properties.
1927 float _duration = 0.4f;
1928 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
1929 float noise_maker = 0.0f;
1930 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
1931 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
1933 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
1935 VisualFactory factory = VisualFactory::Get();
1936 Property::Map propertyMap;
1937 Property::Map animationMap;
1938 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1940 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
1941 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
1942 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
1944 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&
1946 int tc = (test_case + tc_offset);
1947 int idx_easing = tc % 4; tc /= 4;
1948 int idx_motion = tc % 2; tc /= 2;
1949 int idx_loop_count = tc % 3; tc /= 3;
1950 int idx_direction = tc % 2; tc /= 2;
1951 int idx_delay = tc % 4; tc /= 4;
1953 float duration = _duration - _repeat_delay;
1954 float repeat_delay = _repeat_delay;
1955 float delay = _delay[idx_delay] * _duration;
1956 int direction = _direction[idx_direction];
1957 int loop_count = _loop_count[idx_loop_count];
1958 int motion = _motion[idx_motion];
1959 int easing = _easing[idx_easing];
1961 animationMap.Clear();
1962 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
1963 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
1964 if( direction == 0 )
1966 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1970 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1972 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1973 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1974 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1975 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1978 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
1982 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
1986 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
1988 else if( easing == 1 )
1990 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
1992 else if( easing == 2 )
1994 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
1998 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2001 return animationMap;
2004 // Give different values for debuging
2005 noise_maker += 1.0f;
2006 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2007 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2008 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2009 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2010 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2011 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2012 float offset1 = 0.f + noise_maker * 0.1f;
2014 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2015 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2016 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2017 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2018 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2019 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2020 float offset2 = 2.f + noise_maker * 0.1f;
2022 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2023 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2024 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2026 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2027 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2028 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2029 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2030 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2031 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2032 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2034 Visual::Base visual = factory.CreateVisual( propertyMap );
2036 DummyControl actor = DummyControl::New( true );
2037 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2038 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2039 actor.SetSize( 2000, 2000 );
2040 actor.SetParentOrigin(ParentOrigin::CENTER);
2041 actor.SetColor(Color::BLACK);
2042 Stage::GetCurrent().Add(actor);
2044 application.SendNotification();
2045 application.Render( 0 );
2046 application.SendNotification();
2048 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2050 application.SendNotification();
2052 //Compare between CPU calculated value and Shader Visual calculated value
2053 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
2055 int tc = (test_case + tc_offset);
2056 int idx_easing = tc % 4; tc /= 4;
2057 int idx_motion = tc % 2; tc /= 2;
2058 int idx_loop_count = tc % 3; tc /= 3;
2059 int idx_direction = tc % 2; tc /= 2;
2060 int idx_delay = tc % 4; tc /= 4;
2062 float duration = _duration - _repeat_delay;
2063 float repeat_delay = _repeat_delay;
2064 float delay = _delay[idx_delay] * _duration;
2065 int direction = _direction[idx_direction];
2066 int loop_count = _loop_count[idx_loop_count];
2067 int motion = _motion[idx_motion];
2068 int easing = _easing[idx_easing];
2070 progress -= delay / _duration;
2072 Property::Value s = start;
2073 Property::Value t = target;
2074 if( direction == 1 )
2079 float x; ///< Animator progress value
2080 if( loop_count == 0 )
2084 else if( loop_count > 0 && progress + 0.01f > loop_count )
2086 x = ( motion == 0 ) ? 1.0f : 0.0f;
2090 if( progress < 0.0f )
2094 progress = fmodf( progress, 1.0f );
2095 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2100 x = progress * 2.0f;
2107 if( easing == 1 ) // EASE_IN
2111 else if( easing == 2 ) // EASE_OUT
2115 else if( easing == 3 ) // EASE_IN_OUT
2117 x = x * x * (3.0f - 2.0f * x);
2120 if( value_type == 0 ) // result type is Float
2124 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2125 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2126 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2128 else if( value_type == 1 ) // result type is Vector2
2132 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2133 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2134 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2136 else if( value_type == 2 ) // result type is Vector3
2140 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2141 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2142 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2144 else // result type is Vector4
2148 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2149 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2150 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2155 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2157 for( int step_iter = 0; step_iter < 3; step_iter++ )
2159 application.SendNotification();
2160 application.Render( _duration * 250.f ); // step i/4
2161 application.SendNotification();
2164 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2165 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2166 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2167 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2168 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2169 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2170 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2172 application.SendNotification();
2173 application.Render(_duration * 250.f); // step 4/4 will not test
2174 application.SendNotification();
2178 application.SendNotification();
2180 application.SendNotification();
2181 application.Render(10.f); // tempral time
2182 application.SendNotification();
2189 int UtcDaliVisualAnimatedGradientVisual03(void)
2191 ToolkitTestApplication application;
2192 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2195 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
2196 int _direction[2] = {0, 1};
2197 int _loop_count[3] = {-1, 0, 1};
2198 int _motion[2] = {0, 1};
2199 int _easing[4] = {0, 1, 2, 3};
2201 int test_case_max = 4 * 2 * 3 * 2 * 4;
2203 int test_case_d = 7; // 7 is the number of animated properties.
2205 float _duration = 0.4f;
2206 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2207 float noise_maker = 0.2f;
2208 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2209 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2211 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2213 VisualFactory factory = VisualFactory::Get();
2214 Property::Map propertyMap;
2215 Property::Map animationMap;
2216 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2218 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&
2220 int tc = (test_case + tc_offset);
2221 int idx_easing = tc % 4; tc /= 4;
2222 int idx_motion = tc % 2; tc /= 2;
2223 int idx_loop_count = tc % 3; tc /= 3;
2224 int idx_direction = tc % 2; tc /= 2;
2225 int idx_delay = tc % 4; tc /= 4;
2227 float duration = _duration - _repeat_delay;
2228 float repeat_delay = _repeat_delay;
2229 float delay = _delay[idx_delay] * _duration;
2230 int direction = _direction[idx_direction];
2231 int loop_count = _loop_count[idx_loop_count];
2232 int motion = _motion[idx_motion];
2233 int easing = _easing[idx_easing];
2235 animationMap.Clear();
2236 animationMap.Insert( "startValue", start );
2237 animationMap.Insert( "targetValue", target );
2238 if( direction == 0 )
2240 animationMap.Insert("directionType", "FORWARD");
2244 animationMap.Insert("directionType", "BACKWARD");
2246 animationMap.Insert("duration", duration);
2247 animationMap.Insert("delay", delay);
2248 animationMap.Insert("repeat", loop_count);
2249 animationMap.Insert("repeatDelay", repeat_delay);
2252 animationMap.Insert("motionType", "LOOP");
2256 animationMap.Insert("motionType", "MIRROR");
2260 animationMap.Insert("easingType", "LINEAR");
2262 else if( easing == 1 )
2264 animationMap.Insert("easingType", "IN");
2266 else if( easing == 2 )
2268 animationMap.Insert("easingType", "OUT");
2272 animationMap.Insert("easingType", "IN_OUT");
2275 return animationMap;
2278 // Give different values for debuging
2279 noise_maker += 0.8f;
2280 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2281 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2282 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2283 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2284 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2285 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2286 float offset1 = 0.f + noise_maker * 0.1f;
2288 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2289 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2290 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2291 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2292 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2293 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2294 float offset2 = 2.f + noise_maker * 0.1f;
2296 propertyMap.Insert("gradientType", "LINEAR");
2297 propertyMap.Insert("unitType", "USER_SPACE");
2298 propertyMap.Insert("spreadType", "CLAMP");
2300 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2301 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2302 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2303 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2304 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2305 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2306 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2308 Visual::Base visual = factory.CreateVisual( propertyMap );
2310 DummyControl actor = DummyControl::New( true );
2311 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2312 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2313 actor.SetSize( 2000, 2000 );
2314 actor.SetParentOrigin(ParentOrigin::CENTER);
2315 actor.SetColor(Color::BLACK);
2316 Stage::GetCurrent().Add(actor);
2318 application.SendNotification();
2319 application.Render( 0 );
2320 application.SendNotification();
2322 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2324 application.SendNotification();
2326 //Compare between CPU calculated value and Shader Visual calculated value
2327 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
2329 int tc = (test_case + tc_offset);
2330 int idx_easing = tc % 4; tc /= 4;
2331 int idx_motion = tc % 2; tc /= 2;
2332 int idx_loop_count = tc % 3; tc /= 3;
2333 int idx_direction = tc % 2; tc /= 2;
2334 int idx_delay = tc % 4; tc /= 4;
2336 float duration = _duration - _repeat_delay;
2337 float repeat_delay = _repeat_delay;
2338 float delay = _delay[idx_delay] * _duration;
2339 int direction = _direction[idx_direction];
2340 int loop_count = _loop_count[idx_loop_count];
2341 int motion = _motion[idx_motion];
2342 int easing = _easing[idx_easing];
2344 progress -= delay / _duration;
2346 Property::Value s = start;
2347 Property::Value t = target;
2348 if( direction == 1 )
2353 float x; ///< Animator progress value
2354 if( loop_count == 0 )
2358 else if( loop_count > 0 && progress + 0.01f > loop_count )
2360 x = ( motion == 0 ) ? 1.0f : 0.0f;
2364 if( progress < 0.0f )
2368 progress = fmodf( progress, 1.0f );
2369 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2374 x = progress * 2.0f;
2381 if( easing == 1 ) // EASE_IN
2385 else if( easing == 2 ) // EASE_OUT
2389 else if( easing == 3 ) // EASE_IN_OUT
2391 x = x * x * (3.0f - 2.0f * x);
2394 if( value_type == 0 ) // result type is Float
2398 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2399 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2400 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2402 else if( value_type == 1 ) // result type is Vector2
2406 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2407 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2408 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2410 else if( value_type == 2 ) // result type is Vector3
2414 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2415 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2416 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2418 else // result type is Vector4
2422 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2423 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2424 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2429 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2431 for( int step_iter = 0; step_iter < 3; step_iter++ )
2433 application.SendNotification();
2434 application.Render( _duration * 250.f ); // step i/4
2435 application.SendNotification();
2438 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2439 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2440 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2441 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2442 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2443 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2444 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2446 application.SendNotification();
2447 application.Render(_duration * 250.f); // step 4/4 will not test
2448 application.SendNotification();
2452 application.SendNotification();
2454 application.SendNotification();
2455 application.Render(10.f); // tempral time
2456 application.SendNotification();
2463 int UtcDaliVisualWireframeVisual(void)
2465 ToolkitTestApplication application;
2467 VisualFactory factory = VisualFactory::Get();
2468 Property::Map propertyMap;
2469 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2471 // Create the visual.
2472 Visual::Base visual = factory.CreateVisual( propertyMap );
2474 DALI_TEST_CHECK( visual );
2476 Property::Map resultMap;
2477 visual.CreatePropertyMap( resultMap );
2479 // Check the property values from the returned map from visual
2480 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2481 DALI_TEST_CHECK( value );
2482 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2487 int UtcDaliVisualGetTransform(void)
2489 ToolkitTestApplication application;
2490 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2492 VisualFactory factory = VisualFactory::Get();
2493 Property::Map propertyMap;
2494 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2495 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2496 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2498 Dali::Property::Map visualMap;
2499 colorVisual.CreatePropertyMap( visualMap );
2500 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2501 Dali::Property::Map* map = value->GetMap();
2502 DALI_TEST_CHECK( map );
2504 //Test default values
2506 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2507 DALI_TEST_CHECK( typeValue );
2508 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2511 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2512 DALI_TEST_CHECK( typeValue );
2513 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2516 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2517 DALI_TEST_CHECK( typeValue );
2518 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2521 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2522 DALI_TEST_CHECK( typeValue );
2523 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2526 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2527 DALI_TEST_CHECK( typeValue );
2528 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2531 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2532 DALI_TEST_CHECK( typeValue );
2533 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2539 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2541 Property::Map transform;
2542 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2543 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2544 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2545 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2546 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2548 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2550 Dali::Property::Map visualMap;
2551 visual.CreatePropertyMap( visualMap );
2552 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2553 Dali::Property::Map* map = value->GetMap();
2554 DALI_TEST_CHECK( map );
2557 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2558 DALI_TEST_CHECK( typeValue );
2559 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2562 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2563 DALI_TEST_CHECK( typeValue );
2564 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2567 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2568 DALI_TEST_CHECK( typeValue );
2569 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2572 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2573 DALI_TEST_CHECK( typeValue );
2574 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2577 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2578 DALI_TEST_CHECK( typeValue );
2579 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2582 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2583 DALI_TEST_CHECK( typeValue );
2584 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2587 //Put the visual on the stage
2588 DummyControl actor = DummyControl::New(true);
2589 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2590 actor.SetSize(2000, 2000);
2591 actor.SetParentOrigin(ParentOrigin::CENTER);
2592 Stage::GetCurrent().Add(actor);
2594 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2595 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2597 application.SendNotification();
2598 application.Render(0);
2599 Renderer renderer( actor.GetRendererAt(0) );
2601 //Check that the properties have been registered on the Renderer
2602 Property::Index index = renderer.GetPropertyIndex( "offset" );
2603 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2604 Vector2 offset = renderer.GetProperty<Vector2>( index );
2605 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2607 index = renderer.GetPropertyIndex( "size" );
2608 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2609 Vector2 size = renderer.GetProperty<Vector2>( index );
2610 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2612 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2613 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2614 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2615 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2617 index = renderer.GetPropertyIndex( "origin" );
2618 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2619 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2620 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2622 index = renderer.GetPropertyIndex( "anchorPoint" );
2623 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2624 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2625 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2627 //Set a new transform
2629 transform = DefaultTransform();
2630 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2631 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2632 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2633 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2634 application.SendNotification();
2635 application.Render(0);
2637 //Check that the values have changed in the renderer
2638 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2639 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2641 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2642 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2644 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2645 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2647 //Parent origin and anchor point should have the default values
2648 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2649 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2651 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2652 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2655 int UtcDaliVisualSetTransform0(void)
2657 ToolkitTestApplication application;
2658 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2660 VisualFactory factory = VisualFactory::Get();
2661 Property::Map propertyMap;
2662 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2663 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2664 Visual::Base visual = factory.CreateVisual( propertyMap );
2665 TestTransform( application, visual );
2666 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2671 int UtcDaliVisualSetTransform1(void)
2673 ToolkitTestApplication application;
2674 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2676 VisualFactory factory = VisualFactory::Get();
2677 Property::Map propertyMap;
2678 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2679 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2680 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2681 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2682 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2683 Visual::Base visual = factory.CreateVisual( propertyMap );
2684 TestTransform( application, visual );
2685 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2690 int UtcDaliVisualSetTransform2(void)
2692 ToolkitTestApplication application;
2693 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2695 VisualFactory factory = VisualFactory::Get();
2696 Property::Map propertyMap;
2697 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2698 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2700 Property::Array stopOffsets;
2701 stopOffsets.PushBack( 0.0f );
2702 stopOffsets.PushBack( 0.3f );
2703 stopOffsets.PushBack( 0.6f );
2704 stopOffsets.PushBack( 0.8f );
2705 stopOffsets.PushBack( 1.0f );
2706 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2708 Property::Array stopColors;
2709 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2710 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2711 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2712 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2713 stopColors.PushBack( Color::YELLOW );
2714 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2715 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2716 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2717 Visual::Base visual = factory.CreateVisual( propertyMap );
2718 TestTransform( application, visual );
2719 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2724 int UtcDaliVisualSetTransform3(void)
2726 ToolkitTestApplication application;
2727 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2729 VisualFactory factory = VisualFactory::Get();
2730 Property::Map propertyMap;
2731 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2732 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2733 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2734 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2735 Visual::Base visual = factory.CreateVisual( propertyMap );
2736 TestTransform( application, visual );
2737 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2742 int UtcDaliVisualSetTransform4(void)
2744 ToolkitTestApplication application;
2745 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2747 VisualFactory factory = VisualFactory::Get();
2748 Property::Map propertyMap;
2749 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2750 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2752 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2753 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2754 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2755 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2756 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2757 Visual::Base visual = factory.CreateVisual( propertyMap );
2758 TestTransform( application, visual );
2759 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2764 int UtcDaliVisualSetTransform5(void)
2766 ToolkitTestApplication application;
2767 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
2769 VisualFactory factory = VisualFactory::Get();
2770 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
2771 Visual::Base visual = factory.CreateVisual(image);
2772 TestTransform( application, visual );
2773 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2778 int UtcDaliVisualSetTransform6(void)
2780 ToolkitTestApplication application;
2781 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
2783 VisualFactory factory = VisualFactory::Get();
2784 Property::Map propertyMap;
2785 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2786 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
2787 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
2788 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
2789 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
2790 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
2791 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
2792 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2793 Visual::Base visual = factory.CreateVisual(propertyMap);
2794 TestTransform( application, visual );
2795 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
2800 int UtcDaliVisualSetTransform7(void)
2802 ToolkitTestApplication application;
2803 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
2805 VisualFactory factory = VisualFactory::Get();
2806 Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200));
2807 Visual::Base visual = factory.CreateVisual(image);
2808 TestTransform( application, visual );
2809 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2814 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
2816 ToolkitTestApplication application;
2817 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
2819 VisualFactory factory = VisualFactory::Get();
2820 Property::Map propertyMap;
2821 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2822 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2823 Visual::Base visual = factory.CreateVisual( propertyMap );
2825 Property::Map transform;
2826 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
2828 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
2830 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2832 Dali::Property::Map visualMap;
2833 visual.CreatePropertyMap( visualMap );
2834 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2835 Dali::Property::Map* map = value->GetMap();
2836 DALI_TEST_CHECK( map );
2839 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2840 DALI_TEST_CHECK( typeValue );
2841 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2844 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2845 DALI_TEST_CHECK( typeValue );
2846 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2852 int UtcDaliNPatchVisualCustomShader(void)
2854 ToolkitTestApplication application;
2855 tet_infoline( "NPatchVisual with custom shader" );
2857 VisualFactory factory = VisualFactory::Get();
2858 Property::Map properties;
2859 Property::Map shader;
2860 const std::string vertexShader = "Foobar";
2861 const std::string fragmentShader = "Foobar";
2862 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
2863 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
2865 Property::Map transformMap;
2866 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
2867 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
2868 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
2869 transformMap["anchorPoint"] = Align::CENTER;
2870 transformMap["origin"] = Align::CENTER;
2871 properties[Visual::Property::TRANSFORM] = transformMap;
2873 properties[Visual::Property::TYPE] = Visual::IMAGE;
2874 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
2875 properties[Visual::Property::SHADER]=shader;
2876 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
2878 Visual::Base visual = factory.CreateVisual( properties );
2879 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
2881 // trigger creation through setting on stage
2882 DummyControl dummy = DummyControl::New(true);
2883 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
2884 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2885 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
2886 dummy.SetSize(2000, 2000);
2887 dummy.SetParentOrigin(ParentOrigin::CENTER);
2888 Stage::GetCurrent().Add(dummy);
2889 application.SendNotification();
2891 Renderer renderer = dummy.GetRendererAt( 0 );
2892 Shader shader2 = renderer.GetShader();
2893 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
2894 Property::Map* map = value.GetMap();
2895 DALI_TEST_CHECK( map );
2897 Property::Index index = renderer.GetPropertyIndex("size");
2898 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
2900 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
2901 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
2903 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
2904 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
2909 int UtcDaliGradientVisualBlendMode(void)
2911 ToolkitTestApplication application;
2912 VisualFactory factory = VisualFactory::Get();
2914 Visual::Base opaqueGradientVisual = factory.CreateVisual(
2915 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
2916 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
2917 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
2918 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
2919 .Add( Color::GREEN ) ) );
2921 Visual::Base alphaGradientVisual = factory.CreateVisual(
2922 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
2923 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
2924 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
2925 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
2926 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
2928 DummyControl control = DummyControl::New(true);
2929 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
2930 Stage::GetCurrent().Add( control );
2932 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
2933 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
2934 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
2936 application.SendNotification();
2937 application.Render();
2939 // 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
2940 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
2941 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
2942 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2947 int UtcDaliVisualRendererRemovalAndReAddition(void)
2949 ToolkitTestApplication application;
2950 tet_infoline( "UtcDaliVisualRendererRemoval" );
2952 VisualFactory factory = VisualFactory::Get();
2953 Property::Map propertyMap;
2954 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2955 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2956 Visual::Base visual = factory.CreateVisual( propertyMap );
2958 visual.SetDepthIndex( 1 );
2960 DummyControl dummyControl = DummyControl::New(true);
2961 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
2962 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2963 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
2965 dummyControl.SetSize(200.f, 200.f);
2966 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
2968 Stage::GetCurrent().Add( dummyControl );
2970 application.SendNotification();
2971 application.Render();
2973 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
2975 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
2976 Stage::GetCurrent().Remove( dummyControl );
2977 application.SendNotification();
2978 application.Render();
2980 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
2982 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
2984 Stage::GetCurrent().Add( dummyControl );
2986 application.SendNotification();
2987 application.Render();
2989 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
2996 int UtcDaliVisualTextVisualRender(void)
2998 ToolkitTestApplication application;
2999 tet_infoline( "UtcDaliVisualTextVisualRender" );
3001 VisualFactory factory = VisualFactory::Get();
3002 Property::Map propertyMap;
3003 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3004 propertyMap.Insert( "mixColor", Color::WHITE );
3005 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3006 propertyMap.Insert( "enableMarkup", false );
3007 propertyMap.Insert( "text", "Hello world" );
3008 propertyMap.Insert( "fontFamily", "TizenSans" );
3010 Property::Map fontStyleMapSet;
3011 fontStyleMapSet.Insert( "weight", "bold" );
3012 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3014 propertyMap.Insert( "pointSize", 12.f );
3015 propertyMap.Insert( "multiLine", true );
3016 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3017 propertyMap.Insert( "verticalAlignment", "CENTER" );
3018 propertyMap.Insert( "textColor", Color::RED );
3019 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3020 textVisual.SetDepthIndex( 1 );
3022 DummyControl dummyControl = DummyControl::New(true);
3023 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3024 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3025 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3027 dummyControl.SetSize(200.f, 200.f);
3028 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3030 Stage::GetCurrent().Add( dummyControl );
3031 application.SendNotification();
3032 application.Render();
3035 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3036 propertyMap.Clear();
3037 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3038 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3039 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3040 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3042 Property::Map transformMap;
3043 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3044 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3046 textVisual = factory.CreateVisual( propertyMap );
3047 textVisual.SetDepthIndex( 1 );
3049 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3050 dummyControl.SetSize( 720.f, 640.f );
3052 application.SendNotification(); // force process events to ensure text visual
3053 // adds renderer to the dummy control in OnRelayout
3054 application.Render();
3056 Renderer renderer = dummyControl.GetRendererAt(0u);
3057 Property::Index index = renderer.GetPropertyIndex("size");
3059 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3060 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3065 int UtcDaliVisualTextVisualDisableEnable(void)
3067 ToolkitTestApplication application;
3068 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3070 VisualFactory factory = VisualFactory::Get();
3071 Property::Map propertyMap;
3072 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3073 propertyMap.Insert( "mixColor", Color::WHITE );
3074 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3075 propertyMap.Insert( "enableMarkup", false );
3076 propertyMap.Insert( "text", "Hello world" );
3077 propertyMap.Insert( "fontFamily", "TizenSans" );
3079 Property::Map fontStyleMapSet;
3080 fontStyleMapSet.Insert( "weight", "bold" );
3081 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3083 propertyMap.Insert( "pointSize", 12.f );
3084 propertyMap.Insert( "multiLine", true );
3085 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3086 propertyMap.Insert( "verticalAlignment", "CENTER" );
3087 propertyMap.Insert( "textColor", Color::RED );
3088 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3089 textVisual.SetDepthIndex( 1 );
3091 DummyControl dummyControl = DummyControl::New(true);
3092 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3093 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3094 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3096 dummyControl.SetSize(200.f, 200.f);
3097 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3099 Stage::GetCurrent().Add( dummyControl );
3100 application.SendNotification();
3101 application.Render();
3103 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3105 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3107 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3109 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3111 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3116 int UtcDaliVisualPremultipliedAlpha(void)
3118 ToolkitTestApplication application;
3119 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3121 VisualFactory factory = VisualFactory::Get();
3123 // image visual, test default value ( false )
3125 Visual::Base imageVisual = factory.CreateVisual(
3127 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3128 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3130 Dali::Property::Map visualMap;
3131 imageVisual.CreatePropertyMap( visualMap );
3132 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3135 DALI_TEST_CHECK( value );
3136 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION );
3139 // image visual, override premultiplied
3141 Visual::Base imageVisual = factory.CreateVisual(
3143 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3144 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3145 .Add( Visual::Property::PREMULTIPLIED_ALPHA, true ) );
3147 Dali::Property::Map visualMap;
3148 imageVisual.CreatePropertyMap( visualMap );
3149 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3152 DALI_TEST_CHECK( value );
3153 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION);
3156 // svg visual ( premultiplied alpha by default is true )
3158 Visual::Base imageVisual = factory.CreateVisual(
3160 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3161 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3163 Dali::Property::Map visualMap;
3164 imageVisual.CreatePropertyMap( visualMap );
3165 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3168 DALI_TEST_CHECK( value );
3169 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3175 int UtcDaliRegisterVisualOrder(void)
3177 ToolkitTestApplication application;
3178 tet_infoline( "Register Visual Order" );
3180 DummyControl dummyControl = DummyControl::New(true);
3181 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3183 VisualFactory factory = VisualFactory::Get();
3184 Property::Map propertyMap;
3185 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3186 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3188 tet_infoline( "Register visual, should have depth index of 0.0f" );
3189 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3190 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3191 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3193 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3195 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3196 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3197 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3199 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3200 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3201 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3203 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3204 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3205 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3207 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3208 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3209 labelVisual.SetDepthIndex( -2000 );
3210 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3211 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3213 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3214 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3215 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3216 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3217 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3218 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3220 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3221 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3222 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3223 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3224 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3226 dummyControl.SetSize(200.f, 200.f);
3227 Stage::GetCurrent().Add( dummyControl );
3232 int UtcDaliRegisterVisualOrder02(void)
3234 ToolkitTestApplication application;
3235 tet_infoline( "Register Visual Order with Background Set" );
3237 DummyControl dummyControl = DummyControl::New(true);
3238 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3240 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3242 VisualFactory factory = VisualFactory::Get();
3243 Property::Map propertyMap;
3244 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3245 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3247 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3249 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3251 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3252 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3253 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3254 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3255 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3257 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3258 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3259 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3260 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3262 dummyControl.SetSize(200.f, 200.f);
3263 Stage::GetCurrent().Add( dummyControl );
3268 int UtcDaliRegisterVisualWithDepthIndex(void)
3270 ToolkitTestApplication application;
3271 tet_infoline( "Register a Visual With Depth Index" );
3273 DummyControl dummyControl = DummyControl::New(true);
3274 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3276 VisualFactory factory = VisualFactory::Get();
3277 Property::Map propertyMap;
3278 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3279 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3281 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3282 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3283 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3284 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3285 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3287 tet_infoline( "Register another visual with a depth index and it disabled" );
3288 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3289 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3290 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3291 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3293 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3294 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3295 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3296 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3297 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3299 dummyControl.SetSize(200.f, 200.f);
3300 Stage::GetCurrent().Add( dummyControl );