2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <toolkit-timer.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <dali-toolkit/dali-toolkit.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
28 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
30 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
31 #include <dali/devel-api/rendering/renderer-devel.h>
32 #include <dali/devel-api/adaptor-framework/window-devel.h>
33 #include "dummy-control.h"
36 using namespace Dali::Toolkit;
38 void dali_animated_vector_image_visual_startup(void)
40 test_return_value = TET_UNDEF;
43 void dali_animated_vector_image_visual_cleanup(void)
45 test_return_value = TET_PASS;
51 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
53 bool gAnimationFinishedSignalFired = false;
55 void VisualEventSignal( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId )
57 if( visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED )
59 gAnimationFinishedSignalFired = true;
65 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
67 ToolkitTestApplication application;
68 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url" );
70 VisualFactory factory = VisualFactory::Get();
71 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
72 DALI_TEST_CHECK( visual );
74 DummyControl actor = DummyControl::New( true );
75 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
76 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
77 actor.SetSize( 200.0f, 200.0f );
78 Stage::GetCurrent().Add( actor );
80 application.SendNotification();
83 // renderer is added to actor
84 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
85 Renderer renderer = actor.GetRendererAt( 0u );
86 DALI_TEST_CHECK( renderer );
88 // Test SetOffStage().
90 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
95 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
97 ToolkitTestApplication application;
98 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map" );
100 Property::Map propertyMap;
101 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
102 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
104 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
105 DALI_TEST_CHECK( visual );
107 DummyControl actor = DummyControl::New( true );
108 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
109 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
110 actor.SetSize( 200.0f, 200.0f );
111 Stage::GetCurrent().Add( actor );
113 application.SendNotification();
114 application.Render();
116 // renderer is added to actor
117 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
118 Renderer renderer = actor.GetRendererAt( 0u );
119 DALI_TEST_CHECK( renderer );
122 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
127 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
129 ToolkitTestApplication application;
130 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map" );
132 int startFrame = 1, endFrame = 3;
133 Property::Array playRange;
134 playRange.PushBack( startFrame );
135 playRange.PushBack( endFrame );
137 Property::Map propertyMap;
138 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
139 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
140 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
141 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
143 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
144 DALI_TEST_CHECK( visual );
146 DummyControl actor = DummyControl::New( true );
147 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
148 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
149 actor.SetSize( 200.0f, 200.0f );
150 Stage::GetCurrent().Add( actor );
152 application.SendNotification();
153 application.Render();
155 // renderer is added to actor
156 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
157 Renderer renderer = actor.GetRendererAt( 0u );
158 DALI_TEST_CHECK( renderer );
161 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
166 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
168 ToolkitTestApplication application;
169 tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" );
171 int startFrame = 1, endFrame = 3;
172 Property::Array playRange;
173 playRange.PushBack( startFrame );
174 playRange.PushBack( endFrame );
176 Property::Map propertyMap;
177 propertyMap.Add( "visualType", DevelVisual::ANIMATED_VECTOR_IMAGE )
178 .Add( "url", TEST_VECTOR_IMAGE_FILE_NAME )
179 .Add( "loopCount", 3 )
180 .Add( "playRange", playRange )
181 .Add( "stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME )
182 .Add( "loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE );
184 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
185 DALI_TEST_CHECK( visual );
187 DummyControl actor = DummyControl::New( true );
188 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
189 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
190 actor.SetSize( 200.0f, 200.0f );
191 Stage::GetCurrent().Add( actor );
193 application.SendNotification();
194 application.Render();
196 // renderer is added to actor
197 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
198 Renderer renderer = actor.GetRendererAt( 0u );
199 DALI_TEST_CHECK( renderer );
201 Property::Map resultMap;
202 visual.CreatePropertyMap( resultMap );
204 // check the property values from the returned map from a visual
205 Property::Value* value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
206 DALI_TEST_CHECK( value );
207 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
209 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
210 DALI_TEST_CHECK( value );
211 DALI_TEST_CHECK( value->Get< int >() == 3 );
213 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
214 DALI_TEST_CHECK( value );
216 Property::Array* result = value->GetArray();
217 DALI_TEST_CHECK( result );
219 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
220 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
222 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
223 DALI_TEST_CHECK( value );
224 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::FIRST_FRAME );
226 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
227 DALI_TEST_CHECK( value );
228 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::AUTO_REVERSE );
231 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
236 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
238 ToolkitTestApplication application;
239 tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" );
241 int startFrame = 1, endFrame = 3;
242 Property::Array playRange;
243 playRange.PushBack( startFrame );
244 playRange.PushBack( endFrame );
246 Property::Map propertyMap;
247 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
248 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
249 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
250 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
252 // request AnimatedVectorImageVisual with a property map
253 VisualFactory factory = VisualFactory::Get();
254 Visual::Base visual = factory.CreateVisual( propertyMap );
256 DummyControl actor = DummyControl::New( true );
257 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
258 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
260 Vector2 controlSize( 20.f, 30.f );
261 actor.SetSize( controlSize );
263 Stage::GetCurrent().Add( actor );
265 application.SendNotification();
266 application.Render();
268 Property::Map resultMap;
269 resultMap = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
271 // check the property values from the returned map from a visual
272 Property::Value* value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
273 DALI_TEST_CHECK( value );
274 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
276 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
277 DALI_TEST_CHECK( value );
278 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
280 value = resultMap.Find( DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER );
281 DALI_TEST_CHECK( value );
282 DALI_TEST_CHECK( value->Get< int >() == 3 );
284 value = resultMap.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
285 DALI_TEST_CHECK( value );
287 Property::Array* result = value->GetArray();
288 DALI_TEST_CHECK( result );
290 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
291 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
293 value = resultMap.Find( DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER );
294 DALI_TEST_CHECK( value );
295 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::StopBehavior::CURRENT_FRAME );
297 value = resultMap.Find( DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER );
298 DALI_TEST_CHECK( value );
299 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::LoopingMode::RESTART );
301 value = resultMap.Find( DevelImageVisual::Property::CONTENT_INFO, Property::MAP );
302 DALI_TEST_CHECK( value );
304 // request AnimatedVectorImageVisual with an URL
305 Visual::Base visual2 = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
308 visual2.CreatePropertyMap( resultMap );
310 // check the property values from the returned map from a visual
311 value = resultMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
312 DALI_TEST_CHECK( value );
313 DALI_TEST_CHECK( value->Get< int >() == DevelVisual::ANIMATED_VECTOR_IMAGE );
315 value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
316 DALI_TEST_CHECK( value );
317 DALI_TEST_CHECK( value->Get< std::string >() == TEST_VECTOR_IMAGE_FILE_NAME );
322 int UtcDaliAnimatedVectorImageVisualPlayback(void)
324 ToolkitTestApplication application;
326 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayback" );
329 // request AnimatedVectorImageVisual with a property map
330 VisualFactory factory = VisualFactory::Get();
331 Visual::Base visual = factory.CreateVisual(
333 .Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
334 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME ) );
336 DummyControl dummyControl = DummyControl::New( true );
337 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
338 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
339 dummyControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
341 Property::Map attributes;
342 tet_infoline( "Test Play action" );
343 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
345 Stage::GetCurrent().Add( dummyControl );
346 application.SendNotification();
347 application.Render( 16 );
349 std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) ); // wait for one animation loop (16fps, 5frames, need 80ms)
351 Property::Map map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
352 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
353 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
355 tet_infoline( "Test Pause action" );
356 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
358 application.SendNotification();
359 application.Render(16);
361 std::this_thread::sleep_for( std::chrono::milliseconds( 20 ) ); // wait for next rasterize thread run
363 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
364 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
365 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
367 tet_infoline( "Test Play action" );
368 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
370 application.SendNotification();
371 application.Render(16);
373 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
374 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
375 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
377 tet_infoline( "Test Stop action" );
378 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
380 application.SendNotification();
381 application.Render(16);
383 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
384 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
385 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
387 tet_infoline( "Test Stop action again" );
388 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
390 application.SendNotification();
391 application.Render(16);
393 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
394 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
395 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
397 tet_infoline( "Test Play action" );
398 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
400 application.SendNotification();
401 application.Render(16);
403 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
404 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
405 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
407 tet_infoline( "Off stage" );
408 dummyControl.Unparent();
410 application.SendNotification();
411 application.Render(16);
413 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
414 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
415 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
417 tet_infoline( "On stage again" );
418 Stage::GetCurrent().Add( dummyControl );
420 application.SendNotification();
421 application.Render(16);
423 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
424 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
425 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PAUSED );
427 tet_infoline( "Test Play action" );
428 DevelControl::DoAction( dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
430 application.SendNotification();
431 application.Render(16);
433 map = dummyControl.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
434 value = map.Find( DevelImageVisual::Property::PLAY_STATE );
435 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::PLAYING );
438 Vector3 newSize( 100.0f, 100.0f, 0.0f );
439 dummyControl.SetSize( newSize );
441 application.SendNotification();
442 application.Render(16);
444 // Size should be changed
445 Vector3 naturalSize = dummyControl.GetNaturalSize();
446 DALI_TEST_CHECK( naturalSize == newSize );
448 dummyControl.Unparent();
454 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
456 ToolkitTestApplication application;
457 tet_infoline( "UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader" );
459 VisualFactory factory = VisualFactory::Get();
460 Property::Map properties;
461 Property::Map shader;
462 const std::string vertexShader = "Foobar";
463 const std::string fragmentShader = "Foobar sampler2D Foobar";
464 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
465 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
467 properties[Visual::Property::TYPE] = Visual::IMAGE;
468 properties[Visual::Property::SHADER] = shader;
469 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
471 Visual::Base visual = factory.CreateVisual( properties );
473 // trigger creation through setting on stage
474 DummyControl dummy = DummyControl::New( true );
475 Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() );
476 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
478 dummy.SetSize( 200.f, 200.f );
479 dummy.SetParentOrigin( ParentOrigin::CENTER );
480 Stage::GetCurrent().Add( dummy );
482 application.SendNotification();
483 application.Render();
485 Renderer renderer = dummy.GetRendererAt( 0 );
486 Shader shader2 = renderer.GetShader();
487 Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM );
488 Property::Map* map = value.GetMap();
489 DALI_TEST_CHECK( map );
491 std::string resultFragmentShader, resultVertexShader;
492 Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp
493 fragment->Get( resultFragmentShader );
494 DALI_TEST_CHECK( resultFragmentShader.find( fragmentShader ) != std::string::npos );
496 Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
497 vertex->Get( resultVertexShader );
498 DALI_TEST_CHECK( resultVertexShader.find( vertexShader ) != std::string::npos );
503 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
505 ToolkitTestApplication application;
506 tet_infoline( "UtcDaliAnimatedVectorImageVisualNaturalSize" );
508 VisualFactory factory = VisualFactory::Get();
509 Visual::Base visual = factory.CreateVisual( TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions() );
510 DALI_TEST_CHECK( visual );
512 DummyControl actor = DummyControl::New( true );
513 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
514 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
516 Vector2 controlSize( 20.f, 30.f );
519 Stage::GetCurrent().Add( actor );
521 application.SendNotification();
522 application.Render();
524 visual.GetNaturalSize( naturalSize );
526 DALI_TEST_EQUALS( naturalSize, Vector2( 100.0f, 100.0f ), TEST_LOCATION ); // 100x100 is the content default size.
528 actor.SetSize( controlSize );
530 application.SendNotification();
531 application.Render();
533 visual.GetNaturalSize( naturalSize );
535 DALI_TEST_EQUALS( naturalSize, controlSize, TEST_LOCATION );
540 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
542 ToolkitTestApplication application;
543 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopCount" );
545 Property::Map propertyMap;
546 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
547 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
548 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
550 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
551 DALI_TEST_CHECK( visual );
553 DummyControl actor = DummyControl::New( true );
554 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
555 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
557 Vector2 controlSize( 20.f, 30.f );
558 actor.SetSize( controlSize );
560 Stage::GetCurrent().Add( actor );
562 Property::Map attributes;
563 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
565 application.SendNotification();
566 application.Render();
568 // Trigger count is 1 - animation finished
569 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
571 // renderer is added to actor
572 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
573 Renderer renderer = actor.GetRendererAt( 0u );
574 DALI_TEST_CHECK( renderer );
579 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
581 ToolkitTestApplication application;
582 tet_infoline( "UtcDaliAnimatedVectorImageVisualPlayRange" );
584 int startFrame = 1, endFrame = 3;
585 Property::Array array;
586 array.PushBack( endFrame );
587 array.PushBack( startFrame );
589 Property::Map propertyMap;
590 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
591 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
592 .Add( DevelImageVisual::Property::PLAY_RANGE, array );
594 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
595 DALI_TEST_CHECK( visual );
597 DummyControl actor = DummyControl::New( true );
598 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
599 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
601 Vector2 controlSize( 20.f, 30.f );
602 actor.SetSize( controlSize );
604 Stage::GetCurrent().Add( actor );
606 Property::Map attributes;
607 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
609 application.SendNotification();
610 application.Render();
612 // renderer is added to actor
613 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
614 Renderer renderer = actor.GetRendererAt( 0u );
615 DALI_TEST_CHECK( renderer );
617 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
618 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
620 int resultStartFrame, resultEndFrame;
621 Property::Array* result = value->GetArray();
622 result->GetElementAt( 0 ).Get( resultStartFrame );
623 result->GetElementAt( 1 ).Get( resultEndFrame );
625 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION );
626 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
628 // Set invalid play range
631 array.PushBack( 100 );
634 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
635 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
637 application.SendNotification();
638 application.Render();
640 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
641 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
643 result = value->GetArray();
644 result->GetElementAt( 0 ).Get( resultStartFrame );
645 result->GetElementAt( 1 ).Get( resultEndFrame );
647 DALI_TEST_EQUALS( startFrame, resultStartFrame, TEST_LOCATION ); // Should not be changed
648 DALI_TEST_EQUALS( endFrame, resultEndFrame, TEST_LOCATION );
650 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map() );
652 application.SendNotification();
653 application.Render();
655 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
657 application.SendNotification();
658 application.Render();
660 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
661 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
662 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
669 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
670 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
672 application.SendNotification();
673 application.Render();
675 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
676 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
678 result = value->GetArray();
679 result->GetElementAt( 0 ).Get( resultStartFrame );
680 result->GetElementAt( 1 ).Get( resultEndFrame );
682 DALI_TEST_EQUALS( 0, resultStartFrame, TEST_LOCATION );
683 DALI_TEST_EQUALS( 2, resultEndFrame, TEST_LOCATION );
685 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
686 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION ); // CURRENT_FRAME_NUMBER should be changed also.
691 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
693 ToolkitTestApplication application;
694 tet_infoline( "UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal" );
696 Property::Map propertyMap;
697 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
698 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
699 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 );
701 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
702 DALI_TEST_CHECK( visual );
704 DummyControl actor = DummyControl::New( true );
705 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
706 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
708 DevelControl::VisualEventSignal( actor ).Connect( &VisualEventSignal );
710 Vector2 controlSize( 20.f, 30.f );
711 actor.SetSize( controlSize );
713 Stage::GetCurrent().Add( actor );
715 Property::Map attributes;
716 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
718 application.SendNotification();
719 application.Render();
721 // Wait for animation finish
722 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
724 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
725 Property::Value* value = map.Find( DevelImageVisual::Property::PLAY_STATE );
726 DALI_TEST_CHECK( value->Get< int >() == DevelImageVisual::PlayState::STOPPED );
728 DALI_TEST_EQUALS( gAnimationFinishedSignalFired, true, TEST_LOCATION );
733 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
735 ToolkitTestApplication application;
736 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpTo" );
738 Property::Map propertyMap;
739 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
740 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
742 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
743 DALI_TEST_CHECK( visual );
745 DummyControl actor = DummyControl::New( true );
746 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
747 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
749 Vector2 controlSize( 20.f, 30.f );
750 actor.SetSize( controlSize );
752 Stage::GetCurrent().Add( actor );
754 application.SendNotification();
755 application.Render();
757 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2 );
759 application.SendNotification();
760 application.Render();
762 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
763 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
764 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
766 Property::Array array;
770 Property::Map attributes;
771 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
772 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
774 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
776 application.SendNotification();
777 application.Render();
779 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
780 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
781 DALI_TEST_EQUALS( value->Get< int >(), 2, TEST_LOCATION );
790 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, array );
791 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
794 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
796 application.SendNotification();
797 application.Render();
799 // Stop and jump to 3
800 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
802 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
804 application.SendNotification();
805 application.Render();
807 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
808 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
809 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
811 // Jump to the same position
812 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3 );
814 application.SendNotification();
815 application.Render();
817 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
818 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
819 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
824 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
826 ToolkitTestApplication application;
827 tet_infoline( "UtcDaliAnimatedVectorImageVisualJumpToCurrentProgress" );
829 int startFrame = 1, endFrame = 3;
830 Property::Array playRange;
831 playRange.PushBack( startFrame );
832 playRange.PushBack( endFrame );
834 Property::Map propertyMap;
835 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
836 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
837 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
838 .Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
840 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
841 DALI_TEST_CHECK( visual );
843 DummyControl actor = DummyControl::New( true );
844 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
845 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
847 Vector2 controlSize( 20.f, 30.f );
848 actor.SetSize( controlSize );
850 Stage::GetCurrent().Add( actor );
852 application.SendNotification();
853 application.Render();
855 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
856 Property::Value* value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
857 DALI_TEST_EQUALS( value->Get< int >(), 3, TEST_LOCATION );
859 value = map.Find( DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY );
860 DALI_TEST_CHECK( value );
862 Property::Array* result = value->GetArray();
863 DALI_TEST_CHECK( result );
865 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
866 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
869 playRange.PushBack( 0 );
870 playRange.PushBack( 2 );
872 Property::Map attributes;
873 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
874 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 5 );
876 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
878 application.SendNotification();
879 application.Render();
881 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
882 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
883 DALI_TEST_EQUALS( value->Get< int >(), 5, TEST_LOCATION );
885 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
886 result = value->GetArray();
887 DALI_TEST_CHECK( result );
889 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == 0 );
890 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == 2 );
895 playRange.PushBack( startFrame );
896 playRange.PushBack( endFrame );
898 attributes.Add( DevelImageVisual::Property::PLAY_RANGE, playRange );
900 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
902 application.SendNotification();
903 application.Render();
905 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
906 value = map.Find( DevelImageVisual::Property::PLAY_RANGE );
908 result = value->GetArray();
909 DALI_TEST_CHECK( result );
911 DALI_TEST_CHECK( result->GetElementAt( 0 ).Get< int >() == startFrame );
912 DALI_TEST_CHECK( result->GetElementAt( 1 ).Get< int >() == endFrame );
914 // Play and update property
916 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
918 application.SendNotification();
919 application.Render();
921 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, 10 );
923 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
925 application.SendNotification();
926 application.Render();
928 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
929 value = map.Find( DevelImageVisual::Property::LOOP_COUNT );
930 DALI_TEST_EQUALS( value->Get< int >(), 10, TEST_LOCATION );
935 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
937 ToolkitTestApplication application;
938 tet_infoline( "UtcDaliAnimatedVectorImageVisualStopBehavior" );
940 Property::Map propertyMap;
941 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
942 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
943 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
944 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME );
946 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
947 DALI_TEST_CHECK( visual );
949 DummyControl actor = DummyControl::New( true );
950 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
951 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
953 Vector2 controlSize( 20.f, 30.f );
954 actor.SetSize( controlSize );
956 Stage::GetCurrent().Add( actor );
958 Property::Map attributes;
959 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
961 application.SendNotification();
962 application.Render();
964 // Trigger count is 1 - animation finished
965 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
967 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
968 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
969 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
971 // Change stop behavior
972 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
974 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
979 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
981 application.SendNotification();
982 application.Render();
984 // Trigger count is 1 - animation finished
985 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
987 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
989 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
990 int totalFrameNumber = value1->Get< int >();
992 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
993 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
995 // Change stop behavior
996 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
997 attributes.Add( DevelImageVisual::Property::LOOP_COUNT, -1 );
999 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1004 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1006 application.SendNotification();
1007 application.Render();
1010 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes );
1012 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1013 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1014 int currentFrameNumber = value->Get< int >();
1017 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes );
1019 application.SendNotification();
1020 application.Render( 16 );
1022 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1023 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1024 DALI_TEST_EQUALS( value->Get< int >(), currentFrameNumber, TEST_LOCATION ); // Should be same with currentFrameNumber
1029 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1031 ToolkitTestApplication application;
1032 tet_infoline( "UtcDaliAnimatedVectorImageVisualLoopingMode" );
1034 Property::Map propertyMap;
1035 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1036 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME )
1037 .Add( DevelImageVisual::Property::LOOP_COUNT, 3 )
1038 .Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME )
1039 .Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE );
1041 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1042 DALI_TEST_CHECK( visual );
1044 DummyControl actor = DummyControl::New( true );
1045 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1046 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1048 Vector2 controlSize( 20.f, 30.f );
1049 actor.SetSize( controlSize );
1051 Stage::GetCurrent().Add( actor );
1053 Property::Map attributes;
1054 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1056 application.SendNotification();
1057 application.Render();
1059 // Trigger count is 1 - animation finished
1060 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1062 Property::Map map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1063 Property::Value* value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1064 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame because of auto reverse
1066 // Change stop behavior
1067 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME );
1069 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1072 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1074 application.SendNotification();
1075 application.Render();
1077 // Trigger count is 1 - animation finished
1078 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1080 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1081 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1082 DALI_TEST_EQUALS( value->Get< int >(), 0, TEST_LOCATION ); // Should be the first frame
1084 // Change looping mode
1085 attributes.Add( DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART );
1087 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, 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( 1 ), true, TEST_LOCATION );
1098 Property::Value* value1 = map.Find( DevelImageVisual::Property::TOTAL_FRAME_NUMBER );
1099 int totalFrameNumber = value1->Get< int >();
1101 map = actor.GetProperty< Property::Map >( DummyControl::Property::TEST_VISUAL );
1102 value = map.Find( DevelImageVisual::Property::CURRENT_FRAME_NUMBER );
1103 DALI_TEST_EQUALS( value->Get< int >(), totalFrameNumber - 1, TEST_LOCATION ); // Should be the last frame
1108 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1110 ToolkitTestApplication application;
1111 tet_infoline( "UtcDaliAnimatedVectorImageVisualPropertyNotification" );
1113 Property::Map propertyMap;
1114 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1115 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1117 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1118 DALI_TEST_CHECK( visual );
1120 DummyControl actor = DummyControl::New( true );
1121 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1122 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1124 Vector2 controlSize( 20.f, 30.f );
1125 Vector3 controlScale( 2.0f, 2.0f, 1.0f );
1126 actor.SetSize( controlSize );
1127 actor.SetScale( controlScale );
1129 Stage::GetCurrent().Add( actor );
1131 application.SendNotification();
1132 application.Render();
1134 application.SendNotification();
1135 application.Render();
1137 Renderer renderer = actor.GetRendererAt( 0u );
1138 DALI_TEST_CHECK( renderer );
1140 auto textureSet = renderer.GetTextures();
1141 auto texture = textureSet.GetTexture(0);
1143 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1144 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1146 // Change scale and size
1147 controlSize = Vector2( 50.f, 40.f );
1148 controlScale= Vector3( 0.5f, 0.5f, 1.0f );
1149 actor.SetSize( controlSize );
1150 actor.SetScale( controlScale );
1152 application.SendNotification();
1153 application.Render();
1155 application.SendNotification();
1156 application.Render();
1158 renderer = actor.GetRendererAt( 0u );
1159 DALI_TEST_CHECK( renderer );
1161 textureSet = renderer.GetTextures();
1162 texture = textureSet.GetTexture(0);
1164 DALI_TEST_EQUALS( controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION );
1165 DALI_TEST_EQUALS( controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION );
1170 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1172 ToolkitTestApplication application;
1173 tet_infoline( "UtcDaliAnimatedVectorImageVisualMultipleInstances" );
1175 Property::Map propertyMap;
1176 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1177 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1179 Visual::Base visual1 = VisualFactory::Get().CreateVisual( propertyMap );
1180 DALI_TEST_CHECK( visual1 );
1182 DummyControl actor1 = DummyControl::New( true );
1183 DummyControlImpl& dummyImpl1 = static_cast< DummyControlImpl& >( actor1.GetImplementation() );
1184 dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 );
1186 Vector2 controlSize( 20.f, 30.f );
1187 actor1.SetSize( controlSize );
1189 Stage::GetCurrent().Add( actor1 );
1191 propertyMap.Clear();
1192 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1193 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1195 Visual::Base visual2 = VisualFactory::Get().CreateVisual( propertyMap );
1196 DALI_TEST_CHECK( visual2 );
1198 DummyControl actor2 = DummyControl::New( true );
1199 DummyControlImpl& dummyImpl2 = static_cast< DummyControlImpl& >( actor2.GetImplementation() );
1200 dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual2 );
1202 actor2.SetSize( controlSize );
1204 Stage::GetCurrent().Add( actor2 );
1206 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1208 application.SendNotification();
1209 application.Render();
1211 std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
1213 Property::Map attributes;
1214 attributes.Add( DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME );
1216 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1217 DevelControl::DoAction( actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::UPDATE_PROPERTY, attributes );
1219 DevelControl::DoAction( actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map() );
1221 // renderer is added to actor
1222 DALI_TEST_CHECK( actor1.GetRendererCount() == 1u );
1223 Renderer renderer1 = actor1.GetRendererAt( 0u );
1224 DALI_TEST_CHECK( renderer1 );
1226 // renderer is added to actor
1227 DALI_TEST_CHECK( actor2.GetRendererCount() == 1u );
1228 Renderer renderer2 = actor2.GetRendererAt( 0u );
1229 DALI_TEST_CHECK( renderer2 );
1234 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1236 ToolkitTestApplication application;
1237 tet_infoline( "UtcDaliAnimatedVectorImageVisualControlVisibilityChanged" );
1239 Property::Map propertyMap;
1240 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1241 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1243 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1244 DALI_TEST_CHECK( visual );
1246 DummyControl actor = DummyControl::New( true );
1247 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1248 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1250 Vector2 controlSize( 20.f, 30.f );
1251 actor.SetSize( controlSize );
1253 Stage::GetCurrent().Add( actor );
1255 application.SendNotification();
1256 application.Render();
1258 Property::Map attributes;
1259 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1261 // Check rendering behavior
1262 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1263 Renderer renderer = actor.GetRendererAt( 0u );
1264 DALI_TEST_CHECK( renderer );
1265 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1267 actor.SetVisible( false );
1269 application.SendNotification();
1270 application.Render();
1272 // Check rendering behavior again
1273 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );
1278 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1280 ToolkitTestApplication application;
1281 tet_infoline( "UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged" );
1283 Property::Map propertyMap;
1284 propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
1285 .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME );
1287 Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
1288 DALI_TEST_CHECK( visual );
1290 DummyControl actor = DummyControl::New( true );
1291 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
1292 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1294 Vector2 controlSize( 20.f, 30.f );
1295 actor.SetSize( controlSize );
1297 Stage::GetCurrent().Add( actor );
1299 application.SendNotification();
1300 application.Render();
1302 Property::Map attributes;
1303 DevelControl::DoAction( actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes );
1305 // Check rendering behavior
1306 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1307 Renderer renderer = actor.GetRendererAt( 0u );
1308 DALI_TEST_CHECK( renderer );
1309 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::CONTINUOUSLY );
1311 Window window = DevelWindow::Get( actor );
1314 application.SendNotification();
1315 application.Render();
1317 // Check rendering behavior again
1318 DALI_TEST_CHECK( renderer.GetProperty< int >( DevelRenderer::Property::RENDERING_BEHAVIOR ) == DevelRenderer::Rendering::IF_REQUIRED );