Browse Source

Measure geometry including stroke.

pull/4/head
Steven Kirk 12 years ago
parent
commit
24adb13d2b
  1. 4
      Perspex.Direct2D1/Media/GeometryImpl.cs
  2. 5
      Perspex.Direct2D1/Media/StreamGeometryImpl.cs
  3. 5
      Perspex/Media/Geometry.cs
  4. 4
      Perspex/Platform/IGeometryImpl.cs
  5. 4
      Perspex/Shapes/Rectangle.cs
  6. 2
      Perspex/Shapes/Shape.cs

4
Perspex.Direct2D1/Media/GeometryImpl.cs

@ -6,6 +6,8 @@
namespace Perspex.Direct2D1.Media
{
using System;
using Perspex.Media;
using Perspex.Platform;
public abstract class GeometryImpl : IGeometryImpl
@ -20,5 +22,7 @@ namespace Perspex.Direct2D1.Media
get;
protected set;
}
public abstract Rect GetRenderBounds(double strokeThickness);
}
}

5
Perspex.Direct2D1/Media/StreamGeometryImpl.cs

@ -28,6 +28,11 @@ namespace Perspex.Direct2D1.Media
get { return geometry.GetBounds().ToPerspex(); }
}
public override Rect GetRenderBounds(double strokeThickness)
{
return geometry.GetWidenedBounds((float)strokeThickness).ToPerspex();
}
public IStreamGeometryContextImpl Open()
{
return new StreamGeometryContextImpl(geometry.Open());

5
Perspex/Media/Geometry.cs

@ -20,5 +20,10 @@ namespace Perspex.Media
get;
protected set;
}
public Rect GetRenderBounds(double strokeThickness)
{
return this.PlatformImpl.GetRenderBounds(strokeThickness);
}
}
}

4
Perspex/Platform/IGeometryImpl.cs

@ -6,8 +6,12 @@
namespace Perspex.Platform
{
using Perspex.Media;
public interface IGeometryImpl
{
Rect Bounds { get; }
Rect GetRenderBounds(double strokeThickness);
}
}

4
Perspex/Shapes/Rectangle.cs

@ -16,12 +16,12 @@ namespace Perspex.Shapes
public override Geometry DefiningGeometry
{
get { return new RectangleGeometry(new Rect(size)); }
get { return new RectangleGeometry(new Rect(0, 0, this.Width, this.Height)); }
}
protected override Size MeasureOverride(Size availableSize)
{
return new Size(this.Width, this.Height);
return this.DefiningGeometry.GetRenderBounds(this.StrokeThickness).Size;
}
protected override Size ArrangeOverride(Size finalSize)

2
Perspex/Shapes/Shape.cs

@ -60,7 +60,7 @@ namespace Perspex.Shapes
protected override Size MeasureOverride(Size availableSize)
{
Rect shapeBounds = this.RenderedGeometry.Bounds;
Rect shapeBounds = this.RenderedGeometry.GetRenderBounds(this.StrokeThickness);
double width = this.Width;
double height = this.Height;
double desiredX = availableSize.Width;

Loading…
Cancel
Save