From 5afff65aae99eeaf0d4fc548784431924ebd6235 Mon Sep 17 00:00:00 2001 From: Chu Hoang Date: Tue, 3 Nov 2015 13:56:12 +0000 Subject: [PATCH] Fixed RendererFactory::ResetRenderer not working correctly when actor is already on stage. Change-Id: Idbb0afabd09213f04b9cf95a4d7a83cc66d45ddd RendererFactory::ResetRenderer( Toolkit::ControlRenderer&, Actor&, const Property::Map& ) did not add the renderer to the actor if the actor was already on stage but without a previous control renderer attached. --- .../controls/renderers/renderer-factory-impl.cpp | 82 ++++++++++------------ 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp index 4e6bd38..ef698f4 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp @@ -140,20 +140,22 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Vector4& col void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Vector4& color ) { - ColorRenderer* rendererPtr = dynamic_cast< ColorRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetColor( color ); - } - else + if( renderer ) { - renderer.RemoveAndReset( actor ); - renderer = GetControlRenderer( color ); - - if( actor.OnStage() ) + ColorRenderer* rendererPtr = dynamic_cast< ColorRenderer* >( &GetImplementation( renderer ) ); + if( rendererPtr ) { - renderer.SetOnStage( actor ); + rendererPtr->SetColor( color ); + return; } + + renderer.RemoveAndReset( actor ); + } + + renderer = GetControlRenderer( color ); + if( actor && actor.OnStage() ) + { + renderer.SetOnStage( actor ); } } @@ -224,11 +226,12 @@ void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& return; } } + + renderer.RemoveAndReset( actor ); } - renderer.RemoveAndReset( actor ); renderer = GetControlRenderer( image ); - if( actor.OnStage() ) + if( actor && actor.OnStage() ) { renderer.SetOnStage( actor ); } @@ -280,11 +283,12 @@ void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& return; } } + + renderer.RemoveAndReset( actor ); } - renderer.RemoveAndReset( actor ); renderer = GetControlRenderer( url ); - if( actor.OnStage() ) + if( actor && actor.OnStage() ) { renderer.SetOnStage( actor ); } @@ -294,45 +298,31 @@ void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& { if( renderer ) { + ControlRenderer& controlRenderer = GetImplementation( renderer ); + Property::Value* type = propertyMap.Find( RENDERER_TYPE_NAME ); std::string typeValue ; - if( type && type->Get( typeValue )) + + //If there's no renderer type specified or if there hasn't been a renderer type change then we can reuse the renderer + if( !type || !type->Get( typeValue ) || + ( typeValue == IMAGE_RENDERER && typeid( controlRenderer ) == typeid( ImageRenderer ) ) || + ( typeValue == N_PATCH_RENDERER && typeid( controlRenderer ) == typeid( NPatchRenderer ) ) || + ( typeValue == COLOR_RENDERER && typeid( controlRenderer ) == typeid( ColorRenderer ) )|| + ( typeValue == GRADIENT_RENDERER && typeid( controlRenderer ) == typeid( GradientRenderer ) ) || + ( typeValue == BORDER_RENDERER && typeid( controlRenderer ) == typeid( BorderRenderer ) ) ) { - //If there's been a renderer type change then we have to return a new shader - if( typeValue == COLOR_RENDERER && typeid( renderer ) != typeid( ColorRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return; - } - else if( typeValue == GRADIENT_RENDERER && typeid( renderer ) != typeid( GradientRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return; - } - else if( typeValue == IMAGE_RENDERER && typeid( renderer ) != typeid( ImageRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return; - } - else if( typeValue == N_PATCH_RENDERER && typeid( renderer ) != typeid( NPatchRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return; - } - else if( typeValue == BORDER_RENDERER && typeid( renderer ) != typeid( BorderRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return; - } + controlRenderer.Initialize( actor, propertyMap ); + return; } - GetImplementation( renderer ).Initialize( actor, propertyMap ); + renderer.RemoveAndReset( actor ); } - else + + renderer = GetControlRenderer( propertyMap ); + if( actor && actor.OnStage() ) { - renderer = GetControlRenderer( propertyMap ); + renderer.SetOnStage( actor ); } - } Image RendererFactory::GetBrokenRendererImage() -- 2.7.4