From 609c571424f1cd5de27960b9775e1af2cf2bd9f7 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 5 Mar 2017 21:03:22 +0100 Subject: [PATCH] Added AspectRatio and division operator to Size. --- src/Avalonia.Visuals/Size.cs | 16 ++++++++++++ .../Avalonia.Visuals.UnitTests.csproj | 1 + tests/Avalonia.Visuals.UnitTests/SizeTests.cs | 26 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 tests/Avalonia.Visuals.UnitTests/SizeTests.cs 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 9e7f739a1c..3024b226c1 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); + } + } +}