public static void CreateRegion( Control Control, Rectangle BoundsRect, int Radius, ToolStripRoundStyle RoundStyle) { using (GraphicsPath path = ToolStripGraphicsPathHelper.CreatePath(BoundsRect, Radius, RoundStyle, true)) { Region region = new Region(path); path.Widen(Pens.White); region.Union(path); if (Control.Region != null) { Control.Region.Dispose(); } Control.Region = region; } }
/// <summary> /// /// </summary> /// <param name="G"></param> /// <param name="Rect"></param> /// <param name="BaseColor"></param> /// <param name="BorderColor"></param> /// <param name="InnerBorderColor"></param> /// <param name="Style"></param> /// <param name="RoundWidth"></param> /// <param name="BasePosition"></param> /// <param name="DrawBorder"></param> /// <param name="DrawGlass"></param> /// <param name="Mode"></param> internal static void RenderBackgroundInternal( Graphics G, Rectangle Rect, Color BaseColor, Color BorderColor, Color InnerBorderColor, ToolStripRoundStyle Style, int RoundWidth, float BasePosition, bool DrawBorder, bool DrawGlass, LinearGradientMode Mode) { if (DrawBorder) { Rect.Width--; Rect.Height--; } using (LinearGradientBrush brush = new LinearGradientBrush(Rect, Color.Transparent, Color.Transparent, Mode)) { Color[] colors = new Color[4]; colors[0] = GetColor(BaseColor, 0, 35, 24, 9); colors[1] = GetColor(BaseColor, 0, 13, 8, 3); colors[2] = BaseColor; colors[3] = GetColor(BaseColor, 0, 35, 24, 9); ColorBlend blend = new ColorBlend(); blend.Positions = new float[] { 0.0f, BasePosition, BasePosition + 0.05f, 1.0f }; blend.Colors = colors; brush.InterpolationColors = blend; if (Style != ToolStripRoundStyle.None) { using (GraphicsPath path = ToolStripGraphicsPathHelper.CreatePath(Rect, RoundWidth, Style, false)) { G.FillPath(brush, path); } if (BaseColor.A > 80) { Rectangle rectTop = Rect; if (Mode == LinearGradientMode.Vertical) { rectTop.Height = (int)(rectTop.Height * BasePosition); } else { rectTop.Width = (int)(Rect.Width * BasePosition); } using (GraphicsPath pathTop = ToolStripGraphicsPathHelper.CreatePath(rectTop, RoundWidth, ToolStripRoundStyle.Top, false)) { using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(128, 255, 255, 255))) { G.FillPath(brushAlpha, pathTop); } } } if (DrawGlass) { RectangleF glassRect = Rect; if (Mode == LinearGradientMode.Vertical) { glassRect.Y = Rect.Y + Rect.Height * BasePosition; glassRect.Height = (Rect.Height - Rect.Height * BasePosition) * 2; } else { glassRect.X = Rect.X + Rect.Width * BasePosition; glassRect.Width = (Rect.Width - Rect.Width * BasePosition) * 2; } ToolStripControlPaintEx.DrawGlass(G, glassRect, 170, 0); } if (DrawBorder) { using (GraphicsPath path = ToolStripGraphicsPathHelper.CreatePath(Rect, RoundWidth, Style, false)) { using (Pen pen = new Pen(BorderColor)) { G.DrawPath(pen, path); } } Rect.Inflate(-1, -1); using (GraphicsPath path = ToolStripGraphicsPathHelper.CreatePath(Rect, RoundWidth, Style, false)) { using (Pen pen = new Pen(InnerBorderColor)) { G.DrawPath(pen, path); } } } } else { G.FillRectangle(brush, Rect); if (BaseColor.A > 80) { Rectangle rectTop = Rect; if (Mode == LinearGradientMode.Vertical) { rectTop.Height = (int)(rectTop.Height * BasePosition); } else { rectTop.Width = (int)(Rect.Width * BasePosition); } using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(128, 255, 255, 255))) { G.FillRectangle(brushAlpha, rectTop); } } if (DrawGlass) { RectangleF glassRect = Rect; if (Mode == LinearGradientMode.Vertical) { glassRect.Y = Rect.Y + Rect.Height * BasePosition; glassRect.Height = (Rect.Height - Rect.Height * BasePosition) * 2; } else { glassRect.X = Rect.X + Rect.Width * BasePosition; glassRect.Width = (Rect.Width - Rect.Width * BasePosition) * 2; } ToolStripControlPaintEx.DrawGlass(G, glassRect, 200, 0); } if (DrawBorder) { using (Pen pen = new Pen(BorderColor)) { G.DrawRectangle(pen, Rect); } Rect.Inflate(-1, -1); using (Pen pen = new Pen(InnerBorderColor)) { G.DrawRectangle(pen, Rect); } } } } }