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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
41 additions and
3 deletions
-
src/Avalonia.Controls/Shapes/Shape.cs
-
tests/Avalonia.RenderTests/Shapes/PathTests.cs
-
BIN
tests/TestFiles/Direct2D1/Shapes/Path/Path_With_Rotated_Geometry.expected.png
-
BIN
tests/TestFiles/Skia/Shapes/Path/Path_With_Rotated_Geometry.expected.png
|
|
|
@ -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
|
|
|
|
|
|
|
|
@ -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(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
Width:
|
Height:
|
Size: 1.1 KiB
|
Width:
|
Height:
|
Size: 1.1 KiB
|