protected override void OnPaint(PaintEventArgs e) { //base.OnPaint( e ); Graphics g = e.Graphics; //g.TextRenderingHint = TextRenderingHint.AntiAlias; StringFormat sf = new StringFormat(); sf.LineAlignment = StringAlignment.Center; sf.Alignment = StringAlignment.Center; sf.FormatFlags = StringFormatFlags.NoWrap; if (Parent != null && !backgroundPainted) { g.FillRectangle(new SolidBrush(Parent.BackColor), ClientRectangle); backgroundPainted = true; } Rectangle rect = new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1); GraphicsPath path = null; switch (FigureType) { case FigureType.None: path = ExtendedForms.RoundedRect(rect, 0); break; case FigureType.Rounded: path = ExtendedForms.RoundedRect(rect, BorderRadius); break; case FigureType.Skewed: path = ExtendedForms.SkewedRect(rect, BorderSkew); break; default: path = ExtendedForms.RoundedRect(rect, 0); break; } g.SmoothingMode = SmoothingMode.HighQuality; if (_isSelected && !_isPushed) { g.FillPath(new SolidBrush(SelectedColor.SetAlpha(_manager.CurrentValue)), path); g.DrawPath(new Pen(SelectedBorderColor), path); g.SmoothingMode = SmoothingMode.HighSpeed; g.DrawString(Text, Font, new SolidBrush(SelectedForeColor), rect, sf); } else if (_isSelected && _isPushed) { g.FillPath(new SolidBrush(SelectedColor.Darken(10)), path); g.DrawPath(new Pen(SelectedBorderColor.Darken(10)), path); g.SmoothingMode = SmoothingMode.HighSpeed; rect.Offset(0, 2); g.DrawString(Text, Font, new SolidBrush(SelectedForeColor), rect, sf); } else { g.FillPath(new SolidBrush(BackColor.SetAlpha(_manager.CurrentValue)), path); g.DrawPath(new Pen(BorderColor), path); g.SmoothingMode = SmoothingMode.HighSpeed; g.DrawString(Text, Font, new SolidBrush(ForeColor), rect, sf); } }
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; StringFormat sf = new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center, FormatFlags = StringFormatFlags.NoWrap }; if (Parent != null && FigureType != FigureType.None) { g.FillRectangle(new SolidBrush(Parent.BackColor), ClientRectangle); } Rectangle rect; if (DrawBorder) { rect = new Rectangle( ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1); } else { rect = ClientRectangle; } GraphicsPath path = null; switch (FigureType) { case FigureType.None: path = ExtendedForms.RoundedRect(rect, 0); break; case FigureType.Rounded: path = ExtendedForms.RoundedRect(rect, BorderRadius); break; case FigureType.Skewed: path = ExtendedForms.SkewedRect(rect, BorderRadius); break; default: path = ExtendedForms.RoundedRect(rect, 0); break; } if (FigureType != FigureType.None) { g.SmoothingMode = SmoothingMode.HighQuality; } Brush backBrush; Pen borderPen; Pen innerBorderPen; SolidBrush foreBrush; if (Enabled) { if (_isSelected && !_isPushed && !NormalStyle.Equals(HoverStyle)) { if (Palette == null) { backBrush = HoverStyle.BackBrush; borderPen = HoverStyle.BorderPen; innerBorderPen = HoverStyle.InnerBorderPen; foreBrush = HoverStyle.ForeBrush; } else { backBrush = Palette.HoverStyle.BackBrush; borderPen = Palette.HoverStyle.BorderPen; innerBorderPen = Palette.HoverStyle.InnerBorderPen; foreBrush = Palette.HoverStyle.ForeBrush; } } else if (_isSelected && _isPushed) { if (Palette == null) { if (!ButtonAnimation.Animated || !DrawPushAnimation) { backBrush = new SolidBrush(HoverStyle.BackColor.Darken(30)); } else { backBrush = HoverStyle.BackBrush; } borderPen = HoverStyle.BorderPen; innerBorderPen = HoverStyle.InnerBorderPen; foreBrush = HoverStyle.ForeBrush; } else { backBrush = Palette.HoverStyle.BackBrush; borderPen = Palette.HoverStyle.BorderPen; innerBorderPen = Palette.HoverStyle.InnerBorderPen; foreBrush = Palette.HoverStyle.ForeBrush; } } else { if (Palette == null) { backBrush = NormalStyle.BackBrush; borderPen = NormalStyle.BorderPen; innerBorderPen = NormalStyle.InnerBorderPen; foreBrush = NormalStyle.ForeBrush; } else { backBrush = Palette.NormalStyle.BackBrush; borderPen = Palette.NormalStyle.BorderPen; innerBorderPen = Palette.NormalStyle.InnerBorderPen; foreBrush = Palette.NormalStyle.ForeBrush; } } } else { if (Palette == null) { backBrush = DisabledStyle.BackBrush; borderPen = DisabledStyle.BorderPen; innerBorderPen = DisabledStyle.InnerBorderPen; foreBrush = DisabledStyle.ForeBrush; } else { backBrush = Palette.DisabledStyle.BackBrush; borderPen = Palette.DisabledStyle.BorderPen; innerBorderPen = Palette.DisabledStyle.InnerBorderPen; foreBrush = Palette.DisabledStyle.ForeBrush; } } g.FillPath(backBrush, path); if (DrawPushAnimation && ButtonAnimation.Animated) { GraphicsPath gp = new GraphicsPath(); int length = ButtonAnimation.CurrentValue; gp.AddEllipse(new Rectangle(ButtonAnimation.MousePos.X - length, ButtonAnimation.MousePos.Y - length, length * 2, length * 2)); Region region = new Region(); region.Intersect(path); region.Intersect(gp); e.Graphics.FillRegion(new SolidBrush(HoverStyle.BackColor.Darken(20)), region); } if (_isSelected && DrawFlash) //mouse blick { GraphicsPath gp = new GraphicsPath(); int length = (ClientRectangle.Width + ClientRectangle.Height) / 4; gp.AddEllipse(new Rectangle(_mouseLocation.X - length, _mouseLocation.Y - length, length * 2, length * 2)); PathGradientBrush pgb = new PathGradientBrush(gp); pgb.CenterPoint = _mouseLocation; pgb.CenterColor = Color.FromArgb(FlashAlpha, Color.White); pgb.SurroundColors = new Color[] { Color.FromArgb(0, Color.White) }; e.Graphics.FillPath(pgb, gp); } if (DrawBorder) { g.DrawPath(borderPen, path); } if (DrawInnerBorder) { Rectangle innerRect = new Rectangle(rect.Location, rect.Size); innerRect.Inflate(-1, -1); int radius = 0; switch (FigureType) { case FigureType.Rounded: radius = BorderRadius; break; case FigureType.Skewed: radius = BorderRadius; break; } if (FigureType == WinformControls.FigureType.Skewed) { g.DrawPath(innerBorderPen, ExtendedForms.SkewedRect(innerRect, radius)); } else { g.DrawPath(innerBorderPen, ExtendedForms.RoundedRect(innerRect, radius)); } } if (_isSelected && _isPushed) { rect.Offset(0, 1); } g.SmoothingMode = SmoothingMode.HighSpeed; g.DrawString(Text, Font, foreBrush, rect, sf); }