#region Imports
|
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Drawing.Text;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region ParrotGradientPanel
|
|
public class ParrotGradientPanel : System.Windows.Forms.Panel
|
{
|
public ParrotGradientPanel()
|
{
|
DoubleBuffered = true;
|
base.SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
|
BackColor = Color.White;
|
base.Size = new Size(200, 200);
|
}
|
|
[Browsable(false)]
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
public new Color BackColor { get; set; }
|
|
[Browsable(false)]
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
public new Color ForeColor { get; set; }
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The primer color")]
|
public Color PrimerColor
|
{
|
get => primerColor;
|
set
|
{
|
primerColor = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The top left color")]
|
public Color TopLeft
|
{
|
get => topLeft;
|
set
|
{
|
topLeft = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The top right color")]
|
public Color TopRight
|
{
|
get => topRight;
|
set
|
{
|
topRight = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The bottom left color")]
|
public Color BottomLeft
|
{
|
get => bottomLeft;
|
set
|
{
|
bottomLeft = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The bottom right color")]
|
public Color BottomRight
|
{
|
get => bottomRight;
|
set
|
{
|
bottomRight = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The gradient orientation")]
|
public GradientStyle Style
|
{
|
get => style;
|
set
|
{
|
style = value;
|
Refresh();
|
}
|
}
|
|
private SmoothingMode _SmoothingType = SmoothingMode.AntiAlias;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public SmoothingMode SmoothingType
|
{
|
get => _SmoothingType;
|
set
|
{
|
_SmoothingType = value;
|
Invalidate();
|
}
|
}
|
|
private InterpolationMode _InterpolationType = InterpolationMode.HighQualityBilinear;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public InterpolationMode InterpolationType
|
{
|
get => _InterpolationType;
|
set
|
{
|
_InterpolationType = value;
|
Invalidate();
|
}
|
}
|
|
private CompositingQuality _CompositingQualityType = CompositingQuality.HighQuality;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public CompositingQuality CompositingQualityType
|
{
|
get => _CompositingQualityType;
|
set
|
{
|
_CompositingQualityType = value;
|
Invalidate();
|
}
|
}
|
|
private PixelOffsetMode _PixelOffsetType = PixelOffsetMode.HighQuality;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public PixelOffsetMode PixelOffsetType
|
{
|
get => _PixelOffsetType;
|
set
|
{
|
_PixelOffsetType = value;
|
Invalidate();
|
}
|
}
|
|
private TextRenderingHint _TextRenderingType = TextRenderingHint.ClearTypeGridFit;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public TextRenderingHint TextRenderingType
|
{
|
get => _TextRenderingType;
|
set
|
{
|
_TextRenderingType = value;
|
Invalidate();
|
}
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
BufferedGraphicsContext bufferedGraphicsContext = BufferedGraphicsManager.Current;
|
bufferedGraphicsContext.MaximumBuffer = new Size(base.Width + 1, base.Height + 1);
|
bufferedGraphics = bufferedGraphicsContext.Allocate(base.CreateGraphics(), base.ClientRectangle);
|
bufferedGraphics.Graphics.SmoothingMode = SmoothingType;
|
bufferedGraphics.Graphics.InterpolationMode = InterpolationType;
|
bufferedGraphics.Graphics.CompositingQuality = CompositingQualityType;
|
bufferedGraphics.Graphics.PixelOffsetMode = PixelOffsetType;
|
bufferedGraphics.Graphics.TextRenderingHint = TextRenderingType;
|
bufferedGraphics.Graphics.Clear(primerColor);
|
if (style == GradientStyle.Corners)
|
{
|
LinearGradientBrush linearGradientBrush = new(new Rectangle(0, 0, base.Width, base.Height), TopLeft, Color.Transparent, 45f);
|
bufferedGraphics.Graphics.FillRectangle(linearGradientBrush, base.ClientRectangle);
|
linearGradientBrush = new(new Rectangle(0, 0, base.Width, base.Height), topRight, Color.Transparent, 135f);
|
bufferedGraphics.Graphics.FillRectangle(linearGradientBrush, base.ClientRectangle);
|
linearGradientBrush = new(new Rectangle(0, 0, base.Width, base.Height), bottomRight, Color.Transparent, 225f);
|
bufferedGraphics.Graphics.FillRectangle(linearGradientBrush, base.ClientRectangle);
|
linearGradientBrush = new(new Rectangle(0, 0, base.Width, base.Height), bottomLeft, Color.Transparent, 315f);
|
bufferedGraphics.Graphics.FillRectangle(linearGradientBrush, base.ClientRectangle);
|
linearGradientBrush.Dispose();
|
}
|
else
|
{
|
Brush brush;
|
if (style == GradientStyle.Vertical)
|
{
|
brush = new LinearGradientBrush(base.ClientRectangle, topLeft, topRight, 720f);
|
}
|
else
|
{
|
brush = new LinearGradientBrush(base.ClientRectangle, topLeft, topRight, 90f);
|
}
|
bufferedGraphics.Graphics.FillRectangle(brush, base.ClientRectangle);
|
brush.Dispose();
|
}
|
bufferedGraphics.Render(e.Graphics);
|
}
|
|
private BufferedGraphics bufferedGraphics;
|
|
private Color primerColor = Color.White;
|
|
private Color topLeft = Color.DeepSkyBlue;
|
|
private Color topRight = Color.Fuchsia;
|
|
private Color bottomLeft = Color.Black;
|
|
private Color bottomRight = Color.Fuchsia;
|
|
private GradientStyle style = GradientStyle.Corners;
|
|
public enum GradientStyle
|
{
|
Horizontal,
|
Vertical,
|
Corners
|
}
|
}
|
|
#endregion
|
}
|