Browse Source

Merge branch 'master' into single-win32-assembly

pull/1355/head
Jeremy Koritzinsky 9 years ago
committed by GitHub
parent
commit
b335f5f4de
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      appveyor.yml
  2. 2
      src/Avalonia.Controls/TextBox.cs
  3. 2
      src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs
  4. 7
      src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs
  5. 22
      src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs
  6. 6
      src/Shared/SharedAssemblyInfo.cs
  7. 24
      tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

2
appveyor.yml

@ -5,8 +5,6 @@ configuration:
environment: environment:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_CLI_TELEMETRY_OPTOUT: 1 DOTNET_CLI_TELEMETRY_OPTOUT: 1
NUGET_API_KEY:
secure: Xv89dlP2MSBZKhl1nrWSxqcDgCXB0HRhOd4SWQ+jRJ7QoLxQel5mLTipXM++J3G5
NUGET_API_URL: https://www.nuget.org/api/v2/package NUGET_API_URL: https://www.nuget.org/api/v2/package
MYGET_API_KEY: MYGET_API_KEY:
secure: OtVfyN3ErqQrDTnWH2HDfJDlCiu/i4/X4wFmK3ZXXP7HmCiXYPSbTjMPwwdOxRaK secure: OtVfyN3ErqQrDTnWH2HDfJDlCiu/i4/X4wFmK3ZXXP7HmCiXYPSbTjMPwwdOxRaK

2
src/Avalonia.Controls/TextBox.cs

@ -103,7 +103,7 @@ namespace Avalonia.Controls
if (acceptsReturn) if (acceptsReturn)
{ {
return wrapping == TextWrapping.NoWrap ? return wrapping == TextWrapping.NoWrap ?
ScrollBarVisibility.Visible : ScrollBarVisibility.Auto :
ScrollBarVisibility.Disabled; ScrollBarVisibility.Disabled;
} }
else else

2
src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs

@ -93,5 +93,7 @@ namespace Avalonia.Rendering.SceneGraph
/// to hit test children they must be hit tested manually. /// to hit test children they must be hit tested manually.
/// </remarks> /// </remarks>
bool HitTest(Point p); bool HitTest(Point p);
bool Disposed { get; }
} }
} }

7
src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs

@ -98,7 +98,10 @@ namespace Avalonia.Rendering.SceneGraph
public void Dispose() public void Dispose()
{ {
Root.Dispose(); foreach (var node in _index.Values)
{
node.Dispose();
}
} }
/// <summary> /// <summary>
@ -137,6 +140,8 @@ namespace Avalonia.Rendering.SceneGraph
Contract.Requires<ArgumentNullException>(node != null); Contract.Requires<ArgumentNullException>(node != null);
_index.Remove(node.Visual); _index.Remove(node.Visual);
node.Dispose();
} }
private VisualNode Clone(VisualNode source, IVisualNode parent, Dictionary<IVisual, IVisualNode> index) private VisualNode Clone(VisualNode source, IVisualNode parent, Dictionary<IVisual, IVisualNode> index)

22
src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

@ -113,6 +113,11 @@ namespace Avalonia.Rendering.SceneGraph
/// <param name="child">The child to add.</param> /// <param name="child">The child to add.</param>
public void AddChild(IVisualNode child) public void AddChild(IVisualNode child)
{ {
if (child.Disposed)
{
throw new ObjectDisposedException("Visual node for {node.Visual}");
}
EnsureChildrenCreated(); EnsureChildrenCreated();
_children.Add(child); _children.Add(child);
} }
@ -135,7 +140,6 @@ namespace Avalonia.Rendering.SceneGraph
{ {
EnsureChildrenCreated(); EnsureChildrenCreated();
_children.Remove(child); _children.Remove(child);
child.Dispose();
} }
/// <summary> /// <summary>
@ -145,13 +149,13 @@ namespace Avalonia.Rendering.SceneGraph
/// <param name="node">The child to add.</param> /// <param name="node">The child to add.</param>
public void ReplaceChild(int index, IVisualNode node) public void ReplaceChild(int index, IVisualNode node)
{ {
EnsureChildrenCreated(); if (node.Disposed)
var old = _children[index];
_children[index] = node;
if (node != old)
{ {
old.Dispose(); throw new ObjectDisposedException("Visual node for {node.Visual}");
} }
EnsureChildrenCreated();
_children[index] = node;
} }
/// <summary> /// <summary>
@ -332,13 +336,11 @@ namespace Avalonia.Rendering.SceneGraph
_drawOperationsCloned = false; _drawOperationsCloned = false;
} }
} }
public bool Disposed { get; }
public void Dispose() public void Dispose()
{ {
foreach (var child in Children)
{
child.Dispose();
}
_drawOperationsRefCounter?.Dispose(); _drawOperationsRefCounter?.Dispose();
} }

6
src/Shared/SharedAssemblyInfo.cs

@ -14,6 +14,6 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: NeutralResourcesLanguage("en")] [assembly: NeutralResourcesLanguage("en")]
[assembly: AssemblyVersion("0.5.2")] [assembly: AssemblyVersion("0.6.0")]
[assembly: AssemblyFileVersion("0.5.2")] [assembly: AssemblyFileVersion("0.6.0")]
[assembly: AssemblyInformationalVersion("0.5.2")] [assembly: AssemblyInformationalVersion("0.6.0")]

24
tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

@ -4,10 +4,12 @@
using System; using System;
using System.Reactive.Linq; using System.Reactive.Linq;
using Avalonia.Controls.Presenters; using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates; using Avalonia.Controls.Templates;
using Avalonia.Data; using Avalonia.Data;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.Markup.Xaml.Data; using Avalonia.Markup.Xaml.Data;
using Avalonia.Media;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.UnitTests; using Avalonia.UnitTests;
using Moq; using Moq;
@ -245,6 +247,28 @@ namespace Avalonia.Controls.UnitTests
} }
} }
[Theory]
[InlineData(new object[] { false, TextWrapping.NoWrap, ScrollBarVisibility.Hidden })]
[InlineData(new object[] { false, TextWrapping.Wrap, ScrollBarVisibility.Hidden })]
[InlineData(new object[] { true, TextWrapping.NoWrap, ScrollBarVisibility.Auto })]
[InlineData(new object[] { true, TextWrapping.Wrap, ScrollBarVisibility.Disabled })]
public void Has_Correct_Horizontal_ScrollBar_Visibility(
bool acceptsReturn,
TextWrapping wrapping,
ScrollBarVisibility expected)
{
using (UnitTestApplication.Start(Services))
{
var target = new TextBox
{
AcceptsReturn = acceptsReturn,
TextWrapping = wrapping,
};
Assert.Equal(expected, ScrollViewer.GetHorizontalScrollBarVisibility(target));
}
}
private static TestServices Services => TestServices.MockThreadingInterface.With( private static TestServices Services => TestServices.MockThreadingInterface.With(
standardCursorFactory: Mock.Of<IStandardCursorFactory>()); standardCursorFactory: Mock.Of<IStandardCursorFactory>());

Loading…
Cancel
Save