Prevent Image visuals creating a renderer and putting it on stage even if url provide...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / effects-view / effects-view-impl.cpp
index d65b8fd..24f82bc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include <dali/public-api/common/stage.h>
 #include <dali/public-api/object/property-map.h>
 #include <dali/public-api/object/type-registry.h>
-#include <dali/devel-api/object/type-registry-helper.h>
+#include <dali/public-api/object/type-registry-helper.h>
 #include <dali/public-api/render-tasks/render-task-list.h>
+#include <dali/public-api/rendering/renderer.h>
+#include <dali/devel-api/images/texture-set-image.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 #include <dali-toolkit/internal/filters/blur-two-pass-filter.h>
 #include <dali-toolkit/internal/filters/emboss-filter.h>
 #include <dali-toolkit/internal/filters/spread-filter.h>
+#include <dali-toolkit/internal/visuals/visual-base-impl.h>
 
 namespace Dali
 {
@@ -61,6 +66,8 @@ 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);
 
+#define DALI_COMPOSE_SHADER(STR) #STR
+
 const char* EFFECTS_VIEW_VERTEX_SOURCE = DALI_COMPOSE_SHADER(
   attribute mediump vec2 aPosition;\n
   varying mediump vec2 vTexCoord;\n
@@ -130,7 +137,7 @@ Toolkit::EffectsView EffectsView::New()
 }
 
 EffectsView::EffectsView()
-: Control( ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ),
+: Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ),
   mChildrenRoot(Actor::New()),
   mBackgroundColor( EFFECTS_VIEW_DEFAULT_BACKGROUND_COLOR ),
   mTargetSize( Vector2::ZERO ),
@@ -155,8 +162,6 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type )
     RemoveFilters();
 
     Actor self = Self();
-    Property::Map rendererMap;
-    rendererMap.Insert( "rendererType", "image" );
 
     switch( type )
     {
@@ -179,11 +184,13 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type )
       }
     }
 
+    FrameBufferImage dummyImage = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat );
+
+    InitializeVisual( self, mVisualPostFilter, dummyImage );
     Property::Map customShader;
-    customShader[ "vertexShader" ] = EFFECTS_VIEW_VERTEX_SOURCE;
-    customShader[ "fragmentShader" ] = EFFECTS_VIEW_FRAGMENT_SOURCE;
-    rendererMap[ "shader" ] = customShader;
-    Toolkit::RendererFactory::Get().ResetRenderer( mRendererPostFilter, self, rendererMap );
+    customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = EFFECTS_VIEW_VERTEX_SOURCE;
+    customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = EFFECTS_VIEW_FRAGMENT_SOURCE;
+    Toolkit::GetImplementation( mVisualPostFilter ).SetCustomShader( customShader );
 
     mEffectType = type;
   }
@@ -297,13 +304,13 @@ void EffectsView::OnStageConnection( int depth )
   Enable();
 
   Actor self = Self();
-  if( mRendererPostFilter )
+  if( mVisualPostFilter )
   {
-    mRendererPostFilter.SetOnStage( self );
+    mVisualPostFilter.SetOnStage( self );
   }
-  if( mRendererForChildren )
+  if( mVisualForChildren )
   {
-    mRendererForChildren.SetOnStage( self );
+    mVisualForChildren.SetOnStage( self );
   }
 }
 
@@ -318,13 +325,13 @@ void EffectsView::OnStageDisconnection()
   }
 
   Actor self = Self();
-  if( mRendererPostFilter )
+  if( mVisualPostFilter )
   {
-    mRendererPostFilter.SetOffStage( self );
+    mVisualPostFilter.SetOffStage( self );
   }
-  if( mRendererForChildren )
+  if( mVisualForChildren )
   {
-    mRendererForChildren.SetOffStage( self );
+    mVisualForChildren.SetOffStage( self );
   }
 
   Control::OnStageDisconnection();
@@ -427,16 +434,17 @@ void EffectsView::AllocateResources()
     mLastSize = mTargetSize;
     SetupCameras();
 
-    Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get();
-    Actor self = Self();
+    Actor self( Self() );
 
-    mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED );
-    rendererFactory.ResetRenderer(mRendererForChildren, self, mImageForChildren);
-    mRendererForChildren.SetDepthIndex( DepthIndex::CONTENT+1 );
+    mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat );
+    InitializeVisual( self, mVisualForChildren, mImageForChildren );
+    mVisualForChildren.SetDepthIndex( DepthIndex::CONTENT+1 );
 
-    mImagePostFilter = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED );
-    rendererFactory.ResetRenderer(mRendererPostFilter, self, mImagePostFilter);
-    mRendererPostFilter.SetDepthIndex( DepthIndex::CONTENT );
+    mImagePostFilter = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat );
+    TextureSet textureSet = TextureSet::New();
+    TextureSetImage( textureSet, 0u,  mImagePostFilter );
+    self.GetRendererAt( 0 ).SetTextures( textureSet );
+    mVisualPostFilter.SetDepthIndex( DepthIndex::CONTENT );
 
     SetupFilters();
   }