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/image-visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
30 #include <dali-toolkit/dali-toolkit.h>
32 #include "dummy-control.h"
35 using namespace Dali::Toolkit;
39 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
40 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
41 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
42 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
43 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
44 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
45 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
48 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
50 Property::Map DefaultTransform()
52 Property::Map transformMap;
54 .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
55 .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
56 .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
57 .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN )
58 .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
59 .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
63 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
65 if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
67 for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
69 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
71 Property::Value* valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
72 if( NULL != valueSet )
74 if( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() )
76 tet_printf( " Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
82 tet_printf( " The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
91 void PrepareResourceImage( ToolkitTestApplication& application, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
93 TestPlatformAbstraction& platform = application.GetPlatform();
94 platform.SetClosestImageSize(Vector2( imageWidth, imageHeight));
96 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
97 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
98 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
99 unsigned int initialColor = 0xFF;
100 memset( pixbuffer, initialColor, imageHeight*imageWidth*bytesPerPixel);
102 Integration::ResourcePointer resourcePtr(bitmap);
103 platform.SetSynchronouslyLoadedResource( resourcePtr );
107 void dali_visual_startup(void)
109 test_return_value = TET_UNDEF;
112 void dali_visual_cleanup(void)
114 test_return_value = TET_PASS;
118 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
121 visual.CreatePropertyMap(map);
122 Property::Value* value = map.Find( mixColorIndex );
123 DALI_TEST_CHECK( value );
125 DALI_TEST_CHECK( value->Get( mixColor1 ) );
126 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
128 value = map.Find( Visual::Property::MIX_COLOR );
129 DALI_TEST_CHECK( value );
131 DALI_TEST_CHECK( value->Get( mixColor2 ) );
132 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
134 value = map.Find( Visual::Property::OPACITY );
135 DALI_TEST_CHECK( value );
137 DALI_TEST_CHECK( value->Get( opacity ) );
138 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
142 int UtcDaliVisualCopyAndAssignment(void)
144 ToolkitTestApplication application;
145 tet_infoline( "UtcDaliVisualCopyAndAssignment" );
147 VisualFactory factory = VisualFactory::Get();
148 Property::Map propertyMap;
149 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
150 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
151 Visual::Base visual = factory.CreateVisual( propertyMap );
153 Visual::Base visualCopy( visual );
154 DALI_TEST_CHECK(visual == visualCopy);
156 Visual::Base emptyVisual;
157 Visual::Base emptyVisualCopy( emptyVisual );
158 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
160 Visual::Base visualEquals;
161 visualEquals = visual;
162 DALI_TEST_CHECK(visual == visualEquals);
164 Visual::Base emptyVisualEquals;
165 emptyVisualEquals = emptyVisual;
166 DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
170 DALI_TEST_CHECK( visual = visualCopy );
175 int UtcDaliVisualSetName01(void)
177 ToolkitTestApplication application;
178 tet_infoline( "UtcDaliVisualSetName" );
180 VisualFactory factory = VisualFactory::Get();
181 Property::Map propertyMap;
182 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
183 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
184 Visual::Base visual = factory.CreateVisual( propertyMap );
186 const char* visualName = "backgroundVisual";
187 visual.SetName( visualName );
189 DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
194 int UtcDaliVisualSetGetDepthIndex(void)
196 ToolkitTestApplication application;
197 tet_infoline( "UtcDaliVisualSetDepthIndex" );
199 VisualFactory factory = VisualFactory::Get();
200 Property::Map propertyMap;
201 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
202 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
203 Visual::Base visual = factory.CreateVisual( propertyMap );
205 visual.SetDepthIndex( 1 );
207 DummyControl dummyControl = DummyControl::New(true);
208 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
209 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
211 dummyControl.SetSize(200.f, 200.f);
212 Stage::GetCurrent().Add( dummyControl );
215 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
216 DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
217 DALI_TEST_EQUALS( visual.GetDepthIndex(), 1, TEST_LOCATION );
219 visual.SetDepthIndex( -1 );
220 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
221 DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
222 DALI_TEST_EQUALS( visual.GetDepthIndex(), -1, TEST_LOCATION );
227 int UtcDaliVisualSize(void)
229 ToolkitTestApplication application;
230 tet_infoline( "UtcDaliVisualGetNaturalSize" );
232 VisualFactory factory = VisualFactory::Get();
233 Vector2 controlSize( 20.f, 30.f );
237 Dali::Property::Map map;
238 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
239 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
241 Visual::Base colorVisual = factory.CreateVisual( map );
242 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize );
244 colorVisual.GetNaturalSize(naturalSize);
245 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
248 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
249 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
250 Visual::Base imageVisual = factory.CreateVisual( image );
251 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
253 imageVisual.GetNaturalSize(naturalSize);
254 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
256 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
259 float borderSize = 5.f;
261 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
262 map[ BorderVisual::Property::COLOR ] = Color::RED;
263 map[ BorderVisual::Property::SIZE ] = borderSize;
264 Visual::Base borderVisual = factory.CreateVisual( map );
265 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize );
266 borderVisual.GetNaturalSize(naturalSize);
267 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
269 // gradient gradientVisual
270 Property::Map propertyMap;
271 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
272 Vector2 start(-1.f, -1.f);
273 Vector2 end(1.f, 1.f);
274 propertyMap.Insert( "mixColor", Color::MAGENTA );
275 propertyMap.Insert( GradientVisual::Property::START_POSITION, start) ;
276 propertyMap.Insert( GradientVisual::Property::END_POSITION, end );
277 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f) );
278 propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
279 Property::Array stopColors;
280 stopColors.PushBack( Color::RED );
281 stopColors.PushBack( Color::GREEN );
282 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
283 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
284 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
285 gradientVisual.GetNaturalSize(naturalSize);
286 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
288 // animated gradient visual
289 Vector2 animated_gradient_visual_size(10.f, 10.f);
291 propertyMap.Insert( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
292 Visual::Base animatedGradientVisual = factory.CreateVisual( propertyMap );
293 animatedGradientVisual.GetNaturalSize(naturalSize);
294 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize );
295 DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
298 Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
299 svgVisual.SetTransformAndSize(DefaultTransform(), controlSize );
300 svgVisual.GetNaturalSize(naturalSize);
302 // <svg width="100" height="100">
303 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
305 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
307 // svg visual with a size
308 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
309 svgVisual2.GetNaturalSize(naturalSize);
310 DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
314 // Load some fonts to get the same metrics on different platforms.
315 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
316 fontClient.SetDpi( 96u, 96u );
318 char* pathNamePtr = get_current_dir_name();
319 const std::string pathName( pathNamePtr );
322 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
325 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
326 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
327 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
328 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
330 Visual::Base textVisual = factory.CreateVisual( propertyMap );
331 textVisual.GetNaturalSize( naturalSize );
332 DALI_TEST_EQUALS( naturalSize, Size( 80.f, 20.f ), TEST_LOCATION );
334 const float height = textVisual.GetHeightForWidth( 40.f );
335 DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
337 //AnimatedImageVisual
338 Visual::Base animatedImageVisual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
339 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize );
340 animatedImageVisual.GetNaturalSize(naturalSize);
341 // TEST_GIF_FILE: anim.gif
342 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
343 DALI_TEST_EQUALS( naturalSize, Vector2(50.f, 50.f), TEST_LOCATION );
348 int UtcDaliVisualSetOnOffStage(void)
350 ToolkitTestApplication application;
351 tet_infoline( "UtcDaliVisualSetDepthIndex" );
353 VisualFactory factory = VisualFactory::Get();
354 Property::Map propertyMap;
355 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
356 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
357 Visual::Base visual = factory.CreateVisual( propertyMap );
359 DummyControl actor = DummyControl::New(true);
360 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
361 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
363 actor.SetSize(200.f, 200.f);
365 application.SendNotification();
366 application.Render(0);
367 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
369 Stage::GetCurrent().Add( actor );
371 application.SendNotification();
372 application.Render(0);
373 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
375 Stage::GetCurrent().Remove( actor );
377 application.SendNotification();
378 application.Render(0);
379 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
384 int UtcDaliVisualGetPropertyMap1(void)
386 ToolkitTestApplication application;
387 tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor" );
389 VisualFactory factory = VisualFactory::Get();
390 Property::Map propertyMap;
391 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
392 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
393 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
395 Property::Map resultMap;
396 colorVisual.CreatePropertyMap( resultMap );
398 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
399 DALI_TEST_CHECK( typeValue );
400 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
402 Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
403 DALI_TEST_CHECK( colorValue );
404 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
406 // change the blend color
407 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
408 colorVisual = factory.CreateVisual( propertyMap );
409 colorVisual.CreatePropertyMap( resultMap );
411 colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR, Property::VECTOR4 );
412 DALI_TEST_CHECK( colorValue );
413 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
418 int UtcDaliVisualGetPropertyMap2(void)
420 ToolkitTestApplication application;
421 tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
423 VisualFactory factory = VisualFactory::Get();
424 Property::Map propertyMap;
425 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
426 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f) );
427 propertyMap.Insert("borderColor", Color::BLUE);
428 propertyMap.Insert("borderSize", 5.f);
429 propertyMap.Insert("antiAliasing", true);
430 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
432 Property::Map resultMap;
433 borderVisual.CreatePropertyMap( resultMap );
435 // check the property values from the returned map from visual
436 Property::Value* typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
437 DALI_TEST_CHECK( typeValue );
438 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
440 Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
441 DALI_TEST_CHECK( colorValue );
442 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
444 Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
445 DALI_TEST_CHECK( sizeValue );
446 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
448 Property::Value* AAValue = resultMap.Find( BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN );
449 DALI_TEST_CHECK( AAValue );
450 DALI_TEST_CHECK( AAValue->Get<bool>() == true );
452 Property::Map propertyMap1;
453 propertyMap1[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
454 propertyMap1[ BorderVisual::Property::COLOR ] = Color::CYAN;
455 propertyMap1[ BorderVisual::Property::SIZE ] = 10.0f;
456 borderVisual = factory.CreateVisual( propertyMap1 );
457 borderVisual.CreatePropertyMap( resultMap );
459 typeValue = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
460 DALI_TEST_CHECK( typeValue );
461 DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
463 colorValue = resultMap.Find( BorderVisual::Property::COLOR, Property::VECTOR4 );
464 DALI_TEST_CHECK( colorValue );
465 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
467 colorValue = resultMap.Find( BorderVisual::Property::SIZE, Property::FLOAT );
468 DALI_TEST_CHECK( colorValue );
469 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
475 int UtcDaliVisualGetPropertyMap2N(void)
477 ToolkitTestApplication application;
478 tet_infoline( "UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties" );
480 VisualFactory factory = VisualFactory::Get();
481 Property::Map propertyMap;
482 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
483 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
485 tet_infoline( "Test that the visual is created, with a default renderer" );
486 DALI_TEST_CHECK( borderVisual );
488 DummyControl dummyControl = DummyControl::New(true);
489 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
490 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
491 Stage::GetCurrent().Add( dummyControl );
493 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
499 int UtcDaliVisualGetPropertyMap3(void)
501 ToolkitTestApplication application;
502 tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
504 VisualFactory factory = VisualFactory::Get();
505 DALI_TEST_CHECK( factory );
507 Property::Map propertyMap;
508 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
510 Vector2 start(-1.f, -1.f);
511 Vector2 end(1.f, 1.f);
512 propertyMap.Insert( "startPosition", start);
513 propertyMap.Insert( "endPosition", end);
514 propertyMap.Insert( "spreadMethod", GradientVisual::SpreadMethod::REPEAT);
516 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
518 Property::Array stopColors;
519 stopColors.PushBack( Color::RED );
520 stopColors.PushBack( Color::GREEN );
521 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
523 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
525 Property::Map resultMap;
526 gradientVisual.CreatePropertyMap( resultMap );
528 // check the property values from the returned map from visual
529 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
530 DALI_TEST_CHECK( value );
531 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
533 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
534 DALI_TEST_CHECK( value );
535 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
537 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
538 DALI_TEST_CHECK( value );
539 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
541 value = resultMap.Find( GradientVisual::Property::START_POSITION, Property::VECTOR2 );
542 DALI_TEST_CHECK( value );
543 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
545 value = resultMap.Find( GradientVisual::Property::END_POSITION, Property::VECTOR2 );
546 DALI_TEST_CHECK( value );
547 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
549 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
550 DALI_TEST_CHECK( value );
551 Property::Array* offsetArray = value->GetArray();
552 DALI_TEST_CHECK( offsetArray->Count() == 2 );
553 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
554 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
556 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
557 DALI_TEST_CHECK( value );
558 Property::Array* colorArray = value->GetArray();
559 DALI_TEST_CHECK( colorArray->Count() == 2 );
560 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
561 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
566 int UtcDaliVisualGetPropertyMap4(void)
568 ToolkitTestApplication application;
569 tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
571 VisualFactory factory = VisualFactory::Get();
572 DALI_TEST_CHECK( factory );
574 Property::Map propertyMap;
575 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
577 Vector2 center(100.f, 100.f);
578 float radius = 100.f;
579 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
580 propertyMap.Insert(GradientVisual::Property::CENTER, center);
581 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
582 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
584 Property::Array stopColors;
585 stopColors.PushBack( Color::RED );
586 stopColors.PushBack( Color::BLACK );
587 stopColors.PushBack( Color::GREEN );
588 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
590 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
591 DALI_TEST_CHECK( gradientVisual );
593 Property::Map resultMap;
594 gradientVisual.CreatePropertyMap( resultMap );
596 // check the property values from the returned map from visual
597 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
598 DALI_TEST_CHECK( value );
599 DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
601 value = resultMap.Find( GradientVisual::Property::UNITS, Property::INTEGER );
602 DALI_TEST_CHECK( value );
603 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
605 value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD, Property::INTEGER );
606 DALI_TEST_CHECK( value );
607 DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
609 value = resultMap.Find( GradientVisual::Property::CENTER, Property::VECTOR2 );
610 DALI_TEST_CHECK( value );
611 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
613 value = resultMap.Find( GradientVisual::Property::RADIUS, Property::FLOAT );
614 DALI_TEST_CHECK( value );
615 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
617 value = resultMap.Find( GradientVisual::Property::STOP_OFFSET, Property::ARRAY );
618 DALI_TEST_CHECK( value );
619 Property::Array* offsetArray = value->GetArray();
620 DALI_TEST_CHECK( offsetArray->Count() == 3 );
621 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
622 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
623 // any stop value will be clamped to [0.0, 1.0];
624 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
626 value = resultMap.Find( GradientVisual::Property::STOP_COLOR, Property::ARRAY );
627 DALI_TEST_CHECK( value );
628 Property::Array* colorArray = value->GetArray();
629 DALI_TEST_CHECK( colorArray->Count() == 3 );
630 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
631 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
632 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
637 int UtcDaliVisualGetPropertyMap5(void)
639 ToolkitTestApplication application;
640 tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
642 VisualFactory factory = VisualFactory::Get();
643 Property::Map propertyMap;
644 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
645 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
646 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
647 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
648 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
649 propertyMap.Insert( "fittingMode", FittingMode::FIT_HEIGHT );
650 propertyMap.Insert( "samplingMode", SamplingMode::BOX_THEN_NEAREST );
651 propertyMap.Insert( "pixelArea", Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
652 propertyMap.Insert( "wrapModeU", WrapMode::REPEAT );
653 propertyMap.Insert( "wrapModeV", WrapMode::MIRRORED_REPEAT );
654 propertyMap.Insert( "synchronousLoading", true );
656 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
657 DALI_TEST_CHECK( imageVisual );
659 Property::Map resultMap;
660 imageVisual.CreatePropertyMap( resultMap );
662 // check the property values from the returned map from visual
663 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
664 DALI_TEST_CHECK( value );
665 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
667 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
668 DALI_TEST_CHECK( value );
669 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
671 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
672 DALI_TEST_CHECK( value );
673 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
675 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
676 DALI_TEST_CHECK( value );
677 DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
679 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
680 DALI_TEST_CHECK( value );
681 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
683 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
684 DALI_TEST_CHECK( value );
685 DALI_TEST_CHECK( value->Get<int>() == 20 );
687 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
688 DALI_TEST_CHECK( value );
689 DALI_TEST_CHECK( value->Get<int>() == 30 );
691 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
692 DALI_TEST_CHECK( value );
693 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
695 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
696 DALI_TEST_CHECK( value );
697 DALI_TEST_CHECK( value->Get<int>() == WrapMode::REPEAT);
699 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
700 DALI_TEST_CHECK( value );
701 DALI_TEST_CHECK( value->Get<int>() == WrapMode::MIRRORED_REPEAT);
703 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
704 DALI_TEST_CHECK( value );
705 DALI_TEST_CHECK( value->Get<bool>() == true );
707 // Get an image visual with an image handle, and test the default property values
708 PrepareResourceImage( application, 100u, 200u, Pixel::RGBA8888 );
709 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
710 imageVisual = factory.CreateVisual(image);
711 imageVisual.CreatePropertyMap( resultMap );
713 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
714 DALI_TEST_CHECK( value );
715 DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
717 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
718 DALI_TEST_CHECK( value );
719 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
721 value = resultMap.Find( ImageVisual::Property::FITTING_MODE, Property::INTEGER );
722 DALI_TEST_CHECK( value );
723 DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
725 value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE, Property::INTEGER );
726 DALI_TEST_CHECK( value );
727 DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
729 value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
730 DALI_TEST_CHECK( value );
731 DALI_TEST_CHECK( value->Get<int>() == 100 );
733 value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
734 DALI_TEST_CHECK( value );
735 DALI_TEST_CHECK( value->Get<int>() == 200 );
737 value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
738 DALI_TEST_CHECK( value );
739 DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
741 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
742 DALI_TEST_CHECK( value );
743 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
745 value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
746 DALI_TEST_CHECK( value );
747 DALI_TEST_CHECK( value->Get<int>() == WrapMode::DEFAULT);
749 value = resultMap.Find( "synchronousLoading", Property::BOOLEAN );
750 DALI_TEST_CHECK( value );
751 DALI_TEST_CHECK( value->Get<bool>() == false );
756 int UtcDaliVisualGetPropertyMap6(void)
758 ToolkitTestApplication application;
759 tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
761 Rect< int > border( 1, 1, 1, 1 );
763 VisualFactory factory = VisualFactory::Get();
764 Property::Map propertyMap;
765 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
766 propertyMap.Insert( "mixColor", Color::MAGENTA );
767 propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
768 propertyMap.Insert( ImageVisual::Property::BORDER_ONLY, true );
769 propertyMap.Insert( ImageVisual::Property::BORDER, border );
770 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png" );
771 propertyMap.Insert( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f );
772 Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
774 Property::Map resultMap;
775 nPatchVisual.CreatePropertyMap( resultMap );
777 // check the property values from the returned map from visual
778 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
779 DALI_TEST_CHECK( value );
780 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
782 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
783 DALI_TEST_CHECK( value );
784 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
786 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
787 DALI_TEST_CHECK( value );
788 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
790 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
791 DALI_TEST_CHECK( value );
792 DALI_TEST_CHECK( value->Get<bool>() );
794 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
795 DALI_TEST_CHECK( value );
796 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
798 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING );
799 DALI_TEST_CHECK( value );
800 DALI_TEST_CHECK( value->Get<std::string>() == "application-icon-30.png" );
802 value = resultMap.Find( DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT );
803 DALI_TEST_CHECK( value );
804 DALI_TEST_CHECK( value->Get<float>() == 0.9f );
806 Vector4 border1( 1.0f, 1.0f, 1.0f, 1.0f );
808 Property::Map propertyMap1;
809 propertyMap1.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
810 propertyMap1.Insert( "mixColor", Color::MAGENTA );
811 propertyMap1.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
812 propertyMap1.Insert( ImageVisual::Property::BORDER_ONLY, true );
813 propertyMap1.Insert( ImageVisual::Property::BORDER, border1 );
814 nPatchVisual = factory.CreateVisual( propertyMap1 );
816 nPatchVisual.CreatePropertyMap( resultMap );
818 // check the property values from the returned map from visual
819 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
820 DALI_TEST_CHECK( value );
821 DALI_TEST_CHECK( value->Get<int>() == Visual::N_PATCH );
823 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
824 DALI_TEST_CHECK( value );
825 DALI_TEST_CHECK( value->Get<Vector4>() == Color::MAGENTA );
827 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
828 DALI_TEST_CHECK( value );
829 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
831 value = resultMap.Find( ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN );
832 DALI_TEST_CHECK( value );
833 DALI_TEST_CHECK( value->Get<bool>() );
835 value = resultMap.Find( ImageVisual::Property::BORDER, Property::RECTANGLE );
836 DALI_TEST_CHECK( value );
837 DALI_TEST_CHECK( value->Get< Rect< int > >() == border );
842 int UtcDaliVisualGetPropertyMap7(void)
844 ToolkitTestApplication application;
845 tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
847 // request SvgVisual with a property map
848 VisualFactory factory = VisualFactory::Get();
849 Property::Map propertyMap;
850 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
851 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::WHITE );
852 propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
853 propertyMap.Insert( ImageVisual::Property::ATLASING, false );
854 Visual::Base svgVisual = factory.CreateVisual( propertyMap );
856 Property::Map resultMap;
857 svgVisual.CreatePropertyMap( resultMap );
858 // check the property values from the returned map from a visual
859 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
860 DALI_TEST_CHECK( value );
861 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
863 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
864 DALI_TEST_CHECK( value );
865 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
867 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
868 DALI_TEST_CHECK( value );
869 DALI_TEST_CHECK( value->Get<bool>() == false );
871 // request SvgVisual with a property map 2
873 propertyMap[ "visualType" ] = Visual::SVG;
874 propertyMap[ "mixColor" ] = Color::WHITE;
875 propertyMap[ "url" ] = TEST_SVG_FILE_NAME;
876 propertyMap[ "atlasing" ] = true;
877 Visual::Base svgVisual1 = factory.CreateVisual( propertyMap );
880 svgVisual1.CreatePropertyMap( resultMap );
881 // check the property values from the returned map from a visual
882 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
883 DALI_TEST_CHECK( value );
884 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
886 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
887 DALI_TEST_CHECK( value );
888 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
890 value = resultMap.Find( ImageVisual::Property::ATLASING, Property::BOOLEAN );
891 DALI_TEST_CHECK( value );
892 DALI_TEST_CHECK( value->Get<bool>() == true );
894 // request SvgVisual with an URL
895 Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
897 svgVisual2.CreatePropertyMap( resultMap );
898 // check the property values from the returned map from a visual
899 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
900 DALI_TEST_CHECK( value );
901 DALI_TEST_CHECK( value->Get<int>() == Visual::SVG );
903 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
904 DALI_TEST_CHECK( value );
905 DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
911 int UtcDaliVisualGetPropertyMap8(void)
913 ToolkitTestApplication application;
914 tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
916 //Request MeshVisual using a property map.
917 VisualFactory factory = VisualFactory::Get();
918 Property::Map propertyMap;
919 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
920 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLUE );
921 propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
922 propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
923 propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
924 propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
925 propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
926 Visual::Base meshVisual = factory.CreateVisual( propertyMap );
928 Property::Map resultMap;
929 meshVisual.CreatePropertyMap( resultMap );
930 TestMixColor( meshVisual, Visual::Property::MIX_COLOR, Color::BLUE );
932 //Check values in the result map are identical to the initial map's values.
933 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
934 DALI_TEST_CHECK( value );
935 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
937 value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
938 DALI_TEST_CHECK( value );
939 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
941 value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
942 DALI_TEST_CHECK( value );
943 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
945 value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
946 DALI_TEST_CHECK( value );
947 DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
949 value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
950 DALI_TEST_CHECK( value );
951 DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
953 value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
954 DALI_TEST_CHECK( value );
955 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
960 //Primitive shape visual
961 int UtcDaliVisualGetPropertyMap9(void)
963 ToolkitTestApplication application;
964 tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
966 Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
967 Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
969 //Request PrimitiveVisual using a property map.
970 VisualFactory factory = VisualFactory::Get();
971 Property::Map propertyMap;
972 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
973 propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
974 propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
975 propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
976 propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
977 propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
978 propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
979 propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
980 propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
981 propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
982 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
983 propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
984 propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
985 Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
987 Property::Map resultMap;
988 primitiveVisual.CreatePropertyMap( resultMap );
990 //Check values in the result map are identical to the initial map's values.
991 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
992 DALI_TEST_CHECK( value );
993 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
995 value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
996 DALI_TEST_CHECK( value );
997 DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
999 value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
1000 DALI_TEST_CHECK( value );
1001 DALI_TEST_CHECK( value->Get<Vector4>() == color );
1002 DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1004 value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
1005 DALI_TEST_CHECK( value );
1006 DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
1008 value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
1009 DALI_TEST_CHECK( value );
1010 DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
1012 value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
1013 DALI_TEST_CHECK( value );
1014 DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1016 value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
1017 DALI_TEST_CHECK( value );
1018 DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1020 value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
1021 DALI_TEST_CHECK( value );
1022 DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1024 value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
1025 DALI_TEST_CHECK( value );
1026 DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1028 value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
1029 DALI_TEST_CHECK( value );
1030 DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1032 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
1033 DALI_TEST_CHECK( value );
1034 DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1036 value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
1037 DALI_TEST_CHECK( value );
1038 DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1040 value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
1041 DALI_TEST_CHECK( value );
1042 DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1048 int UtcDaliVisualGetPropertyMap10(void)
1050 ToolkitTestApplication application;
1051 tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1053 //Request PrimitiveVisual using a property map.
1054 VisualFactory factory = VisualFactory::Get();
1056 Property::Map propertyMap;
1057 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
1058 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::BLACK );
1059 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1060 propertyMap.Insert( "enableMarkup", false );
1061 propertyMap.Insert( "text", "Hello world" );
1062 propertyMap.Insert( "fontFamily", "TizenSans" );
1064 Property::Map fontStyleMapSet;
1065 fontStyleMapSet.Insert( "weight", "bold" );
1066 propertyMap.Insert( "fontStyle", fontStyleMapSet );
1068 propertyMap.Insert( "pointSize", 12.f );
1069 propertyMap.Insert( "multiLine", true );
1070 propertyMap.Insert( "horizontalAlignment", "CENTER" );
1071 propertyMap.Insert( "verticalAlignment", "CENTER" );
1072 propertyMap.Insert( "textColor", Color::RED );
1073 Visual::Base textVisual = factory.CreateVisual( propertyMap );
1075 Property::Map resultMap;
1076 textVisual.CreatePropertyMap( resultMap );
1078 //Check values in the result map are identical to the initial map's values.
1079 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1080 DALI_TEST_CHECK( value );
1081 DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1083 value = resultMap.Find( Visual::Property::MIX_COLOR, Property::VECTOR4 );
1084 DALI_TEST_CHECK( value );
1085 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION );
1087 value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1088 DALI_TEST_CHECK( value );
1089 DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1091 value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1092 DALI_TEST_CHECK( value );
1093 DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1095 value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1096 DALI_TEST_CHECK( value );
1098 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1099 DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1100 DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1102 value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1103 DALI_TEST_CHECK( value );
1104 DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1106 value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1107 DALI_TEST_CHECK( value );
1108 DALI_TEST_CHECK( value->Get<bool>() );
1110 value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER );
1111 DALI_TEST_CHECK( value );
1112 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION );
1114 value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER );
1115 DALI_TEST_CHECK( value );
1116 DALI_TEST_EQUALS( value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION );
1118 value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1119 DALI_TEST_CHECK( value );
1120 DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1122 value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1123 DALI_TEST_CHECK( value );
1124 DALI_TEST_CHECK( !value->Get<bool>() );
1129 int UtcDaliVisualGetPropertyMap11(void)
1131 ToolkitTestApplication application;
1132 tet_infoline( "UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual" );
1134 VisualFactory factory = VisualFactory::Get();
1135 DALI_TEST_CHECK( factory );
1137 Property::Map propertyMap;
1138 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1140 Vector2 start(-0.5f, 0.5f);
1141 Vector2 end (0.5f, -0.0f);
1142 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1143 Vector4 end_color (0.7f, 0.5f, 1.0f, 1.0f);
1144 Vector2 rotate_center(0.0f, 0.4f);
1145 float rotate_amount = 1.57f;
1146 float offset = 100.f;
1148 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1149 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1150 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1152 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1153 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1154 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1155 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1156 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1157 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1158 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1160 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1161 DALI_TEST_CHECK( animatedGradientVisual );
1163 Property::Map resultMap;
1164 animatedGradientVisual.CreatePropertyMap( resultMap );
1166 // check the property values from the returned map from visual
1167 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1168 DALI_TEST_CHECK( value );
1169 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1171 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1172 DALI_TEST_CHECK( value );
1173 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1175 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1176 DALI_TEST_CHECK( value );
1177 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1179 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1180 DALI_TEST_CHECK( value );
1181 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP );
1184 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1185 DALI_TEST_CHECK( value );
1186 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1188 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1189 DALI_TEST_CHECK( value );
1190 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1192 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1193 DALI_TEST_CHECK( value );
1194 DALI_TEST_EQUALS( value->Get<Vector4>(), start_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1196 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1197 DALI_TEST_CHECK( value );
1198 DALI_TEST_EQUALS( value->Get<Vector4>(), end_color , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1200 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1201 DALI_TEST_CHECK( value );
1202 DALI_TEST_EQUALS( value->Get<Vector2>(), rotate_center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1204 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1205 DALI_TEST_CHECK( value );
1206 DALI_TEST_EQUALS( value->Get<float>(), rotate_amount , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1208 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1209 DALI_TEST_CHECK( value );
1210 DALI_TEST_EQUALS( value->Get<float>(), offset , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1215 int UtcDaliVisualGetPropertyMap12(void)
1217 ToolkitTestApplication application;
1218 tet_infoline( "UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param" );
1220 // Case 1 : Set values by index
1222 tet_printf( " - Set Values by Index\n" );
1223 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1224 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1225 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1227 tet_printf( "test with delay [%f]\n", _delay );
1228 VisualFactory factory = VisualFactory::Get();
1229 DALI_TEST_CHECK( factory );
1231 Property::Map propertyMap;
1232 Property::Map animationMap;
1233 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1235 float duration = 1.1f;
1236 float delay = _delay;
1237 float repeat_delay = 0.4f;
1239 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1241 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1242 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1244 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1246 animationMap.Clear();
1247 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1248 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1249 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1250 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1251 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1252 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1253 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1254 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1255 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1257 return animationMap;
1260 Vector2 start1(-0.5f, 0.5f);
1261 Vector2 end1 (0.5f, -0.5f);
1262 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1263 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1264 Vector2 rotate_center1(0.0f, 0.4f);
1265 float rotate_amount1 = 0.0f;
1266 float offset1 = 0.f;
1268 Vector2 start2(-0.5f, -0.5f);
1269 Vector2 end2 (0.5f, 0.5f);
1270 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1271 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1272 Vector2 rotate_center2(0.0f, -0.4f);
1273 float rotate_amount2 = 6.2832f;
1274 float offset2 = 2.f;
1276 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1277 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1278 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1280 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1281 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1282 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1283 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1284 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1285 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1286 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1288 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1289 DALI_TEST_CHECK( animatedGradientVisual );
1291 Property::Map resultMap;
1292 animatedGradientVisual.CreatePropertyMap( resultMap );
1294 // check the property values from the returned map from visual
1295 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1296 DALI_TEST_CHECK( value );
1297 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1299 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1300 DALI_TEST_CHECK( value );
1301 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1303 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1304 DALI_TEST_CHECK( value );
1305 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1307 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1308 DALI_TEST_CHECK( value );
1309 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT );
1311 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
1313 tet_printf("Check value at %d\n", line_num);
1314 value = resultMap.Find( index, Property::MAP );
1315 DALI_TEST_CHECK( value );
1316 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1317 Property::Map *temp_map = value->GetMap();
1318 DALI_TEST_CHECK( temp_map );
1320 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1322 Property::Value *res = temp_map->Find( index );
1323 DALI_TEST_CHECK( res );
1327 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1328 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1329 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1330 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1331 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1332 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1333 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1334 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1335 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1338 // check the animation map data is good
1339 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1340 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1341 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1342 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1343 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1344 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1345 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1349 // Case 2 : Set values by string
1351 tet_printf( " - Set Values by String\n" );
1352 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1353 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1354 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1356 tet_printf( "test with delay [%f]\n", _delay );
1357 VisualFactory factory = VisualFactory::Get();
1358 DALI_TEST_CHECK( factory );
1360 Property::Map propertyMap;
1361 Property::Map animationMap;
1362 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1364 float duration = 1.1f;
1365 float delay = _delay;
1366 float repeat_delay = 0.4f;
1368 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1370 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1371 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1373 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value &start, const Property::Value &target)->Property::Map&
1375 animationMap.Clear();
1376 animationMap.Insert("startValue" , start);
1377 animationMap.Insert("targetValue" , target);
1378 animationMap.Insert("directionType", "BACKWARD");
1379 animationMap.Insert("duration" , duration);
1380 animationMap.Insert("delay" , delay);
1381 animationMap.Insert("repeat" , loop_count);
1382 animationMap.Insert("repeatDelay" , repeat_delay);
1383 animationMap.Insert("motionType" , "MIRROR");
1384 animationMap.Insert("easingType" , "IN_OUT");
1386 return animationMap;
1389 Vector2 start1(-0.5f, 0.5f);
1390 Vector2 end1 (0.5f, -0.5f);
1391 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1392 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1393 Vector2 rotate_center1(0.0f, 0.4f);
1394 float rotate_amount1 = 0.0f;
1395 float offset1 = 0.f;
1397 Vector2 start2(-0.5f, -0.5f);
1398 Vector2 end2 (0.5f, 0.5f);
1399 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1400 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1401 Vector2 rotate_center2(0.0f, -0.4f);
1402 float rotate_amount2 = 6.2832f;
1403 float offset2 = 2.f;
1405 // For test mix the type string/index key and string/index value works well.
1406 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1407 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1408 propertyMap.Insert("spreadType" , DevelAnimatedGradientVisual::SpreadType::REFLECT);
1410 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ));
1411 propertyMap.Insert("endPosition" , buildAnimatedMap(end1 , end2 ));
1412 propertyMap.Insert("startColor" , buildAnimatedMap(start_color1 , start_color2 ));
1413 propertyMap.Insert("endColor" , buildAnimatedMap(end_color1 , end_color2 ));
1414 propertyMap.Insert("rotateCenter" , buildAnimatedMap(rotate_center1, rotate_center2));
1415 propertyMap.Insert("rotateAmount" , buildAnimatedMap(rotate_amount1, rotate_amount2));
1416 propertyMap.Insert("offset" , buildAnimatedMap(offset1 , offset2 ));
1418 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1419 DALI_TEST_CHECK( animatedGradientVisual );
1421 Property::Map resultMap;
1422 animatedGradientVisual.CreatePropertyMap( resultMap );
1424 // check the property values from the returned map from visual
1425 // Note : resultMap from CreatePropertyMap only contain indexKey
1426 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1427 DALI_TEST_CHECK( value );
1428 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1430 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1431 DALI_TEST_CHECK( value );
1432 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL );
1434 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1435 DALI_TEST_CHECK( value );
1436 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE );
1438 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1439 DALI_TEST_CHECK( value );
1440 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1442 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
1444 tet_printf("Check value at %d\n", line_num);
1445 value = resultMap.Find( index, Property::MAP );
1446 DALI_TEST_CHECK( value );
1447 DALI_TEST_CHECK( value->GetType() == Property::MAP );
1448 Property::Map *temp_map = value->GetMap();
1449 DALI_TEST_CHECK( temp_map );
1451 auto checkMapValue = [&temp_map](const Property::Index index)->Property::Value
1453 Property::Value *res = temp_map->Find( index );
1454 DALI_TEST_CHECK( res );
1458 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START) , start, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1459 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET) , target, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1460 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION) , Property::Value( direction ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1461 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION) , Property::Value( duration ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1462 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY) , Property::Value( delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1463 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT) , Property::Value( loop_count ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1464 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value( repeat_delay ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1465 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE) , Property::Value( motion ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1466 DALI_TEST_EQUALS( checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE) , Property::Value( easing ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
1469 // check the animation map data is good
1470 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1 , start2 , __LINE__);
1471 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION , end1 , end2 , __LINE__);
1472 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR , start_color1 , start_color2 , __LINE__);
1473 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR , end_color1 , end_color2 , __LINE__);
1474 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER , rotate_center1, rotate_center2, __LINE__);
1475 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT , rotate_amount1, rotate_amount2, __LINE__);
1476 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET , offset1 , offset2 , __LINE__);
1482 int UtcDaliVisualGetPropertyMap13(void)
1484 ToolkitTestApplication application;
1485 tet_infoline( "UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0" );
1487 for(int _direction = 0; _direction <= 1; ++_direction)
1489 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1491 tet_printf( ((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n") , _delay );
1492 VisualFactory factory = VisualFactory::Get();
1493 DALI_TEST_CHECK( factory );
1495 Property::Map propertyMap;
1496 Property::Map animationMap;
1497 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1499 float duration = 1.0f;
1500 float delay = _delay;
1501 float repeat_delay = 0.5f;
1503 int direction = _direction;
1504 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1505 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1506 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1508 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value &start, const Property::Value &target)->Property::Map&
1510 animationMap.Clear();
1511 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1512 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1513 if(direction == 0)animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1514 else animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1515 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1516 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1517 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1518 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1519 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1520 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1521 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1523 return animationMap;
1526 Vector2 start1(-0.5f, 0.5f);
1527 Vector2 end1 (0.5f, -0.5f);
1528 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1529 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
1530 Vector2 rotate_center1(1.0f, 0.4f);
1531 float rotate_amount1 = 2.0f;
1532 float offset1 = 1.f;
1534 Vector2 start2(-0.5f, -0.5f);
1535 Vector2 end2 (0.5f, 0.5f);
1536 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1537 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
1538 Vector2 rotate_center2(1.0f, -0.4f);
1539 float rotate_amount2 = 1.0f;
1540 float offset2 = 3.f;
1542 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1543 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1544 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1546 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ));
1547 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ));
1548 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ));
1549 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ));
1550 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1551 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1552 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ));
1554 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1555 DALI_TEST_CHECK( animatedGradientVisual );
1557 Property::Map resultMap;
1558 animatedGradientVisual.CreatePropertyMap( resultMap );
1560 // check the property values from the returned map from visual
1561 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
1562 DALI_TEST_CHECK( value );
1563 DALI_TEST_CHECK( value->Get<int>() == DevelVisual::ANIMATED_GRADIENT );
1565 value = resultMap.Find( DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER );
1566 DALI_TEST_CHECK( value );
1567 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR );
1569 value = resultMap.Find( DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER );
1570 DALI_TEST_CHECK( value );
1571 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX );
1573 value = resultMap.Find( DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER );
1574 DALI_TEST_CHECK( value );
1575 DALI_TEST_CHECK( value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT );
1577 // If loop_count = 0, Animation doesn't created.
1578 // Optimized resultMap only have one value, which is target value
1579 // Note: target value will be changed by direction option.
1580 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2 );
1581 DALI_TEST_CHECK( value );
1582 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? start1 : start2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1584 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2 );
1585 DALI_TEST_CHECK( value );
1586 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? end1 : end2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1588 value = resultMap.Find( DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4 );
1589 DALI_TEST_CHECK( value );
1590 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? start_color1 : start_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1592 value = resultMap.Find( DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4 );
1593 DALI_TEST_CHECK( value );
1594 DALI_TEST_EQUALS( value->Get<Vector4>(), direction ? end_color1 : end_color2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1596 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2 );
1597 DALI_TEST_CHECK( value );
1598 DALI_TEST_EQUALS( value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1600 value = resultMap.Find( DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT );
1601 DALI_TEST_CHECK( value );
1602 DALI_TEST_EQUALS( value->Get<float>(), direction ? rotate_amount1 : rotate_amount2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1604 value = resultMap.Find( DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT );
1605 DALI_TEST_CHECK( value );
1606 DALI_TEST_EQUALS( value->Get<float>(), direction ? offset1 : offset2 , Math::MACHINE_EPSILON_100, TEST_LOCATION );
1613 int UtcDaliVisualAnimateBorderVisual01(void)
1615 ToolkitTestApplication application;
1616 tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1618 VisualFactory factory = VisualFactory::Get();
1619 Property::Map propertyMap;
1620 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1621 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1622 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1623 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1624 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1627 map["target"] = "testVisual";
1628 map["property"] = "mixColor";
1629 map["targetValue"] = Vector4(1,1,1,0);
1630 map["animator"] = Property::Map()
1631 .Add("alphaFunction", "LINEAR")
1632 .Add("timePeriod", Property::Map()
1634 .Add("duration", 4.0f));
1636 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1638 DummyControl actor = DummyControl::New(true);
1639 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1640 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1641 actor.SetSize(2000, 2000);
1642 actor.SetParentOrigin(ParentOrigin::CENTER);
1643 Stage::GetCurrent().Add(actor);
1645 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1647 Renderer renderer = actor.GetRendererAt(0);
1648 Property::Index borderColorIndex = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::COLOR );
1649 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
1651 Animation animation = dummyImpl.CreateTransition( transition );
1653 // Animate the mix color through the transition, and the border color through
1654 // programmatic method.
1655 animation.AnimateTo( Property(renderer, borderColorIndex), Color::WHITE );
1658 application.SendNotification();
1659 application.Render(0);
1660 application.Render(2000u); // halfway point between blue and white
1662 Vector4 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1663 Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1664 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1665 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1667 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1668 testColor = Vector4( 1,1,1,0.4f );
1669 DALI_TEST_EQUALS( Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION );
1670 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1671 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a ) , true, TEST_LOCATION );
1673 application.Render(2000u);
1675 color = renderer.GetCurrentProperty< Vector4 >( borderColorIndex );
1676 DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1677 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1679 color = renderer.GetCurrentProperty< Vector4 >( mixColorIndex );
1680 testColor = Vector4(1,1,1,0);
1681 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1682 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor) ), true, TEST_LOCATION );
1683 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a ), true, TEST_LOCATION );
1689 int UtcDaliVisualAnimateBorderVisual02(void)
1691 ToolkitTestApplication application;
1692 tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1694 VisualFactory factory = VisualFactory::Get();
1695 Property::Map propertyMap;
1696 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1697 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1698 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1699 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1701 DummyControl actor = DummyControl::New(true);
1702 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1703 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1704 actor.SetSize(2000, 2000);
1705 actor.SetParentOrigin(ParentOrigin::CENTER);
1706 Stage::GetCurrent().Add(actor);
1708 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1710 Renderer renderer = actor.GetRendererAt(0);
1711 Property::Index index = DevelHandle::GetPropertyIndex( renderer, BorderVisual::Property::SIZE );
1713 Animation animation = Animation::New(4.0f);
1714 animation.AnimateTo( Property(renderer, index), 9.0f );
1717 application.SendNotification();
1718 application.Render(0);
1719 application.Render(2000u); // halfway point
1721 float size = renderer.GetCurrentProperty< float >( index );
1722 DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1723 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1725 application.Render(2000u); // halfway point between blue and white
1727 size = renderer.GetCurrentProperty< float >( index );
1728 DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1729 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1734 int UtcDaliVisualAnimateColorVisual(void)
1736 ToolkitTestApplication application;
1737 tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1739 VisualFactory factory = VisualFactory::Get();
1740 Property::Map propertyMap;
1741 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
1742 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1743 Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1745 DummyControl actor = DummyControl::New(true);
1746 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1747 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, borderVisual );
1748 actor.SetSize(2000, 2000);
1749 actor.SetParentOrigin(ParentOrigin::CENTER);
1750 Stage::GetCurrent().Add(actor);
1752 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1754 Renderer renderer = actor.GetRendererAt(0);
1755 Property::Index mixColorIndex = DevelHandle::GetPropertyIndex( renderer, ColorVisual::Property::MIX_COLOR );
1757 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1758 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1760 Animation animation = Animation::New(4.0f);
1761 animation.AnimateTo( Property(renderer, mixColorIndex), Vector3(Color::WHITE) );
1764 application.SendNotification();
1765 application.Render(0);
1766 application.Render(2000u); // halfway point
1768 Vector3 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1769 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE)*0.5f;
1770 DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1772 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor ), true, TEST_LOCATION );
1774 application.Render(2000u); // halfway point between blue and white
1776 color = renderer.GetCurrentProperty< Vector3 >( mixColorIndex );
1777 DALI_TEST_EQUALS( color, Vector3(Color::WHITE), TEST_LOCATION );
1779 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE) ), true, TEST_LOCATION );
1781 blendModeValue = renderer.GetCurrentProperty( Renderer::Property::BLEND_MODE );
1782 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1787 int UtcDaliVisualAnimatePrimitiveVisual(void)
1789 ToolkitTestApplication application;
1790 tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1793 VisualFactory factory = VisualFactory::Get();
1794 Property::Map propertyMap;
1795 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
1796 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1797 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
1798 Visual::Base visual = factory.CreateVisual( propertyMap );
1800 DummyControl actor = DummyControl::New(true);
1801 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1802 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1803 actor.SetSize(2000, 2000);
1804 actor.SetParentOrigin(ParentOrigin::CENTER);
1805 actor.SetColor(Color::BLACK);
1806 Stage::GetCurrent().Add(actor);
1808 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1810 Renderer renderer = actor.GetRendererAt(0);
1811 Property::Index index = DevelHandle::GetPropertyIndex( renderer, PrimitiveVisual::Property::MIX_COLOR );
1813 tet_infoline("Test that the renderer has the Primitive mix color");
1814 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
1816 const Vector4 INITIAL_MIX_COLOR( 1.0f,0.0f,1.0f,0.5f ); // Magenta with half alpha
1817 const Vector4 TARGET_MIX_COLOR( Color::RED );
1820 map["target"] = "testVisual";
1821 map["property"] = "mixColor";
1822 map["initialValue"] = INITIAL_MIX_COLOR;
1823 map["targetValue"] = TARGET_MIX_COLOR;
1824 map["animator"] = Property::Map()
1825 .Add("alphaFunction", "LINEAR")
1826 .Add("timePeriod", Property::Map()
1828 .Add("duration", 4.0f));
1830 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
1832 Animation animation = dummyImpl.CreateTransition( transition );
1833 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1834 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
1836 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1839 application.SendNotification();
1840 application.Render(0);
1841 application.Render(2000u); // halfway point
1842 application.SendNotification();
1844 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
1846 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR)*0.5;
1847 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor) ), true, TEST_LOCATION );
1848 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", halfwayColor.a ), true, TEST_LOCATION );
1850 application.Render(2001u); // go past end
1851 application.SendNotification(); // Trigger signals
1853 DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
1854 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
1855 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR) ), true, TEST_LOCATION );
1856 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", TARGET_MIX_COLOR.a ), true, TEST_LOCATION );
1858 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
1859 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
1867 int UtcDaliVisualAnimatedGradientVisual01(void)
1869 ToolkitTestApplication application;
1870 tet_infoline( "UtcDaliAnimatedGradientVisual with default" );
1873 VisualFactory factory = VisualFactory::Get();
1874 Property::Map propertyMap;
1875 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1876 Visual::Base visual = factory.CreateVisual( propertyMap );
1878 DummyControl actor = DummyControl::New(true);
1879 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1880 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1881 actor.SetSize(2000, 2000);
1882 actor.SetParentOrigin(ParentOrigin::CENTER);
1883 actor.SetColor(Color::BLACK);
1884 Stage::GetCurrent().Add(actor);
1886 application.SendNotification();
1887 application.Render(0);
1888 application.SendNotification();
1890 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1892 for(int step_iter = 0; step_iter < 3; step_iter++)
1894 application.SendNotification();
1895 application.Render(0);
1896 application.Render(750u); // step i/4
1897 application.SendNotification();
1899 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "start_point" , Vector2( -0.5f, 0.0f ) ), true, TEST_LOCATION );
1900 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "end_point" , Vector2( 0.5f, 0.0f ) ), true, TEST_LOCATION );
1901 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "start_color" , Vector4( 143.0f, 170.0f, 220.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
1902 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>( "end_color" , Vector4( 255.0f, 163.0f, 163.0f, 255.0f ) / 255.0f ), true, TEST_LOCATION );
1903 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector2>( "rotate_center", Vector2( 0.0f, 0.0f ) ), true, TEST_LOCATION );
1904 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "rotate_angle" , 0.0f ), true, TEST_LOCATION );
1905 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>( "gradient_offset", 0.5f * step_iter + 0.5f ), true, TEST_LOCATION );
1908 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
1909 application.Render(750u); // go to end
1910 application.SendNotification();
1912 application.Render(10u); // finish
1913 application.SendNotification();
1916 application.SendNotification();
1917 application.Render(0u);
1918 application.SendNotification();
1924 int UtcDaliVisualAnimatedGradientVisual02(void)
1926 ToolkitTestApplication application;
1927 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option" );
1930 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
1931 int _direction[2] = {0, 1};
1932 int _loop_count[3] = {-1, 0, 1};
1933 int _motion[2] = {0, 1};
1934 int _easing[4] = {0, 1, 2, 3};
1936 int test_case_max = 4 * 2 * 3 * 2 * 4;
1938 int test_case_d = 7; // 7 is the number of animated properties.
1940 float _duration = 0.4f;
1941 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
1942 float noise_maker = 0.0f;
1943 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
1944 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
1946 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
1948 VisualFactory factory = VisualFactory::Get();
1949 Property::Map propertyMap;
1950 Property::Map animationMap;
1951 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1953 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
1954 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
1955 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
1957 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&
1959 int tc = (test_case + tc_offset);
1960 int idx_easing = tc % 4; tc /= 4;
1961 int idx_motion = tc % 2; tc /= 2;
1962 int idx_loop_count = tc % 3; tc /= 3;
1963 int idx_direction = tc % 2; tc /= 2;
1964 int idx_delay = tc % 4; tc /= 4;
1966 float duration = _duration - _repeat_delay;
1967 float repeat_delay = _repeat_delay;
1968 float delay = _delay[idx_delay] * _duration;
1969 int direction = _direction[idx_direction];
1970 int loop_count = _loop_count[idx_loop_count];
1971 int motion = _motion[idx_motion];
1972 int easing = _easing[idx_easing];
1974 animationMap.Clear();
1975 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
1976 animationMap.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
1977 if( direction == 0 )
1979 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1983 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1985 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1986 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1987 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1988 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1991 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
1995 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
1999 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2001 else if( easing == 1 )
2003 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2005 else if( easing == 2 )
2007 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2011 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2014 return animationMap;
2017 // Give different values for debuging
2018 noise_maker += 1.0f;
2019 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2020 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2021 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2022 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2023 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2024 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2025 float offset1 = 0.f + noise_maker * 0.1f;
2027 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2028 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2029 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2030 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2031 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2032 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2033 float offset2 = 2.f + noise_maker * 0.1f;
2035 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2036 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2037 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2039 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1 , start2 ,0));
2040 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1 , end2 ,1));
2041 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1 , start_color2 ,2));
2042 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1 , end_color2 ,3));
2043 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2,4));
2044 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2045 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1 , offset2 ,6));
2047 Visual::Base visual = factory.CreateVisual( propertyMap );
2049 DummyControl actor = DummyControl::New( true );
2050 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2051 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2052 actor.SetSize( 2000, 2000 );
2053 actor.SetParentOrigin(ParentOrigin::CENTER);
2054 actor.SetColor(Color::BLACK);
2055 Stage::GetCurrent().Add(actor);
2057 application.SendNotification();
2058 application.Render( 0 );
2059 application.SendNotification();
2061 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2063 application.SendNotification();
2065 //Compare between CPU calculated value and Shader Visual calculated value
2066 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
2068 int tc = (test_case + tc_offset);
2069 int idx_easing = tc % 4; tc /= 4;
2070 int idx_motion = tc % 2; tc /= 2;
2071 int idx_loop_count = tc % 3; tc /= 3;
2072 int idx_direction = tc % 2; tc /= 2;
2073 int idx_delay = tc % 4; tc /= 4;
2075 float duration = _duration - _repeat_delay;
2076 float repeat_delay = _repeat_delay;
2077 float delay = _delay[idx_delay] * _duration;
2078 int direction = _direction[idx_direction];
2079 int loop_count = _loop_count[idx_loop_count];
2080 int motion = _motion[idx_motion];
2081 int easing = _easing[idx_easing];
2083 progress -= delay / _duration;
2085 Property::Value s = start;
2086 Property::Value t = target;
2087 if( direction == 1 )
2092 float x; ///< Animator progress value
2093 if( loop_count == 0 )
2097 else if( loop_count > 0 && progress + 0.01f > loop_count )
2099 x = ( motion == 0 ) ? 1.0f : 0.0f;
2103 if( progress < 0.0f )
2107 progress = fmodf( progress, 1.0f );
2108 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2113 x = progress * 2.0f;
2120 if( easing == 1 ) // EASE_IN
2124 else if( easing == 2 ) // EASE_OUT
2128 else if( easing == 3 ) // EASE_IN_OUT
2130 x = x * x * (3.0f - 2.0f * x);
2133 if( value_type == 0 ) // result type is Float
2137 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2138 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2139 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2141 else if( value_type == 1 ) // result type is Vector2
2145 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2146 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2147 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2149 else if( value_type == 2 ) // result type is Vector3
2153 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2154 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2155 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2157 else // result type is Vector4
2161 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2162 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2163 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2168 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2170 for( int step_iter = 0; step_iter < 3; step_iter++ )
2172 application.SendNotification();
2173 application.Render( _duration * 250.f ); // step i/4
2174 application.SendNotification();
2177 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2178 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2179 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2180 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2181 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2182 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2183 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2185 application.SendNotification();
2186 application.Render(_duration * 250.f); // step 4/4 will not test
2187 application.SendNotification();
2191 application.SendNotification();
2193 application.SendNotification();
2194 application.Render(10.f); // tempral time
2195 application.SendNotification();
2202 int UtcDaliVisualAnimatedGradientVisual03(void)
2204 ToolkitTestApplication application;
2205 tet_infoline( "UtcDaliAnimatedGradientVisual with full-option use string key" );
2208 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
2209 int _direction[2] = {0, 1};
2210 int _loop_count[3] = {-1, 0, 1};
2211 int _motion[2] = {0, 1};
2212 int _easing[4] = {0, 1, 2, 3};
2214 int test_case_max = 4 * 2 * 3 * 2 * 4;
2216 int test_case_d = 7; // 7 is the number of animated properties.
2218 float _duration = 0.4f;
2219 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2220 float noise_maker = 0.2f;
2221 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2222 for( test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d )
2224 tet_printf( "test [%d ~ %d / %d]\n" , test_case, test_case + test_case_d - 1, test_case_max);
2226 VisualFactory factory = VisualFactory::Get();
2227 Property::Map propertyMap;
2228 Property::Map animationMap;
2229 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2231 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&
2233 int tc = (test_case + tc_offset);
2234 int idx_easing = tc % 4; tc /= 4;
2235 int idx_motion = tc % 2; tc /= 2;
2236 int idx_loop_count = tc % 3; tc /= 3;
2237 int idx_direction = tc % 2; tc /= 2;
2238 int idx_delay = tc % 4; tc /= 4;
2240 float duration = _duration - _repeat_delay;
2241 float repeat_delay = _repeat_delay;
2242 float delay = _delay[idx_delay] * _duration;
2243 int direction = _direction[idx_direction];
2244 int loop_count = _loop_count[idx_loop_count];
2245 int motion = _motion[idx_motion];
2246 int easing = _easing[idx_easing];
2248 animationMap.Clear();
2249 animationMap.Insert( "startValue", start );
2250 animationMap.Insert( "targetValue", target );
2251 if( direction == 0 )
2253 animationMap.Insert("directionType", "FORWARD");
2257 animationMap.Insert("directionType", "BACKWARD");
2259 animationMap.Insert("duration", duration);
2260 animationMap.Insert("delay", delay);
2261 animationMap.Insert("repeat", loop_count);
2262 animationMap.Insert("repeatDelay", repeat_delay);
2265 animationMap.Insert("motionType", "LOOP");
2269 animationMap.Insert("motionType", "MIRROR");
2273 animationMap.Insert("easingType", "LINEAR");
2275 else if( easing == 1 )
2277 animationMap.Insert("easingType", "IN");
2279 else if( easing == 2 )
2281 animationMap.Insert("easingType", "OUT");
2285 animationMap.Insert("easingType", "IN_OUT");
2288 return animationMap;
2291 // Give different values for debuging
2292 noise_maker += 0.8f;
2293 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2294 Vector2 end1 (0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2295 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2296 Vector4 end_color1 (0.7f, 0.5f, 1.0f, 1.0f);
2297 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2298 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2299 float offset1 = 0.f + noise_maker * 0.1f;
2301 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2302 Vector2 end2 (0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2303 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2304 Vector4 end_color2 (0.3f, 1.0f, 0.1f, 0.0f);
2305 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2306 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2307 float offset2 = 2.f + noise_maker * 0.1f;
2309 propertyMap.Insert("gradientType", "LINEAR");
2310 propertyMap.Insert("unitType", "USER_SPACE");
2311 propertyMap.Insert("spreadType", "CLAMP");
2313 propertyMap.Insert("startPosition", buildAnimatedMap(start1 , start2 ,0));
2314 propertyMap.Insert("endPosition", buildAnimatedMap(end1 , end2 ,1));
2315 propertyMap.Insert("startColor", buildAnimatedMap(start_color1 , start_color2 ,2));
2316 propertyMap.Insert("endColor", buildAnimatedMap(end_color1 , end_color2 ,3));
2317 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2,4));
2318 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2,5));
2319 propertyMap.Insert("offset", buildAnimatedMap(offset1 , offset2 ,6));
2321 Visual::Base visual = factory.CreateVisual( propertyMap );
2323 DummyControl actor = DummyControl::New( true );
2324 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( actor.GetImplementation() );
2325 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2326 actor.SetSize( 2000, 2000 );
2327 actor.SetParentOrigin(ParentOrigin::CENTER);
2328 actor.SetColor(Color::BLACK);
2329 Stage::GetCurrent().Add(actor);
2331 application.SendNotification();
2332 application.Render( 0 );
2333 application.SendNotification();
2335 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
2337 application.SendNotification();
2339 //Compare between CPU calculated value and Shader Visual calculated value
2340 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
2342 int tc = (test_case + tc_offset);
2343 int idx_easing = tc % 4; tc /= 4;
2344 int idx_motion = tc % 2; tc /= 2;
2345 int idx_loop_count = tc % 3; tc /= 3;
2346 int idx_direction = tc % 2; tc /= 2;
2347 int idx_delay = tc % 4; tc /= 4;
2349 float duration = _duration - _repeat_delay;
2350 float repeat_delay = _repeat_delay;
2351 float delay = _delay[idx_delay] * _duration;
2352 int direction = _direction[idx_direction];
2353 int loop_count = _loop_count[idx_loop_count];
2354 int motion = _motion[idx_motion];
2355 int easing = _easing[idx_easing];
2357 progress -= delay / _duration;
2359 Property::Value s = start;
2360 Property::Value t = target;
2361 if( direction == 1 )
2366 float x; ///< Animator progress value
2367 if( loop_count == 0 )
2371 else if( loop_count > 0 && progress + 0.01f > loop_count )
2373 x = ( motion == 0 ) ? 1.0f : 0.0f;
2377 if( progress < 0.0f )
2381 progress = fmodf( progress, 1.0f );
2382 progress = Dali::Clamp( (progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f );
2387 x = progress * 2.0f;
2394 if( easing == 1 ) // EASE_IN
2398 else if( easing == 2 ) // EASE_OUT
2402 else if( easing == 3 ) // EASE_IN_OUT
2404 x = x * x * (3.0f - 2.0f * x);
2407 if( value_type == 0 ) // result type is Float
2411 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2412 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION );
2413 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2415 else if( value_type == 1 ) // result type is Vector2
2419 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2420 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION );
2421 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2423 else if( value_type == 2 ) // result type is Vector3
2427 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2428 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION );
2429 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2431 else // result type is Vector4
2435 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2436 DALI_TEST_EQUALS( application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION );
2437 DALI_TEST_EQUALS( res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2442 for( int iter = 0; iter < 2; iter++ ) // test 2*duration seconds
2444 for( int step_iter = 0; step_iter < 3; step_iter++ )
2446 application.SendNotification();
2447 application.Render( _duration * 250.f ); // step i/4
2448 application.SendNotification();
2451 testProperty( "start_point" , Property::Value( start1 ) , Property::Value( start2 ) , 0, 1, step );
2452 testProperty( "end_point" , Property::Value( end1 ) , Property::Value( end2 ) , 1, 1, step );
2453 testProperty( "start_color" , Property::Value( start_color1 ) , Property::Value( start_color2 ) , 2, 3, step );
2454 testProperty( "end_color" , Property::Value( end_color1 ) , Property::Value( end_color2 ) , 3, 3, step );
2455 testProperty( "rotate_center" , Property::Value( rotate_center1 ), Property::Value( rotate_center2 ), 4, 1, step );
2456 testProperty( "rotate_angle" , Property::Value( rotate_amount1 ), Property::Value( rotate_amount2 ), 5, 0, step );
2457 testProperty( "gradient_offset", Property::Value( offset1 ) , Property::Value( offset2 ) , 6, 0, step );
2459 application.SendNotification();
2460 application.Render(_duration * 250.f); // step 4/4 will not test
2461 application.SendNotification();
2465 application.SendNotification();
2467 application.SendNotification();
2468 application.Render(10.f); // tempral time
2469 application.SendNotification();
2476 int UtcDaliVisualWireframeVisual(void)
2478 ToolkitTestApplication application;
2480 VisualFactory factory = VisualFactory::Get();
2481 Property::Map propertyMap;
2482 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::WIREFRAME );
2484 // Create the visual.
2485 Visual::Base visual = factory.CreateVisual( propertyMap );
2487 DALI_TEST_CHECK( visual );
2489 Property::Map resultMap;
2490 visual.CreatePropertyMap( resultMap );
2492 // Check the property values from the returned map from visual
2493 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
2494 DALI_TEST_CHECK( value );
2495 DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
2500 int UtcDaliVisualGetTransform(void)
2502 ToolkitTestApplication application;
2503 tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
2505 VisualFactory factory = VisualFactory::Get();
2506 Property::Map propertyMap;
2507 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2508 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2509 Visual::Base colorVisual = factory.CreateVisual( propertyMap );
2511 Dali::Property::Map visualMap;
2512 colorVisual.CreatePropertyMap( visualMap );
2513 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2514 Dali::Property::Map* map = value->GetMap();
2515 DALI_TEST_CHECK( map );
2517 //Test default values
2519 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2520 DALI_TEST_CHECK( typeValue );
2521 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
2524 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2525 DALI_TEST_CHECK( typeValue );
2526 DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
2529 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2530 DALI_TEST_CHECK( typeValue );
2531 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2534 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2535 DALI_TEST_CHECK( typeValue );
2536 DALI_TEST_CHECK( typeValue->Get< Vector2 >() == Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
2539 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2540 DALI_TEST_CHECK( typeValue );
2541 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2544 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2545 DALI_TEST_CHECK( typeValue );
2546 DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
2552 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
2554 Property::Map transform;
2555 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
2556 transform.Insert( Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
2557 transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2558 transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" );
2559 transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
2561 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2563 Dali::Property::Map visualMap;
2564 visual.CreatePropertyMap( visualMap );
2565 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2566 Dali::Property::Map* map = value->GetMap();
2567 DALI_TEST_CHECK( map );
2570 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET );
2571 DALI_TEST_CHECK( typeValue );
2572 DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
2575 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE );
2576 DALI_TEST_CHECK( typeValue );
2577 DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
2580 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2581 DALI_TEST_CHECK( typeValue );
2582 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2585 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2586 DALI_TEST_CHECK( typeValue );
2587 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2590 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ORIGIN );
2591 DALI_TEST_CHECK( typeValue );
2592 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION );
2595 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::ANCHOR_POINT );
2596 DALI_TEST_CHECK( typeValue );
2597 DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
2600 //Put the visual on the stage
2601 DummyControl actor = DummyControl::New(true);
2602 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2603 actor.SetSize(2000, 2000);
2604 actor.SetParentOrigin(ParentOrigin::CENTER);
2605 Stage::GetCurrent().Add(actor);
2607 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2608 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transform );
2610 application.SendNotification();
2611 application.Render(0);
2612 Renderer renderer( actor.GetRendererAt(0) );
2614 //Check that the properties have been registered on the Renderer
2615 Property::Index index = renderer.GetPropertyIndex( "offset" );
2616 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2617 Vector2 offset = renderer.GetProperty<Vector2>( index );
2618 DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
2620 index = renderer.GetPropertyIndex( "size" );
2621 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2622 Vector2 size = renderer.GetProperty<Vector2>( index );
2623 DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
2625 index = renderer.GetPropertyIndex( "offsetSizeMode" );
2626 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2627 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( index );
2628 DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
2630 index = renderer.GetPropertyIndex( "origin" );
2631 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2632 Vector2 parentOrigin = renderer.GetProperty<Vector2>( index );
2633 DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
2635 index = renderer.GetPropertyIndex( "anchorPoint" );
2636 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
2637 Vector2 anchorPoint = renderer.GetProperty<Vector2>( index );
2638 DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2640 //Set a new transform
2642 transform = DefaultTransform();
2643 transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
2644 transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
2645 transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
2646 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2647 application.SendNotification();
2648 application.Render(0);
2650 //Check that the values have changed in the renderer
2651 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
2652 DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
2654 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
2655 DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
2657 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
2658 DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
2660 //Parent origin and anchor point should have the default values
2661 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
2662 DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
2664 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
2665 DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
2668 int UtcDaliVisualSetTransform0(void)
2670 ToolkitTestApplication application;
2671 tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
2673 VisualFactory factory = VisualFactory::Get();
2674 Property::Map propertyMap;
2675 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2676 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2677 Visual::Base visual = factory.CreateVisual( propertyMap );
2678 TestTransform( application, visual );
2679 TestMixColor( visual, ColorVisual::Property::MIX_COLOR, Color::BLUE );
2684 int UtcDaliVisualSetTransform1(void)
2686 ToolkitTestApplication application;
2687 tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
2689 VisualFactory factory = VisualFactory::Get();
2690 Property::Map propertyMap;
2691 propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
2692 propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Color::WHITE;
2693 propertyMap[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::SPHERE;
2694 propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
2695 propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
2696 Visual::Base visual = factory.CreateVisual( propertyMap );
2697 TestTransform( application, visual );
2698 TestMixColor( visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE );
2703 int UtcDaliVisualSetTransform2(void)
2705 ToolkitTestApplication application;
2706 tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
2708 VisualFactory factory = VisualFactory::Get();
2709 Property::Map propertyMap;
2710 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::GRADIENT );
2711 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::GREEN );
2713 Property::Array stopOffsets;
2714 stopOffsets.PushBack( 0.0f );
2715 stopOffsets.PushBack( 0.3f );
2716 stopOffsets.PushBack( 0.6f );
2717 stopOffsets.PushBack( 0.8f );
2718 stopOffsets.PushBack( 1.0f );
2719 propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
2721 Property::Array stopColors;
2722 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
2723 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
2724 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
2725 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
2726 stopColors.PushBack( Color::YELLOW );
2727 propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
2728 propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
2729 propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
2730 Visual::Base visual = factory.CreateVisual( propertyMap );
2731 TestTransform( application, visual );
2732 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::GREEN );
2737 int UtcDaliVisualSetTransform3(void)
2739 ToolkitTestApplication application;
2740 tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
2742 VisualFactory factory = VisualFactory::Get();
2743 Property::Map propertyMap;
2744 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::BORDER );
2745 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::MAGENTA );
2746 propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
2747 propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
2748 Visual::Base visual = factory.CreateVisual( propertyMap );
2749 TestTransform( application, visual );
2750 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::MAGENTA );
2755 int UtcDaliVisualSetTransform4(void)
2757 ToolkitTestApplication application;
2758 tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
2760 VisualFactory factory = VisualFactory::Get();
2761 Property::Map propertyMap;
2762 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
2763 propertyMap.Insert( Visual::Property::MIX_COLOR, Color::CYAN );
2765 propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
2766 propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
2767 propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
2768 propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
2769 propertyMap.Insert( "lightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
2770 Visual::Base visual = factory.CreateVisual( propertyMap );
2771 TestTransform( application, visual );
2772 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::CYAN );
2777 int UtcDaliVisualSetTransform5(void)
2779 ToolkitTestApplication application;
2780 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
2782 VisualFactory factory = VisualFactory::Get();
2783 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
2784 Visual::Base visual = factory.CreateVisual(image);
2785 TestTransform( application, visual );
2786 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2791 int UtcDaliVisualSetTransform6(void)
2793 ToolkitTestApplication application;
2794 tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
2796 VisualFactory factory = VisualFactory::Get();
2797 Property::Map propertyMap;
2798 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
2799 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
2800 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
2801 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
2802 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
2803 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
2804 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
2805 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
2806 Visual::Base visual = factory.CreateVisual(propertyMap);
2807 TestTransform( application, visual );
2808 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::YELLOW );
2813 int UtcDaliVisualSetTransform7(void)
2815 ToolkitTestApplication application;
2816 tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
2818 VisualFactory factory = VisualFactory::Get();
2819 Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200));
2820 Visual::Base visual = factory.CreateVisual(image);
2821 TestTransform( application, visual );
2822 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::WHITE );
2827 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
2829 ToolkitTestApplication application;
2830 tet_infoline( "UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings" );
2832 VisualFactory factory = VisualFactory::Get();
2833 Property::Map propertyMap;
2834 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2835 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2836 Visual::Base visual = factory.CreateVisual( propertyMap );
2838 Property::Map transform;
2839 transform[ "offsetPolicy" ] = Property::Array().Add( "ABSOLUTE" )
2841 transform[ "sizePolicy" ] = Property::Array().Add( "RELATIVE" )
2843 visual.SetTransformAndSize( transform, Vector2(100, 100) );
2845 Dali::Property::Map visualMap;
2846 visual.CreatePropertyMap( visualMap );
2847 Property::Value* value = visualMap.Find( Dali::Toolkit::Visual::Property::TRANSFORM );
2848 Dali::Property::Map* map = value->GetMap();
2849 DALI_TEST_CHECK( map );
2852 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::OFFSET_POLICY );
2853 DALI_TEST_CHECK( typeValue );
2854 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE ), TEST_LOCATION );
2857 Property::Value* typeValue = map->Find( Toolkit::Visual::Transform::Property::SIZE_POLICY );
2858 DALI_TEST_CHECK( typeValue );
2859 DALI_TEST_EQUALS( typeValue->Get< Vector2 >(), Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE ), TEST_LOCATION );
2865 int UtcDaliNPatchVisualCustomShader(void)
2867 ToolkitTestApplication application;
2868 tet_infoline( "NPatchVisual with custom shader" );
2870 VisualFactory factory = VisualFactory::Get();
2871 Property::Map properties;
2872 Property::Map shader;
2873 const std::string vertexShader = "Foobar";
2874 const std::string fragmentShader = "Foobar";
2875 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
2876 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
2878 Property::Map transformMap;
2879 transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
2880 transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
2881 transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
2882 transformMap["anchorPoint"] = Align::CENTER;
2883 transformMap["origin"] = Align::CENTER;
2884 properties[Visual::Property::TRANSFORM] = transformMap;
2886 properties[Visual::Property::TYPE] = Visual::IMAGE;
2887 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
2888 properties[Visual::Property::SHADER]=shader;
2889 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
2891 Visual::Base visual = factory.CreateVisual( properties );
2892 TestMixColor( visual, Visual::Property::MIX_COLOR, Color::BLUE );
2894 // trigger creation through setting on stage
2895 DummyControl dummy = DummyControl::New(true);
2896 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
2897 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2898 dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
2899 dummy.SetSize(2000, 2000);
2900 dummy.SetParentOrigin(ParentOrigin::CENTER);
2901 Stage::GetCurrent().Add(dummy);
2902 application.SendNotification();
2904 Renderer renderer = dummy.GetRendererAt( 0 );
2905 Shader shader2 = renderer.GetShader();
2906 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
2907 Property::Map* map = value.GetMap();
2908 DALI_TEST_CHECK( map );
2910 Property::Index index = renderer.GetPropertyIndex("size");
2911 DALI_TEST_EQUALS( renderer.GetProperty( index ), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION );
2913 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
2914 DALI_TEST_EQUALS( fragmentShader, fragment->Get<std::string>(), TEST_LOCATION );
2916 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
2917 DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
2922 int UtcDaliGradientVisualBlendMode(void)
2924 ToolkitTestApplication application;
2925 VisualFactory factory = VisualFactory::Get();
2927 Visual::Base opaqueGradientVisual = factory.CreateVisual(
2928 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
2929 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
2930 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
2931 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
2932 .Add( Color::GREEN ) ) );
2934 Visual::Base alphaGradientVisual = factory.CreateVisual(
2935 Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::GRADIENT )
2936 .Add( GradientVisual::Property::START_POSITION, Vector2( -0.5f, -0.5f ) )
2937 .Add( GradientVisual::Property::END_POSITION, Vector2( 0.5f, 0.5f ) )
2938 .Add( GradientVisual::Property::STOP_COLOR, Property::Array().Add( Color::RED )
2939 .Add( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ) ) );
2941 DummyControl control = DummyControl::New(true);
2942 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
2943 Stage::GetCurrent().Add( control );
2945 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>( control.GetImplementation() );
2946 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, opaqueGradientVisual );
2947 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, alphaGradientVisual );
2949 application.SendNotification();
2950 application.Render();
2952 // 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
2953 DALI_TEST_EQUALS( 2u, control.GetRendererCount(), TEST_LOCATION );
2954 DALI_TEST_EQUALS( control.GetRendererAt( 0 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION );
2955 DALI_TEST_EQUALS( control.GetRendererAt( 1 ).GetProperty( Renderer::Property::BLEND_MODE ).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
2960 int UtcDaliVisualRendererRemovalAndReAddition(void)
2962 ToolkitTestApplication application;
2963 tet_infoline( "UtcDaliVisualRendererRemoval" );
2965 VisualFactory factory = VisualFactory::Get();
2966 Property::Map propertyMap;
2967 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2968 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2969 Visual::Base visual = factory.CreateVisual( propertyMap );
2971 visual.SetDepthIndex( 1 );
2973 DummyControl dummyControl = DummyControl::New(true);
2974 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
2975 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2976 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
2978 dummyControl.SetSize(200.f, 200.f);
2979 tet_infoline( "Add control with visual to stage and check renderer count is 1" );
2981 Stage::GetCurrent().Add( dummyControl );
2983 application.SendNotification();
2984 application.Render();
2986 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
2988 tet_infoline( "Remove control with visual from stage and check renderer count is 0" );
2989 Stage::GetCurrent().Remove( dummyControl );
2990 application.SendNotification();
2991 application.Render();
2993 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
2995 tet_infoline( "Re-add control with visual to stage and check renderer count is still 1" );
2997 Stage::GetCurrent().Add( dummyControl );
2999 application.SendNotification();
3000 application.Render();
3002 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3009 int UtcDaliVisualTextVisualRender(void)
3011 ToolkitTestApplication application;
3012 tet_infoline( "UtcDaliVisualTextVisualRender" );
3014 VisualFactory factory = VisualFactory::Get();
3015 Property::Map propertyMap;
3016 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3017 propertyMap.Insert( "mixColor", Color::WHITE );
3018 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3019 propertyMap.Insert( "enableMarkup", false );
3020 propertyMap.Insert( "text", "Hello world" );
3021 propertyMap.Insert( "fontFamily", "TizenSans" );
3023 Property::Map fontStyleMapSet;
3024 fontStyleMapSet.Insert( "weight", "bold" );
3025 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3027 propertyMap.Insert( "pointSize", 12.f );
3028 propertyMap.Insert( "multiLine", true );
3029 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3030 propertyMap.Insert( "verticalAlignment", "CENTER" );
3031 propertyMap.Insert( "textColor", Color::RED );
3032 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3033 textVisual.SetDepthIndex( 1 );
3035 DummyControl dummyControl = DummyControl::New(true);
3036 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3037 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3038 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3040 dummyControl.SetSize(200.f, 200.f);
3041 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3043 Stage::GetCurrent().Add( dummyControl );
3044 application.SendNotification();
3045 application.Render();
3048 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3049 propertyMap.Clear();
3050 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3051 propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
3052 propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
3053 propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
3055 Property::Map transformMap;
3056 transformMap.Insert( "size", Vector2( 0.5f, 0.5f ) );
3057 propertyMap.Insert( Visual::Property::TRANSFORM, transformMap );
3059 textVisual = factory.CreateVisual( propertyMap );
3060 textVisual.SetDepthIndex( 1 );
3062 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3063 dummyControl.SetSize( 720.f, 640.f );
3065 application.SendNotification(); // force process events to ensure text visual
3066 // adds renderer to the dummy control in OnRelayout
3067 application.Render();
3069 Renderer renderer = dummyControl.GetRendererAt(0u);
3070 Property::Index index = renderer.GetPropertyIndex("size");
3072 tet_infoline( "Test that the TextVisual has NOT overridden what was set by developer" );
3073 DALI_TEST_EQUALS( renderer.GetProperty<Vector2>(index), Vector2( 0.5f, 0.5f ), 0.001f, TEST_LOCATION );
3078 int UtcDaliVisualTextVisualDisableEnable(void)
3080 ToolkitTestApplication application;
3081 tet_infoline( "UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled" );
3083 VisualFactory factory = VisualFactory::Get();
3084 Property::Map propertyMap;
3085 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
3086 propertyMap.Insert( "mixColor", Color::WHITE );
3087 propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
3088 propertyMap.Insert( "enableMarkup", false );
3089 propertyMap.Insert( "text", "Hello world" );
3090 propertyMap.Insert( "fontFamily", "TizenSans" );
3092 Property::Map fontStyleMapSet;
3093 fontStyleMapSet.Insert( "weight", "bold" );
3094 propertyMap.Insert( "fontStyle", fontStyleMapSet );
3096 propertyMap.Insert( "pointSize", 12.f );
3097 propertyMap.Insert( "multiLine", true );
3098 propertyMap.Insert( "horizontalAlignment", "CENTER" );
3099 propertyMap.Insert( "verticalAlignment", "CENTER" );
3100 propertyMap.Insert( "textColor", Color::RED );
3101 Visual::Base textVisual = factory.CreateVisual( propertyMap );
3102 textVisual.SetDepthIndex( 1 );
3104 DummyControl dummyControl = DummyControl::New(true);
3105 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3106 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, textVisual );
3107 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3109 dummyControl.SetSize(200.f, 200.f);
3110 dummyControl.SetParentOrigin( ParentOrigin::CENTER );
3112 Stage::GetCurrent().Add( dummyControl );
3113 application.SendNotification();
3114 application.Render();
3116 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3118 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false );
3120 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 0, TEST_LOCATION );
3122 dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true );
3124 DALI_TEST_EQUALS( dummyControl.GetRendererCount(), 1, TEST_LOCATION );
3129 int UtcDaliVisualPremultipliedAlpha(void)
3131 ToolkitTestApplication application;
3132 tet_infoline( "UtcDaliVisualPremultipliedAlpha" );
3134 VisualFactory factory = VisualFactory::Get();
3136 // image visual, test default value ( false )
3138 Visual::Base imageVisual = factory.CreateVisual(
3140 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3141 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) );
3143 Dali::Property::Map visualMap;
3144 imageVisual.CreatePropertyMap( visualMap );
3145 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3148 DALI_TEST_CHECK( value );
3149 DALI_TEST_EQUALS( value->Get<bool>(), false, TEST_LOCATION );
3152 // image visual, override premultiplied
3154 Visual::Base imageVisual = factory.CreateVisual(
3156 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3157 .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME )
3158 .Add( Visual::Property::PREMULTIPLIED_ALPHA, true ) );
3160 Dali::Property::Map visualMap;
3161 imageVisual.CreatePropertyMap( visualMap );
3162 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3165 DALI_TEST_CHECK( value );
3166 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION);
3169 // svg visual ( premultiplied alpha by default is true )
3171 Visual::Base imageVisual = factory.CreateVisual(
3173 .Add( Toolkit::Visual::Property::TYPE, Visual::IMAGE )
3174 .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) );
3176 Dali::Property::Map visualMap;
3177 imageVisual.CreatePropertyMap( visualMap );
3178 Property::Value* value = visualMap.Find( Visual::Property::PREMULTIPLIED_ALPHA );
3181 DALI_TEST_CHECK( value );
3182 DALI_TEST_EQUALS( value->Get<bool>(), true, TEST_LOCATION );
3188 int UtcDaliRegisterVisualOrder(void)
3190 ToolkitTestApplication application;
3191 tet_infoline( "Register Visual Order" );
3193 DummyControl dummyControl = DummyControl::New(true);
3194 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3196 VisualFactory factory = VisualFactory::Get();
3197 Property::Map propertyMap;
3198 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3199 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3201 tet_infoline( "Register visual, should have depth index of 0.0f" );
3202 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3203 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual );
3204 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 0, TEST_LOCATION );
3206 tet_infoline( "Register more visuals, each added one should have a depth index greater than previous" );
3208 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3209 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3210 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual.GetDepthIndex() );
3212 Visual::Base foregroundVisual = factory.CreateVisual( propertyMap );
3213 dummyImpl.RegisterVisual( DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual );
3214 DALI_TEST_CHECK( foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex() );
3216 Visual::Base focusVisual = factory.CreateVisual( propertyMap );
3217 dummyImpl.RegisterVisual( DummyControl::Property::FOCUS_VISUAL, focusVisual );
3218 DALI_TEST_CHECK( focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex() );
3220 tet_infoline( "Set depth index on a new visual before registering, the depth index should not have been changed" );
3221 Visual::Base labelVisual = factory.CreateVisual( propertyMap );
3222 labelVisual.SetDepthIndex( -2000 );
3223 dummyImpl.RegisterVisual( DummyControl::Property::LABEL_VISUAL, labelVisual );
3224 DALI_TEST_EQUALS( labelVisual.GetDepthIndex(), -2000, TEST_LOCATION );
3226 tet_infoline( "Replace visual, the depth index should be the same as what was previously set" );
3227 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3228 Visual::Base testVisual2Replacement = factory.CreateVisual( propertyMap );
3229 DALI_TEST_CHECK( testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex );
3230 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2Replacement );
3231 DALI_TEST_EQUALS( testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION );
3233 tet_infoline( "Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured" );
3234 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual( propertyMap );
3235 anotherTestVisual2Replacement.SetDepthIndex( 2000 );
3236 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement );
3237 DALI_TEST_EQUALS( anotherTestVisual2Replacement.GetDepthIndex(), 2000, TEST_LOCATION );
3239 dummyControl.SetSize(200.f, 200.f);
3240 Stage::GetCurrent().Add( dummyControl );
3245 int UtcDaliRegisterVisualOrder02(void)
3247 ToolkitTestApplication application;
3248 tet_infoline( "Register Visual Order with Background Set" );
3250 DummyControl dummyControl = DummyControl::New(true);
3251 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3253 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3255 VisualFactory factory = VisualFactory::Get();
3256 Property::Map propertyMap;
3257 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3258 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3260 tet_printf( "Register a control background visual, should have depth index of %d\n", backgroundDepthIndex );
3262 dummyControl.SetProperty( Control::Property::BACKGROUND, propertyMap );
3264 const int TEST_VISUAL_1_DEPTH_INDEX = 0;
3265 tet_printf( "Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX );
3266 Visual::Base testVisual1 = factory.CreateVisual( propertyMap );
3267 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, testVisual1 );
3268 DALI_TEST_EQUALS( testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX , TEST_LOCATION );
3270 tet_printf( "Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX );
3271 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3272 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, testVisual2 );
3273 DALI_TEST_CHECK( testVisual2.GetDepthIndex() > testVisual1.GetDepthIndex() );
3275 dummyControl.SetSize(200.f, 200.f);
3276 Stage::GetCurrent().Add( dummyControl );
3281 int UtcDaliRegisterVisualWithDepthIndex(void)
3283 ToolkitTestApplication application;
3284 tet_infoline( "Register a Visual With Depth Index" );
3286 DummyControl dummyControl = DummyControl::New(true);
3287 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3289 VisualFactory factory = VisualFactory::Get();
3290 Property::Map propertyMap;
3291 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3292 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3294 tet_infoline( "Register a visual with a depth index, it should be enabled by default too" );
3295 Visual::Base testVisual = factory.CreateVisual( propertyMap );
3296 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203 );
3297 DALI_TEST_EQUALS( testVisual.GetDepthIndex(), 203, TEST_LOCATION );
3298 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL ), true, TEST_LOCATION );
3300 tet_infoline( "Register another visual with a depth index and it disabled" );
3301 Visual::Base testVisual2 = factory.CreateVisual( propertyMap );
3302 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450 );
3303 DALI_TEST_EQUALS( testVisual2.GetDepthIndex(), 450, TEST_LOCATION );
3304 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), false, TEST_LOCATION );
3306 tet_infoline( "Register another visual with a depth index and it enabled using the enabled API" );
3307 Visual::Base testVisual3 = factory.CreateVisual( propertyMap );
3308 DevelControl::RegisterVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300 );
3309 DALI_TEST_EQUALS( testVisual3.GetDepthIndex(), 300, TEST_LOCATION );
3310 DALI_TEST_EQUALS( DevelControl::IsVisualEnabled( dummyImpl, DummyControl::Property::TEST_VISUAL2 ), true, TEST_LOCATION );
3312 dummyControl.SetSize(200.f, 200.f);
3313 Stage::GetCurrent().Add( dummyControl );