protected void SetDimension(Point actualSize, Point containerSize)
{
var size = new Point(
Math.Min(containerSize.X, HorizontalAlignment == HorizontalAlignment.Stretch ? containerSize.X : actualSize.X),
Math.Min(containerSize.Y, VerticalAlignment == VerticalAlignment.Stretch ? containerSize.Y : actualSize.Y));
Point minSize = GetMinClientSize(containerSize) + Borders;
Point maxSize = GetMaxClientSize(containerSize) + Borders;
size.X = Math.Max(minSize.X, Math.Min(maxSize.X, size.X));
size.Y = Math.Max(minSize.Y, Math.Min(maxSize.Y, size.Y));
ActualSize = size;
int x = 0;
int y = 0;
switch (HorizontalAlignment)
{
case HorizontalAlignment.Center:
x = (containerSize.X - ActualSize.X) / 2;
break;
case HorizontalAlignment.Right:
x = containerSize.X - ActualSize.X;
break;
}
switch (VerticalAlignment)
{
case VerticalAlignment.Center:
y = (containerSize.Y - ActualSize.Y) / 2;
break;
case VerticalAlignment.Bottom:
y = containerSize.Y - ActualSize.Y;
break;
}
ActualPosition = new Point(x, y);
}