Introduce new visual transform property : EXTRA_SIZE 92/231192/2
authorJiyun Yang <ji.yang@samsung.com>
Mon, 13 Apr 2020 09:28:06 +0000 (18:28 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Tue, 21 Apr 2020 06:40:58 +0000 (15:40 +0900)
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 <ji.yang@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp
dali-toolkit/devel-api/visuals/visual-properties-devel.h
dali-toolkit/internal/visuals/color/color-visual.cpp
dali-toolkit/internal/visuals/image-visual-shader-factory.cpp
dali-toolkit/internal/visuals/npatch/npatch-visual.cpp
dali-toolkit/internal/visuals/visual-base-data-impl.cpp
dali-toolkit/internal/visuals/visual-base-data-impl.h
dali-toolkit/internal/visuals/visual-string-constants.cpp
dali-toolkit/internal/visuals/visual-string-constants.h

index b6505e2..0a86423 100644 (file)
@@ -2726,6 +2726,11 @@ int UtcDaliVisualGetTransform(void)
     DALI_TEST_CHECK( typeValue );
     DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN );
   }
     DALI_TEST_CHECK( typeValue );
     DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == 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>() == Vector2(0.0f,0.0f) );
+  }
 
   END_TEST;
 }
 
   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( 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) );
 
 
   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<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
   }
     DALI_TEST_CHECK( typeValue );
     DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), 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>(),Vector2(50.0f,50.0f), TEST_LOCATION );
+  }
 
   //Put the visual on the stage
   DummyControl actor = DummyControl::New(true);
 
   //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<Vector2>( index );
   DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
 
   Vector2 anchorPoint = renderer.GetProperty<Vector2>( 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<Vector2>( 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 ) );
   //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);
   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<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
   DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
 
   anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
   DALI_TEST_EQUALS( anchorPoint, Vector2(0.5f,0.5f), TEST_LOCATION );
+
+  extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
+  DALI_TEST_EQUALS( extraSize, Vector2(0.5f,0.5f), TEST_LOCATION );
 }
 
 int UtcDaliVisualSetTransform0(void)
 }
 
 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["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;
   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<std::string>(), TEST_LOCATION );
 
   Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp
   DALI_TEST_EQUALS( vertexShader, vertex->Get<std::string>(), TEST_LOCATION );
 
+  Vector2 extraSize = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "extraSize" ) );
+  DALI_TEST_EQUALS( extraSize, Vector2(0.0f, 50.0f), TEST_LOCATION );
+
   END_TEST;
 }
 
   END_TEST;
 }
 
index 3d304a1..fd83765 100644 (file)
@@ -84,6 +84,7 @@ enum Type
 
 } // namespace Property
 
 
 } // namespace Property
 
+
 /**
  * @brief The values of this enum determine how the visual should be fit to the view
  */
 /**
  * @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
 };
 
   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
 } // namespace DevelVisual
 
 } // namespace Toolkit
index 804b612..e2a30bd 100644 (file)
@@ -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 vec4 offsetSizeMode;\n
   uniform mediump vec2 origin;\n
   uniform mediump vec2 anchorPoint;\n
+  uniform mediump vec2 extraSize;\n
 
   vec4 ComputeVertexPosition()\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
     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
   //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
   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
   \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
     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
   //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
   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
   \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
     vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n
     vRectSize = visualSize / 2.0;\n
     vPosition = aPosition* visualSize;\n
index 5d35517..7fe979f 100644 (file)
@@ -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 vec4 offsetSizeMode;\n
   uniform mediump vec2 origin;\n
   uniform mediump vec2 anchorPoint;\n
+  uniform mediump vec2 extraSize;\n
 \n
   vec4 ComputeVertexPosition()\n
   {\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
     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 origin;\n
   uniform mediump vec2 anchorPoint;\n
   uniform mediump float cornerRadius;\n
+  uniform mediump vec2 extraSize;\n
   \n
   vec4 ComputeVertexPosition()\n
   {\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
     vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n
     vRectSize = visualSize / 2.0 - cornerRadius;\n
     vPosition = aPosition* visualSize;\n
index c8b601a..873eeca 100755 (executable)
@@ -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 vec4 offsetSizeMode;\n
   uniform mediump vec2 origin;\n
   uniform mediump vec2 anchorPoint;\n
+  uniform mediump vec2 extraSize;\n
 
   void main()\n
   {\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
     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
     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 vec4 offsetSizeMode;\n
     uniform mediump vec2 origin;\n
     uniform mediump vec2 anchorPoint;\n
+    uniform mediump vec2 extraSize;\n
     \n
     void main()\n
     {\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
       vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n
       \n
       mediump vec2 size         = visualSize.xy;\n
index 67d54d5..4bb7634 100644 (file)
@@ -26,6 +26,7 @@
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/visuals/visual-properties.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/visuals/visual-properties.h>
+#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
 #include <dali-toolkit/internal/helpers/property-helper.h>
 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
 
 #include <dali-toolkit/internal/helpers/property-helper.h>
 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
 
@@ -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 ),
 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 )
   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 );
   // 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;
   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;
         }
           }
           break;
         }
+        case Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE:
+        {
+          keyValue.second.Get( mExtraSize );
+          break;
+        }
       }
     }
     else  // Key type is STRING
       }
     }
     else  // Key type is STRING
@@ -347,6 +355,10 @@ void Internal::Visual::Base::Impl::Transform::UpdatePropertyMap( const Property:
           mOffsetSizeMode.w = policy.y;
         }
       }
           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::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 )
 }
 
 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( 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 )
 {
 }
 
 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
 } // namespace Internal
 
 } // namespace Toolkit
index 123a722..839971b 100644 (file)
@@ -111,6 +111,7 @@ struct Base::Impl
 
     Vector2 mOffset;
     Vector2 mSize;
 
     Vector2 mOffset;
     Vector2 mSize;
+    Vector2 mExtraSize;
     Vector4 mOffsetSizeMode;
     Toolkit::Align::Type mOrigin;
     Toolkit::Align::Type mAnchorPoint;
     Vector4 mOffsetSizeMode;
     Toolkit::Align::Type mOrigin;
     Toolkit::Align::Type mAnchorPoint;
index 4c4f3b1..293628e 100644 (file)
@@ -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 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" );
 
 // Premultipled alpha
 const char * const PREMULTIPLIED_ALPHA( "premultipliedAlpha" );
index c1a13e9..d402e7f 100644 (file)
@@ -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 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;
 
 // Premultiplied alpha
 extern const char * const PREMULTIPLIED_ALPHA;