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