+Internal::Visual::Base::Impl::Transform::Transform()
+: 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)
+{
+}
+
+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);
+ 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 < map.Count(); ++i)
+ {
+ KeyValuePair keyValue = map.GetKeyValue(i);
+ switch(Visual::Base::GetIntKey(keyValue.first))
+ {
+ 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;
+ }
+ }
+ }
+}
+
+void Internal::Visual::Base::Impl::Transform::GetPropertyMap(Property::Map& map) const
+{
+ map.Clear();
+ 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::SetUniforms(Dali::VisualRenderer renderer, Toolkit::Direction::Type direction)
+{
+ renderer.SetProperty(VisualRenderer::Property::TRANSFORM_SIZE, mSize);
+ renderer.SetProperty(VisualRenderer::Property::TRANSFORM_OFFSET,
+ direction == Toolkit::Direction::LEFT_TO_RIGHT ? mOffset : mOffset * Vector2(-1.0f, 1.0f));
+ renderer.SetProperty(VisualRenderer::Property::TRANSFORM_OFFSET_SIZE_MODE, mOffsetSizeMode);
+ renderer.SetProperty(VisualRenderer::Property::TRANSFORM_ORIGIN, PointToVector2(mOrigin, direction) - Vector2(0.5, 0.5));
+ renderer.SetProperty(VisualRenderer::Property::TRANSFORM_ANCHOR_POINT,
+ Vector2(0.5, 0.5) - PointToVector2(mAnchorPoint, direction));
+ renderer.SetProperty(VisualRenderer::Property::EXTRA_SIZE, mExtraSize);
+}
+
+Vector2 Internal::Visual::Base::Impl::Transform::GetVisualSize(const Vector2& controlSize)
+{
+ return Vector2(Lerp(mOffsetSizeMode.z, mSize.x * controlSize.x, mSize.x),
+ Lerp(mOffsetSizeMode.w, mSize.y * controlSize.y, mSize.y)) +
+ mExtraSize;
+}
+