From 1d8800251ccd2f5f8b778e846185713807bb9307 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 30 Jan 2016 16:20:06 +0100 Subject: [PATCH] Use GetWidenedBounds in D2D backend. According to http://stackoverflow.com/questions/32611798, " Geometry.Bounds (in WPF) is equivalent to ID2D1Geometry::GetWidenedBounds(0.0f)." so use that. This seems to fix the problem with D2D reporting an invalid size for Line/PolylineGeometry, so removed the workaround from there. --- .../Media/EllipseGeometry.cs | 3 -- src/Perspex.SceneGraph/Media/Geometry.cs | 5 +-- src/Perspex.SceneGraph/Media/LineGeometry.cs | 31 ------------------ .../Media/PolylineGeometry.cs | 32 ------------------- .../Media/RectangleGeometry.cs | 3 -- .../Media/StreamGeometry.cs | 3 -- .../Media/StreamGeometryImpl.cs | 2 +- 7 files changed, 2 insertions(+), 77 deletions(-) diff --git a/src/Perspex.SceneGraph/Media/EllipseGeometry.cs b/src/Perspex.SceneGraph/Media/EllipseGeometry.cs index 3d6ae38909..71162d25e1 100644 --- a/src/Perspex.SceneGraph/Media/EllipseGeometry.cs +++ b/src/Perspex.SceneGraph/Media/EllipseGeometry.cs @@ -49,9 +49,6 @@ namespace Perspex.Media PlatformImpl = impl; } - /// - public override Rect Bounds => PlatformImpl.Bounds; - /// public override Geometry Clone() { diff --git a/src/Perspex.SceneGraph/Media/Geometry.cs b/src/Perspex.SceneGraph/Media/Geometry.cs index dcfcd9aefe..806d5321a5 100644 --- a/src/Perspex.SceneGraph/Media/Geometry.cs +++ b/src/Perspex.SceneGraph/Media/Geometry.cs @@ -31,10 +31,7 @@ namespace Perspex.Media /// /// Gets the geometry's bounding rectangle. /// - public abstract Rect Bounds - { - get; - } + public Rect Bounds => PlatformImpl.Bounds; /// /// Gets the platform-specific implementation of the geometry. diff --git a/src/Perspex.SceneGraph/Media/LineGeometry.cs b/src/Perspex.SceneGraph/Media/LineGeometry.cs index d9f24422b1..78ad118604 100644 --- a/src/Perspex.SceneGraph/Media/LineGeometry.cs +++ b/src/Perspex.SceneGraph/Media/LineGeometry.cs @@ -35,37 +35,6 @@ namespace Perspex.Media PlatformImpl = impl; } - /// - public override Rect Bounds - { - get - { - double xMin, yMin, xMax, yMax; - if (_startPoint.X <= _endPoint.X) - { - xMin = _startPoint.X; - xMax = _endPoint.X; - } - else - { - xMin = _endPoint.X; - xMax = _startPoint.X; - } - if (_startPoint.Y <= _endPoint.Y) - { - yMin = _startPoint.Y; - yMax = _endPoint.Y; - } - else - { - yMin = _endPoint.Y; - yMax = _startPoint.Y; - } - - return new Rect(xMin, yMin, xMax - xMin, yMax - yMin); - } - } - /// public override Geometry Clone() { diff --git a/src/Perspex.SceneGraph/Media/PolylineGeometry.cs b/src/Perspex.SceneGraph/Media/PolylineGeometry.cs index 39970d5e22..ec1ea1d412 100644 --- a/src/Perspex.SceneGraph/Media/PolylineGeometry.cs +++ b/src/Perspex.SceneGraph/Media/PolylineGeometry.cs @@ -41,38 +41,6 @@ namespace Perspex.Media PlatformImpl = impl; } - /// - public override Rect Bounds - { - get - { - double xMin = double.MaxValue, yMin = double.MaxValue; - double xMax = double.MinValue, yMax = double.MinValue; - foreach (var point in _points) - { - if (point.X < xMin) - { - xMin = point.X; - } - else if (point.X > xMax) - { - xMax = point.X; - } - - if (point.Y < yMin) - { - yMin = point.Y; - } - else if (point.Y > yMax) - { - yMax = point.Y; - } - } - - return new Rect(xMin, yMin, xMax - xMin, yMax - yMin); - } - } - /// public override Geometry Clone() { diff --git a/src/Perspex.SceneGraph/Media/RectangleGeometry.cs b/src/Perspex.SceneGraph/Media/RectangleGeometry.cs index 190d467127..d225c47e97 100644 --- a/src/Perspex.SceneGraph/Media/RectangleGeometry.cs +++ b/src/Perspex.SceneGraph/Media/RectangleGeometry.cs @@ -31,9 +31,6 @@ namespace Perspex.Media PlatformImpl = impl; } - /// - public override Rect Bounds => PlatformImpl.Bounds; - /// public override Geometry Clone() { diff --git a/src/Perspex.SceneGraph/Media/StreamGeometry.cs b/src/Perspex.SceneGraph/Media/StreamGeometry.cs index 4d0b353f5d..8cac433476 100644 --- a/src/Perspex.SceneGraph/Media/StreamGeometry.cs +++ b/src/Perspex.SceneGraph/Media/StreamGeometry.cs @@ -28,9 +28,6 @@ namespace Perspex.Media PlatformImpl = impl; } - /// - public override Rect Bounds => PlatformImpl.Bounds; - /// /// Creates a from a string. /// diff --git a/src/Windows/Perspex.Direct2D1/Media/StreamGeometryImpl.cs b/src/Windows/Perspex.Direct2D1/Media/StreamGeometryImpl.cs index 0b91d561b0..f9f790db56 100644 --- a/src/Windows/Perspex.Direct2D1/Media/StreamGeometryImpl.cs +++ b/src/Windows/Perspex.Direct2D1/Media/StreamGeometryImpl.cs @@ -34,7 +34,7 @@ namespace Perspex.Direct2D1.Media } /// - public override Rect Bounds => _path.GetBounds().ToPerspex(); + public override Rect Bounds => _path.GetWidenedBounds(0).ToPerspex(); /// public override D2DGeometry DefiningGeometry => _path;