X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Frenderer-factory-impl.cpp;h=e1c75a2f46855f8f08f30375520142598daa50be;hp=cae5a2041f3804d56450c107be75a8b4d9c38d90;hb=526ca8a3ad82b0a08c0f0580284f28f0d647098d;hpb=1acdb36279de888dcef999e0e0e1460babdd983a diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp index cae5a20..e1c75a2 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp @@ -15,37 +15,31 @@ */ // CLASS HEADER -#include "renderer-factory-impl.h" +#include // EXTERNAL INCLUDES #include #include #include #include -#include +#include -// Internal HEADER +// INTERNAL INCLUDES #include #include #include #include #include #include +#include +#include +#include #include +#include #include namespace { -const char * const RENDERER_TYPE_NAME( "rendererType" ); - -const char * const COLOR_RENDERER("color"); -const char * const BORDER_RENDERER("border"); -const char * const GRADIENT_RENDERER("gradient"); -const char * const IMAGE_RENDERER("image"); -const char * const N_PATCH_RENDERER("nPatch"); - -const std::string TEXTURE_UNIFORM_NAME = "sTexture"; - const char * const BROKEN_RENDERER_IMAGE_URL( DALI_IMAGE_DIR "broken.png"); } @@ -82,14 +76,72 @@ RendererFactory::~RendererFactory() { } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Map& propertyMap ) +RendererFactory::RendererType RendererFactory::GetRendererType( const Property::Map& propertyMap ) { - ControlRenderer* rendererPtr = NULL; + RendererType rendererType = UNDEFINED; - Property::Value* type = propertyMap.Find( RENDERER_TYPE_NAME ); + Property::Value* type = propertyMap.Find( RENDERER_TYPE ); std::string typeValue ; if( type && type->Get( typeValue )) { + if( typeValue == COLOR_RENDERER ) + { + rendererType = COLOR; + } + else if( typeValue == BORDER_RENDERER ) + { + rendererType = BORDER; + } + else if( typeValue == GRADIENT_RENDERER ) + { + rendererType = GRADIENT; + } + else if( typeValue == IMAGE_RENDERER ) + { + rendererType = IMAGE; + } + else if( typeValue == MESH_RENDERER ) + { + rendererType = MESH; + } + else if( typeValue == PRIMITIVE_RENDERER ) + { + rendererType = PRIMITIVE; + } + } + + // check the url if exist, to decide the renderer type + if( rendererType == IMAGE || rendererType == UNDEFINED ) + { + Property::Value* imageURLValue = propertyMap.Find( IMAGE_URL_NAME ); + std::string imageUrl; + if( imageURLValue && imageURLValue->Get( imageUrl )) + { + if( NinePatchImage::IsNinePatchUrl( imageUrl ) ) + { + rendererType = N_PATCH; + } + else if( SvgRenderer::IsSvgUrl( imageUrl ) ) + { + rendererType = SVG; + } + else + { + rendererType = IMAGE; + } + } + } + + return rendererType; +} + +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Property::Map& propertyMap ) +{ + ControlRenderer* rendererPtr = NULL; + + RendererType type = GetRendererType( propertyMap ); + if( type != UNDEFINED) + { if( !mFactoryCache ) { mFactoryCache = new RendererFactoryCache(); @@ -99,27 +151,56 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Ma { return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); } + } - if( typeValue == COLOR_RENDERER ) + switch( type ) + { + case COLOR: { rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) ); + break; } - else if( typeValue == GRADIENT_RENDERER ) + case GRADIENT: + { + rendererPtr = new GradientRenderer( *( mFactoryCache.Get() ) ); + break; + } + case BORDER: { - rendererPtr = new GradientRenderer( *( mFactoryCache.Get() ) ); + rendererPtr = new BorderRenderer( *( mFactoryCache.Get() ) ); + break; } - else if( typeValue == IMAGE_RENDERER ) + case IMAGE: { CreateAtlasManager(); rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + break; } - else if( typeValue == N_PATCH_RENDERER ) + case N_PATCH: { rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); + break; } - else if( typeValue == BORDER_RENDERER ) + case SVG: { - rendererPtr = new BorderRenderer( *( mFactoryCache.Get() ) ); + CreateAtlasManager(); + rendererPtr = new SvgRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + break; + } + case MESH: + { + rendererPtr = new MeshRenderer( *( mFactoryCache.Get() ) ); + break; + } + case PRIMITIVE: + { + rendererPtr = new PrimitiveRenderer( *( mFactoryCache.Get() ) ); + break; + } + case UNDEFINED: + default: + { + break; } } @@ -136,72 +217,7 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Ma return Toolkit::ControlRenderer( rendererPtr ); } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Vector4& color ) -{ - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - - if( mDebugEnabled ) - { - return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); - } - - ColorRenderer* rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) ); - rendererPtr->SetColor( color ); - - return Toolkit::ControlRenderer( rendererPtr ); -} - -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Vector4& color ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - ColorRenderer* rendererPtr = dynamic_cast< ColorRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetColor( color ); - return; - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( color ); - if( actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( float borderSize, const Vector4& borderColor, bool antiAliasing ) -{ - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - - if( mDebugEnabled ) - { - return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); - } - - BorderRenderer* rendererPtr = new BorderRenderer( *mFactoryCache.Get() ); - - rendererPtr->SetBorderSize( borderSize ); - rendererPtr->SetBorderColor( borderColor ); - rendererPtr->RequireAntiAliasing( antiAliasing ); - - return Toolkit::ControlRenderer( rendererPtr ); -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Image& image ) { if( !mFactoryCache ) { @@ -232,53 +248,7 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image } } -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Image& image ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - if( ! image ) - { - // If the image is empty, then reset the renderer and return - renderer.RemoveAndReset( actor ); - return; - } - - NinePatchImage npatchImage = NinePatchImage::DownCast( image ); - if( npatchImage ) - { - NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( npatchImage ); - return; - } - } - else - { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( actor, image ); - return; - } - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( image ); - if( actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& url, ImageDimensions size ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const std::string& url, ImageDimensions size ) { if( !mFactoryCache ) { @@ -297,6 +267,13 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& return Toolkit::ControlRenderer( rendererPtr ); } + else if( SvgRenderer::IsSvgUrl( url ) ) + { + CreateAtlasManager(); + SvgRenderer* rendererPtr = new SvgRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + rendererPtr->SetImage( url, size ); + return Toolkit::ControlRenderer( rendererPtr ); + } else { CreateAtlasManager(); @@ -308,86 +285,6 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& } } -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const std::string& url, ImageDimensions size ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - if( url.empty() ) - { - // If the URL is empty, then reset the renderer and return - renderer.RemoveAndReset( actor ); - return; - } - else if( NinePatchImage::IsNinePatchUrl( url ) ) - { - NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( url ); - return; - } - } - else - { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( actor, url, size ); - return; - } - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( url, size ); - if( actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Property::Map& propertyMap ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - ControlRenderer& controlRenderer = GetImplementation( renderer ); - - Property::Value* type = propertyMap.Find( RENDERER_TYPE_NAME ); - std::string 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 ) ) ) - { - controlRenderer.Initialize( actor, propertyMap ); - return; - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( propertyMap ); - if( renderer && actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - Image RendererFactory::GetBrokenRendererImage() { return ResourceImage::New( BROKEN_RENDERER_IMAGE_URL ); @@ -398,7 +295,7 @@ void RendererFactory::CreateAtlasManager() if( !mAtlasManager ) { Shader shader = ImageRenderer::GetImageShader( *( mFactoryCache.Get() ) ); - mAtlasManager = new ImageAtlasManager(shader, TEXTURE_UNIFORM_NAME); + mAtlasManager = new ImageAtlasManager(); mAtlasManager->SetBrokenImage( BROKEN_RENDERER_IMAGE_URL ); } } @@ -408,4 +305,3 @@ void RendererFactory::CreateAtlasManager() } // namespace Toolkit } // namespace Dali -