X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fcontrol-renderer-impl.cpp;h=7ac24904251a4b86597d3a3041def8b6a1600bf6;hb=638cc5c949cd2a31ddfd189c30b9a4b37e3e0a29;hp=115a6a22a98c5306d24b34f263f8a9c33b64364b;hpb=c560f95435d40fd3980cd5f92da65c9f28f440e7;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 115a6a2..7ac2490 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,8 +45,9 @@ namespace Toolkit namespace Internal { -ControlRenderer::ControlRenderer() -: mImpl( new Impl() ) +ControlRenderer::ControlRenderer( RendererFactoryCache& factoryCache ) +: mImpl( new Impl() ), + mFactoryCache( factoryCache ) { } @@ -43,11 +56,42 @@ ControlRenderer::~ControlRenderer() delete mImpl; } +void ControlRenderer::Initialize( Actor& actor, const Property::Map& propertyMap ) +{ + if( mImpl->mCustomShader ) + { + mImpl->mCustomShader->SetPropertyMap( propertyMap ); + } + else + { + Property::Value* customShaderValue = propertyMap.Find( CUSTOM_SHADER ); + if( customShaderValue ) + { + Property::Map customShader; + if( customShaderValue->Get( customShader ) ) + { + mImpl->mCustomShader = new Impl::CustomShader( propertyMap ); + } + } + } + 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; @@ -67,20 +111,60 @@ void ControlRenderer::SetDepthIndex( float index ) } } +float ControlRenderer::GetDepthIndex() const +{ + return mImpl->mDepthIndex; +} + void ControlRenderer::SetOnStage( Actor& actor ) { - Material material = Material::New( mImpl->mShader ); - mImpl->mRenderer = Renderer::New( mImpl->mGeometry, material ); + DoSetOnStage( actor ); + mImpl->mRenderer.SetDepthIndex( mImpl->mDepthIndex ); actor.AddRenderer( mImpl->mRenderer ); + mImpl->mFlags |= Impl::IS_ON_STAGE; } void ControlRenderer::SetOffStage( Actor& actor ) { + if( GetIsOnStage() ) + { + DoSetOffStage( actor ); + + mImpl->mFlags &= ~Impl::IS_ON_STAGE; + } +} + +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 } // namespace Toolkit