Merge "Fix SVG visual not adding rasterization task on on/off stage" into devel/master
authorAdeel Kazmi <adeel.kazmi@samsung.com>
Fri, 4 May 2018 17:34:06 +0000 (17:34 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Fri, 4 May 2018 17:34:06 +0000 (17:34 +0000)
automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp
dali-toolkit/internal/visuals/svg/svg-visual.cpp

index 9c817b6..07c8564 100644 (file)
@@ -18,6 +18,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
+#include <toolkit-event-thread-callback.h>
 #include <dali-toolkit-test-suite-utils.h>
 #include <dali/devel-api/object/handle-devel.h>
 #include <dali-toolkit/devel-api/controls/control-devel.h>
@@ -396,7 +397,7 @@ int UtcDaliVisualSize(void)
 int UtcDaliVisualSetOnOffStage(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliVisualSetDepthIndex" );
+  tet_infoline( "UtcDaliVisualSetOnOffStage" );
 
   VisualFactory factory = VisualFactory::Get();
   Property::Map propertyMap;
@@ -429,6 +430,64 @@ int UtcDaliVisualSetOnOffStage(void)
   END_TEST;
 }
 
+int UtcDaliVisualSetOnOffStage2(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualSetOnOffStage2" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_SVG_FILE_NAME );
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+
+  DummyControl actor = DummyControl::New(true);
+  Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
+
+  actor.SetSize(200.f, 200.f);
+
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+
+  // First on/off
+  Stage::GetCurrent().Add( actor );
+
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  Renderer renderer = actor.GetRendererAt( 0 );
+  auto textures = renderer.GetTextures();
+  DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
+
+  Stage::GetCurrent().Remove( actor );
+
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+
+  // Second on/off
+  Stage::GetCurrent().Add( actor );
+
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  renderer = actor.GetRendererAt( 0 );
+  textures = renderer.GetTextures();
+  DALI_TEST_CHECK( textures.GetTextureCount() != 0u );
+
+  Stage::GetCurrent().Remove( actor );
+
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+
+  END_TEST;
+}
+
 int UtcDaliVisualGetPropertyMap1(void)
 {
   ToolkitTestApplication application;
index 6344510..bf7641d 100644 (file)
@@ -150,6 +150,9 @@ void SvgVisual::DoSetOffStage( Actor& actor )
   actor.RemoveRenderer( mImpl->mRenderer );
   mImpl->mRenderer.Reset();
   mPlacementActor.Reset();
+
+  // Reset the visual size to zero so that when adding the actor back to stage the SVG rasterization is forced
+  mVisualSize = Vector2::ZERO;
 }
 
 void SvgVisual::GetNaturalSize( Vector2& naturalSize )