Browse Source

Merge pull request #1342 from AvaloniaUI/fixes/1341-transformed-geometry

Preserve Shape's defining geometry transform.
pull/1177/merge
Steven Kirk 8 years ago
committed by GitHub
parent
commit
38f550576c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 21
      src/Avalonia.Controls/Shapes/Shape.cs
  2. 23
      tests/Avalonia.RenderTests/Shapes/PathTests.cs
  3. BIN
      tests/TestFiles/Direct2D1/Shapes/Path/Path_With_Rotated_Geometry.expected.png
  4. BIN
      tests/TestFiles/Skia/Shapes/Path/Path_With_Rotated_Geometry.expected.png

21
src/Avalonia.Controls/Shapes/Shape.cs

@ -61,12 +61,26 @@ namespace Avalonia.Controls.Shapes
{
get
{
if (_renderedGeometry == null)
if (_renderedGeometry == null && DefiningGeometry != null)
{
if (DefiningGeometry != null)
if (_transform == Matrix.Identity)
{
_renderedGeometry = DefiningGeometry;
}
else
{
_renderedGeometry = DefiningGeometry.Clone();
_renderedGeometry.Transform = new MatrixTransform(_transform);
if (_renderedGeometry.Transform == null ||
_renderedGeometry.Transform.Value == Matrix.Identity)
{
_renderedGeometry.Transform = new MatrixTransform(_transform);
}
else
{
_renderedGeometry.Transform = new MatrixTransform(
_renderedGeometry.Transform.Value * _transform);
}
}
}
@ -193,6 +207,7 @@ namespace Avalonia.Controls.Shapes
return finalSize;
}
private Size CalculateShapeSizeAndSetTransform(Size availableSize)
{
// This should probably use GetRenderBounds(strokeThickness) but then the calculations

23
tests/Avalonia.RenderTests/Shapes/PathTests.cs

@ -362,5 +362,28 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes
await RenderToFile(target);
CompareImages();
}
[Fact]
public async Task Path_With_Rotated_Geometry()
{
var target = new Border
{
Width = 200,
Height = 200,
Background = Brushes.White,
Child = new Path
{
Fill = Brushes.Red,
Data = new RectangleGeometry
{
Rect = new Rect(50, 50, 100, 100),
Transform = new RotateTransform(45),
}
}
};
await RenderToFile(target);
CompareImages();
}
}
}

BIN
tests/TestFiles/Direct2D1/Shapes/Path/Path_With_Rotated_Geometry.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
tests/TestFiles/Skia/Shapes/Path/Path_With_Rotated_Geometry.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Loading…
Cancel
Save