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 );
}
}
{
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" );
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 );
}
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;
}
void ImageView::OnStageConnection( int depth )
{
+ Control::OnStageConnection( depth );
+
if( mRenderer )
{
CustomActor self = Self();
CustomActor self = Self();
mRenderer.SetOffStage( self );
}
+
+ Control::OnStageDisconnection();
}
{
}
- 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) ) )
void BorderRenderer::DoSetOnStage( Actor& actor )
{
+ InitializeRenderer();
+
mBorderColorIndex = (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBorderColor );
if( mBorderColor.a < 1.f )
{
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)
{
mBorderSize = size;
- if( mImpl->mIsOnStage )
+ if( mImpl->mRenderer )
{
(mImpl->mRenderer).SetProperty( mBorderSizeIndex, size );
}
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 );
+ }
}
}
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 );
}
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 );