private GraphicsPath GetRoundedRect(RectangleF baseRect,
float radius)
{
// if corner radius is less than or equal to zero,
// return the original rectangle
if( radius<=0.0F )
{
GraphicsPath mPath = new GraphicsPath();
mPath.AddRectangle(baseRect);
mPath.CloseFigure();
return mPath;
}
// if the corner radius is greater than or equal to
// half the width, or height (whichever is shorter)
// then return a capsule instead of a lozenge
if( radius>=(Math.Min(baseRect.Width, baseRect.Height))/2.0)
return GetCapsule( baseRect );
// create the arc for the rectangle sides and declare
// a graphics path object for the drawing
float diameter = radius * 2.0F;
SizeF sizeF = new SizeF( diameter, diameter );
RectangleF arc = new RectangleF( baseRect.Location, sizeF );
GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
// top left arc
path.AddArc( arc, 180, 90 );
// top right arc
arc.X = baseRect.Right-diameter;
path.AddArc( arc, 270, 90 );
// bottom right arc
arc.Y = baseRect.Bottom-diameter;
path.AddArc( arc, 0, 90 );
// bottom left arc
arc.X = baseRect.Left;
path.AddArc( arc, 90, 90 );
path.CloseFigure();
return path;
}
#endregion