X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-base-data-impl.cpp;h=158c43211926479d72920dfcb2290ba341b3e665;hb=a2519d330569f4898996dfcc74b8d30433bace42;hp=21e146fc19c253fd6fb0efb40f69fa63ec411a4a;hpb=8c0b17fb124c735b31c441873da4d7ffc4b15eb5;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp index 21e146f..158c432 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp @@ -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 ) { @@ -162,6 +197,84 @@ 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), + 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::Visual::DevelProperty::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::Visual::DevelProperty::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::Visual::DevelProperty::Transform::Property::OFFSET, mOffset ) + .Add( Toolkit::Visual::DevelProperty::Transform::Property::SIZE, mSize ) + .Add( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN, mOrigin ) + .Add( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT, mAnchorPoint ) + .Add( Toolkit::Visual::DevelProperty::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