From 169a6db26753977f60fec8f1fe4bb671826d4173 Mon Sep 17 00:00:00 2001 From: Anton Obzhirov Date: Fri, 4 May 2018 14:49:28 +0100 Subject: [PATCH] Fix SVG visual not adding rasterization task on on/off stage Change-Id: I8ebe1bff76378ab70bb270c277948e72d3270f0b --- .../src/dali-toolkit/utc-Dali-Visual.cpp | 61 +++++++++++++++++++++- dali-toolkit/internal/visuals/svg/svg-visual.cpp | 3 ++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index 9c817b6..07c8564 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -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(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; diff --git a/dali-toolkit/internal/visuals/svg/svg-visual.cpp b/dali-toolkit/internal/visuals/svg/svg-visual.cpp index 6344510..bf7641d 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-visual.cpp @@ -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 ) -- 2.7.4