csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.9 KiB
133 lines
4.9 KiB
using Avalonia.Media.Transformation;
|
|
using Avalonia.Utilities;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Visuals.UnitTests.Media
|
|
{
|
|
public class TransformOperationsTests
|
|
{
|
|
[Fact]
|
|
public void Can_Parse_Compound_Operations()
|
|
{
|
|
var data = "scale(1,2) translate(3px,4px) rotate(5deg) skew(6deg,7deg)";
|
|
|
|
var transform = TransformOperations.Parse(data);
|
|
|
|
var operations = transform.Operations;
|
|
|
|
Assert.Equal(TransformOperation.OperationType.Scale, operations[0].Type);
|
|
Assert.Equal(1, operations[0].Data.Scale.X);
|
|
Assert.Equal(2, operations[0].Data.Scale.Y);
|
|
|
|
Assert.Equal(TransformOperation.OperationType.Translate, operations[1].Type);
|
|
Assert.Equal(3, operations[1].Data.Translate.X);
|
|
Assert.Equal(4, operations[1].Data.Translate.Y);
|
|
|
|
Assert.Equal(TransformOperation.OperationType.Rotate, operations[2].Type);
|
|
Assert.Equal(MathUtilities.Deg2Rad(5), operations[2].Data.Rotate.Angle);
|
|
|
|
Assert.Equal(TransformOperation.OperationType.Skew, operations[3].Type);
|
|
Assert.Equal(MathUtilities.Deg2Rad(6), operations[3].Data.Skew.X);
|
|
Assert.Equal(MathUtilities.Deg2Rad(7), operations[3].Data.Skew.Y);
|
|
}
|
|
|
|
[Fact]
|
|
public void Can_Parse_Matrix_Operation()
|
|
{
|
|
var data = "matrix(1,2,3,4,5,6)";
|
|
|
|
var transform = TransformOperations.Parse(data);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0d, 10d, 0d)]
|
|
[InlineData(0.5d, 5d, 10d)]
|
|
[InlineData(1d, 0d, 20d)]
|
|
public void Can_Interpolate_Translation(double progress, double x, double y)
|
|
{
|
|
var from = TransformOperations.Parse("translateX(10px)");
|
|
var to = TransformOperations.Parse("translateY(20px)");
|
|
|
|
var interpolated = TransformOperations.Interpolate(from, to, progress);
|
|
|
|
var operations = interpolated.Operations;
|
|
|
|
Assert.Single(operations);
|
|
Assert.Equal(TransformOperation.OperationType.Translate, operations[0].Type);
|
|
Assert.Equal(x, operations[0].Data.Translate.X);
|
|
Assert.Equal(y, operations[0].Data.Translate.Y);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0d, 10d, 0d)]
|
|
[InlineData(0.5d, 5d, 10d)]
|
|
[InlineData(1d, 0d, 20d)]
|
|
public void Can_Interpolate_Scale(double progress, double x, double y)
|
|
{
|
|
var from = TransformOperations.Parse("scaleX(10)");
|
|
var to = TransformOperations.Parse("scaleY(20)");
|
|
|
|
var interpolated = TransformOperations.Interpolate(from, to, progress);
|
|
|
|
var operations = interpolated.Operations;
|
|
|
|
Assert.Single(operations);
|
|
Assert.Equal(TransformOperation.OperationType.Scale, operations[0].Type);
|
|
Assert.Equal(x, operations[0].Data.Scale.X);
|
|
Assert.Equal(y, operations[0].Data.Scale.Y);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0d, 10d, 0d)]
|
|
[InlineData(0.5d, 5d, 10d)]
|
|
[InlineData(1d, 0d, 20d)]
|
|
public void Can_Interpolate_Skew(double progress, double x, double y)
|
|
{
|
|
var from = TransformOperations.Parse("skewX(10deg)");
|
|
var to = TransformOperations.Parse("skewY(20deg)");
|
|
|
|
var interpolated = TransformOperations.Interpolate(from, to, progress);
|
|
|
|
var operations = interpolated.Operations;
|
|
|
|
Assert.Single(operations);
|
|
Assert.Equal(TransformOperation.OperationType.Skew, operations[0].Type);
|
|
Assert.Equal(MathUtilities.Deg2Rad(x), operations[0].Data.Skew.X);
|
|
Assert.Equal(MathUtilities.Deg2Rad(y), operations[0].Data.Skew.Y);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0d, 10d)]
|
|
[InlineData(0.5d, 15d)]
|
|
[InlineData(1d,20d)]
|
|
public void Can_Interpolate_Rotation(double progress, double angle)
|
|
{
|
|
var from = TransformOperations.Parse("rotate(10deg)");
|
|
var to = TransformOperations.Parse("rotate(20deg)");
|
|
|
|
var interpolated = TransformOperations.Interpolate(from, to, progress);
|
|
|
|
var operations = interpolated.Operations;
|
|
|
|
Assert.Single(operations);
|
|
Assert.Equal(TransformOperation.OperationType.Rotate, operations[0].Type);
|
|
Assert.Equal(MathUtilities.Deg2Rad(angle), operations[0].Data.Rotate.Angle);
|
|
}
|
|
|
|
[Fact]
|
|
public void Interpolation_Fallback_To_Matrix()
|
|
{
|
|
double progress = 0.5d;
|
|
|
|
var from = TransformOperations.Parse("rotate(45deg)");
|
|
var to = TransformOperations.Parse("translate(100px, 100px) rotate(1215deg)");
|
|
|
|
var interpolated = TransformOperations.Interpolate(from, to, progress);
|
|
|
|
var operations = interpolated.Operations;
|
|
|
|
Assert.Single(operations);
|
|
Assert.Equal(TransformOperation.OperationType.Matrix, operations[0].Type);
|
|
}
|
|
}
|
|
}
|
|
|