protected virtual void OnPaintForeground(PaintEventArgs e)
{
Color foreColor;
if (useCustomBackground)
{
foreColor = MetroPaint.GetStyleColor(Style);
}
else
{
if (Parent is MetroTile)
{
foreColor = MetroPaint.ForeColor.Tile.Normal(Theme);
}
else
{
foreColor = MetroPaint.GetStyleColor(Style);
}
}
using (Pen forePen = new Pen(foreColor, (float)Width / 5))
{
int padding = (int)Math.Ceiling((float)Width / 10);
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
if (progress != -1)
{
float sweepAngle;
float progFrac = (float)(progress - minimum) / (float)(maximum - minimum);
if (ensureVisible)
{
sweepAngle = 30 + 300f * progFrac;
}
else
{
sweepAngle = 360f * progFrac;
}
if (backwards)
{
sweepAngle = -sweepAngle;
}
e.Graphics.DrawArc(forePen, padding, padding, Width - 2 * padding - 1, Height - 2 * padding - 1, angle, sweepAngle);
}
else
{
const int maxOffset = 180;
for (int offset = 0; offset <= maxOffset; offset += 15)
{
int alpha = 290 - (offset * 290 / maxOffset);
if (alpha > 255)
{
alpha = 255;
}
if (alpha < 0)
{
alpha = 0;
}
Color col = Color.FromArgb(alpha, forePen.Color);
using (Pen gradPen = new Pen(col, forePen.Width))
{
float startAngle = angle + (offset - (ensureVisible ? 30 : 0)) * (backwards ? 1 : -1);
float sweepAngle = 15 * (backwards ? 1 : -1);
e.Graphics.DrawArc(gradPen, padding, padding, Width - 2 * padding - 1, Height - 2 * padding - 1, startAngle, sweepAngle);
}
}
}
}
OnCustomPaintForeground(new MetroPaintEventArgs(Color.Empty, foreColor, e.Graphics));
}