X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fcolor%2Fcolor-renderer.cpp;h=0da8112e91a6bd8af8e20cd6cb4f3b83b514c353;hp=ab3306ab483d4a8517a45b1dcd4940ae4fb04bb1;hb=299e8f55adab64025e446c5dcd1e87f050e43f82;hpb=c560f95435d40fd3980cd5f92da65c9f28f440e7 diff --git a/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp b/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp index ab3306a..0da8112 100644 --- a/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp @@ -37,6 +37,8 @@ namespace Internal namespace { +const char * const RENDERER_TYPE("renderer-type"); +const char * const RENDERER_TYPE_VALUE("color-renderer"); const char * const COLOR_NAME("blend-color"); const char * const COLOR_UNIFORM_NAME("uBlendColor"); @@ -66,7 +68,8 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( } ColorRenderer::ColorRenderer() -: ControlRenderer() +: ControlRenderer(), + mBlendColorIndex( Property::INVALID_INDEX ) { } @@ -76,19 +79,7 @@ ColorRenderer::~ColorRenderer() void ColorRenderer::Initialize( RendererFactoryCache& factoryCache, const Property::Map& propertyMap ) { - mImpl->mGeometry = factoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY ); - if( !(mImpl->mGeometry) ) - { - mImpl->mGeometry = RendererFactoryCache::CreateQuadGeometry(); - factoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, mImpl->mGeometry ); - } - - mImpl->mShader = factoryCache.GetShader( RendererFactoryCache::COLOR_SHADER ); - if( !(mImpl->mShader) ) - { - mImpl->mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); - factoryCache.SaveShader( RendererFactoryCache::COLOR_SHADER, mImpl->mShader ); - } + Initialize( factoryCache ); Property::Value* color = propertyMap.Find( COLOR_NAME ); if( !( color && color->Get(mBlendColor) ) ) @@ -116,16 +107,53 @@ void ColorRenderer::SetOffset( const Vector2& offset ) //ToDo: renderer applies the offset } -void ColorRenderer::SetOnStage( Actor& actor ) +void ColorRenderer::CreatePropertyMap( Property::Map& map ) const { - ControlRenderer::SetOnStage(actor); - (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBlendColor ); + map.Clear(); + map.Insert( RENDERER_TYPE, RENDERER_TYPE_VALUE ); + map.Insert( COLOR_NAME, mBlendColor ); +} + +void ColorRenderer::DoSetOnStage( Actor& actor ) +{ + mBlendColorIndex = (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBlendColor ); if( mBlendColor.a < 1.f ) { (mImpl->mRenderer).GetMaterial().SetBlendMode( BlendingMode::ON ); } } +void ColorRenderer::Initialize( RendererFactoryCache& factoryCache) +{ + mImpl->mGeometry = factoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY ); + if( !(mImpl->mGeometry) ) + { + mImpl->mGeometry = RendererFactoryCache::CreateQuadGeometry(); + factoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, mImpl->mGeometry ); + } + + mImpl->mShader = factoryCache.GetShader( RendererFactoryCache::COLOR_SHADER ); + if( !(mImpl->mShader) ) + { + mImpl->mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + factoryCache.SaveShader( RendererFactoryCache::COLOR_SHADER, mImpl->mShader ); + } +} + +void ColorRenderer::SetColor(const Vector4& color) +{ + mBlendColor = color; + + if( mImpl->mIsOnStage ) + { + (mImpl->mRenderer).SetProperty( mBlendColorIndex, color ); + if( color.a < 1.f && (mImpl->mRenderer).GetMaterial().GetBlendMode() != BlendingMode::ON) + { + (mImpl->mRenderer).GetMaterial().SetBlendMode( BlendingMode::ON ); + } + } +} + } // namespace Internal } // namespace Toolkit