Browse Source

Fixed Shape.AffectsGeometry.

Make sure the object on which the property changed occurred is the
correct type. Previously, e.g. the `AffectsGeometry(BoundsProperty,
StrokeThicknessProperty)` call in `Rectangle` caused *all* shapes to be
invalidated when `Bounds` changed, where it should only affect
`Rectangle.
pull/504/head
Steven Kirk 10 years ago
parent
commit
07f854eb9a
  1. 2
      src/Perspex.Controls/Shapes/Ellipse.cs
  2. 2
      src/Perspex.Controls/Shapes/Line.cs
  3. 2
      src/Perspex.Controls/Shapes/Path.cs
  4. 2
      src/Perspex.Controls/Shapes/Polygon.cs
  5. 2
      src/Perspex.Controls/Shapes/Polyline.cs
  6. 2
      src/Perspex.Controls/Shapes/Rectangle.cs
  7. 15
      src/Perspex.Controls/Shapes/Shape.cs

2
src/Perspex.Controls/Shapes/Ellipse.cs

@ -9,7 +9,7 @@ namespace Perspex.Controls.Shapes
{
static Ellipse()
{
AffectsGeometry(BoundsProperty, StrokeThicknessProperty);
AffectsGeometry<Ellipse>(BoundsProperty, StrokeThicknessProperty);
}
protected override Geometry CreateDefiningGeometry()

2
src/Perspex.Controls/Shapes/Line.cs

@ -16,7 +16,7 @@ namespace Perspex.Controls.Shapes
static Line()
{
StrokeThicknessProperty.OverrideDefaultValue<Line>(1);
AffectsGeometry(StartPointProperty, EndPointProperty);
AffectsGeometry<Line>(StartPointProperty, EndPointProperty);
}
public Point StartPoint

2
src/Perspex.Controls/Shapes/Path.cs

@ -13,7 +13,7 @@ namespace Perspex.Controls.Shapes
static Path()
{
AffectsGeometry(DataProperty);
AffectsGeometry<Path>(DataProperty);
}
public Geometry Data

2
src/Perspex.Controls/Shapes/Polygon.cs

@ -13,7 +13,7 @@ namespace Perspex.Controls.Shapes
static Polygon()
{
AffectsGeometry(PointsProperty);
AffectsGeometry<Polygon>(PointsProperty);
}
public IList<Point> Points

2
src/Perspex.Controls/Shapes/Polyline.cs

@ -14,7 +14,7 @@ namespace Perspex.Controls.Shapes
static Polyline()
{
StrokeThicknessProperty.OverrideDefaultValue<Polyline>(1);
AffectsGeometry(PointsProperty);
AffectsGeometry<Polyline>(PointsProperty);
}
public IList<Point> Points

2
src/Perspex.Controls/Shapes/Rectangle.cs

@ -9,7 +9,7 @@ namespace Perspex.Controls.Shapes
{
static Rectangle()
{
AffectsGeometry(BoundsProperty, StrokeThicknessProperty);
AffectsGeometry<Rectangle>(BoundsProperty, StrokeThicknessProperty);
}
protected override Geometry CreateDefiningGeometry()

15
src/Perspex.Controls/Shapes/Shape.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Reflection;
using Perspex.Collections;
using Perspex.Controls;
using Perspex.Media;
@ -123,11 +124,21 @@ namespace Perspex.Controls.Shapes
/// After a call to this method in a control's static constructor, any change to the
/// property will cause <see cref="InvalidateGeometry"/> to be called on the element.
/// </remarks>
protected static void AffectsGeometry(params PerspexProperty[] properties)
protected static void AffectsGeometry<TShape>(params PerspexProperty[] properties)
where TShape : Shape
{
foreach (var property in properties)
{
property.Changed.Subscribe(AffectsGeometryInvalidate);
property.Changed.Subscribe(e =>
{
var senderType = e.Sender.GetType().GetTypeInfo();
var affectedType = typeof(TShape).GetTypeInfo();
if (affectedType.IsAssignableFrom(senderType))
{
AffectsGeometryInvalidate(e);
}
});
}
}

Loading…
Cancel
Save