Merge "Refactored ControlRenderer so that derived classes are responsible for the...
authorKimmo Hoikka <kimmo.hoikka@samsung.com>
Tue, 27 Oct 2015 14:29:07 +0000 (07:29 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Tue, 27 Oct 2015 14:29:07 +0000 (07:29 -0700)
1  2 
dali-toolkit/internal/controls/image-view/image-view-impl.cpp
dali-toolkit/internal/controls/renderers/border/border-renderer.cpp
dali-toolkit/public-api/controls/control-impl.cpp

@@@ -73,24 -73,8 +73,8 @@@ void ImageView::SetImage( Image image 
  
      mImage = image;
  
-     bool newRendererCreated = false;
-     if( mRenderer )
-     {
-       newRendererCreated = Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, image );
-     }
-     else
-     {
-       mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( image );
-       newRendererCreated = true;
-     }
-     //we need to inform any newly created renderers if it is on stage
-     if( newRendererCreated && Self().OnStage() )
-     {
-       CustomActor self = Self();
-       mRenderer.SetOnStage( self );
-     }
+     Actor self = Self();
+     Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, image );
      mImageSize = image ? ImageDimensions( image.GetWidth(), image.GetHeight() ) : ImageDimensions( 0, 0 );
    }
  }
@@@ -99,23 -83,8 +83,8 @@@ void ImageView::SetImage( Property::Ma
  {
    mPropertyMap = map;
  
-   bool newRendererCreated = false;
-   if( mRenderer )
-   {
-     newRendererCreated = Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, mPropertyMap );
-   }
-   else
-   {
-     mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( mPropertyMap );
-     newRendererCreated = true;
-   }
-   //we need to inform any newly created renderers if it is on stage
-   CustomActor self = Self();
-   if( newRendererCreated && self.OnStage() )
-   {
-     mRenderer.SetOnStage( self );
-   }
+   Actor self = Self();
+   Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mPropertyMap );
  
    int width = 0;
    Property::Value* widthValue = mPropertyMap.Find( "width" );
@@@ -143,23 -112,8 +112,8 @@@ void ImageView::SetImage( const std::st
  
      mUrl = url;
  
-     bool newRendererCreated = false;
-     if( mRenderer )
-     {
-       newRendererCreated = Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, mUrl );
-     }
-     else
-     {
-       mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( mUrl );
-       newRendererCreated = true;
-     }
-     //we need to inform any newly created renderers if it is on stage
-     if( newRendererCreated && Self().OnStage() )
-     {
-       CustomActor self = Self();
-       mRenderer.SetOnStage( self );
-     }
+     Actor self = Self();
+     Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mUrl );
  
      mImageSize = ResourceImage::GetImageSize( mUrl );
    }
@@@ -173,7 -127,7 +127,7 @@@ Vector3 ImageView::GetNaturalSize(
    size.y = mImageSize.GetHeight();
    size.z = std::min(size.x, size.y);
  
 -  if( size.x > 0 && size.x > 0 )
 +  if( size.x > 0 && size.y > 0 )
    {
      return size;
    }
@@@ -215,8 -169,6 +169,8 @@@ float ImageView::GetWidthForHeight( flo
  
  void ImageView::OnStageConnection( int depth )
  {
 +  Control::OnStageConnection( depth );
 +
    if( mRenderer )
    {
      CustomActor self = Self();
@@@ -231,8 -183,6 +185,8 @@@ void ImageView::OnStageDisconnection(
      CustomActor self = Self();
      mRenderer.SetOffStage( self );
    }
 +
 +  Control::OnStageDisconnection();
  }
  
  
@@@ -88,7 -88,7 +88,7 @@@ BorderRenderer::~BorderRenderer(
  {
  }
  
- void BorderRenderer::DoInitialize( const Property::Map& propertyMap )
+ void BorderRenderer::DoInitialize( Actor& actor, const Property::Map& propertyMap )
  {
    Property::Value* color = propertyMap.Find( COLOR_NAME );
    if( !( color && color->Get(mBorderColor) ) )
@@@ -112,6 -112,8 +112,8 @@@ void BorderRenderer::SetClipRect( cons
  
  void BorderRenderer::DoSetOnStage( Actor& actor )
  {
+   InitializeRenderer();
    mBorderColorIndex = (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBorderColor );
    if( mBorderColor.a < 1.f )
    {
@@@ -128,43 -130,31 +130,31 @@@ void BorderRenderer::DoCreatePropertyMa
    map.Insert( SIZE_NAME, mBorderSize );
  }
  
- void BorderRenderer::InitializeRenderer( Renderer& renderer )
+ void BorderRenderer::InitializeRenderer()
  {
    Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::BORDER_GEOMETRY );
    if( !geometry )
    {
      geometry =  CreateBorderGeometry();
 -    mFactoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, geometry );
 +    mFactoryCache.SaveGeometry( RendererFactoryCache::BORDER_GEOMETRY, geometry );
    }
  
    Shader shader = mFactoryCache.GetShader( RendererFactoryCache::BORDER_SHADER );
    if( !shader )
    {
      shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
 -    mFactoryCache.SaveShader( RendererFactoryCache::COLOR_SHADER, shader );
 +    mFactoryCache.SaveShader( RendererFactoryCache::BORDER_SHADER, shader );
    }
  
-   if( !renderer )
-   {
-     Material material = Material::New( shader );
-     renderer = Renderer::New( geometry, material );
-   }
-   else
-   {
-     mImpl->mRenderer.SetGeometry( geometry );
-     Material material = mImpl->mRenderer.GetMaterial();
-     if( material )
-     {
-       material.SetShader( shader );
-     }
-   }
+   Material material = Material::New( shader );
+   mImpl->mRenderer = Renderer::New( geometry, material );
  }
  
  void BorderRenderer::SetBorderColor(const Vector4& color)
  {
    mBorderColor = color;
  
-   if( mImpl->mIsOnStage )
+   if( mImpl->mRenderer )
    {
      (mImpl->mRenderer).SetProperty( mBorderColorIndex, color );
      if( color.a < 1.f &&  (mImpl->mRenderer).GetMaterial().GetBlendMode() != BlendingMode::ON)
@@@ -178,7 -168,7 +168,7 @@@ void BorderRenderer::SetBorderSize( flo
  {
    mBorderSize = size;
  
-   if( mImpl->mIsOnStage )
+   if( mImpl->mRenderer )
    {
      (mImpl->mRenderer).SetProperty( mBorderSizeIndex, size );
    }
@@@ -406,24 -406,17 +406,17 @@@ void Control::SetBackgroundColor( cons
  
    if( mImpl->mBackgroundRenderer )
    {
-     Toolkit::ControlRenderer currentRenderer( mImpl->mBackgroundRenderer );
-     // if ResetRenderer returns false, we continue to use the current renderer with a new color set to it.
-     if( ! factory.ResetRenderer( mImpl->mBackgroundRenderer, color ) )
-     {
-       return;
-     }
-     // ResetRenderer returns true, a new renderer is created. Remove the current renderer and reset.
-     currentRenderer.RemoveAndReset( self );
+     factory.ResetRenderer( mImpl->mBackgroundRenderer, self, color );
    }
    else
    {
      mImpl->mBackgroundRenderer = factory.GetControlRenderer( color );
-   }
  
-   if( self.OnStage() )
-   {
-     mImpl->mBackgroundRenderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX );
-     mImpl->mBackgroundRenderer.SetOnStage( self );
+     if( self.OnStage() )
+     {
+       mImpl->mBackgroundRenderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX );
+       mImpl->mBackgroundRenderer.SetOnStage( self );
+     }
    }
  }
  
@@@ -463,30 -456,23 +456,23 @@@ void Control::SetBackgroundImage( Imag
  
    if(  mImpl->mBackgroundRenderer  )
    {
-     Toolkit::ControlRenderer currentRenderer( mImpl->mBackgroundRenderer );
-     // if ResetRenderer returns false, we continue to use the current renderer with a new image set to it.
-     if( ! factory.ResetRenderer( mImpl->mBackgroundRenderer, image )  )
-     {
-       return;
-     }
-     // ResetRenderer returns true, a new renderer is created. Remove the current renderer and reset.
-     currentRenderer.RemoveAndReset( self );
+     factory.ResetRenderer( mImpl->mBackgroundRenderer, self, image );
    }
    else
    {
      mImpl->mBackgroundRenderer = factory.GetControlRenderer( image );
-   }
  
-   if( self.OnStage() )
-   {
-     mImpl->mBackgroundRenderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX );
-     mImpl->mBackgroundRenderer.SetOnStage( self );
+     if( self.OnStage() )
+     {
+       mImpl->mBackgroundRenderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX );
+       mImpl->mBackgroundRenderer.SetOnStage( self );
+     }
    }
  }
  
  void Control::ClearBackground()
  {
-   Actor self(Self());
+   Actor self( Self() );
    mImpl->mBackgroundRenderer.RemoveAndReset( self );
  }
  
@@@ -810,6 -796,16 +796,6 @@@ void Control::EmitKeyInputFocusSignal( 
  
  void Control::OnStageConnection( int depth )
  {
 -  unsigned int controlRendererCount = Self().GetRendererCount();
 -  for( unsigned int i(0); i<controlRendererCount; ++i )
 -  {
 -    Renderer controlRenderer = Self().GetRendererAt(i);
 -    if( controlRenderer )
 -    {
 -      controlRenderer.SetDepthIndex( CONTENT_DEPTH_INDEX+depth );
 -    }
 -  }
 -
    if( mImpl->mBackgroundRenderer)
    {
      mImpl->mBackgroundRenderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX );