Browse Source
Merge branch 'master' into feature/attachedlayout-non-virtualizing
pull/3771/head
Steven Kirk
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
42 additions and
0 deletions
-
src/Avalonia.Controls/Shapes/Path.cs
-
tests/Avalonia.Controls.UnitTests/Shapes/PathTests.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(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
@ -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); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|