{
//custom shader
const char * const CUSTOM_SHADER( "shader" );
-const char * const CUSTOM_VERTEX_SHADER( "vertex-shader" );
-const char * const CUSTOM_FRAGMENT_SHADER( "fragment-shader" );
-const char * const CUSTOM_SUBDIVIDE_GRID_X( "subdivide-grid-x" );
-const char * const CUSTOM_SUBDIVIDE_GRID_Y( "subdivide-grid-y" );
+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
}
delete mImpl;
}
-void ControlRenderer::Initialize( const Property::Map& propertyMap )
+void ControlRenderer::Initialize( Actor& actor, const Property::Map& propertyMap )
{
if( mImpl->mCustomShader )
{
}
}
}
- DoInitialize( propertyMap );
-
- if( mImpl->mIsOnStage )
- {
- InitializeRenderer( mImpl->mRenderer );
- }
+ DoInitialize( actor, propertyMap );
}
void ControlRenderer::SetSize( const Vector2& size )
void ControlRenderer::SetClipRect( const Rect<int>& clipRect )
{
- mImpl->mClipRect = clipRect;
}
void ControlRenderer::SetOffset( const Vector2& offset )
mImpl->mDepthIndex = index;
if( mImpl->mRenderer )
{
- mImpl->mRenderer.SetDepthIndex( mImpl->mDepthIndex );
+ mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_INDEX, mImpl->mDepthIndex );
}
}
return mImpl->mDepthIndex;
}
-void ControlRenderer::SetCachedRendererKey( const std::string& cachedRendererKey )
+void ControlRenderer::SetOnStage( Actor& actor )
{
- if( mImpl->mCachedRendererKey == cachedRendererKey )
- {
- return;
- }
- if( !mImpl->mIsOnStage )
- {
- mImpl->mCachedRendererKey = cachedRendererKey;
- }
- else
- {
- //remove the cached renderer from the cache if we and the cache are the only things that hold a reference to it
- if( mImpl->mCachedRenderer && mImpl->mCachedRenderer->ReferenceCount() == 2 )
- {
- mFactoryCache.RemoveRenderer( mImpl->mCachedRenderer->mKey );
- }
- mImpl->mCachedRenderer.Reset();
+ DoSetOnStage( actor );
- //add the new renderer
- mImpl->mCachedRendererKey = cachedRendererKey;
- if( !mImpl->mCachedRendererKey.empty() && !mImpl->mCustomShader )
- {
- DALI_ASSERT_DEBUG( mImpl->mRenderer && "The control render is on stage but it doesn't have a valid renderer.");
- mImpl->mCachedRenderer = mFactoryCache.SaveRenderer( mImpl->mCachedRendererKey, mImpl->mRenderer );
- }
- }
+ 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::SetOnStage( Actor& actor )
+void ControlRenderer::SetOffStage( Actor& actor )
{
- if( !mImpl->mCachedRendererKey.empty() && !mImpl->mCustomShader )
+ if( GetIsOnStage() )
{
- mImpl->mCachedRenderer = mFactoryCache.GetRenderer( mImpl->mCachedRendererKey );
- if( !mImpl->mCachedRenderer || !mImpl->mCachedRenderer->mRenderer )
- {
- InitializeRenderer( mImpl->mRenderer );
- mImpl->mCachedRenderer = mFactoryCache.SaveRenderer( mImpl->mCachedRendererKey, mImpl->mRenderer );
- }
+ DoSetOffStage( actor );
- if( mImpl->mCachedRenderer && mImpl->mCachedRenderer->mRenderer )
- {
- mImpl->mRenderer = mImpl->mCachedRenderer->mRenderer;
- }
+ mImpl->mFlags &= ~Impl::IS_ON_STAGE;
}
+}
- if( !mImpl->mRenderer )
+void ControlRenderer::EnablePreMultipliedAlpha( bool preMultipled )
+{
+ mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
+ if( mImpl->mRenderer )
{
- InitializeRenderer( mImpl->mRenderer );
+ mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, preMultipled);
}
-
- mImpl->mRenderer.SetDepthIndex( mImpl->mDepthIndex );
- actor.AddRenderer( mImpl->mRenderer );
- mImpl->mIsOnStage = true;
-
- DoSetOnStage( actor );
}
-void ControlRenderer::SetOffStage( Actor& actor )
+bool ControlRenderer::IsPreMultipliedAlphaEnabled() const
{
- if( mImpl->mIsOnStage )
- {
- DoSetOffStage( actor );
-
- //remove the cached renderer from the cache if we and the cache are the only things that hold a reference to it
- if( mImpl->mCachedRenderer && mImpl->mCachedRenderer->ReferenceCount() == 2 )
- {
- mFactoryCache.RemoveRenderer( mImpl->mCachedRenderer->mKey );
- }
- mImpl->mCachedRenderer.Reset();
-
- actor.RemoveRenderer( mImpl->mRenderer );
- mImpl->mRenderer.Reset();
-
- mImpl->mIsOnStage = false;
- }
+ return mImpl->mFlags & Impl::IS_PREMULTIPLIED_ALPHA;
}
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 );
}
- DoCreatePropertyMap( 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