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=67ab688b12cba40a978277218ab218f6a74eba5f;hp=158c43211926479d72920dfcb2290ba341b3e665;hb=16912baf519a33ab99788619118df99c854076de;hpb=2b8d1a092d8c907339acb33a58604a8f70251ace diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp index 158c432..67ab688 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,13 +19,15 @@ #include // EXTERNAL INCLUDES -#include +#include #include #include #include // INTERNAL INCLUDES -#include +#include +#include +#include #include namespace Dali @@ -58,6 +60,11 @@ 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_ENUM_TO_STRING_TABLE_BEGIN( POLICY ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Visual::Transform::Policy, RELATIVE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::Visual::Transform::Policy, ABSOLUTE ) +DALI_ENUM_TO_STRING_TABLE_END( POLICY ) + Dali::Vector2 PointToVector2( Toolkit::Align::Type point, Toolkit::Direction::Type direction ) { static const float pointToVector2[] = { 0.0f,0.0f, @@ -79,14 +86,51 @@ Dali::Vector2 PointToVector2( Toolkit::Align::Type point, Toolkit::Direction::Ty return result; } +bool GetPolicyFromValue( const Property::Value& value, Vector2& policy ) +{ + bool success = false; + if( value.Get( policy ) ) + { + success = true; + } + else + { + const Property::Array* array = value.GetArray(); + if( array && array->Size() == 2 ) + { + Toolkit::Visual::Transform::Policy::Type xPolicy = static_cast< Toolkit::Visual::Transform::Policy::Type >( -1 ); // Assign an invalid value so definitely changes + Toolkit::Visual::Transform::Policy::Type yPolicy = static_cast< Toolkit::Visual::Transform::Policy::Type >( -1 ); // Assign an invalid value so definitely changes + + if( Scripting::GetEnumerationProperty< Toolkit::Visual::Transform::Policy::Type >( array->GetElementAt( 0 ), POLICY_TABLE, POLICY_TABLE_COUNT, xPolicy ) && + Scripting::GetEnumerationProperty< Toolkit::Visual::Transform::Policy::Type >( array->GetElementAt( 1 ), POLICY_TABLE, POLICY_TABLE_COUNT, yPolicy ) ) + { + policy.x = xPolicy; + policy.y = yPolicy; + success = true; + } + } + } + return success; +} + } // unnamed namespace -Internal::Visual::Base::Impl::Impl() -: mCustomShader( NULL ), +Internal::Visual::Base::Impl::Impl(FittingMode fittingMode, Toolkit::Visual::Type type) +: mCustomShader(NULL), + mEventObserver(NULL), mTransform(), - mControlSize( Vector2::ZERO ), - mDepthIndex( 0.0f ), - mFlags( 0 ) + mMixColor(Color::WHITE), + mControlSize(Vector2::ZERO), + mCornerRadius(0.0f), + mCornerRadiusPolicy(1.0f), + mDepthIndex(0.0f), + mMixColorIndex(Property::INVALID_INDEX), + mCornerRadiusIndex(Property::INVALID_INDEX), + mFittingMode(fittingMode), + mFlags(0), + mResourceStatus(Toolkit::Visual::ResourceStatus::PREPARING), + mType(type), + mNeedCornerRadius(false) { } @@ -112,7 +156,7 @@ void Internal::Visual::Base::Impl::CustomShader::SetPropertyMap( const Property: Property::Value* vertexShaderValue = shaderMap.Find( Toolkit::Visual::Shader::Property::VERTEX_SHADER, CUSTOM_VERTEX_SHADER ); if( vertexShaderValue ) { - if( !vertexShaderValue->Get( mVertexShader ) ) + if( ! GetStringFromProperty( *vertexShaderValue, mVertexShader ) ) { DALI_LOG_ERROR( "'%s' parameter does not correctly specify a string\n", CUSTOM_VERTEX_SHADER ); } @@ -121,7 +165,7 @@ void Internal::Visual::Base::Impl::CustomShader::SetPropertyMap( const Property: Property::Value* fragmentShaderValue = shaderMap.Find( Toolkit::Visual::Shader::Property::FRAGMENT_SHADER, CUSTOM_FRAGMENT_SHADER ); if( fragmentShaderValue ) { - if( !fragmentShaderValue->Get( mFragmentShader ) ) + if( ! GetStringFromProperty( *fragmentShaderValue, mFragmentShader ) ) { DALI_LOG_ERROR( "'%s' parameter does not correctly specify a string\n", CUSTOM_FRAGMENT_SHADER ); } @@ -193,58 +237,131 @@ 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::Visual::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) +: 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), + mOffsetIndex(Property::INVALID_INDEX), + mSizeIndex(Property::INVALID_INDEX) { } 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; + // 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; + + UpdatePropertyMap( map ); +} +void Internal::Visual::Base::Impl::Transform::UpdatePropertyMap( const Property::Map& map ) +{ for( Property::Map::SizeType i(0); i( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, align ) ) + switch( keyValue.first.indexKey ) { - mOrigin = align; + case Toolkit::Visual::Transform::Property::OFFSET: + { + keyValue.second.Get( mOffset ); + break; + } + case Toolkit::Visual::Transform::Property::SIZE: + { + keyValue.second.Get( mSize ); + break; + } + case Toolkit::Visual::Transform::Property::ORIGIN: + { + Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, mOrigin ); + break; + } + case Toolkit::Visual::Transform::Property::ANCHOR_POINT: + { + Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, mAnchorPoint ); + break; + } + case Toolkit::Visual::Transform::Property::OFFSET_POLICY: + { + Vector2 policy; + if( GetPolicyFromValue( keyValue.second, policy ) ) + { + mOffsetSizeMode.x = policy.x; + mOffsetSizeMode.y = policy.y; + } + break; + } + case Toolkit::Visual::Transform::Property::SIZE_POLICY: + { + Vector2 policy; + if( GetPolicyFromValue( keyValue.second, policy ) ) + { + mOffsetSizeMode.z = policy.x; + mOffsetSizeMode.w = policy.y; + } + break; + } + case Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE: + { + keyValue.second.Get( mExtraSize ); + break; + } } } - else if( keyValue.first == Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT ) + else // Key type is STRING { - Toolkit::Align::Type align(Toolkit::Align::CENTER); - if( Scripting::GetEnumerationProperty< Toolkit::Align::Type >( keyValue.second, ALIGN_TABLE, ALIGN_TABLE_COUNT, align ) ) + if( keyValue.first == "offset" ) { - mAnchorPoint = align; + 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; + } + } + else if( keyValue.first == "extraSize" ) + { + keyValue.second.Get( mExtraSize ); } - } - else if( keyValue.first == Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE ) - { - keyValue.second.Get( mOffsetSizeMode ); } } } @@ -252,29 +369,31 @@ void Internal::Visual::Base::Impl::Transform::SetPropertyMap( const Property::Ma 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 ); + map.Add( Toolkit::Visual::Transform::Property::OFFSET, mOffset ) + .Add( Toolkit::Visual::Transform::Property::SIZE, mSize ) + .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::DevelVisual::Transform::Property::EXTRA_SIZE, mExtraSize ); } 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)); + mSizeIndex = renderer.RegisterProperty(SIZE, mSize); + mOffsetIndex = 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 ) ); + renderer.RegisterProperty( EXTRA_SIZE, mExtraSize ); } 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