X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fcontrol-renderer-impl.cpp;h=4155a9c42f10e83b95c5625671f3e717027b71d4;hb=36ac338ff7e9c299ce45818d77aa8f71c63a45aa;hp=acc3ead89666ba574a52a198c6099b7ec9a75336;hpb=4cc88bb89cb6ef65670780554480ecbbdecf0254;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp b/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp index acc3ead..4155a9c 100644 --- a/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp @@ -20,10 +20,22 @@ // EXTERNAL HEADER #include +#include //INTERNAL HEARDER #include +namespace +{ +//custom shader +const char * const CUSTOM_SHADER( "shader" ); +const char * const CUSTOM_VERTEX_SHADER( "vertexShader" ); +const char * const CUSTOM_FRAGMENT_SHADER( "fragmentShader" ); +const char * const CUSTOM_SUBDIVIDE_GRID_X( "subdivideGridX" ); +const char * const CUSTOM_SUBDIVIDE_GRID_Y( "subdivideGridY" ); +const char * const CUSTOM_SHADER_HINTS( "hints" ); ///< type INTEGER; (bitfield) values from enum Shader::Hints +} + namespace Dali { @@ -33,10 +45,10 @@ namespace Toolkit namespace Internal { -ControlRenderer::ControlRenderer() -: mImpl( new Impl() ) +ControlRenderer::ControlRenderer( RendererFactoryCache& factoryCache ) +: mImpl( new Impl() ), + mFactoryCache( factoryCache ) { - mImpl->mIsOnStage = false; } ControlRenderer::~ControlRenderer() @@ -44,14 +56,50 @@ ControlRenderer::~ControlRenderer() delete mImpl; } +void ControlRenderer::SetCustomShader( const Property::Map& shaderMap ) +{ + if( mImpl->mCustomShader ) + { + mImpl->mCustomShader->SetPropertyMap( shaderMap ); + } + else + { + mImpl->mCustomShader = new Impl::CustomShader( shaderMap ); + } +} + +void ControlRenderer::Initialize( Actor& actor, const Property::Map& propertyMap ) +{ + Property::Value* customShaderValue = propertyMap.Find( CUSTOM_SHADER ); + if( customShaderValue ) + { + Property::Map shaderMap; + if( customShaderValue->Get( shaderMap ) ) + { + SetCustomShader( shaderMap ); + } + } + + DoInitialize( actor, propertyMap ); +} + void ControlRenderer::SetSize( const Vector2& size ) { mImpl->mSize = size; } +const Vector2& ControlRenderer::GetSize() const +{ + return mImpl->mSize; +} + +void ControlRenderer::GetNaturalSize( Vector2& naturalSize ) const +{ + naturalSize = Vector2::ZERO; +} + void ControlRenderer::SetClipRect( const Rect& clipRect ) { - mImpl->mClipRect = clipRect; } void ControlRenderer::SetOffset( const Vector2& offset ) @@ -64,29 +112,55 @@ void ControlRenderer::SetDepthIndex( float index ) mImpl->mDepthIndex = index; if( mImpl->mRenderer ) { - mImpl->mRenderer.SetDepthIndex( mImpl->mDepthIndex ); + mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_INDEX, mImpl->mDepthIndex ); } } -void ControlRenderer::SetOnStage( Actor& actor ) +float ControlRenderer::GetDepthIndex() const { - Material material = Material::New( mImpl->mShader ); - mImpl->mRenderer = Renderer::New( mImpl->mGeometry, material ); - mImpl->mRenderer.SetDepthIndex( mImpl->mDepthIndex ); - actor.AddRenderer( mImpl->mRenderer ); - mImpl->mIsOnStage = true; + return mImpl->mDepthIndex; +} +void ControlRenderer::SetOnStage( Actor& actor ) +{ DoSetOnStage( actor ); + + mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, IsPreMultipliedAlphaEnabled()); + mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_INDEX, mImpl->mDepthIndex ); + actor.AddRenderer( mImpl->mRenderer ); + mImpl->mFlags |= Impl::IS_ON_STAGE; } void ControlRenderer::SetOffStage( Actor& actor ) { - DoSetOffStage( actor ); + if( GetIsOnStage() ) + { + DoSetOffStage( actor ); + + mImpl->mFlags &= ~Impl::IS_ON_STAGE; + } +} + +void ControlRenderer::EnablePreMultipliedAlpha( bool preMultipled ) +{ + if(preMultipled) + { + mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA; + } + else + { + mImpl->mFlags &= ~Impl::IS_PREMULTIPLIED_ALPHA; + } - actor.RemoveRenderer( mImpl->mRenderer ); - mImpl->mRenderer.Reset(); + if( mImpl->mRenderer ) + { + mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, preMultipled); + } +} - mImpl->mIsOnStage = false; +bool ControlRenderer::IsPreMultipliedAlphaEnabled() const +{ + return mImpl->mFlags & Impl::IS_PREMULTIPLIED_ALPHA; } void ControlRenderer::DoSetOnStage( Actor& actor ) @@ -95,6 +169,28 @@ void ControlRenderer::DoSetOnStage( Actor& actor ) void ControlRenderer::DoSetOffStage( Actor& actor ) { + actor.RemoveRenderer( mImpl->mRenderer ); + mImpl->mRenderer.Reset(); +} + +void ControlRenderer::CreatePropertyMap( Property::Map& map ) const +{ + DoCreatePropertyMap( map ); + + if( mImpl->mCustomShader ) + { + mImpl->mCustomShader->CreatePropertyMap( map ); + } +} + +bool ControlRenderer::GetIsOnStage() const +{ + return mImpl->mFlags & Impl::IS_ON_STAGE; +} + +bool ControlRenderer::GetIsFromCache() const +{ + return mImpl->mFlags & Impl::IS_FROM_CACHE; } } // namespace Internal