protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { if (e.ToolStrip is ToolStripDropDownMenu) { return; } #region Background using (LinearGradientBrush b = new LinearGradientBrush( Point.Empty, new PointF(0, e.ToolStrip.Height), ColorTable.BackgroundNorth, ColorTable.BackgroundSouth)) { using (GraphicsPath border = GetToolStripRectangle(e.ToolStrip)) { e.Graphics.FillPath(b, border); } } #endregion if (GlossyEffect) { #region Glossy Effect DrawGlossyEffect(e.Graphics, e.ToolStrip, 1); #endregion } if (BackgroundGlow) { #region BackroundGlow int glowSize = Convert.ToInt32(Convert.ToSingle(e.ToolStrip.Height) * 0.15f); Rectangle glow = new Rectangle(0, e.ToolStrip.Height - glowSize - 1, e.ToolStrip.Width - 1, glowSize); using (LinearGradientBrush b = new LinearGradientBrush( new Point(0, glow.Top - 1), new PointF(0, glow.Bottom), Color.FromArgb(0, ColorTable.BackgroundGlow), ColorTable.BackgroundGlow)) { using (GraphicsPath border = GraphicsTools.CreateBottomRoundRectangle(glow, ToolStripRadius)) { e.Graphics.FillPath(b, border); } } #endregion } }
/// <summary> /// Draws the background of a menu, vista style /// </summary> /// <param name="g"></param> /// <param name="r"></param> /// <param name="highlighted"></param> private void DrawVistaMenuBackground(Graphics g, Rectangle r, bool highlighted, bool isMainMenu) { //g.Clear(ColorTable.MenuBackground); int margin = 2; int left = 22; #region IconSeparator if (!isMainMenu) { using (Pen p = new Pen(ColorTable.MenuDark)) { g.DrawLine(p, new Point(r.Left + left, r.Top), new Point(r.Left + left, r.Height - margin)); } using (Pen p = new Pen(ColorTable.MenuLight)) { g.DrawLine(p, new Point(r.Left + left + 1, r.Top), new Point(r.Left + left + 1, r.Height - margin)); } } #endregion if (highlighted) { #region Draw Rectangle using (GraphicsPath path = GraphicsTools.CreateRoundRectangle( new Rectangle(r.X + margin, r.Y + margin, r.Width - margin * 2, r.Height - margin * 2), 3)) { using (Brush b = new LinearGradientBrush( new Point(0, 2), new Point(0, r.Height - 2), ColorTable.MenuHighlightNorth, ColorTable.MenuHighlightSouth)) { g.FillPath(b, path); } using (Pen p = new Pen(ColorTable.MenuHighlight)) { g.DrawPath(p, path); } } #endregion } }
/// <summary> /// Draws the glossy effect on the toolbar /// </summary> /// <param name="g"></param> /// <param name="t"></param> /// <returns></returns> private void DrawGlossyEffect(Graphics g, ToolStrip t, int offset) { Rectangle glossyRect = new Rectangle(0, offset, t.Width - 1, (t.Height - 1) / 2); using (LinearGradientBrush b = new LinearGradientBrush( glossyRect.Location, new PointF(0, glossyRect.Bottom), ColorTable.GlossyEffectNorth, ColorTable.GlossyEffectSouth)) { using (GraphicsPath border = GraphicsTools.CreateTopRoundRectangle(glossyRect, ToolStripRadius)) { g.FillPath(b, border); } } }
/// <summary> /// Renders the background of a button on the specified rectangle using the specified device /// </summary> /// <param name="e"></param> private void DrawVistaButtonBackground(Graphics g, Rectangle r, bool selected, bool pressed, bool checkd) { g.SmoothingMode = SmoothingMode.AntiAlias; Rectangle outerBorder = new Rectangle(r.Left, r.Top, r.Width - 1, r.Height - 1); Rectangle border = outerBorder; border.Inflate(-1, -1); Rectangle innerBorder = border; innerBorder.Inflate(-1, -1); Rectangle glossy = outerBorder; glossy.Height /= 2; Rectangle fill = innerBorder; fill.Height /= 2; Rectangle glow = Rectangle.FromLTRB(outerBorder.Left, outerBorder.Top + Convert.ToInt32(Convert.ToSingle(outerBorder.Height) * .5f), outerBorder.Right, outerBorder.Bottom); if (selected || pressed || checkd) { #region Layers //Outer border using (GraphicsPath path = GraphicsTools.CreateRoundRectangle(outerBorder, ButtonRadius)) { using (Pen p = new Pen(ColorTable.ButtonOuterBorder)) { g.DrawPath(p, path); } } //Checked fill if (checkd) { using (GraphicsPath path = GraphicsTools.CreateRoundRectangle(innerBorder, 2)) { using (Brush b = new SolidBrush(selected ? ColorTable.CheckedButtonFillHot : ColorTable.CheckedButtonFill)) { g.FillPath(b, path); } } } //Glossy effefct using (GraphicsPath path = GraphicsTools.CreateTopRoundRectangle(glossy, ButtonRadius)) { using (Brush b = new LinearGradientBrush( new Point(0, glossy.Top), new Point(0, glossy.Bottom), ColorTable.GlossyEffectNorth, ColorTable.GlossyEffectSouth)) { g.FillPath(b, path); } } //Border using (GraphicsPath path = GraphicsTools.CreateRoundRectangle(border, ButtonRadius)) { using (Pen p = new Pen(ColorTable.ButtonBorder)) { g.DrawPath(p, path); } } Color fillNorth = pressed ? ColorTable.ButtonFillNorthPressed : ColorTable.ButtonFillNorth; Color fillSouth = pressed ? ColorTable.ButtonFillSouthPressed : ColorTable.ButtonFillSouth; //Fill using (GraphicsPath path = GraphicsTools.CreateTopRoundRectangle(fill, ButtonRadius)) { using (Brush b = new LinearGradientBrush( new Point(0, fill.Top), new Point(0, fill.Bottom), fillNorth, fillSouth)) { g.FillPath(b, path); } } Color innerBorderColor = pressed || checkd ? ColorTable.ButtonInnerBorderPressed : ColorTable.ButtonInnerBorder; //Inner border using (GraphicsPath path = GraphicsTools.CreateRoundRectangle(innerBorder, ButtonRadius)) { using (Pen p = new Pen(innerBorderColor)) { g.DrawPath(p, path); } } //Glow using (GraphicsPath clip = GraphicsTools.CreateRoundRectangle(glow, 2)) { g.SetClip(clip, CombineMode.Intersect); Color glowColor = ColorTable.Glow; if (checkd) { if (selected) { glowColor = ColorTable.CheckedGlowHot; } else { glowColor = ColorTable.CheckedGlow; } } using (GraphicsPath brad = CreateBottomRadialPath(glow)) { using (PathGradientBrush pgr = new PathGradientBrush(brad)) { unchecked { int opacity = 255; RectangleF bounds = brad.GetBounds(); pgr.CenterPoint = new PointF((bounds.Left + bounds.Right) / 2f, (bounds.Top + bounds.Bottom) / 2f); pgr.CenterColor = Color.FromArgb(opacity, glowColor); pgr.SurroundColors = new Color[] { Color.FromArgb(0, glowColor) }; } g.FillPath(pgr, brad); } } g.ResetClip(); } #endregion } }
/// <summary> /// Gets a rounded rectangle representing the hole area of the toolstrip /// </summary> /// <param name="toolStrip"></param> /// <returns></returns> private GraphicsPath GetToolStripRectangle(ToolStrip toolStrip) { return(GraphicsTools.CreateRoundRectangle( new Rectangle(0, 0, toolStrip.Width - 1, toolStrip.Height - 1), ToolStripRadius)); }