+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::CENTER),
+ mAnchorPoint(Toolkit::Align::CENTER)
+{
+}
+
+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::CENTER;
+ mAnchorPoint = Toolkit::Align::CENTER;
+
+ for( Property::Map::SizeType i(0); i<map.Count(); ++i )
+ {
+ KeyValuePair keyValue = map.GetKeyValue( i );
+ if( keyValue.first == Toolkit::DevelVisual::Transform::Property::OFFSET )
+ {
+ keyValue.second.Get( mOffset );
+ }
+ else if( keyValue.first == Toolkit::DevelVisual::Transform::Property::SIZE )
+ {
+ keyValue.second.Get( mSize );
+ }
+ else if( keyValue.first == Toolkit::DevelVisual::Transform::Property::ORIGIN )
+ {
+ Toolkit::Align::Type align(Toolkit::Align::CENTER);
+ if( Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, align ) )
+ {
+ mOrigin = align;
+ }
+ }
+ else if( keyValue.first == Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT )
+ {
+ Toolkit::Align::Type align(Toolkit::Align::CENTER);
+ if( Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, align ) )
+ {
+ mAnchorPoint = align;
+ }
+ }
+ else if( keyValue.first == Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE )
+ {
+ keyValue.second.Get( mOffsetSizeMode );
+ }
+ }
+}
+
+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_SIZE_MODE, mOffsetSizeMode );
+}
+
+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 ) );
+}
+
+