/// <summary> /// Raises the RenderToolStripBackground event. /// </summary> /// <param name="e">An ToolStripRenderEventArgs containing the event data.</param> protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { if ((e.ToolStrip is ContextMenuStrip) || (e.ToolStrip is ToolStripDropDownMenu)) { // Create border and clipping paths using (GraphicsPath borderPath = CreateBorderPath(e.AffectedBounds, cutContextMenu), clipPath = CreateClipBorderPath(e.AffectedBounds, cutContextMenu)) { // Clip all drawing to within the border path using (UseClipping clipping = new UseClipping(e.Graphics, clipPath)) { // Create the background brush using (SolidBrush backBrush = new SolidBrush(_contextMenuBack)) e.Graphics.FillPath(backBrush, borderPath); } } } else if (e.ToolStrip is StatusStrip) { // We do not paint the top two pixel lines, so are drawn by the status strip border render method RectangleF backRect = new RectangleF(0, 1.5f, e.ToolStrip.Width, e.ToolStrip.Height - 2); // Cannot paint a zero sized area if ((backRect.Width > 0) && (backRect.Height > 0)) { using (LinearGradientBrush backBrush = new LinearGradientBrush(backRect, ColorTable.StatusStripGradientBegin, ColorTable.StatusStripGradientEnd, 90f)) { backBrush.Blend = statusStripBlend; e.Graphics.FillRectangle(backBrush, backRect); } } } else { base.OnRenderToolStripBackground(e); } }
/// <summary> /// Raises the RenderToolStripBorder event. /// </summary> /// <param name="e">An ToolStripRenderEventArgs containing the event data.</param> protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { if ((e.ToolStrip is ContextMenuStrip) || (e.ToolStrip is ToolStripDropDownMenu)) { // If there is a connected area to be drawn if (!e.ConnectedArea.IsEmpty) using (SolidBrush excludeBrush = new SolidBrush(_contextMenuBack)) e.Graphics.FillRectangle(excludeBrush, e.ConnectedArea); // Create border and clipping paths using (GraphicsPath borderPath = CreateBorderPath(e.AffectedBounds, e.ConnectedArea, cutContextMenu), insidePath = CreateInsideBorderPath(e.AffectedBounds, e.ConnectedArea, cutContextMenu), clipPath = CreateClipBorderPath(e.AffectedBounds, e.ConnectedArea, cutContextMenu)) { // Create the different pen colors we need using (Pen borderPen = new Pen(ColorTable.MenuBorder), insidePen = new Pen(_separatorMenuLight)) { // Clip all drawing to within the border path using (UseClipping clipping = new UseClipping(e.Graphics, clipPath)) { // Drawing with anti aliasing to create smoother appearance using (UseAntiAlias uaa = new UseAntiAlias(e.Graphics)) { // Draw the inside area first e.Graphics.DrawPath(insidePen, insidePath); // Draw the border area second, so any overlapping gives it priority e.Graphics.DrawPath(borderPen, borderPath); } // Draw the pixel at the bottom right of the context menu e.Graphics.DrawLine(borderPen, e.AffectedBounds.Right, e.AffectedBounds.Bottom, e.AffectedBounds.Right - 1, e.AffectedBounds.Bottom - 1); } } } } else if (e.ToolStrip is StatusStrip) { // Draw two lines at top of the status strip using (Pen darkBorder = new Pen(_statusStripBorderDark), lightBorder = new Pen(_statusStripBorderLight)) { e.Graphics.DrawLine(darkBorder, 0, 0, e.ToolStrip.Width, 0); e.Graphics.DrawLine(lightBorder, 0, 1, e.ToolStrip.Width, 1); } } else { base.OnRenderToolStripBorder(e); } }
private void DrawContextMenuHeader(Graphics g, ToolStripItem item) { // Get the rectangle the is the items area Rectangle itemRect = new Rectangle(Point.Empty, item.Bounds.Size); // Create border and clipping paths using (GraphicsPath borderPath = CreateBorderPath(itemRect, cutToolItemMenu), insidePath = CreateInsideBorderPath(itemRect, cutToolItemMenu), clipPath = CreateClipBorderPath(itemRect, cutToolItemMenu)) { // Clip all drawing to within the border path using (UseClipping clipping = new UseClipping(g, clipPath)) { // Draw the entire background area first using (SolidBrush backBrush = new SolidBrush(_separatorMenuLight)) g.FillPath(backBrush, borderPath); // Draw the border using (Pen borderPen = new Pen(ColorTable.MenuBorder)) g.DrawPath(borderPen, borderPath); } } }