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 <dali-toolkit/dali-toolkit.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.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-vector-image-visual-actions-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
31 #include <dali/devel-api/rendering/renderer-devel.h>
32 #include "dummy-control.h"
35 using namespace Dali::Toolkit;
37 void dali_animated_vector_image_visual_startup(void)
39 test_return_value = TET_UNDEF;
42 void dali_animated_vector_image_visual_cleanup(void)
44 test_return_value = TET_PASS;
50 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
52 bool gAnimationFinishedSignalFired = false;
54 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
56 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
58 gAnimationFinishedSignalFired = true;
64 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
66 ToolkitTestApplication application;
67 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
69 VisualFactory factory = VisualFactory::Get();
70 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
71 DALI_TEST_CHECK( visual );
73 DummyControl actor = DummyControl::New( true );
74 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
75 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
76 actor.SetSize( 200.0f, 200.0f );
77 Stage::GetCurrent().Add( actor );
79 application.SendNotification();
82 // renderer is added to actor
83 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
84 Renderer renderer = actor.GetRendererAt( 0u );
85 DALI_TEST_CHECK( renderer );
87 // Test SetOffStage().
89 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
94 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
96 ToolkitTestApplication application;
97 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
99 Property::Map propertyMap;
100 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
101 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
103 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
104 DALI_TEST_CHECK( visual );
106 DummyControl actor = DummyControl::New( true );
107 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
108 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
109 actor.SetSize( 200.0f, 200.0f );
110 Stage::GetCurrent().Add( actor );
112 application.SendNotification();
113 application.Render();
115 // renderer is added to actor
116 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
117 Renderer renderer = actor.GetRendererAt( 0u );
118 DALI_TEST_CHECK( renderer );
121 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
126 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
128 ToolkitTestApplication application;
129 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
131 int startFrame = 1, endFrame = 3;
132 Property::Array playRange;
133 playRange.PushBack( startFrame );
134 playRange.PushBack( endFrame );
136 Property::Map propertyMap;
137 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
138 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
139 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
140 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
142 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
143 DALI_TEST_CHECK( visual );
145 DummyControl actor = DummyControl::New( true );
146 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
147 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
148 actor.SetSize( 200.0f, 200.0f );
149 Stage::GetCurrent().Add( actor );
151 application.SendNotification();
152 application.Render();
154 // renderer is added to actor
155 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
156 Renderer renderer = actor.GetRendererAt( 0u );
157 DALI_TEST_CHECK( renderer );
160 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
165 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
167 ToolkitTestApplication application;
168 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
170 int startFrame = 1, endFrame = 3;
171 Property::Array playRange;
172 playRange.PushBack( startFrame );
173 playRange.PushBack( endFrame );
175 Property::Map propertyMap;
176 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
177 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
178 .Add( "loopCount", 3 )
179 .Add( "playRange", playRange )
180 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
181 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
183 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
184 DALI_TEST_CHECK( visual );
186 DummyControl actor = DummyControl::New( true );
187 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
188 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
189 actor.SetSize( 200.0f, 200.0f );
190 Stage::GetCurrent().Add( actor );
192 application.SendNotification();
193 application.Render();
195 // renderer is added to actor
196 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
197 Renderer renderer = actor.GetRendererAt( 0u );
198 DALI_TEST_CHECK( renderer );
200 Property::Map resultMap;
201 visual.CreatePropertyMap( resultMap );
203 // check the property values from the returned map from a visual
204 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
205 DALI_TEST_CHECK( value );
206 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
208 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
209 DALI_TEST_CHECK( value );
210 DALI_TEST_CHECK( value->Get< int >() == 3 );
212 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
213 DALI_TEST_CHECK( value );
215 Property::Array* result = value->GetArray();
216 DALI_TEST_CHECK( result );
218 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
219 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
221 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
222 DALI_TEST_CHECK( value );
223 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
225 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
226 DALI_TEST_CHECK( value );
227 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
230 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
235 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
237 ToolkitTestApplication application;
238 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
240 int startFrame = 1, endFrame = 3;
241 Property::Array playRange;
242 playRange.PushBack( startFrame );
243 playRange.PushBack( endFrame );
245 Property::Map propertyMap;
246 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
247 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
248 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
249 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
251 // request AnimatedVectorImageVisual with a property map
252 VisualFactory factory = VisualFactory::Get();
253 Visual::Base visual = factory.CreateVisual( propertyMap );
255 DummyControl actor = DummyControl::New( true );
256 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
257 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
259 Vector2 controlSize( 20.f, 30.f );
260 actor.SetSize( controlSize );
262 Stage::GetCurrent().Add( actor );
264 application.SendNotification();
265 application.Render();
267 Property::Map resultMap;
268 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
270 // check the property values from the returned map from a visual
271 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
272 DALI_TEST_CHECK( value );
273 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
275 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
276 DALI_TEST_CHECK( value );
277 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
279 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
280 DALI_TEST_CHECK( value );
281 DALI_TEST_CHECK( value->Get< int >() == 3 );
283 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
284 DALI_TEST_CHECK( value );
286 Property::Array* result = value->GetArray();
287 DALI_TEST_CHECK( result );
289 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
290 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
292 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
293 DALI_TEST_CHECK( value );
294 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
296 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
297 DALI_TEST_CHECK( value );
298 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
300 // request AnimatedVectorImageVisual with an URL
301 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
304 visual2.CreatePropertyMap( resultMap );
306 // check the property values from the returned map from a visual
307 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
308 DALI_TEST_CHECK( value );
309 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
311 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
312 DALI_TEST_CHECK( value );
313 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
318 int UtcDaliAnimatedVectorImageVisualPlayback(void)
320 ToolkitTestApplication application;
322 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
325 // request AnimatedVectorImageVisual with a property map
326 VisualFactory factory = VisualFactory::Get();
327 Visual::Base visual = factory.CreateVisual(
329 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
330 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
332 DummyControl dummyControl = DummyControl::New( true );
333 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
334 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
335 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
337 Property::Map attributes;
338 tet_infoline( "Test Play action" );
339 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
341 Stage::GetCurrent().Add( dummyControl );
342 application.SendNotification();
343 application.Render( 16 );
345 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
347 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
348 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
349 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
351 tet_infoline( "Test Pause action" );
352 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
354 application.SendNotification();
355 application.Render(16);
357 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
359 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
360 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
361 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
363 tet_infoline( "Test Play action" );
364 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
366 application.SendNotification();
367 application.Render(16);
369 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
370 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
371 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
373 tet_infoline( "Test Stop action" );
374 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
376 application.SendNotification();
377 application.Render(16);
379 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
380 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
381 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
383 tet_infoline( "Test Stop action again" );
384 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
386 application.SendNotification();
387 application.Render(16);
389 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
390 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
391 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
393 tet_infoline( "Test Play action" );
394 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
396 application.SendNotification();
397 application.Render(16);
399 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
400 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
401 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
403 tet_infoline( "Off stage" );
404 dummyControl.Unparent();
406 application.SendNotification();
407 application.Render(16);
409 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
410 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
411 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
413 tet_infoline( "On stage again" );
414 Stage::GetCurrent().Add( dummyControl );
416 application.SendNotification();
417 application.Render(16);
419 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
420 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
421 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
423 tet_infoline( "Test Play action" );
424 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
426 application.SendNotification();
427 application.Render(16);
429 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
430 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
431 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
434 Vector3 newSize( 100.0f, 100.0f, 0.0f );
435 dummyControl.SetSize( newSize );
437 application.SendNotification();
438 application.Render(16);
440 // Size should be changed
441 Vector3 naturalSize = dummyControl.GetNaturalSize();
442 DALI_TEST_CHECK( naturalSize == newSize );
444 dummyControl.Unparent();
450 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
452 ToolkitTestApplication application;
453 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
455 VisualFactory factory = VisualFactory::Get();
456 Property::Map properties;
457 Property::Map shader;
458 const std::string vertexShader = "Foobar";
459 const std::string fragmentShader = "Foobar sampler2D Foobar";
460 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
461 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
463 properties[Visual::Property::TYPE] = Visual::IMAGE;
464 properties[Visual::Property::SHADER] = shader;
465 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
467 Visual::Base visual = factory.CreateVisual( properties );
469 // trigger creation through setting on stage
470 DummyControl dummy = DummyControl::New( true );
471 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
472 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
474 dummy.SetSize( 200.f, 200.f );
475 dummy.SetParentOrigin( ParentOrigin::CENTER );
476 Stage::GetCurrent().Add( dummy );
478 application.SendNotification();
479 application.Render();
481 Renderer renderer = dummy.GetRendererAt( 0 );
482 Shader shader2 = renderer.GetShader();
483 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
484 Property::Map* map = value.GetMap();
485 DALI_TEST_CHECK( map );
487 std::string resultFragmentShader, resultVertexShader;
488 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
489 fragment->Get( resultFragmentShader );
490 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
492 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
493 vertex->Get( resultVertexShader );
494 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
499 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
501 ToolkitTestApplication application;
502 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
504 VisualFactory factory = VisualFactory::Get();
505 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
506 DALI_TEST_CHECK( visual );
508 DummyControl actor = DummyControl::New( true );
509 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
510 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
512 Vector2 controlSize( 20.f, 30.f );
515 Stage::GetCurrent().Add( actor );
517 application.SendNotification();
518 application.Render();
520 visual.GetNaturalSize( naturalSize );
522 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
524 actor.SetSize( controlSize );
526 application.SendNotification();
527 application.Render();
529 visual.GetNaturalSize( naturalSize );
531 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
536 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
538 ToolkitTestApplication application;
539 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
541 Property::Map propertyMap;
542 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
543 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
544 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
546 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
547 DALI_TEST_CHECK( visual );
549 DummyControl actor = DummyControl::New( true );
550 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
551 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
553 Vector2 controlSize( 20.f, 30.f );
554 actor.SetSize( controlSize );
556 Stage::GetCurrent().Add( actor );
558 Property::Map attributes;
559 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
561 application.SendNotification();
562 application.Render();
564 // Trigger count is 1 - animation finished
565 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
567 // renderer is added to actor
568 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
569 Renderer renderer = actor.GetRendererAt( 0u );
570 DALI_TEST_CHECK( renderer );
575 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
577 ToolkitTestApplication application;
578 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
580 int startFrame = 1, endFrame = 3;
581 Property::Array array;
582 array.PushBack( endFrame );
583 array.PushBack( startFrame );
585 Property::Map propertyMap;
586 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
587 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
588 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
590 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
591 DALI_TEST_CHECK( visual );
593 DummyControl actor = DummyControl::New( true );
594 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
595 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
597 Vector2 controlSize( 20.f, 30.f );
598 actor.SetSize( controlSize );
600 Stage::GetCurrent().Add( actor );
602 Property::Map attributes;
603 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
605 application.SendNotification();
606 application.Render();
608 // renderer is added to actor
609 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
610 Renderer renderer = actor.GetRendererAt( 0u );
611 DALI_TEST_CHECK( renderer );
613 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
614 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
616 int resultStartFrame, resultEndFrame;
617 Property::Array* result = value->GetArray();
618 result->GetElementAt( 0 ).Get( resultStartFrame );
619 result->GetElementAt( 1 ).Get( resultEndFrame );
621 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
622 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
624 // Set invalid play range
627 array.PushBack( 100 );
630 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
631 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
633 application.SendNotification();
634 application.Render();
636 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
637 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
639 result = value->GetArray();
640 result->GetElementAt( 0 ).Get( resultStartFrame );
641 result->GetElementAt( 1 ).Get( resultEndFrame );
643 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
644 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
646 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
648 application.SendNotification();
649 application.Render();
651 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
653 application.SendNotification();
654 application.Render();
656 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
657 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
658 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
665 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
666 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
668 application.SendNotification();
669 application.Render();
671 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
672 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
674 result = value->GetArray();
675 result->GetElementAt( 0 ).Get( resultStartFrame );
676 result->GetElementAt( 1 ).Get( resultEndFrame );
678 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
679 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
681 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
682 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
687 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
689 ToolkitTestApplication application;
690 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
692 Property::Map propertyMap;
693 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
694 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
695 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
697 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
698 DALI_TEST_CHECK( visual );
700 DummyControl actor = DummyControl::New( true );
701 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
702 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
704 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
706 Vector2 controlSize( 20.f, 30.f );
707 actor.SetSize( controlSize );
709 Stage::GetCurrent().Add( actor );
711 Property::Map attributes;
712 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
714 application.SendNotification();
715 application.Render();
717 // Wait for animation finish
718 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
720 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
721 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
722 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
724 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
729 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
731 ToolkitTestApplication application;
732 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
734 Property::Map propertyMap;
735 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
736 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
738 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
739 DALI_TEST_CHECK( visual );
741 DummyControl actor = DummyControl::New( true );
742 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
743 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
745 Vector2 controlSize( 20.f, 30.f );
746 actor.SetSize( controlSize );
748 Stage::GetCurrent().Add( actor );
750 application.SendNotification();
751 application.Render();
753 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
755 application.SendNotification();
756 application.Render();
758 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
759 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
760 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
762 Property::Array array;
766 Property::Map attributes;
767 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
768 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
770 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
772 application.SendNotification();
773 application.Render();
775 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
776 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
777 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
786 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
787 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
790 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
792 application.SendNotification();
793 application.Render();
795 // Stop and jump to 3
796 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
798 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
800 application.SendNotification();
801 application.Render();
803 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
804 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
805 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
807 // Jump to the same position
808 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
810 application.SendNotification();
811 application.Render();
813 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
814 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
815 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
820 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
822 ToolkitTestApplication application;
823 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
825 int startFrame = 1, endFrame = 3;
826 Property::Array playRange;
827 playRange.PushBack( startFrame );
828 playRange.PushBack( endFrame );
830 Property::Map propertyMap;
831 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
832 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
833 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
834 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
836 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
837 DALI_TEST_CHECK( visual );
839 DummyControl actor = DummyControl::New( true );
840 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
841 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
843 Vector2 controlSize( 20.f, 30.f );
844 actor.SetSize( controlSize );
846 Stage::GetCurrent().Add( actor );
848 application.SendNotification();
849 application.Render();
851 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
852 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
853 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
855 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
856 DALI_TEST_CHECK( value );
858 Property::Array* result = value->GetArray();
859 DALI_TEST_CHECK( result );
861 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
862 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
865 playRange.PushBack( 0 );
866 playRange.PushBack( 2 );
868 Property::Map attributes;
869 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
870 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
872 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
874 application.SendNotification();
875 application.Render();
877 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
878 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
879 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
881 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
882 result = value->GetArray();
883 DALI_TEST_CHECK( result );
885 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
886 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
891 playRange.PushBack( startFrame );
892 playRange.PushBack( endFrame );
894 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
896 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
898 application.SendNotification();
899 application.Render();
901 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
902 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
904 result = value->GetArray();
905 DALI_TEST_CHECK( result );
907 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
908 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
910 // Play and update property
912 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
914 application.SendNotification();
915 application.Render();
917 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
919 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
921 application.SendNotification();
922 application.Render();
924 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
925 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
926 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
931 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
933 ToolkitTestApplication application;
934 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
936 Property::Map propertyMap;
937 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
938 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
939 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
940 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
942 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
943 DALI_TEST_CHECK( visual );
945 DummyControl actor = DummyControl::New( true );
946 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
947 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
949 Vector2 controlSize( 20.f, 30.f );
950 actor.SetSize( controlSize );
952 Stage::GetCurrent().Add( actor );
954 Property::Map attributes;
955 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
957 application.SendNotification();
958 application.Render();
960 // Trigger count is 1 - animation finished
961 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
963 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
964 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
965 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
967 // Change stop behavior
968 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
970 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
975 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
977 application.SendNotification();
978 application.Render();
980 // Trigger count is 1 - animation finished
981 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
983 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
985 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
986 int totalFrameNumber = value1->Get< int >();
988 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
989 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
991 // Change stop behavior
992 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
993 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
995 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1000 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1002 application.SendNotification();
1003 application.Render();
1006 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1008 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1009 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1010 int currentFrameNumber = value->Get< int >();
1013 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1015 application.SendNotification();
1016 application.Render( 16 );
1018 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1019 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1020 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1025 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1027 ToolkitTestApplication application;
1028 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1030 Property::Map propertyMap;
1031 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1032 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1033 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1034 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1035 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1037 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1038 DALI_TEST_CHECK( visual );
1040 DummyControl actor = DummyControl::New( true );
1041 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1042 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1044 Vector2 controlSize( 20.f, 30.f );
1045 actor.SetSize( controlSize );
1047 Stage::GetCurrent().Add( actor );
1049 Property::Map attributes;
1050 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1052 application.SendNotification();
1053 application.Render();
1055 // Trigger count is 1 - animation finished
1056 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1058 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1059 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1060 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1062 // Change stop behavior
1063 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1065 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1068 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1070 application.SendNotification();
1071 application.Render();
1073 // Trigger count is 1 - animation finished
1074 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1076 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1077 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1078 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1080 // Change looping mode
1081 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1083 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1086 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1088 application.SendNotification();
1089 application.Render();
1091 // Trigger count is 1 - animation finished
1092 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1094 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1095 int totalFrameNumber = value1->Get< int >();
1097 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1098 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1099 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1104 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1106 ToolkitTestApplication application;
1107 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1109 Property::Map propertyMap;
1110 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1111 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1113 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1114 DALI_TEST_CHECK( visual );
1116 DummyControl actor = DummyControl::New( true );
1117 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1118 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1120 Vector2 controlSize( 20.f, 30.f );
1121 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1122 actor.SetSize( controlSize );
1123 actor.SetScale( controlScale );
1125 Stage::GetCurrent().Add( actor );
1127 application.SendNotification();
1128 application.Render();
1130 application.SendNotification();
1131 application.Render();
1133 Renderer renderer = actor.GetRendererAt( 0u );
1134 DALI_TEST_CHECK( renderer );
1136 auto textureSet = renderer.GetTextures();
1137 auto texture = textureSet.GetTexture(0);
1139 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1140 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1142 // Change scale and size
1143 controlSize = Vector2( 50.f, 40.f );
1144 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1145 actor.SetSize( controlSize );
1146 actor.SetScale( controlScale );
1148 application.SendNotification();
1149 application.Render();
1151 application.SendNotification();
1152 application.Render();
1154 renderer = actor.GetRendererAt( 0u );
1155 DALI_TEST_CHECK( renderer );
1157 textureSet = renderer.GetTextures();
1158 texture = textureSet.GetTexture(0);
1160 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1161 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1166 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1168 ToolkitTestApplication application;
1169 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1171 Property::Map propertyMap;
1172 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1173 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1175 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1176 DALI_TEST_CHECK( visual1 );
1178 DummyControl actor1 = DummyControl::New( true );
1179 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1180 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1182 Vector2 controlSize( 20.f, 30.f );
1183 actor1.SetSize( controlSize );
1185 Stage::GetCurrent().Add( actor1 );
1187 propertyMap.Clear();
1188 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1189 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1191 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1192 DALI_TEST_CHECK( visual2 );
1194 DummyControl actor2 = DummyControl::New( true );
1195 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1196 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1198 actor2.SetSize( controlSize );
1200 Stage::GetCurrent().Add( actor2 );
1202 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1204 application.SendNotification();
1205 application.Render();
1207 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1209 Property::Map attributes;
1210 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1212 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1213 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1215 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1217 // renderer is added to actor
1218 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1219 Renderer renderer1 = actor1.GetRendererAt( 0u );
1220 DALI_TEST_CHECK( renderer1 );
1222 // renderer is added to actor
1223 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1224 Renderer renderer2 = actor2.GetRendererAt( 0u );
1225 DALI_TEST_CHECK( renderer2 );
1230 int UtcDaliAnimatedVectorImageVisualVisibilityChanged(void)
1232 ToolkitTestApplication application;
1233 tet_infoline( "UtcDaliAnimatedVectorImageVisualVisibilityChanged" );
1235 Property::Map propertyMap;
1236 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1237 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1239 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1240 DALI_TEST_CHECK( visual );
1242 DummyControl actor = DummyControl::New( true );
1243 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1244 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1246 Vector2 controlSize( 20.f, 30.f );
1247 actor.SetSize( controlSize );
1249 Stage::GetCurrent().Add( actor );
1251 application.SendNotification();
1252 application.Render();
1254 Property::Map attributes;
1255 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1257 // Check rendering behavior
1258 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1259 Renderer renderer = actor.GetRendererAt( 0u );
1260 DALI_TEST_CHECK( renderer );
1261 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1263 actor.SetVisible( false );
1265 application.SendNotification();
1266 application.Render();
1268 // Check rendering behavior again
1269 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );