+Internal::Visual::Base::Impl::Transform::Transform()
+: mOffset( 0.0f,0.0f ),
+ mSize( 1.0f,1.0f ),
+ mOffsetSizeMode( 0.0f,0.0f,0.0f,0.0f ),
+ mOrigin( Toolkit::Align::TOP_BEGIN ),
+ mAnchorPoint( Toolkit::Align::TOP_BEGIN )
+{
+}
+
+void Internal::Visual::Base::Impl::Transform::SetPropertyMap( const Property::Map& map )
+{
+ // Set default values
+ mOffset = Vector2( 0.0f,0.0f );
+ mSize = Vector2( 1.0f,1.0f );
+ mOffsetSizeMode = Vector4( 0.0f,0.0f,0.0f,0.0f );
+ mOrigin = Toolkit::Align::TOP_BEGIN;
+ mAnchorPoint = Toolkit::Align::TOP_BEGIN;
+
+ UpdatePropertyMap( map );
+}
+
+void Internal::Visual::Base::Impl::Transform::UpdatePropertyMap( const Property::Map& map )
+{
+ for( Property::Map::SizeType i(0); i<map.Count(); ++i )
+ {
+ KeyValuePair keyValue = map.GetKeyValue( i );
+ if( keyValue.first.type == Property::Key::INDEX )
+ {
+ switch( keyValue.first.indexKey )
+ {
+ case Toolkit::DevelVisual::Transform::Property::OFFSET:
+ {
+ keyValue.second.Get( mOffset );
+ break;
+ }
+ case Toolkit::DevelVisual::Transform::Property::SIZE:
+ {
+ keyValue.second.Get( mSize );
+ break;
+ }
+ case Toolkit::DevelVisual::Transform::Property::ORIGIN:
+ {
+ Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, mOrigin );
+ break;
+ }
+ case Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT:
+ {
+ Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, mAnchorPoint );
+ break;
+ }
+ case Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY:
+ {
+ Vector2 policy;
+ if( GetPolicyFromValue( keyValue.second, policy ) )
+ {
+ mOffsetSizeMode.x = policy.x;
+ mOffsetSizeMode.y = policy.y;
+ }
+ break;
+ }
+ case Toolkit::DevelVisual::Transform::Property::SIZE_POLICY:
+ {
+ Vector2 policy;
+ if( GetPolicyFromValue( keyValue.second, policy ) )
+ {
+ mOffsetSizeMode.z = policy.x;
+ mOffsetSizeMode.w = policy.y;
+ }
+ break;
+ }
+ }
+ }
+ else // Key type is STRING
+ {
+ if( keyValue.first == "offset" )
+ {
+ keyValue.second.Get( mOffset );
+ }
+ else if( keyValue.first == "size" )
+ {
+ keyValue.second.Get( mSize );
+ }
+ else if( keyValue.first == "origin" )
+ {
+ Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, mOrigin );
+ }
+ else if( keyValue.first == "anchorPoint" )
+ {
+ Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, mAnchorPoint );
+ }
+ else if( keyValue.first == "offsetPolicy" )
+ {
+ Vector2 policy;
+ if( GetPolicyFromValue( keyValue.second, policy ) )
+ {
+ mOffsetSizeMode.x = policy.x;
+ mOffsetSizeMode.y = policy.y;
+ }
+ }
+ else if( keyValue.first == "sizePolicy" )
+ {
+ Vector2 policy;
+ if( GetPolicyFromValue( keyValue.second, policy ) )
+ {
+ mOffsetSizeMode.z = policy.x;
+ mOffsetSizeMode.w = policy.y;
+ }
+ }
+ }
+ }
+}
+
+void Internal::Visual::Base::Impl::Transform::GetPropertyMap( Property::Map& map ) const
+{
+ map.Clear();
+ map.Add( Toolkit::DevelVisual::Transform::Property::OFFSET, mOffset )
+ .Add( Toolkit::DevelVisual::Transform::Property::SIZE, mSize )
+ .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, mOrigin )
+ .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, mAnchorPoint )
+ .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( mOffsetSizeMode.x, mOffsetSizeMode.y ) )
+ .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( mOffsetSizeMode.z, mOffsetSizeMode.w ) );
+}
+
+void Internal::Visual::Base::Impl::Transform::RegisterUniforms( Dali::Renderer renderer, Toolkit::Direction::Type direction )
+{
+ renderer.RegisterProperty( SIZE, mSize );
+ renderer.RegisterProperty( OFFSET, direction == Toolkit::Direction::LEFT_TO_RIGHT ? mOffset : mOffset * Vector2(-1.0f,1.0f));
+ 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 ) );
+}
+
+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 ) );
+}
+
+