Removed SetOnStage/SetOffStage from visual-base.h 56/96356/3
authorDavid Steele <david.steele@partner.samsung.com>
Tue, 8 Nov 2016 20:10:58 +0000 (20:10 +0000)
committerDavid Steele <david.steele@partner.samsung.com>
Wed, 9 Nov 2016 13:37:38 +0000 (13:37 +0000)
Whereever SetOnStage/SetOffStage was used, have replaced with RegisterVisual instead.

Change-Id: I76d6df968dcd72a607ad593962a1a3318711a35c
Signed-off-by: David Steele <david.steele@samsung.com>
17 files changed:
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dummy-control.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dummy-control.h
automated-tests/src/dali-toolkit/utc-Dali-DebugRendering.cpp
automated-tests/src/dali-toolkit/utc-Dali-EffectsView.cpp
automated-tests/src/dali-toolkit/utc-Dali-ToolBar.cpp
automated-tests/src/dali-toolkit/utc-Dali-VideoView.cpp
automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp
automated-tests/src/dali-toolkit/utc-Dali-VisualFactory.cpp
dali-toolkit/devel-api/visual-factory/visual-base.cpp
dali-toolkit/devel-api/visual-factory/visual-base.h
dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp
dali-toolkit/internal/controls/effects-view/effects-view-impl.h
dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.cpp
dali-toolkit/internal/filters/emboss-filter.cpp
dali-toolkit/public-api/controls/control-impl.cpp

index a71f953..6fcc10d 100644 (file)
@@ -56,6 +56,17 @@ void DummyControlImpl::CustomSlot1( Actor actor )
   mCustomSlot1Called = true;
 }
 
+namespace {
+
+BaseHandle Create()
+{
+  return DummyControlImpl::New();
+}
+
+DALI_TYPE_REGISTRATION_BEGIN( Toolkit::DummyControl, Toolkit::Control, Create );
+DALI_TYPE_REGISTRATION_END()
+}
+
 DummyControl DummyControlImpl::New()
 {
   IntrusivePtr< DummyControlImpl > impl = new DummyControlImpl;
index 2351839..04847d1 100644 (file)
@@ -75,7 +75,7 @@ public:
   void RegisterVisual( Property::Index index, Toolkit::Visual::Base visual, bool enabled );
   void UnregisterVisual( Property::Index index );
   void EnableVisual( Property::Index index, bool enabled );
-  bool IsVisualEnabled( Property::Index index );
+  bool IsVisualEnabled( Property::Index indepx );
 
   Toolkit::Visual::Base GetVisual( Property::Index index );
   Animation CreateTransition( const Toolkit::TransitionData& transition );
index b2cb02c..096bf4d 100644 (file)
@@ -23,6 +23,7 @@
 #include <dali-toolkit/dali-toolkit.h>
 
 #include <toolkit-environment-variable.h> // for setting environment variable: DALI_DEBUG_RENDERING
+#include "dummy-control.h"
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -45,10 +46,17 @@ bool IsDebugVisual( Visual::Base& visual )
     isDebugVisualType = ( typeValue->Get<int>() == Visual::WIREFRAME ); // Debug Rendering uses the WireframeVisual
   }
 
-  Actor actor = Actor::New();
-  visual.SetOnStage( actor );
-  Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
-  isGeometryLineType = ( geometry.GetType() == Geometry::LINES );
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+  Stage::GetCurrent().Add( actor );
+
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1, TEST_LOCATION );
+  if( actor.GetRendererCount() > 0 )
+  {
+    Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
+    isGeometryLineType = ( geometry.GetType() == Geometry::LINES );
+  }
 
   return isDebugVisualType && isGeometryLineType;
 }
index c80e25a..363f2b1 100644 (file)
@@ -97,10 +97,10 @@ int UtcDaliEffectsViewDownCast(void)
 }
 
 // Positive test case for a method
-int UtcDaliEffectsViewAddRemove(void)
+int UtcDaliEffectsViewAddRemoveDropShadow(void)
 {
   ToolkitTestApplication application;
-  tet_infoline("UtcDaliGaussianBlurViewAddRemove");
+  tet_infoline("UtcDaliEffectsViewAddRemoveDropShadow");
 
   EffectsView view = EffectsView::New( EffectsView::DROP_SHADOW );
   DALI_TEST_CHECK( view );
@@ -187,6 +187,7 @@ int UtcDaliEffectsViewAddRemoveEmboss(void)
   END_TEST;
 }
 
+
 int UtcDaliEffectsViewGetTypeP(void)
 {
   ToolkitTestApplication application;
index 2232cd3..3bb7da1 100644 (file)
@@ -22,6 +22,7 @@
 #include <dali/integration-api/events/touch-event-integ.h>
 #include <dali-toolkit/devel-api/controls/tool-bar/tool-bar.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include "dummy-control.h"
 
 using namespace Dali;
 using namespace Toolkit;
@@ -37,14 +38,15 @@ static void TestCallback(BaseHandle handle)
 
 Actor CreateColorActor( const Vector4& color )
 {
-  Actor solidColorActor = Actor::New();
+  DummyControl solidColorActor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(solidColorActor.GetImplementation());
 
   VisualFactory factory = VisualFactory::Get();
   Dali::Property::Map map;
   map[ Visual::Property::TYPE ] = Visual::COLOR;
   map[ ColorVisual::Property::MIX_COLOR ] = color;
   Visual::Base colorVisual = factory.CreateVisual( map );
-  colorVisual.SetOnStage( solidColorActor );
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, colorVisual );
 
   return solidColorActor;
 }
index 8450f3f..21e201b 100644 (file)
@@ -121,6 +121,7 @@ int UtcDaliVideoViewProperty1b(void)
 
   Toolkit::VideoView view = Toolkit::VideoView::New();
   DALI_TEST_CHECK( view );
+  Stage stage = Stage::GetCurrent();
 
   std::string file;
   Property::Map map;
@@ -132,6 +133,8 @@ int UtcDaliVideoViewProperty1b(void)
                     .Add("width", 100)
                     .Add("height", 100) );
 
+  stage.Add( view );
+
   Property::Value val = view.GetProperty( VideoView::Property::VIDEO );
   Property::Map* resultMap = val.GetMap();
 
@@ -140,6 +143,8 @@ int UtcDaliVideoViewProperty1b(void)
   DALI_TEST_CHECK( value );
   DALI_TEST_EQUALS( value->Get<std::string>(), "video.mpg", TEST_LOCATION );
 
+  stage.Remove( view );
+
   END_TEST;
 }
 
@@ -180,6 +185,7 @@ int UtcDaliVideoViewProperty3(void)
   val = view.GetProperty( VideoView::Property::MUTED );
   DALI_TEST_CHECK( val.Get( muted ) );
   DALI_TEST_CHECK( muted );
+
   END_TEST;
 }
 
index ff64e24..75b4838 100644 (file)
@@ -147,17 +147,20 @@ int UtcDaliVisualSetGetDepthIndex(void)
 
   visual.SetDepthIndex( 1.f );
 
-  Actor actor = Actor::New();
-  actor.SetSize(200.f, 200.f);
-  Stage::GetCurrent().Add( actor );
-  visual.SetOnStage( actor );
+  DummyControl dummyControl = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummyControl.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+
+  dummyControl.SetSize(200.f, 200.f);
+  Stage::GetCurrent().Add( dummyControl );
 
-  int depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
+
+  int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
   DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
   DALI_TEST_EQUALS( visual.GetDepthIndex(), 1.f, TEST_LOCATION );
 
   visual.SetDepthIndex( -1.f );
-  depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
+  depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
   DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
   DALI_TEST_EQUALS( visual.GetDepthIndex(), -1.f, TEST_LOCATION );
 
@@ -293,20 +296,24 @@ int UtcDaliVisualSetOnOffStage(void)
   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
   Visual::Base visual = factory.CreateVisual( propertyMap );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+
   actor.SetSize(200.f, 200.f);
-  Stage::GetCurrent().Add( actor );
 
   application.SendNotification();
   application.Render(0);
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
-  visual.SetOnStage( actor );
+  Stage::GetCurrent().Add( actor );
+
   application.SendNotification();
   application.Render(0);
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
-  visual.SetOffStage( actor );
+  Stage::GetCurrent().Remove( actor );
+
   application.SendNotification();
   application.Render(0);
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
@@ -321,9 +328,12 @@ int UtcDaliVisualRemoveAndReset(void)
 
   VisualFactory factory = VisualFactory::Get();
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+
   actor.SetSize(200.f, 200.f);
   Stage::GetCurrent().Add( actor );
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   Visual::Base imageVisual;
   // test calling RemoveAndReset with an empty handle
@@ -339,11 +349,8 @@ int UtcDaliVisualRemoveAndReset(void)
 
   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
   imageVisual = factory.CreateVisual(image);
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, imageVisual );
   DALI_TEST_CHECK( imageVisual );
-
-  imageVisual.SetOnStage( actor );
-  application.SendNotification();
-  application.Render(0);
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
   imageVisual.RemoveAndReset( actor );
@@ -378,8 +385,6 @@ int UtcDaliVisualGetPropertyMap1(void)
   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
 
   // change the blend color
-  Actor actor;
-  colorVisual.RemoveAndReset( actor );
   propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
   colorVisual = factory.CreateVisual( propertyMap  );
   colorVisual.CreatePropertyMap( resultMap );
@@ -1080,10 +1085,12 @@ int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void)
 
   DALI_TEST_CHECK( batchImageVisual );
 
-  Actor actor = Actor::New();
-  batchImageVisual.SetOnStage( actor );
+  DummyControl dummyControl = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummyControl.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, batchImageVisual );
+  Stage::GetCurrent().Add( dummyControl );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  DALI_TEST_CHECK( dummyControl.GetRendererCount() == 1u );
 
   END_TEST;
 }
@@ -1100,11 +1107,12 @@ int UtcDaliVisualAnimateBorderVisual01(void)
   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, borderVisual );
   actor.SetSize(2000, 2000);
   actor.SetParentOrigin(ParentOrigin::CENTER);
   Stage::GetCurrent().Add(actor);
-  borderVisual.SetOnStage( actor );
 
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
 
@@ -1146,11 +1154,12 @@ int UtcDaliVisualAnimateBorderVisual02(void)
   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, borderVisual );
   actor.SetSize(2000, 2000);
   actor.SetParentOrigin(ParentOrigin::CENTER);
   Stage::GetCurrent().Add(actor);
-  borderVisual.SetOnStage( actor );
 
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
 
@@ -1189,11 +1198,12 @@ int UtcDaliVisualAnimateColorVisual(void)
   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, borderVisual );
   actor.SetSize(2000, 2000);
   actor.SetParentOrigin(ParentOrigin::CENTER);
   Stage::GetCurrent().Add(actor);
-  borderVisual.SetOnStage( actor );
 
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
 
@@ -1237,12 +1247,13 @@ int UtcDaliVisualAnimatePrimitiveVisual(void)
   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, borderVisual );
   actor.SetSize(2000, 2000);
   actor.SetParentOrigin(ParentOrigin::CENTER);
   actor.SetColor(Color::BLACK);
   Stage::GetCurrent().Add(actor);
-  borderVisual.SetOnStage( actor );
 
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
 
@@ -1386,10 +1397,13 @@ static void TestTransform( ToolkitTestApplication& application, Visual::Base vis
   }
 
   //Put the visual on the stage
-  Actor actor = Actor::New();
-  actor.SetSize(200.f, 200.f);
-  Stage::GetCurrent().Add( actor );
-  visual.SetOnStage( actor );
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+  actor.SetSize(2000, 2000);
+  actor.SetParentOrigin(ParentOrigin::CENTER);
+  Stage::GetCurrent().Add(actor);
+
   application.SendNotification();
   application.Render(0);
   Renderer renderer( actor.GetRendererAt(0) );
@@ -1597,9 +1611,14 @@ int UtcDaliNPatchVisualCustomShader(void)
   properties[Dali::Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
 
   Visual::Base visual = factory.CreateVisual( properties );
-  Actor dummy = Actor::New();
+
   // trigger creation through setting on stage
-  visual.SetOnStage( dummy );
+  DummyControl dummy = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(dummy.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+  dummy.SetSize(2000, 2000);
+  dummy.SetParentOrigin(ParentOrigin::CENTER);
+  Stage::GetCurrent().Add(dummy);
 
   Renderer renderer = dummy.GetRendererAt( 0 );
   Shader shader2 = renderer.GetShader();
@@ -1614,11 +1633,9 @@ int UtcDaliNPatchVisualCustomShader(void)
 
   END_TEST;
 }
-
 int UtcDaliGradientVisualBlendMode(void)
 {
   ToolkitTestApplication application;
-
   VisualFactory factory = VisualFactory::Get();
 
   Visual::Base opaqueGradientVisual = factory.CreateVisual(
index b6b42e3..7d36ae6 100644 (file)
@@ -25,6 +25,7 @@
 #include <dali/devel-api/images/nine-patch-image.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 #include <dali-toolkit/dali-toolkit.h>
+#include "dummy-control.h"
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -181,12 +182,15 @@ Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
 }
 
 void TestVisualRender( ToolkitTestApplication& application,
-                                Actor& actor,
-                                Visual::Base& visual,
-                                std::size_t expectedSamplers = 0,
-                                ImageDimensions imageDimensions = ImageDimensions(),
-                                Integration::ResourcePointer resourcePtr = Integration::ResourcePointer())
+                       DummyControl& actor,
+                       Visual::Base& visual,
+                       std::size_t expectedSamplers = 0,
+                       ImageDimensions imageDimensions = ImageDimensions(),
+                       Integration::ResourcePointer resourcePtr = Integration::ResourcePointer())
 {
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+
   if( resourcePtr )
   {
     // set the image size, for test case, this needs to be set before loading started
@@ -194,11 +198,9 @@ void TestVisualRender( ToolkitTestApplication& application,
   }
 
   actor.SetSize( 200.f, 200.f );
-  Stage::GetCurrent().Add( actor );
-  visual.SetSize( Vector2(200.f, 200.f) );
-  visual.SetOnStage( actor );
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  Stage::GetCurrent().Add( actor );
 
   application.SendNotification();
   application.Render();
@@ -217,11 +219,11 @@ void TestVisualRender( ToolkitTestApplication& application,
 
   if( resourcePtr )
   {
-    DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) ||
-                     application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceSynchronouslyFunc ));
+    DALI_TEST_EQUALS( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) ||
+                      application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceSynchronouslyFunc ), true, TEST_LOCATION);
   }
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
 
 }
 
@@ -307,7 +309,7 @@ int UtcDaliVisualFactoryGetColorVisual1(void)
   Visual::Base visual = factory.CreateVisual(propertyMap);
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual );
 
   Vector4 actualValue(Vector4::ZERO);
@@ -333,7 +335,7 @@ int UtcDaliVisualFactoryGetColorVisual2(void)
   Visual::Base visual = factory.CreateVisual( map );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual );
 
   Vector4 actualValue(Vector4::ZERO);
@@ -341,7 +343,7 @@ int UtcDaliVisualFactoryGetColorVisual2(void)
   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "mixColor", actualValue ) );
   DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
 
-  visual.SetOffStage( actor );
+  Stage::GetCurrent().Remove(actor);
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -365,11 +367,12 @@ int UtcDaliVisualFactoryGetBorderVisual1(void)
   Visual::Base visual = factory.CreateVisual(propertyMap);
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
   actor.SetSize(200.f, 200.f);
   Stage::GetCurrent().Add( actor );
   visual.SetSize(Vector2(200.f, 200.f));
-  visual.SetOnStage( actor );
 
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
   int blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLEND_MODE );
@@ -388,7 +391,7 @@ int UtcDaliVisualFactoryGetBorderVisual1(void)
   DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
   DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
 
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -412,11 +415,12 @@ int UtcDaliVisualFactoryGetBorderVisual2(void)
   Visual::Base visual = factory.CreateVisual( propertyMap );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
   actor.SetSize(200.f, 200.f);
   Stage::GetCurrent().Add( actor );
   visual.SetSize(Vector2(200.f, 200.f));
-  visual.SetOnStage( actor );
 
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
@@ -436,7 +440,7 @@ int UtcDaliVisualFactoryGetBorderVisual2(void)
   DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
   DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
 
-  visual.SetOffStage( actor );
+  actor.Unparent();
 
   // enable the anti-aliasing
   Dali::Property::Map map;
@@ -445,10 +449,10 @@ int UtcDaliVisualFactoryGetBorderVisual2(void)
   map[ BorderVisual::Property::SIZE   ] = testSize;
   map[ BorderVisual::Property::ANTI_ALIASING   ] = true;
   visual = factory.CreateVisual( map );
-  visual.SetOnStage( actor );
 
-  application.SendNotification();
-  application.Render(0);
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+  Stage::GetCurrent().Add( actor );
+
   blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLEND_MODE );
   DALI_TEST_EQUALS( static_cast<BlendMode::Type>(blendMode), BlendMode::ON, TEST_LOCATION );
 
@@ -486,11 +490,8 @@ int UtcDaliVisualFactoryGetLinearGradientVisual(void)
   DALI_TEST_CHECK( visual );
 
   // A lookup texture is generated and pass to shader as sampler
-  Actor actor = Actor::New();
-  TestVisualRender( application, actor, visual, 1u );
-
-  visual.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  DummyControl actor = DummyControl::New();
+  TestVisualRender( application, actor, visual, 1u);
 
   END_TEST;
 }
@@ -526,7 +527,7 @@ int UtcDaliVisualFactoryGetRadialGradientVisual(void)
   DALI_TEST_CHECK( visual );
 
   // A lookup texture is generated and pass to shader as sampler
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u );
 
   Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
@@ -566,10 +567,10 @@ int UtcDaliVisualFactoryDefaultOffsetsGradientVisual(void)
   DALI_TEST_CHECK( visual );
 
   // A lookup texture is generated and pass to shader as sampler
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u );
 
-  visual.SetOffStage( actor );
+  Stage::GetCurrent().Remove( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -590,7 +591,6 @@ int UtcDaliVisualFactoryGetImageVisual1(void)
   Visual::Base visual = factory.CreateVisual( propertyMap );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
   // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
   // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
 
@@ -603,13 +603,14 @@ int UtcDaliVisualFactoryGetImageVisual1(void)
   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
   bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height );
 
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u,
-                             ImageDimensions(width, height),
-                             Integration::ResourcePointer( bitmap ) );
+                    ImageDimensions(width, height),
+                    Integration::ResourcePointer( bitmap ) );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
-  visual.SetOffStage( actor );
+  Stage::GetCurrent().Remove( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -626,7 +627,6 @@ int UtcDaliVisualFactoryGetImageVisual2(void)
   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
   Visual::Base visual = factory.CreateVisual( image );
 
-  Actor actor = Actor::New();
   // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
   // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
 
@@ -640,12 +640,12 @@ int UtcDaliVisualFactoryGetImageVisual2(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u,
-                             ImageDimensions(width, height),
-                             Integration::ResourcePointer(bitmap) );
+                    ImageDimensions(width, height),
+                    Integration::ResourcePointer(bitmap) );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
-
   END_TEST;
 }
 
@@ -675,16 +675,18 @@ int UtcDaliVisualFactoryGetImageVisual3(void)
   Visual::Base visual = factory.CreateVisual( propertyMap );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
   TestGlAbstraction& gl = application.GetGlAbstraction();
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
   TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
   texParameterTrace.Enable( true );
 
-  actor.SetSize( 200.f, 200.f );
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+  actor.SetSize(2000, 2000);
+  actor.SetParentOrigin(ParentOrigin::CENTER);
   Stage::GetCurrent().Add( actor );
-  visual.SetOnStage( actor );
 
   // loading started
   application.SendNotification();
@@ -725,7 +727,7 @@ int UtcDaliVisualFactoryGetImageVisual3(void)
   DALI_TEST_CHECK( gl.GetUniformValue<Vector2>( "wrapMode", wrapModeUniform ) );
   DALI_TEST_EQUALS( wrapMode, wrapModeUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
-  visual.SetOffStage( actor );
+  actor.Unparent( );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -757,16 +759,18 @@ int UtcDaliVisualFactoryGetImageVisual4(void)
   Visual::Base visual = factory.CreateVisual( propertyMap );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
   TestGlAbstraction& gl = application.GetGlAbstraction();
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
   TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
   texParameterTrace.Enable( true );
 
-  actor.SetSize( 200.f, 200.f );
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+  actor.SetSize(2000, 2000);
+  actor.SetParentOrigin(ParentOrigin::CENTER);
   Stage::GetCurrent().Add( actor );
-  visual.SetOnStage( actor );
 
   // loading started
   application.SendNotification();
@@ -803,7 +807,7 @@ int UtcDaliVisualFactoryGetImageVisual4(void)
   Property::Index wrapModeIndex = renderer.GetPropertyIndex( "wrapMode" );
   DALI_TEST_CHECK(wrapModeIndex == Property::INVALID_INDEX);
 
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -833,15 +837,15 @@ int UtcDaliVisualFactoryGetNPatchVisual1(void)
     Visual::Base visual = factory.CreateVisual( propertyMap );
     DALI_TEST_CHECK( visual );
 
-    Actor actor = Actor::New();
 
     TestGlAbstraction& gl = application.GetGlAbstraction();
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
 
+    DummyControl actor = DummyControl::New();
     TestVisualRender( application, actor, visual, 1u,
-                               ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
-                               ninePatchResource );
+                      ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
+                      ninePatchResource );
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
   }
@@ -852,15 +856,14 @@ int UtcDaliVisualFactoryGetNPatchVisual1(void)
     Visual::Base visual = factory.CreateVisual( propertyMap );
     DALI_TEST_CHECK( visual );
 
-    Actor actor = Actor::New();
-
     TestGlAbstraction& gl = application.GetGlAbstraction();
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
 
+    DummyControl actor = DummyControl::New();
     TestVisualRender( application, actor, visual, 1u,
-                               ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
-                               ninePatchResource );
+                      ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
+                      ninePatchResource );
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
   }
@@ -896,19 +899,18 @@ int UtcDaliVisualFactoryGetNPatchVisual2(void)
     Visual::Base visual = factory.CreateVisual( propertyMap );
     DALI_TEST_CHECK( visual );
 
-    Actor actor = Actor::New();
     TestGlAbstraction& gl = application.GetGlAbstraction();
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
 
+    DummyControl actor = DummyControl::New();
     TestVisualRender( application, actor, visual, 1u,
-                               ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
-                               ninePatchResource );
-
+                      ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
+                      ninePatchResource );
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
-    visual.SetOffStage( actor );
+    Stage::GetCurrent().Remove( actor );
     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
   }
 
@@ -921,15 +923,15 @@ int UtcDaliVisualFactoryGetNPatchVisual2(void)
     TestGlAbstraction& gl = application.GetGlAbstraction();
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
-    Actor actor = Actor::New();
+    DummyControl actor = DummyControl::New();
     TestVisualRender( application, actor, visual, 1u,
-                               ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
-                               ninePatchResource );
+                      ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
+                      ninePatchResource );
 
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
-    visual.SetOffStage( actor );
+    Stage::GetCurrent().Remove( actor );
     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
   }
 
@@ -955,15 +957,14 @@ int UtcDaliVisualFactoryGetNPatchVisual3(void)
   Visual::Base visual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
-
   TestGlAbstraction& gl = application.GetGlAbstraction();
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u,
-                             ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
-                             ninePatchResource );
+                    ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
+                    ninePatchResource );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
@@ -1003,15 +1004,14 @@ int UtcDaliVisualFactoryGetNPatchVisual4(void)
   Visual::Base visual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
-
   TestGlAbstraction& gl = application.GetGlAbstraction();
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u,
-                             ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
-                             ninePatchResource );
+                    ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
+                    ninePatchResource );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
@@ -1031,8 +1031,6 @@ int UtcDaliVisualFactoryGetNPatchVisualN1(void)
   Visual::Base visual = factory.CreateVisual( "ERROR.9.jpg", ImageDimensions() );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
-
   //The testkit still has to load a bitmap for the broken renderer image
   Integration::Bitmap* bitmap = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD);
   bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 100, 100, 100, 100 );
@@ -1041,9 +1039,10 @@ int UtcDaliVisualFactoryGetNPatchVisualN1(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u,
-                             ImageDimensions(),
-                             Integration::ResourcePointer(bitmap) );
+                    ImageDimensions(),
+                    Integration::ResourcePointer(bitmap) );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
@@ -1067,8 +1066,6 @@ int UtcDaliVisualFactoryGetNPatchVisualN2(void)
   Visual::Base visual = factory.CreateVisual( propertyMap );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
-
   //The testkit still has to load a bitmap for the broken renderer image
   Integration::Bitmap* bitmap = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD);
   bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 100, 100, 100, 100 );
@@ -1076,10 +1073,13 @@ int UtcDaliVisualFactoryGetNPatchVisualN2(void)
   TestGlAbstraction& gl = application.GetGlAbstraction();
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
+  TraceCallStack& drawTrace = gl.GetDrawTrace();
+  drawTrace.Enable(true);
 
+  DummyControl actor = DummyControl::New();
   TestVisualRender( application, actor, visual, 1u,
-                             ImageDimensions(),
-                             Integration::ResourcePointer(bitmap) );
+                    ImageDimensions(),
+                    Integration::ResourcePointer(bitmap) );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
@@ -1119,11 +1119,13 @@ int UtcDaliVisualFactoryGetSvgVisual(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
   visual.SetSize( Vector2(200.f, 200.f) );
-  visual.SetOnStage( actor );
+
   application.SendNotification();
   application.Render();
 
@@ -1161,9 +1163,11 @@ int UtcDaliVisualFactoryGetSvgVisualLarge(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
   Stage::GetCurrent().Add( actor );
-  visual.SetOnStage( actor );
+
   application.SendNotification();
   application.Render();
 
@@ -1200,11 +1204,12 @@ void MeshVisualLoadsCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplic
   DALI_TEST_CHECK( visual );
 
   //Create an actor on stage to house the visual.
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
   visual.SetSize( Vector2( 200.f, 200.f ) );
-  visual.SetOnStage( actor );
 
   //Ensure set on stage.
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
@@ -1230,7 +1235,7 @@ void MeshVisualLoadsCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplic
   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
   //Finish by setting off stage, and ensuring this was successful.
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
@@ -1246,11 +1251,12 @@ void MeshVisualDoesNotLoadCorrectlyTest( Property::Map& propertyMap, ToolkitTest
   DALI_TEST_CHECK( visual );
 
   //Create an actor on stage to house the visual.
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
   visual.SetSize( Vector2( 200.f, 200.f ) );
-  visual.SetOnStage( actor );
 
   //Ensure set on stage.
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
@@ -1272,7 +1278,7 @@ void MeshVisualDoesNotLoadCorrectlyTest( Property::Map& propertyMap, ToolkitTest
   DALI_TEST_CHECK( !application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
 
   //Finish by setting off stage, and ensuring this was successful.
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
@@ -1526,11 +1532,13 @@ void TestPrimitiveVisualWithProperties( Property::Map& propertyMap, ToolkitTestA
   DALI_TEST_CHECK( visual );
 
   //Create an actor on stage to house the visual.
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
+
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
   visual.SetSize( Vector2( 200.f, 200.f ) );
-  visual.SetOnStage( actor );
 
   //Ensure set on stage.
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
@@ -1548,7 +1556,7 @@ void TestPrimitiveVisualWithProperties( Property::Map& propertyMap, ToolkitTestA
   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
   //Finish by setting off stage, and ensuring this was successful.
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
@@ -1945,21 +1953,22 @@ int UtcDaliVisualFactoryGetBatchImageVisual1(void)
   Visual::Base visual = factory.CreateVisual( propertyMap );
   DALI_TEST_CHECK( visual );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
 
   actor.SetSize( 200.0f, 200.0f );
   Stage::GetCurrent().Add( actor );
   visual.SetSize( Vector2( 200.0f, 200.0f ) );
 
   // Test SetOnStage().
-  visual.SetOnStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
   application.SendNotification();
   application.Render();
 
   // Test SetOffStage().
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
@@ -1993,21 +2002,22 @@ int UtcDaliVisualFactoryGetBatchImageVisual2(void)
   DALI_TEST_CHECK( value );
   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::IMAGE, TEST_LOCATION );
 
-  Actor actor = Actor::New();
+  DummyControl actor = DummyControl::New();
+  DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
+  dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
 
   actor.SetSize( 200.0f, 200.0f );
   Stage::GetCurrent().Add( actor );
   visual.SetSize( Vector2( 200.0f, 200.0f ) );
 
   // Test SetOnStage().
-  visual.SetOnStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
   application.SendNotification();
   application.Render();
 
   // Test SetOffStage().
-  visual.SetOffStage( actor );
+  actor.Unparent();
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
index 7a4821b..f2f2f8c 100644 (file)
@@ -91,21 +91,11 @@ float Visual::Base::GetDepthIndex() const
   return GetImplementation( *this ).GetDepthIndex();
 }
 
-void Visual::Base::SetOnStage( Actor& actor )
-{
-  GetImplementation( *this ).SetOnStage( actor );
-}
-
-void Visual::Base::SetOffStage( Actor& actor )
-{
-  GetImplementation( *this ).SetOffStage( actor );
-}
-
 void Visual::Base::RemoveAndReset( Actor& actor )
 {
   if( actor && *this )
   {
-    SetOffStage( actor );
+    GetImplementation(*this).SetOffStage( actor );
   }
   Reset();
 }
index 49e8cf0..4196276 100644 (file)
@@ -177,25 +177,6 @@ public:
   float GetDepthIndex() const;
 
   /**
-   * @brief Visual needs to know when the control is put on to the stage to add the renderer.
-   *
-   * This function should be called when the control is put on to the stage.
-   *
-   * @param[in] actor The actor using this visual.
-   * @post SetOffStage should be called with the same actor when the control is put off stage otherwise memory will be leaked
-   */
-  void SetOnStage( Actor& actor );
-
-  /**
-   * @brief Visual needs to know when the control is removed from the stage to remove the renderer.
-   *
-   * This function should be called when the control is removed from the stage
-   *
-   * @param[in] actor The actor using this visual.
-   */
-  void SetOffStage( Actor& actor );
-
-  /**
    * @brief Remove the renderer from the actor and reset the visual self.
    *
    * This function can be called with an empty handle. If the visual is empty, this is a no-op.
index b53d029..44bc39b 100644 (file)
@@ -22,6 +22,7 @@
 #include <dali/public-api/animation/constraint.h>
 #include <dali/public-api/animation/constraints.h>
 #include <dali/public-api/common/stage.h>
+#include <dali/public-api/object/property.h>
 #include <dali/public-api/object/property-map.h>
 #include <dali/public-api/object/type-registry.h>
 #include <dali/public-api/object/type-registry-helper.h>
@@ -67,6 +68,10 @@ const float         ARBITRARY_FIELD_OF_VIEW = Math::PI / 4.0f;
 const Vector4       EFFECTS_VIEW_DEFAULT_BACKGROUND_COLOR( 1.0f, 1.0f, 1.0f, 0.0 );
 const bool          EFFECTS_VIEW_REFRESH_ON_DEMAND(false);
 
+// Visuals are not stylable or public
+const Property::Index CHILD_VISUAL( Toolkit::EffectsView::ANIMATABLE_PROPERTY_START_INDEX - 1);
+const Property::Index POST_FILTER_VISUAL( CHILD_VISUAL-1 );
+
 #define DALI_COMPOSE_SHADER(STR) #STR
 
 const char* EFFECTS_VIEW_VERTEX_SOURCE = DALI_COMPOSE_SHADER(
@@ -188,6 +193,8 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type )
     FrameBufferImage dummyImage = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat );
 
     Internal::InitializeVisual( self, mVisualPostFilter, dummyImage );
+    RegisterVisual( POST_FILTER_VISUAL, mVisualPostFilter );
+
     Property::Map customShader;
     customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = EFFECTS_VIEW_VERTEX_SOURCE;
     customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = EFFECTS_VIEW_FRAGMENT_SOURCE;
@@ -304,16 +311,6 @@ void EffectsView::OnStageConnection( int depth )
   Control::OnStageConnection( depth );
 
   Enable();
-
-  Actor self = Self();
-  if( mVisualPostFilter )
-  {
-    mVisualPostFilter.SetOnStage( self );
-  }
-  if( mVisualForChildren )
-  {
-    mVisualForChildren.SetOnStage( self );
-  }
 }
 
 void EffectsView::OnStageDisconnection()
@@ -326,16 +323,6 @@ void EffectsView::OnStageDisconnection()
     mFilters[i]->Disable();
   }
 
-  Actor self = Self();
-  if( mVisualPostFilter )
-  {
-    mVisualPostFilter.SetOffStage( self );
-  }
-  if( mVisualForChildren )
-  {
-    mVisualForChildren.SetOffStage( self );
-  }
-
   Control::OnStageDisconnection();
 }
 
@@ -440,6 +427,7 @@ void EffectsView::AllocateResources()
 
     mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat );
     Internal::InitializeVisual( self, mVisualForChildren, mImageForChildren );
+    RegisterVisual( CHILD_VISUAL, mVisualForChildren );
     mVisualForChildren.SetDepthIndex( DepthIndex::CONTENT+1 );
 
     mImagePostFilter = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat );
index 8bf498e..9a5f6a2 100644 (file)
@@ -275,4 +275,3 @@ inline const Toolkit::Internal::EffectsView& GetImpl( const Toolkit::EffectsView
 } // namespace Dali
 
 #endif // __DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H__
-
index 2a8cc3f..84af28f 100644 (file)
@@ -31,6 +31,7 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/visuals/border-visual-properties.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
 #include <dali-toolkit/devel-api/visual-factory/devel-visual-properties.h>
 
 namespace Dali
@@ -271,7 +272,7 @@ void Magnifier::SetFrameVisibility(bool visible)
     map[ Toolkit::BorderVisual::Property::COLOR ] = Color::WHITE;
     map[ Toolkit::BorderVisual::Property::SIZE   ] = IMAGE_BORDER_INDENT;
     Toolkit::Visual::Base borderVisual = visualFactory.CreateVisual( map );
-    borderVisual.SetOnStage( mFrame );
+    Toolkit::GetImplementation(borderVisual).SetOnStage( mFrame );
 
     Constraint constraint = Constraint::New<Vector3>( mFrame, Actor::Property::POSITION, EqualToConstraint() );
     constraint.AddSource( ParentSource( Actor::Property::WORLD_POSITION ) );
index c7c23f8..305db7d 100644 (file)
@@ -171,13 +171,12 @@ void SuperBlurView::SetImage(Image inputImage)
 
   mInputImage = inputImage;
   Actor self( Self() );
-  Internal::InitializeVisual( self, mVisuals[0], mInputImage );
+
+  mVisuals[0].RemoveAndReset( self );
+  mVisuals[0] = Toolkit::VisualFactory::Get().CreateVisual( mInputImage );
+  RegisterVisual( 0, mVisuals[0] );
   mVisuals[0].SetDepthIndex(0);
   SetShaderEffect( mVisuals[0] );
-  if( self.OnStage() )
-  {
-    mVisuals[0].SetOnStage( self );
-  }
 
   BlurImage( 0,  inputImage);
   for(unsigned int i=1; i<mBlurLevels;i++)
@@ -282,28 +281,24 @@ void SuperBlurView::OnSizeSet( const Vector3& targetSize )
       float exponent = static_cast<float>(i);
       mBlurredImage[i-1] = FrameBufferImage::New( mTargetSize.width/std::pow(2.f,exponent) , mTargetSize.height/std::pow(2.f,exponent),
                                                 GAUSSIAN_BLUR_RENDER_TARGET_PIXEL_FORMAT );
-      Internal::InitializeVisual( self, mVisuals[i], mBlurredImage[i - 1] );
-      mVisuals[ i ].SetDepthIndex( i );
-      SetShaderEffect( mVisuals[ i ] );
+
+      mVisuals[i].RemoveAndReset( self );
+      mVisuals[i] =  Toolkit::VisualFactory::Get().CreateVisual( mBlurredImage[i - 1] );
+      RegisterVisual( i, mVisuals[i] );
+      mVisuals[i].SetDepthIndex( i );
+      SetShaderEffect( mVisuals[i] );
     }
 
     if( mInputImage )
     {
       SetImage( mInputImage );
     }
-
-    if( self.OnStage() )
-    {
-      for( unsigned int i = 1; i <= mBlurLevels; i++ )
-      {
-        mVisuals[i].SetOnStage( self );
-      }
-    }
   }
 }
 
 void SuperBlurView::OnStageConnection( int depth )
 {
+  // Chaining up first ensures visuals have SetOnStage called to create their renderers
   Control::OnStageConnection( depth );
 
   if( mTargetSize == Vector2::ZERO )
@@ -312,17 +307,8 @@ void SuperBlurView::OnStageConnection( int depth )
   }
 
   Actor self = Self();
-  if( mVisuals[0] )
-  {
-    mVisuals[0].SetOnStage( self );
-  }
   for(unsigned int i=1; i<=mBlurLevels;i++)
   {
-    if( mVisuals[i] )
-    {
-      mVisuals[i].SetOnStage( self );
-    }
-
     Renderer renderer = self.GetRendererAt( i );
     Property::Index index = renderer.RegisterProperty( ALPHA_UNIFORM_NAME, 0.f );
     Constraint constraint = Constraint::New<float>( renderer, index, ActorOpacityConstraint(mBlurLevels, i-1) );
@@ -333,17 +319,6 @@ void SuperBlurView::OnStageConnection( int depth )
 
 void SuperBlurView::OnStageDisconnection( )
 {
-  if( mTargetSize == Vector2::ZERO )
-  {
-    return;
-  }
-
-  Actor self = Self();
-  for(unsigned int i=0; i<mBlurLevels+1;i++)
-  {
-    mVisuals[i].SetOffStage( self );
-  }
-
   Control::OnStageDisconnection();
 }
 
index 6a4a541..bd03bf2 100644 (file)
@@ -444,7 +444,7 @@ void VideoView::OnStageConnection( int depth )
   if( mVisual )
   {
     CustomActor self = Self();
-    mVisual.SetOnStage( self );
+    Toolkit::GetImplementation(mVisual).SetOnStage( self );
   }
 }
 
@@ -453,7 +453,7 @@ void VideoView::OnStageDisconnection()
   if( mVisual )
   {
     CustomActor self = Self();
-    mVisual.SetOffStage( self );
+    Toolkit::GetImplementation(mVisual).SetOffStage( self );
   }
 
   Control::OnStageDisconnection();
index 92095dc..660c86c 100644 (file)
@@ -163,8 +163,8 @@ void EmbossFilter::Disable()
 
     if( mActorForComposite )
     {
-      mVisualForEmboss1.SetOffStage( mActorForComposite );
-      mVisualForEmboss2.SetOffStage( mActorForComposite );
+      Toolkit::GetImplementation(mVisualForEmboss1).SetOffStage( mActorForComposite );
+      Toolkit::GetImplementation(mVisualForEmboss2).SetOffStage( mActorForComposite );
       mVisualForEmboss1.Reset();
       mVisualForEmboss2.Reset();
       mRootActor.Remove( mActorForComposite );
index 58f7d4f..7444e44 100644 (file)
@@ -759,7 +759,7 @@ void Control::RegisterVisual( Property::Index index, Toolkit::Visual::Base& visu
       {
         if( (*iter)->visual && self.OnStage() )
         {
-          (*iter)->visual.SetOffStage( self );
+          Toolkit::GetImplementation((*iter)->visual).SetOffStage( self );
         }
         (*iter)->visual = visual;
         visualReplaced = true;
@@ -773,7 +773,7 @@ void Control::RegisterVisual( Property::Index index, Toolkit::Visual::Base& visu
 
   if( visual && self.OnStage() && enabled )
   {
-    visual.SetOnStage( self );
+    Toolkit::GetImplementation(visual).SetOnStage( self );
   }
 }
 
@@ -814,11 +814,11 @@ void Control::EnableVisual( Property::Index index, bool enable )
       if ( enable )
       {
 
-        (*iter)->visual.SetOnStage( parentActor );
+        Toolkit::GetImplementation((*iter)->visual).SetOnStage( parentActor );
       }
       else
       {
-        (*iter)->visual.SetOffStage( parentActor );  // No need to call if control not staged.
+        Toolkit::GetImplementation((*iter)->visual).SetOffStage( parentActor );  // No need to call if control not staged.
       }
     }
   }
@@ -1091,7 +1091,7 @@ void Control::OnStageConnection( int depth )
     if( (*iter)->visual && (*iter)->enabled )
     {
       Actor self( Self() );
-      (*iter)->visual.SetOnStage( self );
+      Toolkit::GetImplementation((*iter)->visual).SetOnStage( self );
     }
   }
 }
@@ -1104,7 +1104,7 @@ void Control::OnStageDisconnection()
     if( (*iter)->visual )
     {
       Actor self( Self() );
-      (*iter)->visual.SetOffStage( self );
+      Toolkit::GetImplementation((*iter)->visual).SetOffStage( self );
     }
   }
 }