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 "dummy-control.h"
34 using namespace Dali::Toolkit;
36 void dali_animated_vector_image_visual_startup(void)
38 test_return_value = TET_UNDEF;
41 void dali_animated_vector_image_visual_cleanup(void)
43 test_return_value = TET_PASS;
49 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
51 bool gAnimationFinishedSignalFired = false;
53 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
55 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
57 gAnimationFinishedSignalFired = true;
63 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
65 ToolkitTestApplication application;
66 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
68 VisualFactory factory = VisualFactory::Get();
69 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
70 DALI_TEST_CHECK( visual );
72 DummyControl actor = DummyControl::New( true );
73 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
74 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
75 actor.SetSize( 200.0f, 200.0f );
76 Stage::GetCurrent().Add( actor );
78 application.SendNotification();
81 // renderer is added to actor
82 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
83 Renderer renderer = actor.GetRendererAt( 0u );
84 DALI_TEST_CHECK( renderer );
86 // Test SetOffStage().
88 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
93 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
95 ToolkitTestApplication application;
96 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
98 Property::Map propertyMap;
99 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
100 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
102 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
103 DALI_TEST_CHECK( visual );
105 DummyControl actor = DummyControl::New( true );
106 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
107 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
108 actor.SetSize( 200.0f, 200.0f );
109 Stage::GetCurrent().Add( actor );
111 application.SendNotification();
112 application.Render();
114 // renderer is added to actor
115 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
116 Renderer renderer = actor.GetRendererAt( 0u );
117 DALI_TEST_CHECK( renderer );
120 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
125 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
127 ToolkitTestApplication application;
128 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
130 int startFrame = 1, endFrame = 3;
131 Property::Array playRange;
132 playRange.PushBack( startFrame );
133 playRange.PushBack( endFrame );
135 Property::Map propertyMap;
136 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
137 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
138 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
139 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
141 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
142 DALI_TEST_CHECK( visual );
144 DummyControl actor = DummyControl::New( true );
145 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
146 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
147 actor.SetSize( 200.0f, 200.0f );
148 Stage::GetCurrent().Add( actor );
150 application.SendNotification();
151 application.Render();
153 // renderer is added to actor
154 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
155 Renderer renderer = actor.GetRendererAt( 0u );
156 DALI_TEST_CHECK( renderer );
159 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
164 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
166 ToolkitTestApplication application;
167 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
169 int startFrame = 1, endFrame = 3;
170 Property::Array playRange;
171 playRange.PushBack( startFrame );
172 playRange.PushBack( endFrame );
174 Property::Map propertyMap;
175 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
176 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
177 .Add( "loopCount", 3 )
178 .Add( "playRange", playRange )
179 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
180 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
182 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
183 DALI_TEST_CHECK( visual );
185 DummyControl actor = DummyControl::New( true );
186 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
187 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
188 actor.SetSize( 200.0f, 200.0f );
189 Stage::GetCurrent().Add( actor );
191 application.SendNotification();
192 application.Render();
194 // renderer is added to actor
195 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
196 Renderer renderer = actor.GetRendererAt( 0u );
197 DALI_TEST_CHECK( renderer );
199 Property::Map resultMap;
200 visual.CreatePropertyMap( resultMap );
202 // check the property values from the returned map from a visual
203 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
204 DALI_TEST_CHECK( value );
205 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
207 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
208 DALI_TEST_CHECK( value );
209 DALI_TEST_CHECK( value->Get< int >() == 3 );
211 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
212 DALI_TEST_CHECK( value );
214 Property::Array* result = value->GetArray();
215 DALI_TEST_CHECK( result );
217 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
218 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
220 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
221 DALI_TEST_CHECK( value );
222 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
224 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
225 DALI_TEST_CHECK( value );
226 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
229 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
234 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
236 ToolkitTestApplication application;
237 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
239 int startFrame = 1, endFrame = 3;
240 Property::Array playRange;
241 playRange.PushBack( startFrame );
242 playRange.PushBack( endFrame );
244 Property::Map propertyMap;
245 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
246 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
247 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
248 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
250 // request AnimatedVectorImageVisual with a property map
251 VisualFactory factory = VisualFactory::Get();
252 Visual::Base visual = factory.CreateVisual( propertyMap );
254 DummyControl actor = DummyControl::New( true );
255 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
256 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
258 Vector2 controlSize( 20.f, 30.f );
259 actor.SetSize( controlSize );
261 Stage::GetCurrent().Add( actor );
263 application.SendNotification();
264 application.Render();
266 Property::Map resultMap;
267 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
269 // check the property values from the returned map from a visual
270 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
271 DALI_TEST_CHECK( value );
272 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
274 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
275 DALI_TEST_CHECK( value );
276 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
278 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
279 DALI_TEST_CHECK( value );
280 DALI_TEST_CHECK( value->Get< int >() == 3 );
282 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
283 DALI_TEST_CHECK( value );
285 Property::Array* result = value->GetArray();
286 DALI_TEST_CHECK( result );
288 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
289 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
291 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
292 DALI_TEST_CHECK( value );
293 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
295 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
296 DALI_TEST_CHECK( value );
297 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
299 // request AnimatedVectorImageVisual with an URL
300 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
303 visual2.CreatePropertyMap( resultMap );
305 // check the property values from the returned map from a visual
306 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
307 DALI_TEST_CHECK( value );
308 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
310 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
311 DALI_TEST_CHECK( value );
312 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
317 int UtcDaliAnimatedVectorImageVisualPlayback(void)
319 ToolkitTestApplication application;
321 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
324 // request AnimatedVectorImageVisual with a property map
325 VisualFactory factory = VisualFactory::Get();
326 Visual::Base visual = factory.CreateVisual(
328 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
329 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
331 DummyControl dummyControl = DummyControl::New( true );
332 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
333 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
334 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
336 Property::Map attributes;
337 tet_infoline( "Test Play action" );
338 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
340 Stage::GetCurrent().Add( dummyControl );
341 application.SendNotification();
342 application.Render( 16 );
344 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
346 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
347 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
348 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
350 tet_infoline( "Test Pause action" );
351 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
353 application.SendNotification();
354 application.Render(16);
356 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
358 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
359 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
360 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
362 tet_infoline( "Test Play action" );
363 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
365 application.SendNotification();
366 application.Render(16);
368 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
369 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
370 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
372 tet_infoline( "Test Stop action" );
373 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
375 application.SendNotification();
376 application.Render(16);
378 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
379 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
380 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
382 tet_infoline( "Test Stop action again" );
383 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
385 application.SendNotification();
386 application.Render(16);
388 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
389 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
390 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
392 tet_infoline( "Test Play action" );
393 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
395 application.SendNotification();
396 application.Render(16);
398 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
399 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
400 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
402 tet_infoline( "Off stage" );
403 dummyControl.Unparent();
405 application.SendNotification();
406 application.Render(16);
408 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
409 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
410 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
412 tet_infoline( "On stage again" );
413 Stage::GetCurrent().Add( dummyControl );
415 application.SendNotification();
416 application.Render(16);
418 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
419 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
420 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
422 tet_infoline( "Test Play action" );
423 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
425 application.SendNotification();
426 application.Render(16);
428 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
429 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
430 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
433 Vector3 newSize( 100.0f, 100.0f, 0.0f );
434 dummyControl.SetSize( newSize );
436 application.SendNotification();
437 application.Render(16);
439 // Size should be changed
440 Vector3 naturalSize = dummyControl.GetNaturalSize();
441 DALI_TEST_CHECK( naturalSize == newSize );
443 dummyControl.Unparent();
449 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
451 ToolkitTestApplication application;
452 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
454 VisualFactory factory = VisualFactory::Get();
455 Property::Map properties;
456 Property::Map shader;
457 const std::string vertexShader = "Foobar";
458 const std::string fragmentShader = "Foobar sampler2D Foobar";
459 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
460 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
462 properties[Visual::Property::TYPE] = Visual::IMAGE;
463 properties[Visual::Property::SHADER] = shader;
464 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
466 Visual::Base visual = factory.CreateVisual( properties );
468 // trigger creation through setting on stage
469 DummyControl dummy = DummyControl::New( true );
470 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
471 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
473 dummy.SetSize( 200.f, 200.f );
474 dummy.SetParentOrigin( ParentOrigin::CENTER );
475 Stage::GetCurrent().Add( dummy );
477 application.SendNotification();
478 application.Render();
480 Renderer renderer = dummy.GetRendererAt( 0 );
481 Shader shader2 = renderer.GetShader();
482 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
483 Property::Map* map = value.GetMap();
484 DALI_TEST_CHECK( map );
486 std::string resultFragmentShader, resultVertexShader;
487 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
488 fragment->Get( resultFragmentShader );
489 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
491 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
492 vertex->Get( resultVertexShader );
493 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
498 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
500 ToolkitTestApplication application;
501 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
503 VisualFactory factory = VisualFactory::Get();
504 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
505 DALI_TEST_CHECK( visual );
507 DummyControl actor = DummyControl::New( true );
508 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
509 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
511 Vector2 controlSize( 20.f, 30.f );
514 Stage::GetCurrent().Add( actor );
516 application.SendNotification();
517 application.Render();
519 visual.GetNaturalSize( naturalSize );
521 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
523 actor.SetSize( controlSize );
525 application.SendNotification();
526 application.Render();
528 visual.GetNaturalSize( naturalSize );
530 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
535 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
537 ToolkitTestApplication application;
538 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
540 Property::Map propertyMap;
541 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
542 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
543 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
545 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
546 DALI_TEST_CHECK( visual );
548 DummyControl actor = DummyControl::New( true );
549 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
550 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
552 Vector2 controlSize( 20.f, 30.f );
553 actor.SetSize( controlSize );
555 Stage::GetCurrent().Add( actor );
557 Property::Map attributes;
558 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
560 application.SendNotification();
561 application.Render();
563 // Trigger count is 1 - animation finished
564 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
566 // renderer is added to actor
567 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
568 Renderer renderer = actor.GetRendererAt( 0u );
569 DALI_TEST_CHECK( renderer );
574 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
576 ToolkitTestApplication application;
577 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
579 int startFrame = 1, endFrame = 3;
580 Property::Array array;
581 array.PushBack( endFrame );
582 array.PushBack( startFrame );
584 Property::Map propertyMap;
585 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
586 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
587 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
589 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
590 DALI_TEST_CHECK( visual );
592 DummyControl actor = DummyControl::New( true );
593 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
594 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
596 Vector2 controlSize( 20.f, 30.f );
597 actor.SetSize( controlSize );
599 Stage::GetCurrent().Add( actor );
601 Property::Map attributes;
602 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
604 application.SendNotification();
605 application.Render();
607 // renderer is added to actor
608 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
609 Renderer renderer = actor.GetRendererAt( 0u );
610 DALI_TEST_CHECK( renderer );
612 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
613 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
615 int resultStartFrame, resultEndFrame;
616 Property::Array* result = value->GetArray();
617 result->GetElementAt( 0 ).Get( resultStartFrame );
618 result->GetElementAt( 1 ).Get( resultEndFrame );
620 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
621 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
623 // Set invalid play range
626 array.PushBack( 100 );
629 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
630 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
632 application.SendNotification();
633 application.Render();
635 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
636 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
638 result = value->GetArray();
639 result->GetElementAt( 0 ).Get( resultStartFrame );
640 result->GetElementAt( 1 ).Get( resultEndFrame );
642 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
643 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
645 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
647 application.SendNotification();
648 application.Render();
650 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
652 application.SendNotification();
653 application.Render();
655 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
656 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
657 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
664 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
665 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
667 application.SendNotification();
668 application.Render();
670 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
671 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
673 result = value->GetArray();
674 result->GetElementAt( 0 ).Get( resultStartFrame );
675 result->GetElementAt( 1 ).Get( resultEndFrame );
677 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
678 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
680 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
681 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
686 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
688 ToolkitTestApplication application;
689 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
691 Property::Map propertyMap;
692 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
693 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
694 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
696 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
697 DALI_TEST_CHECK( visual );
699 DummyControl actor = DummyControl::New( true );
700 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
701 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
703 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
705 Vector2 controlSize( 20.f, 30.f );
706 actor.SetSize( controlSize );
708 Stage::GetCurrent().Add( actor );
710 Property::Map attributes;
711 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
713 application.SendNotification();
714 application.Render();
716 // Wait for animation finish
717 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
719 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
720 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
721 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
723 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
728 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
730 ToolkitTestApplication application;
731 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
733 Property::Map propertyMap;
734 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
735 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
737 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
738 DALI_TEST_CHECK( visual );
740 DummyControl actor = DummyControl::New( true );
741 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
742 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
744 Vector2 controlSize( 20.f, 30.f );
745 actor.SetSize( controlSize );
747 Stage::GetCurrent().Add( actor );
749 application.SendNotification();
750 application.Render();
752 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
754 application.SendNotification();
755 application.Render();
757 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
758 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
759 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
761 Property::Array array;
765 Property::Map attributes;
766 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
767 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
769 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
771 application.SendNotification();
772 application.Render();
774 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
775 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
776 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
785 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
786 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
789 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
791 application.SendNotification();
792 application.Render();
794 // Stop and jump to 3
795 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
797 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
799 application.SendNotification();
800 application.Render();
802 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
803 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
804 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
806 // Jump to the same position
807 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
809 application.SendNotification();
810 application.Render();
812 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
813 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
814 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
819 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
821 ToolkitTestApplication application;
822 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
824 int startFrame = 1, endFrame = 3;
825 Property::Array playRange;
826 playRange.PushBack( startFrame );
827 playRange.PushBack( endFrame );
829 Property::Map propertyMap;
830 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
831 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
832 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
833 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
835 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
836 DALI_TEST_CHECK( visual );
838 DummyControl actor = DummyControl::New( true );
839 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
840 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
842 Vector2 controlSize( 20.f, 30.f );
843 actor.SetSize( controlSize );
845 Stage::GetCurrent().Add( actor );
847 application.SendNotification();
848 application.Render();
850 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
851 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
852 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
854 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
855 DALI_TEST_CHECK( value );
857 Property::Array* result = value->GetArray();
858 DALI_TEST_CHECK( result );
860 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
861 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
864 playRange.PushBack( 0 );
865 playRange.PushBack( 2 );
867 Property::Map attributes;
868 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
869 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
871 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
873 application.SendNotification();
874 application.Render();
876 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
877 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
878 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
880 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
881 result = value->GetArray();
882 DALI_TEST_CHECK( result );
884 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
885 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
890 playRange.PushBack( startFrame );
891 playRange.PushBack( endFrame );
893 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
895 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
897 application.SendNotification();
898 application.Render();
900 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
901 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
903 result = value->GetArray();
904 DALI_TEST_CHECK( result );
906 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
907 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
909 // Play and update property
911 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
913 application.SendNotification();
914 application.Render();
916 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
918 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
920 application.SendNotification();
921 application.Render();
923 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
924 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
925 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
930 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
932 ToolkitTestApplication application;
933 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
935 Property::Map propertyMap;
936 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
937 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
938 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
939 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
941 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
942 DALI_TEST_CHECK( visual );
944 DummyControl actor = DummyControl::New( true );
945 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
946 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
948 Vector2 controlSize( 20.f, 30.f );
949 actor.SetSize( controlSize );
951 Stage::GetCurrent().Add( actor );
953 Property::Map attributes;
954 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
956 application.SendNotification();
957 application.Render();
959 // Trigger count is 1 - animation finished
960 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
962 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
963 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
964 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
966 // Change stop behavior
967 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
969 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
974 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
976 application.SendNotification();
977 application.Render();
979 // Trigger count is 1 - animation finished
980 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
982 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
984 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
985 int totalFrameNumber = value1->Get< int >();
987 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
988 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
990 // Change stop behavior
991 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
992 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
994 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
999 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1001 application.SendNotification();
1002 application.Render();
1005 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1007 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1008 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1009 int currentFrameNumber = value->Get< int >();
1012 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1014 application.SendNotification();
1015 application.Render( 16 );
1017 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1018 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1019 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1024 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1026 ToolkitTestApplication application;
1027 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1029 Property::Map propertyMap;
1030 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1031 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1032 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1033 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1034 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1036 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1037 DALI_TEST_CHECK( visual );
1039 DummyControl actor = DummyControl::New( true );
1040 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1041 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1043 Vector2 controlSize( 20.f, 30.f );
1044 actor.SetSize( controlSize );
1046 Stage::GetCurrent().Add( actor );
1048 Property::Map attributes;
1049 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1051 application.SendNotification();
1052 application.Render();
1054 // Trigger count is 1 - animation finished
1055 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1057 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1058 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1059 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1061 // Change stop behavior
1062 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1064 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1067 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1069 application.SendNotification();
1070 application.Render();
1072 // Trigger count is 1 - animation finished
1073 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1075 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1076 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1077 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1079 // Change looping mode
1080 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1082 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1085 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1087 application.SendNotification();
1088 application.Render();
1090 // Trigger count is 1 - animation finished
1091 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1093 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1094 int totalFrameNumber = value1->Get< int >();
1096 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1097 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1098 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1103 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1105 ToolkitTestApplication application;
1106 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1108 Property::Map propertyMap;
1109 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1110 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1112 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1113 DALI_TEST_CHECK( visual );
1115 DummyControl actor = DummyControl::New( true );
1116 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1117 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1119 Vector2 controlSize( 20.f, 30.f );
1120 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1121 actor.SetSize( controlSize );
1122 actor.SetScale( controlScale );
1124 Stage::GetCurrent().Add( actor );
1126 application.SendNotification();
1127 application.Render();
1129 application.SendNotification();
1130 application.Render();
1132 Renderer renderer = actor.GetRendererAt( 0u );
1133 DALI_TEST_CHECK( renderer );
1135 auto textureSet = renderer.GetTextures();
1136 auto texture = textureSet.GetTexture(0);
1138 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1139 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1141 // Change scale and size
1142 controlSize = Vector2( 50.f, 40.f );
1143 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1144 actor.SetSize( controlSize );
1145 actor.SetScale( controlScale );
1147 application.SendNotification();
1148 application.Render();
1150 application.SendNotification();
1151 application.Render();
1153 renderer = actor.GetRendererAt( 0u );
1154 DALI_TEST_CHECK( renderer );
1156 textureSet = renderer.GetTextures();
1157 texture = textureSet.GetTexture(0);
1159 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1160 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1165 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1167 ToolkitTestApplication application;
1168 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1170 Property::Map propertyMap;
1171 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1172 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1174 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1175 DALI_TEST_CHECK( visual1 );
1177 DummyControl actor1 = DummyControl::New( true );
1178 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1179 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1181 Vector2 controlSize( 20.f, 30.f );
1182 actor1.SetSize( controlSize );
1184 Stage::GetCurrent().Add( actor1 );
1186 propertyMap.Clear();
1187 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1188 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1190 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1191 DALI_TEST_CHECK( visual2 );
1193 DummyControl actor2 = DummyControl::New( true );
1194 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1195 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1197 actor2.SetSize( controlSize );
1199 Stage::GetCurrent().Add( actor2 );
1201 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1203 application.SendNotification();
1204 application.Render();
1206 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1208 Property::Map attributes;
1209 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1211 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1212 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1214 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1216 // renderer is added to actor
1217 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1218 Renderer renderer1 = actor1.GetRendererAt( 0u );
1219 DALI_TEST_CHECK( renderer1 );
1221 // renderer is added to actor
1222 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1223 Renderer renderer2 = actor2.GetRendererAt( 0u );
1224 DALI_TEST_CHECK( renderer2 );