diff --git a/src/Avalonia.Visuals/Animation/Animators/RectAnimator.cs b/src/Avalonia.Visuals/Animation/Animators/RectAnimator.cs new file mode 100644 index 0000000000..b2d3ec2996 --- /dev/null +++ b/src/Avalonia.Visuals/Animation/Animators/RectAnimator.cs @@ -0,0 +1,23 @@ +using System; +using Avalonia.Logging; +using Avalonia.Media; + +namespace Avalonia.Animation.Animators +{ + /// + /// Animator that handles properties. + /// + public class RectAnimator : Animator + { + public override Rect Interpolate(double progress, Rect oldValue, Rect newValue) + { + var deltaPos = newValue.Position - oldValue.Position; + var deltaSize = newValue.Size - oldValue.Size; + + var newPos = (deltaPos * progress) + oldValue.Position; + var newSize = (deltaSize * progress) + oldValue.Size; + + return new Rect(newPos, newSize); + } + } +} \ No newline at end of file diff --git a/src/Avalonia.Visuals/Media/Color.cs b/src/Avalonia.Visuals/Media/Color.cs index a37463a0f0..5c28ac8bef 100644 --- a/src/Avalonia.Visuals/Media/Color.cs +++ b/src/Avalonia.Visuals/Media/Color.cs @@ -15,9 +15,9 @@ namespace Avalonia.Media { static Color() { - Animation.Animation.RegisterAnimator(prop => typeof(Color).IsAssignableFrom(prop.PropertyType)); + Animation.Animation.RegisterAnimator(prop => typeof(IBrush).IsAssignableFrom(prop.PropertyType)); } - + /// /// Gets or sets the Alpha component of the color. /// diff --git a/src/Avalonia.Visuals/Rect.cs b/src/Avalonia.Visuals/Rect.cs index 63d34b474b..530a47729f 100644 --- a/src/Avalonia.Visuals/Rect.cs +++ b/src/Avalonia.Visuals/Rect.cs @@ -3,6 +3,7 @@ using System; using System.Globalization; +using Avalonia.Animation.Animators; using Avalonia.Utilities; namespace Avalonia @@ -12,6 +13,11 @@ namespace Avalonia /// public readonly struct Rect { + static Rect() + { + Animation.Animation.RegisterAnimator(prop => typeof(Rect).IsAssignableFrom(prop.PropertyType)); + } + /// /// An empty rectangle. ///