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
{
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

Loading…
Cancel
Save