Browse Source

Preserve defining geometry transform.

Previous logic was overwriting `DefiningGeometry`'s transform with the transform calculated by the layout pass. Be sure to apply both transforms to the `RenderedGeometry`.
pull/1342/head
Steven Kirk 9 years ago
parent
commit
438bc89a90
  1. 21
      src/Avalonia.Controls/Shapes/Shape.cs

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

@ -61,12 +61,26 @@ namespace Avalonia.Controls.Shapes
{ {
get get
{ {
if (_renderedGeometry == null) if (_renderedGeometry == null && DefiningGeometry != null)
{ {
if (DefiningGeometry != null) if (_transform == Matrix.Identity)
{
_renderedGeometry = DefiningGeometry;
}
else
{ {
_renderedGeometry = DefiningGeometry.Clone(); _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; return finalSize;
} }
private Size CalculateShapeSizeAndSetTransform(Size availableSize) private Size CalculateShapeSizeAndSetTransform(Size availableSize)
{ {
// This should probably use GetRenderBounds(strokeThickness) but then the calculations // This should probably use GetRenderBounds(strokeThickness) but then the calculations

Loading…
Cancel
Save