2 * Copyright (c) 2018 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 <toolkit-timer.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <toolkit-vector-animation-renderer.h>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/devel-api/controls/control-devel.h>
28 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
31 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
32 #include <dali/devel-api/rendering/renderer-devel.h>
33 #include <dali/devel-api/adaptor-framework/window-devel.h>
34 #include "dummy-control.h"
37 using namespace Dali::Toolkit;
39 void dali_animated_vector_image_visual_startup(void)
41 test_return_value = TET_UNDEF;
44 void dali_animated_vector_image_visual_cleanup(void)
46 test_return_value = TET_PASS;
52 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
54 bool gAnimationFinishedSignalFired = false;
56 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
58 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
60 gAnimationFinishedSignalFired = true;
66 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
68 ToolkitTestApplication application;
69 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
71 VisualFactory factory = VisualFactory::Get();
72 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
73 DALI_TEST_CHECK( visual );
75 DummyControl actor = DummyControl::New( true );
76 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
77 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
78 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
79 Stage::GetCurrent().Add( actor );
81 application.SendNotification();
84 // renderer is added to actor
85 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
86 Renderer renderer = actor.GetRendererAt( 0u );
87 DALI_TEST_CHECK( renderer );
89 // Test SetOffStage().
91 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
96 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
98 ToolkitTestApplication application;
99 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
101 Property::Map propertyMap;
102 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
103 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
105 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
106 DALI_TEST_CHECK( visual );
108 DummyControl actor = DummyControl::New( true );
109 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
110 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
111 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
112 Stage::GetCurrent().Add( actor );
114 application.SendNotification();
115 application.Render();
117 // renderer is added to actor
118 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
119 Renderer renderer = actor.GetRendererAt( 0u );
120 DALI_TEST_CHECK( renderer );
123 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
128 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
130 ToolkitTestApplication application;
131 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
133 int startFrame = 1, endFrame = 3;
134 Property::Array playRange;
135 playRange.PushBack( startFrame );
136 playRange.PushBack( endFrame );
138 Property::Map propertyMap;
139 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
140 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
141 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
142 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
144 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
145 DALI_TEST_CHECK( visual );
147 DummyControl actor = DummyControl::New( true );
148 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
149 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
150 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
151 Stage::GetCurrent().Add( actor );
153 application.SendNotification();
154 application.Render();
156 // renderer is added to actor
157 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
158 Renderer renderer = actor.GetRendererAt( 0u );
159 DALI_TEST_CHECK( renderer );
162 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
167 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
169 ToolkitTestApplication application;
170 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
172 int startFrame = 1, endFrame = 3;
173 Property::Array playRange;
174 playRange.PushBack( startFrame );
175 playRange.PushBack( endFrame );
177 Property::Map propertyMap;
178 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
179 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
180 .Add( "loopCount", 3 )
181 .Add( "playRange", playRange )
182 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
183 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
185 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
186 DALI_TEST_CHECK( visual );
188 DummyControl actor = DummyControl::New( true );
189 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
190 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
191 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
192 Stage::GetCurrent().Add( actor );
194 application.SendNotification();
195 application.Render();
197 // renderer is added to actor
198 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
199 Renderer renderer = actor.GetRendererAt( 0u );
200 DALI_TEST_CHECK( renderer );
202 Property::Map resultMap;
203 visual.CreatePropertyMap( resultMap );
205 // check the property values from the returned map from a visual
206 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
207 DALI_TEST_CHECK( value );
208 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
210 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
211 DALI_TEST_CHECK( value );
212 DALI_TEST_CHECK( value->Get< int >() == 3 );
214 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
215 DALI_TEST_CHECK( value );
217 Property::Array* result = value->GetArray();
218 DALI_TEST_CHECK( result );
220 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
221 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
223 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
224 DALI_TEST_CHECK( value );
225 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
227 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
228 DALI_TEST_CHECK( value );
229 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
232 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
237 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
239 ToolkitTestApplication application;
240 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
242 int startFrame = 1, endFrame = 3;
243 Property::Array playRange;
244 playRange.PushBack( startFrame );
245 playRange.PushBack( endFrame );
247 Property::Map propertyMap;
248 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
249 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
250 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
251 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
253 // request AnimatedVectorImageVisual with a property map
254 VisualFactory factory = VisualFactory::Get();
255 Visual::Base visual = factory.CreateVisual( propertyMap );
257 DummyControl actor = DummyControl::New( true );
258 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
259 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
261 Vector2 controlSize( 20.f, 30.f );
262 actor.SetProperty( Actor::Property::SIZE, controlSize );
264 Stage::GetCurrent().Add( actor );
266 application.SendNotification();
267 application.Render();
269 Property::Map resultMap;
270 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
272 // check the property values from the returned map from a visual
273 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
274 DALI_TEST_CHECK( value );
275 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
277 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
278 DALI_TEST_CHECK( value );
279 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
281 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
282 DALI_TEST_CHECK( value );
283 DALI_TEST_CHECK( value->Get< int >() == 3 );
285 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
286 DALI_TEST_CHECK( value );
288 Property::Array* result = value->GetArray();
289 DALI_TEST_CHECK( result );
291 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
292 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
294 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
295 DALI_TEST_CHECK( value );
296 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
298 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
299 DALI_TEST_CHECK( value );
300 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
302 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
303 DALI_TEST_CHECK( value );
305 // request AnimatedVectorImageVisual with an URL
306 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
309 visual2.CreatePropertyMap( resultMap );
311 // check the property values from the returned map from a visual
312 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
313 DALI_TEST_CHECK( value );
314 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
316 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
317 DALI_TEST_CHECK( value );
318 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
323 int UtcDaliAnimatedVectorImageVisualPlayback(void)
325 ToolkitTestApplication application;
327 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
330 // request AnimatedVectorImageVisual with a property map
331 VisualFactory factory = VisualFactory::Get();
332 Visual::Base visual = factory.CreateVisual(
334 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
335 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
337 DummyControl dummyControl = DummyControl::New( true );
338 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
339 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
340 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
342 Property::Map attributes;
343 tet_infoline( "Test Play action" );
344 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
346 Stage::GetCurrent().Add( dummyControl );
347 application.SendNotification();
348 application.Render( 16 );
350 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
351 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
352 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
354 tet_infoline( "Test Pause action" );
355 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
357 application.SendNotification();
358 application.Render(16);
360 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
361 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
362 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
364 tet_infoline( "Test Play action" );
365 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
367 application.SendNotification();
368 application.Render(16);
370 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
371 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
372 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
374 tet_infoline( "Test Stop action" );
375 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
377 application.SendNotification();
378 application.Render(16);
380 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
381 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
382 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
384 tet_infoline( "Test Stop action again" );
385 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
387 application.SendNotification();
388 application.Render(16);
390 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
391 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
392 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
394 tet_infoline( "Test Play action" );
395 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
397 application.SendNotification();
398 application.Render(16);
400 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
401 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
402 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
404 tet_infoline( "Off stage" );
405 dummyControl.Unparent();
407 application.SendNotification();
408 application.Render(16);
410 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
411 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
412 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
414 tet_infoline( "On stage again" );
415 Stage::GetCurrent().Add( dummyControl );
417 application.SendNotification();
418 application.Render(16);
420 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
421 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
422 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
424 tet_infoline( "Test Play action" );
425 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
427 application.SendNotification();
428 application.Render(16);
430 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
431 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
432 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
435 Vector3 newSize( 100.0f, 100.0f, 0.0f );
436 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
438 application.SendNotification();
439 application.Render(16);
441 // Size should be changed
442 Vector3 naturalSize = dummyControl.GetNaturalSize();
443 DALI_TEST_CHECK( naturalSize == newSize );
445 dummyControl.Unparent();
451 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
453 ToolkitTestApplication application;
454 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
456 VisualFactory factory = VisualFactory::Get();
457 Property::Map properties;
458 Property::Map shader;
459 const std::string vertexShader = "Foobar";
460 const std::string fragmentShader = "Foobar sampler2D Foobar";
461 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
462 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
464 properties[Visual::Property::TYPE] = Visual::IMAGE;
465 properties[Visual::Property::SHADER] = shader;
466 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
468 Visual::Base visual = factory.CreateVisual( properties );
470 // trigger creation through setting on stage
471 DummyControl dummy = DummyControl::New( true );
472 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
473 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
475 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
476 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
477 Stage::GetCurrent().Add( dummy );
479 application.SendNotification();
480 application.Render();
482 Renderer renderer = dummy.GetRendererAt( 0 );
483 Shader shader2 = renderer.GetShader();
484 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
485 Property::Map* map = value.GetMap();
486 DALI_TEST_CHECK( map );
488 std::string resultFragmentShader, resultVertexShader;
489 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
490 fragment->Get( resultFragmentShader );
491 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
493 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
494 vertex->Get( resultVertexShader );
495 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
500 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
502 ToolkitTestApplication application;
503 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
505 VisualFactory factory = VisualFactory::Get();
506 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
507 DALI_TEST_CHECK( visual );
509 DummyControl actor = DummyControl::New( true );
510 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
511 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
513 Vector2 controlSize( 20.f, 30.f );
516 Stage::GetCurrent().Add( actor );
518 application.SendNotification();
519 application.Render();
521 visual.GetNaturalSize( naturalSize );
523 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
525 actor.SetProperty( Actor::Property::SIZE, controlSize );
527 application.SendNotification();
528 application.Render();
530 visual.GetNaturalSize( naturalSize );
532 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
537 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
539 ToolkitTestApplication application;
540 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
542 Property::Map propertyMap;
543 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
544 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
545 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
547 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
548 DALI_TEST_CHECK( visual );
550 DummyControl actor = DummyControl::New( true );
551 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
552 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
554 Vector2 controlSize( 20.f, 30.f );
555 actor.SetProperty( Actor::Property::SIZE, controlSize );
557 Stage::GetCurrent().Add( actor );
559 Property::Map attributes;
560 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
562 application.SendNotification();
563 application.Render();
565 // Trigger count is 1 - render a frame
566 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
568 // renderer is added to actor
569 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
570 Renderer renderer = actor.GetRendererAt( 0u );
571 DALI_TEST_CHECK( renderer );
576 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
578 ToolkitTestApplication application;
579 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
581 int startFrame = 1, endFrame = 3;
582 Property::Array array;
583 array.PushBack( endFrame );
584 array.PushBack( startFrame );
586 Property::Map propertyMap;
587 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
588 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
589 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
591 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
592 DALI_TEST_CHECK( visual );
594 DummyControl actor = DummyControl::New( true );
595 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
596 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
598 Vector2 controlSize( 20.f, 30.f );
599 actor.SetProperty( Actor::Property::SIZE, controlSize );
601 Stage::GetCurrent().Add( actor );
603 Property::Map attributes;
604 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
606 application.SendNotification();
607 application.Render();
609 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
611 // renderer is added to actor
612 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
613 Renderer renderer = actor.GetRendererAt( 0u );
614 DALI_TEST_CHECK( renderer );
616 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
617 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
619 int resultStartFrame, resultEndFrame;
620 Property::Array* result = value->GetArray();
621 result->GetElementAt( 0 ).Get( resultStartFrame );
622 result->GetElementAt( 1 ).Get( resultEndFrame );
624 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
625 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
627 // Set invalid play range
630 array.PushBack( 100 );
633 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
634 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
636 application.SendNotification();
637 application.Render();
639 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
641 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
642 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
644 result = value->GetArray();
645 result->GetElementAt( 0 ).Get( resultStartFrame );
646 result->GetElementAt( 1 ).Get( resultEndFrame );
648 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
649 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
651 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
653 application.SendNotification();
654 application.Render();
656 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
658 application.SendNotification();
659 application.Render();
661 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
663 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
664 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
665 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
672 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
673 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
675 application.SendNotification();
676 application.Render();
678 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
679 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
681 result = value->GetArray();
682 result->GetElementAt( 0 ).Get( resultStartFrame );
683 result->GetElementAt( 1 ).Get( resultEndFrame );
685 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
686 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
688 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
689 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
694 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
696 ToolkitTestApplication application;
697 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
699 Property::Array array;
700 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
702 Property::Map propertyMap;
703 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
704 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
705 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
707 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
708 DALI_TEST_CHECK( visual );
710 DummyControl actor = DummyControl::New( true );
711 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
712 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
714 Vector2 controlSize( 20.f, 30.f );
715 actor.SetProperty( Actor::Property::SIZE, controlSize );
717 Stage::GetCurrent().Add( actor );
719 Property::Map attributes;
720 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
722 application.SendNotification();
723 application.Render();
725 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
727 // renderer is added to actor
728 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
729 Renderer renderer = actor.GetRendererAt( 0u );
730 DALI_TEST_CHECK( renderer );
732 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
733 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
735 int resultStartFrame, resultEndFrame;
736 Property::Array* result = value->GetArray();
737 result->GetElementAt( 0 ).Get( resultStartFrame );
738 result->GetElementAt( 1 ).Get( resultEndFrame );
740 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
741 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
745 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
746 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
749 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
750 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
752 application.SendNotification();
753 application.Render();
755 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
757 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
758 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
760 result = value->GetArray();
761 result->GetElementAt( 0 ).Get( resultStartFrame );
762 result->GetElementAt( 1 ).Get( resultEndFrame );
764 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
765 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
767 // Set invalid play range
770 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
773 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
774 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
776 application.SendNotification();
777 application.Render();
779 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
781 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
782 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
784 result = value->GetArray();
785 result->GetElementAt( 0 ).Get( resultStartFrame );
786 result->GetElementAt( 1 ).Get( resultEndFrame );
788 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
789 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
794 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
796 ToolkitTestApplication application;
797 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
799 Property::Map propertyMap;
800 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
801 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
802 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
804 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
805 DALI_TEST_CHECK( visual );
807 DummyControl actor = DummyControl::New( true );
808 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
809 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
811 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
813 Vector2 controlSize( 20.f, 30.f );
814 actor.SetProperty( Actor::Property::SIZE, controlSize );
816 Stage::GetCurrent().Add( actor );
818 Property::Map attributes;
819 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
821 application.SendNotification();
822 application.Render();
824 // Wait for animation finish
825 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
827 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
828 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
829 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
831 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
836 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
838 ToolkitTestApplication application;
839 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
841 Property::Map propertyMap;
842 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
843 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
845 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
846 DALI_TEST_CHECK( visual );
848 tet_printf( "1. Visual is created.\n" );
850 DummyControl actor = DummyControl::New( true );
851 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
852 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
854 Vector2 controlSize( 20.f, 30.f );
855 actor.SetProperty( Actor::Property::SIZE, controlSize );
857 Stage::GetCurrent().Add( actor );
859 application.SendNotification();
860 application.Render();
862 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
864 application.SendNotification();
865 application.Render();
867 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
868 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
869 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
871 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
873 Property::Array array;
877 Property::Map attributes;
878 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
879 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
881 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
883 application.SendNotification();
884 application.Render();
886 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
887 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
888 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
890 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
899 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
900 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
903 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
905 application.SendNotification();
906 application.Render();
908 // Stop and jump to 3
909 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
911 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
913 application.SendNotification();
914 application.Render();
916 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
918 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
919 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
920 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
922 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
924 // Jump to the same position
925 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
927 application.SendNotification();
928 application.Render();
930 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
931 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
932 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
934 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
939 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
941 ToolkitTestApplication application;
942 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
944 int startFrame = 1, endFrame = 3;
945 Property::Array playRange;
946 playRange.PushBack( startFrame );
947 playRange.PushBack( endFrame );
949 Property::Map propertyMap;
950 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
951 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
952 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
953 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
955 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
956 DALI_TEST_CHECK( visual );
958 DummyControl actor = DummyControl::New( true );
959 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
960 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
962 Vector2 controlSize( 20.f, 30.f );
963 actor.SetProperty( Actor::Property::SIZE, controlSize );
965 Stage::GetCurrent().Add( actor );
967 application.SendNotification();
968 application.Render();
970 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
972 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
973 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
974 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
976 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
977 DALI_TEST_CHECK( value );
979 Property::Array* result = value->GetArray();
980 DALI_TEST_CHECK( result );
982 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
983 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
986 playRange.PushBack( 0 );
987 playRange.PushBack( 2 );
989 Property::Map attributes;
990 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
991 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
993 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
995 application.SendNotification();
996 application.Render();
998 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1000 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1001 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1002 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1004 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1005 result = value->GetArray();
1006 DALI_TEST_CHECK( result );
1008 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1009 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1014 playRange.PushBack( startFrame );
1015 playRange.PushBack( endFrame );
1017 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1019 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1021 application.SendNotification();
1022 application.Render();
1024 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1026 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1027 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1029 result = value->GetArray();
1030 DALI_TEST_CHECK( result );
1032 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1033 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1035 // Play and update property
1037 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1039 application.SendNotification();
1040 application.Render();
1042 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1044 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1046 application.SendNotification();
1047 application.Render();
1049 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1050 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1051 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1056 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1058 ToolkitTestApplication application;
1059 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1061 Property::Map propertyMap;
1062 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1063 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1064 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1065 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1067 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1068 DALI_TEST_CHECK( visual );
1070 DummyControl actor = DummyControl::New( true );
1071 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1072 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1074 Vector2 controlSize( 20.f, 30.f );
1075 actor.SetProperty( Actor::Property::SIZE, controlSize );
1077 Stage::GetCurrent().Add( actor );
1079 Property::Map attributes;
1080 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1082 application.SendNotification();
1083 application.Render();
1085 // Trigger count is 1 - animation finished
1086 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1088 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1089 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1090 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1092 // Change stop behavior
1093 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1095 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1100 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1102 application.SendNotification();
1103 application.Render();
1105 // Trigger count is 1 - animation finished
1106 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1108 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1110 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1111 int totalFrameNumber = value1->Get< int >();
1113 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1114 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1116 // Change stop behavior
1117 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1118 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1120 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1125 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1127 application.SendNotification();
1128 application.Render();
1131 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1133 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1134 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1135 int currentFrameNumber = value->Get< int >();
1138 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1140 application.SendNotification();
1141 application.Render( 16 );
1143 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1144 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1145 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1150 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1152 ToolkitTestApplication application;
1153 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1155 Property::Map propertyMap;
1156 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1157 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1158 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1159 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1160 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1162 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1163 DALI_TEST_CHECK( visual );
1165 DummyControl actor = DummyControl::New( true );
1166 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1167 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1169 Vector2 controlSize( 20.f, 30.f );
1170 actor.SetProperty( Actor::Property::SIZE, controlSize );
1172 Stage::GetCurrent().Add( actor );
1174 Property::Map attributes;
1175 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1177 application.SendNotification();
1178 application.Render();
1180 // Trigger count is 1 - animation finished
1181 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1183 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1184 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1185 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1187 // Change stop behavior
1188 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1190 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1193 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1195 application.SendNotification();
1196 application.Render();
1198 // Trigger count is 1 - animation finished
1199 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1201 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1202 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1203 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1205 // Change looping mode
1206 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1208 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1211 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1213 application.SendNotification();
1214 application.Render();
1216 // Trigger count is 1 - animation finished
1217 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1219 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1220 int totalFrameNumber = value1->Get< int >();
1222 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1223 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1224 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1229 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1231 ToolkitTestApplication application;
1232 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1234 Property::Map propertyMap;
1235 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1236 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1238 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1239 DALI_TEST_CHECK( visual );
1241 DummyControl actor = DummyControl::New( true );
1242 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1243 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1245 Vector2 controlSize( 20.f, 30.f );
1246 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1247 actor.SetProperty( Actor::Property::SIZE, controlSize );
1248 actor.SetProperty( Actor::Property::SCALE, controlScale );
1250 Stage::GetCurrent().Add( actor );
1252 application.SendNotification();
1253 application.Render();
1255 application.SendNotification();
1256 application.Render();
1258 Renderer renderer = actor.GetRendererAt( 0u );
1259 DALI_TEST_CHECK( renderer );
1261 auto textureSet = renderer.GetTextures();
1262 auto texture = textureSet.GetTexture(0);
1264 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1265 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1267 // Change scale and size
1268 controlSize = Vector2( 50.f, 40.f );
1269 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1270 actor.SetProperty( Actor::Property::SIZE, controlSize );
1271 actor.SetProperty( Actor::Property::SCALE, controlScale );
1273 application.SendNotification();
1274 application.Render();
1276 application.SendNotification();
1277 application.Render();
1279 renderer = actor.GetRendererAt( 0u );
1280 DALI_TEST_CHECK( renderer );
1282 textureSet = renderer.GetTextures();
1283 texture = textureSet.GetTexture(0);
1285 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1286 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1291 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1293 ToolkitTestApplication application;
1294 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1296 Property::Map propertyMap;
1297 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1298 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1300 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1301 DALI_TEST_CHECK( visual1 );
1303 DummyControl actor1 = DummyControl::New( true );
1304 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1305 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1307 Vector2 controlSize( 20.f, 30.f );
1308 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1310 Stage::GetCurrent().Add( actor1 );
1312 propertyMap.Clear();
1313 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1314 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1316 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1317 DALI_TEST_CHECK( visual2 );
1319 DummyControl actor2 = DummyControl::New( true );
1320 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1321 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1323 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1325 Stage::GetCurrent().Add( actor2 );
1327 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1329 application.SendNotification();
1330 application.Render();
1332 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1334 Property::Map attributes;
1335 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1337 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1338 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1340 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1342 // renderer is added to actor
1343 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1344 Renderer renderer1 = actor1.GetRendererAt( 0u );
1345 DALI_TEST_CHECK( renderer1 );
1347 // renderer is added to actor
1348 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1349 Renderer renderer2 = actor2.GetRendererAt( 0u );
1350 DALI_TEST_CHECK( renderer2 );
1355 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1357 ToolkitTestApplication application;
1358 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1360 Property::Map propertyMap;
1361 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1362 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1364 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1365 DALI_TEST_CHECK( visual );
1367 DummyControl actor = DummyControl::New( true );
1368 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1369 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1371 Vector2 controlSize( 20.f, 30.f );
1372 actor.SetProperty( Actor::Property::SIZE, controlSize );
1374 Stage::GetCurrent().Add( actor );
1376 application.SendNotification();
1377 application.Render();
1379 Property::Map attributes;
1380 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1382 application.SendNotification();
1383 application.Render();
1385 // Check rendering behavior
1386 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1387 Renderer renderer = actor.GetRendererAt( 0u );
1388 DALI_TEST_CHECK( renderer );
1389 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1391 actor.SetProperty( Actor::Property::VISIBLE, false );
1393 application.SendNotification();
1394 application.Render();
1396 // Check rendering behavior again
1397 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1402 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1404 ToolkitTestApplication application;
1405 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1407 Property::Map propertyMap;
1408 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1409 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1411 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1412 DALI_TEST_CHECK( visual );
1414 DummyControl actor = DummyControl::New( true );
1415 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1416 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1418 Vector2 controlSize( 20.f, 30.f );
1419 actor.SetProperty( Actor::Property::SIZE, controlSize );
1421 Stage::GetCurrent().Add( actor );
1423 application.SendNotification();
1424 application.Render();
1426 Property::Map attributes;
1427 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1429 application.SendNotification();
1430 application.Render();
1432 // Check rendering behavior
1433 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1434 Renderer renderer = actor.GetRendererAt( 0u );
1435 DALI_TEST_CHECK( renderer );
1436 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1438 Window window = DevelWindow::Get( actor );
1441 application.SendNotification();
1442 application.Render();
1444 // Check rendering behavior again
1445 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );