Browse Source

Merge branch 'master' into nonrx-expressionnode

pull/1694/head
Steven Kirk 8 years ago
committed by GitHub
parent
commit
f1e83da986
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      src/Avalonia.Controls/ItemsControl.cs
  2. 11
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
  3. 1
      src/Avalonia.Controls/Primitives/TemplatedControl.cs
  4. 15
      src/Avalonia.Visuals/Media/PathMarkupParser.cs
  5. 20
      tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs
  6. 18
      tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs
  7. 26
      tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs

1
src/Avalonia.Controls/ItemsControl.cs

@ -155,6 +155,7 @@ namespace Avalonia.Controls
void IItemsPresenterHost.RegisterItemsPresenter(IItemsPresenter presenter)
{
Presenter = presenter;
ItemContainerGenerator.Clear();
}
/// <summary>

11
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@ -408,12 +408,15 @@ namespace Avalonia.Controls.Primitives
var panel = (InputElement)Presenter.Panel;
foreach (var container in e.Containers)
if (panel != null)
{
if (KeyboardNavigation.GetTabOnceActiveElement(panel) == container.ContainerControl)
foreach (var container in e.Containers)
{
KeyboardNavigation.SetTabOnceActiveElement(panel, null);
break;
if (KeyboardNavigation.GetTabOnceActiveElement(panel) == container.ContainerControl)
{
KeyboardNavigation.SetTabOnceActiveElement(panel, null);
break;
}
}
}
}

1
src/Avalonia.Controls/Primitives/TemplatedControl.cs

@ -247,6 +247,7 @@ namespace Avalonia.Controls.Primitives
foreach (var child in this.GetTemplateChildren())
{
child.SetValue(TemplatedParentProperty, null);
((ISetLogicalParent)child).SetParent(null);
}
VisualChildren.Clear();

15
src/Avalonia.Visuals/Media/PathMarkupParser.cs

@ -451,6 +451,21 @@ namespace Avalonia.Media
}
for (; i < remaining.Length && char.IsNumber(remaining[i]); i++) valid = true;
if (i < remaining.Length)
{
// scientific notation
if (remaining[i] == 'E' || remaining[i] == 'e')
{
valid = false;
i++;
if (remaining[i] == '-' || remaining[i] == '+')
{
i++;
for (; i < remaining.Length && char.IsNumber(remaining[i]); i++) valid = true;
}
}
}
if (!valid)
{
argument = ReadOnlySpan<char>.Empty;

20
tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs

@ -315,6 +315,26 @@ namespace Avalonia.Controls.UnitTests
Assert.Same(before, after);
}
[Fact]
public void Should_Clear_Containers_When_ItemsPresenter_Changes()
{
var target = new ItemsControl
{
Items = new[] { "foo", "bar" },
Template = GetTemplate(),
};
target.ApplyTemplate();
target.Presenter.ApplyTemplate();
Assert.Equal(2, target.ItemContainerGenerator.Containers.Count());
target.Template = GetTemplate();
target.ApplyTemplate();
Assert.Empty(target.ItemContainerGenerator.Containers);
}
[Fact]
public void Empty_Class_Should_Initially_Be_Applied()
{

18
tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs

@ -160,6 +160,24 @@ namespace Avalonia.Controls.UnitTests.Primitives
Assert.Equal(target, child.GetLogicalParent());
}
[Fact]
public void Changing_Template_Should_Clear_Old_Templated_Childs_Parent()
{
var target = new TemplatedControl
{
Template = new FuncControlTemplate(_ => new Decorator())
};
target.ApplyTemplate();
var child = (Decorator)target.GetVisualChildren().Single();
target.Template = new FuncControlTemplate(_ => new Canvas());
target.ApplyTemplate();
Assert.Null(child.Parent);
}
[Fact]
public void Nested_Templated_Control_Should_Not_Have_Template_Applied()
{

26
tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs

@ -7,6 +7,7 @@ using Xunit;
namespace Avalonia.Visuals.UnitTests.Media
{
using System.Globalization;
using System.IO;
public class PathMarkupParserTests
@ -139,9 +140,32 @@ namespace Avalonia.Visuals.UnitTests.Media
Assert.Equal(new Point(30, 30), lineSegment.Point);
}
}
}
[Fact]
public void Parses_Scientific_Notation_Double()
{
var pathGeometry = new PathGeometry();
using (var context = new PathGeometryContext(pathGeometry))
using (var parser = new PathMarkupParser(context))
{
parser.Parse("M -1.01725E-005 -1.01725e-005");
var figure = pathGeometry.Figures[0];
Assert.Equal(
new Point(
double.Parse("-1.01725E-005", NumberStyles.Float, CultureInfo.InvariantCulture),
double.Parse("-1.01725E-005", NumberStyles.Float, CultureInfo.InvariantCulture)),
figure.StartPoint);
}
}
[Theory]
[InlineData("F1M9.0771,11C9.1161,10.701,9.1801,10.352,9.3031,10L9.0001,10 9.0001,6.166 3.0001,9.767 3.0001,10 "
+ "9.99999999997669E-05,10 9.99999999997669E-05,0 3.0001,0 3.0001,0.234 9.0001,3.834 9.0001,0 "
+ "12.0001,0 12.0001,8.062C12.1861,8.043 12.3821,8.031 12.5941,8.031 15.3481,8.031 15.7961,9.826 "
+ "15.9201,11L16.0001,16 9.0001,16 9.0001,12.562 9.0001,11z")] // issue #1708
[InlineData(" M0 0")]
[InlineData("F1 M24,14 A2,2,0,1,1,20,14 A2,2,0,1,1,24,14 z")] // issue #1107
[InlineData("M0 0L10 10z")]

Loading…
Cancel
Save