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 namespace Perspex.Direct2D1.Media
{ {
using System;
using Perspex.Media;
using Perspex.Platform; using Perspex.Platform;
public abstract class GeometryImpl : IGeometryImpl public abstract class GeometryImpl : IGeometryImpl
@ -20,5 +22,7 @@ namespace Perspex.Direct2D1.Media
get; get;
protected set; 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(); } get { return geometry.GetBounds().ToPerspex(); }
} }
public override Rect GetRenderBounds(double strokeThickness)
{
return geometry.GetWidenedBounds((float)strokeThickness).ToPerspex();
}
public IStreamGeometryContextImpl Open() public IStreamGeometryContextImpl Open()
{ {
return new StreamGeometryContextImpl(geometry.Open()); return new StreamGeometryContextImpl(geometry.Open());

5
Perspex/Media/Geometry.cs

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

4
Perspex/Platform/IGeometryImpl.cs

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

4
Perspex/Shapes/Rectangle.cs

@ -16,12 +16,12 @@ namespace Perspex.Shapes
public override Geometry DefiningGeometry 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) 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) protected override Size ArrangeOverride(Size finalSize)

2
Perspex/Shapes/Shape.cs

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

Loading…
Cancel
Save