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=ddac18efe015c19bc316cbd0965dd520a46b6ea7;hp=11070c93af66b7fc671713f24bf021d772c69b09;hb=909f2036cbcc608b50163c497980ed8168ecef1b;hpb=018b3b5ba7512694a9b95494493f2ae0477f2746 diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp index 11070c9..ddac18e 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp @@ -25,17 +25,24 @@ #include // Internal HEADER +#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 @@ -78,27 +85,36 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Ma std::string typeValue ; if( type && type->Get( typeValue )) { + if( !mFactoryCache ) + { + mFactoryCache = new RendererFactoryCache(); + } + if( typeValue == COLOR_RENDERER ) { - rendererPtr = new ColorRenderer(); + rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) ); } else if( typeValue == GRADIENT_RENDERER ) { - rendererPtr = new GradientRenderer(); + rendererPtr = new GradientRenderer( *( mFactoryCache.Get() ) ); } else if( typeValue == IMAGE_RENDERER ) { - rendererPtr = new ImageRenderer(); + rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ) ); + } + else if( typeValue == N_PATCH_RENDERER ) + { + rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); + } + else if( typeValue == BORDER_RENDERER ) + { + rendererPtr = new BorderRenderer( *( mFactoryCache.Get() ) ); } } if( rendererPtr ) { - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - rendererPtr->Initialize( *( mFactoryCache.Get() ), propertyMap ); + rendererPtr->Initialize( propertyMap ); } else { @@ -110,14 +126,12 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Ma Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Vector4& color ) { - ColorRenderer* rendererPtr = new ColorRenderer(); - if( !mFactoryCache ) { mFactoryCache = new RendererFactoryCache(); } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); + ColorRenderer* rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) ); rendererPtr->SetColor( color ); return Toolkit::ControlRenderer( rendererPtr ); @@ -138,62 +152,168 @@ bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const V } } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image ) +Toolkit::ControlRenderer RendererFactory::GetControlRenderer( float borderSize, const Vector4& borderColor ) { - ImageRenderer* rendererPtr = new ImageRenderer(); if( !mFactoryCache ) { mFactoryCache = new RendererFactoryCache(); } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); - rendererPtr->SetImage( image ); + BorderRenderer* rendererPtr = new BorderRenderer( *mFactoryCache.Get() ); + + if( !mFactoryCache ) + { + mFactoryCache = new RendererFactoryCache(); + } + + rendererPtr->SetBorderSize( borderSize ); + rendererPtr->SetBorderColor( borderColor ); return Toolkit::ControlRenderer( rendererPtr ); } -bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const Image& image ) +Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image ) { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) + if( !mFactoryCache ) + { + mFactoryCache = new RendererFactoryCache(); + } + + NinePatchImage npatchImage = NinePatchImage::DownCast( image ); + if( npatchImage ) + { + NPatchRenderer* rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); + rendererPtr->SetImage( npatchImage ); + + return Toolkit::ControlRenderer( rendererPtr ); + } + else { + ImageRenderer* rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ) ); rendererPtr->SetImage( image ); - return false; + + return Toolkit::ControlRenderer( rendererPtr ); + } +} + +bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const Image& image ) +{ + NinePatchImage npatchImage = NinePatchImage::DownCast( image ); + if( npatchImage ) + { + NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); + if( rendererPtr ) + { + rendererPtr->SetImage( npatchImage ); + return false; + } } else { - renderer = GetControlRenderer( image ); - return true; + ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); + if( rendererPtr ) + { + rendererPtr->SetImage( image ); + return false; + } } + + renderer = GetControlRenderer( image ); + return true; } Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& url ) { - ImageRenderer* rendererPtr = new ImageRenderer(); if( !mFactoryCache ) { mFactoryCache = new RendererFactoryCache(); } - rendererPtr->Initialize( *( mFactoryCache.Get() ) ); - rendererPtr->SetImage( url ); - return Toolkit::ControlRenderer( rendererPtr ); + if( NinePatchImage::IsNinePatchUrl( url ) ) + { + NPatchRenderer* rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) ); + rendererPtr->SetImage( url ); + + return Toolkit::ControlRenderer( rendererPtr ); + } + else + { + ImageRenderer* rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ) ); + rendererPtr->SetImage( url ); + + return Toolkit::ControlRenderer( rendererPtr ); + } } bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const std::string& url ) { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) + if( NinePatchImage::IsNinePatchUrl( url ) ) { - rendererPtr->SetImage( url ); - return false; + 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; + } + } + + { renderer = GetControlRenderer( url ); return true; } } +bool RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, const Property::Map& propertyMap ) +{ + 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; + } + } + + GetImplementation( renderer ).Initialize( propertyMap ); + return false; +} + +Image RendererFactory::GetBrokenRendererImage() +{ + return ResourceImage::New( BROKEN_RENDERER_IMAGE_URL ); +} + } // namespace Internal } // namespace Toolkit