2 changed files with 216 additions and 0 deletions
@ -0,0 +1,153 @@ |
|||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Media; |
||||
|
using Avalonia.VisualTree; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.Base.UnitTests.VisualTree |
||||
|
{ |
||||
|
public class VisualExtensions_GetTransformedBounds |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void Root() |
||||
|
{ |
||||
|
var root = new Border |
||||
|
{ |
||||
|
Width = 100, |
||||
|
Height = 123, |
||||
|
}; |
||||
|
|
||||
|
Layout(root); |
||||
|
|
||||
|
Assert.Equal( |
||||
|
new TransformedBounds( |
||||
|
new Rect(0, 0, 100, 123), |
||||
|
new Rect(0, 0, 100, 123), |
||||
|
Matrix.Identity), |
||||
|
root.GetTransformedBounds()); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Depth_1_No_Transform_Or_Clip() |
||||
|
{ |
||||
|
Border target; |
||||
|
var root = new Border |
||||
|
{ |
||||
|
Width = 1000, |
||||
|
Height = 1000, |
||||
|
Child = target = new Border |
||||
|
{ |
||||
|
Width = 500, |
||||
|
Height = 500, |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
Layout(root); |
||||
|
|
||||
|
Assert.Equal( |
||||
|
new TransformedBounds( |
||||
|
new Rect(250, 250, 500, 500), |
||||
|
new Rect(0, 0, 1000, 1000), |
||||
|
Matrix.CreateTranslation(250, 250)), |
||||
|
target.GetTransformedBounds()); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Depth_2_No_Transform_Or_Clip() |
||||
|
{ |
||||
|
Border target; |
||||
|
var root = new Border |
||||
|
{ |
||||
|
Width = 1000, |
||||
|
Height = 1000, |
||||
|
Child = new Border |
||||
|
{ |
||||
|
Width = 800, |
||||
|
Height = 800, |
||||
|
Child = target = new Border |
||||
|
{ |
||||
|
Width = 500, |
||||
|
Height = 500, |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
Layout(root); |
||||
|
|
||||
|
Assert.Equal( |
||||
|
new TransformedBounds( |
||||
|
new Rect(150, 150, 500, 500), |
||||
|
new Rect(0, 0, 1000, 1000), |
||||
|
Matrix.CreateTranslation(250, 250)), |
||||
|
target.GetTransformedBounds()); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Depth_2_No_Transform_With_Clip() |
||||
|
{ |
||||
|
Border target; |
||||
|
var root = new Border |
||||
|
{ |
||||
|
Width = 1000, |
||||
|
Height = 1000, |
||||
|
Child = new Border |
||||
|
{ |
||||
|
Width = 800, |
||||
|
Height = 800, |
||||
|
ClipToBounds = true, |
||||
|
Child = target = new Border |
||||
|
{ |
||||
|
Width = 500, |
||||
|
Height = 500, |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
Layout(root); |
||||
|
|
||||
|
Assert.Equal( |
||||
|
new TransformedBounds( |
||||
|
new Rect(150, 150, 500, 500), |
||||
|
new Rect(100, 100, 800, 800), |
||||
|
Matrix.CreateTranslation(250, 250)), |
||||
|
target.GetTransformedBounds()); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Depth_2_Transformed_Clip() |
||||
|
{ |
||||
|
Border target; |
||||
|
var root = new Border |
||||
|
{ |
||||
|
Width = 1000, |
||||
|
Height = 1000, |
||||
|
Child = new Border |
||||
|
{ |
||||
|
Width = 800, |
||||
|
Height = 800, |
||||
|
ClipToBounds = true, |
||||
|
RenderTransform = new MatrixTransform(Matrix.CreateTranslation(10, 20)), |
||||
|
Child = target = new Border |
||||
|
{ |
||||
|
Width = 500, |
||||
|
Height = 500, |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
Layout(root); |
||||
|
|
||||
|
Assert.Equal( |
||||
|
new TransformedBounds( |
||||
|
new Rect(150, 150, 500, 500), |
||||
|
new Rect(110, 120, 800, 800), |
||||
|
Matrix.CreateTranslation(260, 270)), |
||||
|
target.GetTransformedBounds()); |
||||
|
} |
||||
|
|
||||
|
private void Layout(Control c) |
||||
|
{ |
||||
|
c.Measure(Size.Infinity); |
||||
|
c.Arrange(new Rect(c.DesiredSize)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue