amazfitbiptools/WatchFace.Parser/Models/Elements/Common/CircularProgressElement.cs

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);
}
}
}
}