public static void CGRectDivide(CGRect rect, ref CGRect slice, ref CGRect remainder, CGFloat amount, CGRectEdge edge)
{
if (CGRectIsEmpty(rect) == 1)
{
slice = CGRectZero;
remainder = CGRectZero;
}
switch (edge)
{
case CGRectEdge.CGRectMinXEdge:
{
float delta = amount;
if (amount > rect.size.width)
{
delta = rect.size.width;
}
slice = CGRectMake(rect.origin.x,
rect.origin.y,
delta,
rect.size.height);
remainder = CGRectMake(rect.origin.x + delta,
rect.origin.y,
rect.size.width - delta,
rect.size.height);
}
break;
case CGRectEdge.CGRectMinYEdge:
{
float delta = amount;
if (amount > rect.size.height)
{
delta = rect.size.height;
}
slice = CGRectMake(rect.origin.x,
rect.origin.y,
rect.size.width,
delta);
remainder = CGRectMake(rect.origin.x,
rect.origin.y + delta,
rect.size.width,
rect.size.height - delta);
}
break;
case CGRectEdge.CGRectMaxXEdge:
{
float delta = amount;
if (amount > rect.size.width)
{
delta = rect.size.width;
}
slice = CGRectMake(rect.origin.x + rect.size.width - delta,
rect.origin.y,
delta,
rect.size.height);
remainder = CGRectMake(rect.origin.x,
rect.origin.y,
rect.size.width - delta,
rect.size.height);
}
break;
case CGRectEdge.CGRectMaxYEdge:
{
float delta = amount;
if (amount > rect.size.height)
{
delta = rect.size.height;
}
slice = CGRectMake(rect.origin.x,
rect.origin.y + rect.size.height - delta,
rect.size.width,
delta);
remainder = CGRectMake(rect.origin.x,
rect.origin.y,
rect.size.width,
rect.size.height - delta);
}
break;
default:
throw new ArgumentOutOfRangeException("edge");
}
}