From 45ecb0b3535fc8588ae5d95d2a846c90422c3a4d Mon Sep 17 00:00:00 2001 From: "adam.b" Date: Tue, 6 Dec 2016 17:56:56 +0000 Subject: [PATCH] Added devel property PREMULTIPLIED_ALPHA ( "premultipliedAlpha" ). The property enables/disables premultiplied alpha on the Visual. Example: control.SetProperty( Toolkit::Control::Property::BACKGROUND, Property::Map(). Add( "premultipliedAlpha", true )); Change-Id: I8c8af1b781109256e04f7f3806e9698b34bce40b --- .../src/dali-toolkit/utc-Dali-Visual.cpp | 59 ++++++++++++++++++++++ .../devel-api/visuals/visual-properties-devel.h | 13 ++++- dali-toolkit/internal/visuals/visual-base-impl.cpp | 54 ++++++++++++++------ .../internal/visuals/visual-string-constants.cpp | 3 ++ .../internal/visuals/visual-string-constants.h | 4 +- 5 files changed, 115 insertions(+), 18 deletions(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index 82d6d58..563c593 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -1705,3 +1705,62 @@ int UtcDaliVisualTextVisualRender(void) END_TEST; } + +int UtcDaliVisualPremultipliedAlpha(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualPremultipliedAlpha" ); + + VisualFactory factory = VisualFactory::Get(); + + // image visual, test default value ( false ) + { + Visual::Base imageVisual = factory.CreateVisual( + Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) ); + + Dali::Property::Map visualMap; + imageVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( DevelVisual::Property::PREMULTIPLIED_ALPHA ); + + // test values + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), false, TEST_LOCATION ); + } + + // image visual, override premultiplied + { + Visual::Base imageVisual = factory.CreateVisual( + Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ) + .Add( DevelVisual::Property::PREMULTIPLIED_ALPHA, true ) ); + + Dali::Property::Map visualMap; + imageVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( DevelVisual::Property::PREMULTIPLIED_ALPHA ); + + // test values + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), true, TEST_LOCATION); + } + + // svg visual ( premultiplied alpha by default is true ) + { + Visual::Base imageVisual = factory.CreateVisual( + Property::Map() + .Add( Visual::Property::TYPE, Visual::IMAGE ) + .Add( ImageVisual::Property::URL, TEST_SVG_FILE_NAME ) ); + + Dali::Property::Map visualMap; + imageVisual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find( DevelVisual::Property::PREMULTIPLIED_ALPHA ); + + // test values + DALI_TEST_CHECK( value ); + DALI_TEST_EQUALS( value->Get(), true, TEST_LOCATION ); + } + + END_TEST; +} diff --git a/dali-toolkit/devel-api/visuals/visual-properties-devel.h b/dali-toolkit/devel-api/visuals/visual-properties-devel.h index 9c268db..8f7248f 100644 --- a/dali-toolkit/devel-api/visuals/visual-properties-devel.h +++ b/dali-toolkit/devel-api/visuals/visual-properties-devel.h @@ -61,7 +61,18 @@ enum Type * @note Optional. * @see DevelVisual::Transform::Property */ - TRANSFORM = SHADER+1//Dali::Toolkit::Visual::Property::SHADER+1 + TRANSFORM = SHADER + 1, // Dali::Toolkit::Visual::Property::SHADER + 1 + + /** + * @brief Enables/disables premultiplied alpha. + * The premultiplied alpha is false by default unless this behaviour is modified + * by the derived Visual type. + + * @details Name "premultipliedAlpha", type Property::Boolean. + + * @note Optional. + */ + PREMULTIPLIED_ALPHA = SHADER + 2, // Dali::Toolkit::Visual::Property::SHADER + 2 }; } //namespace Property diff --git a/dali-toolkit/internal/visuals/visual-base-impl.cpp b/dali-toolkit/internal/visuals/visual-base-impl.cpp index ca8ffe9..0abe256 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-impl.cpp @@ -61,23 +61,42 @@ void Visual::Base::SetCustomShader( const Property::Map& shaderMap ) void Visual::Base::SetProperties( const Property::Map& propertyMap ) { - Property::Value* customShaderValue = propertyMap.Find( DevelVisual::Property::SHADER, CUSTOM_SHADER ); - if( customShaderValue ) + for( size_t i = 0; i < propertyMap.Count(); ++i ) { - Property::Map shaderMap; - if( customShaderValue->Get( shaderMap ) ) + const KeyValuePair& pair = propertyMap.GetKeyValue( i ); + const Property::Key& key = pair.first; + const Property::Value& value = pair.second; + switch( key.indexKey ) { - SetCustomShader( shaderMap ); - } - } - - Property::Value* transform = propertyMap.Find( DevelVisual::Property::TRANSFORM, TRANSFORM ); - if( transform ) - { - Property::Map map; - if( transform->Get( map ) ) - { - mImpl->mTransform.SetPropertyMap( map ); + case DevelVisual::Property::SHADER: + { + Property::Map shaderMap; + if( value.Get( shaderMap ) ) + { + SetCustomShader( shaderMap ); + } + break; + } + + case DevelVisual::Property::TRANSFORM: + { + Property::Map map; + if( value.Get( map ) ) + { + mImpl->mTransform.SetPropertyMap( map ); + } + break; + } + + case DevelVisual::Property::PREMULTIPLIED_ALPHA: + { + bool premultipliedAlpha( premultipliedAlpha ); + if( value.Get( premultipliedAlpha ) ) + { + EnablePreMultipliedAlpha( premultipliedAlpha ); + } + break; + } } } @@ -164,11 +183,14 @@ void Visual::Base::CreatePropertyMap( Property::Map& map ) const Property::Map transform; mImpl->mTransform.GetPropertyMap( transform ); map.Insert( DevelVisual::Property::TRANSFORM, transform ); + + bool premultipliedAlpha( IsPreMultipliedAlphaEnabled() ); + map.Insert( DevelVisual::Property::PREMULTIPLIED_ALPHA, premultipliedAlpha ); } void Visual::Base::EnablePreMultipliedAlpha( bool preMultipled ) { - if(preMultipled) + if( preMultipled ) { mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA; } diff --git a/dali-toolkit/internal/visuals/visual-string-constants.cpp b/dali-toolkit/internal/visuals/visual-string-constants.cpp index 6f99904..a854aba 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.cpp +++ b/dali-toolkit/internal/visuals/visual-string-constants.cpp @@ -43,6 +43,9 @@ extern const char * const OFFSET_SIZE_MODE( "offsetSizeMode" ); extern const char * const ORIGIN( "origin" ); extern const char * const ANCHOR_POINT( "anchorPoint" ); +// Premultipled alpha +extern const char * const PREMULTIPLIED_ALPHA( "premultipliedAlpha" ); + // Image visual const char * const IMAGE_URL_NAME( "url" ); const char * const ATLAS_RECT_UNIFORM_NAME ( "uAtlasRect" ); diff --git a/dali-toolkit/internal/visuals/visual-string-constants.h b/dali-toolkit/internal/visuals/visual-string-constants.h index 5ec7e30..655a9a2 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.h +++ b/dali-toolkit/internal/visuals/visual-string-constants.h @@ -35,7 +35,7 @@ extern const char * const CUSTOM_SUBDIVIDE_GRID_X; extern const char * const CUSTOM_SUBDIVIDE_GRID_Y; extern const char * const CUSTOM_SHADER_HINTS; -//Transform +// Transform extern const char * const TRANSFORM; extern const char * const SIZE; extern const char * const OFFSET; @@ -43,6 +43,8 @@ extern const char * const OFFSET_SIZE_MODE; extern const char * const ORIGIN; extern const char * const ANCHOR_POINT; +// Premultiplied alpha +extern const char * const PREMULTIPLIED_ALPHA; // Image visual extern const char * const IMAGE_URL_NAME; -- 2.7.4