From: Jiyun Yang Date: Mon, 13 Apr 2020 09:28:06 +0000 (+0900) Subject: Introduce new visual transform property : EXTRA_SIZE X-Git-Tag: dali_1.9.9~3 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=b31764bc76595c1ccd58cf4366dcde2cc78e72cf Introduce new visual transform property : EXTRA_SIZE The EXTRA_SIZE can increase/decrease the computed visual size. The property can be used when a user want to set a visual size as a combined value of `absolute` and `relative`: ControlSize * a + b For example, when a user want to set a visual size to (ControlSize * 2 + 10), The transform map will be, transformMap.Add( Transform::Property::SIZE, Vector2( 2.0f, 2.0f ) ) .Add( Transform::Property::SIZE_POLICY, Vector2( Transform::Policy::Relative, Transform::Policy::Relative ) ) .Add( Transform::Property::EXTRA_SIZE, Vector2( 10.0f, 10.0f ) ); Change-Id: Ibd1b7667a96900f216f7a9a14ea6813636161b48 Signed-off-by: Jiyun Yang --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index b6505e2..0a86423 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -2726,6 +2726,11 @@ int UtcDaliVisualGetTransform(void) DALI_TEST_CHECK( typeValue ); DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get() == Toolkit::Align::TOP_BEGIN ); } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_CHECK( typeValue->Get() == Vector2(0.0f,0.0f) ); + } END_TEST; } @@ -2738,6 +2743,7 @@ static void TestTransform( ToolkitTestApplication& application, Visual::Base vis transform.Insert( Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); transform.Insert( Visual::Transform::Property::ORIGIN, "CENTER" ); transform.Insert( Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END ); + transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(50.0f, 50.0f) ); visual.SetTransformAndSize( transform, Vector2(100, 100) ); @@ -2777,6 +2783,11 @@ static void TestTransform( ToolkitTestApplication& application, Visual::Base vis DALI_TEST_CHECK( typeValue ); DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get(), Toolkit::Align::BOTTOM_END, TEST_LOCATION ); } + { + Property::Value* typeValue = map->Find( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE ); + DALI_TEST_CHECK( typeValue ); + DALI_TEST_EQUALS( typeValue->Get(),Vector2(50.0f,50.0f), TEST_LOCATION ); + } //Put the visual on the stage DummyControl actor = DummyControl::New(true); @@ -2818,12 +2829,18 @@ static void TestTransform( ToolkitTestApplication& application, Visual::Base vis Vector2 anchorPoint = renderer.GetProperty( index ); DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION ); + index = renderer.GetPropertyIndex( "extraSize" ); + DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + Vector2 extraSize = renderer.GetProperty( index ); + DALI_TEST_EQUALS( extraSize, Vector2(50.0f,50.0f), TEST_LOCATION ); + //Set a new transform transform.Clear(); transform = DefaultTransform(); transform.Insert( Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) ); transform.Insert( Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f) ); transform.Insert( Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); + transform.Insert( DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(0.5f, 0.5f) ); visual.SetTransformAndSize( transform, Vector2(100, 100) ); application.SendNotification(); application.Render(0); @@ -2844,6 +2861,9 @@ static void TestTransform( ToolkitTestApplication& application, Visual::Base vis anchorPoint = renderer.GetProperty( renderer.GetPropertyIndex( "anchorPoint" ) ); DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION ); + + extraSize = renderer.GetProperty( renderer.GetPropertyIndex( "extraSize" ) ); + DALI_TEST_EQUALS( extraSize, Vector2(0.5f,0.5f), TEST_LOCATION ); } int UtcDaliVisualSetTransform0(void) @@ -3065,6 +3085,7 @@ int UtcDaliNPatchVisualCustomShader(void) transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE ); transformMap["anchorPoint"] = Align::CENTER; transformMap["origin"] = Align::CENTER; + transformMap["extraSize"] = Vector2( 0.0f, 50.0f ); properties[Visual::Property::TRANSFORM] = transformMap; properties[Visual::Property::TYPE] = Visual::IMAGE; @@ -3101,6 +3122,9 @@ int UtcDaliNPatchVisualCustomShader(void) Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp DALI_TEST_EQUALS( vertexShader, vertex->Get(), TEST_LOCATION ); + Vector2 extraSize = renderer.GetProperty( renderer.GetPropertyIndex( "extraSize" ) ); + DALI_TEST_EQUALS( extraSize, Vector2(0.0f, 50.0f), 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 3d304a1..fd83765 100644 --- a/dali-toolkit/devel-api/visuals/visual-properties-devel.h +++ b/dali-toolkit/devel-api/visuals/visual-properties-devel.h @@ -84,6 +84,7 @@ enum Type } // namespace Property + /** * @brief The values of this enum determine how the visual should be fit to the view */ @@ -93,6 +94,44 @@ enum FittingMode FILL, ///< The visual should be stretched to fill, not preserving aspect ratio }; +/** + * @brief Devel Visual Transform for the offset or size. + */ +namespace Transform +{ + +/** + * @brief Visual Transform Property. + */ +namespace Property +{ + +/** + * @brief Enumeration for the type of Transform Property. + */ +enum Type +{ + SIZE_POLICY = Dali::Toolkit::Visual::Transform::Property::SIZE_POLICY, + + /** + * @brief Extra size value that will be added to the computed visual size. + * @details Name "extraSize", type Vector2. + * + * @note It is an absolute value. + * The property can be used when a user want to set a visual size as a combined value of `relative` and `absolute`. + * For example, when a user want to set a visual size to (ControlSize * 2 + 10), + * The transform map will be, + * transformMap.Add( Transform::Property::SIZE, Vector2( 2.0f, 2.0f ) ) + * .Add( Transform::Property::SIZE_POLICY, Vector2( Transform::Policy::Relative, Transform::Policy::Relative ) ) + * .Add( Transform::Property::EXTRA_SIZE, Vector2( 10.0f, 10.0f ) ); + */ + EXTRA_SIZE = SIZE_POLICY + 1, +}; + +} // namespace Property + +} // namespace Transform + } // namespace DevelVisual } // namespace Toolkit diff --git a/dali-toolkit/internal/visuals/color/color-visual.cpp b/dali-toolkit/internal/visuals/color/color-visual.cpp index 804b612..e2a30bd 100644 --- a/dali-toolkit/internal/visuals/color/color-visual.cpp +++ b/dali-toolkit/internal/visuals/color/color-visual.cpp @@ -55,10 +55,11 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n + uniform mediump vec2 extraSize;\n vec4 ComputeVertexPosition()\n {\n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n }\n @@ -89,6 +90,7 @@ const char* VERTEX_SHADER_ROUNDED_CORNER = DALI_COMPOSE_SHADER( //Visual size and offset uniform mediump vec2 offset;\n uniform mediump vec2 size;\n + uniform mediump vec2 extraSize;\n uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n @@ -96,7 +98,7 @@ const char* VERTEX_SHADER_ROUNDED_CORNER = DALI_COMPOSE_SHADER( \n vec4 ComputeVertexPosition()\n {\n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n vRectSize = visualSize / 2.0 - cornerRadius;\n vPosition = aPosition* visualSize;\n @@ -135,6 +137,7 @@ const char* VERTEX_SHADER_BLUR_EDGE = DALI_COMPOSE_SHADER( //Visual size and offset uniform mediump vec2 offset;\n uniform mediump vec2 size;\n + uniform mediump vec2 extraSize;\n uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n @@ -142,7 +145,7 @@ const char* VERTEX_SHADER_BLUR_EDGE = DALI_COMPOSE_SHADER( \n vec4 ComputeVertexPosition()\n {\n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + blurRadius * 2.0;\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize + blurRadius * 2.0;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n vRectSize = visualSize / 2.0;\n vPosition = aPosition* visualSize;\n diff --git a/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp b/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp index 5d35517..7fe979f 100644 --- a/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp +++ b/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp @@ -49,10 +49,11 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n + uniform mediump vec2 extraSize;\n \n vec4 ComputeVertexPosition()\n {\n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n }\n @@ -136,10 +137,11 @@ const char* VERTEX_SHADER_ROUNDED_CORNER = DALI_COMPOSE_SHADER( uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n uniform mediump float cornerRadius;\n + uniform mediump vec2 extraSize;\n \n vec4 ComputeVertexPosition()\n {\n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n vRectSize = visualSize / 2.0 - cornerRadius;\n vPosition = aPosition* visualSize;\n diff --git a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp index c8b601a..873eeca 100755 --- a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp +++ b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp @@ -64,6 +64,7 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n + uniform mediump vec2 extraSize;\n void main()\n {\n @@ -73,7 +74,7 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( mediump vec2 fixedTotal = vec2( uNinePatchFactorsX[ FACTOR_SIZE_X - 1 ].x, uNinePatchFactorsY[ FACTOR_SIZE_Y - 1 ].x );\n mediump vec2 stretchTotal = vec2( uNinePatchFactorsX[ FACTOR_SIZE_X - 1 ].y, uNinePatchFactorsY[ FACTOR_SIZE_Y - 1 ].y );\n \n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n \n mediump vec4 gridPosition = vec4( fixedFactor + ( visualSize.xy - fixedTotal ) * stretch / stretchTotal, 0.0, 1.0 );\n @@ -104,10 +105,11 @@ const char* VERTEX_SHADER_3X3 = DALI_COMPOSE_SHADER( uniform mediump vec4 offsetSizeMode;\n uniform mediump vec2 origin;\n uniform mediump vec2 anchorPoint;\n + uniform mediump vec2 extraSize;\n \n void main()\n {\n - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n \n mediump vec2 size = visualSize.xy;\n diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp index 67d54d5..4bb7634 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp @@ -26,6 +26,7 @@ // INTERNAL INCLUDES #include +#include #include #include @@ -242,6 +243,7 @@ void Internal::Visual::Base::Impl::CustomShader::CreatePropertyMap( Property::Ma Internal::Visual::Base::Impl::Transform::Transform() : mOffset( 0.0f,0.0f ), mSize( 1.0f,1.0f ), + mExtraSize( 0.0f,0.0f ), mOffsetSizeMode( 0.0f,0.0f,0.0f,0.0f ), mOrigin( Toolkit::Align::TOP_BEGIN ), mAnchorPoint( Toolkit::Align::TOP_BEGIN ) @@ -253,6 +255,7 @@ void Internal::Visual::Base::Impl::Transform::SetPropertyMap( const Property::Ma // Set default values mOffset = Vector2( 0.0f,0.0f ); mSize = Vector2( 1.0f,1.0f ); + mExtraSize = Vector2( 0.0f,0.0f ); mOffsetSizeMode = Vector4( 0.0f,0.0f,0.0f,0.0f ); mOrigin = Toolkit::Align::TOP_BEGIN; mAnchorPoint = Toolkit::Align::TOP_BEGIN; @@ -309,6 +312,11 @@ void Internal::Visual::Base::Impl::Transform::UpdatePropertyMap( const Property: } break; } + case Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE: + { + keyValue.second.Get( mExtraSize ); + break; + } } } else // Key type is STRING @@ -347,6 +355,10 @@ void Internal::Visual::Base::Impl::Transform::UpdatePropertyMap( const Property: mOffsetSizeMode.w = policy.y; } } + else if( keyValue.first == "extraSize" ) + { + keyValue.second.Get( mExtraSize ); + } } } } @@ -359,7 +371,8 @@ void Internal::Visual::Base::Impl::Transform::GetPropertyMap( Property::Map& map .Add( Toolkit::Visual::Transform::Property::ORIGIN, mOrigin ) .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, mAnchorPoint ) .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( mOffsetSizeMode.x, mOffsetSizeMode.y ) ) - .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( mOffsetSizeMode.z, mOffsetSizeMode.w ) ); + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( mOffsetSizeMode.z, mOffsetSizeMode.w ) ) + .Add( Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE, mExtraSize ); } void Internal::Visual::Base::Impl::Transform::RegisterUniforms( Dali::Renderer renderer, Toolkit::Direction::Type direction ) @@ -369,15 +382,15 @@ void Internal::Visual::Base::Impl::Transform::RegisterUniforms( Dali::Renderer r renderer.RegisterProperty( OFFSET_SIZE_MODE, mOffsetSizeMode ); renderer.RegisterProperty( ORIGIN, PointToVector2( mOrigin, direction ) - Vector2(0.5,0.5) ); renderer.RegisterProperty( ANCHOR_POINT, Vector2(0.5,0.5) - PointToVector2( mAnchorPoint, direction ) ); + renderer.RegisterProperty( EXTRA_SIZE, mExtraSize ); } Vector2 Internal::Visual::Base::Impl::Transform::GetVisualSize( const Vector2& controlSize ) { - return Vector2( Lerp( mOffsetSizeMode.x, mSize.x * controlSize.x, mSize.x ), - Lerp( mOffsetSizeMode.y, mSize.y * controlSize.y, mSize.y ) ); + return Vector2( Lerp( mOffsetSizeMode.z, mSize.x * controlSize.x, mSize.x ) , + Lerp( mOffsetSizeMode.w, mSize.y * controlSize.y, mSize.y ) ) + mExtraSize; } - } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.h b/dali-toolkit/internal/visuals/visual-base-data-impl.h index 123a722..839971b 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.h @@ -111,6 +111,7 @@ struct Base::Impl Vector2 mOffset; Vector2 mSize; + Vector2 mExtraSize; Vector4 mOffsetSizeMode; Toolkit::Align::Type mOrigin; Toolkit::Align::Type mAnchorPoint; diff --git a/dali-toolkit/internal/visuals/visual-string-constants.cpp b/dali-toolkit/internal/visuals/visual-string-constants.cpp index 4c4f3b1..293628e 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.cpp +++ b/dali-toolkit/internal/visuals/visual-string-constants.cpp @@ -66,6 +66,7 @@ const char * const OFFSET( "offset" ); const char * const OFFSET_SIZE_MODE( "offsetSizeMode" ); const char * const ORIGIN( "origin" ); const char * const ANCHOR_POINT( "anchorPoint" ); +const char * const EXTRA_SIZE( "extraSize" ); // Premultipled alpha const char * const PREMULTIPLIED_ALPHA( "premultipliedAlpha" ); diff --git a/dali-toolkit/internal/visuals/visual-string-constants.h b/dali-toolkit/internal/visuals/visual-string-constants.h index c1a13e9..d402e7f 100644 --- a/dali-toolkit/internal/visuals/visual-string-constants.h +++ b/dali-toolkit/internal/visuals/visual-string-constants.h @@ -50,6 +50,7 @@ extern const char * const OFFSET; extern const char * const OFFSET_SIZE_MODE; extern const char * const ORIGIN; extern const char * const ANCHOR_POINT; +extern const char * const EXTRA_SIZE; // Premultiplied alpha extern const char * const PREMULTIPLIED_ALPHA;