void ApplyOnSizeChanged(RelationDef info)
{
float targetX, targetY;
if (_target != _owner.parent)
{
targetX = _target.x;
targetY = _target.y;
}
else
{
targetX = 0;
targetY = 0;
}
float v, tmp;
switch (info.type)
{
case RelationType.Left_Left:
break;
case RelationType.Left_Center:
v = _owner.x - (targetX + _targetData.z / 2);
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
_owner.x = targetX + _target._rawWidth / 2 + v;
break;
case RelationType.Left_Right:
v = _owner.x - (targetX + _targetData.z);
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
_owner.x = targetX + _target._rawWidth + v;
break;
case RelationType.Center_Center:
v = _owner.x + _owner._rawWidth / 2 - (targetX + _targetData.z / 2);
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
_owner.x = targetX + _target._rawWidth / 2 + v - _owner._rawWidth / 2;
break;
case RelationType.Right_Left:
v = _owner.x + _owner._rawWidth - targetX;
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
_owner.x = targetX + v - _owner._rawWidth;
break;
case RelationType.Right_Center:
v = _owner.x + _owner._rawWidth - (targetX + _targetData.z / 2);
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
_owner.x = targetX + _target._rawWidth / 2 + v - _owner._rawWidth;
break;
case RelationType.Right_Right:
v = _owner.x + _owner._rawWidth - (targetX + _targetData.z);
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
_owner.x = targetX + _target._rawWidth + v - _owner._rawWidth;
break;
case RelationType.Top_Top:
break;
case RelationType.Top_Middle:
v = _owner.y - (targetY + _targetData.w / 2);
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
_owner.y = targetY + _target._rawHeight / 2 + v;
break;
case RelationType.Top_Bottom:
v = _owner.y - (targetY + _targetData.w);
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
_owner.y = targetY + _target._rawHeight + v;
break;
case RelationType.Middle_Middle:
v = _owner.y + _owner._rawHeight / 2 - (targetY + _targetData.w / 2);
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
_owner.y = targetY + _target._rawHeight / 2 + v - _owner._rawHeight / 2;
break;
case RelationType.Bottom_Top:
v = _owner.y + _owner._rawHeight - targetY;
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
_owner.y = targetY + v - _owner._rawHeight;
break;
case RelationType.Bottom_Middle:
v = _owner.y + _owner._rawHeight - (targetY + _targetData.w / 2);
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
_owner.y = targetY + _target._rawHeight / 2 + v - _owner._rawHeight;
break;
case RelationType.Bottom_Bottom:
v = _owner.y + _owner._rawHeight - (targetY + _targetData.w);
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
_owner.y = targetY + _target._rawHeight + v - _owner._rawHeight;
break;
case RelationType.Width:
if (_owner.underConstruct && _owner == _target.parent)
v = _owner.sourceWidth - _target.initWidth;
else
v = _owner._rawWidth - _targetData.z;
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
if (_target == _owner.parent)
_owner.SetSize(_target._rawWidth + v, _owner._rawHeight, true);
else
_owner.width = _target._rawWidth + v;
break;
case RelationType.Height:
if (_owner.underConstruct && _owner == _target.parent)
v = _owner.sourceHeight - _target.initHeight;
else
v = _owner._rawHeight - _targetData.w;
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
if (_target == _owner.parent)
_owner.SetSize(_owner._rawWidth, _target._rawHeight + v, true);
else
_owner.height = _target._rawHeight + v;
break;
case RelationType.LeftExt_Left:
break;
case RelationType.LeftExt_Right:
v = _owner.x - (targetX + _targetData.z);
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
tmp = _owner.x;
_owner.x = targetX + _target._rawWidth + v;
_owner.width = _owner._rawWidth - (_owner.x - tmp);
break;
case RelationType.RightExt_Left:
break;
case RelationType.RightExt_Right:
if (_owner.underConstruct && _owner == _target.parent)
v = _owner.sourceWidth - (targetX + _target.initWidth);
else
v = _owner._rawWidth - (targetX + _targetData.z);
if (_owner != _target.parent)
v += _owner.x;
if (info.percent)
v = v / _targetData.z * _target._rawWidth;
if (_owner != _target.parent)
_owner.width = targetX + _target._rawWidth + v - _owner.x;
else
_owner.width = targetX + _target._rawWidth + v;
break;
case RelationType.TopExt_Top:
break;
case RelationType.TopExt_Bottom:
v = _owner.y - (targetY + _targetData.w);
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
tmp = _owner.y;
_owner.y = targetY + _target._rawHeight + v;
_owner.height = _owner._rawHeight - (_owner.y - tmp);
break;
case RelationType.BottomExt_Top:
break;
case RelationType.BottomExt_Bottom:
if (_owner.underConstruct && _owner == _target.parent)
v = _owner.sourceHeight - (targetY + _target.initHeight);
else
v = _owner._rawHeight - (targetY + _targetData.w);
if (_owner != _target.parent)
v += _owner.y;
if (info.percent)
v = v / _targetData.w * _target._rawHeight;
if (_owner != _target.parent)
_owner.height = targetY + _target._rawHeight + v - _owner.y;
else
_owner.height = targetY + _target._rawHeight + v;
break;
}
}