From b6447c0e0920966eeaf2052934651a360a7722c9 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Tue, 1 Oct 2019 19:06:00 +0300 Subject: [PATCH 1/4] failing test for #3053 --- .../Media/PathMarkupParserTests.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs index 5570378063..5cdbcd9116 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs @@ -235,5 +235,30 @@ namespace Avalonia.Visuals.UnitTests.Media Assert.Throws(() => parser.Parse(pathData)); } } + + [Fact] + public void CloseFigure_Should_Move_CurrentPoint_To_CreateFigurePoint() + { + var pathGeometry = new PathGeometry(); + using (var context = new PathGeometryContext(pathGeometry)) + using (var parser = new PathMarkupParser(context)) + { + parser.Parse("M10,10L100,100Z m10,10"); + + Assert.Equal(2, pathGeometry.Figures.Count); + + var figure = pathGeometry.Figures[0]; + + Assert.Equal(new Point(10, 10), figure.StartPoint); + + Assert.Equal(true, figure.IsClosed); + + Assert.Equal(new Point(100, 100), ((LineSegment)figure.Segments[0]).Point); + + figure = pathGeometry.Figures[1]; + + Assert.Equal(new Point(20, 20), figure.StartPoint); + } + } } } From 2b9180c794b77e6ca5db4f5519929b6b5fcdfc8d Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Tue, 1 Oct 2019 22:27:10 +0300 Subject: [PATCH 2/4] fix invalid test related to issue #3053 --- .../Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs index 5cdbcd9116..e1475dce80 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs @@ -100,9 +100,7 @@ namespace Avalonia.Visuals.UnitTests.Media Assert.Equal(new Point(10, 10), lineSegment.Point); - figure = pathGeometry.Figures[1]; - - segment = figure.Segments[0]; + segment = figure.Segments[1]; Assert.IsType(segment); From a675cd2e687f53a79404769c149e1e37e36f4ac4 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Tue, 1 Oct 2019 22:43:14 +0300 Subject: [PATCH 3/4] when close figure set current point back to start, fixes partially #3053 --- src/Avalonia.Visuals/Media/PathMarkupParser.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Avalonia.Visuals/Media/PathMarkupParser.cs b/src/Avalonia.Visuals/Media/PathMarkupParser.cs index 8852883dcc..c93edaca14 100644 --- a/src/Avalonia.Visuals/Media/PathMarkupParser.cs +++ b/src/Avalonia.Visuals/Media/PathMarkupParser.cs @@ -32,6 +32,7 @@ namespace Avalonia.Media private IGeometryContext _geometryContext; private Point _currentPoint; + private Point? _beginFigurePoint; private Point? _previousControlPoint; private bool _isOpen; private bool _isDisposed; @@ -180,6 +181,8 @@ namespace Avalonia.Media _geometryContext.BeginFigure(_currentPoint); + _beginFigurePoint = _currentPoint; + _isOpen = true; } @@ -212,6 +215,12 @@ namespace Avalonia.Media if (_isOpen) { _geometryContext.EndFigure(true); + + if (_beginFigurePoint != null) + { + _currentPoint = _beginFigurePoint.Value; + _beginFigurePoint = null; + } } _previousControlPoint = null; From f4c7f63ae7ca14c92248e7f71a752d632b75cde3 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Tue, 1 Oct 2019 22:45:24 +0300 Subject: [PATCH 4/4] remove wrong logic for path assume line by default if command is missing --- src/Avalonia.Visuals/Media/PathMarkupParser.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Avalonia.Visuals/Media/PathMarkupParser.cs b/src/Avalonia.Visuals/Media/PathMarkupParser.cs index c93edaca14..e8f149df11 100644 --- a/src/Avalonia.Visuals/Media/PathMarkupParser.cs +++ b/src/Avalonia.Visuals/Media/PathMarkupParser.cs @@ -242,12 +242,6 @@ namespace Avalonia.Media { span = ReadSeparator(span); AddLine(ref span, relative); - - if (!relative) - { - _currentPoint = currentPoint; - CreateFigure(); - } } }