using Avalonia.Animation; namespace Ursa.Controls; public class Int32Displayer : NumberDisplayer { protected override Type StyleKeyOverride { get; } = typeof(NumberDisplayerBase); protected override InterpolatingAnimator GetAnimator() { return new IntAnimator(); } private class IntAnimator : InterpolatingAnimator { public override int Interpolate(double progress, int oldValue, int newValue) { return oldValue + (int)((newValue - oldValue) * progress); } } protected override string GetString(int value) { return value.ToString(StringFormat); } } public class DoubleDisplayer : NumberDisplayer { protected override Type StyleKeyOverride { get; } = typeof(NumberDisplayerBase); protected override InterpolatingAnimator GetAnimator() { return new DoubleAnimator(); } private class DoubleAnimator : InterpolatingAnimator { public override double Interpolate(double progress, double oldValue, double newValue) { return oldValue + (newValue - oldValue) * progress; } } protected override string GetString(double value) { return value.ToString(StringFormat); } } public class DateDisplay : NumberDisplayer { protected override Type StyleKeyOverride { get; } = typeof(NumberDisplayerBase); protected override InterpolatingAnimator GetAnimator() { return new DateAnimator(); } private class DateAnimator : InterpolatingAnimator { public override DateTime Interpolate(double progress, DateTime oldValue, DateTime newValue) { var diff = (newValue - oldValue).TotalSeconds; return oldValue + TimeSpan.FromSeconds(diff * progress); } } protected override string GetString(DateTime value) { return value.ToString(StringFormat); } }