Browse Source

Set RenderedGeometry.Transform on arrange.

Fixes #4822 but breaks a bunch of other tests.
pull/4858/head
Steven Kirk 6 years ago
parent
commit
beada97aab
  1. 39
      src/Avalonia.Controls/Shapes/Shape.cs

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

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

Loading…
Cancel
Save