/// <summary> /// Returns GraphicsPath for given style. /// </summary> /// <param name="style">Reference to style.</param> /// <param name="bounds">Style bounds.</param> /// <returns>New instance of GraphicsPath</returns> public static GraphicsPath GetBackgroundPath(ElementStyle style, Rectangle bounds, eStyleBackgroundPathPart pathPart) { GraphicsPath path=new GraphicsPath(); Rectangle clientRectangle; //if(drawPath) clientRectangle=/*DisplayHelp.GetDrawRectangle*/(ElementStyleDisplay.GetBackgroundRectangle(style,bounds)); //else // clientRectangle =/*DisplayHelp.GetDrawRectangle*/(ElementStyleDisplay.GetBackgroundRectangle(style, bounds)); if (pathPart==eStyleBackgroundPathPart.Complete && style.CornerTypeBottomLeft == eCornerType.Inherit && style.CornerTypeBottomRight == eCornerType.Inherit && style.CornerTypeTopLeft == eCornerType.Inherit && style.CornerTypeTopRight == eCornerType.Inherit) { switch (style.CornerType) { case eCornerType.Square: { path.AddRectangle(clientRectangle); break; } case eCornerType.Rounded: { ArcData ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.TopLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.TopRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.BottomRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.BottomLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); path.CloseAllFigures(); break; } case eCornerType.Diagonal: { path.AddLine(clientRectangle.X, clientRectangle.Bottom - style.CornerDiameter - 1, clientRectangle.X, clientRectangle.Y + style.CornerDiameter); path.AddLine(clientRectangle.X + style.CornerDiameter, clientRectangle.Y, clientRectangle.Right - style.CornerDiameter, clientRectangle.Y); path.AddLine(clientRectangle.Right, clientRectangle.Y + style.CornerDiameter, clientRectangle.Right, clientRectangle.Bottom - style.CornerDiameter - 1); path.AddLine(clientRectangle.Right - style.CornerDiameter - 1, clientRectangle.Bottom, clientRectangle.X + style.CornerDiameter, clientRectangle.Bottom); path.CloseAllFigures(); break; } } } else { if(pathPart==eStyleBackgroundPathPart.TopHalf) clientRectangle.Height = clientRectangle.Height/2; else if(pathPart==eStyleBackgroundPathPart.BottomHalf) { int h=clientRectangle.Height; clientRectangle.Height = clientRectangle.Height/2; clientRectangle.Y += (h - clientRectangle.Height-1); } eCornerType corner = style.CornerTypeTopLeft; if (corner == eCornerType.Inherit) corner = style.CornerType; if(pathPart==eStyleBackgroundPathPart.BottomHalf) corner=eCornerType.Square; if (corner == eCornerType.Rounded) { ArcData ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.TopLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.X, clientRectangle.Y + style.CornerDiameter, clientRectangle.X + style.CornerDiameter, clientRectangle.Y); } else { path.AddLine(clientRectangle.X, clientRectangle.Y + 2, clientRectangle.X, clientRectangle.Y); path.AddLine(clientRectangle.X, clientRectangle.Y ,clientRectangle.X+2, clientRectangle.Y); } corner = style.CornerTypeTopRight; if (corner == eCornerType.Inherit) corner = style.CornerType; if(pathPart==eStyleBackgroundPathPart.BottomHalf) corner=eCornerType.Square; if (corner == eCornerType.Rounded) { ArcData ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.TopRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.Right-style.CornerDiameter-1, clientRectangle.Y , clientRectangle.Right, clientRectangle.Y+style.CornerDiameter); } else { path.AddLine(clientRectangle.Right-2, clientRectangle.Y, clientRectangle.Right, clientRectangle.Y); path.AddLine(clientRectangle.Right, clientRectangle.Y, clientRectangle.Right, clientRectangle.Y+2); } corner = style.CornerTypeBottomRight; if (corner == eCornerType.Inherit) corner = style.CornerType; if(pathPart==eStyleBackgroundPathPart.TopHalf) corner=eCornerType.Square; if (corner == eCornerType.Rounded) { ArcData ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.BottomRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.Right, clientRectangle.Bottom - style.CornerDiameter - 1, clientRectangle.Right - style.CornerDiameter - 1, clientRectangle.Bottom); } else { path.AddLine(clientRectangle.Right, clientRectangle.Bottom-2, clientRectangle.Right, clientRectangle.Bottom); path.AddLine(clientRectangle.Right, clientRectangle.Bottom, clientRectangle.Right-2, clientRectangle.Bottom); } corner = style.CornerTypeBottomLeft; if (corner == eCornerType.Inherit) corner = style.CornerType; if(pathPart==eStyleBackgroundPathPart.TopHalf) corner=eCornerType.Square; if (corner == eCornerType.Rounded) { ArcData ad = GetCornerArc(clientRectangle, style.CornerDiameter, eCornerArc.BottomLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.X + 2, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom - style.CornerDiameter - 1); } else { path.AddLine(clientRectangle.X+2, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom); path.AddLine(clientRectangle.X, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom-2); } } return path; }
public static GraphicsPath GetRoundedRectanglePath(Rectangle clientRectangle, int topLeftCornerSize, int topRightCornerSize, int bottomLeftCornerSize, int bottomRightCornerSize, eStyleBackgroundPathPart pathPart, eCornerType topLeftCornerType, eCornerType topRightCornerType, eCornerType bottomLeftCornerType, eCornerType bottomRightCornerType, float partSize) { GraphicsPath path = new GraphicsPath(); if (pathPart == eStyleBackgroundPathPart.TopHalf) { if (partSize == 0) clientRectangle.Height = clientRectangle.Height / 2; else clientRectangle.Height = (int)(clientRectangle.Height * partSize); } else if (pathPart == eStyleBackgroundPathPart.BottomHalf) { int h = clientRectangle.Height; if (partSize == 0) clientRectangle.Height = clientRectangle.Height / 2; else clientRectangle.Height = (int)(clientRectangle.Height * partSize); clientRectangle.Y += (h - clientRectangle.Height - 1); } eCornerType corner = topLeftCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.BottomHalf) corner = eCornerType.Square; if (corner == eCornerType.Rounded && topLeftCornerSize>0) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, topLeftCornerSize, eCornerArc.TopLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.X, clientRectangle.Y + topLeftCornerSize, clientRectangle.X + topLeftCornerSize, clientRectangle.Y); } else { path.AddLine(clientRectangle.X, clientRectangle.Y + 2, clientRectangle.X, clientRectangle.Y); path.AddLine(clientRectangle.X, clientRectangle.Y, clientRectangle.X + 2, clientRectangle.Y); } corner = topRightCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.BottomHalf) corner = eCornerType.Square; if (corner == eCornerType.Rounded && topRightCornerSize>0) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, topRightCornerSize, eCornerArc.TopRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.Right - topRightCornerSize - 1, clientRectangle.Y, clientRectangle.Right, clientRectangle.Y + topRightCornerSize); } else { path.AddLine(clientRectangle.Right - 2, clientRectangle.Y, clientRectangle.Right, clientRectangle.Y); path.AddLine(clientRectangle.Right, clientRectangle.Y, clientRectangle.Right, clientRectangle.Y + 2); } corner = bottomRightCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.TopHalf) corner = eCornerType.Square; if (corner == eCornerType.Rounded && bottomRightCornerSize>0) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, bottomRightCornerSize, eCornerArc.BottomRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.Right, clientRectangle.Bottom - bottomRightCornerSize - 1, clientRectangle.Right - bottomRightCornerSize - 1, clientRectangle.Bottom); } else { path.AddLine(clientRectangle.Right, clientRectangle.Bottom - 2, clientRectangle.Right, clientRectangle.Bottom); path.AddLine(clientRectangle.Right, clientRectangle.Bottom, clientRectangle.Right - 2, clientRectangle.Bottom); } corner = bottomLeftCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.TopHalf) corner = eCornerType.Square; if (corner == eCornerType.Rounded && bottomLeftCornerSize>0) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, bottomLeftCornerSize, eCornerArc.BottomLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.X + 2, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom - bottomLeftCornerSize - 1); } else { path.AddLine(clientRectangle.X + 2, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom); path.AddLine(clientRectangle.X, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom - 2); } path.CloseAllFigures(); return path; }
public static GraphicsPath GetBorderPath(Rectangle clientRectangle, int cornerSize, eStyleBackgroundPathPart pathPart, eCornerType topLeftCornerType, eCornerType topRightCornerType, eCornerType bottomLeftCornerType, eCornerType bottomRightCornerType, bool leftBorder, bool rightBorder, bool topBorder, bool bottomBorder) { GraphicsPath path = new GraphicsPath(); if (pathPart == eStyleBackgroundPathPart.TopHalf) clientRectangle.Height = clientRectangle.Height / 2; else if (pathPart == eStyleBackgroundPathPart.BottomHalf) { int h = clientRectangle.Height; clientRectangle.Height = clientRectangle.Height / 2; clientRectangle.Y += (h - clientRectangle.Height - 1); } eCornerType corner = topLeftCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.BottomHalf) corner = eCornerType.Square; if (leftBorder) { path.AddLine(clientRectangle.X, clientRectangle.Bottom - (bottomBorder && (bottomLeftCornerType == eCornerType.Diagonal || bottomLeftCornerType == eCornerType.Rounded) ? cornerSize : 0), clientRectangle.X, clientRectangle.Y + (topBorder && (topLeftCornerType == eCornerType.Diagonal || topLeftCornerType == eCornerType.Rounded) ? cornerSize : 0)); } if (leftBorder && topBorder) { if (corner == eCornerType.Rounded) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, cornerSize, eCornerArc.TopLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.X, clientRectangle.Y + cornerSize, clientRectangle.X + cornerSize, clientRectangle.Y); } } if (topBorder) { path.AddLine(clientRectangle.X + ((topLeftCornerType == eCornerType.Diagonal || topLeftCornerType == eCornerType.Rounded) ? cornerSize : 0) , clientRectangle.Y, clientRectangle.Right - (rightBorder && (topRightCornerType == eCornerType.Diagonal || topRightCornerType == eCornerType.Rounded) ? cornerSize : 0), clientRectangle.Y); } corner = topRightCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.BottomHalf) corner = eCornerType.Square; if (topBorder && rightBorder) { if (corner == eCornerType.Rounded) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, cornerSize, eCornerArc.TopRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.Right - cornerSize - 1, clientRectangle.Y, clientRectangle.Right, clientRectangle.Y + cornerSize); } } if (rightBorder) { path.AddLine(clientRectangle.Right, clientRectangle.Y + ((topRightCornerType == eCornerType.Diagonal || topRightCornerType == eCornerType.Rounded) ? cornerSize : 0), clientRectangle.Right, clientRectangle.Bottom - (bottomBorder && (bottomRightCornerType == eCornerType.Diagonal || bottomRightCornerType == eCornerType.Rounded) ? cornerSize : 0)); } corner = bottomRightCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.TopHalf) corner = eCornerType.Square; if (corner == eCornerType.Rounded) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, cornerSize, eCornerArc.BottomRight); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.Right, clientRectangle.Bottom - cornerSize - 1, clientRectangle.Right - cornerSize - 1, clientRectangle.Bottom); } if (bottomBorder) { path.AddLine(clientRectangle.Right - ((bottomRightCornerType == eCornerType.Diagonal || bottomRightCornerType == eCornerType.Rounded) ? cornerSize : 0), clientRectangle.Bottom, clientRectangle.X + ((bottomLeftCornerType == eCornerType.Diagonal || bottomLeftCornerType == eCornerType.Rounded) ? cornerSize : 0), clientRectangle.Bottom); } corner = bottomLeftCornerType; if (corner == eCornerType.Inherit) corner = eCornerType.Square; if (pathPart == eStyleBackgroundPathPart.TopHalf) corner = eCornerType.Square; if (corner == eCornerType.Rounded) { ArcData ad = ElementStyleDisplay.GetCornerArc(clientRectangle, cornerSize, eCornerArc.BottomLeft); path.AddArc(ad.X, ad.Y, ad.Width, ad.Height, ad.StartAngle, ad.SweepAngle); } else if (corner == eCornerType.Diagonal) { path.AddLine(clientRectangle.X + 2, clientRectangle.Bottom, clientRectangle.X, clientRectangle.Bottom - cornerSize - 1); } return path; }
public static GraphicsPath GetRoundedRectanglePath(Rectangle clientRectangle, int cornerSize, eStyleBackgroundPathPart pathPart, eCornerType topLeftCornerType, eCornerType topRightCornerType, eCornerType bottomLeftCornerType, eCornerType bottomRightCornerType, float partSize) { return GetRoundedRectanglePath(clientRectangle, cornerSize, cornerSize, cornerSize, cornerSize, pathPart, topLeftCornerType, topRightCornerType, bottomLeftCornerType, bottomRightCornerType, partSize); }