diff --git a/src/Avalonia.Visuals/Size.cs b/src/Avalonia.Visuals/Size.cs
index a11411c3ee..6ad87c6120 100644
--- a/src/Avalonia.Visuals/Size.cs
+++ b/src/Avalonia.Visuals/Size.cs
@@ -43,6 +43,11 @@ namespace Avalonia
_height = height;
}
+ ///
+ /// Gets the aspect ratio of the size.
+ ///
+ public double AspectRatio => _width / _height;
+
///
/// Gets the width.
///
@@ -97,6 +102,17 @@ namespace Avalonia
return new Size(size._width / scale.X, size._height / scale.Y);
}
+ ///
+ /// Divides a size by another size to produce a scaling factor.
+ ///
+ /// The first size
+ /// The second size.
+ /// The scaled size.
+ public static Vector operator /(Size left, Size right)
+ {
+ return new Vector(left._width / right._width, left._height / right._height);
+ }
+
///
/// Scales a size.
///
diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
index b5b6dbd404..97b3e38e32 100644
--- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
+++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
@@ -80,6 +80,7 @@
+
diff --git a/tests/Avalonia.Visuals.UnitTests/SizeTests.cs b/tests/Avalonia.Visuals.UnitTests/SizeTests.cs
new file mode 100644
index 0000000000..10a012bb7f
--- /dev/null
+++ b/tests/Avalonia.Visuals.UnitTests/SizeTests.cs
@@ -0,0 +1,26 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using Xunit;
+
+namespace Avalonia.Visuals.UnitTests
+{
+ public class SizeTests
+ {
+ [Fact]
+ public void Should_Produce_Correct_Aspect_Ratio()
+ {
+ var result = new Size(3, 2).AspectRatio;
+
+ Assert.Equal(1.5, result);
+ }
+
+ [Fact]
+ public void Dividing_Should_Produce_Scaling_Factor()
+ {
+ var result = new Size(15, 10) / new Size(5, 5);
+
+ Assert.Equal(new Vector(3, 2), result);
+ }
+ }
+}