Browse Source

Merge branch 'master' into feature/attachedlayout-non-virtualizing

pull/3771/head
Steven Kirk 6 years ago
committed by GitHub
parent
commit
1064971d55
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      src/Avalonia.Controls/Shapes/Path.cs
  2. 18
      tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs

24
src/Avalonia.Controls/Shapes/Path.cs

@ -1,3 +1,5 @@
using System;
using Avalonia.Data;
using Avalonia.Media; using Avalonia.Media;
namespace Avalonia.Controls.Shapes namespace Avalonia.Controls.Shapes
@ -10,6 +12,7 @@ namespace Avalonia.Controls.Shapes
static Path() static Path()
{ {
AffectsGeometry<Path>(DataProperty); AffectsGeometry<Path>(DataProperty);
DataProperty.Changed.AddClassHandler<Path>((o, e) => o.DataChanged(e));
} }
public Geometry Data public Geometry Data
@ -19,5 +22,26 @@ namespace Avalonia.Controls.Shapes
} }
protected override Geometry CreateDefiningGeometry() => Data; protected override Geometry CreateDefiningGeometry() => Data;
private void DataChanged(AvaloniaPropertyChangedEventArgs e)
{
var oldGeometry = (Geometry)e.OldValue;
var newGeometry = (Geometry)e.NewValue;
if (oldGeometry is object)
{
oldGeometry.Changed -= GeometryChanged;
}
if (newGeometry is object)
{
newGeometry.Changed += GeometryChanged;
}
}
private void GeometryChanged(object sender, EventArgs e)
{
InvalidateGeometry();
}
} }
} }

18
tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs

@ -1,4 +1,6 @@
using Avalonia.Controls.Shapes; using Avalonia.Controls.Shapes;
using Avalonia.Media;
using Avalonia.UnitTests;
using Xunit; using Xunit;
namespace Avalonia.Controls.UnitTests.Shapes namespace Avalonia.Controls.UnitTests.Shapes
@ -12,5 +14,21 @@ namespace Avalonia.Controls.UnitTests.Shapes
target.Measure(Size.Infinity); target.Measure(Size.Infinity);
} }
[Fact]
public void Subscribes_To_Geometry_Changes()
{
using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
var geometry = new EllipseGeometry { Rect = new Rect(0, 0, 10, 10) };
var target = new Path { Data = geometry };
target.Measure(Size.Infinity);
Assert.True(target.IsMeasureValid);
geometry.Rect = new Rect(0, 0, 20, 20);
Assert.False(target.IsMeasureValid);
}
} }
} }

Loading…
Cancel
Save