X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage%2Fimage-visual.cpp;h=dc16aaccfe280d0b2dfaedbc9e9bfaf8234390e5;hp=d50cb9103c8a789583007aa90710d90d5b1e97ec;hb=305b42da3085e8b4682ddadebdab7661148a0cb6;hpb=eaebf2e8aa5903e4acbb37ae46050e009863146c diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index d50cb91..dc16aac 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -62,6 +62,7 @@ const char * const IMAGE_DESIRED_WIDTH( "desiredWidth" ); const char * const IMAGE_DESIRED_HEIGHT( "desiredHeight" ); const char * const SYNCHRONOUS_LOADING( "synchronousLoading" ); const char * const IMAGE_ATLASING("atlasing"); +const char * const ALPHA_MASK_URL("alphaMaskUrl"); // fitting modes DALI_ENUM_TO_STRING_TABLE_BEGIN( FITTING_MODE ) @@ -261,8 +262,10 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, mPixelArea( FULL_TEXTURE_RECT ), mPlacementActor(), mImageUrl( imageUrl ), + mAlphaMaskUrl(), mDesiredSize( size ), mTextureId( TextureManager::INVALID_TEXTURE_ID ), + mAlphaMaskId( TextureManager::INVALID_TEXTURE_ID ), mFittingMode( fittingMode ), mSamplingMode( samplingMode ), mWrapModeU( WrapMode::DEFAULT ), @@ -279,8 +282,10 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, const Image& image ) mPixelArea( FULL_TEXTURE_RECT ), mPlacementActor(), mImageUrl(), + mAlphaMaskUrl(), mDesiredSize(), mTextureId( TextureManager::INVALID_TEXTURE_ID ), + mAlphaMaskId( TextureManager::INVALID_TEXTURE_ID ), mFittingMode( FittingMode::DEFAULT ), mSamplingMode( SamplingMode::DEFAULT ), mWrapModeU( WrapMode::DEFAULT ), @@ -292,6 +297,11 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, const Image& image ) ImageVisual::~ImageVisual() { + if( mAlphaMaskId != TextureManager::INVALID_TEXTURE_ID ) + { + TextureManager& textureManager = mFactoryCache.GetTextureManager(); + textureManager.Remove( mAlphaMaskId ); + } } void ImageVisual::DoSetProperties( const Property::Map& propertyMap ) @@ -342,9 +352,20 @@ void ImageVisual::DoSetProperties( const Property::Map& propertyMap ) { DoSetProperty( Toolkit::DevelImageVisual::Property::ATLASING, keyValue.second ); } + else if ( keyValue.first == ALPHA_MASK_URL ) + { + DoSetProperty( Toolkit::DevelImageVisual::Property::ALPHA_MASK_URL, keyValue.second ); + } } } + if( mAlphaMaskUrl.IsValid() ) + { + // Immediately trigger the alpha mask loading (it may just get a cached value) + TextureManager& textureManager = mFactoryCache.GetTextureManager(); + mAlphaMaskId = textureManager.RequestMaskLoad( mAlphaMaskUrl ); + } + if( ( mImpl->mFlags & Impl::IS_SYNCHRONOUS_RESOURCE_LOADING ) && mImageUrl.IsValid() ) { // if sync loading is required, the loading should start @@ -451,6 +472,15 @@ void ImageVisual::DoSetProperty( Property::Index index, const Property::Value& v bool atlasing = false; mAttemptAtlasing = value.Get( atlasing ); } + + case Toolkit::DevelImageVisual::Property::ALPHA_MASK_URL: + { + std::string alphaUrl; + if( value.Get( alphaUrl ) ) + { + mAlphaMaskUrl = VisualUrl( alphaUrl ); + } + } } } @@ -651,8 +681,17 @@ TextureSet ImageVisual::CreateTextureSet( Vector4& textureRect, bool synchronous { mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED; TextureManager& textureManager = mFactoryCache.GetTextureManager(); - mTextureId = textureManager.RequestLoad( mImageUrl, mDesiredSize, mFittingMode, - mSamplingMode, TextureManager::NO_ATLAS, this ); + if( mAlphaMaskId == TextureManager::INVALID_TEXTURE_ID ) + { + mTextureId = textureManager.RequestLoad( mImageUrl, mDesiredSize, mFittingMode, + mSamplingMode, TextureManager::NO_ATLAS, this ); + } + else + { + mTextureId = textureManager.RequestLoad( mImageUrl, mAlphaMaskId, mDesiredSize, + mFittingMode, mSamplingMode, + TextureManager::NO_ATLAS, this ); + } TextureManager::LoadState loadState = textureManager.GetTextureState( mTextureId ); @@ -819,6 +858,7 @@ void ImageVisual::DoCreatePropertyMap( Property::Map& map ) const map.Insert( Toolkit::ImageVisual::Property::WRAP_MODE_V, mWrapModeV ); map.Insert( Toolkit::DevelImageVisual::Property::ATLASING, mAttemptAtlasing ); + map.Insert( Toolkit::DevelImageVisual::Property::ALPHA_MASK_URL, mAlphaMaskUrl.GetUrl() ); } void ImageVisual::DoCreateInstancePropertyMap( Property::Map& map ) const