From c98b57a5253aaa655cd3367fc6ede0c6281f172a Mon Sep 17 00:00:00 2001 From: MrDaedra Date: Fri, 3 Feb 2017 15:24:08 +0300 Subject: [PATCH 01/33] Moved ShowDialog implementation from platform-specific interface to portable Window class. --- src/Avalonia.Controls/Platform/IWindowImpl.cs | 1 + src/Avalonia.Controls/Window.cs | 48 +++++++++++++++---- src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs | 1 + src/Gtk/Avalonia.Gtk/WindowImpl.cs | 1 + src/Gtk/Avalonia.Gtk/WindowImplBase.cs | 1 + src/Windows/Avalonia.Win32/WindowImpl.cs | 5 +- 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/Avalonia.Controls/Platform/IWindowImpl.cs b/src/Avalonia.Controls/Platform/IWindowImpl.cs index 609e9834cb..08899d5c14 100644 --- a/src/Avalonia.Controls/Platform/IWindowImpl.cs +++ b/src/Avalonia.Controls/Platform/IWindowImpl.cs @@ -28,6 +28,7 @@ namespace Avalonia.Platform /// /// An that should be used to close the window. /// + [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] IDisposable ShowDialog(); /// diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 40c52a748d..0a1fb55ced 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -11,6 +11,8 @@ using Avalonia.Media; using Avalonia.Platform; using Avalonia.Styling; using System.Collections.Generic; +using System.Linq; +using System.Reactive.Disposables; namespace Avalonia.Controls { @@ -45,7 +47,7 @@ namespace Avalonia.Controls /// public class Window : TopLevel, IStyleable, IFocusScope, ILayoutRoot, INameScope { - private static IList s_windows = new List(); + private static IList s_windows = new List(); /// /// Retrieves an enumeration of all Windows in the currently running application. @@ -89,7 +91,7 @@ namespace Avalonia.Controls TitleProperty.Changed.AddClassHandler((s, e) => s.PlatformImpl.SetTitle((string)e.NewValue)); HasSystemDecorationsProperty.Changed.AddClassHandler( (s, e) => s.PlatformImpl.SetSystemDecorations((bool) e.NewValue)); - + IconProperty.Changed.AddClassHandler((s, e) => s.PlatformImpl.SetIcon(((WindowIcon)e.NewValue).PlatformImpl)); } @@ -180,7 +182,7 @@ namespace Avalonia.Controls Size ILayoutRoot.MaxClientSize => _maxPlatformClientSize; /// - Type IStyleable.StyleKey => typeof(Window); + Type IStyleable.StyleKey => typeof(Window); /// /// Closes the window. @@ -238,7 +240,7 @@ namespace Avalonia.Controls PlatformImpl.Show(); } } - + /// /// Shows the window as a dialog. /// @@ -263,14 +265,14 @@ namespace Avalonia.Controls { s_windows.Add(this); - EnsureInitialized(); - LayoutManager.Instance.ExecuteInitialLayoutPass(this); + EnsureInitialized(); + LayoutManager.Instance.ExecuteInitialLayoutPass(this); using (BeginAutoSizing()) { - var modal = PlatformImpl.ShowDialog(); + var modal = GetModal(); var result = new TaskCompletionSource(); - + Observable.FromEventPattern(this, nameof(Closed)) .Take(1) .Subscribe(_ => @@ -282,6 +284,32 @@ namespace Avalonia.Controls return result.Task; } } + + private IDisposable GetModal() + { + var disabled = s_windows.Where(w => w.IsEnabled && w != this); + Window activated = null; + foreach (var window in disabled) + { + if (window.IsActive) + { + activated = window; + } + + window.IsEnabled = false; + } + + PlatformImpl.Show(); + + return Disposable.Create(() => + { + foreach (var window in disabled) + { + window.IsEnabled = true; + } + activated?.Activate(); + }); + } /// void INameScope.Register(string name, object element) @@ -307,7 +335,7 @@ namespace Avalonia.Controls var sizeToContent = SizeToContent; var size = ClientSize; var desired = base.MeasureOverride(availableSize.Constrain(_maxPlatformClientSize)); - + switch (sizeToContent) { case SizeToContent.Width: @@ -348,7 +376,7 @@ namespace Avalonia.Controls init.BeginInit(); init.EndInit(); } - } + } } } diff --git a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs index a5a34cd47b..5ef1788073 100644 --- a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs +++ b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs @@ -45,6 +45,7 @@ namespace Avalonia.Gtk { } + [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public override IDisposable ShowDialog() => Disposable.Create(() => { }); public override void SetSystemDecorations(bool enabled) diff --git a/src/Gtk/Avalonia.Gtk/WindowImpl.cs b/src/Gtk/Avalonia.Gtk/WindowImpl.cs index eca7c24136..c82ded1263 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImpl.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImpl.cs @@ -108,6 +108,7 @@ namespace Avalonia.Gtk } } + [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public override IDisposable ShowDialog() { Window.Modal = true; diff --git a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs b/src/Gtk/Avalonia.Gtk/WindowImplBase.cs index db4b5e9dde..97641ed22c 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImplBase.cs @@ -167,6 +167,7 @@ namespace Avalonia.Gtk } public abstract void SetTitle(string title); + [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public abstract IDisposable ShowDialog(); public abstract void SetSystemDecorations(bool enabled); public abstract void SetIcon(IWindowIconImpl icon); diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 9680f31973..c3cbb0e449 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -136,7 +136,7 @@ namespace Avalonia.Win32 public WindowState WindowState { get - { + { var placement = default(UnmanagedMethods.WINDOWPLACEMENT); UnmanagedMethods.GetWindowPlacement(_hwnd, ref placement); @@ -175,7 +175,7 @@ namespace Avalonia.Win32 } public IPopupImpl CreatePopup() - { + { return new PopupImpl(); } @@ -332,6 +332,7 @@ namespace Avalonia.Win32 } } + [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public virtual IDisposable ShowDialog() { var disabled = s_instances.Where(x => x != this && x.IsEnabled).ToList(); From adda76bcc08dc78780eecdb4b7f3029eec75004a Mon Sep 17 00:00:00 2001 From: Andrey Alonzov Date: Wed, 8 Feb 2017 20:23:56 +0300 Subject: [PATCH 02/33] Changes according to PR comments. --- src/Avalonia.Controls/Platform/IWindowImpl.cs | 1 - src/Avalonia.Controls/Window.cs | 26 ++++++++--------- src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs | 1 - src/Gtk/Avalonia.Gtk/WindowImpl.cs | 1 - src/Gtk/Avalonia.Gtk/WindowImplBase.cs | 1 - src/Windows/Avalonia.Win32/WindowImpl.cs | 28 ++----------------- 6 files changed, 16 insertions(+), 42 deletions(-) diff --git a/src/Avalonia.Controls/Platform/IWindowImpl.cs b/src/Avalonia.Controls/Platform/IWindowImpl.cs index 08899d5c14..609e9834cb 100644 --- a/src/Avalonia.Controls/Platform/IWindowImpl.cs +++ b/src/Avalonia.Controls/Platform/IWindowImpl.cs @@ -28,7 +28,6 @@ namespace Avalonia.Platform /// /// An that should be used to close the window. /// - [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] IDisposable ShowDialog(); /// diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 0a1fb55ced..94ee3e9415 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -47,7 +47,7 @@ namespace Avalonia.Controls /// public class Window : TopLevel, IStyleable, IFocusScope, ILayoutRoot, INameScope { - private static IList s_windows = new List(); + private static IList s_windows = new List(); /// /// Retrieves an enumeration of all Windows in the currently running application. @@ -91,7 +91,7 @@ namespace Avalonia.Controls TitleProperty.Changed.AddClassHandler((s, e) => s.PlatformImpl.SetTitle((string)e.NewValue)); HasSystemDecorationsProperty.Changed.AddClassHandler( (s, e) => s.PlatformImpl.SetSystemDecorations((bool) e.NewValue)); - + IconProperty.Changed.AddClassHandler((s, e) => s.PlatformImpl.SetIcon(((WindowIcon)e.NewValue).PlatformImpl)); } @@ -182,7 +182,7 @@ namespace Avalonia.Controls Size ILayoutRoot.MaxClientSize => _maxPlatformClientSize; /// - Type IStyleable.StyleKey => typeof(Window); + Type IStyleable.StyleKey => typeof(Window); /// /// Closes the window. @@ -240,7 +240,7 @@ namespace Avalonia.Controls PlatformImpl.Show(); } } - + /// /// Shows the window as a dialog. /// @@ -265,14 +265,14 @@ namespace Avalonia.Controls { s_windows.Add(this); - EnsureInitialized(); - LayoutManager.Instance.ExecuteInitialLayoutPass(this); + EnsureInitialized(); + LayoutManager.Instance.ExecuteInitialLayoutPass(this); using (BeginAutoSizing()) { - var modal = GetModal(); + var modal = ShowModal(); var result = new TaskCompletionSource(); - + Observable.FromEventPattern(this, nameof(Closed)) .Take(1) .Subscribe(_ => @@ -284,8 +284,8 @@ namespace Avalonia.Controls return result.Task; } } - - private IDisposable GetModal() + + private IDisposable ShowModal() { var disabled = s_windows.Where(w => w.IsEnabled && w != this); Window activated = null; @@ -299,7 +299,7 @@ namespace Avalonia.Controls window.IsEnabled = false; } - PlatformImpl.Show(); + PlatformImpl.ShowDialog(); return Disposable.Create(() => { @@ -335,7 +335,7 @@ namespace Avalonia.Controls var sizeToContent = SizeToContent; var size = ClientSize; var desired = base.MeasureOverride(availableSize.Constrain(_maxPlatformClientSize)); - + switch (sizeToContent) { case SizeToContent.Width: @@ -376,7 +376,7 @@ namespace Avalonia.Controls init.BeginInit(); init.EndInit(); } - } + } } } diff --git a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs index 5ef1788073..a5a34cd47b 100644 --- a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs +++ b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs @@ -45,7 +45,6 @@ namespace Avalonia.Gtk { } - [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public override IDisposable ShowDialog() => Disposable.Create(() => { }); public override void SetSystemDecorations(bool enabled) diff --git a/src/Gtk/Avalonia.Gtk/WindowImpl.cs b/src/Gtk/Avalonia.Gtk/WindowImpl.cs index c82ded1263..eca7c24136 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImpl.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImpl.cs @@ -108,7 +108,6 @@ namespace Avalonia.Gtk } } - [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public override IDisposable ShowDialog() { Window.Modal = true; diff --git a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs b/src/Gtk/Avalonia.Gtk/WindowImplBase.cs index 7310a12289..4d7552aa72 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImplBase.cs @@ -167,7 +167,6 @@ namespace Avalonia.Gtk } public abstract void SetTitle(string title); - [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public abstract IDisposable ShowDialog(); public abstract void SetSystemDecorations(bool enabled); public abstract void SetIcon(IWindowIconImpl icon); diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index cb2bc84094..189f27593f 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -137,7 +137,7 @@ namespace Avalonia.Win32 public WindowState WindowState { get - { + { var placement = default(UnmanagedMethods.WINDOWPLACEMENT); UnmanagedMethods.GetWindowPlacement(_hwnd, ref placement); @@ -176,7 +176,7 @@ namespace Avalonia.Win32 } public IPopupImpl CreatePopup() - { + { return new PopupImpl(); } @@ -342,33 +342,11 @@ namespace Avalonia.Win32 } } - [Obsolete("Use Avalonia.Controls.Window.ShowDialog() instead.")] public virtual IDisposable ShowDialog() { - var disabled = s_instances.Where(x => x != this && x.IsEnabled).ToList(); - WindowImpl activated = null; - - foreach (var window in disabled) - { - if (window._isActive) - { - activated = window; - } - - window.IsEnabled = false; - } - Show(); - return Disposable.Create(() => - { - foreach (var window in disabled) - { - window.IsEnabled = true; - } - - activated?.Activate(); - }); + return Disposable.Empty; } public void SetCursor(IPlatformHandle cursor) From 10b6f9ed121d4112a1dde1ebfd913e8b2d948f20 Mon Sep 17 00:00:00 2001 From: MrDaedra Date: Thu, 16 Feb 2017 10:27:17 +0300 Subject: [PATCH 03/33] Reimplemented ShowDialog to use returned disposable --- src/Avalonia.Controls/Window.cs | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 94ee3e9415..4a1f6d2c5e 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -12,7 +12,6 @@ using Avalonia.Platform; using Avalonia.Styling; using System.Collections.Generic; using System.Linq; -using System.Reactive.Disposables; namespace Avalonia.Controls { @@ -270,7 +269,11 @@ namespace Avalonia.Controls using (BeginAutoSizing()) { - var modal = ShowModal(); + var affectedWindows = s_windows.Where(w => w.IsEnabled && w != this); + Window activated = affectedWindows.Where(w => w.IsActive).FirstOrDefault(); + SetIsEnabled(affectedWindows, false); + + var modal = PlatformImpl.ShowDialog(); var result = new TaskCompletionSource(); Observable.FromEventPattern(this, nameof(Closed)) @@ -278,6 +281,8 @@ namespace Avalonia.Controls .Subscribe(_ => { modal.Dispose(); + SetIsEnabled(affectedWindows, true); + activated?.Activate(); result.SetResult((TResult)_dialogResult); }); @@ -285,30 +290,12 @@ namespace Avalonia.Controls } } - private IDisposable ShowModal() + void SetIsEnabled(IEnumerable windows, bool isEnabled) { - var disabled = s_windows.Where(w => w.IsEnabled && w != this); - Window activated = null; - foreach (var window in disabled) + foreach (var window in windows) { - if (window.IsActive) - { - activated = window; - } - - window.IsEnabled = false; + window.IsEnabled = isEnabled; } - - PlatformImpl.ShowDialog(); - - return Disposable.Create(() => - { - foreach (var window in disabled) - { - window.IsEnabled = true; - } - activated?.Activate(); - }); } /// From f2efe02a6a27dad405e57d55592c648b8425a748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Thu, 16 Mar 2017 16:01:45 +0100 Subject: [PATCH 04/33] Add support for netstandard1.3 target framework This should allow using Skia NuGet package for deploying a self-contained deployment with a smaller footprint https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/#deploying-a-self-contained-deployment-with-a-smaller-footprint Fix syntax error Fix syntax error --- packages.cake | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages.cake b/packages.cake index ac65c26727..eb97c74579 100644 --- a/packages.cake +++ b/packages.cake @@ -429,12 +429,18 @@ public class Packages new NuSpecDependency() { Id = "Avalonia", TargetFramework = "netcoreapp1.0", Version = parameters.Version }, new NuSpecDependency() { Id = "SkiaSharp", TargetFramework = "netcoreapp1.0", Version = SkiaSharpVersion }, new NuSpecDependency() { Id = "NETStandard.Library", TargetFramework = "netcoreapp1.0", Version = "1.6.0" }, - new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netcoreapp1.0", Version = "1.0.1" } + new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netcoreapp1.0", Version = "1.0.1" }, + //netstandard1.3 + new NuSpecDependency() { Id = "Avalonia", TargetFramework = "netstandard1.3", Version = parameters.Version }, + new NuSpecDependency() { Id = "SkiaSharp", TargetFramework = "netstandard1.3", Version = SkiaSharpVersion }, + new NuSpecDependency() { Id = "NETStandard.Library", TargetFramework = "netstandard1.3", Version = "1.6.0" }, + new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netstandard1.3", Version = "1.0.1" } }, Files = new [] { new NuSpecContent { Source = "Avalonia.Skia.Desktop/bin/" + parameters.DirSuffixSkia + "/Avalonia.Skia.Desktop.dll", Target = "lib/net45" }, - new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.3/Avalonia.Skia.Desktop.dll", Target = "lib/netcoreapp1.0" } + new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.3/Avalonia.Skia.Desktop.dll", Target = "lib/netcoreapp1.0" }, + new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.3/Avalonia.Skia.Desktop.dll", Target = "lib/netstandard1.3" } }, BasePath = context.Directory("./src/Skia/"), OutputDirectory = parameters.NugetRoot From f48d9f4e19c536e6360900c31f7f76bf820846af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sat, 18 Mar 2017 09:47:22 +0100 Subject: [PATCH 05/33] Removed netcoreapp1.0 target framework --- packages.cake | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages.cake b/packages.cake index eb97c74579..9a3fab11f0 100644 --- a/packages.cake +++ b/packages.cake @@ -425,11 +425,6 @@ public class Packages { new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version }, new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion }, - //.NET Core - new NuSpecDependency() { Id = "Avalonia", TargetFramework = "netcoreapp1.0", Version = parameters.Version }, - new NuSpecDependency() { Id = "SkiaSharp", TargetFramework = "netcoreapp1.0", Version = SkiaSharpVersion }, - new NuSpecDependency() { Id = "NETStandard.Library", TargetFramework = "netcoreapp1.0", Version = "1.6.0" }, - new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netcoreapp1.0", Version = "1.0.1" }, //netstandard1.3 new NuSpecDependency() { Id = "Avalonia", TargetFramework = "netstandard1.3", Version = parameters.Version }, new NuSpecDependency() { Id = "SkiaSharp", TargetFramework = "netstandard1.3", Version = SkiaSharpVersion }, @@ -439,7 +434,6 @@ public class Packages Files = new [] { new NuSpecContent { Source = "Avalonia.Skia.Desktop/bin/" + parameters.DirSuffixSkia + "/Avalonia.Skia.Desktop.dll", Target = "lib/net45" }, - new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.3/Avalonia.Skia.Desktop.dll", Target = "lib/netcoreapp1.0" }, new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.3/Avalonia.Skia.Desktop.dll", Target = "lib/netstandard1.3" } }, BasePath = context.Directory("./src/Skia/"), From 8e6b6258ed249f75aa6c67c2a70662569523e91a Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 18 Mar 2017 13:48:26 +0100 Subject: [PATCH 06/33] Fix re-enabling windows when dialog is closed. --- src/Avalonia.Controls/Window.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 57470aa60e..e66b1beb1e 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -269,8 +269,8 @@ namespace Avalonia.Controls using (BeginAutoSizing()) { - var affectedWindows = s_windows.Where(w => w.IsEnabled && w != this); - Window activated = affectedWindows.Where(w => w.IsActive).FirstOrDefault(); + var affectedWindows = s_windows.Where(w => w.IsEnabled && w != this).ToList(); + var activated = affectedWindows.Where(w => w.IsActive).FirstOrDefault(); SetIsEnabled(affectedWindows, false); var modal = PlatformImpl.ShowDialog(); From 04b35fef629e8d376bbe167fc1b605866ebbb631 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 18 Mar 2017 14:28:27 +0100 Subject: [PATCH 07/33] Removed unused field. --- src/Windows/Avalonia.Win32/WindowImpl.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 72e1cea9df..f2d7e0e043 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -33,7 +33,6 @@ namespace Avalonia.Win32 private IntPtr _hwnd; private IInputRoot _owner; private bool _trackingMouse; - private bool _isActive; private bool _decorated = true; private double _scaling = 1; private WindowState _showWindowState; @@ -393,12 +392,10 @@ namespace Avalonia.Win32 { case UnmanagedMethods.WindowActivate.WA_ACTIVE: case UnmanagedMethods.WindowActivate.WA_CLICKACTIVE: - _isActive = true; Activated?.Invoke(); break; case UnmanagedMethods.WindowActivate.WA_INACTIVE: - _isActive = false; Deactivated?.Invoke(); break; } From 6754bda12590763354a878f58b33ca6efeb7af07 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 18 Mar 2017 16:51:34 +0300 Subject: [PATCH 08/33] Switched back to using DependencyContext (we might even want to use it for net451 later) --- packages.cake | 1 + .../Avalonia.DotNetCoreRuntime.csproj | 1 + .../NetCoreRuntimePlatform.cs | 33 ++++++++----------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/packages.cake b/packages.cake index 9a3fab11f0..1fffe48003 100644 --- a/packages.cake +++ b/packages.cake @@ -196,6 +196,7 @@ public class Packages new NuSpecDependency() { Id = "System.Reactive", Version = SystemReactiveVersion }, //.NET Core new NuSpecDependency() { Id = "System.Threading.ThreadPool", TargetFramework = "netcoreapp1.0", Version = "4.3.0" }, + new NuSpecDependency() { Id = "Microsoft.Extensions.DependencyModel", TargetFramework = "netcoreapp1.0", Version = "1.1.0" }, new NuSpecDependency() { Id = "NETStandard.Library", TargetFramework = "netcoreapp1.0", Version = "1.6.0" }, new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netcoreapp1.0", Version = "1.0.1" }, new NuSpecDependency() { Id = "Splat", TargetFramework = "netcoreapp1.0", Version = SplatVersion }, diff --git a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj index 257e27b043..b75e5c10aa 100644 --- a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj +++ b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj @@ -37,6 +37,7 @@ + \ No newline at end of file diff --git a/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs b/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs index b131488109..6aab8e0243 100644 --- a/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs +++ b/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; +using Microsoft.DotNet.PlatformAbstractions; +using Microsoft.Extensions.DependencyModel; namespace Avalonia.Shared.PlatformSupport { @@ -15,33 +17,26 @@ namespace Avalonia.Shared.PlatformSupport static Assembly[] LoadAssemblies() { + var assemblies = new List(); + // Mostly copy-pasted from (MIT): + // https://github.com/StefH/System.AppDomain.Core/blob/0b35e676c2721aa367b96e62eb52c97ee0b43a70/src/System.AppDomain.NetCoreApp/AppDomain.cs - var rv = new List(); - var entry = Assembly.GetEntryAssembly(); - rv.Add(entry); - var queue = new Queue(entry.GetReferencedAssemblies()); - var aset = new HashSet(queue.Select(r => r.ToString())); - - while (queue.Count > 0) + foreach (var assemblyName in + DependencyContext.Default.GetRuntimeAssemblyNames(RuntimeEnvironment.GetRuntimeIdentifier())) { - Assembly asm; try { - asm = Assembly.Load(queue.Dequeue()); - } - catch (Exception e) - { - Debug.Write(e.ToString()); - continue; + var assembly = Assembly.Load(assemblyName); + // just load all types and skip this assembly if one or more types cannot be resolved + assembly.DefinedTypes.ToArray(); + assemblies.Add(assembly); } - rv.Add(asm); - foreach (var r in asm.GetReferencedAssemblies()) + catch (Exception ex) { - if (aset.Add(r.ToString())) - queue.Enqueue(r); + Debug.Write(ex.Message); } } - return rv.Distinct().ToArray(); + return assemblies.ToArray(); } } } From a56ca5f319c4b4b46d0b680f63033c845f898c39 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 18 Mar 2017 19:04:58 +0100 Subject: [PATCH 09/33] Ported IDispatcher from scenegraph branch. --- src/Avalonia.Base/Threading/Dispatcher.cs | 15 ++------- src/Avalonia.Base/Threading/IDispatcher.cs | 39 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 src/Avalonia.Base/Threading/IDispatcher.cs diff --git a/src/Avalonia.Base/Threading/Dispatcher.cs b/src/Avalonia.Base/Threading/Dispatcher.cs index a8ce1b8115..d46b7142f4 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.cs @@ -15,7 +15,7 @@ namespace Avalonia.Threading /// In Avalonia, there is usually only a single in the application - /// the one for the UI thread, retrieved via the property. /// - public class Dispatcher + public class Dispatcher : IDispatcher { private readonly JobRunner _jobRunner; private IPlatformThreadingInterface _platform; @@ -72,22 +72,13 @@ namespace Avalonia.Threading _jobRunner?.RunJobs(); } - /// - /// Invokes a method on the dispatcher thread. - /// - /// The method. - /// The priority with which to invoke the method. - /// A task that can be used to track the method's execution. + /// public Task InvokeTaskAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal) { return _jobRunner?.InvokeAsync(action, priority); } - /// - /// Post action that will be invoked on main thread - /// - /// The method. - /// The priority with which to invoke the method. + /// public void InvokeAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal) { _jobRunner?.Post(action, priority); diff --git a/src/Avalonia.Base/Threading/IDispatcher.cs b/src/Avalonia.Base/Threading/IDispatcher.cs new file mode 100644 index 0000000000..6301015a9a --- /dev/null +++ b/src/Avalonia.Base/Threading/IDispatcher.cs @@ -0,0 +1,39 @@ +using System; +using System.Threading.Tasks; + +namespace Avalonia.Threading +{ + /// + /// Dispatches jobs to a thread. + /// + public interface IDispatcher + { + /// + /// Determines whether the calling thread is the thread associated with this . + /// + /// True if he calling thread is the thread associated with the dispatched, otherwise false. + bool CheckAccess(); + + /// + /// Throws an exception if the calling thread is not the thread associated with this . + /// + void VerifyAccess(); + + /// + /// Invokes a method on the dispatcher thread. + /// + /// The method. + /// The priority with which to invoke the method. + /// A task that can be used to track the method's execution. + void InvokeAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal); + + /// + /// Post action that will be invoked on main thread + /// + /// The method. + /// The priority with which to invoke the method. + // TODO: The naming of this method is confusing: the Async suffix usually means return a task. + // Remove this and rename InvokeTaskAsync as InvokeAsync. See #816. + Task InvokeTaskAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal); + } +} \ No newline at end of file From f8097cc27dc0909542b3736e0dc1724547a4f563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 16:31:09 +0100 Subject: [PATCH 10/33] Added msbuild props for package references --- Avalonia.sln | 37 +++++++++++++++-- build/Android.props | 18 ++++++++ build/JetBrains.Annotations.props | 5 +++ build/JetBrains.dotMemoryUnit.props | 5 +++ build/Magick.NET-Q16-AnyCPU.props | 5 +++ build/Markup.props | 9 ++++ build/Microsoft.CSharp.props | 5 +++ build/Microsoft.Reactive.Testing.props | 5 +++ build/Moq.props | 5 +++ build/NetCore.props | 6 +++ build/Rx.props | 11 +++++ build/Serilog.Sinks.Trace.props | 5 +++ build/Serilog.props | 5 +++ build/SharpDX.props | 8 ++++ build/SkiaSharp.Linux.props | 5 +++ build/SkiaSharp.props | 5 +++ build/Splat.props | 5 +++ build/Sprache.props | 5 +++ build/UnitTests.NetCore.targets | 30 ++++++++++++++ build/XUnit.props | 13 ++++++ build/iOS.props | 18 ++++++++ build/readme.md | 29 +++++++++++++ packages.cake | 6 +-- samples/BindingTest/BindingTest.csproj | 20 ++------- .../ControlCatalog.Android.csproj | 13 +----- .../ControlCatalog.Desktop.csproj | 15 +------ samples/ControlCatalog/ControlCatalog.csproj | 4 +- samples/RenderTest/RenderTest.csproj | 24 ++--------- .../VirtualizationTest.csproj | 20 ++------- .../GtkInteropDemo/GtkInteropDemo.csproj | 7 ---- .../WindowsInteropTest.csproj | 7 ---- .../Avalonia.Android/Avalonia.Android.csproj | 27 +----------- .../Avalonia.AndroidTestApplication.csproj | 36 +++------------- .../Avalonia.Animation.csproj | 8 +--- src/Avalonia.Base/Avalonia.Base.csproj | 10 +---- .../Avalonia.Controls.csproj | 10 +---- .../Avalonia.DesignerSupport.csproj | 10 +---- .../Avalonia.Diagnostics.csproj | 14 +------ .../Avalonia.DotNetCoreRuntime.csproj | 5 +-- .../Avalonia.DotNetFrameworkRuntime.csproj | 12 +----- .../Avalonia.HtmlRenderer.csproj | 5 +-- src/Avalonia.Input/Avalonia.Input.csproj | 8 +--- .../Avalonia.Interactivity.csproj | 8 +--- src/Avalonia.Layout/Avalonia.Layout.csproj | 8 +--- .../Avalonia.Logging.Serilog.csproj | 4 +- .../Avalonia.ReactiveUI.csproj | 14 +------ src/Avalonia.Styling/Avalonia.Styling.csproj | 8 +--- .../Avalonia.Themes.Default.csproj | 8 +--- src/Avalonia.Visuals/Avalonia.Visuals.csproj | 8 +--- src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj | 12 +----- src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj | 5 +-- .../Avalonia.Markup.Xaml.csproj | 19 ++------- .../Avalonia.Markup/Avalonia.Markup.csproj | 10 +---- .../Avalonia.Skia.Android.csproj | 11 +---- .../Avalonia.Skia.Desktop.NetStandard.csproj | 6 +-- .../Avalonia.Skia.Desktop.csproj | 8 +--- .../Avalonia.Skia.iOS.csproj | 4 +- .../Avalonia.Designer.csproj | 13 +----- .../Avalonia.Direct2D1.csproj | 14 +------ .../Avalonia.Win32.NetStandard.csproj | 1 - .../Avalonia.Win32/Avalonia.Win32.csproj | 12 +----- src/iOS/Avalonia.iOS/Avalonia.iOS.csproj | 23 +---------- .../Avalonia.iOSTestApplication.csproj | 23 +---------- .../Avalonia.Base.UnitTests.csproj | 2 +- .../Avalonia.Benchmarks.csproj | 8 ---- .../Avalonia.Controls.UnitTests.csproj | 17 +------- .../Avalonia.DesignerSupport.TestApp.csproj | 7 ---- .../Avalonia.DesignerSupport.Tests.csproj | 16 +------- .../Avalonia.Direct2D1.UnitTests.csproj | 17 +------- .../Avalonia.Input.UnitTests.csproj | 26 ++---------- .../Avalonia.Interactivity.UnitTests.csproj | 24 +---------- .../Avalonia.Layout.UnitTests.csproj | 2 +- .../Avalonia.LeakTests.csproj | 27 ++---------- .../Avalonia.Markup.UnitTests.csproj | 30 +++----------- .../Avalonia.Markup.Xaml.UnitTests.csproj | 27 +++--------- .../Avalonia.Cairo.RenderTests.csproj | 39 ++---------------- .../Avalonia.Direct2D1.RenderTests.csproj | 20 +-------- .../Avalonia.Skia.RenderTests.csproj | 20 +-------- .../Avalonia.Styling.UnitTests.csproj | 26 ++---------- .../Avalonia.UnitTests.csproj | 26 +++--------- .../Avalonia.Visuals.UnitTests.csproj | 22 ++-------- tests/coretests.props | 41 ------------------- 82 files changed, 344 insertions(+), 772 deletions(-) create mode 100644 build/Android.props create mode 100644 build/JetBrains.Annotations.props create mode 100644 build/JetBrains.dotMemoryUnit.props create mode 100644 build/Magick.NET-Q16-AnyCPU.props create mode 100644 build/Markup.props create mode 100644 build/Microsoft.CSharp.props create mode 100644 build/Microsoft.Reactive.Testing.props create mode 100644 build/Moq.props create mode 100644 build/NetCore.props create mode 100644 build/Rx.props create mode 100644 build/Serilog.Sinks.Trace.props create mode 100644 build/Serilog.props create mode 100644 build/SharpDX.props create mode 100644 build/SkiaSharp.Linux.props create mode 100644 build/SkiaSharp.props create mode 100644 build/Splat.props create mode 100644 build/Sprache.props create mode 100644 build/UnitTests.NetCore.targets create mode 100644 build/XUnit.props create mode 100644 build/iOS.props create mode 100644 build/readme.md delete mode 100644 tests/coretests.props diff --git a/Avalonia.sln b/Avalonia.sln index 6f9e81b44a..6f25cac037 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26228.4 +VisualStudioVersion = 15.0.26228.9 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}" EndProject @@ -31,9 +31,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Animation", "src\Avalonia.Animation\Avalonia.Animation.csproj", "{D211E587-D8BC-45B9-95A4-F297C8FA5200}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}" - ProjectSection(SolutionItems) = preProject - tests\coretests.props = tests\coretests.props - EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Styling.UnitTests", "tests\Avalonia.Styling.UnitTests\Avalonia.Styling.UnitTests.csproj", "{47ECDF59-DEF8-4C53-87B1-2098A3429059}" EndProject @@ -160,6 +157,36 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Gtk3", "src\Gtk\Av EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.NetCore", "samples\ControlCatalog.NetCore\ControlCatalog.NetCore.csproj", "{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{74487168-7D91-487E-BF93-055F2251461E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1-27F5-4255-9AFC-04ABFD11683A}" + ProjectSection(SolutionItems) = preProject + build\Android.props = build\Android.props + build\iOS.props = build\iOS.props + build\JetBrains.Annotations.props = build\JetBrains.Annotations.props + build\JetBrains.dotMemoryUnit.props = build\JetBrains.dotMemoryUnit.props + build\Magick.NET-Q16-AnyCPU.props = build\Magick.NET-Q16-AnyCPU.props + build\Markup.props = build\Markup.props + build\Microsoft.CSharp.props = build\Microsoft.CSharp.props + build\Microsoft.Reactive.Testing.props = build\Microsoft.Reactive.Testing.props + build\Moq.props = build\Moq.props + build\NetCore.props = build\NetCore.props + build\Rx.props = build\Rx.props + build\Serilog.props = build\Serilog.props + build\Serilog.Sinks.Trace.props = build\Serilog.Sinks.Trace.props + build\SharpDX.props = build\SharpDX.props + build\SkiaSharp.Linux.props = build\SkiaSharp.Linux.props + build\SkiaSharp.props = build\SkiaSharp.props + build\Splat.props = build\Splat.props + build\Sprache.props = build\Sprache.props + build\XUnit.props = build\XUnit.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{4D6FAF79-58B4-482F-9122-0668C346364C}" + ProjectSection(SolutionItems) = preProject + build\UnitTests.NetCore.targets = build\UnitTests.NetCore.targets + EndProjectSection +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{2f59f3d0-748d-4652-b01e-e0d954756308}*SharedItemsImports = 13 @@ -2534,5 +2561,7 @@ Global {7D2D3083-71DD-4CC9-8907-39A0D86FB322} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E} {BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {B9894058-278A-46B5-B6ED-AD613FCC03B3} {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3} = {9B9E3891-2366-4253-A952-D08BCEB71098} + {F3AC8BC1-27F5-4255-9AFC-04ABFD11683A} = {74487168-7D91-487E-BF93-055F2251461E} + {4D6FAF79-58B4-482F-9122-0668C346364C} = {74487168-7D91-487E-BF93-055F2251461E} EndGlobalSection EndGlobal diff --git a/build/Android.props b/build/Android.props new file mode 100644 index 0000000000..cf7bd08076 --- /dev/null +++ b/build/Android.props @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/build/JetBrains.Annotations.props b/build/JetBrains.Annotations.props new file mode 100644 index 0000000000..7bc12cbd84 --- /dev/null +++ b/build/JetBrains.Annotations.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/JetBrains.dotMemoryUnit.props b/build/JetBrains.dotMemoryUnit.props new file mode 100644 index 0000000000..b4cf4def5b --- /dev/null +++ b/build/JetBrains.dotMemoryUnit.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Magick.NET-Q16-AnyCPU.props b/build/Magick.NET-Q16-AnyCPU.props new file mode 100644 index 0000000000..ec747a17d8 --- /dev/null +++ b/build/Magick.NET-Q16-AnyCPU.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Markup.props b/build/Markup.props new file mode 100644 index 0000000000..36c4cb28d8 --- /dev/null +++ b/build/Markup.props @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/build/Microsoft.CSharp.props b/build/Microsoft.CSharp.props new file mode 100644 index 0000000000..d0fa63bc3e --- /dev/null +++ b/build/Microsoft.CSharp.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Microsoft.Reactive.Testing.props b/build/Microsoft.Reactive.Testing.props new file mode 100644 index 0000000000..5ee6df708e --- /dev/null +++ b/build/Microsoft.Reactive.Testing.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Moq.props b/build/Moq.props new file mode 100644 index 0000000000..c8544b8309 --- /dev/null +++ b/build/Moq.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/NetCore.props b/build/NetCore.props new file mode 100644 index 0000000000..cebb02c7f5 --- /dev/null +++ b/build/NetCore.props @@ -0,0 +1,6 @@ + + + + + + diff --git a/build/Rx.props b/build/Rx.props new file mode 100644 index 0000000000..5d74a6b214 --- /dev/null +++ b/build/Rx.props @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/build/Serilog.Sinks.Trace.props b/build/Serilog.Sinks.Trace.props new file mode 100644 index 0000000000..ef79fd7669 --- /dev/null +++ b/build/Serilog.Sinks.Trace.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Serilog.props b/build/Serilog.props new file mode 100644 index 0000000000..e9bd39f6af --- /dev/null +++ b/build/Serilog.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/SharpDX.props b/build/SharpDX.props new file mode 100644 index 0000000000..e381bc03e6 --- /dev/null +++ b/build/SharpDX.props @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/build/SkiaSharp.Linux.props b/build/SkiaSharp.Linux.props new file mode 100644 index 0000000000..bb6b29cfa6 --- /dev/null +++ b/build/SkiaSharp.Linux.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/SkiaSharp.props b/build/SkiaSharp.props new file mode 100644 index 0000000000..bd6b4ebc53 --- /dev/null +++ b/build/SkiaSharp.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Splat.props b/build/Splat.props new file mode 100644 index 0000000000..bc3367be01 --- /dev/null +++ b/build/Splat.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/Sprache.props b/build/Sprache.props new file mode 100644 index 0000000000..8ea84de163 --- /dev/null +++ b/build/Sprache.props @@ -0,0 +1,5 @@ + + + + + diff --git a/build/UnitTests.NetCore.targets b/build/UnitTests.NetCore.targets new file mode 100644 index 0000000000..bc2595d815 --- /dev/null +++ b/build/UnitTests.NetCore.targets @@ -0,0 +1,30 @@ + + + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + MinimumRecommendedRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + MinimumRecommendedRules.ruleset + + + + + + + \ No newline at end of file diff --git a/build/XUnit.props b/build/XUnit.props new file mode 100644 index 0000000000..58df7e8d3c --- /dev/null +++ b/build/XUnit.props @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/build/iOS.props b/build/iOS.props new file mode 100644 index 0000000000..76e312da41 --- /dev/null +++ b/build/iOS.props @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/build/readme.md b/build/readme.md new file mode 100644 index 0000000000..b28506c531 --- /dev/null +++ b/build/readme.md @@ -0,0 +1,29 @@ +### MSBuild Props + +```XML + + + + + + + + + + + + + + + + + + + +``` + +### MSBuild Targets + +```XML + +``` \ No newline at end of file diff --git a/packages.cake b/packages.cake index 1fffe48003..c3d0eb0bab 100644 --- a/packages.cake +++ b/packages.cake @@ -23,11 +23,11 @@ public class Packages path => path.Replace(System.IO.Path.DirectorySeparatorChar, System.IO.Path.AltDirectorySeparatorChar).ToUpperInvariant()); // Key: Package Id - // Value is Tuple where Item1: Package Version, Item2: The packages.config file path. + // Value is Tuple where Item1: Package Version, Item2: The *.csproj/*.props file path. var packageVersions = new Dictionary>>(); - System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./src")).FullPath, - "*.csproj", SearchOption.AllDirectories).ToList().ForEach(fileName => + System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./build")).FullPath, + "*.props", SearchOption.AllDirectories).ToList().ForEach(fileName => { if (!ignoredSubModulesPaths.Any(i => normalizePath(fileName).Contains(normalizePath(i)))) { diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingTest/BindingTest.csproj index fe5bd3aa1d..1c4e4f8169 100644 --- a/samples/BindingTest/BindingTest.csproj +++ b/samples/BindingTest/BindingTest.csproj @@ -158,21 +158,9 @@ - - - - - 2.1.0 - - - - - + + + + \ No newline at end of file diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj index 2f32a0b5ee..4db67a8b60 100644 --- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj +++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj @@ -156,18 +156,7 @@ ControlCatalog - - - 3.0.0 - - + - \ No newline at end of file diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj index 73f50a18d6..3ca8640d40 100644 --- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj +++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj @@ -141,18 +141,7 @@ - - - - - 2.1.0 - - + + \ No newline at end of file diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj index 4741c8b35d..2a9f8f70de 100644 --- a/samples/ControlCatalog/ControlCatalog.csproj +++ b/samples/ControlCatalog/ControlCatalog.csproj @@ -171,7 +171,5 @@ - - - + \ No newline at end of file diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderTest/RenderTest.csproj index fdebadb444..cf32316086 100644 --- a/samples/RenderTest/RenderTest.csproj +++ b/samples/RenderTest/RenderTest.csproj @@ -179,25 +179,9 @@ - - - - - 2.1.0 - - - - - - - - - + + + + \ No newline at end of file diff --git a/samples/VirtualizationTest/VirtualizationTest.csproj b/samples/VirtualizationTest/VirtualizationTest.csproj index 5065d70737..9b9d8a94c6 100644 --- a/samples/VirtualizationTest/VirtualizationTest.csproj +++ b/samples/VirtualizationTest/VirtualizationTest.csproj @@ -154,21 +154,9 @@ - - - - - 2.1.0 - - - - - + + + + \ No newline at end of file diff --git a/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj b/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj index 9ae6063876..044b96c865 100644 --- a/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj +++ b/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj @@ -150,12 +150,5 @@ - \ No newline at end of file diff --git a/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj b/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj index 9ebe588fd1..c787ab76ee 100644 --- a/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj +++ b/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj @@ -180,12 +180,5 @@ - \ No newline at end of file diff --git a/src/Android/Avalonia.Android/Avalonia.Android.csproj b/src/Android/Avalonia.Android/Avalonia.Android.csproj index f22d592544..69d05a5871 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -132,31 +132,8 @@ - - - - - - - - - - - - - - - - - - - + + $(MSBuildToolsPath)\Roslyn diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj index 156b2b1fe3..cd5e91d42d 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj @@ -153,36 +153,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/src/Avalonia.Animation/Avalonia.Animation.csproj b/src/Avalonia.Animation/Avalonia.Animation.csproj index 27f948b447..f02ec2f31c 100644 --- a/src/Avalonia.Animation/Avalonia.Animation.csproj +++ b/src/Avalonia.Animation/Avalonia.Animation.csproj @@ -33,11 +33,5 @@ - - - - - - - + \ No newline at end of file diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 1bcfd813c8..95be67c98c 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -30,12 +30,6 @@ Properties\SharedAssemblyInfo.cs - - - - - - - - + + \ No newline at end of file diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index 72a78b0738..37f348340c 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -39,12 +39,6 @@ - - - - - - - - + + \ No newline at end of file diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index 3bb74451e7..be0b98b24c 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -42,12 +42,6 @@ Properties\SharedAssemblyInfo.cs - - - - - - - - + + \ No newline at end of file diff --git a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj index 04499c7df3..a060827f27 100644 --- a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj +++ b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj @@ -50,16 +50,6 @@ Designer - - - - - - - - - - - - + + \ No newline at end of file diff --git a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj index b75e5c10aa..9d5436b2b9 100644 --- a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj +++ b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj @@ -35,9 +35,6 @@ - - - - + \ No newline at end of file diff --git a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj index 5c84f88d7e..b475c4b3ff 100644 --- a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj +++ b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj @@ -68,16 +68,6 @@ - - - - - + \ No newline at end of file diff --git a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj index 7cb66d588a..b1fc7a4278 100644 --- a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj +++ b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj @@ -133,8 +133,5 @@ - - - - + \ No newline at end of file diff --git a/src/Avalonia.Input/Avalonia.Input.csproj b/src/Avalonia.Input/Avalonia.Input.csproj index c3b30bb435..e9e74e24fe 100644 --- a/src/Avalonia.Input/Avalonia.Input.csproj +++ b/src/Avalonia.Input/Avalonia.Input.csproj @@ -37,11 +37,5 @@ Properties\SharedAssemblyInfo.cs - - - - - - - + \ No newline at end of file diff --git a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj index 154c8d35d0..ab9ab88a37 100644 --- a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj +++ b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj @@ -36,11 +36,5 @@ Properties\SharedAssemblyInfo.cs - - - - - - - + \ No newline at end of file diff --git a/src/Avalonia.Layout/Avalonia.Layout.csproj b/src/Avalonia.Layout/Avalonia.Layout.csproj index d034004428..45a40d2fd4 100644 --- a/src/Avalonia.Layout/Avalonia.Layout.csproj +++ b/src/Avalonia.Layout/Avalonia.Layout.csproj @@ -35,11 +35,5 @@ Properties\SharedAssemblyInfo.cs - - - - - - - + \ No newline at end of file diff --git a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj b/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj index 7905e5270d..9aa81c19f9 100644 --- a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj +++ b/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj @@ -26,7 +26,5 @@ - - - + \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj index 74a931f8c6..28522d8849 100644 --- a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj +++ b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj @@ -76,18 +76,6 @@ - - - - - - - - - - - - @@ -98,4 +86,6 @@ + + \ No newline at end of file diff --git a/src/Avalonia.Styling/Avalonia.Styling.csproj b/src/Avalonia.Styling/Avalonia.Styling.csproj index bc51b4c843..5965645391 100644 --- a/src/Avalonia.Styling/Avalonia.Styling.csproj +++ b/src/Avalonia.Styling/Avalonia.Styling.csproj @@ -35,11 +35,5 @@ - - - - - - - + \ No newline at end of file diff --git a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj index ddf5857ce1..be1d798e2d 100644 --- a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj +++ b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj @@ -45,11 +45,5 @@ Designer - - - - - - - + \ No newline at end of file diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index 5f879682c2..c820a83c2a 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -34,11 +34,5 @@ Properties\SharedAssemblyInfo.cs - - - - - - - + \ No newline at end of file diff --git a/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj b/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj index 70fd35bbd8..45b4f06c8c 100644 --- a/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj +++ b/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj @@ -104,16 +104,6 @@ - - - - - + \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj index 9a31693ec1..837b83bdd7 100644 --- a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj +++ b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj @@ -97,9 +97,6 @@ Avalonia.Interactivity - - - - + \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj index 3fa460170f..036639ee54 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -284,20 +284,7 @@ - - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj index 38070a3655..831c0384d3 100644 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj +++ b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj @@ -39,12 +39,6 @@ - - - - - - - - + + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj b/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj index 11c6595fce..aab791cd8f 100644 --- a/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj +++ b/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj @@ -85,15 +85,6 @@ - - - - + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj b/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj index df2af71ded..c525d890fa 100644 --- a/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj +++ b/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj @@ -30,10 +30,6 @@ Properties\SharedAssemblyInfo.cs - - - - @@ -43,6 +39,8 @@ + + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj index ad2c35f922..ca1c6508f2 100644 --- a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj +++ b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj @@ -105,12 +105,6 @@ - - - - - - - + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj b/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj index 17f01f377d..6b6604b88c 100644 --- a/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj +++ b/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj @@ -89,8 +89,6 @@ - - - + \ No newline at end of file diff --git a/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj b/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj index e99c4dc5ab..71fb024d89 100644 --- a/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj +++ b/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj @@ -122,17 +122,6 @@ - - - - 10.3.0 - - + \ No newline at end of file diff --git a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj index e7490dd439..b2f65ef45f 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -113,18 +113,6 @@ - - - - - - - + \ No newline at end of file diff --git a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj b/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj index a685afe2f2..2c6efb56e2 100644 --- a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj +++ b/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj @@ -26,7 +26,6 @@ true - diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj index a7ddb3768f..b134f4666e 100644 --- a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj +++ b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj @@ -101,16 +101,6 @@ - - - - - + \ No newline at end of file diff --git a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj index 05fb99e3ef..eb62d76a1a 100644 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj +++ b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj @@ -104,26 +104,7 @@ - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj index b66546c591..e3269fa705 100644 --- a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj +++ b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj @@ -186,26 +186,7 @@ - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj index 6f2007e8b1..824837ffb4 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -2,7 +2,7 @@ net461;netcoreapp1.1 - + diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index 75f2bbde89..1f5ebac203 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -99,16 +99,8 @@ - - \ No newline at end of file diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj index ff72edab11..d25555fcbb 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -2,7 +2,7 @@ net461;netcoreapp1.1 - + @@ -16,21 +16,6 @@ - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj b/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj index 316f7975db..2bf962bfa5 100644 --- a/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj +++ b/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj @@ -147,12 +147,5 @@ - \ No newline at end of file diff --git a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj index 19db3178a7..efca582573 100644 --- a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj +++ b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj @@ -57,20 +57,6 @@ - - - - - - - - - + \ No newline at end of file diff --git a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj index 17657b88ff..035d5b6c3e 100644 --- a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj +++ b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj @@ -91,21 +91,6 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj index df14aeffa7..37a590b1ef 100644 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj @@ -96,28 +96,8 @@ - - - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj index 8d600963e3..ba0277f234 100644 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj +++ b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj @@ -86,27 +86,7 @@ - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj index 40118188dc..38780b2fee 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -3,7 +3,7 @@ net461;netcoreapp1.1 {DB070A10-BF39-4752-8456-86E9D5928478} - + diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index 226da2bcfd..83893b9bcd 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -118,28 +118,9 @@ - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj index 69056175a7..bffa527105 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -104,30 +104,10 @@ - - - - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj index adb2aa7376..714068c496 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -150,27 +150,10 @@ - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj b/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj index e2aafb1464..b6c573c3c9 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj @@ -99,41 +99,8 @@ - - - - 7.0.0.0101 - - - 3.0.0 - - - 3.0.0 - - - 3.0.0 - - - 3.0.0 - - - 3.0.0 - - - 3.0.0 - - - - - - - - + + + \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj b/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj index 29a1dcec0f..14fb35202e 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj @@ -99,23 +99,7 @@ - - - - 7.0.0.0101 - - - - - - - - + + \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj b/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj index 5b0aa4bd11..9b228a89ee 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj @@ -100,23 +100,7 @@ - - - - 7.0.0.0101 - - - - - - - - + + \ No newline at end of file diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj index eb898b29b3..a5335ae15a 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -131,27 +131,9 @@ - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj index e45ecce07e..252268b9ba 100644 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj +++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj @@ -61,27 +61,11 @@ - - - - - - - - - - - - + + + + + - - - \ No newline at end of file diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj index f8ccdd9391..a263307815 100644 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj @@ -113,24 +113,8 @@ - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/tests/coretests.props b/tests/coretests.props deleted file mode 100644 index 590017c025..0000000000 --- a/tests/coretests.props +++ /dev/null @@ -1,41 +0,0 @@ - - - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - MinimumRecommendedRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - - \ No newline at end of file From ad65b6192ea70c918b7620b3cc929bf4b6a32cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 18:49:15 +0100 Subject: [PATCH 11/33] Moved inports to test projects --- build/UnitTests.NetCore.targets | 4 ---- tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj | 4 ++++ .../Avalonia.Controls.UnitTests.csproj | 4 ++++ .../Avalonia.Layout.UnitTests.csproj | 4 ++++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/build/UnitTests.NetCore.targets b/build/UnitTests.NetCore.targets index bc2595d815..522cd1f1ee 100644 --- a/build/UnitTests.NetCore.targets +++ b/build/UnitTests.NetCore.targets @@ -22,9 +22,5 @@ 4 MinimumRecommendedRules.ruleset - - - - \ No newline at end of file diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj index 824837ffb4..d55dc8d544 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -3,6 +3,10 @@ net461;netcoreapp1.1 + + + + diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj index d25555fcbb..f8235f7d68 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -3,6 +3,10 @@ net461;netcoreapp1.1 + + + + diff --git a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj index 38780b2fee..d212800c73 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -4,6 +4,10 @@ {DB070A10-BF39-4752-8456-86E9D5928478} + + + + From 8601a3e71e4352b5cd47f40c783d55360b72b6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 18:50:12 +0100 Subject: [PATCH 12/33] Converted Avalonia.Input.UnitTests to a new project system --- build.cake | 1 + .../Avalonia.Input.UnitTests.csproj | 111 +++--------------- 2 files changed, 17 insertions(+), 95 deletions(-) diff --git a/build.cake b/build.cake index d803e89c9a..6766ba69bd 100644 --- a/build.cake +++ b/build.cake @@ -180,6 +180,7 @@ Task("Run-Net-Core-Unit-Tests") .Does(() => { RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters, false); RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); }); diff --git a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj index 37a590b1ef..d35542b51f 100644 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj @@ -1,103 +1,24 @@ - - - + - Debug - AnyCPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0} - Library - Properties - Avalonia.Input.UnitTests - Avalonia.Input.UnitTests - v4.6.1 - 512 - - + net461;netcoreapp1.1 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Avalonia.Input.UnitTests.XML - CS1591 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - + + + + + - - {D211E587-D8BC-45B9-95A4-F297C8FA5200} - Avalonia.Animation - - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Avalonia.Base - - - {D2221C82-4A25-4583-9B43-D791E3F6820C} - Avalonia.Controls - - - {62024B2D-53EB-4638-B26B-85EEAA54866E} - Avalonia.Input - - - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B} - Avalonia.Interactivity - - - {42472427-4774-4C81-8AFF-9F27B8E31721} - Avalonia.Layout - - - {EB582467-6ABB-43A1-B052-E981BA910E3A} - Avalonia.Visuals - - - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F} - Avalonia.Styling - - - {88060192-33D5-4932-B0F9-8BD2763E857D} - Avalonia.UnitTests - + + + + + + + + + - - - - - \ No newline at end of file From 0c9df8878f7abaa6b34bd9bd3bde0af7862300e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 18:55:08 +0100 Subject: [PATCH 13/33] Converted Avalonia.Interactivity.UnitTests to a new project system --- build.cake | 1 + .../Avalonia.Interactivity.UnitTests.csproj | 98 +++---------------- 2 files changed, 15 insertions(+), 84 deletions(-) diff --git a/build.cake b/build.cake index 6766ba69bd..53379a2cbf 100644 --- a/build.cake +++ b/build.cake @@ -181,6 +181,7 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters, false); RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); }); diff --git a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj index ba0277f234..8f9607fe67 100644 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj +++ b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj @@ -1,92 +1,22 @@ - - - + - Debug - AnyCPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8} - Library - Properties - Avalonia.Interactivity.UnitTests - Avalonia.Interactivity.UnitTests - v4.6.1 - 512 - - + net461;netcoreapp1.1 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Avalonia.Interactivity.UnitTests.xml - CS1591 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - + + + + - - {D211E587-D8BC-45B9-95A4-F297C8FA5200} - Avalonia.Animation - - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Avalonia.Base - - - {d2221c82-4a25-4583-9b43-d791e3f6820c} - Avalonia.Controls - - - {62024b2d-53eb-4638-b26b-85eeaa54866e} - Avalonia.Input - - - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B} - Avalonia.Interactivity - - - {42472427-4774-4C81-8AFF-9F27B8E31721} - Avalonia.Layout - - - {EB582467-6ABB-43A1-B052-E981BA910E3A} - Avalonia.Visuals - - - {f1baa01a-f176-4c6a-b39d-5b40bb1b148f} - Avalonia.Styling - + + + + + + + + - - - - \ No newline at end of file From 554ac50c714a6291fa6f425355a2065d2197a761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:00:45 +0100 Subject: [PATCH 14/33] Converted Avalonia.Markup.UnitTests to a new project system --- build.cake | 1 + .../Avalonia.Markup.UnitTests.csproj | 123 +++--------------- 2 files changed, 19 insertions(+), 105 deletions(-) diff --git a/build.cake b/build.cake index 53379a2cbf..ad831824f2 100644 --- a/build.cake +++ b/build.cake @@ -183,6 +183,7 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); }); Task("Run-Unit-Tests") diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj index bffa527105..b7c4811495 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -1,113 +1,26 @@ - - - + - Debug - AnyCPU - {8EF392D5-1416-45AA-9956-7CBBC3229E8A} - Library - Properties - Avalonia.Markup.UnitTests - Avalonia.Markup.UnitTests - v4.6.1 - 512 - - - + net461;netcoreapp1.1 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - {6417e941-21bc-467b-a771-0de389353ce6} - Avalonia.Markup - - - {d211e587-d8bc-45b9-95a4-f297c8fa5200} - Avalonia.Animation - - - {b09b78d8-9b26-48b0-9149-d64a2f120f3f} - Avalonia.Base - - - {d2221c82-4a25-4583-9b43-d791e3f6820c} - Avalonia.Controls - - - {62024b2d-53eb-4638-b26b-85eeaa54866e} - Avalonia.Input - - - {6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b} - Avalonia.Interactivity - - - {42472427-4774-4c81-8aff-9f27b8e31721} - Avalonia.Layout - - - {eb582467-6abb-43a1-b052-e981ba910e3a} - Avalonia.Visuals - - - {f1baa01a-f176-4c6a-b39d-5b40bb1b148f} - Avalonia.Styling - - - {88060192-33d5-4932-b0f9-8bd2763e857d} - Avalonia.UnitTests - + + + + + + + + + + - - - - - - - \ No newline at end of file From 3495017a0729a0af827c03a2eebf4d83a4c0045c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:00:56 +0100 Subject: [PATCH 15/33] Removed project guid --- tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj index d212800c73..af33c80352 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -1,7 +1,6 @@  net461;netcoreapp1.1 - {DB070A10-BF39-4752-8456-86E9D5928478} From 19f0f1d4071bc664c8989a4a660498d543133302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:01:05 +0100 Subject: [PATCH 16/33] Removed unused files --- tests/Avalonia.Input.UnitTests/app.config | 7 ------- tests/Avalonia.Markup.UnitTests/app.config | 11 ----------- 2 files changed, 18 deletions(-) delete mode 100644 tests/Avalonia.Input.UnitTests/app.config delete mode 100644 tests/Avalonia.Markup.UnitTests/app.config diff --git a/tests/Avalonia.Input.UnitTests/app.config b/tests/Avalonia.Input.UnitTests/app.config deleted file mode 100644 index 58c01219df..0000000000 --- a/tests/Avalonia.Input.UnitTests/app.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.Markup.UnitTests/app.config b/tests/Avalonia.Markup.UnitTests/app.config deleted file mode 100644 index 654f911514..0000000000 --- a/tests/Avalonia.Markup.UnitTests/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - From 86a54ec60d5c55af525becb40aa708d7a1df8283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:07:25 +0100 Subject: [PATCH 17/33] Converted Avalonia.Markup.Xaml.UnitTests to a new project system --- build.cake | 1 + .../Avalonia.Markup.Xaml.UnitTests.csproj | 167 +++--------------- .../Avalonia.Markup.Xaml.UnitTests/app.config | 11 -- 3 files changed, 25 insertions(+), 154 deletions(-) delete mode 100644 tests/Avalonia.Markup.Xaml.UnitTests/app.config diff --git a/build.cake b/build.cake index ad831824f2..0640c45830 100644 --- a/build.cake +++ b/build.cake @@ -184,6 +184,7 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); }); Task("Run-Unit-Tests") diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj index 714068c496..27b9e2cebd 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -1,124 +1,28 @@ - - - + - Debug - AnyCPU - {99135EAB-653D-47E4-A378-C96E1278CA44} - Library - Properties - Avalonia.Markup.Xaml.UnitTests - Avalonia.Markup.Xaml.UnitTests - v4.6.1 - 512 - + net461;netcoreapp1.1 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - {3E53A01A-B331-47F3-B828-4A5717E77A24} - Avalonia.Markup.Xaml - - - {6417e941-21bc-467b-a771-0de389353ce6} - Avalonia.Markup - - - {D211E587-D8BC-45B9-95A4-F297C8FA5200} - Avalonia.Animation - - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Avalonia.Base - - - {D2221C82-4A25-4583-9B43-D791E3F6820C} - Avalonia.Controls - - - {62024B2D-53EB-4638-B26B-85EEAA54866E} - Avalonia.Input - - - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B} - Avalonia.Interactivity - + + + + + + + - {42472427-4774-4C81-8AFF-9F27B8E31721} - Avalonia.Layout - - - {6417B24E-49C2-4985-8DB2-3AB9D898EC91} - Avalonia.ReactiveUI - - - {EB582467-6ABB-43A1-B052-E981BA910E3A} - Avalonia.Visuals - - - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F} - Avalonia.Styling - - - {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F} - Avalonia.Themes.Default - - - {88060192-33d5-4932-b0f9-8bd2763e857d} - Avalonia.UnitTests - - - - - - - + + + + + @@ -130,30 +34,7 @@ Designer - - - - - False - - - False - - - False - - - False - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/app.config b/tests/Avalonia.Markup.Xaml.UnitTests/app.config deleted file mode 100644 index fa66e8c206..0000000000 --- a/tests/Avalonia.Markup.Xaml.UnitTests/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file From 6b0a5c04496ae5dd0da72c0136a0123f108d3490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:10:14 +0100 Subject: [PATCH 18/33] Converted Avalonia.Styling.UnitTests to a new project system --- build.cake | 1 + .../Avalonia.Styling.UnitTests.csproj | 129 +----------------- tests/Avalonia.Styling.UnitTests/app.config | 11 -- 3 files changed, 8 insertions(+), 133 deletions(-) delete mode 100644 tests/Avalonia.Styling.UnitTests/app.config diff --git a/build.cake b/build.cake index 0640c45830..ee3ac26535 100644 --- a/build.cake +++ b/build.cake @@ -185,6 +185,7 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Styling.UnitTests", parameters, true); }); Task("Run-Unit-Tests") diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj index a5335ae15a..3aaa8f433c 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -1,139 +1,24 @@ - - + - Debug - AnyCPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059} - Library - Properties - Avalonia.Styling.UnitTests - Avalonia.Styling.UnitTests - v4.6.1 - 512 - + net461;netcoreapp1.1 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\Avalonia.Styling.UnitTests.XML - CS1591 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - {D211E587-D8BC-45B9-95A4-F297C8FA5200} - Avalonia.Animation - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Avalonia.Base - - {D2221C82-4A25-4583-9B43-D791E3F6820C} - Avalonia.Controls - - {62024B2D-53EB-4638-B26B-85EEAA54866E} - Avalonia.Input - - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B} - Avalonia.Interactivity - - {42472427-4774-4C81-8AFF-9F27B8E31721} - Avalonia.Layout - - {EB582467-6ABB-43A1-B052-E981BA910E3A} - Avalonia.Visuals - - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F} - Avalonia.Styling - - {88060192-33d5-4932-b0f9-8bd2763e857d} - Avalonia.UnitTests - - - - - - - - - False - - - False - - - False - - - False - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.Styling.UnitTests/app.config b/tests/Avalonia.Styling.UnitTests/app.config deleted file mode 100644 index fa66e8c206..0000000000 --- a/tests/Avalonia.Styling.UnitTests/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file From 105580de352634d998aa8fc0ed888f1af24e8695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:15:34 +0100 Subject: [PATCH 19/33] Fixed xml tag --- .../Avalonia.Markup.Xaml.UnitTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj index 27b9e2cebd..0cbdc142eb 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -17,7 +17,7 @@ - + From 3b3266cc7c25d8f7cd90fdde48caeed7de608189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:20:02 +0100 Subject: [PATCH 20/33] Converted Avalonia.Visuals.UnitTests to a new project system --- build.cake | 1 + .../Avalonia.Visuals.UnitTests.csproj | 110 ++---------------- 2 files changed, 8 insertions(+), 103 deletions(-) diff --git a/build.cake b/build.cake index ee3ac26535..974e171238 100644 --- a/build.cake +++ b/build.cake @@ -186,6 +186,7 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Styling.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Visuals.UnitTests", parameters, true); }); Task("Run-Unit-Tests") diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj index a263307815..3aaa8f433c 100644 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj @@ -1,120 +1,24 @@ - - + - Debug - AnyCPU - {76716382-3159-460E-BDA6-C5715CF606D7} - Library - Properties - Avalonia.Visuals.UnitTests - Avalonia.Visuals.UnitTests - v4.6.1 - 512 - + net461;netcoreapp1.1 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - {D211E587-D8BC-45B9-95A4-F297C8FA5200} - Avalonia.Animation - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Avalonia.Base - - {D2221C82-4A25-4583-9B43-D791E3F6820C} - Avalonia.Controls - - {62024B2D-53EB-4638-B26B-85EEAA54866E} - Avalonia.Input - - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B} - Avalonia.Interactivity - - {42472427-4774-4C81-8AFF-9F27B8E31721} - Avalonia.Layout - - {EB582467-6ABB-43A1-B052-E981BA910E3A} - Avalonia.Visuals - - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F} - Avalonia.Styling - - {88060192-33D5-4932-B0F9-8BD2763E857D} - Avalonia.UnitTests - - - - - - False - - - False - - - False - - - False - - - - - - - - - - \ No newline at end of file From e9d108a506bf7f82d029a5f03fffbfb9745867ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:24:03 +0100 Subject: [PATCH 21/33] Fixed xml tags --- .../Avalonia.Styling.UnitTests.csproj | 18 +++++++++--------- .../Avalonia.Visuals.UnitTests.csproj | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj index 3aaa8f433c..d35542b51f 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -8,15 +8,15 @@ - - - - - - - - - + + + + + + + + + diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj index 3aaa8f433c..d35542b51f 100644 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj @@ -8,15 +8,15 @@ - - - - - - - - - + + + + + + + + + From 29045f85c570cce17a94fa17f8b4b3c6760c385a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:32:37 +0100 Subject: [PATCH 22/33] Disable for now markup unit tests for dotnet --- build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index 974e171238..a36a3bb536 100644 --- a/build.cake +++ b/build.cake @@ -183,8 +183,8 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); - RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); - RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); + //RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); + //RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Styling.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Visuals.UnitTests", parameters, true); }); From c317191148d33520778ac7189b53e9588cd2b09b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 19:42:11 +0100 Subject: [PATCH 23/33] Added System.Threading.Thread package reference needed for Markup tests --- build/UnitTests.NetCore.targets | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build/UnitTests.NetCore.targets b/build/UnitTests.NetCore.targets index 522cd1f1ee..a8886fe028 100644 --- a/build/UnitTests.NetCore.targets +++ b/build/UnitTests.NetCore.targets @@ -22,5 +22,8 @@ 4 MinimumRecommendedRules.ruleset + + + \ No newline at end of file From 4e719262c47f9680f599630723814f510d8ddf30 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 19 Mar 2017 20:03:54 +0100 Subject: [PATCH 24/33] Make WindowBase.IsVisible return correct value. `WindowBase.IsVisible` now tracks the visibility of the window. Still needs to call `Show` and `Hide` when changed. --- src/Avalonia.Controls/Primitives/PopupRoot.cs | 32 +------ src/Avalonia.Controls/TopLevel.cs | 21 +++-- src/Avalonia.Controls/Window.cs | 25 +++--- src/Avalonia.Controls/WindowBase.cs | 44 +++++++++- .../TopLevelTests.cs | 3 +- .../WindowBaseTests.cs | 64 +++++++++++++- .../WindowTests.cs | 86 +++++++++++++++++++ .../FullLayoutTests.cs | 2 + tests/Avalonia.LeakTests/ControlTests.cs | 14 +++ .../MockWindowingPlatform.cs | 2 +- tests/Avalonia.UnitTests/TestServices.cs | 3 + 11 files changed, 237 insertions(+), 59 deletions(-) diff --git a/src/Avalonia.Controls/Primitives/PopupRoot.cs b/src/Avalonia.Controls/Primitives/PopupRoot.cs index 5e5177b29d..86c1b47521 100644 --- a/src/Avalonia.Controls/Primitives/PopupRoot.cs +++ b/src/Avalonia.Controls/Primitives/PopupRoot.cs @@ -70,32 +70,12 @@ namespace Avalonia.Controls.Primitives this.PlatformImpl.Dispose(); } - /// - /// Hides the popup. - /// - public void Hide() - { - PlatformImpl.Hide(); - IsVisible = false; - } - - /// - /// Shows the popup. - /// - public void Show() - { - EnsureInitialized(); - PlatformImpl.Show(); - LayoutManager.Instance.ExecuteInitialLayoutPass(this); - IsVisible = true; - } - /// protected override void OnTemplateApplied(TemplateAppliedEventArgs e) { base.OnTemplateApplied(e); - if (Parent.TemplatedParent != null) + if (Parent?.TemplatedParent != null) { if (_presenterSubscription != null) { @@ -109,16 +89,6 @@ namespace Avalonia.Controls.Primitives } } - private void EnsureInitialized() - { - if (!this.IsInitialized) - { - var init = (ISupportInitialize)this; - init.BeginInit(); - init.EndInit(); - } - } - private void SetTemplatedParentAndApplyChildTemplates(IControl control) { var templatedParent = Parent.TemplatedParent; diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 4de0256a7d..eaa69b4d4b 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -208,6 +208,16 @@ namespace Avalonia.Controls return PlatformImpl.PointToScreen(p); } + /// + /// Handles a closed notification from . + /// + protected virtual void HandleClosed() + { + Closed?.Invoke(this, EventArgs.Empty); + Renderer?.Dispose(); + Renderer = null; + _applicationLifecycle.OnExit -= OnApplicationExiting; + } /// /// Handles a resize notification from . @@ -267,17 +277,6 @@ namespace Avalonia.Controls return result; } - /// - /// Handles a closed notification from . - /// - private void HandleClosed() - { - Closed?.Invoke(this, EventArgs.Empty); - Renderer?.Dispose(); - Renderer = null; - _applicationLifecycle.OnExit -= OnApplicationExiting; - } - private void OnApplicationExiting(object sender, EventArgs args) { HandleApplicationExiting(); diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index e66b1beb1e..d7a7a9f0eb 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -190,6 +190,7 @@ namespace Avalonia.Controls { s_windows.Remove(this); PlatformImpl.Dispose(); + IsVisible = false; } protected override void HandleApplicationExiting() @@ -216,22 +217,25 @@ namespace Avalonia.Controls /// /// Hides the window but does not close it. /// - public void Hide() + public override void Hide() { using (BeginAutoSizing()) { PlatformImpl.Hide(); } + + IsVisible = false; } /// /// Shows the window. /// - public void Show() + public override void Show() { s_windows.Add(this); EnsureInitialized(); + IsVisible = true; LayoutManager.Instance.ExecuteInitialLayoutPass(this); using (BeginAutoSizing()) @@ -265,6 +269,7 @@ namespace Avalonia.Controls s_windows.Add(this); EnsureInitialized(); + IsVisible = true; LayoutManager.Instance.ExecuteInitialLayoutPass(this); using (BeginAutoSizing()) @@ -344,6 +349,12 @@ namespace Avalonia.Controls return size; } + protected override void HandleClosed() + { + IsVisible = false; + base.HandleClosed(); + } + /// protected override void HandleResized(Size clientSize) { @@ -354,16 +365,6 @@ namespace Avalonia.Controls base.HandleResized(clientSize); } - - private void EnsureInitialized() - { - if (!this.IsInitialized) - { - var init = (ISupportInitialize)this; - init.BeginInit(); - init.EndInit(); - } - } } } diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index ac6eea8641..4973691716 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -30,6 +30,11 @@ namespace Avalonia.Controls private bool _isActive; + static WindowBase() + { + IsVisibleProperty.OverrideDefaultValue(false); + } + public WindowBase(IWindowBaseImpl impl) : this(impl, AvaloniaLocator.Current) { } @@ -59,7 +64,6 @@ namespace Avalonia.Controls public new IWindowBaseImpl PlatformImpl => (IWindowBaseImpl) base.PlatformImpl; - /// /// Gets a value that indicates whether the window is active. /// @@ -95,6 +99,25 @@ namespace Avalonia.Controls PlatformImpl.Activate(); } + /// + /// Hides the popup. + /// + public virtual void Hide() + { + PlatformImpl.Hide(); + IsVisible = false; + } + + /// + /// Shows the popup. + /// + public virtual void Show() + { + EnsureInitialized(); + IsVisible = true; + LayoutManager.Instance.ExecuteInitialLayoutPass(this); + PlatformImpl.Show(); + } /// /// Begins an auto-resize operation. @@ -126,6 +149,25 @@ namespace Avalonia.Controls return base.ArrangeOverride(PlatformImpl.ClientSize); } + /// + /// Ensures that the window is initialized. + /// + protected void EnsureInitialized() + { + if (!this.IsInitialized) + { + var init = (ISupportInitialize)this; + init.BeginInit(); + init.EndInit(); + } + } + + protected override void HandleClosed() + { + IsVisible = false; + base.HandleClosed(); + } + /// /// Handles a resize notification from . /// diff --git a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs index 8ca4ca0fbc..5cd3c57e2e 100644 --- a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs @@ -89,6 +89,7 @@ namespace Avalonia.Controls.UnitTests var target = new TestTopLevel(impl.Object) { + IsVisible = true, Template = CreateTemplate(), Content = new TextBlock { @@ -103,8 +104,6 @@ namespace Avalonia.Controls.UnitTests } } - - [Fact] public void Width_And_Height_Should_Not_Be_Set_After_Layout_Pass() { diff --git a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs index 43dbcdc610..f565d640b6 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs @@ -34,7 +34,8 @@ namespace Avalonia.Controls.UnitTests { Width = 321, Height = 432, - } + }, + IsVisible = true, }; LayoutManager.Instance.ExecuteInitialLayoutPass(target); @@ -95,6 +96,62 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void IsVisible_Should_Initially_Be_False() + { + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) + { + var target = new TestWindowBase(); + + Assert.False(target.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_True_After_Show() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var target = new TestWindowBase(); + + target.Show(); + + Assert.True(target.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_False_Atfer_Hide() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var target = new TestWindowBase(); + + target.Show(); + target.Hide(); + + Assert.False(target.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_False_Atfer_Impl_Signals_Close() + { + var windowImpl = new Mock(); + windowImpl.Setup(x => x.Scaling).Returns(1); + windowImpl.SetupProperty(x => x.Closed); + + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var target = new TestWindowBase(windowImpl.Object); + + target.Show(); + windowImpl.Object.Closed(); + + Assert.False(target.IsVisible); + } + } + private FuncControlTemplate CreateTemplate() { return new FuncControlTemplate(x => @@ -109,6 +166,11 @@ namespace Avalonia.Controls.UnitTests { public bool IsClosed { get; private set; } + public TestWindowBase() + : base(Mock.Of()) + { + } + public TestWindowBase(IWindowBaseImpl impl) : base(impl) { diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs index 7b5e3197df..96afecc966 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs @@ -28,5 +28,91 @@ namespace Avalonia.Controls.UnitTests windowImpl.Verify(x => x.SetTitle("Hello World")); } } + + [Fact] + public void IsVisible_Should_Initially_Be_False() + { + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) + { + var window = new Window(); + + Assert.False(window.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_True_After_Show() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(); + + window.Show(); + + Assert.True(window.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_True_After_ShowDialog() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(); + + var task = window.ShowDialog(); + + Assert.True(window.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_False_Atfer_Hide() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(); + + window.Show(); + window.Hide(); + + Assert.False(window.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_False_Atfer_Close() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(); + + window.Show(); + window.Close(); + + Assert.False(window.IsVisible); + } + } + + [Fact] + public void IsVisible_Should_Be_False_Atfer_Impl_Signals_Close() + { + var windowImpl = new Mock(); + windowImpl.SetupProperty(x => x.Closed); + windowImpl.Setup(x => x.Scaling).Returns(1); + + var services = TestServices.StyledWindow.With( + windowingPlatform: new MockWindowingPlatform(() => windowImpl.Object)); + + using (UnitTestApplication.Start(services)) + { + var window = new Window(); + + window.Show(); + windowImpl.Object.Closed(); + + Assert.False(window.IsVisible); + } + } } } diff --git a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs b/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs index 74a1fbc735..d996f881d2 100644 --- a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs +++ b/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs @@ -55,6 +55,7 @@ namespace Avalonia.Layout.UnitTests } }; + window.Show(); LayoutManager.Instance.ExecuteInitialLayoutPass(window); Assert.Equal(new Size(400, 400), border.Bounds.Size); @@ -96,6 +97,7 @@ namespace Avalonia.Layout.UnitTests } }; + window.Show(); LayoutManager.Instance.ExecuteInitialLayoutPass(window); Assert.Equal(new Size(800, 600), window.Bounds.Size); diff --git a/tests/Avalonia.LeakTests/ControlTests.cs b/tests/Avalonia.LeakTests/ControlTests.cs index 23670257ff..1aaba9cf6b 100644 --- a/tests/Avalonia.LeakTests/ControlTests.cs +++ b/tests/Avalonia.LeakTests/ControlTests.cs @@ -42,6 +42,8 @@ namespace Avalonia.LeakTests Content = new Canvas() }; + window.Show(); + // Do a layout and make sure that Canvas gets added to visual tree. LayoutManager.Instance.ExecuteInitialLayoutPass(window); Assert.IsType(window.Presenter.Child); @@ -77,6 +79,8 @@ namespace Avalonia.LeakTests } }; + window.Show(); + // Do a layout and make sure that Canvas gets added to visual tree. LayoutManager.Instance.ExecuteInitialLayoutPass(window); Assert.IsType(window.Find("foo")); @@ -113,6 +117,8 @@ namespace Avalonia.LeakTests } }; + window.Show(); + // Do a layout and make sure that ScrollViewer gets added to visual tree and its // template applied. LayoutManager.Instance.ExecuteInitialLayoutPass(window); @@ -149,6 +155,8 @@ namespace Avalonia.LeakTests Content = new TextBox() }; + window.Show(); + // Do a layout and make sure that TextBox gets added to visual tree and its // template applied. LayoutManager.Instance.ExecuteInitialLayoutPass(window); @@ -192,6 +200,8 @@ namespace Avalonia.LeakTests var textBox = (TextBox)window.Content; textBox.Bind(TextBox.TextProperty, binding); + window.Show(); + // Do a layout and make sure that TextBox gets added to visual tree and its // Text property set. LayoutManager.Instance.ExecuteInitialLayoutPass(window); @@ -229,6 +239,8 @@ namespace Avalonia.LeakTests Content = textBox = new TextBox() }; + window.Show(); + // Do a layout and make sure that TextBox gets added to visual tree and its // template applied. LayoutManager.Instance.ExecuteInitialLayoutPass(window); @@ -282,6 +294,8 @@ namespace Avalonia.LeakTests } }; + window.Show(); + // Do a layout and make sure that TreeViewItems get realized. LayoutManager.Instance.ExecuteInitialLayoutPass(window); Assert.Equal(1, target.ItemContainerGenerator.Containers.Count()); diff --git a/tests/Avalonia.UnitTests/MockWindowingPlatform.cs b/tests/Avalonia.UnitTests/MockWindowingPlatform.cs index 8f75ec8efc..36297bf58b 100644 --- a/tests/Avalonia.UnitTests/MockWindowingPlatform.cs +++ b/tests/Avalonia.UnitTests/MockWindowingPlatform.cs @@ -25,6 +25,6 @@ namespace Avalonia.UnitTests throw new NotImplementedException(); } - public IPopupImpl CreatePopup() => _popupImpl?.Invoke() ?? Mock.Of(); + public IPopupImpl CreatePopup() => _popupImpl?.Invoke() ?? Mock.Of(x => x.Scaling == 1); } } \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/TestServices.cs b/tests/Avalonia.UnitTests/TestServices.cs index 7b3be3421d..3efbd6c9be 100644 --- a/tests/Avalonia.UnitTests/TestServices.cs +++ b/tests/Avalonia.UnitTests/TestServices.cs @@ -43,6 +43,9 @@ namespace Avalonia.UnitTests public static readonly TestServices MockThreadingInterface = new TestServices( threadingInterface: Mock.Of(x => x.CurrentThreadIsLoopThread == true)); + public static readonly TestServices MockWindowingPlatform = new TestServices( + windowingPlatform: new MockWindowingPlatform()); + public static readonly TestServices RealFocus = new TestServices( focusManager: new FocusManager(), keyboardDevice: () => new KeyboardDevice(), From fda6a892fbacdebeb7c7466c1f4633990fb5d984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 20:12:45 +0100 Subject: [PATCH 25/33] Removed unused cs file File was not included in old csproj project --- .../Data/BindingTests_Validation.cs | 126 ------------------ 1 file changed, 126 deletions(-) delete mode 100644 tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Validation.cs diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Validation.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Validation.cs deleted file mode 100644 index 8759cb42c5..0000000000 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Validation.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Avalonia.Controls; -using Avalonia.Data; -using Avalonia.Markup.Xaml.Data; -using Avalonia.UnitTests; -using Xunit; - -namespace Avalonia.Markup.Xaml.UnitTests.Data -{ - public class BindingTests_Validation - { - [Fact] - public void Non_Validated_Property_Does_Not_Receive_BindingNotifications() - { - var source = new ValidationTestModel { MustBePositive = 5 }; - var target = new TestControl - { - DataContext = source, - [!TestControl.NonValidatedProperty] = new Binding(nameof(source.MustBePositive)), - }; - - Assert.Empty(target.Notifications); - } - - [Fact] - public void Validated_Direct_Property_Receives_BindingNotifications() - { - var source = new ValidationTestModel { MustBePositive = 5 }; - var target = new TestControl - { - DataContext = source, - }; - - target.Bind( - TestControl.ValidatedDirectProperty, - new Binding(nameof(source.MustBePositive), BindingMode.TwoWay)); - - target.ValidatedDirect = 6; - target.ValidatedDirect = -1; - target.ValidatedDirect = 7; - - Assert.Equal( - new[] - { - new BindingNotification(5), - new BindingNotification(6), - new BindingNotification(new ArgumentOutOfRangeException("value"), BindingErrorType.DataValidationError), - new BindingNotification(7), - }, - target.Notifications.AsEnumerable()); - } - - private class TestControl : Control - { - public static readonly StyledProperty NonValidatedProperty = - AvaloniaProperty.Register( - nameof(Validated), - enableDataValidation: false); - - public static readonly StyledProperty ValidatedProperty = - AvaloniaProperty.Register( - nameof(Validated), - enableDataValidation: true); - - public static readonly DirectProperty ValidatedDirectProperty = - AvaloniaProperty.RegisterDirect( - nameof(Validated), - o => o.ValidatedDirect, - (o, v) => o.ValidatedDirect = v, - enableDataValidation: true); - - private int _direct; - - public int NonValidated - { - get { return GetValue(NonValidatedProperty); } - set { SetValue(NonValidatedProperty, value); } - } - - public int Validated - { - get { return GetValue(ValidatedProperty); } - set { SetValue(ValidatedProperty, value); } - } - - public int ValidatedDirect - { - get { return _direct; } - set { SetAndRaise(ValidatedDirectProperty, ref _direct, value); } - } - - public IList Notifications { get; } = new List(); - - protected override void BindingNotificationReceived(AvaloniaProperty property, BindingNotification notification) - { - Notifications.Add(notification); - } - } - - private class ValidationTestModel : NotifyingBase - { - private int _mustBePositive; - - public int MustBePositive - { - get { return _mustBePositive; } - set - { - if (value <= 0) - { - throw new ArgumentOutOfRangeException(nameof(value)); - } - - if (_mustBePositive != value) - { - _mustBePositive = value; - RaisePropertyChanged(); - } - } - } - } - } -} From e9968a760693e48ed30ed5ab5904265f12913560 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 19 Mar 2017 20:14:29 +0100 Subject: [PATCH 26/33] Make WindowBase.IsVisible show/hide window. --- src/Avalonia.Controls/WindowBase.cs | 60 ++++++++++++++++--- .../WindowBaseTests.cs | 31 ++++++++++ 2 files changed, 83 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index 4973691716..18cc9a3419 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -29,10 +29,12 @@ namespace Avalonia.Controls AvaloniaProperty.RegisterDirect(nameof(IsActive), o => o.IsActive); private bool _isActive; + private bool _ignoreVisibilityChange; static WindowBase() { IsVisibleProperty.OverrideDefaultValue(false); + IsVisibleProperty.Changed.AddClassHandler(x => x.IsVisibleChanged); } public WindowBase(IWindowBaseImpl impl) : this(impl, AvaloniaLocator.Current) @@ -104,8 +106,17 @@ namespace Avalonia.Controls /// public virtual void Hide() { - PlatformImpl.Hide(); - IsVisible = false; + _ignoreVisibilityChange = true; + + try + { + PlatformImpl.Hide(); + IsVisible = false; + } + finally + { + _ignoreVisibilityChange = false; + } } /// @@ -113,10 +124,19 @@ namespace Avalonia.Controls /// public virtual void Show() { - EnsureInitialized(); - IsVisible = true; - LayoutManager.Instance.ExecuteInitialLayoutPass(this); - PlatformImpl.Show(); + _ignoreVisibilityChange = true; + + try + { + EnsureInitialized(); + IsVisible = true; + LayoutManager.Instance.ExecuteInitialLayoutPass(this); + PlatformImpl.Show(); + } + finally + { + _ignoreVisibilityChange = false; + } } /// @@ -164,8 +184,17 @@ namespace Avalonia.Controls protected override void HandleClosed() { - IsVisible = false; - base.HandleClosed(); + _ignoreVisibilityChange = true; + + try + { + IsVisible = false; + base.HandleClosed(); + } + finally + { + _ignoreVisibilityChange = false; + } } /// @@ -222,6 +251,21 @@ namespace Avalonia.Controls Deactivated?.Invoke(this, EventArgs.Empty); } + private void IsVisibleChanged(AvaloniaPropertyChangedEventArgs e) + { + if (!_ignoreVisibilityChange) + { + if ((bool)e.NewValue) + { + Show(); + } + else + { + Hide(); + } + } + } + /// /// Starts moving a window with left button being held. Should be called from left mouse button press event handler /// diff --git a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs index f565d640b6..d1f8d5b912 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs @@ -152,6 +152,37 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Setting_IsVisible_True_Shows_Window() + { + var windowImpl = new Mock(); + windowImpl.Setup(x => x.Scaling).Returns(1); + + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var target = new TestWindowBase(windowImpl.Object); + target.IsVisible = true; + + windowImpl.Verify(x => x.Show()); + } + } + + [Fact] + public void Setting_IsVisible_False_Hides_Window() + { + var windowImpl = new Mock(); + windowImpl.Setup(x => x.Scaling).Returns(1); + + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var target = new TestWindowBase(windowImpl.Object); + target.Show(); + target.IsVisible = false; + + windowImpl.Verify(x => x.Hide()); + } + } + private FuncControlTemplate CreateTemplate() { return new FuncControlTemplate(x => From 45112f669035a8948fe4689fd7a7f7c2d83bea46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 20:24:55 +0100 Subject: [PATCH 27/33] Fix netcoreapp1.1 target framework build --- .../Data/BindingExpressionTests.cs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs index 8770ae560c..062402d465 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs @@ -51,8 +51,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public async void Should_Convert_Get_String_To_Double() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; - +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { StringValue = "5.6" }; var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(double)); var result = await target.Take(1); @@ -83,7 +86,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public void Should_Convert_Set_String_To_Double() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { StringValue = (5.6).ToString() }; var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(double)); @@ -96,7 +103,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public async void Should_Convert_Get_Double_To_String() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { DoubleValue = 5.6 }; var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); @@ -108,7 +119,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public void Should_Convert_Set_Double_To_String() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { DoubleValue = 5.6 }; var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); @@ -121,7 +136,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public async void Should_Return_BindingNotification_With_FallbackValue_For_NonConvertibe_Target_Value() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { StringValue = "foo" }; var target = new BindingExpression( @@ -142,7 +161,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public async void Should_Return_BindingNotification_With_FallbackValue_For_NonConvertibe_Target_Value_With_Data_Validation() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { StringValue = "foo" }; var target = new BindingExpression( @@ -163,7 +186,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public async void Should_Return_BindingNotification_For_Invalid_FallbackValue() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { StringValue = "foo" }; var target = new BindingExpression( @@ -185,7 +212,11 @@ namespace Avalonia.Markup.UnitTests.Data [Fact] public async void Should_Return_BindingNotification_For_Invalid_FallbackValue_With_Data_Validation() { +#if NET461 Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; +#else + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; +#endif var data = new Class1 { StringValue = "foo" }; var target = new BindingExpression( From e85fb8b8f222cac661747df2979c3201748dfa39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 20:25:03 +0100 Subject: [PATCH 28/33] Enable markup unit tests --- build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index a36a3bb536..974e171238 100644 --- a/build.cake +++ b/build.cake @@ -183,8 +183,8 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); - //RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); - //RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Styling.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Visuals.UnitTests", parameters, true); }); From 3c78a4af0596c858b829cfc9265a722d97df1e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Sun, 19 Mar 2017 21:14:29 +0100 Subject: [PATCH 29/33] Disable .NET Core markup unit tests --- build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index 974e171238..a36a3bb536 100644 --- a/build.cake +++ b/build.cake @@ -183,8 +183,8 @@ Task("Run-Net-Core-Unit-Tests") RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); - RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); - RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); + //RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, true); + //RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Styling.UnitTests", parameters, true); RunCoreTest("./tests/Avalonia.Visuals.UnitTests", parameters, true); }); From d61d95af1900067cd1a0f0ae29238ecb0b1b158f Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 20 Mar 2017 22:24:07 +0100 Subject: [PATCH 30/33] Ported changes to Avalonia.Input from scenegraph. Fixed some doc comments, and updated the mouse-over algorithm. --- src/Avalonia.Input/IInputElement.cs | 6 +- src/Avalonia.Input/MouseDevice.cs | 125 ++++++++++++++++++++-------- 2 files changed, 91 insertions(+), 40 deletions(-) diff --git a/src/Avalonia.Input/IInputElement.cs b/src/Avalonia.Input/IInputElement.cs index 786353f05c..5acb6aa777 100644 --- a/src/Avalonia.Input/IInputElement.cs +++ b/src/Avalonia.Input/IInputElement.cs @@ -93,17 +93,17 @@ namespace Avalonia.Input bool IsEnabledCore { get; } /// - /// Gets or sets a value indicating whether the control is focused. + /// Gets a value indicating whether the control is focused. /// bool IsFocused { get; } /// - /// Gets or sets a value indicating whether the control is considered for hit testing. + /// Gets a value indicating whether the control is considered for hit testing. /// bool IsHitTestVisible { get; } /// - /// Gets or sets a value indicating whether the pointer is currently over the control. + /// Gets a value indicating whether the pointer is currently over the control. /// bool IsPointerOver { get; } diff --git a/src/Avalonia.Input/MouseDevice.cs b/src/Avalonia.Input/MouseDevice.cs index 2c0cb8656c..cbcb4382ec 100644 --- a/src/Avalonia.Input/MouseDevice.cs +++ b/src/Avalonia.Input/MouseDevice.cs @@ -20,7 +20,6 @@ namespace Avalonia.Input private int _clickCount; private Rect _lastClickRect; private uint _lastClickTime; - private readonly List _pointerOvers = new List(); /// /// Intializes a new instance of . @@ -87,6 +86,8 @@ namespace Avalonia.Input /// The mouse position in the control's coordinates. public Point GetPosition(IVisual relativeTo) { + Contract.Requires(relativeTo != null); + Point p = default(Point); IVisual v = relativeTo; IVisual root = null; @@ -103,6 +104,8 @@ namespace Avalonia.Input private void ProcessRawEvent(RawMouseEventArgs e) { + Contract.Requires(e != null); + var mouse = (IMouseDevice)e.Device; Position = e.Root.PointToScreen(e.Position); @@ -141,11 +144,17 @@ namespace Avalonia.Input private void LeaveWindow(IMouseDevice device, IInputRoot root) { + Contract.Requires(device != null); + Contract.Requires(root != null); + ClearPointerOver(this, root); } private bool MouseDown(IMouseDevice device, uint timestamp, IInputElement root, Point p, MouseButton button, InputModifiers inputModifiers) { + Contract.Requires(device != null); + Contract.Requires(root != null); + var hit = HitTest(root, p); if (hit != null) @@ -187,6 +196,9 @@ namespace Avalonia.Input private bool MouseMove(IMouseDevice device, IInputRoot root, Point p, InputModifiers inputModifiers) { + Contract.Requires(device != null); + Contract.Requires(root != null); + IInputElement source; if (Captured == null) @@ -195,8 +207,7 @@ namespace Avalonia.Input } else { - var elements = Captured.GetSelfAndVisualAncestors().OfType().ToList(); - SetPointerOver(this, root, elements); + SetPointerOver(this, root, Captured); source = Captured; } @@ -208,12 +219,15 @@ namespace Avalonia.Input InputModifiers = inputModifiers }; - source.RaiseEvent(e); + source?.RaiseEvent(e); return e.Handled; } private bool MouseUp(IMouseDevice device, IInputRoot root, Point p, MouseButton button, InputModifiers inputModifiers) { + Contract.Requires(device != null); + Contract.Requires(root != null); + var hit = HitTest(root, p); if (hit != null) @@ -237,6 +251,9 @@ namespace Avalonia.Input private bool MouseWheel(IMouseDevice device, IInputRoot root, Point p, Vector delta, InputModifiers inputModifiers) { + Contract.Requires(device != null); + Contract.Requires(root != null); + var hit = HitTest(root, p); if (hit != null) @@ -260,6 +277,8 @@ namespace Avalonia.Input private IInteractive GetSource(IVisual hit) { + Contract.Requires(hit != null); + return Captured ?? (hit as IInteractive) ?? hit.GetSelfAndVisualAncestors().OfType().FirstOrDefault(); @@ -267,22 +286,28 @@ namespace Avalonia.Input private IInputElement HitTest(IInputElement root, Point p) { + Contract.Requires(root != null); + return Captured ?? root.InputHitTest(p); } private void ClearPointerOver(IPointerDevice device, IInputRoot root) { - foreach (var control in _pointerOvers.ToList()) + Contract.Requires(device != null); + Contract.Requires(root != null); + + var element = root.PointerOverElement; + var e = new PointerEventArgs { - PointerEventArgs e = new PointerEventArgs - { - RoutedEvent = InputElement.PointerLeaveEvent, - Device = device, - Source = control, - }; + RoutedEvent = InputElement.PointerLeaveEvent, + Device = device, + }; - _pointerOvers.Remove(control); - control.RaiseEvent(e); + while (element != null) + { + e.Source = element; + element.RaiseEvent(e); + element = (IInputElement)element.VisualParent; } root.PointerOverElement = null; @@ -290,40 +315,66 @@ namespace Avalonia.Input private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, Point p) { - var elements = root.GetInputElementsAt(p).ToList(); - return SetPointerOver(device, root, elements); + Contract.Requires(device != null); + Contract.Requires(root != null); + + var element = root.InputHitTest(p); + + if (element != root.PointerOverElement) + { + if (element != null) + { + SetPointerOver(device, root, element); + } + else + { + ClearPointerOver(device, root); + } + } + + return element; } - private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, IList elements) + private void SetPointerOver(IPointerDevice device, IInputRoot root, IInputElement element) { - foreach (var control in _pointerOvers.Except(elements).ToList()) + Contract.Requires(device != null); + Contract.Requires(root != null); + Contract.Requires(element != null); + + IInputElement branch = null; + + var e = new PointerEventArgs { - PointerEventArgs e = new PointerEventArgs - { - RoutedEvent = InputElement.PointerLeaveEvent, - Device = device, - Source = control, - }; + RoutedEvent = InputElement.PointerEnterEvent, + Device = device, + }; - _pointerOvers.Remove(control); - control.RaiseEvent(e); - } + var el = element; - foreach (var control in elements.Except(_pointerOvers)) + while (el != null) { - PointerEventArgs e = new PointerEventArgs + if (el.IsPointerOver) { - RoutedEvent = InputElement.PointerEnterEvent, - Device = device, - Source = control, - }; + branch = el; + break; + } - _pointerOvers.Add(control); - control.RaiseEvent(e); + e.Source = el; + el.RaiseEvent(e); + el = (IInputElement)el.VisualParent; + } + + el = root.PointerOverElement; + e.RoutedEvent = InputElement.PointerLeaveEvent; + + while (el != null && el != branch) + { + e.Source = el; + el.RaiseEvent(e); + el = (IInputElement)el.VisualParent; } - root.PointerOverElement = elements.FirstOrDefault() ?? root; - return root.PointerOverElement; + root.PointerOverElement = element; } } -} +} \ No newline at end of file From d0fbbc9182e857d7c998b745417fe34dd0c302c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Mon, 20 Mar 2017 22:29:10 +0100 Subject: [PATCH 31/33] Removed nuget libraries for Android and iOS targets They are part of Xamarin bcl. --- build/Android.props | 18 ------------------ build/iOS.props | 18 ------------------ build/readme.md | 2 -- .../Avalonia.Android/Avalonia.Android.csproj | 1 - .../Avalonia.AndroidTestApplication.csproj | 1 - src/iOS/Avalonia.iOS/Avalonia.iOS.csproj | 1 - .../Avalonia.iOSTestApplication.csproj | 1 - 7 files changed, 42 deletions(-) delete mode 100644 build/Android.props delete mode 100644 build/iOS.props diff --git a/build/Android.props b/build/Android.props deleted file mode 100644 index cf7bd08076..0000000000 --- a/build/Android.props +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/build/iOS.props b/build/iOS.props deleted file mode 100644 index 76e312da41..0000000000 --- a/build/iOS.props +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/build/readme.md b/build/readme.md index b28506c531..1a79637a18 100644 --- a/build/readme.md +++ b/build/readme.md @@ -1,8 +1,6 @@ ### MSBuild Props ```XML - - diff --git a/src/Android/Avalonia.Android/Avalonia.Android.csproj b/src/Android/Avalonia.Android/Avalonia.Android.csproj index 69d05a5871..4babdc8bff 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -132,7 +132,6 @@ - diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj index cd5e91d42d..826f1f0132 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj @@ -153,7 +153,6 @@ - diff --git a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj index eb62d76a1a..d915b67cd0 100644 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj +++ b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj @@ -104,7 +104,6 @@ - \ No newline at end of file diff --git a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj index e3269fa705..050d61376a 100644 --- a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj +++ b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj @@ -186,7 +186,6 @@ - \ No newline at end of file From e31d8f3bca0feb23da5553f8a7048d15d56d6130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Mon, 20 Mar 2017 22:29:46 +0100 Subject: [PATCH 32/33] Renamed SkiaSharp.Linux.props to SkiaSharp.Desktop.props --- build/{SkiaSharp.Linux.props => SkiaSharp.Desktop.props} | 0 build/readme.md | 2 +- .../Avalonia.Skia.Desktop.NetStandard.csproj | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename build/{SkiaSharp.Linux.props => SkiaSharp.Desktop.props} (100%) diff --git a/build/SkiaSharp.Linux.props b/build/SkiaSharp.Desktop.props similarity index 100% rename from build/SkiaSharp.Linux.props rename to build/SkiaSharp.Desktop.props diff --git a/build/readme.md b/build/readme.md index 1a79637a18..aed508a508 100644 --- a/build/readme.md +++ b/build/readme.md @@ -13,7 +13,7 @@ - + diff --git a/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj b/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj index c525d890fa..1a6b574e7b 100644 --- a/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj +++ b/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj @@ -40,7 +40,7 @@ - + \ No newline at end of file From 9864abe9378c0996d6e8370a77b6620734f8f2c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Mon, 20 Mar 2017 22:40:06 +0100 Subject: [PATCH 33/33] Updated solution --- Avalonia.sln | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Avalonia.sln b/Avalonia.sln index 6f25cac037..3fb5ec2693 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -161,8 +161,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{74487168 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1-27F5-4255-9AFC-04ABFD11683A}" ProjectSection(SolutionItems) = preProject - build\Android.props = build\Android.props - build\iOS.props = build\iOS.props build\JetBrains.Annotations.props = build\JetBrains.Annotations.props build\JetBrains.dotMemoryUnit.props = build\JetBrains.dotMemoryUnit.props build\Magick.NET-Q16-AnyCPU.props = build\Magick.NET-Q16-AnyCPU.props @@ -175,7 +173,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1 build\Serilog.props = build\Serilog.props build\Serilog.Sinks.Trace.props = build\Serilog.Sinks.Trace.props build\SharpDX.props = build\SharpDX.props - build\SkiaSharp.Linux.props = build\SkiaSharp.Linux.props + build\SkiaSharp.Desktop.props = build\SkiaSharp.Desktop.props build\SkiaSharp.props = build\SkiaSharp.props build\Splat.props = build\Splat.props build\Sprache.props = build\Sprache.props