2 * Copyright (c) 2020 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 application.GetScene().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 SetOffScene().
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 application.GetScene().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 application.GetScene().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 )
184 .Add( "redrawInScalingDown", false );
186 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
187 DALI_TEST_CHECK( visual );
189 DummyControl actor = DummyControl::New( true );
190 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
191 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
192 actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
193 application.GetScene().Add( actor );
195 application.SendNotification();
196 application.Render();
198 // Trigger count is 1 - render a frame
199 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
201 // renderer is added to actor
202 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
204 Renderer renderer = actor.GetRendererAt( 0u );
205 DALI_TEST_CHECK( renderer );
207 Property::Map resultMap;
208 visual.CreatePropertyMap( resultMap );
210 // check the property values from the returned map from a visual
211 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
212 DALI_TEST_CHECK( value );
213 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
215 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
216 DALI_TEST_CHECK( value );
217 DALI_TEST_CHECK( value->Get< int >() == 3 );
219 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
220 DALI_TEST_CHECK( value );
222 Property::Array* result = value->GetArray();
223 DALI_TEST_CHECK( result );
225 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
226 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
228 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
229 DALI_TEST_CHECK( value );
230 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
232 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
233 DALI_TEST_CHECK( value );
234 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
236 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
237 DALI_TEST_CHECK( value );
238 DALI_TEST_CHECK( value->Get< bool >() == false );
241 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
246 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
248 ToolkitTestApplication application;
249 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
251 int startFrame = 1, endFrame = 3;
252 Property::Array playRange;
253 playRange.PushBack( startFrame );
254 playRange.PushBack( endFrame );
256 Property::Map propertyMap;
257 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
258 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
259 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
260 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
262 // request AnimatedVectorImageVisual with a property map
263 VisualFactory factory = VisualFactory::Get();
264 Visual::Base visual = factory.CreateVisual( propertyMap );
266 DummyControl actor = DummyControl::New( true );
267 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
268 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
270 Vector2 controlSize( 20.f, 30.f );
271 actor.SetProperty( Actor::Property::SIZE, controlSize );
273 application.GetScene().Add( actor );
275 application.SendNotification();
276 application.Render();
278 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
280 Property::Map resultMap;
281 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
283 // check the property values from the returned map from a visual
284 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
285 DALI_TEST_CHECK( value );
286 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
288 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
289 DALI_TEST_CHECK( value );
290 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
292 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
293 DALI_TEST_CHECK( value );
294 DALI_TEST_CHECK( value->Get< int >() == 3 );
296 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
297 DALI_TEST_CHECK( value );
299 Property::Array* result = value->GetArray();
300 DALI_TEST_CHECK( result );
302 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
303 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
305 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
306 DALI_TEST_CHECK( value );
307 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
309 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
310 DALI_TEST_CHECK( value );
311 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
313 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
314 DALI_TEST_CHECK( value );
316 value = resultMap.Find( DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN );
317 DALI_TEST_CHECK( value );
318 DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value
320 // request AnimatedVectorImageVisual with an URL
321 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
324 visual2.CreatePropertyMap( resultMap );
326 // check the property values from the returned map from a visual
327 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
328 DALI_TEST_CHECK( value );
329 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
331 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
332 DALI_TEST_CHECK( value );
333 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
338 int UtcDaliAnimatedVectorImageVisualPlayback(void)
340 ToolkitTestApplication application;
342 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
345 // request AnimatedVectorImageVisual with a property map
346 VisualFactory factory = VisualFactory::Get();
347 Visual::Base visual = factory.CreateVisual(
349 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
350 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
352 DummyControl dummyControl = DummyControl::New( true );
353 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
354 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
355 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
357 Property::Map attributes;
358 tet_infoline( "Test Play action" );
359 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
361 application.GetScene().Add( dummyControl );
362 application.SendNotification();
363 application.Render( 16 );
365 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
366 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
367 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
369 tet_infoline( "Test Pause action" );
370 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
372 application.SendNotification();
373 application.Render(16);
375 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
376 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
377 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
379 tet_infoline( "Test Play action" );
380 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
382 application.SendNotification();
383 application.Render(16);
385 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
386 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
387 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
389 tet_infoline( "Test Stop action" );
390 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
392 application.SendNotification();
393 application.Render(16);
395 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
396 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
397 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
399 tet_infoline( "Test Stop action again" );
400 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
402 application.SendNotification();
403 application.Render(16);
405 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
406 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
407 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
409 tet_infoline( "Test Play action" );
410 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
412 application.SendNotification();
413 application.Render(16);
415 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
416 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
417 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
419 tet_infoline( "Off stage" );
420 dummyControl.Unparent();
422 application.SendNotification();
423 application.Render(16);
425 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
426 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
427 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
429 tet_infoline( "On stage again" );
430 application.GetScene().Add( dummyControl );
432 application.SendNotification();
433 application.Render(16);
435 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
436 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
437 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
439 tet_infoline( "Test Play action" );
440 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
442 application.SendNotification();
443 application.Render(16);
445 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
446 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
447 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
450 Vector3 newSize( 100.0f, 100.0f, 0.0f );
451 dummyControl.SetProperty( Actor::Property::SIZE, newSize );
453 application.SendNotification();
454 application.Render(16);
456 // Size should be changed
457 Vector3 naturalSize = dummyControl.GetNaturalSize();
458 DALI_TEST_CHECK( naturalSize == newSize );
460 dummyControl.Unparent();
466 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
468 ToolkitTestApplication application;
469 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
471 VisualFactory factory = VisualFactory::Get();
472 Property::Map properties;
473 Property::Map shader;
474 const std::string vertexShader = "Foobar";
475 const std::string fragmentShader = "Foobar sampler2D Foobar";
476 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
477 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
479 properties[Visual::Property::TYPE] = Visual::IMAGE;
480 properties[Visual::Property::SHADER] = shader;
481 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
483 Visual::Base visual = factory.CreateVisual( properties );
485 // trigger creation through setting on stage
486 DummyControl dummy = DummyControl::New( true );
487 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
488 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
490 dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
491 dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
492 application.GetScene().Add( dummy );
494 application.SendNotification();
495 application.Render();
497 Renderer renderer = dummy.GetRendererAt( 0 );
498 Shader shader2 = renderer.GetShader();
499 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
500 Property::Map* map = value.GetMap();
501 DALI_TEST_CHECK( map );
503 std::string resultFragmentShader, resultVertexShader;
504 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
505 fragment->Get( resultFragmentShader );
506 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
508 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
509 vertex->Get( resultVertexShader );
510 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
515 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
517 ToolkitTestApplication application;
518 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
520 VisualFactory factory = VisualFactory::Get();
521 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
522 DALI_TEST_CHECK( visual );
524 DummyControl actor = DummyControl::New( true );
525 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
526 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
528 Vector2 controlSize( 20.f, 30.f );
531 application.GetScene().Add( actor );
533 application.SendNotification();
534 application.Render();
536 visual.GetNaturalSize( naturalSize );
538 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
540 actor.SetProperty( Actor::Property::SIZE, controlSize );
542 application.SendNotification();
543 application.Render();
545 visual.GetNaturalSize( naturalSize );
547 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
552 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
554 ToolkitTestApplication application;
555 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
557 Property::Map propertyMap;
558 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
559 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
560 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
562 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
563 DALI_TEST_CHECK( visual );
565 DummyControl actor = DummyControl::New( true );
566 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
567 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
569 Vector2 controlSize( 20.f, 30.f );
570 actor.SetProperty( Actor::Property::SIZE, controlSize );
572 application.GetScene().Add( actor );
574 Property::Map attributes;
575 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
577 application.SendNotification();
578 application.Render();
580 // Trigger count is 1 - render a frame
581 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
583 // renderer is added to actor
584 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
585 Renderer renderer = actor.GetRendererAt( 0u );
586 DALI_TEST_CHECK( renderer );
591 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
593 ToolkitTestApplication application;
594 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
596 int startFrame = 1, endFrame = 3;
597 Property::Array array;
598 array.PushBack( endFrame );
599 array.PushBack( startFrame );
601 Property::Map propertyMap;
602 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
603 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
604 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
606 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
607 DALI_TEST_CHECK( visual );
609 DummyControl actor = DummyControl::New( true );
610 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
611 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
613 Vector2 controlSize( 20.f, 30.f );
614 actor.SetProperty( Actor::Property::SIZE, controlSize );
616 application.GetScene().Add( actor );
618 Property::Map attributes;
619 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
621 application.SendNotification();
622 application.Render();
624 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
626 // renderer is added to actor
627 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
628 Renderer renderer = actor.GetRendererAt( 0u );
629 DALI_TEST_CHECK( renderer );
631 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
632 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
634 int resultStartFrame, resultEndFrame;
635 Property::Array* result = value->GetArray();
636 result->GetElementAt( 0 ).Get( resultStartFrame );
637 result->GetElementAt( 1 ).Get( resultEndFrame );
639 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
640 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
642 // Set invalid play range
645 array.PushBack( 100 );
648 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
649 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
651 application.SendNotification();
652 application.Render();
654 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
656 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
657 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
659 result = value->GetArray();
660 result->GetElementAt( 0 ).Get( resultStartFrame );
661 result->GetElementAt( 1 ).Get( resultEndFrame );
663 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
664 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
666 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
668 application.SendNotification();
669 application.Render();
671 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
673 application.SendNotification();
674 application.Render();
676 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
678 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
679 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
680 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
687 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
688 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
690 application.SendNotification();
691 application.Render();
693 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
695 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
696 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
698 result = value->GetArray();
699 result->GetElementAt( 0 ).Get( resultStartFrame );
700 result->GetElementAt( 1 ).Get( resultEndFrame );
702 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
703 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
705 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
706 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
711 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
713 ToolkitTestApplication application;
714 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRangeMarker" );
716 Property::Array array;
717 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
719 Property::Map propertyMap;
720 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
721 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
722 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
724 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
725 DALI_TEST_CHECK( visual );
727 DummyControl actor = DummyControl::New( true );
728 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
729 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
731 Vector2 controlSize( 20.f, 30.f );
732 actor.SetProperty( Actor::Property::SIZE, controlSize );
734 application.GetScene().Add( actor );
736 Property::Map attributes;
737 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
739 application.SendNotification();
740 application.Render();
742 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
744 // renderer is added to actor
745 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
746 Renderer renderer = actor.GetRendererAt( 0u );
747 DALI_TEST_CHECK( renderer );
749 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
750 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
752 int resultStartFrame, resultEndFrame;
753 Property::Array* result = value->GetArray();
754 result->GetElementAt( 0 ).Get( resultStartFrame );
755 result->GetElementAt( 1 ).Get( resultEndFrame );
757 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
758 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION );
762 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
763 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_2 );
766 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
767 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
769 application.SendNotification();
770 application.Render();
772 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
774 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
775 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
777 result = value->GetArray();
778 result->GetElementAt( 0 ).Get( resultStartFrame );
779 result->GetElementAt( 1 ).Get( resultEndFrame );
781 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION );
782 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
784 // Set invalid play range
787 array.PushBack( VECTOR_ANIMATION_MARKER_NAME_1 );
790 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
791 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
793 application.SendNotification();
794 application.Render();
796 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
798 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
799 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
801 result = value->GetArray();
802 result->GetElementAt( 0 ).Get( resultStartFrame );
803 result->GetElementAt( 1 ).Get( resultEndFrame );
805 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION ); // Should not be changed
806 DALI_TEST_EQUALS( VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION );
811 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
813 ToolkitTestApplication application;
814 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
816 Property::Map propertyMap;
817 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
818 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
819 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
821 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
822 DALI_TEST_CHECK( visual );
824 DummyControl actor = DummyControl::New( true );
825 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
826 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
828 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
830 Vector2 controlSize( 20.f, 30.f );
831 actor.SetProperty( Actor::Property::SIZE, controlSize );
833 application.GetScene().Add( actor );
835 Property::Map attributes;
836 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
838 application.SendNotification();
839 application.Render();
841 // Wait for animation finish
842 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
844 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
845 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
846 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
848 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
853 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
855 ToolkitTestApplication application;
856 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
858 Property::Map propertyMap;
859 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
860 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
862 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
863 DALI_TEST_CHECK( visual );
865 tet_printf( "1. Visual is created.\n" );
867 DummyControl actor = DummyControl::New( true );
868 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
869 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
871 Vector2 controlSize( 20.f, 30.f );
872 actor.SetProperty( Actor::Property::SIZE, controlSize );
874 application.GetScene().Add( actor );
876 application.SendNotification();
877 application.Render();
879 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
881 application.SendNotification();
882 application.Render();
884 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
886 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
887 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
888 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
890 tet_printf( "2. The current frame number is [%d].\n", value->Get< int >() );
892 Property::Array array;
896 Property::Map attributes;
897 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
898 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
900 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
902 application.SendNotification();
903 application.Render();
905 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
907 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
908 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
909 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
911 tet_printf( "3. The current frame number is [%d].\n", value->Get< int >() );
920 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
921 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
924 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
926 application.SendNotification();
927 application.Render();
929 // Stop and jump to 3
930 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
932 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
934 application.SendNotification();
935 application.Render();
937 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
939 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
940 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
941 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
943 tet_printf( "4. The current frame number is [%d].\n", value->Get< int >() );
945 // Jump to the same position
946 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
948 application.SendNotification();
949 application.Render();
951 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
953 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
954 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
955 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
957 tet_printf( "5. The current frame number is [%d].\n", value->Get< int >() );
962 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
964 ToolkitTestApplication application;
965 tet_infoline( "UtcDaliAnimatedVectorImageVisualUpdateProperty" );
967 int startFrame = 1, endFrame = 3;
968 Property::Array playRange;
969 playRange.PushBack( startFrame );
970 playRange.PushBack( endFrame );
972 Property::Map propertyMap;
973 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
974 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
975 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
976 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
978 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
979 DALI_TEST_CHECK( visual );
981 DummyControl actor = DummyControl::New( true );
982 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
983 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
985 Vector2 controlSize( 20.f, 30.f );
986 actor.SetProperty( Actor::Property::SIZE, controlSize );
988 application.GetScene().Add( actor );
990 application.SendNotification();
991 application.Render();
993 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
995 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
996 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
997 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
999 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
1000 DALI_TEST_CHECK( value );
1002 Property::Array* result = value->GetArray();
1003 DALI_TEST_CHECK( result );
1005 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1006 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1009 playRange.PushBack( 0 );
1010 playRange.PushBack( 2 );
1012 Property::Map attributes;
1013 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1014 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
1016 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1018 application.SendNotification();
1019 application.Render();
1021 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1023 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1024 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1025 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
1027 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1028 result = value->GetArray();
1029 DALI_TEST_CHECK( result );
1031 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
1032 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
1037 playRange.PushBack( startFrame );
1038 playRange.PushBack( endFrame );
1040 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
1042 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1044 application.SendNotification();
1045 application.Render();
1047 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
1049 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1050 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
1052 result = value->GetArray();
1053 DALI_TEST_CHECK( result );
1055 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
1056 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
1058 // Play and update property
1060 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1062 application.SendNotification();
1063 application.Render();
1065 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
1067 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1069 application.SendNotification();
1070 application.Render();
1072 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1073 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
1074 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
1079 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1081 ToolkitTestApplication application;
1082 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
1084 Property::Map propertyMap;
1085 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1086 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1087 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1088 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
1090 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1091 DALI_TEST_CHECK( visual );
1093 DummyControl actor = DummyControl::New( true );
1094 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1095 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1097 Vector2 controlSize( 20.f, 30.f );
1098 actor.SetProperty( Actor::Property::SIZE, controlSize );
1100 application.GetScene().Add( actor );
1102 Property::Map attributes;
1103 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1105 application.SendNotification();
1106 application.Render();
1108 // Trigger count is 1 - animation finished
1109 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1111 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1112 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1113 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1115 // Change stop behavior
1116 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1118 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1123 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1125 application.SendNotification();
1126 application.Render();
1128 // Trigger count is 1 - animation finished
1129 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1131 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1133 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1134 int totalFrameNumber = value1->Get< int >();
1136 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1137 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1139 // Change stop behavior
1140 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1141 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
1143 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1148 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1150 application.SendNotification();
1151 application.Render();
1154 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1156 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1157 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1158 int currentFrameNumber = value->Get< int >();
1161 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1163 application.SendNotification();
1164 application.Render( 16 );
1166 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1167 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1168 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1173 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1175 ToolkitTestApplication application;
1176 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1178 Property::Map propertyMap;
1179 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1180 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1181 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1182 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1183 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1185 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1186 DALI_TEST_CHECK( visual );
1188 DummyControl actor = DummyControl::New( true );
1189 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1190 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1192 Vector2 controlSize( 20.f, 30.f );
1193 actor.SetProperty( Actor::Property::SIZE, controlSize );
1195 application.GetScene().Add( actor );
1197 Property::Map attributes;
1198 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1200 application.SendNotification();
1201 application.Render();
1203 // Trigger count is 1 - animation finished
1204 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1206 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1207 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1208 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1210 // Change stop behavior
1211 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1213 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1216 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1218 application.SendNotification();
1219 application.Render();
1221 // Trigger count is 1 - animation finished
1222 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1224 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1225 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1226 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1228 // Change looping mode
1229 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1231 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1234 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1236 application.SendNotification();
1237 application.Render();
1239 // Trigger count is 1 - animation finished
1240 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1242 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1243 int totalFrameNumber = value1->Get< int >();
1245 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1246 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1247 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1252 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1254 ToolkitTestApplication application;
1255 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1257 Property::Map propertyMap;
1258 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1259 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1261 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1262 DALI_TEST_CHECK( visual );
1264 DummyControl actor = DummyControl::New( true );
1265 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1266 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1268 Vector2 controlSize( 20.f, 30.f );
1269 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1270 actor.SetProperty( Actor::Property::SIZE, controlSize );
1271 actor.SetProperty( Actor::Property::SCALE, controlScale );
1273 application.GetScene().Add( actor );
1275 application.SendNotification();
1276 application.Render();
1278 application.SendNotification();
1279 application.Render();
1281 Renderer renderer = actor.GetRendererAt( 0u );
1282 DALI_TEST_CHECK( renderer );
1284 auto textureSet = renderer.GetTextures();
1285 auto texture = textureSet.GetTexture(0);
1287 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1288 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1290 // Change scale and size
1291 controlSize = Vector2( 50.f, 40.f );
1292 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1293 actor.SetProperty( Actor::Property::SIZE, controlSize );
1294 actor.SetProperty( Actor::Property::SCALE, controlScale );
1296 application.SendNotification();
1297 application.Render();
1299 application.SendNotification();
1300 application.Render();
1302 renderer = actor.GetRendererAt( 0u );
1303 DALI_TEST_CHECK( renderer );
1305 textureSet = renderer.GetTextures();
1306 texture = textureSet.GetTexture(0);
1308 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1309 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1314 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1316 ToolkitTestApplication application;
1317 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1319 Property::Map propertyMap;
1320 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1321 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1323 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1324 DALI_TEST_CHECK( visual1 );
1326 DummyControl actor1 = DummyControl::New( true );
1327 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1328 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1330 Vector2 controlSize( 20.f, 30.f );
1331 actor1.SetProperty( Actor::Property::SIZE, controlSize );
1333 application.GetScene().Add( actor1 );
1335 propertyMap.Clear();
1336 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1337 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1339 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1340 DALI_TEST_CHECK( visual2 );
1342 DummyControl actor2 = DummyControl::New( true );
1343 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1344 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1346 actor2.SetProperty( Actor::Property::SIZE, controlSize );
1348 application.GetScene().Add( actor2 );
1350 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1352 application.SendNotification();
1353 application.Render();
1355 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1357 Property::Map attributes;
1358 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1360 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1361 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1363 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1365 // renderer is added to actor
1366 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1367 Renderer renderer1 = actor1.GetRendererAt( 0u );
1368 DALI_TEST_CHECK( renderer1 );
1370 // renderer is added to actor
1371 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1372 Renderer renderer2 = actor2.GetRendererAt( 0u );
1373 DALI_TEST_CHECK( renderer2 );
1378 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1380 ToolkitTestApplication application;
1381 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1383 Property::Map propertyMap;
1384 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1385 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1387 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1388 DALI_TEST_CHECK( visual );
1390 DummyControl actor = DummyControl::New( true );
1391 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1392 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1394 Vector2 controlSize( 20.f, 30.f );
1395 actor.SetProperty( Actor::Property::SIZE, controlSize );
1397 application.GetScene().Add( actor );
1399 application.SendNotification();
1400 application.Render();
1402 Property::Map attributes;
1403 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1405 application.SendNotification();
1406 application.Render();
1408 // Check rendering behavior
1409 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1410 Renderer renderer = actor.GetRendererAt( 0u );
1411 DALI_TEST_CHECK( renderer );
1412 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1414 actor.SetProperty( Actor::Property::VISIBLE, false );
1416 application.SendNotification();
1417 application.Render();
1419 // Check rendering behavior again
1420 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1425 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1427 ToolkitTestApplication application;
1428 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1430 Property::Map propertyMap;
1431 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1432 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1434 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1435 DALI_TEST_CHECK( visual );
1437 DummyControl actor = DummyControl::New( true );
1438 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1439 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1441 Vector2 controlSize( 20.f, 30.f );
1442 actor.SetProperty( Actor::Property::SIZE, controlSize );
1444 application.GetScene().Add( actor );
1446 application.SendNotification();
1447 application.Render();
1449 Property::Map attributes;
1450 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1452 application.SendNotification();
1453 application.Render();
1455 // Check rendering behavior
1456 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1457 Renderer renderer = actor.GetRendererAt( 0u );
1458 DALI_TEST_CHECK( renderer );
1459 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1461 Window window = DevelWindow::Get( actor );
1464 application.SendNotification();
1465 application.Render();
1467 // Check rendering behavior again
1468 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );