using System.Drawing;
using System.Windows.Forms;
namespace Microsoft.Drawing
{
///
/// 矩形帮助类
///
public static class RectangleEx
{
///
/// 调整矩形非空,影响原来矩形
///
/// 要调整的矩形
public static void MakeNotEmpty(ref Rectangle rect)
{
if (rect.Width < 1)
rect.Width = 1;
if (rect.Height < 1)
rect.Height = 1;
}
///
/// 获取矩形是否可见
///
/// 矩形
/// 宽度大于0并且高度大于0返回true,否则返回false
public static bool IsVisible(Rectangle rect)
{
return rect.Width > 0 && rect.Height > 0;
}
///
/// 在指定的方向放大矩形,不影响原来的矩形
///
/// 矩形
/// 方向
/// 放大量
/// 放大后的矩形
public static Rectangle Inflate(Rectangle rect, TabAlignment align, int value)
{
switch (align)
{
case TabAlignment.Top:
rect.Y -= value;
rect.Height += value;
break;
case TabAlignment.Bottom:
rect.Height += value;
break;
case TabAlignment.Left:
rect.X -= value;
rect.Width += value;
break;
case TabAlignment.Right:
rect.Width += value;
break;
default:
break;
}
return rect;
}
///
/// 在指定的方向和反向放大矩形,不影响原来的矩形
///
/// 矩形
/// 方向
/// 放大量
/// 反向放大量
/// 放大后矩形
public static Rectangle Inflate(Rectangle rect, TabAlignment align, int value, int revalue)
{
switch (align)
{
case TabAlignment.Top:
rect.Y -= value;
rect.Height += value + revalue;
break;
case TabAlignment.Bottom:
rect.Y -= revalue;
rect.Height += revalue + value;
break;
case TabAlignment.Left:
rect.X -= value;
rect.Width += value + revalue;
break;
case TabAlignment.Right:
rect.X -= revalue;
rect.Width += revalue + value;
break;
default:
break;
}
return rect;
}
///
/// 在指定的方向的两侧放大矩形,不影响原来的矩形
///
/// 矩形
/// 方向
/// 放大量
/// 放大后矩形
public static Rectangle InflateSide(Rectangle rect, TabAlignment align, int value)
{
int half = value / 2;
switch (align)
{
case TabAlignment.Top:
case TabAlignment.Bottom:
rect.X -= half;
rect.Width += value;
break;
case TabAlignment.Left:
case TabAlignment.Right:
rect.Y -= half;
rect.Height += value;
break;
default:
break;
}
return rect;
}
///
/// 按指定边调整矩形,使在该方向上的大小为指定值
///
/// 矩形
/// 方向
/// 大小
/// 调整后矩形
public static Rectangle Adjust(Rectangle rect, TabAlignment align, int value)
{
switch (align)
{
case TabAlignment.Top:
rect.Y += (rect.Height - value);
rect.Height = value;
break;
case TabAlignment.Bottom:
rect.Height = value;
break;
case TabAlignment.Left:
rect.X += (rect.Width - value);
rect.Width = value;
break;
case TabAlignment.Right:
rect.Width = value;
break;
default:
break;
}
return rect;
}
///
/// 调整矩形使其在指定方向上与标准矩形对齐,并加上偏移量,不影响原来的矩形
///
/// 矩形
/// 标准矩形
/// 方向
/// 偏移量
/// 调整后的矩形
public static Rectangle Align(Rectangle rect, Rectangle rectStand, TabAlignment align, int offset)
{
int value;
switch (align)
{
case TabAlignment.Top:
value = rect.Y - rectStand.Y + offset;
rect.Y -= value;
rect.Height += value;
break;
case TabAlignment.Bottom:
value = rectStand.Bottom - rect.Bottom + offset;
rect.Height += value;
break;
case TabAlignment.Left:
value = rect.X - rectStand.X + offset;
rect.X -= value;
rect.Width += value;
break;
case TabAlignment.Right:
value = rectStand.Right - rect.Right + offset;
rect.Width += value;
break;
default:
break;
}
return rect;
}
///
/// 矩形加上Padding后的新矩形
///
/// 矩形
/// 外边距
/// 新矩形
public static Rectangle Add(Rectangle rect, Padding padding)
{
return new Rectangle(rect.Left - padding.Left, rect.Top - padding.Top, rect.Width + padding.Horizontal, rect.Height + padding.Vertical);
}
///
/// 矩形减去Padding后的新矩形
///
/// 矩形
/// 内边距
/// 新矩形
public static Rectangle Subtract(Rectangle rect, Padding padding)
{
return new Rectangle(rect.Left + padding.Left, rect.Top + padding.Top, rect.Width - padding.Horizontal, rect.Height - padding.Vertical);
}
///
/// 将此矩形的位置调整指定的量。返回新矩形,不影响原来值。
///
/// 矩形
/// 该位置的偏移量
/// 偏移后的新矩形
public static Rectangle Offset(Rectangle rect, Point pos)
{
rect.Offset(pos);
return rect;
}
///
/// 将矩形的位置调整指定的量。返回新矩形,不影响原来值。
///
/// 矩形
/// 水平偏移量
/// 垂直偏移量
/// 偏移后的新矩形
public static Rectangle Offset(Rectangle rect, int x, int y)
{
rect.Offset(x, y);
return rect;
}
}
}