Browse Source

Added Rect.Union.

pull/913/head
Steven Kirk 9 years ago
parent
commit
5546ed043f
  1. 26
      src/Avalonia.Visuals/Rect.cs
  2. 1
      tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
  3. 26
      tests/Avalonia.Visuals.UnitTests/RectTests.cs

26
src/Avalonia.Visuals/Rect.cs

@ -401,6 +401,32 @@ namespace Avalonia
return new Rect(Position + offset, Size); return new Rect(Position + offset, Size);
} }
/// <summary>
/// Gets the union of two rectangles.
/// </summary>
/// <param name="rect">The other rectangle.</param>
/// <returns>The union.</returns>
public Rect Union(Rect rect)
{
if (IsEmpty)
{
return rect;
}
else if (rect.IsEmpty)
{
return this;
}
else
{
var x1 = Math.Min(this.X, rect.X);
var x2 = Math.Max(this.Right, rect.Right);
var y1 = Math.Min(this.Y, rect.Y);
var y2 = Math.Max(this.Bottom, rect.Bottom);
return new Rect(new Point(x1, y1), new Point(x2, y2));
}
}
/// <summary> /// <summary>
/// Returns a new <see cref="Rect"/> with the specified X position. /// Returns a new <see cref="Rect"/> with the specified X position.
/// </summary> /// </summary>

1
tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj

@ -80,6 +80,7 @@
<Compile Include="Media\FormattedTextTests.cs" /> <Compile Include="Media\FormattedTextTests.cs" />
<Compile Include="Media\PathMarkupParserTests.cs" /> <Compile Include="Media\PathMarkupParserTests.cs" />
<Compile Include="RelativeRectComparer.cs" /> <Compile Include="RelativeRectComparer.cs" />
<Compile Include="RectTests.cs" />
<Compile Include="RelativeRectTests.cs" /> <Compile Include="RelativeRectTests.cs" />
<Compile Include="ThicknessTests.cs" /> <Compile Include="ThicknessTests.cs" />
<Compile Include="Media\BrushTests.cs" /> <Compile Include="Media\BrushTests.cs" />

26
tests/Avalonia.Visuals.UnitTests/RectTests.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 RectTests
{
[Fact]
public void Union_Should_Return_Correct_Value_For_Intersecting_Rects()
{
var result = new Rect(0, 0, 100, 100).Union(new Rect(50, 50, 100, 100));
Assert.Equal(new Rect(0, 0, 150, 150), result);
}
[Fact]
public void Union_Should_Return_Correct_Value_For_NonIntersecting_Rects()
{
var result = new Rect(0, 0, 100, 100).Union(new Rect(150, 150, 100, 100));
Assert.Equal(new Rect(0, 0, 250, 250), result);
}
}
}
Loading…
Cancel
Save