106 lines
3.2 KiB
C#
106 lines
3.2 KiB
C#
using System;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using DevComponents.DotNetBar.Rendering;
|
|
|
|
namespace DevComponents.DotNetBar.Presentation
|
|
{
|
|
internal class ShapeFill : Shape
|
|
{
|
|
#region Properties
|
|
/// <summary>
|
|
/// Gets or sets the starting fill color.
|
|
/// </summary>
|
|
public Color Color1 = Color.Empty;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the end fill color.
|
|
/// </summary>
|
|
public Color Color2 = Color.Empty;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the gradient angle.
|
|
/// </summary>
|
|
public int GradientAngle = 90;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the background color collection blend.
|
|
/// </summary>
|
|
public BackgroundColorBlendCollection BackgroundColorBlend = null;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the fill gradient type.
|
|
/// </summary>
|
|
public eGradientType GradientType = eGradientType.Linear;
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
public ShapeFill() { }
|
|
public ShapeFill(Color color1, Color color2)
|
|
{
|
|
this.Color1 = color1;
|
|
this.Color2 = color2;
|
|
}
|
|
public ShapeFill(LinearGradientColorTable table)
|
|
{
|
|
this.Color1 = table.Start;
|
|
this.Color2 = table.End;
|
|
}
|
|
public ShapeFill(Color color1)
|
|
{
|
|
this.Color1 = color1;
|
|
this.Color2 = Color.Empty;
|
|
}
|
|
|
|
public void Apply(LinearGradientColorTable table)
|
|
{
|
|
if (table == null)
|
|
{
|
|
this.Color1 = Color.Empty;
|
|
this.Color2 = Color.Empty;
|
|
this.GradientAngle = 90;
|
|
}
|
|
else
|
|
{
|
|
this.Color1 = table.Start;
|
|
this.Color2 = table.End;
|
|
this.GradientAngle = table.GradientAngle;
|
|
}
|
|
}
|
|
|
|
public Brush CreateBrush(System.Drawing.Rectangle r)
|
|
{
|
|
if (r.Width <= 0 || r.Height <= 0)
|
|
return null;
|
|
|
|
if(this.BackgroundColorBlend!=null && BackgroundColorBlend.Count>0)
|
|
{
|
|
return DisplayHelp.CreateBrush(r, BackgroundColorBlend, GradientAngle, GradientType);
|
|
}
|
|
else if(Color2.IsEmpty && !Color1.IsEmpty)
|
|
{
|
|
return new SolidBrush(Color1);
|
|
}
|
|
else if (!Color2.IsEmpty && !Color1.IsEmpty)
|
|
{
|
|
if (GradientType == eGradientType.Linear)
|
|
return new LinearGradientBrush(r, Color1, Color2, GradientAngle);
|
|
else
|
|
{
|
|
int d = (int)Math.Sqrt(r.Width * r.Width + r.Height * r.Height) + 4;
|
|
GraphicsPath fillPath = new GraphicsPath();
|
|
fillPath.AddEllipse(r.X - (d - r.Width) / 2, r.Y - (d - r.Height) / 2, d, d);
|
|
PathGradientBrush brush = new PathGradientBrush(fillPath);
|
|
brush.CenterColor = this.Color1;
|
|
brush.SurroundColors = new Color[] { this.Color2 };
|
|
return brush;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|