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=afcc45224679ca2af2b62af77e30f497db87a21e;hb=526ca8a3ad82b0a08c0f0580284f28f0d647098d;hpb=cde5ef8b9c6de8008865e29f3b1acab8f7cd2bbc diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp index afcc452..e1c75a2 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp @@ -15,32 +15,32 @@ */ // 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( "renderer-type" ); - -const char * const COLOR_RENDERER("color-renderer"); -const char * const BORDER_RENDERER("border-renderer"); -const char * const GRADIENT_RENDERER("gradient-renderer"); -const char * const IMAGE_RENDERER("image-renderer"); -const char * const N_PATCH_RENDERER("n-patch-renderer"); +const char * const BROKEN_RENDERER_IMAGE_URL( DALI_IMAGE_DIR "broken.png"); } namespace Dali @@ -67,7 +67,8 @@ DALI_TYPE_REGISTRATION_END() } // namespace -RendererFactory::RendererFactory() +RendererFactory::RendererFactory( bool debugEnabled ) +:mDebugEnabled( debugEnabled ) { } @@ -75,245 +76,228 @@ 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 ) + if( typeValue == COLOR_RENDERER ) { - rendererPtr = new ColorRenderer(); + rendererType = COLOR; } - else if( typeValue == GRADIENT_RENDERER ) + else if( typeValue == BORDER_RENDERER ) { - rendererPtr = new GradientRenderer(); + rendererType = BORDER; } - else if( typeValue == IMAGE_RENDERER ) + else if( typeValue == GRADIENT_RENDERER ) { - rendererPtr = new ImageRenderer(); + rendererType = GRADIENT; } - else if( typeValue == N_PATCH_RENDERER ) + else if( typeValue == IMAGE_RENDERER ) { - rendererPtr = new NPatchRenderer(); + rendererType = IMAGE; } - else if( typeValue == BORDER_RENDERER ) + else if( typeValue == MESH_RENDERER ) { - rendererPtr = new BorderRenderer(); + rendererType = MESH; + } + else if( typeValue == PRIMITIVE_RENDERER ) + { + rendererType = PRIMITIVE; } } - if( rendererPtr ) + // check the url if exist, to decide the renderer type + if( rendererType == IMAGE || rendererType == UNDEFINED ) { - if( !mFactoryCache ) + Property::Value* imageURLValue = propertyMap.Find( IMAGE_URL_NAME ); + std::string imageUrl; + if( imageURLValue && imageURLValue->Get( imageUrl )) { - mFactoryCache = new RendererFactoryCache(); + if( NinePatchImage::IsNinePatchUrl( imageUrl ) ) + { + rendererType = N_PATCH; + } + else if( SvgRenderer::IsSvgUrl( imageUrl ) ) + { + rendererType = SVG; + } + else + { + rendererType = IMAGE; + } } - rendererPtr->Initialize( *( mFactoryCache.Get() ), propertyMap ); - } - else - { - DALI_LOG_ERROR( "Renderer type unknown" ); } - return Toolkit::ControlRenderer( rendererPtr ); + return rendererType; } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Vector4& color ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Property::Map& propertyMap ) { - ColorRenderer* rendererPtr = new ColorRenderer(); + ControlRenderer* rendererPtr = NULL; - if( !mFactoryCache ) + RendererType type = GetRendererType( propertyMap ); + if( type != UNDEFINED) { - mFactoryCache = new RendererFactoryCache(); - } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); + if( !mFactoryCache ) + { + mFactoryCache = new RendererFactoryCache(); + } - rendererPtr->SetColor( color ); + if( mDebugEnabled ) + { + return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); + } + } - return Toolkit::ControlRenderer( rendererPtr ); -} + switch( type ) + { + case COLOR: + { + rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) ); + break; + } + case GRADIENT: + { + rendererPtr = new GradientRenderer( *( mFactoryCache.Get() ) ); + break; + } + case BORDER: + { + rendererPtr = new BorderRenderer( *( mFactoryCache.Get() ) ); + break; + } + case IMAGE: + { + CreateAtlasManager(); + rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + break; + } + case N_PATCH: + { + rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); + break; + } + case SVG: + { + 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; + } + } -bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const Vector4& color ) -{ - ColorRenderer* rendererPtr = dynamic_cast< ColorRenderer* >( &GetImplementation( renderer ) ); if( rendererPtr ) { - rendererPtr->SetColor( color ); - return false; + Actor actor; + rendererPtr->Initialize( actor, propertyMap ); } else { - renderer = GetControlRenderer( color ); - return true; + DALI_LOG_ERROR( "Renderer type unknown" ); } + + return Toolkit::ControlRenderer( rendererPtr ); } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( float borderSize, const Vector4& borderColor ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Image& image ) { - BorderRenderer* rendererPtr = new BorderRenderer(); - if( !mFactoryCache ) { mFactoryCache = new RendererFactoryCache(); } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); - rendererPtr->SetBorderSize( borderSize ); - rendererPtr->SetBorderColor( borderColor ); - - return Toolkit::ControlRenderer( rendererPtr ); -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image ) -{ - if( !mFactoryCache ) + if( mDebugEnabled ) { - mFactoryCache = new RendererFactoryCache(); + return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); } NinePatchImage npatchImage = NinePatchImage::DownCast( image ); if( npatchImage ) { - NPatchRenderer* rendererPtr = new NPatchRenderer(); - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); + NPatchRenderer* rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); rendererPtr->SetImage( npatchImage ); return Toolkit::ControlRenderer( rendererPtr ); } else { - ImageRenderer* rendererPtr = new ImageRenderer(); - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); - rendererPtr->SetImage( image ); + CreateAtlasManager(); + ImageRenderer* rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + Actor actor; + rendererPtr->SetImage( actor, image ); return Toolkit::ControlRenderer( rendererPtr ); } } -bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const Image& image ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const std::string& url, ImageDimensions size ) { - NinePatchImage npatchImage = NinePatchImage::DownCast( image ); - if( npatchImage ) + if( !mFactoryCache ) { - NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( npatchImage ); - return false; - } + mFactoryCache = new RendererFactoryCache(); } - else + + if( mDebugEnabled ) { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( image ); - return false; - } + return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); } - renderer = GetControlRenderer( image ); - return true; -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& url ) -{ if( NinePatchImage::IsNinePatchUrl( url ) ) { - NPatchRenderer* rendererPtr = new NPatchRenderer(); - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); + NPatchRenderer* rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); rendererPtr->SetImage( url ); return Toolkit::ControlRenderer( rendererPtr ); } - else + else if( SvgRenderer::IsSvgUrl( url ) ) { - ImageRenderer* rendererPtr = new ImageRenderer(); - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); - rendererPtr->SetImage( url ); - + CreateAtlasManager(); + SvgRenderer* rendererPtr = new SvgRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + rendererPtr->SetImage( url, size ); return Toolkit::ControlRenderer( rendererPtr ); } -} - -bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const std::string& url ) -{ - if( NinePatchImage::IsNinePatchUrl( url ) ) - { - NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( url ); - return false; - } - } else { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( url ); - return false; - } - } + CreateAtlasManager(); + ImageRenderer* rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) ); + Actor actor; + rendererPtr->SetImage( actor, url, size ); - { - renderer = GetControlRenderer( url ); - return true; + return Toolkit::ControlRenderer( rendererPtr ); } } -bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const Property::Map& propertyMap ) +Image RendererFactory::GetBrokenRendererImage() { - Property::Value* type = propertyMap.Find( RENDERER_TYPE_NAME ); - std::string typeValue ; - if( type && type->Get( typeValue )) - { - //If there's been a renderer type change then we have to return a new shader - if( typeValue == COLOR_RENDERER && typeid( renderer ) != typeid( ColorRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return true; - } - else if( typeValue == GRADIENT_RENDERER && typeid( renderer ) != typeid( GradientRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return true; - } - else if( typeValue == IMAGE_RENDERER && typeid( renderer ) != typeid( ImageRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return true; - } - else if( typeValue == N_PATCH_RENDERER && typeid( renderer ) != typeid( NPatchRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return true; - } - else if( typeValue == BORDER_RENDERER && typeid( renderer ) != typeid( BorderRenderer ) ) - { - renderer = GetControlRenderer( propertyMap ); - return true; - } - } + return ResourceImage::New( BROKEN_RENDERER_IMAGE_URL ); +} - if( !mFactoryCache ) +void RendererFactory::CreateAtlasManager() +{ + if( !mAtlasManager ) { - mFactoryCache = new RendererFactoryCache(); + Shader shader = ImageRenderer::GetImageShader( *( mFactoryCache.Get() ) ); + mAtlasManager = new ImageAtlasManager(); + mAtlasManager->SetBrokenImage( BROKEN_RENDERER_IMAGE_URL ); } - GetImplementation( renderer ).Initialize( *( mFactoryCache.Get() ), propertyMap ); - return false; } } // namespace Internal @@ -321,4 +305,3 @@ bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const P } // namespace Toolkit } // namespace Dali -