2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <toolkit-timer.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <toolkit-vector-animation-renderer.h>
25 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/devel-api/controls/control-devel.h>
28 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
31 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
32 #include <dali/devel-api/rendering/renderer-devel.h>
33 #include <dali/devel-api/adaptor-framework/window-devel.h>
34 #include "dummy-control.h"
37 using namespace Dali::Toolkit;
39 void dali_animated_vector_image_visual_startup(void)
41 test_return_value = TET_UNDEF;
44 void dali_animated_vector_image_visual_cleanup(void)
46 test_return_value = TET_PASS;
52 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
54 bool gAnimationFinishedSignalFired = false;
56 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
58 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
60 gAnimationFinishedSignalFired = true;
66 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
68 ToolkitTestApplication application;
69 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
71 VisualFactory factory = VisualFactory::Get();
72 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
73 DALI_TEST_CHECK( visual );
75 DummyControl actor = DummyControl::New( true );
76 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
77 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
78 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
79 Stage::GetCurrent().Add( actor );
81 application.SendNotification();
84 // renderer is added to actor
85 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
86 Renderer renderer = actor.GetRendererAt( 0u );
87 DALI_TEST_CHECK( renderer );
89 // Test SetOffStage().
91 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
96 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
98 ToolkitTestApplication application;
99 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
101 Property::Map propertyMap;
102 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
103 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
105 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
106 DALI_TEST_CHECK( visual );
108 DummyControl actor = DummyControl::New( true );
109 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
110 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
111 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
112 Stage::GetCurrent().Add( actor );
114 application.SendNotification();
115 application.Render();
117 // renderer is added to actor
118 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
119 Renderer renderer = actor.GetRendererAt( 0u );
120 DALI_TEST_CHECK( renderer );
123 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
128 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
130 ToolkitTestApplication application;
131 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
133 int startFrame = 1, endFrame = 3;
134 Property::Array playRange;
135 playRange.PushBack( startFrame );
136 playRange.PushBack( endFrame );
138 Property::Map propertyMap;
139 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
140 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
141 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
142 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
144 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
145 DALI_TEST_CHECK( visual );
147 DummyControl actor = DummyControl::New( true );
148 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
149 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
150 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
151 Stage::GetCurrent().Add( actor );
153 application.SendNotification();
154 application.Render();
156 // renderer is added to actor
157 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
158 Renderer renderer = actor.GetRendererAt( 0u );
159 DALI_TEST_CHECK( renderer );
162 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
167 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
169 ToolkitTestApplication application;
170 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
172 int startFrame = 1, endFrame = 3;
173 Property::Array playRange;
174 playRange.PushBack( startFrame );
175 playRange.PushBack( endFrame );
177 Property::Map propertyMap;
178 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
179 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
180 .Add( "loopCount", 3 )
181 .Add( "playRange", playRange )
182 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
183 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
185 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
186 DALI_TEST_CHECK( visual );
188 DummyControl actor = DummyControl::New( true );
189 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
190 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
191 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
192 Stage::GetCurrent().Add( actor );
194 application.SendNotification();
195 application.Render();
197 // Trigger count is 1 - render a frame
198 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
200 // renderer is added to actor
201 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
203 Renderer renderer = actor.GetRendererAt( 0u );
204 DALI_TEST_CHECK( renderer );
206 Property::Map resultMap;
207 visual.CreatePropertyMap( resultMap );
209 // check the property values from the returned map from a visual
210 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
211 DALI_TEST_CHECK( value );
212 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
214 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
215 DALI_TEST_CHECK( value );
216 DALI_TEST_CHECK( value->Get< int >() == 3 );
218 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
219 DALI_TEST_CHECK( value );
221 Property::Array* result = value->GetArray();
222 DALI_TEST_CHECK( result );
224 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
225 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
227 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
228 DALI_TEST_CHECK( value );
229 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
231 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
232 DALI_TEST_CHECK( value );
233 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
236 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
241 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
243 ToolkitTestApplication application;
244 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
246 int startFrame = 1, endFrame = 3;
247 Property::Array playRange;
248 playRange.PushBack( startFrame );
249 playRange.PushBack( endFrame );
251 Property::Map propertyMap;
252 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
253 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
254 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
255 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
257 // request AnimatedVectorImageVisual with a property map
258 VisualFactory factory = VisualFactory::Get();
259 Visual::Base visual = factory.CreateVisual( propertyMap );
261 DummyControl actor = DummyControl::New( true );
262 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
263 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
265 Vector2 controlSize( 20.f, 30.f );
266 actor.SetProperty( Actor::Property::SIZE, controlSize );
268 Stage::GetCurrent().Add( actor );
270 application.SendNotification();
271 application.Render();
273 Property::Map resultMap;
274 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
276 // check the property values from the returned map from a visual
277 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
278 DALI_TEST_CHECK( value );
279 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
281 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
282 DALI_TEST_CHECK( value );
283 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
285 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
286 DALI_TEST_CHECK( value );
287 DALI_TEST_CHECK( value->Get< int >() == 3 );
289 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
290 DALI_TEST_CHECK( value );
292 Property::Array* result = value->GetArray();
293 DALI_TEST_CHECK( result );
295 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
296 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
298 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
299 DALI_TEST_CHECK( value );
300 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
302 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
303 DALI_TEST_CHECK( value );
304 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
306 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
307 DALI_TEST_CHECK( value );
309 // request AnimatedVectorImageVisual with an URL
310 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
313 visual2.CreatePropertyMap( resultMap );
315 // check the property values from the returned map from a visual
316 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
317 DALI_TEST_CHECK( value );
318 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
320 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
321 DALI_TEST_CHECK( value );
322 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
327 int UtcDaliAnimatedVectorImageVisualPlayback(void)
329 ToolkitTestApplication application;
331 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
334 // request AnimatedVectorImageVisual with a property map
335 VisualFactory factory = VisualFactory::Get();
336 Visual::Base visual = factory.CreateVisual(
338 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
339 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
341 DummyControl dummyControl = DummyControl::New( true );
342 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
343 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
344 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
346 Property::Map attributes;
347 tet_infoline( "Test Play action" );
348 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
350 Stage::GetCurrent().Add( dummyControl );
351 application.SendNotification();
352 application.Render( 16 );
354 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
355 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
356 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
358 tet_infoline( "Test Pause action" );
359 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
361 application.SendNotification();
362 application.Render(16);
364 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
365 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
366 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
368 tet_infoline( "Test Play action" );
369 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
371 application.SendNotification();
372 application.Render(16);
374 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
375 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
376 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
378 tet_infoline( "Test Stop action" );
379 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
381 application.SendNotification();
382 application.Render(16);
384 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
385 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
386 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
388 tet_infoline( "Test Stop action again" );
389 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
391 application.SendNotification();
392 application.Render(16);
394 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
395 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
396 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
398 tet_infoline( "Test Play action" );
399 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
401 application.SendNotification();
402 application.Render(16);
404 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
405 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
406 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
408 tet_infoline( "Off stage" );
409 dummyControl.Unparent();
411 application.SendNotification();
412 application.Render(16);
414 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
415 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
416 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
418 tet_infoline( "On stage again" );
419 Stage::GetCurrent().Add( dummyControl );
421 application.SendNotification();
422 application.Render(16);
424 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
425 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
426 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
428 tet_infoline( "Test Play action" );
429 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
431 application.SendNotification();
432 application.Render(16);
434 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
435 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
436 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
439 Vector3 newSize( 100.0f, 100.0f, 0.0f );
440 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
442 application.SendNotification();
443 application.Render(16);
445 // Size should be changed
446 Vector3 naturalSize = dummyControl.GetNaturalSize();
447 DALI_TEST_CHECK( naturalSize == newSize );
449 dummyControl.Unparent();
455 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
457 ToolkitTestApplication application;
458 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
460 VisualFactory factory = VisualFactory::Get();
461 Property::Map properties;
462 Property::Map shader;
463 const std::string vertexShader = "Foobar";
464 const std::string fragmentShader = "Foobar sampler2D Foobar";
465 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
466 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
468 properties[Visual::Property::TYPE] = Visual::IMAGE;
469 properties[Visual::Property::SHADER] = shader;
470 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
472 Visual::Base visual = factory.CreateVisual( properties );
474 // trigger creation through setting on stage
475 DummyControl dummy = DummyControl::New( true );
476 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
477 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
479 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
480 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
481 Stage::GetCurrent().Add( dummy );
483 application.SendNotification();
484 application.Render();
486 Renderer renderer = dummy.GetRendererAt( 0 );
487 Shader shader2 = renderer.GetShader();
488 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
489 Property::Map* map = value.GetMap();
490 DALI_TEST_CHECK( map );
492 std::string resultFragmentShader, resultVertexShader;
493 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
494 fragment->Get( resultFragmentShader );
495 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
497 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
498 vertex->Get( resultVertexShader );
499 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
504 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
506 ToolkitTestApplication application;
507 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
509 VisualFactory factory = VisualFactory::Get();
510 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
511 DALI_TEST_CHECK( visual );
513 DummyControl actor = DummyControl::New( true );
514 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
515 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
517 Vector2 controlSize( 20.f, 30.f );
520 Stage::GetCurrent().Add( actor );
522 application.SendNotification();
523 application.Render();
525 visual.GetNaturalSize( naturalSize );
527 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
529 actor.SetProperty( Actor::Property::SIZE, controlSize );
531 application.SendNotification();
532 application.Render();
534 visual.GetNaturalSize( naturalSize );
536 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
541 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
543 ToolkitTestApplication application;
544 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
546 Property::Map propertyMap;
547 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
548 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
549 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
551 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
552 DALI_TEST_CHECK( visual );
554 DummyControl actor = DummyControl::New( true );
555 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
556 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
558 Vector2 controlSize( 20.f, 30.f );
559 actor.SetProperty( Actor::Property::SIZE, controlSize );
561 Stage::GetCurrent().Add( actor );
563 Property::Map attributes;
564 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
566 application.SendNotification();
567 application.Render();
569 // Trigger count is 1 - render a frame
570 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
572 // renderer is added to actor
573 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
574 Renderer renderer = actor.GetRendererAt( 0u );
575 DALI_TEST_CHECK( renderer );
580 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
582 ToolkitTestApplication application;
583 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
585 int startFrame = 1, endFrame = 3;
586 Property::Array array;
587 array.PushBack( endFrame );
588 array.PushBack( startFrame );
590 Property::Map propertyMap;
591 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
592 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
593 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
595 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
596 DALI_TEST_CHECK( visual );
598 DummyControl actor = DummyControl::New( true );
599 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
600 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
602 Vector2 controlSize( 20.f, 30.f );
603 actor.SetProperty( Actor::Property::SIZE, controlSize );
605 Stage::GetCurrent().Add( actor );
607 Property::Map attributes;
608 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
610 application.SendNotification();
611 application.Render();
613 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
615 // renderer is added to actor
616 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
617 Renderer renderer = actor.GetRendererAt( 0u );
618 DALI_TEST_CHECK( renderer );
620 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
621 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
623 int resultStartFrame, resultEndFrame;
624 Property::Array* result = value->GetArray();
625 result->GetElementAt( 0 ).Get( resultStartFrame );
626 result->GetElementAt( 1 ).Get( resultEndFrame );
628 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
629 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
631 // Set invalid play range
634 array.PushBack( 100 );
637 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
638 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
640 application.SendNotification();
641 application.Render();
643 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
645 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
646 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
648 result = value->GetArray();
649 result->GetElementAt( 0 ).Get( resultStartFrame );
650 result->GetElementAt( 1 ).Get( resultEndFrame );
652 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
653 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
655 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
657 application.SendNotification();
658 application.Render();
660 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
662 application.SendNotification();
663 application.Render();
665 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
667 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
668 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
669 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
676 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
677 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
679 application.SendNotification();
680 application.Render();
682 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
683 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
685 result = value->GetArray();
686 result->GetElementAt( 0 ).Get( resultStartFrame );
687 result->GetElementAt( 1 ).Get( resultEndFrame );
689 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
690 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
692 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
693 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
698 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
700 ToolkitTestApplication application;
701 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
703 Property::Array array;
704 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
706 Property::Map propertyMap;
707 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
708 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
709 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
711 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
712 DALI_TEST_CHECK( visual );
714 DummyControl actor = DummyControl::New( true );
715 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
716 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
718 Vector2 controlSize( 20.f, 30.f );
719 actor.SetProperty( Actor::Property::SIZE, controlSize );
721 Stage::GetCurrent().Add( actor );
723 Property::Map attributes;
724 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
726 application.SendNotification();
727 application.Render();
729 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
731 // renderer is added to actor
732 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
733 Renderer renderer = actor.GetRendererAt( 0u );
734 DALI_TEST_CHECK( renderer );
736 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
737 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
739 int resultStartFrame, resultEndFrame;
740 Property::Array* result = value->GetArray();
741 result->GetElementAt( 0 ).Get( resultStartFrame );
742 result->GetElementAt( 1 ).Get( resultEndFrame );
744 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
745 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
749 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
750 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
753 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
754 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
756 application.SendNotification();
757 application.Render();
759 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
761 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
762 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
764 result = value->GetArray();
765 result->GetElementAt( 0 ).Get( resultStartFrame );
766 result->GetElementAt( 1 ).Get( resultEndFrame );
768 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
769 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
771 // Set invalid play range
774 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
777 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
778 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
780 application.SendNotification();
781 application.Render();
783 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
785 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
786 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
788 result = value->GetArray();
789 result->GetElementAt( 0 ).Get( resultStartFrame );
790 result->GetElementAt( 1 ).Get( resultEndFrame );
792 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
793 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
798 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
800 ToolkitTestApplication application;
801 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
803 Property::Map propertyMap;
804 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
805 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
806 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
808 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
809 DALI_TEST_CHECK( visual );
811 DummyControl actor = DummyControl::New( true );
812 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
813 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
815 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
817 Vector2 controlSize( 20.f, 30.f );
818 actor.SetProperty( Actor::Property::SIZE, controlSize );
820 Stage::GetCurrent().Add( actor );
822 Property::Map attributes;
823 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
825 application.SendNotification();
826 application.Render();
828 // Wait for animation finish
829 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
831 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
832 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
833 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
835 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
840 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
842 ToolkitTestApplication application;
843 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
845 Property::Map propertyMap;
846 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
847 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
849 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
850 DALI_TEST_CHECK( visual );
852 tet_printf( "1. Visual is created.\n" );
854 DummyControl actor = DummyControl::New( true );
855 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
856 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
858 Vector2 controlSize( 20.f, 30.f );
859 actor.SetProperty( Actor::Property::SIZE, controlSize );
861 Stage::GetCurrent().Add( actor );
863 application.SendNotification();
864 application.Render();
866 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
868 application.SendNotification();
869 application.Render();
871 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
873 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
874 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
875 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
877 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
879 Property::Array array;
883 Property::Map attributes;
884 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
885 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
887 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
889 application.SendNotification();
890 application.Render();
892 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
894 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
895 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
896 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
898 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
907 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
908 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
911 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
913 application.SendNotification();
914 application.Render();
916 // Stop and jump to 3
917 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
919 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
921 application.SendNotification();
922 application.Render();
924 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
926 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
927 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
928 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
930 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
932 // Jump to the same position
933 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
935 application.SendNotification();
936 application.Render();
938 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
940 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
941 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
942 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
944 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
949 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
951 ToolkitTestApplication application;
952 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
954 int startFrame = 1, endFrame = 3;
955 Property::Array playRange;
956 playRange.PushBack( startFrame );
957 playRange.PushBack( endFrame );
959 Property::Map propertyMap;
960 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
961 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
962 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
963 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
965 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
966 DALI_TEST_CHECK( visual );
968 DummyControl actor = DummyControl::New( true );
969 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
970 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
972 Vector2 controlSize( 20.f, 30.f );
973 actor.SetProperty( Actor::Property::SIZE, controlSize );
975 Stage::GetCurrent().Add( actor );
977 application.SendNotification();
978 application.Render();
980 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
982 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
983 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
984 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
986 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
987 DALI_TEST_CHECK( value );
989 Property::Array* result = value->GetArray();
990 DALI_TEST_CHECK( result );
992 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
993 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
996 playRange.PushBack( 0 );
997 playRange.PushBack( 2 );
999 Property::Map attributes;
1000 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1001 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1003 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1005 application.SendNotification();
1006 application.Render();
1008 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1010 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1011 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1012 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1014 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1015 result = value->GetArray();
1016 DALI_TEST_CHECK( result );
1018 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1019 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1024 playRange.PushBack( startFrame );
1025 playRange.PushBack( endFrame );
1027 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1029 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1031 application.SendNotification();
1032 application.Render();
1034 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1036 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1037 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1039 result = value->GetArray();
1040 DALI_TEST_CHECK( result );
1042 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1043 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1045 // Play and update property
1047 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1049 application.SendNotification();
1050 application.Render();
1052 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1054 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1056 application.SendNotification();
1057 application.Render();
1059 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1060 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1061 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1066 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1068 ToolkitTestApplication application;
1069 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1071 Property::Map propertyMap;
1072 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1073 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1074 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1075 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1077 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1078 DALI_TEST_CHECK( visual );
1080 DummyControl actor = DummyControl::New( true );
1081 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1082 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1084 Vector2 controlSize( 20.f, 30.f );
1085 actor.SetProperty( Actor::Property::SIZE, controlSize );
1087 Stage::GetCurrent().Add( actor );
1089 Property::Map attributes;
1090 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1092 application.SendNotification();
1093 application.Render();
1095 // Trigger count is 1 - animation finished
1096 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1098 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1099 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1100 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1102 // Change stop behavior
1103 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1105 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1110 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1112 application.SendNotification();
1113 application.Render();
1115 // Trigger count is 1 - animation finished
1116 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1118 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1120 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1121 int totalFrameNumber = value1->Get< int >();
1123 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1124 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1126 // Change stop behavior
1127 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1128 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1130 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1135 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1137 application.SendNotification();
1138 application.Render();
1141 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1143 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1144 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1145 int currentFrameNumber = value->Get< int >();
1148 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1150 application.SendNotification();
1151 application.Render( 16 );
1153 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1154 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1155 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1160 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1162 ToolkitTestApplication application;
1163 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1165 Property::Map propertyMap;
1166 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1167 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1168 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1169 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1170 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1172 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1173 DALI_TEST_CHECK( visual );
1175 DummyControl actor = DummyControl::New( true );
1176 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1177 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1179 Vector2 controlSize( 20.f, 30.f );
1180 actor.SetProperty( Actor::Property::SIZE, controlSize );
1182 Stage::GetCurrent().Add( actor );
1184 Property::Map attributes;
1185 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1187 application.SendNotification();
1188 application.Render();
1190 // Trigger count is 1 - animation finished
1191 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1193 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1194 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1195 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1197 // Change stop behavior
1198 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1200 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1203 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1205 application.SendNotification();
1206 application.Render();
1208 // Trigger count is 1 - animation finished
1209 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1211 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1212 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1213 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1215 // Change looping mode
1216 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1218 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1221 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1223 application.SendNotification();
1224 application.Render();
1226 // Trigger count is 1 - animation finished
1227 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1229 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1230 int totalFrameNumber = value1->Get< int >();
1232 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1233 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1234 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1239 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1241 ToolkitTestApplication application;
1242 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1244 Property::Map propertyMap;
1245 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1246 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1248 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1249 DALI_TEST_CHECK( visual );
1251 DummyControl actor = DummyControl::New( true );
1252 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1253 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1255 Vector2 controlSize( 20.f, 30.f );
1256 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1257 actor.SetProperty( Actor::Property::SIZE, controlSize );
1258 actor.SetProperty( Actor::Property::SCALE, controlScale );
1260 Stage::GetCurrent().Add( actor );
1262 application.SendNotification();
1263 application.Render();
1265 application.SendNotification();
1266 application.Render();
1268 Renderer renderer = actor.GetRendererAt( 0u );
1269 DALI_TEST_CHECK( renderer );
1271 auto textureSet = renderer.GetTextures();
1272 auto texture = textureSet.GetTexture(0);
1274 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1275 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1277 // Change scale and size
1278 controlSize = Vector2( 50.f, 40.f );
1279 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1280 actor.SetProperty( Actor::Property::SIZE, controlSize );
1281 actor.SetProperty( Actor::Property::SCALE, controlScale );
1283 application.SendNotification();
1284 application.Render();
1286 application.SendNotification();
1287 application.Render();
1289 renderer = actor.GetRendererAt( 0u );
1290 DALI_TEST_CHECK( renderer );
1292 textureSet = renderer.GetTextures();
1293 texture = textureSet.GetTexture(0);
1295 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1296 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1301 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1303 ToolkitTestApplication application;
1304 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1306 Property::Map propertyMap;
1307 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1308 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1310 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1311 DALI_TEST_CHECK( visual1 );
1313 DummyControl actor1 = DummyControl::New( true );
1314 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1315 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1317 Vector2 controlSize( 20.f, 30.f );
1318 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1320 Stage::GetCurrent().Add( actor1 );
1322 propertyMap.Clear();
1323 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1324 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1326 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1327 DALI_TEST_CHECK( visual2 );
1329 DummyControl actor2 = DummyControl::New( true );
1330 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1331 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1333 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1335 Stage::GetCurrent().Add( actor2 );
1337 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1339 application.SendNotification();
1340 application.Render();
1342 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1344 Property::Map attributes;
1345 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1347 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1348 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1350 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1352 // renderer is added to actor
1353 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1354 Renderer renderer1 = actor1.GetRendererAt( 0u );
1355 DALI_TEST_CHECK( renderer1 );
1357 // renderer is added to actor
1358 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1359 Renderer renderer2 = actor2.GetRendererAt( 0u );
1360 DALI_TEST_CHECK( renderer2 );
1365 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1367 ToolkitTestApplication application;
1368 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1370 Property::Map propertyMap;
1371 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1372 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1374 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1375 DALI_TEST_CHECK( visual );
1377 DummyControl actor = DummyControl::New( true );
1378 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1379 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1381 Vector2 controlSize( 20.f, 30.f );
1382 actor.SetProperty( Actor::Property::SIZE, controlSize );
1384 Stage::GetCurrent().Add( actor );
1386 application.SendNotification();
1387 application.Render();
1389 Property::Map attributes;
1390 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1392 application.SendNotification();
1393 application.Render();
1395 // Check rendering behavior
1396 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1397 Renderer renderer = actor.GetRendererAt( 0u );
1398 DALI_TEST_CHECK( renderer );
1399 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1401 actor.SetProperty( Actor::Property::VISIBLE, false );
1403 application.SendNotification();
1404 application.Render();
1406 // Check rendering behavior again
1407 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1412 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1414 ToolkitTestApplication application;
1415 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1417 Property::Map propertyMap;
1418 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1419 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1421 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1422 DALI_TEST_CHECK( visual );
1424 DummyControl actor = DummyControl::New( true );
1425 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1426 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1428 Vector2 controlSize( 20.f, 30.f );
1429 actor.SetProperty( Actor::Property::SIZE, controlSize );
1431 Stage::GetCurrent().Add( actor );
1433 application.SendNotification();
1434 application.Render();
1436 Property::Map attributes;
1437 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1439 application.SendNotification();
1440 application.Render();
1442 // Check rendering behavior
1443 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1444 Renderer renderer = actor.GetRendererAt( 0u );
1445 DALI_TEST_CHECK( renderer );
1446 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1448 Window window = DevelWindow::Get( actor );
1451 application.SendNotification();
1452 application.Render();
1454 // Check rendering behavior again
1455 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );