X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-base-data-impl.cpp;h=489dfb685fcd6b77c3fd87ff14d7d4dae123c91b;hp=21e146fc19c253fd6fb0efb40f69fa63ec411a4a;hb=0d88bbe11436dcc09a593d4b1fd9627b4a67942b;hpb=977955345d74e5ed53c8366822fbeae4afc66684 diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp index 21e146f..489dfb6 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp @@ -25,7 +25,7 @@ #include // INTERNAL INCLUDES -#include +#include #include namespace Dali @@ -46,10 +46,45 @@ DALI_ENUM_TO_STRING_WITH_SCOPE( Shader::Hint, OUTPUT_IS_TRANSPARENT ) DALI_ENUM_TO_STRING_WITH_SCOPE( Shader::Hint, MODIFIES_GEOMETRY ) DALI_ENUM_TO_STRING_TABLE_END( SHADER_HINT ) +DALI_ENUM_TO_STRING_TABLE_BEGIN( ALIGN ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, TOP_BEGIN ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, TOP_CENTER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, TOP_END ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, CENTER_BEGIN ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, CENTER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, CENTER_END ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, BOTTOM_BEGIN ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, BOTTOM_CENTER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Align, BOTTOM_END ) +DALI_ENUM_TO_STRING_TABLE_END( ALIGN ) + +Dali::Vector2 PointToVector2( Toolkit::Align::Type point, Toolkit::Direction::Type direction ) +{ + static const float pointToVector2[] = { 0.0f,0.0f, + 0.5f,0.0f, + 1.0f,0.0f, + 0.0f,0.5f, + 0.5f,0.5f, + 1.0f,0.5f, + 0.0f,1.0f, + 0.5f,1.0f, + 1.0f,1.0f }; + + Vector2 result( &pointToVector2[point*2] ); + if( direction == Direction::RIGHT_TO_LEFT ) + { + result.x = 1.0f - result.x; + } + + return result; +} + } // unnamed namespace Internal::Visual::Base::Impl::Impl() -: mCustomShader(NULL), +: mCustomShader( NULL ), + mTransform(), + mControlSize( Vector2::ZERO ), mDepthIndex( 0.0f ), mFlags( 0 ) { @@ -158,10 +193,88 @@ void Internal::Visual::Base::Impl::CustomShader::CreatePropertyMap( Property::Ma customShader.Insert( Toolkit::Visual::Shader::Property::HINTS, static_cast< int >( mHints ) ); } - map.Insert( Toolkit::VisualProperty::SHADER, customShader ); + map.Insert( Toolkit::DevelVisual::Property::SHADER, customShader ); } } +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( 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 ) ); +} + + } // namespace Internal } // namespace Toolkit