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 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
301 DALI_TEST_CHECK( value );
303 // request AnimatedVectorImageVisual with an URL
304 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
307 visual2.CreatePropertyMap( resultMap );
309 // check the property values from the returned map from a visual
310 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
311 DALI_TEST_CHECK( value );
312 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
314 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
315 DALI_TEST_CHECK( value );
316 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
321 int UtcDaliAnimatedVectorImageVisualPlayback(void)
323 ToolkitTestApplication application;
325 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
328 // request AnimatedVectorImageVisual with a property map
329 VisualFactory factory = VisualFactory::Get();
330 Visual::Base visual = factory.CreateVisual(
332 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
333 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
335 DummyControl dummyControl = DummyControl::New( true );
336 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
337 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
338 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
340 Property::Map attributes;
341 tet_infoline( "Test Play action" );
342 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
344 Stage::GetCurrent().Add( dummyControl );
345 application.SendNotification();
346 application.Render( 16 );
348 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
350 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
351 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
352 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
354 tet_infoline( "Test Pause action" );
355 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
357 application.SendNotification();
358 application.Render(16);
360 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
362 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
363 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
364 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
366 tet_infoline( "Test Play action" );
367 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
369 application.SendNotification();
370 application.Render(16);
372 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
373 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
374 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
376 tet_infoline( "Test Stop action" );
377 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
379 application.SendNotification();
380 application.Render(16);
382 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
383 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
384 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
386 tet_infoline( "Test Stop action again" );
387 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
389 application.SendNotification();
390 application.Render(16);
392 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
393 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
394 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
396 tet_infoline( "Test Play action" );
397 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
399 application.SendNotification();
400 application.Render(16);
402 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
403 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
404 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
406 tet_infoline( "Off stage" );
407 dummyControl.Unparent();
409 application.SendNotification();
410 application.Render(16);
412 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
413 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
414 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
416 tet_infoline( "On stage again" );
417 Stage::GetCurrent().Add( dummyControl );
419 application.SendNotification();
420 application.Render(16);
422 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
423 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
424 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
426 tet_infoline( "Test Play action" );
427 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
429 application.SendNotification();
430 application.Render(16);
432 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
433 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
434 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
437 Vector3 newSize( 100.0f, 100.0f, 0.0f );
438 dummyControl.SetSize( newSize );
440 application.SendNotification();
441 application.Render(16);
443 // Size should be changed
444 Vector3 naturalSize = dummyControl.GetNaturalSize();
445 DALI_TEST_CHECK( naturalSize == newSize );
447 dummyControl.Unparent();
453 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
455 ToolkitTestApplication application;
456 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
458 VisualFactory factory = VisualFactory::Get();
459 Property::Map properties;
460 Property::Map shader;
461 const std::string vertexShader = "Foobar";
462 const std::string fragmentShader = "Foobar sampler2D Foobar";
463 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
464 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
466 properties[Visual::Property::TYPE] = Visual::IMAGE;
467 properties[Visual::Property::SHADER] = shader;
468 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
470 Visual::Base visual = factory.CreateVisual( properties );
472 // trigger creation through setting on stage
473 DummyControl dummy = DummyControl::New( true );
474 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
475 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
477 dummy.SetSize( 200.f, 200.f );
478 dummy.SetParentOrigin( ParentOrigin::CENTER );
479 Stage::GetCurrent().Add( dummy );
481 application.SendNotification();
482 application.Render();
484 Renderer renderer = dummy.GetRendererAt( 0 );
485 Shader shader2 = renderer.GetShader();
486 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
487 Property::Map* map = value.GetMap();
488 DALI_TEST_CHECK( map );
490 std::string resultFragmentShader, resultVertexShader;
491 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
492 fragment->Get( resultFragmentShader );
493 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
495 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
496 vertex->Get( resultVertexShader );
497 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
502 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
504 ToolkitTestApplication application;
505 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
507 VisualFactory factory = VisualFactory::Get();
508 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
509 DALI_TEST_CHECK( visual );
511 DummyControl actor = DummyControl::New( true );
512 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
513 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
515 Vector2 controlSize( 20.f, 30.f );
518 Stage::GetCurrent().Add( actor );
520 application.SendNotification();
521 application.Render();
523 visual.GetNaturalSize( naturalSize );
525 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
527 actor.SetSize( controlSize );
529 application.SendNotification();
530 application.Render();
532 visual.GetNaturalSize( naturalSize );
534 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
539 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
541 ToolkitTestApplication application;
542 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
544 Property::Map propertyMap;
545 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
546 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
547 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
549 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
550 DALI_TEST_CHECK( visual );
552 DummyControl actor = DummyControl::New( true );
553 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
554 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
556 Vector2 controlSize( 20.f, 30.f );
557 actor.SetSize( controlSize );
559 Stage::GetCurrent().Add( actor );
561 Property::Map attributes;
562 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
564 application.SendNotification();
565 application.Render();
567 // Trigger count is 1 - animation finished
568 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
570 // renderer is added to actor
571 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
572 Renderer renderer = actor.GetRendererAt( 0u );
573 DALI_TEST_CHECK( renderer );
578 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
580 ToolkitTestApplication application;
581 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
583 int startFrame = 1, endFrame = 3;
584 Property::Array array;
585 array.PushBack( endFrame );
586 array.PushBack( startFrame );
588 Property::Map propertyMap;
589 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
590 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
591 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
593 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
594 DALI_TEST_CHECK( visual );
596 DummyControl actor = DummyControl::New( true );
597 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
598 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
600 Vector2 controlSize( 20.f, 30.f );
601 actor.SetSize( controlSize );
603 Stage::GetCurrent().Add( actor );
605 Property::Map attributes;
606 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
608 application.SendNotification();
609 application.Render();
611 // renderer is added to actor
612 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
613 Renderer renderer = actor.GetRendererAt( 0u );
614 DALI_TEST_CHECK( renderer );
616 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
617 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
619 int resultStartFrame, resultEndFrame;
620 Property::Array* result = value->GetArray();
621 result->GetElementAt( 0 ).Get( resultStartFrame );
622 result->GetElementAt( 1 ).Get( resultEndFrame );
624 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
625 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
627 // Set invalid play range
630 array.PushBack( 100 );
633 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
634 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
636 application.SendNotification();
637 application.Render();
639 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
640 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
642 result = value->GetArray();
643 result->GetElementAt( 0 ).Get( resultStartFrame );
644 result->GetElementAt( 1 ).Get( resultEndFrame );
646 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
647 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
649 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
651 application.SendNotification();
652 application.Render();
654 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
656 application.SendNotification();
657 application.Render();
659 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
660 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
661 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
668 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
669 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
671 application.SendNotification();
672 application.Render();
674 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
675 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
677 result = value->GetArray();
678 result->GetElementAt( 0 ).Get( resultStartFrame );
679 result->GetElementAt( 1 ).Get( resultEndFrame );
681 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
682 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
684 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
685 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
690 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
692 ToolkitTestApplication application;
693 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
695 Property::Map propertyMap;
696 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
697 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
698 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
700 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
701 DALI_TEST_CHECK( visual );
703 DummyControl actor = DummyControl::New( true );
704 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
705 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
707 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
709 Vector2 controlSize( 20.f, 30.f );
710 actor.SetSize( controlSize );
712 Stage::GetCurrent().Add( actor );
714 Property::Map attributes;
715 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
717 application.SendNotification();
718 application.Render();
720 // Wait for animation finish
721 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
723 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
724 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
725 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
727 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
732 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
734 ToolkitTestApplication application;
735 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
737 Property::Map propertyMap;
738 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
739 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
741 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
742 DALI_TEST_CHECK( visual );
744 DummyControl actor = DummyControl::New( true );
745 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
746 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
748 Vector2 controlSize( 20.f, 30.f );
749 actor.SetSize( controlSize );
751 Stage::GetCurrent().Add( actor );
753 application.SendNotification();
754 application.Render();
756 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
758 application.SendNotification();
759 application.Render();
761 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
762 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
763 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
765 Property::Array array;
769 Property::Map attributes;
770 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
771 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
773 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
775 application.SendNotification();
776 application.Render();
778 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
779 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
780 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
789 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
790 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
793 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
795 application.SendNotification();
796 application.Render();
798 // Stop and jump to 3
799 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
801 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
803 application.SendNotification();
804 application.Render();
806 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
807 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
808 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
810 // Jump to the same position
811 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
813 application.SendNotification();
814 application.Render();
816 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
817 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
818 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
823 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
825 ToolkitTestApplication application;
826 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
828 int startFrame = 1, endFrame = 3;
829 Property::Array playRange;
830 playRange.PushBack( startFrame );
831 playRange.PushBack( endFrame );
833 Property::Map propertyMap;
834 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
835 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
836 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
837 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
839 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
840 DALI_TEST_CHECK( visual );
842 DummyControl actor = DummyControl::New( true );
843 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
844 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
846 Vector2 controlSize( 20.f, 30.f );
847 actor.SetSize( controlSize );
849 Stage::GetCurrent().Add( actor );
851 application.SendNotification();
852 application.Render();
854 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
855 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
856 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
858 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
859 DALI_TEST_CHECK( value );
861 Property::Array* result = value->GetArray();
862 DALI_TEST_CHECK( result );
864 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
865 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
868 playRange.PushBack( 0 );
869 playRange.PushBack( 2 );
871 Property::Map attributes;
872 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
873 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
875 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
877 application.SendNotification();
878 application.Render();
880 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
881 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
882 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
884 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
885 result = value->GetArray();
886 DALI_TEST_CHECK( result );
888 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
889 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
894 playRange.PushBack( startFrame );
895 playRange.PushBack( endFrame );
897 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
899 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
901 application.SendNotification();
902 application.Render();
904 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
905 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
907 result = value->GetArray();
908 DALI_TEST_CHECK( result );
910 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
911 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
913 // Play and update property
915 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
917 application.SendNotification();
918 application.Render();
920 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
922 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
924 application.SendNotification();
925 application.Render();
927 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
928 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
929 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
934 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
936 ToolkitTestApplication application;
937 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
939 Property::Map propertyMap;
940 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
941 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
942 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
943 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
945 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
946 DALI_TEST_CHECK( visual );
948 DummyControl actor = DummyControl::New( true );
949 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
950 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
952 Vector2 controlSize( 20.f, 30.f );
953 actor.SetSize( controlSize );
955 Stage::GetCurrent().Add( actor );
957 Property::Map attributes;
958 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
960 application.SendNotification();
961 application.Render();
963 // Trigger count is 1 - animation finished
964 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
966 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
967 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
968 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
970 // Change stop behavior
971 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
973 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
978 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
980 application.SendNotification();
981 application.Render();
983 // Trigger count is 1 - animation finished
984 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
986 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
988 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
989 int totalFrameNumber = value1->Get< int >();
991 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
992 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
994 // Change stop behavior
995 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
996 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
998 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1003 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1005 application.SendNotification();
1006 application.Render();
1009 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1011 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1012 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1013 int currentFrameNumber = value->Get< int >();
1016 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1018 application.SendNotification();
1019 application.Render( 16 );
1021 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1022 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1023 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1028 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1030 ToolkitTestApplication application;
1031 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1033 Property::Map propertyMap;
1034 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1035 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1036 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1037 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1038 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1040 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1041 DALI_TEST_CHECK( visual );
1043 DummyControl actor = DummyControl::New( true );
1044 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1045 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1047 Vector2 controlSize( 20.f, 30.f );
1048 actor.SetSize( controlSize );
1050 Stage::GetCurrent().Add( actor );
1052 Property::Map attributes;
1053 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1055 application.SendNotification();
1056 application.Render();
1058 // Trigger count is 1 - animation finished
1059 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1061 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1062 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1063 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1065 // Change stop behavior
1066 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1068 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1071 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1073 application.SendNotification();
1074 application.Render();
1076 // Trigger count is 1 - animation finished
1077 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1079 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1080 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1081 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1083 // Change looping mode
1084 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1086 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1089 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1091 application.SendNotification();
1092 application.Render();
1094 // Trigger count is 1 - animation finished
1095 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1097 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1098 int totalFrameNumber = value1->Get< int >();
1100 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1101 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1102 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1107 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1109 ToolkitTestApplication application;
1110 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1112 Property::Map propertyMap;
1113 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1114 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1116 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1117 DALI_TEST_CHECK( visual );
1119 DummyControl actor = DummyControl::New( true );
1120 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1121 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1123 Vector2 controlSize( 20.f, 30.f );
1124 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1125 actor.SetSize( controlSize );
1126 actor.SetScale( controlScale );
1128 Stage::GetCurrent().Add( actor );
1130 application.SendNotification();
1131 application.Render();
1133 application.SendNotification();
1134 application.Render();
1136 Renderer renderer = actor.GetRendererAt( 0u );
1137 DALI_TEST_CHECK( renderer );
1139 auto textureSet = renderer.GetTextures();
1140 auto texture = textureSet.GetTexture(0);
1142 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1143 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1145 // Change scale and size
1146 controlSize = Vector2( 50.f, 40.f );
1147 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1148 actor.SetSize( controlSize );
1149 actor.SetScale( controlScale );
1151 application.SendNotification();
1152 application.Render();
1154 application.SendNotification();
1155 application.Render();
1157 renderer = actor.GetRendererAt( 0u );
1158 DALI_TEST_CHECK( renderer );
1160 textureSet = renderer.GetTextures();
1161 texture = textureSet.GetTexture(0);
1163 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1164 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1169 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1171 ToolkitTestApplication application;
1172 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1174 Property::Map propertyMap;
1175 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1176 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1178 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1179 DALI_TEST_CHECK( visual1 );
1181 DummyControl actor1 = DummyControl::New( true );
1182 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1183 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1185 Vector2 controlSize( 20.f, 30.f );
1186 actor1.SetSize( controlSize );
1188 Stage::GetCurrent().Add( actor1 );
1190 propertyMap.Clear();
1191 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1192 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1194 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1195 DALI_TEST_CHECK( visual2 );
1197 DummyControl actor2 = DummyControl::New( true );
1198 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1199 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1201 actor2.SetSize( controlSize );
1203 Stage::GetCurrent().Add( actor2 );
1205 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1207 application.SendNotification();
1208 application.Render();
1210 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1212 Property::Map attributes;
1213 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1215 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1216 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1218 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1220 // renderer is added to actor
1221 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1222 Renderer renderer1 = actor1.GetRendererAt( 0u );
1223 DALI_TEST_CHECK( renderer1 );
1225 // renderer is added to actor
1226 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1227 Renderer renderer2 = actor2.GetRendererAt( 0u );
1228 DALI_TEST_CHECK( renderer2 );
1233 int UtcDaliAnimatedVectorImageVisualVisibilityChanged(void)
1235 ToolkitTestApplication application;
1236 tet_infoline( "UtcDaliAnimatedVectorImageVisualVisibilityChanged" );
1238 Property::Map propertyMap;
1239 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1240 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1242 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1243 DALI_TEST_CHECK( visual );
1245 DummyControl actor = DummyControl::New( true );
1246 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1247 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1249 Vector2 controlSize( 20.f, 30.f );
1250 actor.SetSize( controlSize );
1252 Stage::GetCurrent().Add( actor );
1254 application.SendNotification();
1255 application.Render();
1257 Property::Map attributes;
1258 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1260 // Check rendering behavior
1261 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1262 Renderer renderer = actor.GetRendererAt( 0u );
1263 DALI_TEST_CHECK( renderer );
1264 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1266 actor.SetVisible( false );
1268 application.SendNotification();
1269 application.Render();
1271 // Check rendering behavior again
1272 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );