56 lines
2.2 KiB
C#
56 lines
2.2 KiB
C#
using System.Drawing;
|
|
using WatchFace.Parser.Interfaces;
|
|
|
|
namespace WatchFace.Parser.Models.Elements.GoalProgress
|
|
{
|
|
public abstract class CircularProgressElement : CoordinatesElement, IDrawable
|
|
{
|
|
protected CircularProgressElement(Parameter parameter, Element parent, string name = null) :
|
|
base(parameter, parent, name) { }
|
|
|
|
public long RadiusX { get; set; }
|
|
public long RadiusY { get; set; }
|
|
public long StartAngle { get; set; }
|
|
public long EndAngle { get; set; }
|
|
public long Width { get; set; }
|
|
public Color Color { get; set; }
|
|
|
|
public abstract void Draw(Graphics drawer, Bitmap[] resources, WatchState state);
|
|
|
|
public void Draw(Graphics drawer, Bitmap[] resources, int value, int total)
|
|
{
|
|
var sectorAngle = (EndAngle - StartAngle) * value / total;
|
|
var pen = new Pen(Color, Width);
|
|
var rect = new Rectangle((int) (X - RadiusX), (int) (Y - RadiusY),
|
|
(int) (RadiusX * 2), (int) (RadiusY * 2));
|
|
drawer.DrawArc(pen, rect, StartAngle - 90, sectorAngle);
|
|
}
|
|
|
|
protected override Element CreateChildForParameter(Parameter parameter)
|
|
{
|
|
switch (parameter.Id)
|
|
{
|
|
case 3:
|
|
RadiusX = parameter.Value;
|
|
return new ValueElement(parameter, this);
|
|
case 4:
|
|
RadiusY = parameter.Value;
|
|
return new ValueElement(parameter, this);
|
|
case 5:
|
|
StartAngle = parameter.Value;
|
|
return new ValueElement(parameter, this);
|
|
case 6:
|
|
EndAngle = parameter.Value;
|
|
return new ValueElement(parameter, this);
|
|
case 7:
|
|
Width = parameter.Value;
|
|
return new ValueElement(parameter, this);
|
|
case 8:
|
|
Color = Color.FromArgb(0xff, Color.FromArgb((int) parameter.Value));
|
|
return new ValueElement(parameter, this);
|
|
default:
|
|
return base.CreateChildForParameter(parameter);
|
|
}
|
|
}
|
|
}
|
|
} |