Browse Source

Set RenderedGeometry.Transform on arrange.

Fixes #4822 but breaks a bunch of other tests.
Steven Kirk 5 years ago
parent
commit
beada97aab
1 changed files with 4 additions and 35 deletions
  1. 4 35
      src/Avalonia.Controls/Shapes/Shape.cs

+ 4 - 35
src/Avalonia.Controls/Shapes/Shape.cs

@@ -248,52 +248,21 @@ namespace Avalonia.Controls.Shapes
 
         protected override Size MeasureOverride(Size availableSize)
         {
-            bool deferCalculateTransform;
-            switch (Stretch)
+            if (DefiningGeometry is null)
             {
-                case Stretch.Fill:
-                case Stretch.UniformToFill:
-                    deferCalculateTransform = double.IsInfinity(availableSize.Width) || double.IsInfinity(availableSize.Height);
-                    break;
-                case Stretch.Uniform:
-                    deferCalculateTransform = double.IsInfinity(availableSize.Width) && double.IsInfinity(availableSize.Height);
-                    break;
-                case Stretch.None:
-                default:
-                    deferCalculateTransform = false;
-                    break;
+                return default;
             }
 
-            if (deferCalculateTransform)
-            {
-                _calculateTransformOnArrange = true;
-                return DefiningGeometry?.Bounds.Size ?? Size.Empty;
-            }
-            else
-            {
-                _calculateTransformOnArrange = false;
-                return CalculateShapeSizeAndSetTransform(availableSize);
-            }
+            return CalculateSizeAndTransform(availableSize, DefiningGeometry.Bounds, Stretch).Item1;
         }
 
         protected override Size ArrangeOverride(Size finalSize)
-        {
-            if (_calculateTransformOnArrange)
-            {
-                _calculateTransformOnArrange = false;
-                CalculateShapeSizeAndSetTransform(finalSize);
-            }
-
-            return finalSize;
-        }
-
-        private Size CalculateShapeSizeAndSetTransform(Size availableSize)
         {
             if (DefiningGeometry != null)
             {
                 // This should probably use GetRenderBounds(strokeThickness) but then the calculations
                 // will multiply the stroke thickness as well, which isn't correct.
-                var (size, transform) = CalculateSizeAndTransform(availableSize, DefiningGeometry.Bounds, Stretch);
+                var (size, transform) = CalculateSizeAndTransform(finalSize, DefiningGeometry.Bounds, Stretch);
 
                 if (_transform != transform)
                 {