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=59177546e29feae710280d7595f9323f195233b9;hp=8845541bfcb5c903545e3dbbd65904c9580f3f31;hb=6ee3158c2bb9ef4993947d65f520c00eca6edde3;hpb=5e351965bad7e1de2e94027548b022bac692603c diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index 8845541..5917754 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -94,15 +94,15 @@ DALI_ENUM_TO_STRING_TABLE_END( WRAP_MODE ) // load policies DALI_ENUM_TO_STRING_TABLE_BEGIN( LOAD_POLICY ) -DALI_ENUM_TO_STRING_WITH_SCOPE( DevelImageVisual::LoadPolicy, IMMEDIATE ) -DALI_ENUM_TO_STRING_WITH_SCOPE( DevelImageVisual::LoadPolicy, ATTACHED ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Dali::Toolkit::ImageVisual::LoadPolicy, IMMEDIATE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Dali::Toolkit::ImageVisual::LoadPolicy, ATTACHED ) DALI_ENUM_TO_STRING_TABLE_END( LOAD_POLICY ) // release policies DALI_ENUM_TO_STRING_TABLE_BEGIN( RELEASE_POLICY ) -DALI_ENUM_TO_STRING_WITH_SCOPE( DevelImageVisual::ReleasePolicy, DETACHED ) -DALI_ENUM_TO_STRING_WITH_SCOPE( DevelImageVisual::ReleasePolicy, DESTROYED ) -DALI_ENUM_TO_STRING_WITH_SCOPE( DevelImageVisual::ReleasePolicy, NEVER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Dali::Toolkit::ImageVisual::ReleasePolicy, DETACHED ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Dali::Toolkit::ImageVisual::ReleasePolicy, DESTROYED ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Dali::Toolkit::ImageVisual::ReleasePolicy, NEVER ) DALI_ENUM_TO_STRING_TABLE_END( RELEASE_POLICY ) const Vector4 FULL_TEXTURE_RECT(0.f, 0.f, 1.f, 1.f); @@ -269,7 +269,7 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, ImageDimensions size, FittingMode::Type fittingMode, Dali::SamplingMode::Type samplingMode ) -: Visual::Base( factoryCache ), +: Visual::Base( factoryCache, Visual::FittingMode::FIT_KEEP_ASPECT_RATIO ), mImage(), mPixelArea( FULL_TEXTURE_RECT ), mPlacementActor(), @@ -282,8 +282,8 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, mSamplingMode( samplingMode ), mWrapModeU( WrapMode::DEFAULT ), mWrapModeV( WrapMode::DEFAULT ), - mLoadPolicy( DevelImageVisual::LoadPolicy::ATTACHED ), - mReleasePolicy( DevelImageVisual::ReleasePolicy::DETACHED ), + mLoadPolicy( Toolkit::ImageVisual::LoadPolicy::ATTACHED ), + mReleasePolicy( Toolkit::ImageVisual::ReleasePolicy::DETACHED ), mAtlasRect( 0.0f, 0.0f, 0.0f, 0.0f ), mAttemptAtlasing( false ), mLoading( false ), @@ -292,7 +292,7 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, } ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, const Image& image ) -: Visual::Base( factoryCache ), +: Visual::Base( factoryCache, Visual::FittingMode::FIT_KEEP_ASPECT_RATIO ), mImage( image ), mPixelArea( FULL_TEXTURE_RECT ), mPlacementActor(), @@ -305,8 +305,8 @@ ImageVisual::ImageVisual( VisualFactoryCache& factoryCache, const Image& image ) mSamplingMode( SamplingMode::DEFAULT ), mWrapModeU( WrapMode::DEFAULT ), mWrapModeV( WrapMode::DEFAULT ), - mLoadPolicy( DevelImageVisual::LoadPolicy::ATTACHED ), - mReleasePolicy( DevelImageVisual::ReleasePolicy::DESTROYED ), + mLoadPolicy( Toolkit::ImageVisual::LoadPolicy::ATTACHED ), + mReleasePolicy( Toolkit::ImageVisual::ReleasePolicy::DESTROYED ), mAtlasRect( 0.0f, 0.0f, 0.0f, 0.0f ), mAttemptAtlasing( false ), mLoading( false ), @@ -331,7 +331,7 @@ ImageVisual::~ImageVisual() } // ImageVisual destroyed so remove texture unless ReleasePolicy is set to never release - if( ( mTextureId != TextureManager::INVALID_TEXTURE_ID ) && ( mReleasePolicy != DevelImageVisual::ReleasePolicy::NEVER ) ) + if( ( mTextureId != TextureManager::INVALID_TEXTURE_ID ) && ( mReleasePolicy != Toolkit::ImageVisual::ReleasePolicy::NEVER ) ) { RemoveTexture(); } @@ -400,20 +400,20 @@ void ImageVisual::DoSetProperties( const Property::Map& propertyMap ) } else if ( keyValue.first == LOAD_POLICY_NAME ) { - DoSetProperty( Toolkit::DevelImageVisual::Property::LOAD_POLICY, keyValue.second ); + DoSetProperty( Toolkit::ImageVisual::Property::LOAD_POLICY, keyValue.second ); } else if( keyValue.first == RELEASE_POLICY_NAME ) { - DoSetProperty( Toolkit::DevelImageVisual::Property::RELEASE_POLICY, keyValue.second ); + DoSetProperty( Toolkit::ImageVisual::Property::RELEASE_POLICY, keyValue.second ); } else if( keyValue.first == ORIENTATION_CORRECTION_NAME ) { - DoSetProperty( Toolkit::DevelImageVisual::Property::ORIENTATION_CORRECTION, keyValue.second ); + DoSetProperty( Toolkit::ImageVisual::Property::ORIENTATION_CORRECTION, keyValue.second ); } } } // Load image immediately if LOAD_POLICY requires it - if ( mLoadPolicy == DevelImageVisual::LoadPolicy::IMMEDIATE ) + if ( mLoadPolicy == Toolkit::ImageVisual::LoadPolicy::IMMEDIATE ) { auto attemptAtlasing = AttemptAtlasing(); LoadTexture( attemptAtlasing, mAtlasRect, mTextures, mOrientationCorrection, @@ -554,22 +554,22 @@ void ImageVisual::DoSetProperty( Property::Index index, const Property::Value& v break; } - case Toolkit::DevelImageVisual::Property::RELEASE_POLICY: + case Toolkit::ImageVisual::Property::RELEASE_POLICY: { int releasePolicy; Scripting::GetEnumerationProperty( value, RELEASE_POLICY_TABLE, RELEASE_POLICY_TABLE_COUNT, releasePolicy ); - mReleasePolicy = DevelImageVisual::ReleasePolicy::Type( releasePolicy ); + mReleasePolicy = Toolkit::ImageVisual::ReleasePolicy::Type( releasePolicy ); break; } - case Toolkit::DevelImageVisual::Property::LOAD_POLICY: + case Toolkit::ImageVisual::Property::LOAD_POLICY: { int loadPolicy; Scripting::GetEnumerationProperty( value, LOAD_POLICY_TABLE, LOAD_POLICY_TABLE_COUNT, loadPolicy ); - mLoadPolicy = DevelImageVisual::LoadPolicy::Type( loadPolicy ); + mLoadPolicy = Toolkit::ImageVisual::LoadPolicy::Type( loadPolicy ); break; } - case Toolkit::DevelImageVisual::Property::ORIENTATION_CORRECTION: + case Toolkit::ImageVisual::Property::ORIENTATION_CORRECTION: { bool orientationCorrection( mOrientationCorrection ); if( value.Get( orientationCorrection ) ) @@ -698,6 +698,11 @@ void ImageVisual::CreateRenderer( TextureSet& textureSet ) //Register transform properties mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); + + if( IsPreMultipliedAlphaEnabled() ) + { + EnablePreMultipliedAlpha( true ); + } } void ImageVisual::CreateNativeImageRenderer( NativeImage& nativeImage ) @@ -754,7 +759,6 @@ void ImageVisual::CreateNativeImageRenderer( NativeImage& nativeImage ) mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); } - bool ImageVisual::IsSynchronousResourceLoading() const { return mImpl->mFlags & Impl::IS_SYNCHRONOUS_RESOURCE_LOADING; @@ -775,12 +779,20 @@ void ImageVisual::LoadTexture( bool& atlasing, Vector4& atlasRect, TextureSet& t atlasUploadObserver = this; } + auto preMultiplyOnLoad = mFactoryCache.GetPreMultiplyOnLoad() && !mImpl->mCustomShader + ? TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD + : TextureManager::MultiplyOnLoad::LOAD_WITHOUT_MULTIPLY; + textures = textureManager.LoadTexture( mImageUrl, mDesiredSize, mFittingMode, mSamplingMode, mMaskingData, IsSynchronousResourceLoading(), mTextureId, atlasRect, atlasing, mLoading, mWrapModeU, mWrapModeV, textureObserver, atlasUploadObserver, atlasManager, - mOrientationCorrection, - forceReload ); + mOrientationCorrection, forceReload, preMultiplyOnLoad); + + if( textures && preMultiplyOnLoad == TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD) + { + EnablePreMultipliedAlpha( true ); + } if( atlasing ) // Flag needs to be set before creating renderer { @@ -892,7 +904,7 @@ void ImageVisual::DoSetOffStage( Actor& actor ) // Image release is dependent on the ReleasePolicy, renderer is destroyed. actor.RemoveRenderer( mImpl->mRenderer); - if( mReleasePolicy == DevelImageVisual::ReleasePolicy::DETACHED ) + if( mReleasePolicy == Toolkit::ImageVisual::ReleasePolicy::DETACHED ) { RemoveTexture(); // If INVALID_TEXTURE_ID then removal will be attempted on atlas } @@ -948,9 +960,9 @@ void ImageVisual::DoCreatePropertyMap( Property::Map& map ) const map.Insert( Toolkit::ImageVisual::Property::CROP_TO_MASK, mMaskingData->mCropToMask ); } - map.Insert( Toolkit::DevelImageVisual::Property::LOAD_POLICY, mLoadPolicy ); - map.Insert( Toolkit::DevelImageVisual::Property::RELEASE_POLICY, mReleasePolicy ); - map.Insert( Toolkit::DevelImageVisual::Property::ORIENTATION_CORRECTION, mOrientationCorrection ); + map.Insert( Toolkit::ImageVisual::Property::LOAD_POLICY, mLoadPolicy ); + map.Insert( Toolkit::ImageVisual::Property::RELEASE_POLICY, mReleasePolicy ); + map.Insert( Toolkit::ImageVisual::Property::ORIENTATION_CORRECTION, mOrientationCorrection ); } void ImageVisual::DoCreateInstancePropertyMap( Property::Map& map ) const @@ -1073,7 +1085,7 @@ void ImageVisual::UploadCompleted() // From Texture Manager void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, TextureSet textureSet, bool usingAtlas, - const Vector4& atlasRectangle ) + const Vector4& atlasRectangle, bool preMultiplied ) { Toolkit::Visual::ResourceStatus resourceStatus; Actor actor = mPlacementActor.GetHandle(); @@ -1085,6 +1097,10 @@ void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, Textur { mImpl->mRenderer.RegisterProperty( ATLAS_RECT_UNIFORM_NAME, mAtlasRect ); } + else if( preMultiplied ) + { + EnablePreMultipliedAlpha( true ); + } actor.AddRenderer( mImpl->mRenderer ); // reset the weak handle so that the renderer only get added to actor once