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.
///