From 438bc89a9066391483c721c9f443c4c2970beca1 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 15 Jan 2018 00:07:24 +0100 Subject: [PATCH] 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`. --- src/Avalonia.Controls/Shapes/Shape.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/Shapes/Shape.cs b/src/Avalonia.Controls/Shapes/Shape.cs index 2ea681891d..a1848a95b1 100644 --- a/src/Avalonia.Controls/Shapes/Shape.cs +++ b/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