From cfd2be07eccae6aa975a19442717de79562317ec Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 7 Jan 2017 19:50:41 +0100 Subject: [PATCH 001/158] Added LayoutUpdated event. Fixes #825. --- src/Avalonia.Layout/Layoutable.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Avalonia.Layout/Layoutable.cs b/src/Avalonia.Layout/Layoutable.cs index 7624928e4b..5abd6c52f7 100644 --- a/src/Avalonia.Layout/Layoutable.cs +++ b/src/Avalonia.Layout/Layoutable.cs @@ -154,6 +154,11 @@ namespace Avalonia.Layout VerticalAlignmentProperty); } + /// + /// Occurs when a layout pass completes for the control. + /// + public event EventHandler LayoutUpdated; + /// /// Gets or sets the width of the element. /// @@ -357,6 +362,8 @@ namespace Avalonia.Layout IsArrangeValid = true; ArrangeCore(rect); _previousArrange = rect; + + LayoutUpdated?.Invoke(this, EventArgs.Empty); } } From c98b57a5253aaa655cd3367fc6ede0c6281f172a Mon Sep 17 00:00:00 2001 From: MrDaedra Date: Fri, 3 Feb 2017 15:24:08 +0300 Subject: [PATCH 002/158] 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 003/158] 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 4d3d42b6002621bf7316f6e92aaf09080a34d5a8 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Tue, 14 Feb 2017 21:23:20 +0300 Subject: [PATCH 004/158] [SKIA] Fixed DPI scaling issues introduced by b96c2de --- src/Skia/Avalonia.Skia/DrawingContextImpl.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index 27f5fd815f..0e40f578c0 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -18,11 +18,12 @@ namespace Avalonia.Skia public DrawingContextImpl(SKCanvas canvas, Matrix? postTransform = null, params IDisposable[] disposables) { - if (_postTransform.HasValue && !_postTransform.Value.IsIdentity) + if (postTransform.HasValue && !postTransform.Value.IsIdentity) _postTransform = postTransform; _disposables = disposables; Canvas = canvas; Canvas.Clear(); + Transform = Matrix.Identity; } public void DrawImage(IBitmap source, double opacity, Rect sourceRect, Rect destRect) @@ -352,7 +353,7 @@ namespace Avalonia.Skia Canvas.Restore(); } - private Matrix _currentTransform = Matrix.Identity; + private Matrix _currentTransform; public Matrix Transform { From 10b6f9ed121d4112a1dde1ebfd913e8b2d948f20 Mon Sep 17 00:00:00 2001 From: MrDaedra Date: Thu, 16 Feb 2017 10:27:17 +0300 Subject: [PATCH 005/158] 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 f21212e76a4f3bb50a3826d7e814443f5092f3ad Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Fri, 17 Feb 2017 06:36:17 +0300 Subject: [PATCH 006/158] Refactored out WindowBase from TopLevel --- Avalonia.sln | 6 +- .../Platform/SkiaPlatform/PopupImpl.cs | 16 +- .../Platform/SkiaPlatform/TopLevelImpl.cs | 4 +- .../Avalonia.Controls.csproj | 2 + .../Embedding/EmbeddableControlRoot.cs | 4 +- src/Avalonia.Controls/Menu.cs | 12 +- .../Platform/IEmbeddableWindowImpl.cs | 2 +- src/Avalonia.Controls/Platform/IPopupImpl.cs | 2 +- .../Platform/ITopLevelImpl.cs | 78 ++----- .../Platform/IWindowBaseImpl.cs | 69 +++++++ src/Avalonia.Controls/Platform/IWindowImpl.cs | 2 +- .../Platform/PlatformManager.cs | 2 +- .../Presenters/ItemVirtualizerSimple.cs | 14 +- src/Avalonia.Controls/Primitives/Popup.cs | 10 +- src/Avalonia.Controls/Primitives/PopupRoot.cs | 2 +- src/Avalonia.Controls/TopLevel.cs | 155 +------------- src/Avalonia.Controls/Window.cs | 2 +- src/Avalonia.Controls/WindowBase.cs | 191 ++++++++++++++++++ .../DesignerAssist.cs | 3 +- src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs | 7 +- src/Gtk/Avalonia.Gtk/WindowImpl.cs | 8 +- src/Gtk/Avalonia.Gtk/WindowImplBase.cs | 6 +- src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj | 2 +- src/Gtk/Avalonia.Gtk3/FramebufferManager.cs | 4 +- src/Gtk/Avalonia.Gtk3/PopupImpl.cs | 2 +- src/Gtk/Avalonia.Gtk3/SystemDialogs.cs | 4 +- .../{TopLevelImpl.cs => WindowBaseImpl.cs} | 17 +- src/Gtk/Avalonia.Gtk3/WindowImpl.cs | 2 +- .../Embedding/WinFormsAvaloniaControlHost.cs | 10 +- src/Windows/Avalonia.Win32/Win32Platform.cs | 4 +- src/Windows/Avalonia.Win32/WindowImpl.cs | 30 +-- 31 files changed, 377 insertions(+), 295 deletions(-) create mode 100644 src/Avalonia.Controls/Platform/IWindowBaseImpl.cs create mode 100644 src/Avalonia.Controls/WindowBase.cs rename src/Gtk/Avalonia.Gtk3/{TopLevelImpl.cs => WindowBaseImpl.cs} (97%) diff --git a/Avalonia.sln b/Avalonia.sln index 3ab8048857..b940efd76b 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.26127.3 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 @@ -169,13 +169,13 @@ Global src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{2f59f3d0-748d-4652-b01e-e0d954756308}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4 - src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{40759a76-d0f2-464e-8000-6ff0f5c4bd7c}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4 src\Shared\RenderHelpers\RenderHelpers.projitems*{47be08a7-5985-410b-9ffc-2264b8ea595f}*SharedItemsImports = 4 src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{47be08a7-5985-410b-9ffc-2264b8ea595f}*SharedItemsImports = 4 tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{48840edd-24bf-495d-911e-2eb12ae75d3b}*SharedItemsImports = 13 src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4 + src\Shared\PlatformSupport\PlatformSupport.projitems*{7b92af71-6287-4693-9dcb-bd5b6e927e23}*SharedItemsImports = 4 src\Shared\RenderHelpers\RenderHelpers.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4 src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4 src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{811a76cf-1cf6-440f-963b-bbe31bd72a82}*SharedItemsImports = 4 diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs index e39ba2c121..7cfe04e5d6 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs @@ -18,21 +18,19 @@ namespace Avalonia.Android.Platform.SkiaPlatform { private Point _position; private bool _isAdded; + Action IWindowBaseImpl.Activated { get; set; } public PopupImpl() : base(ActivityTracker.Current, true) { } private Size _clientSize = new Size(1, 1); - public override Size ClientSize + + public void Resize(Size value) { - get { return base.ClientSize; } - set - { - if(View == null) - return; - _clientSize = value; - UpdateParams(); - } + if (View == null) + return; + _clientSize = value; + UpdateParams(); } public override Point Position diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index d34981b964..124f22458e 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -83,9 +83,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform public View View => _view; - Action ITopLevelImpl.Activated { get; set; } - - IPlatformHandle ITopLevelImpl.Handle => _view; + public IPlatformHandle Handle => _view; public IEnumerable Surfaces => new object[] {this}; diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index c05e44b357..6119103e6d 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -57,6 +57,7 @@ + @@ -65,6 +66,7 @@ + diff --git a/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs b/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs index fc58e751f4..4688017187 100644 --- a/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs +++ b/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs @@ -11,12 +11,11 @@ namespace Avalonia.Controls.Embedding { public EmbeddableControlRoot(IEmbeddableWindowImpl impl) : base(impl) { - PlatformImpl.Show(); + } public EmbeddableControlRoot() : base(PlatformManager.CreateEmbeddableWindow()) { - PlatformImpl.Show(); } public new IEmbeddableWindowImpl PlatformImpl => (IEmbeddableWindowImpl) base.PlatformImpl; @@ -25,7 +24,6 @@ namespace Avalonia.Controls.Embedding { EnsureInitialized(); ApplyTemplate(); - PlatformImpl.Show(); LayoutManager.Instance.ExecuteInitialLayoutPass(this); } diff --git a/src/Avalonia.Controls/Menu.cs b/src/Avalonia.Controls/Menu.cs index 2185fd982b..e919275d4f 100644 --- a/src/Avalonia.Controls/Menu.cs +++ b/src/Avalonia.Controls/Menu.cs @@ -103,9 +103,11 @@ namespace Avalonia.Controls { base.OnAttachedToVisualTree(e); - var topLevel = e.Root as TopLevel; + var topLevel = (TopLevel)e.Root; + var window = e.Root as Window; - topLevel.Deactivated += Deactivated; + if (window != null) + window.Deactivated += Deactivated; var pointerPress = topLevel.AddHandler( PointerPressedEvent, @@ -114,7 +116,11 @@ namespace Avalonia.Controls _subscription = new CompositeDisposable( pointerPress, - Disposable.Create(() => topLevel.Deactivated -= Deactivated), + Disposable.Create(() => + { + if (window != null) + window.Deactivated -= Deactivated; + }), InputManager.Instance.Process.Subscribe(ListenForNonClientClick)); var inputRoot = e.Root as IInputRoot; diff --git a/src/Avalonia.Controls/Platform/IEmbeddableWindowImpl.cs b/src/Avalonia.Controls/Platform/IEmbeddableWindowImpl.cs index 45b15e5f45..3f974f3748 100644 --- a/src/Avalonia.Controls/Platform/IEmbeddableWindowImpl.cs +++ b/src/Avalonia.Controls/Platform/IEmbeddableWindowImpl.cs @@ -8,7 +8,7 @@ namespace Avalonia.Platform /// /// Defines a platform-specific embeddable window implementation. /// - public interface IEmbeddableWindowImpl : IWindowImpl + public interface IEmbeddableWindowImpl : ITopLevelImpl { event Action LostFocus; } diff --git a/src/Avalonia.Controls/Platform/IPopupImpl.cs b/src/Avalonia.Controls/Platform/IPopupImpl.cs index 34b3b8b557..1b606f550b 100644 --- a/src/Avalonia.Controls/Platform/IPopupImpl.cs +++ b/src/Avalonia.Controls/Platform/IPopupImpl.cs @@ -6,7 +6,7 @@ namespace Avalonia.Platform /// /// Defines a platform-specific popup window implementation. /// - public interface IPopupImpl : ITopLevelImpl + public interface IPopupImpl : IWindowBaseImpl { } diff --git a/src/Avalonia.Controls/Platform/ITopLevelImpl.cs b/src/Avalonia.Controls/Platform/ITopLevelImpl.cs index 77884acf73..16f436fd45 100644 --- a/src/Avalonia.Controls/Platform/ITopLevelImpl.cs +++ b/src/Avalonia.Controls/Platform/ITopLevelImpl.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using Avalonia.Controls; using Avalonia.Input; using Avalonia.Input.Raw; @@ -19,25 +18,15 @@ namespace Avalonia.Platform public interface ITopLevelImpl : IDisposable { /// - /// Gets or sets the client size of the window. + /// Gets the client size of the toplevel. /// - Size ClientSize { get; set; } + Size ClientSize { get; } /// - /// Gets the maximum size of a window on the system. - /// - Size MaxClientSize { get; } - - /// - /// Gets the scaling factor for the window. + /// Gets the scaling factor for the toplevel. /// double Scaling { get; } - /// - /// Gets the platform window handle. - /// - IPlatformHandle Handle { get; } - /// /// The list of native platform's surfaces that can be consumed by rendering subsystems. /// @@ -51,57 +40,32 @@ namespace Avalonia.Platform IEnumerable Surfaces { get; } /// - /// Gets or sets a method called when the window is activated (receives focus). - /// - Action Activated { get; set; } - - /// - /// Gets or sets a method called when the window is closed. - /// - Action Closed { get; set; } - - /// - /// Gets or sets a method called when the window is deactivated (loses focus). - /// - Action Deactivated { get; set; } - - /// - /// Gets or sets a method called when the window receives input. + /// Gets or sets a method called when the toplevel receives input. /// Action Input { get; set; } /// - /// Gets or sets a method called when the window requires painting. + /// Gets or sets a method called when the toplevel requires painting. /// Action Paint { get; set; } /// - /// Gets or sets a method called when the window is resized. + /// Gets or sets a method called when the toplevel is resized. /// Action Resized { get; set; } /// - /// Gets or sets a method called when the window's scaling changes. + /// Gets or sets a method called when the toplevel's scaling changes. /// Action ScalingChanged { get; set; } /// - /// Gets or sets a method called when the window's position changes. - /// - Action PositionChanged { get; set; } - - /// - /// Activates the window. - /// - void Activate(); - - /// - /// Invalidates a rect on the window. + /// Invalidates a rect on the toplevel. /// void Invalidate(Rect rect); /// - /// Sets the for the window. + /// Sets the for the toplevel. /// void SetInputRoot(IInputRoot inputRoot); @@ -120,32 +84,14 @@ namespace Avalonia.Platform Point PointToScreen(Point point); /// - /// Sets the cursor associated with the window. + /// Sets the cursor associated with the toplevel. /// /// The cursor. Use null for default cursor void SetCursor(IPlatformHandle cursor); /// - /// Shows the toplevel. - /// - void Show(); - - /// - /// Hides the window. - /// - void Hide(); - - /// - /// Starts moving a window with left button being held. Should be called from left mouse button press event handler. - /// - void BeginMoveDrag(); - - /// - /// Starts resizing a window. This function is used if an application has window resizing controls. - /// Should be called from left mouse button press event handler + /// Gets or sets a method called when the underlying implementation is destroyed. /// - void BeginResizeDrag(WindowEdge edge); - - Point Position { get; set; } + Action Closed { get; set; } } } diff --git a/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs b/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs new file mode 100644 index 0000000000..3f65d9f74e --- /dev/null +++ b/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs @@ -0,0 +1,69 @@ +using System; +using Avalonia.Controls; + +namespace Avalonia.Platform +{ + public interface IWindowBaseImpl : ITopLevelImpl + { + /// + /// Shows the toplevel. + /// + void Show(); + + /// + /// Hides the window. + /// + void Hide(); + + /// + /// Starts moving a window with left button being held. Should be called from left mouse button press event handler. + /// + void BeginMoveDrag(); + + /// + /// Starts resizing a window. This function is used if an application has window resizing controls. + /// Should be called from left mouse button press event handler + /// + void BeginResizeDrag(WindowEdge edge); + + /// + /// Gets position of the window relatively to the screen + /// + Point Position { get; set; } + + /// + /// Gets or sets a method called when the window's position changes. + /// + Action PositionChanged { get; set; } + + /// + /// Activates the window. + /// + void Activate(); + + /// + /// Gets or sets a method called when the window is deactivated (loses focus). + /// + Action Deactivated { get; set; } + + /// + /// Gets or sets a method called when the window is activated (receives focus). + /// + Action Activated { get; set; } + + /// + /// Gets the platform window handle. + /// + IPlatformHandle Handle { get; } + + /// + /// Gets the maximum size of a window on the system. + /// + Size MaxClientSize { get; } + + /// + /// Gets the client size of the toplevel. + /// + void Resize(Size size); + } +} \ No newline at end of file diff --git a/src/Avalonia.Controls/Platform/IWindowImpl.cs b/src/Avalonia.Controls/Platform/IWindowImpl.cs index 609e9834cb..69b946346e 100644 --- a/src/Avalonia.Controls/Platform/IWindowImpl.cs +++ b/src/Avalonia.Controls/Platform/IWindowImpl.cs @@ -9,7 +9,7 @@ namespace Avalonia.Platform /// /// Defines a platform-specific window implementation. /// - public interface IWindowImpl : ITopLevelImpl + public interface IWindowImpl : IWindowBaseImpl { /// /// Gets or sets the minimized/maximized state of the window. diff --git a/src/Avalonia.Controls/Platform/PlatformManager.cs b/src/Avalonia.Controls/Platform/PlatformManager.cs index 8f069a3ab2..fa01b9e839 100644 --- a/src/Avalonia.Controls/Platform/PlatformManager.cs +++ b/src/Avalonia.Controls/Platform/PlatformManager.cs @@ -31,7 +31,7 @@ namespace Avalonia.Controls.Platform throw new Exception("Could not CreateWindow(): IWindowingPlatform is not registered."); } - return s_designerMode ? platform.CreateEmbeddableWindow() : platform.CreateWindow(); + return s_designerMode ? (IWindowImpl)platform.CreateEmbeddableWindow() : platform.CreateWindow(); } public static IEmbeddableWindowImpl CreateEmbeddableWindow() diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs index 228ad65ffa..01111d7b54 100644 --- a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs +++ b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs @@ -97,7 +97,11 @@ namespace Avalonia.Controls.Presenters /// public override Size MeasureOverride(Size availableSize) { - var window = Owner.GetVisualRoot() as TopLevel; + var maxAvailableSize = (Owner.GetVisualRoot() as WindowBase)?.PlatformImpl?.MaxClientSize; + if (!maxAvailableSize.HasValue) + { + maxAvailableSize = (Owner.GetVisualRoot() as TopLevel)?.ClientSize; + } // If infinity is passed as the available size and we're virtualized then we need to // fill the available space, but to do that we *don't* want to materialize all our @@ -107,9 +111,9 @@ namespace Avalonia.Controls.Presenters { if (availableSize.Height == double.PositiveInfinity) { - if (window != null) + if (maxAvailableSize.HasValue) { - availableSize = availableSize.WithHeight(window.PlatformImpl.MaxClientSize.Height); + availableSize = availableSize.WithHeight(maxAvailableSize.Value.Height); } } @@ -119,9 +123,9 @@ namespace Avalonia.Controls.Presenters { if (availableSize.Width == double.PositiveInfinity) { - if (window != null) + if (maxAvailableSize.HasValue) { - availableSize = availableSize.WithWidth(window.PlatformImpl.MaxClientSize.Width); + availableSize = availableSize.WithWidth(maxAvailableSize.Value.Width); } } diff --git a/src/Avalonia.Controls/Primitives/Popup.cs b/src/Avalonia.Controls/Primitives/Popup.cs index 63f3fb647b..bb2a61c024 100644 --- a/src/Avalonia.Controls/Primitives/Popup.cs +++ b/src/Avalonia.Controls/Primitives/Popup.cs @@ -213,7 +213,9 @@ namespace Avalonia.Controls.Primitives if (_topLevel != null) { - _topLevel.Deactivated += TopLevelDeactivated; + var window = _topLevel as Window; + if (window != null) + window.Deactivated += WindowDeactivated; _topLevel.AddHandler(PointerPressedEvent, PointerPressedOutside, RoutingStrategies.Tunnel); _nonClientListener = InputManager.Instance.Process.Subscribe(ListenForNonClientClick); } @@ -239,7 +241,9 @@ namespace Avalonia.Controls.Primitives if (_topLevel != null) { _topLevel.RemoveHandler(PointerPressedEvent, PointerPressedOutside); - _topLevel.Deactivated -= TopLevelDeactivated; + var window = _topLevel as Window; + if (window != null) + window.Deactivated -= WindowDeactivated; _nonClientListener?.Dispose(); _nonClientListener = null; } @@ -381,7 +385,7 @@ namespace Avalonia.Controls.Primitives } } - private void TopLevelDeactivated(object sender, EventArgs e) + private void WindowDeactivated(object sender, EventArgs e) { if (!StaysOpen) { diff --git a/src/Avalonia.Controls/Primitives/PopupRoot.cs b/src/Avalonia.Controls/Primitives/PopupRoot.cs index f67bbef5e1..5e5177b29d 100644 --- a/src/Avalonia.Controls/Primitives/PopupRoot.cs +++ b/src/Avalonia.Controls/Primitives/PopupRoot.cs @@ -15,7 +15,7 @@ namespace Avalonia.Controls.Primitives /// /// The root window of a . /// - public class PopupRoot : TopLevel, IInteractive, IHostedVisualTreeRoot, IDisposable + public class PopupRoot : WindowBase, IInteractive, IHostedVisualTreeRoot, IDisposable { private IDisposable _presenterSubscription; diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 1853d67019..45bb655184 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -18,12 +18,12 @@ using Avalonia.VisualTree; namespace Avalonia.Controls { /// - /// Base class for top-level windows. + /// Base class for top-level widgets. /// /// - /// This class acts as a base for top level windows such as and - /// . It handles scheduling layout, styling and rendering as well as - /// tracking the window and state. + /// This class acts as a base for top level widget. + /// It handles scheduling layout, styling and rendering as well as + /// tracking the widget's . /// public abstract class TopLevel : ContentControl, IInputRoot, ILayoutRoot, IRenderRoot, ICloseable, IStyleRoot { @@ -33,12 +33,6 @@ namespace Avalonia.Controls public static readonly DirectProperty ClientSizeProperty = AvaloniaProperty.RegisterDirect(nameof(ClientSize), o => o.ClientSize); - /// - /// Defines the property. - /// - public static readonly DirectProperty IsActiveProperty = - AvaloniaProperty.RegisterDirect(nameof(IsActive), o => o.IsActive); - /// /// Defines the property. /// @@ -51,7 +45,6 @@ namespace Avalonia.Controls private readonly IApplicationLifecycle _applicationLifecycle; private readonly IPlatformRenderInterface _renderInterface; private Size _clientSize; - private bool _isActive; /// /// Initializes static members of the class. @@ -100,21 +93,20 @@ namespace Avalonia.Controls Renderer = rendererFactory?.CreateRenderer(this, renderLoop); PlatformImpl.SetInputRoot(this); - PlatformImpl.Activated = HandleActivated; - PlatformImpl.Deactivated = HandleDeactivated; + PlatformImpl.Closed = HandleClosed; PlatformImpl.Input = HandleInput; PlatformImpl.Paint = Renderer != null ? (Action)Renderer.Render : null; PlatformImpl.Resized = HandleResized; PlatformImpl.ScalingChanged = HandleScalingChanged; - PlatformImpl.PositionChanged = HandlePositionChanged; + _keyboardNavigationHandler?.SetOwner(this); _accessKeyHandler?.SetOwner(this); styler?.ApplyStyles(this); ClientSize = PlatformImpl.ClientSize; - this.GetObservable(ClientSizeProperty).Skip(1).Subscribe(x => PlatformImpl.ClientSize = x); + this.GetObservable(PointerOverElementProperty) .Select( x => (x as InputElement)?.GetObservable(CursorProperty) ?? Observable.Empty()) @@ -126,26 +118,11 @@ namespace Avalonia.Controls } } - /// - /// Fired when the window is activated. - /// - public event EventHandler Activated; - /// /// Fired when the window is closed. /// public event EventHandler Closed; - /// - /// Fired when the window is deactivated. - /// - public event EventHandler Deactivated; - - /// - /// Fired when the window position is changed. - /// - public event EventHandler PositionChanged; - /// /// Gets or sets the client size of the window. /// @@ -155,24 +132,6 @@ namespace Avalonia.Controls private set { SetAndRaise(ClientSizeProperty, ref _clientSize, value); } } - /// - /// Gets a value that indicates whether the window is active. - /// - public bool IsActive - { - get { return _isActive; } - private set { SetAndRaise(IsActiveProperty, ref _isActive, value); } - } - - /// - /// Gets or sets the window position in screen coordinates. - /// - public Point Position - { - get { return PlatformImpl.Position; } - set { PlatformImpl.Position = value; } - } - /// /// Gets the platform-specific window implementation. /// @@ -225,15 +184,6 @@ namespace Avalonia.Controls get { return AvaloniaLocator.Current.GetService(); } } - /// - /// Whether an auto-size operation is in progress. - /// - protected bool AutoSizing - { - get; - private set; - } - /// IRenderTarget IRenderRoot.CreateRenderTarget() { @@ -258,43 +208,6 @@ namespace Avalonia.Controls return PlatformImpl.PointToScreen(p); } - /// - /// Activates the window. - /// - public void Activate() - { - PlatformImpl.Activate(); - } - - /// - /// Begins an auto-resize operation. - /// - /// A disposable used to finish the operation. - /// - /// When an auto-resize operation is in progress any resize events received will not be - /// cause the new size to be written to the and - /// properties. - /// - protected IDisposable BeginAutoSizing() - { - AutoSizing = true; - return Disposable.Create(() => AutoSizing = false); - } - - /// - /// Carries out the arrange pass of the window. - /// - /// The final window size. - /// The parameter unchanged. - protected override Size ArrangeOverride(Size finalSize) - { - using (BeginAutoSizing()) - { - PlatformImpl.ClientSize = finalSize; - } - - return base.ArrangeOverride(PlatformImpl.ClientSize); - } /// /// Handles a resize notification from . @@ -302,12 +215,6 @@ namespace Avalonia.Controls /// The new client size. protected virtual void HandleResized(Size clientSize) { - if (!AutoSizing) - { - Width = clientSize.Width; - Height = clientSize.Height; - } - ClientSize = clientSize; LayoutManager.Instance.ExecuteLayoutPass(); PlatformImpl.Invalidate(new Rect(clientSize)); @@ -358,23 +265,6 @@ namespace Avalonia.Controls return result; } - /// - /// Handles an activated notification from . - /// - private void HandleActivated() - { - Activated?.Invoke(this, EventArgs.Empty); - - var scope = this as IFocusScope; - - if (scope != null) - { - FocusManager.Instance.SetFocusScope(scope); - } - - IsActive = true; - } - /// /// Handles a closed notification from . /// @@ -398,16 +288,6 @@ namespace Avalonia.Controls { } - /// - /// Handles a deactivated notification from . - /// - private void HandleDeactivated() - { - IsActive = false; - - Deactivated?.Invoke(this, EventArgs.Empty); - } - /// /// Handles input from . /// @@ -416,26 +296,5 @@ namespace Avalonia.Controls { _inputManager.ProcessInput(e); } - - /// - /// Handles a window position change notification from - /// . - /// - /// The window position. - private void HandlePositionChanged(Point pos) - { - PositionChanged?.Invoke(this, new PointEventArgs(pos)); - } - - /// - /// Starts moving a window with left button being held. Should be called from left mouse button press event handler - /// - public void BeginMoveDrag() => PlatformImpl.BeginMoveDrag(); - - /// - /// Starts resizing a window. This function is used if an application has window resizing controls. - /// Should be called from left mouse button press event handler - /// - public void BeginResizeDrag(WindowEdge edge) => PlatformImpl.BeginResizeDrag(edge); } } diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 40c52a748d..992279d981 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -43,7 +43,7 @@ namespace Avalonia.Controls /// /// A top-level window. /// - public class Window : TopLevel, IStyleable, IFocusScope, ILayoutRoot, INameScope + public class Window : WindowBase, IStyleable, IFocusScope, ILayoutRoot, INameScope { private static IList s_windows = new List(); diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs new file mode 100644 index 0000000000..88c4a0ccb1 --- /dev/null +++ b/src/Avalonia.Controls/WindowBase.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive.Disposables; +using System.Reactive.Linq; +using System.Text; +using System.Threading.Tasks; +using Avalonia.Controls.Primitives; +using Avalonia.Input; +using Avalonia.Layout; +using Avalonia.Platform; + +namespace Avalonia.Controls +{ + /// + /// Base class for top-level windows. + /// + /// + /// This class acts as a base for top level windows such as and + /// . It handles scheduling layout, styling and rendering as well as + /// tracking the window and state. + /// + public class WindowBase : TopLevel + { + /// + /// Defines the property. + /// + public static readonly DirectProperty IsActiveProperty = + AvaloniaProperty.RegisterDirect(nameof(IsActive), o => o.IsActive); + + private bool _isActive; + + public WindowBase(IWindowBaseImpl impl) : this(impl, AvaloniaLocator.Current) + { + } + + public WindowBase(IWindowBaseImpl impl, IAvaloniaDependencyResolver dependencyResolver) : base(impl, dependencyResolver) + { + PlatformImpl.Activated = HandleActivated; + PlatformImpl.Deactivated = HandleDeactivated; + PlatformImpl.PositionChanged = HandlePositionChanged; + this.GetObservable(ClientSizeProperty).Skip(1).Subscribe(x => PlatformImpl.Resize(x)); + } + + /// + /// Fired when the window is activated. + /// + public event EventHandler Activated; + + /// + /// Fired when the window is deactivated. + /// + public event EventHandler Deactivated; + + /// + /// Fired when the window position is changed. + /// + public event EventHandler PositionChanged; + + public new IWindowBaseImpl PlatformImpl => (IWindowBaseImpl) base.PlatformImpl; + + + /// + /// Gets a value that indicates whether the window is active. + /// + public bool IsActive + { + get { return _isActive; } + private set { SetAndRaise(IsActiveProperty, ref _isActive, value); } + } + + /// + /// Gets or sets the window position in screen coordinates. + /// + public Point Position + { + get { return PlatformImpl.Position; } + set { PlatformImpl.Position = value; } + } + + /// + /// Whether an auto-size operation is in progress. + /// + protected bool AutoSizing + { + get; + private set; + } + + /// + /// Activates the window. + /// + public void Activate() + { + PlatformImpl.Activate(); + } + + + /// + /// Begins an auto-resize operation. + /// + /// A disposable used to finish the operation. + /// + /// When an auto-resize operation is in progress any resize events received will not be + /// cause the new size to be written to the and + /// properties. + /// + protected IDisposable BeginAutoSizing() + { + AutoSizing = true; + return Disposable.Create(() => AutoSizing = false); + } + + /// + /// Carries out the arrange pass of the window. + /// + /// The final window size. + /// The parameter unchanged. + protected override Size ArrangeOverride(Size finalSize) + { + using (BeginAutoSizing()) + { + PlatformImpl.Resize(finalSize); + } + + return base.ArrangeOverride(PlatformImpl.ClientSize); + } + + /// + /// Handles a resize notification from . + /// + /// The new client size. + protected override void HandleResized(Size clientSize) + { + if (!AutoSizing) + { + Width = clientSize.Width; + Height = clientSize.Height; + } + base.HandleResized(clientSize); + } + + /// + /// Handles a window position change notification from + /// . + /// + /// The window position. + private void HandlePositionChanged(Point pos) + { + PositionChanged?.Invoke(this, new PointEventArgs(pos)); + } + + /// + /// Handles an activated notification from . + /// + private void HandleActivated() + { + Activated?.Invoke(this, EventArgs.Empty); + + var scope = this as IFocusScope; + + if (scope != null) + { + FocusManager.Instance.SetFocusScope(scope); + } + + IsActive = true; + } + + /// + /// Handles a deactivated notification from . + /// + private void HandleDeactivated() + { + IsActive = false; + + Deactivated?.Invoke(this, EventArgs.Empty); + } + + /// + /// Starts moving a window with left button being held. Should be called from left mouse button press event handler + /// + public void BeginMoveDrag() => PlatformImpl.BeginMoveDrag(); + + /// + /// Starts resizing a window. This function is used if an application has window resizing controls. + /// Should be called from left mouse button press event handler + /// + public void BeginResizeDrag(WindowEdge edge) => PlatformImpl.BeginResizeDrag(edge); + } +} diff --git a/src/Avalonia.DesignerSupport/DesignerAssist.cs b/src/Avalonia.DesignerSupport/DesignerAssist.cs index 95e7345227..c9ae89354c 100644 --- a/src/Avalonia.DesignerSupport/DesignerAssist.cs +++ b/src/Avalonia.DesignerSupport/DesignerAssist.cs @@ -75,8 +75,7 @@ namespace Avalonia.DesignerSupport private static void SetScalingFactor(double factor) { PlatformManager.SetDesignerScalingFactor(factor); - if (s_currentWindow != null) - s_currentWindow.PlatformImpl.ClientSize = s_currentWindow.ClientSize; + s_currentWindow?.PlatformImpl.Resize(s_currentWindow.ClientSize); } static Window s_currentWindow; diff --git a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs index a5a34cd47b..997a63246b 100644 --- a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs +++ b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs @@ -36,15 +36,18 @@ namespace Avalonia.Gtk public override Size ClientSize { get { return new Size(Widget.Allocation.Width, Widget.Allocation.Height); } - set {} } - //Stubs are needed for future GTK designer embedding support public override void SetTitle(string title) { } + public override void Resize(Size value) + { + + } + 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..d0c1715ee2 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImpl.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImpl.cs @@ -61,11 +61,11 @@ namespace Avalonia.Gtk Window.GetSize(out width, out height); return new Size(width, height); } + } - set - { - Window.Resize((int)value.Width, (int)value.Height); - } + public override void Resize(Size value) + { + Window.Resize((int)value.Width, (int)value.Height); } public override void SetTitle(string title) diff --git a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs b/src/Gtk/Avalonia.Gtk/WindowImplBase.cs index 4d7552aa72..93e2652c6e 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImplBase.cs @@ -63,8 +63,8 @@ namespace Avalonia.Gtk _imContext.ClientWindow = _window.GdkWindow; } - public abstract Size ClientSize { get; set; } - + public abstract Size ClientSize { get; } + public abstract void Resize(Size value); public Size MaxClientSize { @@ -184,7 +184,7 @@ namespace Avalonia.Gtk public abstract void BeginResizeDrag(WindowEdge edge); public abstract Point Position { get; set; } - void ITopLevelImpl.Activate() + void IWindowBaseImpl.Activate() { _window.Activate(); } diff --git a/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj b/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj index 785baeba8a..958af437a6 100644 --- a/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj +++ b/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj @@ -66,7 +66,7 @@ - + diff --git a/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs b/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs index 1b2317ed6a..e52f0efb81 100644 --- a/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs +++ b/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs @@ -9,8 +9,8 @@ namespace Avalonia.Gtk3 { class FramebufferManager : IFramebufferPlatformSurface, IDisposable { - private readonly TopLevelImpl _window; - public FramebufferManager(TopLevelImpl window) + private readonly WindowBaseImpl _window; + public FramebufferManager(WindowBaseImpl window) { _window = window; } diff --git a/src/Gtk/Avalonia.Gtk3/PopupImpl.cs b/src/Gtk/Avalonia.Gtk3/PopupImpl.cs index 5d23148b76..8fd1c28ea4 100644 --- a/src/Gtk/Avalonia.Gtk3/PopupImpl.cs +++ b/src/Gtk/Avalonia.Gtk3/PopupImpl.cs @@ -9,7 +9,7 @@ using Avalonia.Platform; namespace Avalonia.Gtk3 { - class PopupImpl : TopLevelImpl, IPopupImpl + class PopupImpl : WindowBaseImpl, IPopupImpl { static GtkWindow CreateWindow() { diff --git a/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs b/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs index 04c224ff5b..efdadc2379 100644 --- a/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs +++ b/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs @@ -77,14 +77,14 @@ namespace Avalonia.Gtk3 public Task ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent) { - return ShowDialog(dialog.Title, ((TopLevelImpl) parent)?.GtkWidget, + return ShowDialog(dialog.Title, ((WindowBaseImpl) parent)?.GtkWidget, dialog is OpenFileDialog ? GtkFileChooserAction.Open : GtkFileChooserAction.Save, (dialog as OpenFileDialog)?.AllowMultiple ?? false, dialog.InitialFileName); } public async Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) { - var res = await ShowDialog(dialog.Title, ((TopLevelImpl) parent)?.GtkWidget, + var res = await ShowDialog(dialog.Title, ((WindowBaseImpl) parent)?.GtkWidget, GtkFileChooserAction.SelectFolder, false, dialog.InitialDirectory); return res?.FirstOrDefault(); } diff --git a/src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs similarity index 97% rename from src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs rename to src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs index 0063c13910..478580e65e 100644 --- a/src/Gtk/Avalonia.Gtk3/TopLevelImpl.cs +++ b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs @@ -12,7 +12,7 @@ using Avalonia.Platform; namespace Avalonia.Gtk3 { - abstract class TopLevelImpl : ITopLevelImpl, IPlatformHandle + abstract class WindowBaseImpl : IWindowBaseImpl, IPlatformHandle { public readonly GtkWindow GtkWidget; private IInputRoot _inputRoot; @@ -25,7 +25,7 @@ namespace Avalonia.Gtk3 private uint _lastKbdEvent; private uint _lastSmoothScrollEvent; - public TopLevelImpl(GtkWindow gtkWidget) + public WindowBaseImpl(GtkWindow gtkWidget) { GtkWidget = gtkWidget; @@ -318,12 +318,13 @@ namespace Avalonia.Gtk3 Native.GtkWindowGetSize(GtkWidget, out w, out h); return new Size(w, h); } - set - { - if (GtkWidget.IsClosed) - return; - Native.GtkWindowResize(GtkWidget, (int)value.Width, (int)value.Height); - } + } + + public void Resize(Size value) + { + if (GtkWidget.IsClosed) + return; + Native.GtkWindowResize(GtkWidget, (int)value.Width, (int)value.Height); } public Point Position diff --git a/src/Gtk/Avalonia.Gtk3/WindowImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowImpl.cs index 631944872f..f083185a84 100644 --- a/src/Gtk/Avalonia.Gtk3/WindowImpl.cs +++ b/src/Gtk/Avalonia.Gtk3/WindowImpl.cs @@ -5,7 +5,7 @@ using Avalonia.Platform; namespace Avalonia.Gtk3 { - class WindowImpl : TopLevelImpl, IWindowImpl + class WindowImpl : WindowBaseImpl, IWindowImpl { public WindowImpl() : base(Native.GtkWindowNew(GtkWindowType.TopLevel)) { diff --git a/src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs b/src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs index 3b52090493..bdee85c91e 100644 --- a/src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs +++ b/src/Windows/Avalonia.Win32/Embedding/WinFormsAvaloniaControlHost.cs @@ -15,10 +15,12 @@ namespace Avalonia.Win32.Embedding { private readonly EmbeddableControlRoot _root = new EmbeddableControlRoot(); + private IntPtr WindowHandle => ((WindowImpl) _root.PlatformImpl).Handle.Handle; + public WinFormsAvaloniaControlHost() { SetStyle(ControlStyles.AllPaintingInWmPaint, true); - UnmanagedMethods.SetParent(_root.PlatformImpl.Handle.Handle, Handle); + UnmanagedMethods.SetParent(WindowHandle, Handle); _root.Prepare(); if (_root.IsFocused) FocusManager.Instance.Focus(null); @@ -59,20 +61,20 @@ namespace Avalonia.Win32.Embedding private void RootGotFocus(object sender, Interactivity.RoutedEventArgs e) { - UnmanagedMethods.SetFocus(_root.PlatformImpl.Handle.Handle); + UnmanagedMethods.SetFocus(WindowHandle); } protected override void OnGotFocus(EventArgs e) { if (_root != null) - UnmanagedMethods.SetFocus(_root.PlatformImpl.Handle.Handle); + UnmanagedMethods.SetFocus(WindowHandle); } void FixPosition() { if (_root != null && Width > 0 && Height > 0) - UnmanagedMethods.MoveWindow(_root.PlatformImpl.Handle.Handle, 0, 0, Width, Height, true); + UnmanagedMethods.MoveWindow(WindowHandle, 0, 0, Width, Height, true); } diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs index 2aa9ea7d0a..e668fd964a 100644 --- a/src/Windows/Avalonia.Win32/Win32Platform.cs +++ b/src/Windows/Avalonia.Win32/Win32Platform.cs @@ -187,7 +187,9 @@ namespace Avalonia.Win32 #if NETSTANDARD throw new NotSupportedException(); #else - return new EmbeddedWindowImpl(); + var embedded = new EmbeddedWindowImpl(); + embedded.Show(); + return embedded; #endif } diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index d9b200169f..0000b5c0a9 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -89,23 +89,23 @@ namespace Avalonia.Win32 UnmanagedMethods.GetClientRect(_hwnd, out rect); return new Size(rect.right, rect.bottom) / Scaling; } + } - set + public void Resize(Size value) + { + if (value != ClientSize) { - if (value != ClientSize) - { - value *= Scaling; - value += BorderThickness; - - UnmanagedMethods.SetWindowPos( - _hwnd, - IntPtr.Zero, - 0, - 0, - (int)value.Width, - (int)value.Height, - UnmanagedMethods.SetWindowPosFlags.SWP_RESIZE); - } + value *= Scaling; + value += BorderThickness; + + UnmanagedMethods.SetWindowPos( + _hwnd, + IntPtr.Zero, + 0, + 0, + (int)value.Width, + (int)value.Height, + UnmanagedMethods.SetWindowPosFlags.SWP_RESIZE); } } From f0285179bd526ccaf3c6d5dcb6d12e10a60c692b Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 19 Feb 2017 19:28:18 +0300 Subject: [PATCH 007/158] Fixed comments and solution --- Avalonia.sln | 5 +++-- src/Avalonia.Controls/WindowBase.cs | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Avalonia.sln b/Avalonia.sln index b940efd76b..ad14483b40 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.26127.3 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 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 @@ -169,6 +169,7 @@ Global src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{2f59f3d0-748d-4652-b01e-e0d954756308}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4 + src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{40759a76-d0f2-464e-8000-6ff0f5c4bd7c}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4 src\Shared\RenderHelpers\RenderHelpers.projitems*{47be08a7-5985-410b-9ffc-2264b8ea595f}*SharedItemsImports = 4 src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{47be08a7-5985-410b-9ffc-2264b8ea595f}*SharedItemsImports = 4 diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index 88c4a0ccb1..07597984c4 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -18,7 +18,7 @@ namespace Avalonia.Controls /// /// This class acts as a base for top level windows such as and /// . It handles scheduling layout, styling and rendering as well as - /// tracking the window and state. + /// tracking the window and state. /// public class WindowBase : TopLevel { @@ -142,7 +142,7 @@ namespace Avalonia.Controls /// /// Handles a window position change notification from - /// . + /// . /// /// The window position. private void HandlePositionChanged(Point pos) @@ -151,7 +151,7 @@ namespace Avalonia.Controls } /// - /// Handles an activated notification from . + /// Handles an activated notification from . /// private void HandleActivated() { @@ -168,7 +168,7 @@ namespace Avalonia.Controls } /// - /// Handles a deactivated notification from . + /// Handles a deactivated notification from . /// private void HandleDeactivated() { From d17b32d7bd1613472f0e9f87907577898c5e1ef2 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 19 Feb 2017 20:00:43 +0300 Subject: [PATCH 008/158] Fixed tests --- .../Avalonia.Controls.UnitTests.csproj | 1 + .../TopLevelTests.cs | 73 +--------- .../WindowBaseTests.cs | 126 ++++++++++++++++++ .../FullLayoutTests.cs | 5 +- 4 files changed, 132 insertions(+), 73 deletions(-) create mode 100644 tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj index aea972ec42..c581cccf2f 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -101,6 +101,7 @@ + diff --git a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs index 0e783e3f8d..0614906306 100644 --- a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs @@ -106,28 +106,7 @@ namespace Avalonia.Controls.UnitTests } } - [Fact] - public void Impl_ClientSize_Should_Be_Set_After_Layout_Pass() - { - using (UnitTestApplication.Start(TestServices.StyledWindow)) - { - var impl = Mock.Of(x => x.Scaling == 1); - - var target = new TestTopLevel(impl) - { - Template = CreateTemplate(), - Content = new TextBlock - { - Width = 321, - Height = 432, - } - }; - - LayoutManager.Instance.ExecuteInitialLayoutPass(target); - - Mock.Get(impl).VerifySet(x => x.ClientSize = new Size(321, 432)); - } - } + [Fact] public void Width_And_Height_Should_Not_Be_Set_After_Layout_Pass() @@ -163,38 +142,6 @@ namespace Avalonia.Controls.UnitTests } } - [Fact] - public void Activate_Should_Call_Impl_Activate() - { - using (UnitTestApplication.Start(TestServices.StyledWindow)) - { - var impl = new Mock(); - var target = new TestTopLevel(impl.Object); - - target.Activate(); - - impl.Verify(x => x.Activate()); - } - } - - [Fact] - public void Impl_Activate_Should_Call_Raise_Activated_Event() - { - using (UnitTestApplication.Start(TestServices.StyledWindow)) - { - var impl = new Mock(); - impl.SetupAllProperties(); - - bool raised = false; - var target = new TestTopLevel(impl.Object); - target.Activated += (s, e) => raised = true; - - impl.Object.Activated(); - - Assert.True(raised); - } - } - [Fact] public void Impl_Close_Should_Call_Raise_Closed_Event() { @@ -213,24 +160,6 @@ namespace Avalonia.Controls.UnitTests } } - [Fact] - public void Impl_Deactivate_Should_Call_Raise_Activated_Event() - { - using (UnitTestApplication.Start(TestServices.StyledWindow)) - { - var impl = new Mock(); - impl.SetupAllProperties(); - - bool raised = false; - var target = new TestTopLevel(impl.Object); - target.Deactivated += (s, e) => raised = true; - - impl.Object.Deactivated(); - - Assert.True(raised); - } - } - [Fact] public void Impl_Input_Should_Pass_Input_To_InputManager() { diff --git a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs new file mode 100644 index 0000000000..d4b850d66e --- /dev/null +++ b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs @@ -0,0 +1,126 @@ +// Copyright (c) The Avalonia Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using System; +using System.Reactive; +using System.Reactive.Subjects; +using Moq; +using Avalonia.Controls.Presenters; +using Avalonia.Controls.Templates; +using Avalonia.Input; +using Avalonia.Input.Raw; +using Avalonia.Layout; +using Avalonia.Platform; +using Avalonia.Rendering; +using Avalonia.Styling; +using Avalonia.UnitTests; +using Ploeh.AutoFixture; +using Ploeh.AutoFixture.AutoMoq; +using Xunit; + +namespace Avalonia.Controls.UnitTests +{ + public class WindowBaseTests + { + [Fact] + public void Impl_ClientSize_Should_Be_Set_After_Layout_Pass() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var impl = Mock.Of(x => x.Scaling == 1); + + var target = new TestWindowBase(impl) + { + Template = CreateTemplate(), + Content = new TextBlock + { + Width = 321, + Height = 432, + } + }; + + LayoutManager.Instance.ExecuteInitialLayoutPass(target); + + Mock.Get(impl).Verify(x => x.Resize(new Size(321, 432))); + } + } + + + [Fact] + public void Activate_Should_Call_Impl_Activate() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var impl = new Mock(); + var target = new TestWindowBase(impl.Object); + + target.Activate(); + + impl.Verify(x => x.Activate()); + } + } + + [Fact] + public void Impl_Activate_Should_Call_Raise_Activated_Event() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var impl = new Mock(); + impl.SetupAllProperties(); + + bool raised = false; + var target = new TestWindowBase(impl.Object); + target.Activated += (s, e) => raised = true; + + impl.Object.Activated(); + + Assert.True(raised); + } + } + + + [Fact] + public void Impl_Deactivate_Should_Call_Raise_Deativated_Event() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var impl = new Mock(); + impl.SetupAllProperties(); + + bool raised = false; + var target = new TestWindowBase(impl.Object); + target.Deactivated += (s, e) => raised = true; + + impl.Object.Deactivated(); + + Assert.True(raised); + } + } + + private FuncControlTemplate CreateTemplate() + { + return new FuncControlTemplate(x => + new ContentPresenter + { + Name = "PART_ContentPresenter", + [!ContentPresenter.ContentProperty] = x[!ContentControl.ContentProperty], + }); + } + + private class TestWindowBase : WindowBase + { + public bool IsClosed { get; private set; } + + public TestWindowBase(IWindowBaseImpl impl) + : base(impl) + { + } + + protected override void HandleApplicationExiting() + { + base.HandleApplicationExiting(); + IsClosed = true; + } + } + } +} diff --git a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs b/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs index b3e9b981a5..9922b624e5 100644 --- a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs +++ b/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs @@ -139,7 +139,10 @@ namespace Avalonia.Layout.UnitTests var renderInterface = fixture.Create(); var windowImpl = new Mock(); - windowImpl.SetupProperty(x => x.ClientSize); + Size clientSize = default(Size); + + windowImpl.SetupGet(x => x.ClientSize).Returns(() => clientSize); + windowImpl.Setup(x => x.Resize(It.IsAny())).Callback(s => clientSize = s); windowImpl.Setup(x => x.MaxClientSize).Returns(new Size(1024, 1024)); windowImpl.SetupGet(x => x.Scaling).Returns(1); From 46de034f981b1b1268e77b321ee44c87fe339b1e Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 19 Feb 2017 21:21:03 +0300 Subject: [PATCH 009/158] Don't skip tests that are passing now --- tests/Avalonia.RenderTests/Controls/BorderTests.cs | 6 ------ tests/Avalonia.RenderTests/Shapes/PathTests.cs | 11 +---------- tests/Avalonia.RenderTests/Shapes/PolygonTests.cs | 4 ---- tests/Avalonia.RenderTests/Shapes/PolylineTests.cs | 4 ---- 4 files changed, 1 insertion(+), 24 deletions(-) diff --git a/tests/Avalonia.RenderTests/Controls/BorderTests.cs b/tests/Avalonia.RenderTests/Controls/BorderTests.cs index e960070f82..369f4b3031 100644 --- a/tests/Avalonia.RenderTests/Controls/BorderTests.cs +++ b/tests/Avalonia.RenderTests/Controls/BorderTests.cs @@ -181,8 +181,6 @@ namespace Avalonia.Direct2D1.RenderTests.Controls #if AVALONIA_CAIRO [Fact(Skip = "Font scaling currently broken on cairo")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for new FormattedText")] #else [Fact] #endif @@ -338,8 +336,6 @@ namespace Avalonia.Direct2D1.RenderTests.Controls #if AVALONIA_CAIRO [Fact(Skip = "Font scaling currently broken on cairo")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for new FormattedText")] #else [Fact] #endif @@ -371,8 +367,6 @@ namespace Avalonia.Direct2D1.RenderTests.Controls #if AVALONIA_CAIRO [Fact(Skip = "Font scaling currently broken on cairo")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for new FormattedText")] #else [Fact] #endif diff --git a/tests/Avalonia.RenderTests/Shapes/PathTests.cs b/tests/Avalonia.RenderTests/Shapes/PathTests.cs index 2e5d528bce..4a4bf16b5d 100644 --- a/tests/Avalonia.RenderTests/Shapes/PathTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PathTests.cs @@ -299,11 +299,7 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes RenderToFile(target); CompareImages(); } -#if AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")] -#else - [Fact] -#endif + public void Path_Tick_Scaled() { Decorator target = new Decorator @@ -326,11 +322,6 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes CompareImages(); } -#if AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")] -#else - [Fact] -#endif public void Path_Tick_Scaled_Stroke_8px() { Decorator target = new Decorator diff --git a/tests/Avalonia.RenderTests/Shapes/PolygonTests.cs b/tests/Avalonia.RenderTests/Shapes/PolygonTests.cs index 21a48b6b64..0f0debb92d 100644 --- a/tests/Avalonia.RenderTests/Shapes/PolygonTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PolygonTests.cs @@ -23,8 +23,6 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes #if AVALONIA_CAIRO [Fact(Skip = "Caused by cairo bug")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")] #else [Fact] #endif @@ -51,8 +49,6 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes #if AVALONIA_CAIRO [Fact(Skip = "Caused by cairo bug")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")] #else [Fact] #endif diff --git a/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs b/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs index 5506b29971..d8ebde5712 100644 --- a/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PolylineTests.cs @@ -23,8 +23,6 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes #if AVALONIA_CAIRO [Fact(Skip = "Caused by cairo bug")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")] #else [Fact] #endif @@ -53,8 +51,6 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes #if AVALONIA_CAIRO [Fact(Skip = "Caused by cairo bug")] -#elif AVALONIA_SKIA_SKIP_FAIL - [Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")] #else [Fact] #endif From 32d307f0320c0339dffed1467cbe53f3f272caef Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 19 Feb 2017 21:21:16 +0300 Subject: [PATCH 010/158] Possible leaks --- src/Skia/Avalonia.Skia/DrawingContextImpl.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index 0e40f578c0..0b1ef3fea7 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -162,9 +162,9 @@ namespace Avalonia.Skia var end = linearGradient.EndPoint.ToPixels(targetSize).ToSKPoint(); // would be nice to cache these shaders possibly? - var shader = SKShader.CreateLinearGradient(start, end, stopColors, stopOffsets, tileMode); - paint.Shader = shader; - shader.Dispose(); + using (var shader = SKShader.CreateLinearGradient(start, end, stopColors, stopOffsets, tileMode)) + paint.Shader = shader; + } else { @@ -178,9 +178,9 @@ namespace Avalonia.Skia //paint.setAlpha(128); // would be nice to cache these shaders possibly? - var shader = SKShader.CreateRadialGradient(center, radius, stopColors, stopOffsets, tileMode); - paint.Shader = shader; - shader.Dispose(); + using (var shader = SKShader.CreateRadialGradient(center, radius, stopColors, stopOffsets, tileMode)) + paint.Shader = shader; + } } @@ -209,8 +209,8 @@ namespace Avalonia.Skia : tileBrush.TileMode == TileMode.FlipY || tileBrush.TileMode == TileMode.FlipXY ? SKShaderTileMode.Mirror : SKShaderTileMode.Repeat; - paint.Shader = SKShader.CreateBitmap(bitmap.Bitmap, tileX, tileY, translation); - paint.Shader.Dispose(); + using (var shader = SKShader.CreateBitmap(bitmap.Bitmap, tileX, tileY, translation)) + paint.Shader = shader; } return rv; From 026c9430554e9e5cfd8fc4b2e2dec2f2900d9e29 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 19 Feb 2017 21:30:04 +0300 Subject: [PATCH 011/158] Fixed tests --- src/Avalonia.Controls/TopLevel.cs | 4 +++- src/Avalonia.Controls/WindowBase.cs | 5 ++++- tests/Avalonia.Controls.UnitTests/TopLevelTests.cs | 1 - 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 45bb655184..4de0256a7d 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -129,7 +129,7 @@ namespace Avalonia.Controls public Size ClientSize { get { return _clientSize; } - private set { SetAndRaise(ClientSizeProperty, ref _clientSize, value); } + protected set { SetAndRaise(ClientSizeProperty, ref _clientSize, value); } } /// @@ -216,6 +216,8 @@ namespace Avalonia.Controls protected virtual void HandleResized(Size clientSize) { ClientSize = clientSize; + Width = clientSize.Width; + Height = clientSize.Height; LayoutManager.Instance.ExecuteLayoutPass(); PlatformImpl.Invalidate(new Rect(clientSize)); } diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index 07597984c4..ac6eea8641 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -137,7 +137,10 @@ namespace Avalonia.Controls Width = clientSize.Width; Height = clientSize.Height; } - base.HandleResized(clientSize); + ClientSize = clientSize; + LayoutManager.Instance.ExecuteLayoutPass(); + PlatformImpl.Invalidate(new Rect(clientSize)); + } /// diff --git a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs index 0614906306..e19729706d 100644 --- a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs @@ -86,7 +86,6 @@ namespace Avalonia.Controls.UnitTests using (UnitTestApplication.Start(TestServices.StyledWindow)) { var impl = new Mock(); - impl.SetupProperty(x => x.ClientSize); impl.SetupProperty(x => x.Resized); impl.SetupGet(x => x.Scaling).Returns(1); From 03ae54cb25bd8b64b5ef0248066282d856d24a85 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Mon, 20 Feb 2017 03:21:08 +0300 Subject: [PATCH 012/158] Platform toplevel cleanup --- .../Platform/SkiaPlatform/PopupImpl.cs | 23 +++++- .../Platform/SkiaPlatform/TopLevelImpl.cs | 41 +--------- src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj | 2 +- src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs | 37 +-------- src/Gtk/Avalonia.Gtk/FramebufferManager.cs | 4 +- src/Gtk/Avalonia.Gtk/SystemDialogImpl.cs | 4 +- .../{WindowImplBase.cs => TopLevelImpl.cs} | 82 ++++++++----------- src/Gtk/Avalonia.Gtk/WindowImpl.cs | 23 ++++-- src/iOS/Avalonia.iOS/TopLevelImpl.cs | 66 ++------------- 9 files changed, 88 insertions(+), 194 deletions(-) rename src/Gtk/Avalonia.Gtk/{WindowImplBase.cs => TopLevelImpl.cs} (79%) diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs index 7cfe04e5d6..efbc71b808 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/PopupImpl.cs @@ -10,6 +10,7 @@ using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; +using Avalonia.Controls; using Avalonia.Platform; namespace Avalonia.Android.Platform.SkiaPlatform @@ -19,6 +20,9 @@ namespace Avalonia.Android.Platform.SkiaPlatform private Point _position; private bool _isAdded; Action IWindowBaseImpl.Activated { get; set; } + public Action PositionChanged { get; set; } + public Action Deactivated { get; set; } + public PopupImpl() : base(ActivityTracker.Current, true) { } @@ -33,7 +37,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform UpdateParams(); } - public override Point Position + public Point Position { get { return _position; } set @@ -85,5 +89,22 @@ namespace Avalonia.Android.Platform.SkiaPlatform Hide(); base.Dispose(); } + + + public void Activate() + { + } + + public void BeginMoveDrag() + { + //Not supported + } + + public void BeginResizeDrag(WindowEdge edge) + { + //Not supported + } + + } } \ No newline at end of file diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index 124f22458e..75772be171 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -67,8 +67,6 @@ namespace Avalonia.Android.Platform.SkiaPlatform public Action Closed { get; set; } - public Action Deactivated { get; set; } - public Action Input { get; set; } public Size MaxClientSize { get; protected set; } @@ -79,27 +77,17 @@ namespace Avalonia.Android.Platform.SkiaPlatform public Action ScalingChanged { get; set; } - public Action PositionChanged { get; set; } - public View View => _view; public IPlatformHandle Handle => _view; public IEnumerable Surfaces => new object[] {this}; - - public void Activate() - { - } - + public virtual void Hide() { _view.Visibility = ViewStates.Invisible; } - - public void SetSystemDecorations(bool enabled) - { - } - + public void Invalidate(Rect rect) { if (_view.Holder?.Surface?.IsValid == true) _view.Invalidate(); @@ -124,40 +112,19 @@ namespace Avalonia.Android.Platform.SkiaPlatform { InputRoot = inputRoot; } - - public void SetTitle(string title) - { - } - + public virtual void Show() { _view.Visibility = ViewStates.Visible; } - public void BeginMoveDrag() - { - //Not supported - } - - public void BeginResizeDrag(WindowEdge edge) - { - //Not supported - } - - public virtual Point Position { get; set; } - public double Scaling => 1; void Draw() { Paint?.Invoke(new Rect(new Point(0, 0), ClientSize)); } - - public void SetIcon(IWindowIconImpl icon) - { - // No window icons for mobile platforms - } - + public virtual void Dispose() { _view.Dispose(); diff --git a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj index 07a9ab56ed..d7e4400a99 100644 --- a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj +++ b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj @@ -61,7 +61,7 @@ - + diff --git a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs index 997a63246b..4e8085a057 100644 --- a/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs +++ b/src/Gtk/Avalonia.Gtk/EmbeddableImpl.cs @@ -12,7 +12,7 @@ using WindowEdge = Avalonia.Controls.WindowEdge; namespace Avalonia.Gtk { - class EmbeddableImpl : WindowImplBase, IEmbeddableWindowImpl + class EmbeddableImpl : TopLevelImpl, IEmbeddableWindowImpl { #pragma warning disable CS0067 // Method not used public event Action LostFocus; @@ -37,39 +37,6 @@ namespace Avalonia.Gtk { get { return new Size(Widget.Allocation.Width, Widget.Allocation.Height); } } - - //Stubs are needed for future GTK designer embedding support - public override void SetTitle(string title) - { - } - - public override void Resize(Size value) - { - - } - - public override IDisposable ShowDialog() => Disposable.Create(() => { }); - - public override void SetSystemDecorations(bool enabled) - { - } - - public override void SetIcon(IWindowIconImpl icon) - { - } - - public override void BeginMoveDrag() - { - } - - public override void BeginResizeDrag(WindowEdge edge) - { - } - - public override Point Position - { - get { return new Point(); } - set {} - } + } } diff --git a/src/Gtk/Avalonia.Gtk/FramebufferManager.cs b/src/Gtk/Avalonia.Gtk/FramebufferManager.cs index 00a4727769..0c9ed44274 100644 --- a/src/Gtk/Avalonia.Gtk/FramebufferManager.cs +++ b/src/Gtk/Avalonia.Gtk/FramebufferManager.cs @@ -5,10 +5,10 @@ namespace Avalonia.Gtk { class FramebufferManager : IFramebufferPlatformSurface, IDisposable { - private readonly WindowImplBase _window; + private readonly TopLevelImpl _window; private SurfaceFramebuffer _fb; - public FramebufferManager(WindowImplBase window) + public FramebufferManager(TopLevelImpl window) { _window = window; } diff --git a/src/Gtk/Avalonia.Gtk/SystemDialogImpl.cs b/src/Gtk/Avalonia.Gtk/SystemDialogImpl.cs index 962621856a..05dc1bf02d 100644 --- a/src/Gtk/Avalonia.Gtk/SystemDialogImpl.cs +++ b/src/Gtk/Avalonia.Gtk/SystemDialogImpl.cs @@ -15,7 +15,7 @@ namespace Avalonia.Gtk public Task ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent) { var tcs = new TaskCompletionSource(); - var dlg = new global::Gtk.FileChooserDialog(dialog.Title, ((WindowImplBase)parent)?.Widget.Toplevel as Window, + var dlg = new global::Gtk.FileChooserDialog(dialog.Title, ((TopLevelImpl)parent)?.Widget.Toplevel as Window, dialog is OpenFileDialog ? FileChooserAction.Open : FileChooserAction.Save, @@ -57,7 +57,7 @@ namespace Avalonia.Gtk public Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) { var tcs = new TaskCompletionSource(); - var dlg = new global::Gtk.FileChooserDialog(dialog.Title, ((WindowImplBase)parent)?.Widget.Toplevel as Window, + var dlg = new global::Gtk.FileChooserDialog(dialog.Title, ((TopLevelImpl)parent)?.Widget.Toplevel as Window, FileChooserAction.SelectFolder, "Cancel", ResponseType.Cancel, "Select Folder", ResponseType.Accept) diff --git a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs b/src/Gtk/Avalonia.Gtk/TopLevelImpl.cs similarity index 79% rename from src/Gtk/Avalonia.Gtk/WindowImplBase.cs rename to src/Gtk/Avalonia.Gtk/TopLevelImpl.cs index 93e2652c6e..a1bb3f847e 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImplBase.cs +++ b/src/Gtk/Avalonia.Gtk/TopLevelImpl.cs @@ -15,10 +15,10 @@ namespace Avalonia.Gtk { using Gtk = global::Gtk; - public abstract class WindowImplBase : IWindowImpl + public abstract class TopLevelImpl : ITopLevelImpl { private IInputRoot _inputRoot; - protected Gtk.Widget _window; + private Gtk.Widget _widget; private FramebufferManager _framebuffer; private Gtk.IMContext _imContext; @@ -27,44 +27,43 @@ namespace Avalonia.Gtk private static readonly Gdk.Cursor DefaultCursor = new Gdk.Cursor(CursorType.LeftPtr); - protected WindowImplBase(Gtk.Widget window) + protected TopLevelImpl(Gtk.Widget window) { - _window = window; + _widget = window; _framebuffer = new FramebufferManager(this); Init(); } void Init() { - Handle = _window as IPlatformHandle; - _window.Events = EventMask.AllEventsMask; + Handle = _widget as IPlatformHandle; + _widget.Events = EventMask.AllEventsMask; _imContext = new Gtk.IMMulticontext(); _imContext.Commit += ImContext_Commit; - _window.Realized += OnRealized; - _window.Realize(); - _window.ButtonPressEvent += OnButtonPressEvent; - _window.ButtonReleaseEvent += OnButtonReleaseEvent; - _window.ScrollEvent += OnScrollEvent; - _window.Destroyed += OnDestroyed; - _window.KeyPressEvent += OnKeyPressEvent; - _window.KeyReleaseEvent += OnKeyReleaseEvent; - _window.ExposeEvent += OnExposeEvent; - _window.MotionNotifyEvent += OnMotionNotifyEvent; + _widget.Realized += OnRealized; + _widget.Realize(); + _widget.ButtonPressEvent += OnButtonPressEvent; + _widget.ButtonReleaseEvent += OnButtonReleaseEvent; + _widget.ScrollEvent += OnScrollEvent; + _widget.Destroyed += OnDestroyed; + _widget.KeyPressEvent += OnKeyPressEvent; + _widget.KeyReleaseEvent += OnKeyReleaseEvent; + _widget.ExposeEvent += OnExposeEvent; + _widget.MotionNotifyEvent += OnMotionNotifyEvent; } public IPlatformHandle Handle { get; private set; } - public Gtk.Widget Widget => _window; + public Gtk.Widget Widget => _widget; public Gdk.Drawable CurrentDrawable { get; private set; } void OnRealized (object sender, EventArgs eventArgs) { - _imContext.ClientWindow = _window.GdkWindow; + _imContext.ClientWindow = _widget.GdkWindow; } public abstract Size ClientSize { get; } - public abstract void Resize(Size value); public Size MaxClientSize { @@ -72,7 +71,7 @@ namespace Avalonia.Gtk { // TODO: This should take into account things such as taskbar and window border // thickness etc. - return new Size(_window.Screen.Width, _window.Screen.Height); + return new Size(_widget.Screen.Width, _widget.Screen.Height); } } @@ -80,7 +79,7 @@ namespace Avalonia.Gtk { get { - switch (_window.GdkWindow.State) + switch (_widget.GdkWindow.State) { case Gdk.WindowState.Iconified: return Controls.WindowState.Minimized; @@ -96,14 +95,14 @@ namespace Avalonia.Gtk switch (value) { case Controls.WindowState.Minimized: - _window.GdkWindow.Iconify(); + _widget.GdkWindow.Iconify(); break; case Controls.WindowState.Maximized: - _window.GdkWindow.Maximize(); + _widget.GdkWindow.Maximize(); break; case Controls.WindowState.Normal: - _window.GdkWindow.Deiconify(); - _window.GdkWindow.Unmaximize(); + _widget.GdkWindow.Deiconify(); + _widget.GdkWindow.Unmaximize(); break; } } @@ -141,15 +140,15 @@ namespace Avalonia.Gtk public void Invalidate(Rect rect) { - if (_window?.GdkWindow != null) - _window.GdkWindow.InvalidateRect( + if (_widget?.GdkWindow != null) + _widget.GdkWindow.InvalidateRect( new Rectangle((int) rect.X, (int) rect.Y, (int) rect.Width, (int) rect.Height), true); } public Point PointToClient(Point point) { int x, y; - _window.GdkWindow.GetDeskrelativeOrigin(out x, out y); + _widget.GdkWindow.GetDeskrelativeOrigin(out x, out y); return new Point(point.X - x, point.Y - y); } @@ -157,7 +156,7 @@ namespace Avalonia.Gtk public Point PointToScreen(Point point) { int x, y; - _window.GdkWindow.GetDeskrelativeOrigin(out x, out y); + _widget.GdkWindow.GetDeskrelativeOrigin(out x, out y); return new Point(point.X + x, point.Y + y); } @@ -166,28 +165,15 @@ namespace Avalonia.Gtk _inputRoot = inputRoot; } - public abstract void SetTitle(string title); - public abstract IDisposable ShowDialog(); - public abstract void SetSystemDecorations(bool enabled); - public abstract void SetIcon(IWindowIconImpl icon); - public void SetCursor(IPlatformHandle cursor) { - _window.GdkWindow.Cursor = cursor != null ? new Gdk.Cursor(cursor.Handle) : DefaultCursor; + _widget.GdkWindow.Cursor = cursor != null ? new Gdk.Cursor(cursor.Handle) : DefaultCursor; } - public void Show() => _window.Show(); - - public void Hide() => _window.Hide(); - public abstract void BeginMoveDrag(); - public abstract void BeginResizeDrag(WindowEdge edge); - public abstract Point Position { get; set; } + public void Show() => _widget.Show(); - void IWindowBaseImpl.Activate() - { - _window.Activate(); - } + public void Hide() => _widget.Hide(); private static InputModifiers GetModifierKeys(ModifierType state) { @@ -317,9 +303,9 @@ namespace Avalonia.Gtk public void Dispose() { _framebuffer.Dispose(); - _window.Hide(); - _window.Dispose(); - _window = null; + _widget.Hide(); + _widget.Dispose(); + _widget = null; } } } diff --git a/src/Gtk/Avalonia.Gtk/WindowImpl.cs b/src/Gtk/Avalonia.Gtk/WindowImpl.cs index d0c1715ee2..d8555b4e05 100644 --- a/src/Gtk/Avalonia.Gtk/WindowImpl.cs +++ b/src/Gtk/Avalonia.Gtk/WindowImpl.cs @@ -6,7 +6,7 @@ using Gdk; namespace Avalonia.Gtk { using Gtk = global::Gtk; - public class WindowImpl : WindowImplBase + public class WindowImpl : TopLevelImpl, IWindowImpl { private Gtk.Window _window; private Gtk.Window Window => _window ?? (_window = (Gtk.Window) Widget); @@ -63,22 +63,27 @@ namespace Avalonia.Gtk } } - public override void Resize(Size value) + public void Resize(Size value) { Window.Resize((int)value.Width, (int)value.Height); } - public override void SetTitle(string title) + public void SetTitle(string title) { Window.Title = title; } + void IWindowBaseImpl.Activate() + { + _window.Activate(); + } + void OnFocusActivated(object sender, EventArgs eventArgs) { Activated(); } - public override void BeginMoveDrag() + public void BeginMoveDrag() { int x, y; ModifierType mod; @@ -86,7 +91,7 @@ namespace Avalonia.Gtk Window.BeginMoveDrag(1, x, y, 0); } - public override void BeginResizeDrag(Controls.WindowEdge edge) + public void BeginResizeDrag(Controls.WindowEdge edge) { int x, y; ModifierType mod; @@ -94,7 +99,7 @@ namespace Avalonia.Gtk Window.BeginResizeDrag((Gdk.WindowEdge)(int)edge, 1, x, y, 0); } - public override Point Position + public Point Position { get { @@ -108,7 +113,7 @@ namespace Avalonia.Gtk } } - public override IDisposable ShowDialog() + public IDisposable ShowDialog() { Window.Modal = true; Window.Show(); @@ -116,9 +121,9 @@ namespace Avalonia.Gtk return Disposable.Empty; } - public override void SetSystemDecorations(bool enabled) => Window.Decorated = enabled; + public void SetSystemDecorations(bool enabled) => Window.Decorated = enabled; - public override void SetIcon(IWindowIconImpl icon) + public void SetIcon(IWindowIconImpl icon) { Window.Icon = ((IconImpl)icon).Pixbuf; } diff --git a/src/iOS/Avalonia.iOS/TopLevelImpl.cs b/src/iOS/Avalonia.iOS/TopLevelImpl.cs index 96ab2786f7..7949e331fe 100644 --- a/src/iOS/Avalonia.iOS/TopLevelImpl.cs +++ b/src/iOS/Avalonia.iOS/TopLevelImpl.cs @@ -32,6 +32,7 @@ namespace Avalonia.iOS { _keyboardHelper = new KeyboardEventsHelper(this); AutoresizingMask = UIViewAutoresizing.All; + _keyboardHelper.ActivateAutoShowKeybord(); } [Export("hasText")] @@ -44,37 +45,21 @@ namespace Avalonia.iOS public void DeleteBackward() => _keyboardHelper.DeleteBackward(); public override bool CanBecomeFirstResponder => _keyboardHelper.CanBecomeFirstResponder(); - - public Action Activated { get; set; } + public Action Closed { get; set; } - public Action Deactivated { get; set; } public Action Input { get; set; } public Action Paint { get; set; } public Action Resized { get; set; } public Action ScalingChanged { get; set; } - public Action PositionChanged { get; set; } public IPlatformHandle Handle => null; public double Scaling => UIScreen.MainScreen.Scale; - public WindowState WindowState - { - get { return WindowState.Normal; } - set { } - } - + public override void LayoutSubviews() => Resized?.Invoke(ClientSize); - public Size ClientSize - { - get { return Bounds.Size.ToAvalonia(); } - set { InvokeOnMainThread(() => Resized?.Invoke(ClientSize)); } - } - - public void Activate() - { - } + public Size ClientSize => Bounds.Size.ToAvalonia(); public override void Draw(CGRect rect) { @@ -93,42 +78,9 @@ namespace Avalonia.iOS { //Not supported } - - public void Show() - { - _keyboardHelper.ActivateAutoShowKeybord(); - } - - public void BeginMoveDrag() - { - //Not supported - } - - public void BeginResizeDrag(WindowEdge edge) - { - //Not supported - } - - public Point Position - { - get { return _position; } - set - { - _position = value; - PositionChanged?.Invoke(_position); - } - } - - public Size MaxClientSize => Bounds.Size.ToAvalonia(); - + public IEnumerable Surfaces => new object[] { this }; - - - public void Hide() - { - //Not supported - } - + public override void TouchesEnded(NSSet touches, UIEvent evt) { var touch = touches.AnyObject as UITouch; @@ -182,11 +134,7 @@ namespace Avalonia.iOS _touchLastPoint = location; } } - - public void SetIcon(IWindowIconImpl icon) - { - } - + public ILockedFramebuffer Lock() => new EmulatedFramebuffer(this); } } From 432153c006726f862b492cf978b9d29b2eb5b201 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Mon, 20 Feb 2017 11:49:50 +0300 Subject: [PATCH 013/158] Readd [Fact] for path tests --- tests/Avalonia.RenderTests/Shapes/PathTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Avalonia.RenderTests/Shapes/PathTests.cs b/tests/Avalonia.RenderTests/Shapes/PathTests.cs index 4a4bf16b5d..a9c7004651 100644 --- a/tests/Avalonia.RenderTests/Shapes/PathTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PathTests.cs @@ -300,6 +300,7 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes CompareImages(); } + [Fact] public void Path_Tick_Scaled() { Decorator target = new Decorator @@ -322,6 +323,7 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes CompareImages(); } + [Fact] public void Path_Tick_Scaled_Stroke_8px() { Decorator target = new Decorator From e1b2ac56977b08eba8ca19d1bd3168a983f79a1f Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 22 Feb 2017 18:31:35 +0300 Subject: [PATCH 014/158] Add a way to pass view model for the main window --- src/Avalonia.Controls/AppBuilderBase.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/AppBuilderBase.cs b/src/Avalonia.Controls/AppBuilderBase.cs index b098c270a5..97de093a59 100644 --- a/src/Avalonia.Controls/AppBuilderBase.cs +++ b/src/Avalonia.Controls/AppBuilderBase.cs @@ -115,13 +115,16 @@ namespace Avalonia.Controls /// Starts the application with an instance of . /// /// The window type. - public void Start() + /// A delegate that will be called to create a data context for the window (optional). + public void Start(Func dataContextProvider = null) where TMainWindow : Window, new() { Setup(); BeforeStartCallback(Self); var window = new TMainWindow(); + if (dataContextProvider != null) + window.DataContext = dataContextProvider(); window.Show(); Instance.Run(window); } From 6072bad3f677e2457772c86229b1f83f8de002b1 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Feb 2017 00:03:05 +0300 Subject: [PATCH 015/158] Naming --- src/Avalonia.Controls/Platform/IWindowBaseImpl.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs b/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs index 3f65d9f74e..a5c7c60843 100644 --- a/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs +++ b/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs @@ -62,8 +62,8 @@ namespace Avalonia.Platform Size MaxClientSize { get; } /// - /// Gets the client size of the toplevel. + /// Sets the client size of the toplevel. /// - void Resize(Size size); + void Resize(Size clientSize); } } \ No newline at end of file From 657c53fb7303a2a5c877d84926ca2a0bc4c5f5a4 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Feb 2017 00:03:31 +0300 Subject: [PATCH 016/158] Make it clear that MaxClientSize is used when available --- src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs index 01111d7b54..96190720ae 100644 --- a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs +++ b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs @@ -97,11 +97,9 @@ namespace Avalonia.Controls.Presenters /// public override Size MeasureOverride(Size availableSize) { - var maxAvailableSize = (Owner.GetVisualRoot() as WindowBase)?.PlatformImpl?.MaxClientSize; - if (!maxAvailableSize.HasValue) - { - maxAvailableSize = (Owner.GetVisualRoot() as TopLevel)?.ClientSize; - } + var visualRoot = Owner.GetVisualRoot(); + var maxAvailableSize = (visualRoot as WindowBase)?.PlatformImpl?.MaxClientSize + ?? (visualRoot as TopLevel)?.ClientSize; // If infinity is passed as the available size and we're virtualized then we need to // fill the available space, but to do that we *don't* want to materialize all our From 7013033a1b75920f718e5fdbc423056e5ad9ef66 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Feb 2017 06:17:19 +0300 Subject: [PATCH 017/158] Added `Bitmap(PixelFormat format, IntPtr data, int width, int height, int stride)` constructor --- .../Avalonia.Controls.csproj | 1 - .../Platform/Surfaces/ILockedFramebuffer.cs | 1 + .../Platform/Surfaces/PixelFormat.cs | 15 --- src/Avalonia.Visuals/Avalonia.Visuals.csproj | 1 + src/Avalonia.Visuals/Media/Imaging/Bitmap.cs | 14 +++ .../Platform/IPlatformRenderInterface.cs | 12 ++ src/Avalonia.Visuals/Platform/PixelFormat.cs | 9 ++ src/Gtk/Avalonia.Cairo/CairoPlatform.cs | 5 + .../Avalonia.Skia/FramebufferRenderTarget.cs | 17 +-- .../Avalonia.Skia/PlatformRenderInterface.cs | 10 ++ src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs | 13 +++ .../Avalonia.Direct2D1/Direct2D1Platform.cs | 5 + .../Media/Imaging/WicBitmapImpl.cs | 25 ++++ .../SwapChainRenderTarget.cs | 1 + .../Interop/UnmanagedMethods.cs | 3 + .../Avalonia.Win32/WindowFramebuffer.cs | 2 +- .../InputElement_HitTesting.cs | 5 + .../Avalonia.RenderTests.projitems | 1 + .../Avalonia.RenderTests/Media/BitmapTests.cs | 108 ++++++++++++++++++ .../VisualTree/MockRenderInterface.cs | 5 + ...ouldBeUsableAsBitmap_Bgra8888.expected.png | Bin 0 -> 800 bytes ...ShouldBeUsableAsBitmap_Rgb565.expected.png | Bin 0 -> 786 bytes ...ouldBeUsableAsBitmap_Rgba8888.expected.png | Bin 0 -> 800 bytes 23 files changed, 221 insertions(+), 32 deletions(-) delete mode 100644 src/Avalonia.Controls/Platform/Surfaces/PixelFormat.cs create mode 100644 src/Avalonia.Visuals/Platform/PixelFormat.cs create mode 100644 tests/Avalonia.RenderTests/Media/BitmapTests.cs create mode 100644 tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Bgra8888.expected.png create mode 100644 tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Rgb565.expected.png create mode 100644 tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Rgba8888.expected.png diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index 6119103e6d..cb1e421470 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -60,7 +60,6 @@ - diff --git a/src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs b/src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs index d6402d170d..b62060b029 100644 --- a/src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs +++ b/src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs @@ -1,4 +1,5 @@ using System; +using Avalonia.Platform; namespace Avalonia.Controls.Platform.Surfaces { diff --git a/src/Avalonia.Controls/Platform/Surfaces/PixelFormat.cs b/src/Avalonia.Controls/Platform/Surfaces/PixelFormat.cs deleted file mode 100644 index c9f8eabe97..0000000000 --- a/src/Avalonia.Controls/Platform/Surfaces/PixelFormat.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Avalonia.Controls.Platform.Surfaces -{ - public enum PixelFormat - { - Rgb565, - Rgba8888, - Bgra8888 - } -} diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index a0ed19d2b4..1ba4e730d9 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -103,6 +103,7 @@ + diff --git a/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs b/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs index 1800110e68..c9f7e0f7ac 100644 --- a/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs +++ b/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs @@ -41,6 +41,20 @@ namespace Avalonia.Media.Imaging PlatformImpl = impl; } + /// + /// Initializes a new instance of the class. + /// + /// Pixel format + /// Pointer to source bytes + /// Bitmap width + /// Bitmap height + /// Bytes per row + public Bitmap(PixelFormat format, IntPtr data, int width, int height, int stride) + { + PlatformImpl = AvaloniaLocator.Current.GetService() + .LoadBitmap(format, data, width, height, stride); + } + /// /// Gets the width of the bitmap, in pixels. /// diff --git a/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs b/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs index cdec0a07a1..7dc97b022e 100644 --- a/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs +++ b/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs @@ -1,6 +1,7 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using System; using System.Collections.Generic; using System.IO; using Avalonia.Media; @@ -68,5 +69,16 @@ namespace Avalonia.Platform /// The stream to read the bitmap from. /// An . IBitmapImpl LoadBitmap(Stream stream); + + /// + /// Loads a bitmap implementation from a pixels in memory.. + /// + /// Pixel format + /// Pointer to source bytes + /// Bitmap width + /// Bitmap height + /// Bytes per row + /// An . + IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, int width, int height, int stride); } } diff --git a/src/Avalonia.Visuals/Platform/PixelFormat.cs b/src/Avalonia.Visuals/Platform/PixelFormat.cs new file mode 100644 index 0000000000..526303ebb1 --- /dev/null +++ b/src/Avalonia.Visuals/Platform/PixelFormat.cs @@ -0,0 +1,9 @@ +namespace Avalonia.Platform +{ + public enum PixelFormat + { + Rgb565, + Rgba8888, + Bgra8888 + } +} diff --git a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs index e6c493320f..b47827cb02 100644 --- a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs +++ b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs @@ -91,5 +91,10 @@ namespace Avalonia.Cairo Gtk.Application.Init(); return new Gtk.Invisible().CreatePangoContext(); } + + public IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, int width, int height, int stride) + { + throw new NotSupportedException("No proper control over pixel format with Cairo, use Skia backend instead"); + } } } diff --git a/src/Skia/Avalonia.Skia/FramebufferRenderTarget.cs b/src/Skia/Avalonia.Skia/FramebufferRenderTarget.cs index b273d6209f..b2b5a0653f 100644 --- a/src/Skia/Avalonia.Skia/FramebufferRenderTarget.cs +++ b/src/Skia/Avalonia.Skia/FramebufferRenderTarget.cs @@ -22,19 +22,6 @@ namespace Avalonia.Skia //Nothing to do here, since we don't own framebuffer } - - SKColorType TranslatePixelFormat(PixelFormat fmt) - { - if(fmt == PixelFormat.Rgb565) - return SKColorType.Rgb565; - if(fmt == PixelFormat.Bgra8888) - return SKColorType.Bgra8888; - if (fmt == PixelFormat.Rgba8888) - return SKColorType.Rgba8888; - throw new ArgumentException("Unknown pixel format: " + fmt); - } - - class PixelFormatShim : IDisposable { private readonly SKImageInfo _nfo; @@ -73,8 +60,8 @@ namespace Avalonia.Skia { var fb = _surface.Lock(); PixelFormatShim shim = null; - SKImageInfo framebuffer = new SKImageInfo(fb.Width, fb.Height, TranslatePixelFormat(fb.Format), - SKAlphaType.Opaque); + SKImageInfo framebuffer = new SKImageInfo(fb.Width, fb.Height, fb.Format.ToSkColorType(), + SKAlphaType.Premul); var surface = SKSurface.Create(framebuffer, fb.Address, fb.RowBytes) ?? (shim = new PixelFormatShim(framebuffer, fb.Address, fb.RowBytes)) .CreateSurface(); diff --git a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs index f0735bb0df..1b898f0f48 100644 --- a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs +++ b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs @@ -52,6 +52,16 @@ namespace Avalonia.Skia } } + public IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, int width, int height, int stride) + { + using (var tmp = new SKBitmap()) + { + tmp.InstallPixels(new SKImageInfo(width, height, format.ToSkColorType(), SKAlphaType.Premul) + , data, stride); + return new BitmapImpl(tmp.Copy()); + } + } + public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop) { return new Renderer(root, renderLoop); diff --git a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs index 0d0ab380c5..7540caacfe 100644 --- a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs +++ b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs @@ -1,4 +1,6 @@ +using System; using Avalonia.Media; +using Avalonia.Platform; using SkiaSharp; @@ -44,6 +46,17 @@ namespace Avalonia.Skia return new SKColor(c.R, c.G, c.B, c.A); } + public static SKColorType ToSkColorType(this PixelFormat fmt) + { + if (fmt == PixelFormat.Rgb565) + return SKColorType.Rgb565; + if (fmt == PixelFormat.Bgra8888) + return SKColorType.Bgra8888; + if (fmt == PixelFormat.Rgba8888) + return SKColorType.Rgba8888; + throw new ArgumentException("Unknown pixel format: " + fmt); + } + public static SKShaderTileMode ToSKShaderTileMode(this Media.GradientSpreadMethod m) { switch (m) diff --git a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs index 34595fecc8..913e76f48e 100644 --- a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs +++ b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs @@ -133,5 +133,10 @@ namespace Avalonia.Direct2D1 { return new WicBitmapImpl(s_imagingFactory, stream); } + + public IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, int width, int height, int stride) + { + return new WicBitmapImpl(s_imagingFactory, format, data, width, height, stride); + } } } diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs index f17c516edd..4082bf6850 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs @@ -4,6 +4,9 @@ using System; using System.IO; using Avalonia.Platform; +using Avalonia.Win32.Interop; +using PixelFormat = SharpDX.WIC.PixelFormat; +using APixelFormat = Avalonia.Platform.PixelFormat; using SharpDX.WIC; namespace Avalonia.Direct2D1.Media @@ -64,6 +67,28 @@ namespace Avalonia.Direct2D1.Media BitmapCreateCacheOption.CacheOnLoad); } + public WicBitmapImpl(ImagingFactory factory, Platform.PixelFormat format, IntPtr data, int width, int height, int stride) + { + Guid fmt; + if (format == APixelFormat.Rgb565) + fmt = PixelFormat.Format16bppBGR565; + else if (format == APixelFormat.Bgra8888) + fmt = PixelFormat.Format32bppPBGRA; + else if (format == APixelFormat.Rgba8888) + fmt = PixelFormat.Format32bppPRGBA; + else throw new ArgumentException("Unknown pixel format"); + + WicImpl = new Bitmap(factory, width, height, fmt, BitmapCreateCacheOption.CacheOnDemand); + using (var l = WicImpl.Lock(BitmapLockFlags.Write)) + { + for (var row = 0; row < height; row++) + { + UnmanagedMethods.CopyMemory(new IntPtr(l.Data.DataPointer.ToInt64() + row * l.Stride), + new IntPtr(data.ToInt64() + row * stride), (uint) l.Data.Pitch); + } + } + } + /// /// Gets the width of the bitmap, in pixels. /// diff --git a/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs b/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs index 8362305b9f..119715b5fc 100644 --- a/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs +++ b/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs @@ -9,6 +9,7 @@ using Avalonia.Win32.Interop; using SharpDX; using SharpDX.Direct2D1; using SharpDX.DXGI; +using PixelFormat = SharpDX.Direct2D1.PixelFormat; using AlphaMode = SharpDX.Direct2D1.AlphaMode; using Device = SharpDX.Direct2D1.Device; using Factory = SharpDX.Direct2D1.Factory; diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index 65a9f96b71..fe04d2c011 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -909,6 +909,9 @@ namespace Avalonia.Win32.Interop uint dwMaximumSizeLow, string lpName); + [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)] + public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count); + public enum MONITOR { MONITOR_DEFAULTTONULL = 0x00000000, diff --git a/src/Windows/Avalonia.Win32/WindowFramebuffer.cs b/src/Windows/Avalonia.Win32/WindowFramebuffer.cs index b00348d97d..4cae5af237 100644 --- a/src/Windows/Avalonia.Win32/WindowFramebuffer.cs +++ b/src/Windows/Avalonia.Win32/WindowFramebuffer.cs @@ -2,7 +2,7 @@ using System.Runtime.InteropServices; using Avalonia.Controls.Platform.Surfaces; using Avalonia.Win32.Interop; -using PixelFormat = Avalonia.Controls.Platform.Surfaces.PixelFormat; +using PixelFormat = Avalonia.Platform.PixelFormat; namespace Avalonia.Win32 { diff --git a/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs b/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs index e00d504124..b0a57f6f4a 100644 --- a/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs +++ b/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs @@ -365,6 +365,11 @@ namespace Avalonia.Input.UnitTests throw new NotImplementedException(); } + public IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, int width, int height, int stride) + { + throw new NotImplementedException(); + } + class MockStreamGeometry : Avalonia.Platform.IStreamGeometryImpl { private MockStreamGeometryContext _impl = new MockStreamGeometryContext(); diff --git a/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems b/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems index ad3b182bdf..e26ac81dda 100644 --- a/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems +++ b/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems @@ -10,6 +10,7 @@ + diff --git a/tests/Avalonia.RenderTests/Media/BitmapTests.cs b/tests/Avalonia.RenderTests/Media/BitmapTests.cs new file mode 100644 index 0000000000..e7bd1054d4 --- /dev/null +++ b/tests/Avalonia.RenderTests/Media/BitmapTests.cs @@ -0,0 +1,108 @@ +// Copyright (c) The Avalonia Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using Avalonia.Controls; +using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Controls.Shapes; +using Avalonia.Layout; +using Avalonia.Media; +using Avalonia.Media.Imaging; +using Avalonia.Platform; +using Xunit; + +#if AVALONIA_CAIRO +namespace Avalonia.Cairo.RenderTests.Media +#elif AVALONIA_SKIA +namespace Avalonia.Skia.RenderTests +#else +namespace Avalonia.Direct2D1.RenderTests.Media +#endif +{ + public class BitmapTests : TestBase + { + public BitmapTests() + : base(@"Media\Bitmap") + { + Directory.CreateDirectory(OutputPath); + } + + class Framebuffer : ILockedFramebuffer, IFramebufferPlatformSurface + { + public Framebuffer(PixelFormat fmt, int width, int height) + { + Format = fmt; + var bpp = fmt == PixelFormat.Rgb565 ? 2 : 4; + Width = width; + Height = height; + RowBytes = bpp * width; + Address = Marshal.AllocHGlobal(Height * RowBytes); + } + + public IntPtr Address { get; } + + public Size Dpi { get; } = new Size(96, 96); + + public PixelFormat Format { get; } + + public int Height { get; } + + public int RowBytes { get; } + + public int Width { get; } + + public void Dispose() + { + //no-op + } + + public ILockedFramebuffer Lock() + { + return this; + } + + public void Deallocate() => Marshal.FreeHGlobal(Address); + } + + +#if AVALONIA_SKIA + [Theory] +#else + [Theory(Skip = "Framebuffer not supported")] +#endif + [InlineData(PixelFormat.Rgba8888), InlineData(PixelFormat.Bgra8888), InlineData(PixelFormat.Rgb565)] + public void FramebufferRenderResultsShouldBeUsableAsBitmap(PixelFormat fmt) + { + var testName = nameof(FramebufferRenderResultsShouldBeUsableAsBitmap) + "_" + fmt; + var fb = new Framebuffer(fmt, 80, 80); + var r = Avalonia.AvaloniaLocator.Current.GetService(); + using (var target = r.CreateRenderTarget(new object[] { fb })) + using (var ctx = target.CreateDrawingContext()) + { + ctx.PushOpacity(0.8); + ctx.FillRectangle(Brushes.Chartreuse, new Rect(0, 0, 20, 100)); + ctx.FillRectangle(Brushes.Crimson, new Rect(20, 0, 20, 100)); + ctx.FillRectangle(Brushes.Gold, new Rect(40, 0, 20, 100)); + } + + var bmp = new Bitmap(fmt, fb.Address, fb.Width, fb.Height, fb.RowBytes); + fb.Deallocate(); + using (var rtb = new RenderTargetBitmap(100, 100)) + { + using (var ctx = rtb.CreateDrawingContext()) + { + ctx.FillRectangle(Brushes.Blue, new Rect(0, 0, 100, 100)); + ctx.FillRectangle(Brushes.Pink, new Rect(0, 20, 100, 10)); + + var rc = new Rect(0, 0, 60, 60); + ctx.DrawImage(bmp, 1, rc, rc); + } + rtb.Save(System.IO.Path.Combine(OutputPath, testName + ".out.png")); + } + CompareImages(testName); + + } + } +} diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs b/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs index ac31b3852b..7345826829 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs +++ b/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs @@ -45,6 +45,11 @@ namespace Avalonia.Visuals.UnitTests.VisualTree throw new NotImplementedException(); } + public IBitmapImpl LoadBitmap(PixelFormat format, IntPtr data, int width, int height, int stride) + { + throw new NotImplementedException(); + } + class MockStreamGeometry : IStreamGeometryImpl { private MockStreamGeometryContext _impl = new MockStreamGeometryContext(); diff --git a/tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Bgra8888.expected.png b/tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Bgra8888.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..19686464c546d3f56a55e15fc4df8bc574ecf13e GIT binary patch literal 800 zcmeAS@N?(olHy`uVBq!ia0vp^DIm0?E|u$lp4Sznk+pCI zt8&hw6|IZJx}ppYsSSFePk-;<{yg#k=k4>?e|`Nut9(N0JB8DC9H;GU)+uI> ze8#uwjBLtG>k~#GiPBBIAg^g;9psn|@-5J#JsUblxX|hXn_`Q3mNMsM`qKH18@E56 ndHCa*hZWCgD4b?9|371-;u7va=|XQ{s%G$X^>bP0l+XkKg^yP@ literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Rgb565.expected.png b/tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Rgb565.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d20008a1bde3d523b8be3c2dc29af79b52303f GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0vp^DIm_*Z1E)2cG}@ZrO^~MPgl128YzTqBOD= zu3%NpSu{k1j{g3hz18}JQTc?_cM7NPI8NKytW(S$`HXMV8QGMXK#BYB6l%hUjCbf5 z@>(+IW%|o_YA=nTHk63T%ok=2_BESn~aE`Pr+P_hqe@Y6hlb22WQ%mvv4F FO#n8jN}B)x literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Rgba8888.expected.png b/tests/TestFiles/Skia/Media/Bitmap/FramebufferRenderResultsShouldBeUsableAsBitmap_Rgba8888.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..19686464c546d3f56a55e15fc4df8bc574ecf13e GIT binary patch literal 800 zcmeAS@N?(olHy`uVBq!ia0vp^DIm0?E|u$lp4Sznk+pCI zt8&hw6|IZJx}ppYsSSFePk-;<{yg#k=k4>?e|`Nut9(N0JB8DC9H;GU)+uI> ze8#uwjBLtG>k~#GiPBBIAg^g;9psn|@-5J#JsUblxX|hXn_`Q3mNMsM`qKH18@E56 ndHCa*hZWCgD4b?9|371-;u7va=|XQ{s%G$X^>bP0l+XkKg^yP@ literal 0 HcmV?d00001 From 90a491554990b8c0a2c26f4a2fffdc6605223682 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Feb 2017 06:18:00 +0300 Subject: [PATCH 018/158] Implemented WritableBitmap --- .../Avalonia.Controls.csproj | 1 - .../Surfaces/IFramebufferPlatformSurface.cs | 1 + src/Avalonia.Visuals/Avalonia.Visuals.csproj | 3 ++ .../Media/Imaging/WritableBitmap.cs | 22 ++++++++ .../Platform}/ILockedFramebuffer.cs | 3 +- .../Platform/IPlatformRenderInterface.cs | 9 ++++ .../Platform/IWritableBitmapImpl.cs | 16 ++++++ src/Gtk/Avalonia.Cairo/CairoPlatform.cs | 5 ++ src/Gtk/Avalonia.Gtk/FramebufferManager.cs | 1 + src/Gtk/Avalonia.Gtk3/FramebufferManager.cs | 1 + src/Skia/Avalonia.Skia/BitmapImpl.cs | 45 +++++++++++++++-- .../Avalonia.Skia/PlatformRenderInterface.cs | 5 ++ src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs | 11 ++++ .../Avalonia.Direct2D1.csproj | 1 + .../Avalonia.Direct2D1/Direct2D1Platform.cs | 6 +++ .../Media/Imaging/WicBitmapImpl.cs | 25 +++++----- .../Media/Imaging/WritableWicBitmapImpl.cs | 47 ++++++++++++++++++ .../Avalonia.Direct2D1/PrimitiveExtensions.cs | 11 ++++ .../Avalonia.Win32/FramebufferManager.cs | 1 + .../Avalonia.Win32/WindowFramebuffer.cs | 1 + .../InputElement_HitTesting.cs | 5 ++ .../Avalonia.RenderTests/Media/BitmapTests.cs | 33 +++++++++++- .../VisualTree/MockRenderInterface.cs | 5 ++ ...BitmapShouldBeUsable_Bgra8888.expected.png | Bin 0 -> 147998 bytes ...BitmapShouldBeUsable_Rgba8888.expected.png | Bin 0 -> 90938 bytes ...BitmapShouldBeUsable_Bgra8888.expected.png | Bin 0 -> 147998 bytes ...BitmapShouldBeUsable_Rgba8888.expected.png | Bin 0 -> 90938 bytes 27 files changed, 237 insertions(+), 21 deletions(-) create mode 100644 src/Avalonia.Visuals/Media/Imaging/WritableBitmap.cs rename src/{Avalonia.Controls/Platform/Surfaces => Avalonia.Visuals/Platform}/ILockedFramebuffer.cs (91%) create mode 100644 src/Avalonia.Visuals/Platform/IWritableBitmapImpl.cs create mode 100644 src/Windows/Avalonia.Direct2D1/Media/Imaging/WritableWicBitmapImpl.cs create mode 100644 tests/TestFiles/Direct2D1/Media/Bitmap/WritableBitmapShouldBeUsable_Bgra8888.expected.png create mode 100644 tests/TestFiles/Direct2D1/Media/Bitmap/WritableBitmapShouldBeUsable_Rgba8888.expected.png create mode 100644 tests/TestFiles/Skia/Media/Bitmap/WritableBitmapShouldBeUsable_Bgra8888.expected.png create mode 100644 tests/TestFiles/Skia/Media/Bitmap/WritableBitmapShouldBeUsable_Rgba8888.expected.png diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index cb1e421470..f12f07070e 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -59,7 +59,6 @@ - diff --git a/src/Avalonia.Controls/Platform/Surfaces/IFramebufferPlatformSurface.cs b/src/Avalonia.Controls/Platform/Surfaces/IFramebufferPlatformSurface.cs index 84988e912f..4dc96a074d 100644 --- a/src/Avalonia.Controls/Platform/Surfaces/IFramebufferPlatformSurface.cs +++ b/src/Avalonia.Controls/Platform/Surfaces/IFramebufferPlatformSurface.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Avalonia.Platform; namespace Avalonia.Controls.Platform.Surfaces { diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index 1ba4e730d9..812e9d48ad 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -69,6 +69,7 @@ + @@ -102,7 +103,9 @@ + + diff --git a/src/Avalonia.Visuals/Media/Imaging/WritableBitmap.cs b/src/Avalonia.Visuals/Media/Imaging/WritableBitmap.cs new file mode 100644 index 0000000000..5c5b516ddd --- /dev/null +++ b/src/Avalonia.Visuals/Media/Imaging/WritableBitmap.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Avalonia.Platform; + +namespace Avalonia.Media.Imaging +{ + /// + /// Holds a writable bitmap image. + /// + public class WritableBitmap : Bitmap + { + public WritableBitmap(int width, int height, PixelFormat? format = null) + : base(AvaloniaLocator.Current.GetService().CreateWritableBitmap(width, height, format)) + { + } + + public ILockedFramebuffer Lock() => ((IWritableBitmapImpl) PlatformImpl).Lock(); + } +} diff --git a/src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs b/src/Avalonia.Visuals/Platform/ILockedFramebuffer.cs similarity index 91% rename from src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs rename to src/Avalonia.Visuals/Platform/ILockedFramebuffer.cs index b62060b029..92ec2877ab 100644 --- a/src/Avalonia.Controls/Platform/Surfaces/ILockedFramebuffer.cs +++ b/src/Avalonia.Visuals/Platform/ILockedFramebuffer.cs @@ -1,7 +1,6 @@ using System; -using Avalonia.Platform; -namespace Avalonia.Controls.Platform.Surfaces +namespace Avalonia.Platform { public interface ILockedFramebuffer : IDisposable { diff --git a/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs b/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs index 7dc97b022e..ef58d52b4f 100644 --- a/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs +++ b/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs @@ -56,6 +56,15 @@ namespace Avalonia.Platform /// An . IRenderTargetBitmapImpl CreateRenderTargetBitmap(int width, int height); + /// + /// Creates a writable bitmap implementation. + /// + /// The width of the bitmap. + /// The height of the bitmap. + /// Pixel format (optional). + /// An . + IWritableBitmapImpl CreateWritableBitmap(int width, int height, PixelFormat? format = null); + /// /// Loads a bitmap implementation from a file.. /// diff --git a/src/Avalonia.Visuals/Platform/IWritableBitmapImpl.cs b/src/Avalonia.Visuals/Platform/IWritableBitmapImpl.cs new file mode 100644 index 0000000000..b736c11dab --- /dev/null +++ b/src/Avalonia.Visuals/Platform/IWritableBitmapImpl.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Avalonia.Platform +{ + /// + /// Defines the platform-specific interface for a . + /// + public interface IWritableBitmapImpl : IBitmapImpl + { + ILockedFramebuffer Lock(); + } +} diff --git a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs index b47827cb02..9cf16312e9 100644 --- a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs +++ b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs @@ -96,5 +96,10 @@ namespace Avalonia.Cairo { throw new NotSupportedException("No proper control over pixel format with Cairo, use Skia backend instead"); } + + public IWritableBitmapImpl CreateWritableBitmap(int width, int height, PixelFormat? fmt) + { + throw new NotSupportedException("No proper support with Cairo, use Skia backend instead"); + } } } diff --git a/src/Gtk/Avalonia.Gtk/FramebufferManager.cs b/src/Gtk/Avalonia.Gtk/FramebufferManager.cs index 0c9ed44274..5ec49fb91f 100644 --- a/src/Gtk/Avalonia.Gtk/FramebufferManager.cs +++ b/src/Gtk/Avalonia.Gtk/FramebufferManager.cs @@ -1,5 +1,6 @@ using System; using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Platform; namespace Avalonia.Gtk { diff --git a/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs b/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs index e52f0efb81..41e174bce4 100644 --- a/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs +++ b/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Platform; namespace Avalonia.Gtk3 { diff --git a/src/Skia/Avalonia.Skia/BitmapImpl.cs b/src/Skia/Avalonia.Skia/BitmapImpl.cs index 7d99156a1d..b564734a47 100644 --- a/src/Skia/Avalonia.Skia/BitmapImpl.cs +++ b/src/Skia/Avalonia.Skia/BitmapImpl.cs @@ -9,7 +9,7 @@ using SkiaSharp; namespace Avalonia.Skia { - class BitmapImpl : IRenderTargetBitmapImpl + class BitmapImpl : IRenderTargetBitmapImpl, IWritableBitmapImpl { public SKBitmap Bitmap { get; private set; } @@ -20,11 +20,11 @@ namespace Avalonia.Skia PixelWidth = bm.Width; } - public BitmapImpl(int width, int height) + public BitmapImpl(int width, int height, PixelFormat? fmt = null) { PixelHeight = height; PixelWidth = width; - var colorType = SKImageInfo.PlatformColorType; + var colorType = fmt?.ToSkColorType() ?? SKImageInfo.PlatformColorType; var runtime = AvaloniaLocator.Current?.GetService()?.GetRuntimeInfo(); if (runtime?.IsDesktop == true && runtime?.OperatingSystem == OperatingSystemType.Linux) colorType = SKColorType.Bgra8888; @@ -38,10 +38,21 @@ namespace Avalonia.Skia public void Save(string fileName) { + #if DESKTOP + if(Bitmap.ColorType != SKColorType.Bgra8888) + { + using (var tmp = new BitmapImpl(Bitmap.Copy(SKColorType.Bgra8888))) + tmp.Save(fileName); + return; + } + IntPtr length; using (var sdb = new System.Drawing.Bitmap(PixelWidth, PixelHeight, Bitmap.RowBytes, - System.Drawing.Imaging.PixelFormat.Format32bppArgb, Bitmap.GetPixels(out length))) + + System.Drawing.Imaging.PixelFormat.Format32bppArgb, + + Bitmap.GetPixels(out length))) sdb.Save(fileName); #else //SkiaSharp doesn't expose image encoders yet @@ -96,5 +107,31 @@ namespace Avalonia.Skia data.SaveTo(stream); } } + + class BitmapFramebuffer : ILockedFramebuffer + { + private SKBitmap _bmp; + + public BitmapFramebuffer(SKBitmap bmp) + { + _bmp = bmp; + _bmp.LockPixels(); + } + + public void Dispose() + { + _bmp.UnlockPixels(); + _bmp = null; + } + + public IntPtr Address => _bmp.GetPixels(); + public int Width => _bmp.Width; + public int Height => _bmp.Height; + public int RowBytes => _bmp.RowBytes; + public Size Dpi { get; } = new Size(96, 96); + public PixelFormat Format => _bmp.ColorType.ToPixelFormat(); + } + + public ILockedFramebuffer Lock() => new BitmapFramebuffer(Bitmap); } } diff --git a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs index 1b898f0f48..72f8d08d44 100644 --- a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs +++ b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs @@ -84,5 +84,10 @@ namespace Avalonia.Skia throw new Exception("Skia backend currently only supports framebuffer render target"); return new FramebufferRenderTarget(fb); } + + public IWritableBitmapImpl CreateWritableBitmap(int width, int height, PixelFormat? format = null) + { + return new BitmapImpl(width, height, format); + } } } diff --git a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs index 7540caacfe..8591f9218a 100644 --- a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs +++ b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs @@ -57,6 +57,17 @@ namespace Avalonia.Skia throw new ArgumentException("Unknown pixel format: " + fmt); } + public static PixelFormat ToPixelFormat(this SKColorType fmt) + { + if (fmt == SKColorType.Rgb565) + return PixelFormat.Rgb565; + if (fmt == SKColorType.Bgra8888) + return PixelFormat.Bgra8888; + if (fmt == SKColorType.Rgba8888) + return PixelFormat.Rgba8888; + throw new ArgumentException("Unknown pixel format: " + fmt); + } + public static SKShaderTileMode ToSKShaderTileMode(this Media.GradientSpreadMethod m) { switch (m) diff --git a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj index a055a337eb..ba117d72e9 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -70,6 +70,7 @@ + diff --git a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs index 913e76f48e..d5b0f22090 100644 --- a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs +++ b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs @@ -10,6 +10,7 @@ using Avalonia.Media; using Avalonia.Platform; using Avalonia.Controls; using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Direct2D1.Media.Imaging; using Avalonia.Rendering; namespace Avalonia @@ -119,6 +120,11 @@ namespace Avalonia.Direct2D1 return new RenderTargetBitmapImpl(s_imagingFactory, s_d2D1Device.Factory, width, height); } + public IWritableBitmapImpl CreateWritableBitmap(int width, int height, PixelFormat? format = null) + { + return new WritableWicBitmapImpl(s_imagingFactory, width, height, format); + } + public IStreamGeometryImpl CreateStreamGeometry() { return new StreamGeometryImpl(); diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs index 4082bf6850..2dd7acd9f9 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs @@ -56,29 +56,26 @@ namespace Avalonia.Direct2D1.Media /// The WIC imaging factory to use. /// The width of the bitmap. /// The height of the bitmap. - public WicBitmapImpl(ImagingFactory factory, int width, int height) + /// Pixel format + public WicBitmapImpl(ImagingFactory factory, int width, int height, APixelFormat? pixelFormat = null) { + if (!pixelFormat.HasValue) + pixelFormat = APixelFormat.Rgba8888; + _factory = factory; + PixelFormat = pixelFormat; WicImpl = new Bitmap( factory, width, height, - PixelFormat.Format32bppPBGRA, + pixelFormat.Value.ToWic(), BitmapCreateCacheOption.CacheOnLoad); } public WicBitmapImpl(ImagingFactory factory, Platform.PixelFormat format, IntPtr data, int width, int height, int stride) { - Guid fmt; - if (format == APixelFormat.Rgb565) - fmt = PixelFormat.Format16bppBGR565; - else if (format == APixelFormat.Bgra8888) - fmt = PixelFormat.Format32bppPBGRA; - else if (format == APixelFormat.Rgba8888) - fmt = PixelFormat.Format32bppPRGBA; - else throw new ArgumentException("Unknown pixel format"); - - WicImpl = new Bitmap(factory, width, height, fmt, BitmapCreateCacheOption.CacheOnDemand); + WicImpl = new Bitmap(factory, width, height, format.ToWic(), BitmapCreateCacheOption.CacheOnDemand); + PixelFormat = format; using (var l = WicImpl.Lock(BitmapLockFlags.Write)) { for (var row = 0; row < height; row++) @@ -89,6 +86,8 @@ namespace Avalonia.Direct2D1.Media } } + protected APixelFormat? PixelFormat { get; } + /// /// Gets the width of the bitmap, in pixels. /// @@ -120,7 +119,7 @@ namespace Avalonia.Direct2D1.Media if (_direct2D == null) { FormatConverter converter = new FormatConverter(_factory); - converter.Initialize(WicImpl, PixelFormat.Format32bppPBGRA); + converter.Initialize(WicImpl, SharpDX.WIC.PixelFormat.Format32bppPBGRA); _direct2D = SharpDX.Direct2D1.Bitmap.FromWicBitmap(renderTarget, converter); } diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WritableWicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WritableWicBitmapImpl.cs new file mode 100644 index 0000000000..06eb26b407 --- /dev/null +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WritableWicBitmapImpl.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Avalonia.Platform; +using SharpDX.WIC; +using PixelFormat = Avalonia.Platform.PixelFormat; + +namespace Avalonia.Direct2D1.Media.Imaging +{ + class WritableWicBitmapImpl : WicBitmapImpl, IWritableBitmapImpl + { + public WritableWicBitmapImpl(ImagingFactory factory, int width, int height, PixelFormat? pixelFormat) + : base(factory, width, height, pixelFormat) + { + } + + class LockedBitmap : ILockedFramebuffer + { + private readonly BitmapLock _lock; + private readonly PixelFormat _format; + + public LockedBitmap(BitmapLock l, PixelFormat format) + { + _lock = l; + _format = format; + } + + + public void Dispose() + { + _lock.Dispose(); + } + + public IntPtr Address => _lock.Data.DataPointer; + public int Width => _lock.Size.Width; + public int Height => _lock.Size.Height; + public int RowBytes => _lock.Stride; + public Size Dpi { get; } = new Size(96, 96); + public PixelFormat Format => _format; + + } + + public ILockedFramebuffer Lock() => new LockedBitmap(WicImpl.Lock(BitmapLockFlags.Write), PixelFormat.Value); + } +} diff --git a/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs b/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs index 87be89d10c..118b6deb97 100644 --- a/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs +++ b/src/Windows/Avalonia.Direct2D1/PrimitiveExtensions.cs @@ -88,6 +88,17 @@ namespace Avalonia.Direct2D1 return CapStyle.Triangle; } + public static Guid ToWic(this Platform.PixelFormat format) + { + if (format == Platform.PixelFormat.Rgb565) + return SharpDX.WIC.PixelFormat.Format16bppBGR565; + if (format == Platform.PixelFormat.Bgra8888) + return SharpDX.WIC.PixelFormat.Format32bppPBGRA; + if (format == Platform.PixelFormat.Rgba8888) + return SharpDX.WIC.PixelFormat.Format32bppPRGBA; + throw new ArgumentException("Unknown pixel format"); + } + /// /// Converts a pen to a Direct2D stroke style. /// diff --git a/src/Windows/Avalonia.Win32/FramebufferManager.cs b/src/Windows/Avalonia.Win32/FramebufferManager.cs index ecd05f41b4..f0a6430918 100644 --- a/src/Windows/Avalonia.Win32/FramebufferManager.cs +++ b/src/Windows/Avalonia.Win32/FramebufferManager.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Platform; using Avalonia.Win32.Interop; namespace Avalonia.Win32 diff --git a/src/Windows/Avalonia.Win32/WindowFramebuffer.cs b/src/Windows/Avalonia.Win32/WindowFramebuffer.cs index 4cae5af237..fe4fe5c668 100644 --- a/src/Windows/Avalonia.Win32/WindowFramebuffer.cs +++ b/src/Windows/Avalonia.Win32/WindowFramebuffer.cs @@ -1,6 +1,7 @@ using System; using System.Runtime.InteropServices; using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Platform; using Avalonia.Win32.Interop; using PixelFormat = Avalonia.Platform.PixelFormat; diff --git a/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs b/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs index b0a57f6f4a..a70130990a 100644 --- a/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs +++ b/tests/Avalonia.Input.UnitTests/InputElement_HitTesting.cs @@ -370,6 +370,11 @@ namespace Avalonia.Input.UnitTests throw new NotImplementedException(); } + public IWritableBitmapImpl CreateWritableBitmap(int width, int height, PixelFormat? fmt) + { + throw new NotImplementedException(); + } + class MockStreamGeometry : Avalonia.Platform.IStreamGeometryImpl { private MockStreamGeometryContext _impl = new MockStreamGeometryContext(); diff --git a/tests/Avalonia.RenderTests/Media/BitmapTests.cs b/tests/Avalonia.RenderTests/Media/BitmapTests.cs index e7bd1054d4..1fd5d1eda6 100644 --- a/tests/Avalonia.RenderTests/Media/BitmapTests.cs +++ b/tests/Avalonia.RenderTests/Media/BitmapTests.cs @@ -102,7 +102,38 @@ namespace Avalonia.Direct2D1.RenderTests.Media rtb.Save(System.IO.Path.Combine(OutputPath, testName + ".out.png")); } CompareImages(testName); - + } + +#if AVALONIA_CAIRO + //wontfix +#else + [Theory] +#endif + [InlineData(PixelFormat.Bgra8888), InlineData(PixelFormat.Rgba8888)] + public void WritableBitmapShouldBeUsable(PixelFormat fmt) + { + var writableBitmap = new WritableBitmap(256, 256, fmt); + + var data = new int[256 * 256]; + for (int y = 0; y < 256; y++) + for (int x = 0; x < 256; x++) + data[y * 256 + x] =(int)((uint)(x + (y << 8)) | 0xFF000000u); + + + using (var l = writableBitmap.Lock()) + { + for(var r = 0; r<256; r++) + { + Marshal.Copy(data, r * 256, new IntPtr(l.Address.ToInt64() + r * l.RowBytes), 256); + } + } + + + var name = nameof(WritableBitmapShouldBeUsable) + "_" + fmt; + + writableBitmap.Save(System.IO.Path.Combine(OutputPath, name + ".out.png")); + CompareImages(name); + } } } diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs b/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs index 7345826829..303736be9c 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs +++ b/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs @@ -50,6 +50,11 @@ namespace Avalonia.Visuals.UnitTests.VisualTree throw new NotImplementedException(); } + public IWritableBitmapImpl CreateWritableBitmap(int width, int height, PixelFormat? fmt) + { + throw new NotImplementedException(); + } + class MockStreamGeometry : IStreamGeometryImpl { private MockStreamGeometryContext _impl = new MockStreamGeometryContext(); diff --git a/tests/TestFiles/Direct2D1/Media/Bitmap/WritableBitmapShouldBeUsable_Bgra8888.expected.png b/tests/TestFiles/Direct2D1/Media/Bitmap/WritableBitmapShouldBeUsable_Bgra8888.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..ef77cbe0f2f6e30364fe5c47b901de0fd76961a4 GIT binary patch literal 147998 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

abLWPX=qYNVfNwr2-fI4s#FMl37KibUq4 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 PesP+$lT{tXC+>d$Igp>~ literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Skia/Media/Bitmap/WritableBitmapShouldBeUsable_Bgra8888.expected.png b/tests/TestFiles/Skia/Media/Bitmap/WritableBitmapShouldBeUsable_Bgra8888.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..ef77cbe0f2f6e30364fe5c47b901de0fd76961a4 GIT binary patch literal 147998 zcmeI4`IA-Una7{!@}6EZQx$5GsxhXkhRl$Wkz18kGc~=bC>(_I&YK_R4|q*h|KNN;>N z?7!^?YE|v5TB1X{D=*&d*pJIwrY&AaH1L;y`kQ~X_O+En=9T)o+Qtnll4m!^`&C4! z_QBO39qI10|5)>XKfb;&>vtC?n)-b3Z*7r*w{^B(vFo-^k0xf{_Q~NJKfLX;-@#oH;#RJZ0Li>J~?uG&#}+mFCDS5^U#==H-7p~X2r%&-n!-Eji0?Y=&lQ$Z)V@W z@ael%PhR-s?V8}iX9d@63M&0@FZyeH3QwCK z1WWz3-G%4Ok>DeLZEs<-*%jRG_jVO_m^XrV{obC!R`YW3nBUu7*lpeqzVUl|^R9U+ zDD|tl^4rWm23!5Ap8OW`y#*L0a}<|n~!zoy4*G2agw z{F-jF)4Un{*01R`o6L?N>leDrv*z{SpkL@Q&zKj3wSJ-7>@x2Ly?&wBJY}{9Rerw9 zY&Wk4ZGOJTJZ)YGn*4mXdCt5YobmI$X0zEH)cB^$>@Wv|f^T}vR?`;beba4rn?hjx z-wvdafc83Q0eUcx2TgXwPC!qE}{B*;q$ z`nhFvIc=kn5db8}OZcLc=1?6+9i0R~g1m&YgXr&R8;>k;2Lm8MUc#v=I>FIWJ&Ya# zK!Uu4&ueHJjbv9*8~_O+O2|{I(s8P%(F}kDc?tFq=r0CD=nyfBHN6HH`#7LWmN+ETzS?l3N{}20((mgs%tDcj(tVveX?0fCPC7r>m%w zTTAr_dK3T&@)G9bjuHSQ$V;$?pn-H7{gL(oAR$Bv_C?TgTF)Jh&Hx}mUc$LSw2}VE z`%2vr07#IR@NpHL<&IKaMNa@AL0-b88X8Q^>=nfdVmgadkFv%q-`DUAR? zLWmOb)Tg`zHP9UlfCPC7_7LQ_8CpRb7yt?K66_&pD6OUA+*bmC1bGSe5HyJHqVrS) zKthNT?2Di#dYtASEdWReQG#8dn69H3*C_xb$V;#bl+ukfhwA{45TXRTKnXpQZr~FN015IE>;h%< zGJ1$l03abm3C3xS>WNg&qZI%W7K@ zm(cyZ9{>pRNI*sQ{25FClPpNj--qa}odvAxf|d6xa21CGSxHNRXFc7bvY4 z)4jY000|*VunQE^lPSfG3IGZ666^w{^n9AnjQ~gpQG#8dgq}q=@ks@M1bGQ|fiikI zJK!8 zr8RsQ00|*VunQE^Q)xJ_R{%(mmtYqtr5Dn2UJrnT5GB|JO6Uf>E&n=_YVQTG||vs8}3)cSN(+vznJmbC{TT4 z+#0@EUTmOzPl>;8;>8rfUXd@TSHU;EcSRvh^^0sG&Y zUqxij*4NcG{%!n@{)&DVeOdP>v@0^9qIfj`667VE&${2I*^vq5#nAvrke6WJ2E9oi zMkZ7i#{nQgUV?oaw1cjX94#we4uAxC3HEK!>-0wCXhrc_03^suuy2E2qz5BM%Zpb5 zAVFS&eH-*H^+b+V7Ow|Dg1iL#HfSr2h-@e;jsie}yaf9;=v8_-vZ11Q4FD44CD^w? zFVKp}hVtT-07#IRVBZG4O&>=#R2HuTK!Usk`!;Ad-4!`sR=ffL3Gx!`+n|H=e&l>b zaV!85H+b^_@y4*E^6OC$3 z%t`?uL0*ClD5-N)%L)JqAxbb#G_I%7DBhv~kRUI?E>K!8qPuwu01`r!U>7K+>nO%` z3IGZ666^w{bR*5-IshbuD8VjJLeHcd_=EyLg1iK~KpDM^9^w-KNC;7aaayB#B9-%K z1%L#334zm^)N`qxM*|=sL;lE~6dJ-S z6#x?CCD;W@=>@cyR{|g*L%AE=T3Gx!`0%i0HdXzf>kPxB-$)XN^zqC zK!UskyFe*DpXPHT01`r!U>7K%XVFc3QUM@AUV>eqj9yL;^GN_Cgebu{9Z@}r2Jm4=Vs9$V;#bl-5gW4Ic(TLWmOV0>$)H8qVt# z021US*ab@Ig|wX410W$p33h=Jx`FQGvkCwS@)GO;k2{Mw-Vn0gw=)1iL^9ZzkQyA1DAM$V;#bl<}6)I{p9v2_Z@_PJ7gwNR>QJ z0U$wMLg2I~y}2}l#{nQALOl>L631401`r!V4RkyS4*Wl zOaUN4UP9osB)vH_m4^W!Aw&swf#P00jp3IR021US*ab>^i)j_V1b~DPCD;Xud6Ox_ z%M<_-7LkEvHBLGyoDplwh2`s5glQ z@f`{P3GxyGr!VQvqXxbM00|*VunQFTW>A)oD*zASElxBIfCPC7K}Oe6jO$c127m;434TU5(j2aH zqA36*$V<4C(KG1=KB1xs03^suu>Tpqj2_|>P80wMAxbbAJ(0?Jv}%n4AVFS&y#vjq zdLHexCIOHjFTvh{rqeaNU$w>okRUI?-hr0T{k-34O#>i7UV^;?O`##YQnkhakRUI? z-hmd-VqWRArT~y2FTvh{X49?Qsag{NNRXFc??5Z)QSNkF0gw=)1bYXnC5MwL7X?6q zyaam(nnRO0>Ex0CNRXFc??Cl*CGSzWH~FUlAVFTj#f&$NuHc=jIu7`2m9XwN!zK|;jMUfF zHvWJ9X9i|8KS=~SlykRUH1$ar;>;F+pA27m;434X?Fq>a3qYWSk+O8_82UV^;?ovDeOPk3z3(3CCkSv2Rwvte{OLfb> zXYE$Xw`-Sf-)^bfty{N#eZQx^zwe*bIj{3Ozk6N|hxyO($8#Q^m-pxONp^O!5#pES zClCliG+QfI0)gYxj~oPEo=@Mr!>a@T^(w;EhC-+tlwbVxf-A_v(Skr|$P{?*%l+v! zU#P8D1c4yj{;w~N?gQ0y0^wr?&C0?(YNz16WsMsA!kb#nhOX{=_}`x&#%i8uvq&8C zw>}b+TDX)oT6vv#DPk$Z@yc3LyqmdH#FBfglvj-;ISKlSrQYvQ)_IY%nNy6J)In0# z?6q~`cV(vBVJmAd+HU62XC@EOl~<4VI0=U{QzvGX*Szi7%)#%P)Fx4?(W&9YXXlzS znp3JZr?HuPm1}aJd+Dm5tDS`QxTZe1Q>ycO_2y-=qe)$crJA>QI|*zXO}TreRQsR1 zH!n9GO&*LaUHy;8P9jG}Qy;x5UGvxDAp(znQmde^M!WPNFI7KfB+XZAMtX>gte@QL z;Ja!pZ%{B$KXrV-SLbEk5T{gQQm2-$X20hkzei)r&$YhVzj_Yw7&Ru}4)I<6@cy9i zp~lpIJoR1k?*0&maClO?{FFww@gSd5c*+=SN^8M*h+8K-x!-$g)xD-cq5a{h4=1K{ z{%9Inrnr>UZ9b(r6g4QYb1CKCjVbNlqK1}lSV|s>nOgnJn?aG|OR2xSpIYVBqil!TL&>F zGi{cwq*i0=C_Bo`ctuxI&F^uLYGkHAomEnA?r~IHVrIUVIHz=4!-1IMnl_ztj#Q!H zDAVVfvE+VEdO$QmKW!?_hg2?oTe?d>{Z_D0o%=kUTN44<&fYjB-^nX6} zQNMoww&Lr?%)jI(l@g5yh#BE&GptEcmGNzv!SIZi-jgb4n+7E7!qb19m?Zz$bX(zB zc;-9vN#)F_0rBFcw1pd!YL}vJ%RO4k_#|7ZIhHN#3#okR+eMY_(T}^Jh*TN~BQD{D^w(_m!CJTO-JQaxw z=}t`xnw?95eolq_T+JryRWA9f+$&^%uCZ|3<5FmPr$X`f;7yjYBY9-Q3Ypu%7WUgl z3XHB)DExDAla1*}zD{I?+&>mAHXj)&-0-Sm(LkA{M^wE+shj<-;a8uGP6 z0^}Z!w>lkaC|v(EVC6fL77O99JXQHQ>28x&np0ST0c%cvp}ECcCoF%p_nhp#=2pl3 zVTEQBbBcdNw^%B^$Wu3;lNpL`wcq)oVBL*5h2P$`*lc)_zb0l*?w7Z%n~%RJ-1vTO z1cLr8ePS}tH;i$G5Zv2R%KmukNt)vx07)aWxCcHc6upp zam<`D!vGC?lRmfD6!$XyE!B2w&%2!}xKn0yu-bn8ld+QthGlw=yX_1L#^Q3Xl&#&j z+urQKSZqdQnZb_7cI&Q8l1`>@H2|Y>o=djeDbuGpPs#EpMLJ;xHGkWYxjEgo8G+~n;zn4u>F3Y z(bdbRik|wdJ9@u=!|RBXr{t$~ZH)W$G9u!#S<{9=#{DLP5wWS>)B0PR`qtJ(oGP4{ zHagtYzy8_FlZocjdYhyA42oaIoxL%=_CQp>*`t@SnK9D_yWaGzyZQ1|$@}SbC*JgL z{Gh6&R80`Yw>r?bIv>tWN}S^H=eSgjm3e6z6!C=mcvW*^k}XL^{B*UIs;OQQP0LR_ zv8h9K1D~y}idc3$o1|)@X-iw>nw@Zkt-4;O$Cj+0eY%#eYG%?y(+ST`yfLe~kz2!7 zncpqGOrqRaO@pRs=a$fzQ*JI|Nz?IpK#||MhbB zd&owYPhSl2H#586t8?gb;!jWgH!e5sQ5KGfFPEP&RyXd|bc#s0%$hM@(bS`+6LI>2 z_l)Vfre5v+5sB9)W;TdK^{6VojIT1EFP8u z=n$7;h=D_Fg&_tGu^5IJI>b05h7NHJh8Q@+bPO?Yh?y8-=n&(K7&^oi7-HZMyJLuf zL+pwnh7K{#h@nG#5km|d;z$fJaEM1S#K0l$!5J}hh|4j=z#(?P5Cex;A43csVw@2} zhxh`97&ycs7-HZMH)4pPLyR+G=nz+7h=D`wjUfgOaX5w;I>b05h7R#13^8zsV=%

abLWPX=qYNVfNwr2-fI4s#FMl37KibUq4 z(Wv3BSxk2}Styuhb3{Lj;Xo$~c=b{bg=b}Z&yq!=du@*MJ7-ZODtWCnsbO}`OxK)B z!2nI0=vB@PJNHWdEj84Gdz`bk-Ki8lSYvZcb~uY_Sjp!YOpVw!%=EZYDYP%x=BVi~ z!zr>-V8M~u@0tNkLx}(Ut44OkAzgvD+ zWT0-g*Fd0fM1FUSRDG7URv@3fS68@4J#$NKpwM2g?juI^49Ac_f$ig6hYrRpsSz{G&-ucWP_bQ&XHP-u{ zIG;Uor;0-;*vh|PI497sid#F_dhdhb+(TEYmMJV+1zj6Hvp=$G`T9lc1Ah*mJ^m_) zuuP`ICqXyIS1^c6Ri<-ymu_xYS`epreh0l$_e`)u5RXBAXUM$n+30~F4gs$Yzufwq z0IeYI)n1)@?$+lXtPNTwH{KC=wf@Y$kf7yexUhf5-br;?CrOm@S$eh+i+Qa`VvJ;pdl|7vx`QOukZkEaO)TLek%-AOiYt@Bl3}FU6ygQ6xW0TG8BVxpRq8!YRQPJ*`P`NpWF`<*+3xG%daQT#EVK*x`VD;Qx(U13XJ47S|5!2`r*{X-u{MGj7{pWrF))a05yZeCHbD@7&yfBbK)i$?1_rStf*2UY zs}RJ%Aa+L(1B194C&b_LM7wX95L+XNfkAv8K@1GywFqKh5I;c>1A}-if*2UYdl1CH zAijejh6XWCh@nAjgCGV5aUFsf7{u!l#K0i_6G03NVj%=EFop z7#hSE5yZeCHbW2tgZMRq7#PF~2x4Fmn<9vTK^%!71_tqCoDf5U7|#$xgZKi17#PIs z5X8VBeuf|h2Jw0XF))aaAc%oM{0cz~4Pu-SLxUL45JQ9b5`q{Q#2XRBz##sBApQ@C zKN>iT(BhN`gqCYv|FwHKqWjZ}NAgRj<)?LRjQjL5BI2@H(}qFD{U(DEv8mqE`dgd& z*49OwDx8=$I^5L1{@KfuiC@1(mxmX(=ziX!`_cFt);C6f^%h-03EZOld5iAHu%veR zDUEL9K|ZJOlrh$n)`Ia6w@!F+zxULtdrgBv`@>ToPE6_i(KNJ7ap|kK=t`4tY1rqb zVIO9`WqspUZ_(BD#9P8X-xBt|TUj_FzFdCBSlzf+(X8-ZQ4_ zntHYOMb-4@zn?hEHO3Ww#X%Fju6 zo3zrL!U_ynbMgz#E!H|=`K!I>WbZY%I_?iEG@F=H{3E)>^6R(gwsYfSB|bk^;sgwc zsR-gP^GzTSry+>H%r~JxtcD;42JtooF))bJ5X8VB_Cyc^gE$O93=HBK1o4-D_yd8M zj35REu>*n_7{qxvA^!3Yf2awu7lIfV#3=}3U=X__h=D;Ij35RE@fd;_7{q}HVqg#t zAc&zsj1yvL5N}5i1A{mNK@1FHZv-(gh@%n2z#x8!AO;4p6oMES#99bqU=Vxagcuma z^>~K(%PnD0XNZ###K0hSMGymnH~>Km4B~zSF))Zd5X8VBu0;?-gBT~o&>+S$#Lys4 zM-T&pcpHKk7{mt=#K0i_6+sLPVj~1GFo;7C#K0iFj}u~O5aStQXb`6&h=D=ufglD3 z@je7GFo+)_h=DHptC+6)&2n2scnw5pSZkB~$Ag`rNS147N>5>*G=r7Y9Mb>4| z90K{>^1C7fb+f$&0)->;yJMv4v#hlO`Ru*A!aeGlTWSM^_Ih<6F{)=ch6D<1AMZMJ zs6Kng(?DPxKSdlv;~1yK&^X5P#Lzg-L>vR-cqif*7{|vD$G|v#_czD!hoEzcS)I(8w=0ohtCulu)NA@;$anCjK$n%lsVtffm{@M_<7x1m@lgf3n<-sW+&p-AB= zeZ}?hFC_ulsT(@{x8}y%%x}5ygW341yi7?nmXG2bM`Ve{lO#&{EIr$Z#k^J|F-9`Q zy^L5S-9eISNVfEzCYErKNW^3s#g)lmNw7(hH8jg@ql{ufI!Qdgm*UaLD3YHgt!VDG z+_}Uk;gn#Dp4Ozeq`0uea@Z0TnwDODF2(%rY_T&nlr867ie&GwrGBWf-0{SvgvXFg zOb@2G6^yW?uCOI923u}_Fj6cW$rdkKq-?!5Ql$8bz2c`u%UyqtlyC^rMNi4JIVb3` zh-q|*a+!9|F1=zt2fA2xew%xxUXjcIUFvdvyZ5|a3Afhl#{c^eCt`@9L#&4(1`hEZ z4Do*^a4;d(!w>_DxEn(Z9AXxV7+S=m7-HZMYhs9jLtKR+h7K``7&^pvF~q;!_6fty&M=->|Ay&f>1Bdu5h8Q};C}QXk|BN994)IzHF>r|QVTgf4Jb@yH z4)GX<7&ye*7-HZM|A--m4l#-tI>h%d#K0k5k0AyQ@gEps;1HXmh=D`=9M2K|?+v6d z$JbOb#K0lW#1KP=7)1;nVmwC-9by9vF>r{7FvP$izJVf!4l$l1h7R#+3^8zsFJXwG zLyRJZ4l$l1h7PeAh8Q@+zhQ`hLmY!5h7K{FBZdyKI))fH#3dMF=n$ibp+k)4h@nHg z4nqta;$JYtz#)E*B8Cnzo+E}1@fr*wz>F&yY*0k2-_q42D1?^&`)bg#{Ee&;NTL?y4aCN<2?ndzESDHxz>6TQlrVdq}S zzomwHaF28LwmX%=2WxDO$qr{x4J-K^gQ*eQhM68$Duwn1+Z;6=W;jJw3hY><9zHUh zz4KM2$gxG66Fi@uFY*4CZ&XV<;nT;}TSK3B5Qpu}=8^NO_DzuUWxG)2{ANfW zLl6Bg9eZsydCpSUY`WS%!)%J}=43Wg8!>o&vdmuR`t)(aBO9 z#iP?TLB&U>Dz@%CI&<;xqj!_#n>W0hzHs2?yQ!*O$KTCdI>Ezf5qm=IwZaT>u65_X PesP+$lT{tXC+>d$Igp>~ literal 0 HcmV?d00001 From 67a82d04624d6b67e3f34251ebe8f6ba3237b4c6 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Feb 2017 06:21:53 +0300 Subject: [PATCH 019/158] Reverted WIC default pixel format --- src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs index 2dd7acd9f9..1554296c0f 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs @@ -60,7 +60,7 @@ namespace Avalonia.Direct2D1.Media public WicBitmapImpl(ImagingFactory factory, int width, int height, APixelFormat? pixelFormat = null) { if (!pixelFormat.HasValue) - pixelFormat = APixelFormat.Rgba8888; + pixelFormat = APixelFormat.Bgra8888; _factory = factory; PixelFormat = pixelFormat; From 131fa44fa139d2590011d9e94bc5696287be59bb Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 23 Feb 2017 15:04:59 +0300 Subject: [PATCH 020/158] Fixed namespaces --- .../Platform/SkiaPlatform/AndroidFramebuffer.cs | 2 +- src/iOS/Avalonia.iOS/EmulatedFramebuffer.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs index 55e729f5a2..64dbeb89cc 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs @@ -2,7 +2,7 @@ using System; using System.Runtime.InteropServices; using Android.Runtime; using Android.Views; -using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Platform; namespace Avalonia.Android.Platform.SkiaPlatform { diff --git a/src/iOS/Avalonia.iOS/EmulatedFramebuffer.cs b/src/iOS/Avalonia.iOS/EmulatedFramebuffer.cs index 1baed80ed7..f3fc90a2ab 100644 --- a/src/iOS/Avalonia.iOS/EmulatedFramebuffer.cs +++ b/src/iOS/Avalonia.iOS/EmulatedFramebuffer.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; -using Avalonia.Controls.Platform.Surfaces; +using Avalonia.Platform; using CoreGraphics; using UIKit; From 4ca0bb72b29a0b3d8e5d686c84604ac251c927a2 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 1 Mar 2017 08:46:21 +0100 Subject: [PATCH 021/158] Added GetObservable for routed events. Fixes #905. --- .../InteractiveExtensions.cs | 30 +++++++++++++++++-- .../Avalonia.Interactivity.UnitTests.csproj | 21 +++++++++++++ .../InteractiveTests.cs | 18 +++++++++++ .../packages.config | 6 ++++ 4 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Interactivity/InteractiveExtensions.cs b/src/Avalonia.Interactivity/InteractiveExtensions.cs index 2507fc6866..b03590951b 100644 --- a/src/Avalonia.Interactivity/InteractiveExtensions.cs +++ b/src/Avalonia.Interactivity/InteractiveExtensions.cs @@ -1,8 +1,10 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using System; using System.Collections.Generic; using System.Linq; +using System.Reactive.Linq; namespace Avalonia.Interactivity { @@ -11,12 +13,36 @@ namespace Avalonia.Interactivity /// public static class InteractiveExtensions { + ///

+ /// Gets an observable for a . + /// + /// The object to listen for events on. + /// The routed event. + /// The routing strategies to listen to. + /// Whether handled events should also be listened for. + /// + /// An observable which fires each time the event is raised. + /// + public static IObservable GetObservable( + this IInteractive o, + RoutedEvent routedEvent, + RoutingStrategies routes = RoutingStrategies.Direct | RoutingStrategies.Bubble, + bool handledEventsToo = false) + where TEventArgs : RoutedEventArgs + { + return Observable.Create(x => o.AddHandler( + routedEvent, + (_, e) => x.OnNext(e), + routes, + handledEventsToo)); + } + /// /// Gets the route for bubbling events from the specified interactive. /// /// The interactive. /// The event route. - public static IEnumerable GetBubbleEventRoute(this IInteractive interactive) + internal static IEnumerable GetBubbleEventRoute(this IInteractive interactive) { while (interactive != null) { @@ -30,7 +56,7 @@ namespace Avalonia.Interactivity /// /// The interactive. /// The event route. - public static IEnumerable GetTunnelEventRoute(this IInteractive interactive) + internal static IEnumerable GetTunnelEventRoute(this IInteractive interactive) { return interactive.GetBubbleEventRoute().Reverse(); } diff --git a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj index 6dfefe1a63..d8a6ee2506 100644 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj +++ b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj @@ -37,11 +37,32 @@ + + ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll + True + + + ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll + True + + + ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll + True + + + ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll + True + + + ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll + True + + ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll diff --git a/tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs b/tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs index f107490ced..dd0974fad0 100644 --- a/tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs +++ b/tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs @@ -340,6 +340,24 @@ namespace Avalonia.Interactivity.UnitTests Assert.True(target.GetVisualParent().ClassHandlerInvoked); } + [Fact] + public void GetObservable_Should_Listen_To_Event() + { + var ev = new RoutedEvent("test", RoutingStrategies.Direct, typeof(TestInteractive)); + var target = new TestInteractive(); + var called = 0; + var subscription = target.GetObservable(ev).Subscribe(_ => ++called); + + var args = new RoutedEventArgs(ev, target); + target.RaiseEvent(args); + + subscription.Dispose(); + + target.RaiseEvent(args); + + Assert.Equal(1, called); + } + private TestInteractive CreateTree( RoutedEvent ev, EventHandler handler, diff --git a/tests/Avalonia.Interactivity.UnitTests/packages.config b/tests/Avalonia.Interactivity.UnitTests/packages.config index dcbf45edf0..953a4a666d 100644 --- a/tests/Avalonia.Interactivity.UnitTests/packages.config +++ b/tests/Avalonia.Interactivity.UnitTests/packages.config @@ -1,5 +1,11 @@  + + + + + + From 71c6c572acfa971d34f5ecc99f9ef34d6af2adcf Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 4 Mar 2017 01:58:52 +0100 Subject: [PATCH 022/158] Moved ncrunch files to their own dir. Also deleted v2 ncrunch files and update .gitignore. --- .gitignore | 5 ++++ .ncrunch/Avalonia.Android.v3.ncrunchproject | 6 ++++ ...a.AndroidTestApplication.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Animation.v3.ncrunchproject | 5 ++++ .../Avalonia.Base.UnitTests.v3.ncrunchproject | 8 ++++++ .ncrunch/Avalonia.Base.v3.ncrunchproject | 5 ++++ .../Avalonia.Benchmarks.v3.ncrunchproject | 5 ++++ ...alonia.Cairo.RenderTests.v3.ncrunchproject | 8 ++++++ .ncrunch/Avalonia.Cairo.v3.ncrunchproject | 5 ++++ ...lonia.Controls.UnitTests.v3.ncrunchproject | 8 ++++++ .ncrunch/Avalonia.Controls.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Designer.v3.ncrunchproject | 5 ++++ ....DesignerSupport.TestApp.v3.ncrunchproject | 6 ++++ ...ia.DesignerSupport.Tests.v3.ncrunchproject | 6 ++++ ...Avalonia.DesignerSupport.v3.ncrunchproject | 5 ++++ .../Avalonia.Diagnostics.v3.ncrunchproject | 5 ++++ ...ia.Direct2D1.RenderTests.v3.ncrunchproject | 6 ++++ ...onia.Direct2D1.UnitTests.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Direct2D1.v3.ncrunchproject | 5 ++++ ...alonia.DotNetCoreRuntime.v3.ncrunchproject | 5 ++++ ...a.DotNetFrameworkRuntime.v3.ncrunchproject | 6 ++++ .ncrunch/Avalonia.Gtk.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Gtk3.v3.ncrunchproject | 5 ++++ .../Avalonia.HtmlRenderer.v3.ncrunchproject | 5 ++++ ...Avalonia.Input.UnitTests.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Input.v3.ncrunchproject | 5 ++++ ....Interactivity.UnitTests.v3.ncrunchproject | 5 ++++ .../Avalonia.Interactivity.v3.ncrunchproject | 5 ++++ ...valonia.Layout.UnitTests.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Layout.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.LeakTests.v3.ncrunchproject | 5 ++++ ...Avalonia.Logging.Serilog.v3.ncrunchproject | 5 ++++ ...valonia.Markup.UnitTests.v3.ncrunchproject | 5 ++++ ...ia.Markup.Xaml.UnitTests.v3.ncrunchproject | 5 ++++ .../Avalonia.Markup.Xaml.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Markup.v3.ncrunchproject | 5 ++++ .../Avalonia.ReactiveUI.v3.ncrunchproject | 5 ++++ .../Avalonia.RenderTests.v3.ncrunchproject | 3 ++ .../Avalonia.Skia.Android.v3.ncrunchproject | 6 ++++ ...Skia.Desktop.NetStandard.v3.ncrunchproject | 5 ++++ .../Avalonia.Skia.Desktop.v3.ncrunchproject | 8 ++++++ ...valonia.Skia.RenderTests.v3.ncrunchproject | 6 ++++ .ncrunch/Avalonia.Skia.iOS.v3.ncrunchproject | 6 ++++ .ncrunch/Avalonia.Skia.v3.ncrunchproject | 3 ++ ...alonia.Styling.UnitTests.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.Styling.v3.ncrunchproject | 5 ++++ .../Avalonia.Themes.Default.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.UnitTests.v3.ncrunchproject | 5 ++++ ...alonia.Visuals.UnitTests.v3.ncrunchproject | 9 ++++++ .ncrunch/Avalonia.Visuals.v3.ncrunchproject | 5 ++++ ...alonia.Win32.NetStandard.v3.ncrunchproject | 5 ++++ .../Avalonia.Win32.Shared.v3.ncrunchproject | 3 ++ .ncrunch/Avalonia.Win32.v3.ncrunchproject | 5 ++++ .ncrunch/Avalonia.iOS.v3.ncrunchproject | 5 ++++ ...lonia.iOSTestApplication.v3.ncrunchproject | 5 ++++ .ncrunch/BindingTest.v3.ncrunchproject | 6 ++++ .../ControlCatalog.Android.v3.ncrunchproject | 5 ++++ .../ControlCatalog.Desktop.v3.ncrunchproject | 5 ++++ .ncrunch/ControlCatalog.iOS.v3.ncrunchproject | 5 ++++ .ncrunch/ControlCatalog.v3.ncrunchproject | 6 ++++ .ncrunch/GtkInteropDemo.v3.ncrunchproject | 5 ++++ .ncrunch/PlatformSupport.v3.ncrunchproject | 3 ++ .ncrunch/RenderHelpers.v3.ncrunchproject | 3 ++ .ncrunch/RenderTest.v3.ncrunchproject | 8 ++++++ .ncrunch/VirtualizationTest.v3.ncrunchproject | 6 ++++ .ncrunch/WindowsInteropTest.v3.ncrunchproject | 5 ++++ Avalonia.v2.ncrunchsolution | Bin 1836 -> 0 bytes Avalonia.v3.ncrunchsolution | 10 +++++++ .../BindingTest/BindingTest.v2.ncrunchproject | 26 ----------------- .../ControlCatalog.Android.v2.ncrunchproject | 26 ----------------- .../ControlCatalog.Desktop.v2.ncrunchproject | 26 ----------------- .../ControlCatalog.iOS.v2.ncrunchproject | 26 ----------------- .../ControlCatalog.v2.ncrunchproject | 26 ----------------- .../VirtualizationTest.v2.ncrunchproject | 26 ----------------- .../GtkInteropDemo.v2.ncrunchproject | 26 ----------------- .../WindowsInteropTest.v2.ncrunchproject | 26 ----------------- .../Avalonia.Android.v2.ncrunchproject | 26 ----------------- ...a.AndroidTestApplication.v2.ncrunchproject | 26 ----------------- .../Avalonia.Animation.v2.ncrunchproject | 26 ----------------- .../Avalonia.Base.v2.ncrunchproject | 26 ----------------- .../Avalonia.Controls.v2.ncrunchproject | 26 ----------------- ...Avalonia.DesignerSupport.v2.ncrunchproject | 26 ----------------- .../Avalonia.Diagnostics.v2.ncrunchproject | 26 ----------------- ...a.DotNetFrameworkRuntime.v2.ncrunchproject | 26 ----------------- .../Avalonia.HtmlRenderer.v2.ncrunchproject | 26 ----------------- .../Avalonia.Input.v2.ncrunchproject | 26 ----------------- .../Avalonia.Interactivity.v2.ncrunchproject | 26 ----------------- .../Avalonia.Layout.v2.ncrunchproject | 26 ----------------- ...Avalonia.Logging.Serilog.v2.ncrunchproject | 26 ----------------- .../Avalonia.ReactiveUI.v2.ncrunchproject | 26 ----------------- .../Avalonia.Styling.v2.ncrunchproject | 26 ----------------- .../Avalonia.Themes.Default.v2.ncrunchproject | 26 ----------------- .../Avalonia.Visuals.v2.ncrunchproject | 26 ----------------- .../Avalonia.Gtk.v2.ncrunchproject | 26 ----------------- .../Avalonia.Markup.Xaml.v2.ncrunchproject | 26 ----------------- .../Avalonia.Markup.v2.ncrunchproject | 26 ----------------- .../Avalonia.Skia.iOS.v2.ncrunchproject | 26 ----------------- .../Avalonia.Designer.v2.ncrunchproject | 26 ----------------- .../Avalonia.Direct2D1.v2.ncrunchproject | 26 ----------------- .../Avalonia.Win32.v2.ncrunchproject | 26 ----------------- .../Avalonia.iOS.v2.ncrunchproject | 26 ----------------- ...lonia.iOSTestApplication.v2.ncrunchproject | 26 ----------------- .../Avalonia.Base.UnitTests.v2.ncrunchproject | 27 ------------------ .../Avalonia.Benchmarks.v2.ncrunchproject | 26 ----------------- ...lonia.Controls.UnitTests.v2.ncrunchproject | 27 ------------------ ....DesignerSupport.TestApp.v2.ncrunchproject | 26 ----------------- ...ia.DesignerSupport.Tests.v2.ncrunchproject | 26 ----------------- ...onia.Direct2D1.UnitTests.v2.ncrunchproject | 26 ----------------- ...Avalonia.Input.UnitTests.v2.ncrunchproject | 26 ----------------- ....Interactivity.UnitTests.v2.ncrunchproject | 26 ----------------- ...valonia.Layout.UnitTests.v2.ncrunchproject | 26 ----------------- .../Avalonia.LeakTests.v2.ncrunchproject | 26 ----------------- ...valonia.Markup.UnitTests.v2.ncrunchproject | 26 ----------------- ...ia.Markup.Xaml.UnitTests.v2.ncrunchproject | 26 ----------------- .../Avalonia.Skia.RenderTests.csproj | 4 +-- ...alonia.Styling.UnitTests.v2.ncrunchproject | 26 ----------------- .../Avalonia.UnitTests.v2.ncrunchproject | 26 ----------------- 117 files changed, 362 insertions(+), 1252 deletions(-) create mode 100644 .ncrunch/Avalonia.Android.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.AndroidTestApplication.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Animation.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Base.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Base.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Benchmarks.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Cairo.RenderTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Cairo.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Controls.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Controls.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Designer.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.DesignerSupport.TestApp.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.DesignerSupport.Tests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.DesignerSupport.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Diagnostics.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Direct2D1.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Direct2D1.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Gtk.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Gtk3.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Input.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Input.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Interactivity.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Interactivity.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Layout.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Layout.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.LeakTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Logging.Serilog.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Markup.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Markup.Xaml.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Markup.Xaml.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Markup.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.ReactiveUI.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.RenderTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Skia.Android.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Skia.Desktop.NetStandard.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Skia.Desktop.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Skia.iOS.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Skia.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Styling.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Styling.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Themes.Default.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Visuals.UnitTests.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Visuals.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.Win32.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.iOS.v3.ncrunchproject create mode 100644 .ncrunch/Avalonia.iOSTestApplication.v3.ncrunchproject create mode 100644 .ncrunch/BindingTest.v3.ncrunchproject create mode 100644 .ncrunch/ControlCatalog.Android.v3.ncrunchproject create mode 100644 .ncrunch/ControlCatalog.Desktop.v3.ncrunchproject create mode 100644 .ncrunch/ControlCatalog.iOS.v3.ncrunchproject create mode 100644 .ncrunch/ControlCatalog.v3.ncrunchproject create mode 100644 .ncrunch/GtkInteropDemo.v3.ncrunchproject create mode 100644 .ncrunch/PlatformSupport.v3.ncrunchproject create mode 100644 .ncrunch/RenderHelpers.v3.ncrunchproject create mode 100644 .ncrunch/RenderTest.v3.ncrunchproject create mode 100644 .ncrunch/VirtualizationTest.v3.ncrunchproject create mode 100644 .ncrunch/WindowsInteropTest.v3.ncrunchproject delete mode 100644 Avalonia.v2.ncrunchsolution create mode 100644 Avalonia.v3.ncrunchsolution delete mode 100644 samples/BindingTest/BindingTest.v2.ncrunchproject delete mode 100644 samples/ControlCatalog.Android/ControlCatalog.Android.v2.ncrunchproject delete mode 100644 samples/ControlCatalog.Desktop/ControlCatalog.Desktop.v2.ncrunchproject delete mode 100644 samples/ControlCatalog.iOS/ControlCatalog.iOS.v2.ncrunchproject delete mode 100644 samples/ControlCatalog/ControlCatalog.v2.ncrunchproject delete mode 100644 samples/VirtualizationTest/VirtualizationTest.v2.ncrunchproject delete mode 100644 samples/interop/GtkInteropDemo/GtkInteropDemo.v2.ncrunchproject delete mode 100644 samples/interop/WindowsInteropTest/WindowsInteropTest.v2.ncrunchproject delete mode 100644 src/Android/Avalonia.Android/Avalonia.Android.v2.ncrunchproject delete mode 100644 src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.v2.ncrunchproject delete mode 100644 src/Avalonia.Animation/Avalonia.Animation.v2.ncrunchproject delete mode 100644 src/Avalonia.Base/Avalonia.Base.v2.ncrunchproject delete mode 100644 src/Avalonia.Controls/Avalonia.Controls.v2.ncrunchproject delete mode 100644 src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.v2.ncrunchproject delete mode 100644 src/Avalonia.Diagnostics/Avalonia.Diagnostics.v2.ncrunchproject delete mode 100644 src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.v2.ncrunchproject delete mode 100644 src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.v2.ncrunchproject delete mode 100644 src/Avalonia.Input/Avalonia.Input.v2.ncrunchproject delete mode 100644 src/Avalonia.Interactivity/Avalonia.Interactivity.v2.ncrunchproject delete mode 100644 src/Avalonia.Layout/Avalonia.Layout.v2.ncrunchproject delete mode 100644 src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.v2.ncrunchproject delete mode 100644 src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.v2.ncrunchproject delete mode 100644 src/Avalonia.Styling/Avalonia.Styling.v2.ncrunchproject delete mode 100644 src/Avalonia.Themes.Default/Avalonia.Themes.Default.v2.ncrunchproject delete mode 100644 src/Avalonia.Visuals/Avalonia.Visuals.v2.ncrunchproject delete mode 100644 src/Gtk/Avalonia.Gtk/Avalonia.Gtk.v2.ncrunchproject delete mode 100644 src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.v2.ncrunchproject delete mode 100644 src/Markup/Avalonia.Markup/Avalonia.Markup.v2.ncrunchproject delete mode 100644 src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.v2.ncrunchproject delete mode 100644 src/Windows/Avalonia.Designer/Avalonia.Designer.v2.ncrunchproject delete mode 100644 src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.v2.ncrunchproject delete mode 100644 src/Windows/Avalonia.Win32/Avalonia.Win32.v2.ncrunchproject delete mode 100644 src/iOS/Avalonia.iOS/Avalonia.iOS.v2.ncrunchproject delete mode 100644 src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.v2.ncrunchproject delete mode 100644 tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Benchmarks/Avalonia.Benchmarks.v2.ncrunchproject delete mode 100644 tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.v2.ncrunchproject delete mode 100644 tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.LeakTests/Avalonia.LeakTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.v2.ncrunchproject delete mode 100644 tests/Avalonia.UnitTests/Avalonia.UnitTests.v2.ncrunchproject diff --git a/.gitignore b/.gitignore index d965a09574..c36f64e5de 100644 --- a/.gitignore +++ b/.gitignore @@ -105,6 +105,11 @@ csx # Windows Store app package directory AppPackages/ +# NCrunch +_NCrunch_*/ +*.ncrunchsolution.user +nCrunchTemp_*/ + # Others sql/ *.Cache diff --git a/.ncrunch/Avalonia.Android.v3.ncrunchproject b/.ncrunch/Avalonia.Android.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/Avalonia.Android.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.AndroidTestApplication.v3.ncrunchproject b/.ncrunch/Avalonia.AndroidTestApplication.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.AndroidTestApplication.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Animation.v3.ncrunchproject b/.ncrunch/Avalonia.Animation.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Animation.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Base.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Base.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..13f78c1d4c --- /dev/null +++ b/.ncrunch/Avalonia.Base.UnitTests.v3.ncrunchproject @@ -0,0 +1,8 @@ + + + + LongTestTimesWithoutParallelExecution + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Base.v3.ncrunchproject b/.ncrunch/Avalonia.Base.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Base.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Benchmarks.v3.ncrunchproject b/.ncrunch/Avalonia.Benchmarks.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Benchmarks.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Cairo.RenderTests.v3.ncrunchproject b/.ncrunch/Avalonia.Cairo.RenderTests.v3.ncrunchproject new file mode 100644 index 0000000000..101c806e63 --- /dev/null +++ b/.ncrunch/Avalonia.Cairo.RenderTests.v3.ncrunchproject @@ -0,0 +1,8 @@ + + + + AbnormalReferenceResolution + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Cairo.v3.ncrunchproject b/.ncrunch/Avalonia.Cairo.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Cairo.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Controls.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Controls.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..13f78c1d4c --- /dev/null +++ b/.ncrunch/Avalonia.Controls.UnitTests.v3.ncrunchproject @@ -0,0 +1,8 @@ + + + + LongTestTimesWithoutParallelExecution + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Controls.v3.ncrunchproject b/.ncrunch/Avalonia.Controls.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Controls.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Designer.v3.ncrunchproject b/.ncrunch/Avalonia.Designer.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Designer.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.DesignerSupport.TestApp.v3.ncrunchproject b/.ncrunch/Avalonia.DesignerSupport.TestApp.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/Avalonia.DesignerSupport.TestApp.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.DesignerSupport.Tests.v3.ncrunchproject b/.ncrunch/Avalonia.DesignerSupport.Tests.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/Avalonia.DesignerSupport.Tests.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.DesignerSupport.v3.ncrunchproject b/.ncrunch/Avalonia.DesignerSupport.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.DesignerSupport.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Diagnostics.v3.ncrunchproject b/.ncrunch/Avalonia.Diagnostics.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Diagnostics.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject b/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject new file mode 100644 index 0000000000..235da29767 --- /dev/null +++ b/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + 1000 + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Direct2D1.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Direct2D1.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Direct2D1.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Direct2D1.v3.ncrunchproject b/.ncrunch/Avalonia.Direct2D1.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Direct2D1.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject b/.ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject b/.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject new file mode 100644 index 0000000000..3cd9a982c9 --- /dev/null +++ b/.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + False + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Gtk.v3.ncrunchproject b/.ncrunch/Avalonia.Gtk.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Gtk.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Gtk3.v3.ncrunchproject b/.ncrunch/Avalonia.Gtk3.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.Gtk3.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject b/.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Input.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Input.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Input.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Input.v3.ncrunchproject b/.ncrunch/Avalonia.Input.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Input.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Interactivity.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Interactivity.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Interactivity.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Interactivity.v3.ncrunchproject b/.ncrunch/Avalonia.Interactivity.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Interactivity.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Layout.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Layout.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Layout.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Layout.v3.ncrunchproject b/.ncrunch/Avalonia.Layout.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Layout.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.LeakTests.v3.ncrunchproject b/.ncrunch/Avalonia.LeakTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.LeakTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Logging.Serilog.v3.ncrunchproject b/.ncrunch/Avalonia.Logging.Serilog.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Logging.Serilog.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Markup.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Markup.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Markup.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Markup.Xaml.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Markup.Xaml.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Markup.Xaml.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Markup.Xaml.v3.ncrunchproject b/.ncrunch/Avalonia.Markup.Xaml.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Markup.Xaml.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Markup.v3.ncrunchproject b/.ncrunch/Avalonia.Markup.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Markup.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.ReactiveUI.v3.ncrunchproject b/.ncrunch/Avalonia.ReactiveUI.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.ReactiveUI.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.RenderTests.v3.ncrunchproject b/.ncrunch/Avalonia.RenderTests.v3.ncrunchproject new file mode 100644 index 0000000000..95a483b433 --- /dev/null +++ b/.ncrunch/Avalonia.RenderTests.v3.ncrunchproject @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Skia.Android.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.Android.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/Avalonia.Skia.Android.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Skia.Desktop.NetStandard.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.Desktop.NetStandard.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.Skia.Desktop.NetStandard.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Skia.Desktop.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.Desktop.v3.ncrunchproject new file mode 100644 index 0000000000..ae3801f32b --- /dev/null +++ b/.ncrunch/Avalonia.Skia.Desktop.v3.ncrunchproject @@ -0,0 +1,8 @@ + + + True + False + True + x86 + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject new file mode 100644 index 0000000000..235da29767 --- /dev/null +++ b/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + 1000 + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Skia.iOS.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.iOS.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/Avalonia.Skia.iOS.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Skia.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.v3.ncrunchproject new file mode 100644 index 0000000000..95a483b433 --- /dev/null +++ b/.ncrunch/Avalonia.Skia.v3.ncrunchproject @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Styling.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Styling.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Styling.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Styling.v3.ncrunchproject b/.ncrunch/Avalonia.Styling.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Styling.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Themes.Default.v3.ncrunchproject b/.ncrunch/Avalonia.Themes.Default.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Themes.Default.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.UnitTests.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Visuals.UnitTests.v3.ncrunchproject b/.ncrunch/Avalonia.Visuals.UnitTests.v3.ncrunchproject new file mode 100644 index 0000000000..ee655751a0 --- /dev/null +++ b/.ncrunch/Avalonia.Visuals.UnitTests.v3.ncrunchproject @@ -0,0 +1,9 @@ + + + + AbnormalReferenceResolution + LongTestTimesWithoutParallelExecution + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Visuals.v3.ncrunchproject b/.ncrunch/Avalonia.Visuals.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Visuals.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject b/.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject b/.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject new file mode 100644 index 0000000000..95a483b433 --- /dev/null +++ b/.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.Win32.v3.ncrunchproject b/.ncrunch/Avalonia.Win32.v3.ncrunchproject new file mode 100644 index 0000000000..6800b4a3fe --- /dev/null +++ b/.ncrunch/Avalonia.Win32.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.iOS.v3.ncrunchproject b/.ncrunch/Avalonia.iOS.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.iOS.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/Avalonia.iOSTestApplication.v3.ncrunchproject b/.ncrunch/Avalonia.iOSTestApplication.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/Avalonia.iOSTestApplication.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/BindingTest.v3.ncrunchproject b/.ncrunch/BindingTest.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/BindingTest.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/ControlCatalog.Android.v3.ncrunchproject b/.ncrunch/ControlCatalog.Android.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/ControlCatalog.Android.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/ControlCatalog.Desktop.v3.ncrunchproject b/.ncrunch/ControlCatalog.Desktop.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/ControlCatalog.Desktop.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/ControlCatalog.iOS.v3.ncrunchproject b/.ncrunch/ControlCatalog.iOS.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/ControlCatalog.iOS.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/ControlCatalog.v3.ncrunchproject b/.ncrunch/ControlCatalog.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/ControlCatalog.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/GtkInteropDemo.v3.ncrunchproject b/.ncrunch/GtkInteropDemo.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/GtkInteropDemo.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/.ncrunch/PlatformSupport.v3.ncrunchproject b/.ncrunch/PlatformSupport.v3.ncrunchproject new file mode 100644 index 0000000000..95a483b433 --- /dev/null +++ b/.ncrunch/PlatformSupport.v3.ncrunchproject @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.ncrunch/RenderHelpers.v3.ncrunchproject b/.ncrunch/RenderHelpers.v3.ncrunchproject new file mode 100644 index 0000000000..95a483b433 --- /dev/null +++ b/.ncrunch/RenderHelpers.v3.ncrunchproject @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.ncrunch/RenderTest.v3.ncrunchproject b/.ncrunch/RenderTest.v3.ncrunchproject new file mode 100644 index 0000000000..e12537d535 --- /dev/null +++ b/.ncrunch/RenderTest.v3.ncrunchproject @@ -0,0 +1,8 @@ + + + + MissingOrIgnoredProjectReference + + True + + \ No newline at end of file diff --git a/.ncrunch/VirtualizationTest.v3.ncrunchproject b/.ncrunch/VirtualizationTest.v3.ncrunchproject new file mode 100644 index 0000000000..a4953e14f9 --- /dev/null +++ b/.ncrunch/VirtualizationTest.v3.ncrunchproject @@ -0,0 +1,6 @@ + + + True + True + + \ No newline at end of file diff --git a/.ncrunch/WindowsInteropTest.v3.ncrunchproject b/.ncrunch/WindowsInteropTest.v3.ncrunchproject new file mode 100644 index 0000000000..319cd523ce --- /dev/null +++ b/.ncrunch/WindowsInteropTest.v3.ncrunchproject @@ -0,0 +1,5 @@ + + + True + + \ No newline at end of file diff --git a/Avalonia.v2.ncrunchsolution b/Avalonia.v2.ncrunchsolution deleted file mode 100644 index fe4feb2cb68b687b4720bc1a47cbec77763ab35f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcmcJQO;5r=5Qg8giT}Z~2aTRd6QW{Fgb=}x0~f7D)P9&Qi2ix?nJuMYGxMdJ!OhD(OA#)Ql0qskkJ#fx$fsHfp)c{J)VYItjCIUL(Ao6zJZQdJ6yS1 z`Cp(k^uAsEGriCcQM%%{n2)ds89811{Zn|F^c-`E9#H>O2fD=D1bE#uXRAg~|Na$w z6P+05sk&%dglrtq`krO1Gkwqt7or+)ww!T6_rD$fA}AFd+8NQC5H&mdZ?ao%Xsi)d zBN!4Nr&#ZvcNJSbdsoygA1k}BDXh6(xmnA)nC6ILnSp(7_6@6+x9VV(diua;LZnmH zQ|uFFLvq6UmJODLZkB&`E1M{7N`3B`>|~ir?j9#BPFW}QveKs9ZR&x=KHM_(qD~#m zWv*^F)<#_^ZOVN&&+OxQw6~Sp%UTtAQ;$4W8;a_0|D>|E7d6GINyzL3y9mxPZ^zqd wFpov$G0;BG0nMuL`ny+TZFH<=+JD^nids;V-wNou0Jkex*#H0l diff --git a/Avalonia.v3.ncrunchsolution b/Avalonia.v3.ncrunchsolution new file mode 100644 index 0000000000..c2c454eae1 --- /dev/null +++ b/Avalonia.v3.ncrunchsolution @@ -0,0 +1,10 @@ + + + + tests\TestFiles\**.* + + False + .ncrunch + True + + \ No newline at end of file diff --git a/samples/BindingTest/BindingTest.v2.ncrunchproject b/samples/BindingTest/BindingTest.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/samples/BindingTest/BindingTest.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.v2.ncrunchproject b/samples/ControlCatalog.Android/ControlCatalog.Android.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/samples/ControlCatalog.Android/ControlCatalog.Android.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.v2.ncrunchproject b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/ControlCatalog.iOS/ControlCatalog.iOS.v2.ncrunchproject b/samples/ControlCatalog.iOS/ControlCatalog.iOS.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/samples/ControlCatalog.iOS/ControlCatalog.iOS.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/ControlCatalog/ControlCatalog.v2.ncrunchproject b/samples/ControlCatalog/ControlCatalog.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/samples/ControlCatalog/ControlCatalog.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/VirtualizationTest/VirtualizationTest.v2.ncrunchproject b/samples/VirtualizationTest/VirtualizationTest.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/samples/VirtualizationTest/VirtualizationTest.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/interop/GtkInteropDemo/GtkInteropDemo.v2.ncrunchproject b/samples/interop/GtkInteropDemo/GtkInteropDemo.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/samples/interop/GtkInteropDemo/GtkInteropDemo.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/samples/interop/WindowsInteropTest/WindowsInteropTest.v2.ncrunchproject b/samples/interop/WindowsInteropTest/WindowsInteropTest.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/samples/interop/WindowsInteropTest/WindowsInteropTest.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Android/Avalonia.Android/Avalonia.Android.v2.ncrunchproject b/src/Android/Avalonia.Android/Avalonia.Android.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/src/Android/Avalonia.Android/Avalonia.Android.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.v2.ncrunchproject b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Animation/Avalonia.Animation.v2.ncrunchproject b/src/Avalonia.Animation/Avalonia.Animation.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Animation/Avalonia.Animation.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Base/Avalonia.Base.v2.ncrunchproject b/src/Avalonia.Base/Avalonia.Base.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Base/Avalonia.Base.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Controls/Avalonia.Controls.v2.ncrunchproject b/src/Avalonia.Controls/Avalonia.Controls.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Controls/Avalonia.Controls.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.v2.ncrunchproject b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.v2.ncrunchproject b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.v2.ncrunchproject b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.v2.ncrunchproject b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Input/Avalonia.Input.v2.ncrunchproject b/src/Avalonia.Input/Avalonia.Input.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Input/Avalonia.Input.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Interactivity/Avalonia.Interactivity.v2.ncrunchproject b/src/Avalonia.Interactivity/Avalonia.Interactivity.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Interactivity/Avalonia.Interactivity.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Layout/Avalonia.Layout.v2.ncrunchproject b/src/Avalonia.Layout/Avalonia.Layout.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Layout/Avalonia.Layout.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.v2.ncrunchproject b/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.v2.ncrunchproject b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Styling/Avalonia.Styling.v2.ncrunchproject b/src/Avalonia.Styling/Avalonia.Styling.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Styling/Avalonia.Styling.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.v2.ncrunchproject b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.v2.ncrunchproject b/src/Avalonia.Visuals/Avalonia.Visuals.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Avalonia.Visuals/Avalonia.Visuals.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.v2.ncrunchproject b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.v2.ncrunchproject b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup/Avalonia.Markup.v2.ncrunchproject b/src/Markup/Avalonia.Markup/Avalonia.Markup.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.v2.ncrunchproject b/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Windows/Avalonia.Designer/Avalonia.Designer.v2.ncrunchproject b/src/Windows/Avalonia.Designer/Avalonia.Designer.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Windows/Avalonia.Designer/Avalonia.Designer.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.v2.ncrunchproject b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.v2.ncrunchproject b/src/Windows/Avalonia.Win32/Avalonia.Win32.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/src/Windows/Avalonia.Win32/Avalonia.Win32.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/iOS/Avalonia.iOS/Avalonia.iOS.v2.ncrunchproject b/src/iOS/Avalonia.iOS/Avalonia.iOS.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.v2.ncrunchproject b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.v2.ncrunchproject deleted file mode 100644 index e1b4d7cf28..0000000000 --- a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.v2.ncrunchproject b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.v2.ncrunchproject deleted file mode 100644 index b5cd70b13f..0000000000 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,27 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - LongTestTimesWithoutParallelExecution - \ No newline at end of file diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.v2.ncrunchproject b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.v2.ncrunchproject b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.v2.ncrunchproject deleted file mode 100644 index b5cd70b13f..0000000000 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,27 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - LongTestTimesWithoutParallelExecution - \ No newline at end of file diff --git a/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.v2.ncrunchproject b/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.v2.ncrunchproject b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.v2.ncrunchproject deleted file mode 100644 index f744eecae0..0000000000 --- a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - true - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.v2.ncrunchproject b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.v2.ncrunchproject b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.v2.ncrunchproject b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.v2.ncrunchproject b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.v2.ncrunchproject b/tests/Avalonia.LeakTests/Avalonia.LeakTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.v2.ncrunchproject b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.v2.ncrunchproject b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ 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 9a8fa82d8b..1ba80837f0 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj @@ -19,7 +19,7 @@ true full false - bin\Debug\ + ..\..\artifacts\tests\ TRACE;DEBUG;AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL prompt 4 @@ -27,7 +27,7 @@ pdbonly true - bin\Release\ + ..\..\artifacts\tests\ TRACE;AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL prompt 4 diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.v2.ncrunchproject b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.v2.ncrunchproject b/tests/Avalonia.UnitTests/Avalonia.UnitTests.v2.ncrunchproject deleted file mode 100644 index 30815b1937..0000000000 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.v2.ncrunchproject +++ /dev/null @@ -1,26 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file From 8099317f88e2aa6e35c599cd3da3ad7f8cfaaa4e Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 4 Mar 2017 02:21:44 +0100 Subject: [PATCH 023/158] Ported RenderTest from scenegraph branch. --- samples/RenderTest/App.config | 8 ++ samples/RenderTest/App.xaml | 1 + samples/RenderTest/MainWindow.xaml | 31 ++++++- samples/RenderTest/MainWindow.xaml.cs | 63 ++----------- samples/RenderTest/Pages/AnimationsPage.xaml | 2 + .../RenderTest/Pages/AnimationsPage.xaml.cs | 90 +++++++++++++++++++ samples/RenderTest/Pages/ClippingPage.xaml | 15 ++++ samples/RenderTest/Pages/ClippingPage.xaml.cs | 48 ++++++++++ samples/RenderTest/Program.cs | 1 + samples/RenderTest/RenderTest.csproj | 30 +++++++ .../RenderTest/RenderTest.v2.ncrunchproject | 26 ------ samples/RenderTest/SideBar.xaml | 40 +++++++++ .../ViewModels/MainWindowViewModel.cs | 34 +++++++ samples/RenderTest/packages.config | 1 + 14 files changed, 306 insertions(+), 84 deletions(-) create mode 100644 samples/RenderTest/Pages/AnimationsPage.xaml create mode 100644 samples/RenderTest/Pages/AnimationsPage.xaml.cs create mode 100644 samples/RenderTest/Pages/ClippingPage.xaml create mode 100644 samples/RenderTest/Pages/ClippingPage.xaml.cs delete mode 100644 samples/RenderTest/RenderTest.v2.ncrunchproject create mode 100644 samples/RenderTest/SideBar.xaml create mode 100644 samples/RenderTest/ViewModels/MainWindowViewModel.cs diff --git a/samples/RenderTest/App.config b/samples/RenderTest/App.config index 2231c71e63..10a06d8258 100644 --- a/samples/RenderTest/App.config +++ b/samples/RenderTest/App.config @@ -9,6 +9,14 @@ + + + + + + + + diff --git a/samples/RenderTest/App.xaml b/samples/RenderTest/App.xaml index d9630eef58..c119f54915 100644 --- a/samples/RenderTest/App.xaml +++ b/samples/RenderTest/App.xaml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/samples/RenderTest/MainWindow.xaml b/samples/RenderTest/MainWindow.xaml index ab233fd90b..1d3001f1b1 100644 --- a/samples/RenderTest/MainWindow.xaml +++ b/samples/RenderTest/MainWindow.xaml @@ -1,3 +1,32 @@ + Title="Avalonia Render Test" + xmlns:pages="clr-namespace:RenderTest.Pages;assembly=RenderTest"> + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/RenderTest/MainWindow.xaml.cs b/samples/RenderTest/MainWindow.xaml.cs index feb121186f..c6c0eafd25 100644 --- a/samples/RenderTest/MainWindow.xaml.cs +++ b/samples/RenderTest/MainWindow.xaml.cs @@ -2,15 +2,11 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.Reactive.Linq; using Avalonia; -using Avalonia.Animation; using Avalonia.Controls; -using Avalonia.Controls.Shapes; -using Avalonia.Data; -using Avalonia.Layout; using Avalonia.Markup.Xaml; -using Avalonia.Media; +using RenderTest.ViewModels; +using ReactiveUI; using Avalonia.Rendering; namespace RenderTest @@ -20,63 +16,16 @@ namespace RenderTest public MainWindow() { this.InitializeComponent(); - this.CreateAnimations(); this.AttachDevTools(); - RendererMixin.DrawFpsCounter = true; + + var vm = new MainWindowViewModel(); + vm.WhenAnyValue(x => x.DrawFps).Subscribe(x => RendererMixin.DrawFpsCounter = x); + this.DataContext = vm; } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } - - private void CreateAnimations() - { - const int Count = 100; - var panel = new WrapPanel(); - - for (var i = 0; i < Count; ++i) - { - var element = new Panel - { - Children = - { - new Ellipse - { - Width = 100, - Height = 100, - Fill = Brushes.Blue, - }, - new Path - { - Data = StreamGeometry.Parse( - "F1 M 16.6309,18.6563C 17.1309,8.15625 29.8809,14.1563 29.8809,14.1563C 30.8809,11.1563 34.1308,11.4063 34.1308,11.4063C 33.5,12 34.6309,13.1563 34.6309,13.1563C 32.1309,13.1562 31.1309,14.9062 31.1309,14.9062C 41.1309,23.9062 32.6309,27.9063 32.6309,27.9062C 24.6309,24.9063 21.1309,22.1562 16.6309,18.6563 Z M 16.6309,19.9063C 21.6309,24.1563 25.1309,26.1562 31.6309,28.6562C 31.6309,28.6562 26.3809,39.1562 18.3809,36.1563C 18.3809,36.1563 18,38 16.3809,36.9063C 15,36 16.3809,34.9063 16.3809,34.9063C 16.3809,34.9063 10.1309,30.9062 16.6309,19.9063 Z"), - Fill = Brushes.Green, - HorizontalAlignment = HorizontalAlignment.Center, - VerticalAlignment = VerticalAlignment.Center, - RenderTransform = new ScaleTransform(2, 2), - } - }, - Margin = new Thickness(4), - RenderTransform = new ScaleTransform(), - }; - - var start = Animate.Stopwatch.Elapsed; - var index = i; - var degrees = Animate.Timer - .Select(x => (x - start).TotalSeconds) - .Where(x => (x % Count) >= index && (x % Count) < index + 1) - .Select(x => (x % 1) / 1); - - element.RenderTransform.Bind( - ScaleTransform.ScaleXProperty, - degrees, - BindingPriority.Animation); - - panel.Children.Add(element); - } - - Content = panel; - } } } diff --git a/samples/RenderTest/Pages/AnimationsPage.xaml b/samples/RenderTest/Pages/AnimationsPage.xaml new file mode 100644 index 0000000000..6eb7067245 --- /dev/null +++ b/samples/RenderTest/Pages/AnimationsPage.xaml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/samples/RenderTest/Pages/AnimationsPage.xaml.cs b/samples/RenderTest/Pages/AnimationsPage.xaml.cs new file mode 100644 index 0000000000..991896c3b5 --- /dev/null +++ b/samples/RenderTest/Pages/AnimationsPage.xaml.cs @@ -0,0 +1,90 @@ +using System.Reactive.Linq; +using Avalonia; +using Avalonia.Animation; +using Avalonia.Controls; +using Avalonia.Controls.Shapes; +using Avalonia.Data; +using Avalonia.Input; +using Avalonia.Markup.Xaml; +using Avalonia.Media; + +namespace RenderTest.Pages +{ + public class AnimationsPage : UserControl + { + public AnimationsPage() + { + this.InitializeComponent(); + this.CreateAnimations(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + private void CreateAnimations() + { + const int Count = 100; + var panel = new WrapPanel(); + + for (var i = 0; i < Count; ++i) + { + Ellipse ellipse; + var element = new Panel + { + Children = + { + (ellipse = new Ellipse + { + Name = $"ellipse{i}", + Width = 100, + Height = 100, + Fill = Brushes.Blue, + }), + new Path + { + Data = StreamGeometry.Parse( + "F1 M 16.6309,18.6563C 17.1309,8.15625 29.8809,14.1563 29.8809,14.1563C 30.8809,11.1563 34.1308,11.4063 34.1308,11.4063C 33.5,12 34.6309,13.1563 34.6309,13.1563C 32.1309,13.1562 31.1309,14.9062 31.1309,14.9062C 41.1309,23.9062 32.6309,27.9063 32.6309,27.9062C 24.6309,24.9063 21.1309,22.1562 16.6309,18.6563 Z M 16.6309,19.9063C 21.6309,24.1563 25.1309,26.1562 31.6309,28.6562C 31.6309,28.6562 26.3809,39.1562 18.3809,36.1563C 18.3809,36.1563 18,38 16.3809,36.9063C 15,36 16.3809,34.9063 16.3809,34.9063C 16.3809,34.9063 10.1309,30.9062 16.6309,19.9063 Z"), + Fill = Brushes.Green, + HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center, + VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center, + RenderTransform = new ScaleTransform(2, 2), + } + }, + Margin = new Thickness(4), + RenderTransform = new ScaleTransform(), + }; + + var start = Animate.Stopwatch.Elapsed; + var index = i % (Count / 2); + var degrees = Animate.Timer + .Select(x => (x - start).TotalSeconds) + .Where(x => (x % Count) >= index && (x % Count) < index + 1) + .Select(x => (x % 1) / 1); + + element.RenderTransform.Bind( + ScaleTransform.ScaleXProperty, + degrees, + BindingPriority.Animation); + + ellipse.PointerEnter += Ellipse_PointerEnter; + ellipse.PointerLeave += Ellipse_PointerLeave; + + panel.Children.Add(element); + } + + Content = panel; + } + + private void Ellipse_PointerEnter(object sender, PointerEventArgs e) + { + ((Ellipse)sender).Fill = Brushes.Red; + } + + private void Ellipse_PointerLeave(object sender, PointerEventArgs e) + { + ((Ellipse)sender).Fill = Brushes.Blue; + } + } +} diff --git a/samples/RenderTest/Pages/ClippingPage.xaml b/samples/RenderTest/Pages/ClippingPage.xaml new file mode 100644 index 0000000000..47e9d51e3c --- /dev/null +++ b/samples/RenderTest/Pages/ClippingPage.xaml @@ -0,0 +1,15 @@ + + + + + + + + + Apply Geometry Clip + + \ No newline at end of file diff --git a/samples/RenderTest/Pages/ClippingPage.xaml.cs b/samples/RenderTest/Pages/ClippingPage.xaml.cs new file mode 100644 index 0000000000..b416f12943 --- /dev/null +++ b/samples/RenderTest/Pages/ClippingPage.xaml.cs @@ -0,0 +1,48 @@ +using System; +using System.Reactive.Linq; +using Avalonia; +using Avalonia.Animation; +using Avalonia.Controls; +using Avalonia.Data; +using Avalonia.Markup.Xaml; +using Avalonia.Media; + +namespace RenderTest.Pages +{ + public class ClippingPage : UserControl + { + private Geometry _clip; + + public ClippingPage() + { + InitializeComponent(); + CreateAnimations(); + WireUpCheckbox(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + private void CreateAnimations() + { + var clipped = this.FindControl("clipChild"); + var degrees = Animate.Timer.Select(x => x.TotalMilliseconds / 5); + clipped.RenderTransform = new RotateTransform(); + clipped.RenderTransform.Bind(RotateTransform.AngleProperty, degrees, BindingPriority.Animation); + clipped.Bind( + Border.BackgroundProperty, + clipped.GetObservable(Control.IsPointerOverProperty) + .Select(x => x ? Brushes.Crimson : AvaloniaProperty.UnsetValue)); + } + + private void WireUpCheckbox() + { + var useMask = this.FindControl("useMask"); + var clipped = this.FindControl("clipped"); + _clip = clipped.Clip; + useMask.Click += (s, e) => clipped.Clip = clipped.Clip == null ? _clip : null; + } + } +} diff --git a/samples/RenderTest/Program.cs b/samples/RenderTest/Program.cs index 7a23e09dd4..4b477a5a72 100644 --- a/samples/RenderTest/Program.cs +++ b/samples/RenderTest/Program.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using Avalonia; using Avalonia.Controls; +using Avalonia.Direct2D1; using Avalonia.Logging.Serilog; using Avalonia.Platform; using Serilog; diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderTest/RenderTest.csproj index f117c76342..a14114ddc8 100644 --- a/samples/RenderTest/RenderTest.csproj +++ b/samples/RenderTest/RenderTest.csproj @@ -45,6 +45,10 @@ ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll True + + ..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll + True + @@ -79,11 +83,18 @@ App.xaml + + ClippingPage.xaml + + + AnimationsPage.xaml + MainWindow.xaml + @@ -167,6 +178,10 @@ {6417e941-21bc-467b-a771-0de389353ce6} Avalonia.Markup + + {925dd807-b651-475f-9f7c-cbeb974ce43d} + Avalonia.Skia.Desktop + {3e908f67-5543-4879-a1dc-08eace79b3cd} Avalonia.Direct2D1 @@ -181,6 +196,21 @@ Designer + + + Designer + + + + + Designer + + + + + Designer + + + + + + + + \ No newline at end of file diff --git a/samples/BindingTest/packages.config b/samples/BindingTest/packages.config deleted file mode 100644 index 3c5f85de81..0000000000 --- a/samples/BindingTest/packages.config +++ /dev/null @@ -1,7 +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 ca5743dd5c..31b3360a15 100644 --- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj +++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj @@ -1,5 +1,5 @@  - + Debug @@ -37,14 +37,6 @@ - - ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll - True - - - ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll - True - @@ -156,4 +148,7 @@ --> + + + \ No newline at end of file diff --git a/samples/ControlCatalog.Desktop/packages.config b/samples/ControlCatalog.Desktop/packages.config deleted file mode 100644 index b3abe6f487..0000000000 --- a/samples/ControlCatalog.Desktop/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj index f4a0915dd1..877c686a8b 100644 --- a/samples/ControlCatalog/ControlCatalog.csproj +++ b/samples/ControlCatalog/ControlCatalog.csproj @@ -1,5 +1,5 @@  - + 10.0 @@ -233,4 +233,7 @@ --> + + + \ No newline at end of file diff --git a/samples/ControlCatalog/packages.config b/samples/ControlCatalog/packages.config deleted file mode 100644 index 44ff0f0628..0000000000 --- a/samples/ControlCatalog/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderTest/RenderTest.csproj index a14114ddc8..c8887f1a5d 100644 --- a/samples/RenderTest/RenderTest.csproj +++ b/samples/RenderTest/RenderTest.csproj @@ -1,5 +1,5 @@  - + Debug @@ -37,40 +37,8 @@ - - ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll - True - - - ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll - True - - - ..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll - True - @@ -219,4 +187,14 @@ --> + + + + + + + + + + \ No newline at end of file diff --git a/samples/RenderTest/packages.config b/samples/RenderTest/packages.config deleted file mode 100644 index 7ba5166073..0000000000 --- a/samples/RenderTest/packages.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/samples/VirtualizationTest/VirtualizationTest.csproj b/samples/VirtualizationTest/VirtualizationTest.csproj index 9e80dfdc8f..0c109d4544 100644 --- a/samples/VirtualizationTest/VirtualizationTest.csproj +++ b/samples/VirtualizationTest/VirtualizationTest.csproj @@ -1,5 +1,5 @@  - + Debug @@ -37,28 +37,8 @@ - - ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll - True - - - ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll - True - - - ..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - @@ -182,4 +162,10 @@ --> + + + + + + \ No newline at end of file diff --git a/samples/VirtualizationTest/packages.config b/samples/VirtualizationTest/packages.config deleted file mode 100644 index f2da2367fa..0000000000 --- a/samples/VirtualizationTest/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ 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 3ee2f5af64..a9ff8e6924 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -41,18 +41,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.3\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.3\System.Reactive.PlatformServices.dll - True - @@ -152,4 +140,22 @@ --> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Android/Avalonia.Android/packages.config b/src/Android/Avalonia.Android/packages.config deleted file mode 100644 index 057d0855b8..0000000000 --- a/src/Android/Avalonia.Android/packages.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj index d09f162150..3bdf123a02 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -64,35 +64,8 @@ - - ..\..\..\packages\Serilog.1.5.14\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll - True - - - ..\..\..\packages\Splat.1.6.2\lib\monoandroid\Splat.dll - True - - - ..\..\..\packages\Sprache.2.1.0\lib\netstandard1.0\Sprache.dll - - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.3\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.3\System.Reactive.Linq.dll - True - - - ..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.3\System.Reactive.PlatformServices.dll - True - @@ -188,4 +161,28 @@ --> + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Android/Avalonia.AndroidTestApplication/packages.config b/src/Android/Avalonia.AndroidTestApplication/packages.config deleted file mode 100644 index d353146747..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/packages.config +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Animation/Avalonia.Animation.csproj b/src/Avalonia.Animation/Avalonia.Animation.csproj index 46aac81b5a..8fd6eb1896 100644 --- a/src/Avalonia.Animation/Avalonia.Animation.csproj +++ b/src/Avalonia.Animation/Avalonia.Animation.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -63,22 +63,6 @@
- - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -91,4 +75,11 @@ --> + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Animation/packages.config b/src/Avalonia.Animation/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Animation/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 90550a12f2..ce7a2b3aa8 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -126,26 +126,6 @@ - - ..\..\packages\JetBrains.Annotations.10.0.0\lib\portable-net4+sl5+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\JetBrains.Annotations.PCL328.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -158,4 +138,12 @@ --> + + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Base/packages.config b/src/Avalonia.Base/packages.config deleted file mode 100644 index c372c92f3f..0000000000 --- a/src/Avalonia.Base/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index f12f07070e..7ee49bb0da 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -214,26 +214,6 @@ - - ..\..\packages\JetBrains.Annotations.10.0.0\lib\portable-net4+sl5+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\JetBrains.Annotations.PCL328.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -277,4 +257,12 @@ --> + + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Controls/packages.config b/src/Avalonia.Controls/packages.config deleted file mode 100644 index c372c92f3f..0000000000 --- a/src/Avalonia.Controls/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index d9174d6f36..58a328d405 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -98,22 +98,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.DesignerSupport/packages.config b/src/Avalonia.DesignerSupport/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.DesignerSupport/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj index a56575dab7..8eee79892b 100644 --- a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj +++ b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -117,25 +117,6 @@ - - ..\..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -154,4 +135,12 @@ --> + + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Diagnostics/packages.config b/src/Avalonia.Diagnostics/packages.config deleted file mode 100644 index df107dc625..0000000000 --- a/src/Avalonia.Diagnostics/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj index e87ec0b5a7..4a8ce05013 100644 --- a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj +++ b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj @@ -1,5 +1,5 @@  - + Debug @@ -36,14 +36,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - @@ -86,4 +78,8 @@ --> + + + + \ No newline at end of file diff --git a/src/Avalonia.DotNetFrameworkRuntime/packages.config b/src/Avalonia.DotNetFrameworkRuntime/packages.config deleted file mode 100644 index 1e93a8c9e7..0000000000 --- a/src/Avalonia.DotNetFrameworkRuntime/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj index 8f16bad64a..cda64c2bce 100644 --- a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj +++ b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj @@ -1,5 +1,5 @@  - + 10.0 @@ -174,14 +174,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - @@ -198,4 +190,10 @@ --> + + + + + + \ No newline at end of file diff --git a/src/Avalonia.HtmlRenderer/packages.config b/src/Avalonia.HtmlRenderer/packages.config deleted file mode 100644 index b6a9c7823c..0000000000 --- a/src/Avalonia.HtmlRenderer/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Input/Avalonia.Input.csproj b/src/Avalonia.Input/Avalonia.Input.csproj index c1ed34c1c7..161897fcad 100644 --- a/src/Avalonia.Input/Avalonia.Input.csproj +++ b/src/Avalonia.Input/Avalonia.Input.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -121,22 +121,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Input/packages.config b/src/Avalonia.Input/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Input/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj index 0d81690de0..32890f590f 100644 --- a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj +++ b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -75,22 +75,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Interactivity/packages.config b/src/Avalonia.Interactivity/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Interactivity/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Layout/Avalonia.Layout.csproj b/src/Avalonia.Layout/Avalonia.Layout.csproj index 41b545b5cb..c7938b2859 100644 --- a/src/Avalonia.Layout/Avalonia.Layout.csproj +++ b/src/Avalonia.Layout/Avalonia.Layout.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -71,22 +71,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Layout/packages.config b/src/Avalonia.Layout/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Layout/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ 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 0fb85db795..2e703758ef 100644 --- a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj +++ b/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj @@ -1,5 +1,5 @@  - + 10.0 @@ -41,10 +41,6 @@ - - ..\..\packages\Serilog.1.5.14\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll - True - @@ -63,4 +59,7 @@ --> + + + \ No newline at end of file diff --git a/src/Avalonia.Logging.Serilog/packages.config b/src/Avalonia.Logging.Serilog/packages.config deleted file mode 100644 index dbc72b5331..0000000000 --- a/src/Avalonia.Logging.Serilog/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj index 98cf115eaf..7e65460e40 100644 --- a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj +++ b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj @@ -1,5 +1,5 @@  - + 10.0 @@ -87,25 +87,6 @@ - - ..\..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.0\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.0\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -118,4 +99,12 @@ --> + + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/packages.config b/src/Avalonia.ReactiveUI/packages.config deleted file mode 100644 index f10d6d8873..0000000000 --- a/src/Avalonia.ReactiveUI/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Styling/Avalonia.Styling.csproj b/src/Avalonia.Styling/Avalonia.Styling.csproj index d38406caa7..e6642cbf69 100644 --- a/src/Avalonia.Styling/Avalonia.Styling.csproj +++ b/src/Avalonia.Styling/Avalonia.Styling.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -80,22 +80,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -124,4 +108,11 @@ --> + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Styling/packages.config b/src/Avalonia.Styling/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Styling/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ 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 26d168cb2a..6d770ed90e 100644 --- a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj +++ b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -192,22 +192,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -222,4 +206,11 @@ --> + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Themes.Default/packages.config b/src/Avalonia.Themes.Default/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Themes.Default/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index 514fa6f481..64fbab2307 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -172,22 +172,6 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.Visuals/packages.config b/src/Avalonia.Visuals/packages.config deleted file mode 100644 index 9f732f1bcb..0000000000 --- a/src/Avalonia.Visuals/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ 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 3ecd91eee2..da3c8c9952 100644 --- a/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj +++ b/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj @@ -1,5 +1,5 @@  - + Debug @@ -38,14 +38,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - @@ -120,4 +112,8 @@ --> + + + + \ No newline at end of file diff --git a/src/Gtk/Avalonia.Cairo/packages.config b/src/Gtk/Avalonia.Cairo/packages.config deleted file mode 100644 index 1e93a8c9e7..0000000000 --- a/src/Gtk/Avalonia.Cairo/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ 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 d7e4400a99..257736aaf1 100644 --- a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj +++ b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -37,14 +37,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - @@ -108,4 +100,8 @@ + + + + \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk/packages.config b/src/Gtk/Avalonia.Gtk/packages.config deleted file mode 100644 index 1e93a8c9e7..0000000000 --- a/src/Gtk/Avalonia.Gtk/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ 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 4ed20629cf..c7be3a0d90 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -322,25 +322,6 @@ - - ..\..\..\packages\Sprache.2.1.0\lib\netstandard1.0\Sprache.dll - - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -353,4 +334,16 @@ --> + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/packages.config b/src/Markup/Avalonia.Markup.Xaml/packages.config deleted file mode 100644 index 7a9353bb05..0000000000 --- a/src/Markup/Avalonia.Markup.Xaml/packages.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ 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 5826346fc9..155779fa1f 100644 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj +++ b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj @@ -1,5 +1,5 @@  - + 11.0 @@ -114,22 +114,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll - True - - - ..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll - True - @@ -142,4 +126,12 @@ --> + + + + + + + + \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup/packages.config b/src/Markup/Avalonia.Markup/packages.config deleted file mode 100644 index bcef21429a..0000000000 --- a/src/Markup/Avalonia.Markup/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ 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 c644bd84b3..4c20239e64 100644 --- a/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj +++ b/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -40,9 +40,6 @@ - - ..\..\..\packages\SkiaSharp.1.56.1-beta\lib\MonoAndroid\SkiaSharp.dll - @@ -98,4 +95,7 @@ --> + + + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.Android/packages.config b/src/Skia/Avalonia.Skia.Android/packages.config deleted file mode 100644 index 0b3bfb071f..0000000000 --- a/src/Skia/Avalonia.Skia.Android/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ 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 74d592f9bf..fd9d380cd4 100644 --- a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj +++ b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj @@ -1,5 +1,5 @@  - + Debug @@ -57,9 +57,6 @@ MinimumRecommendedRules.ruleset - - ..\..\..\packages\SkiaSharp.1.56.1-beta\lib\net45\SkiaSharp.dll - @@ -127,4 +124,7 @@ --> + + + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.Desktop/packages.config b/src/Skia/Avalonia.Skia.Desktop/packages.config deleted file mode 100644 index 2213dede69..0000000000 --- a/src/Skia/Avalonia.Skia.Desktop/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ 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 08fcd61471..a6479eb1a7 100644 --- a/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj +++ b/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -43,9 +43,6 @@ - - ..\..\..\packages\SkiaSharp.1.56.1-beta\lib\XamariniOS\SkiaSharp.dll - @@ -95,4 +92,7 @@ + + + \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.iOS/packages.config b/src/Skia/Avalonia.Skia.iOS/packages.config deleted file mode 100644 index a48c7f04d5..0000000000 --- a/src/Skia/Avalonia.Skia.iOS/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ 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 a84cec6e5a..767ea06c60 100644 --- a/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj +++ b/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj @@ -1,5 +1,5 @@  - + Debug @@ -46,10 +46,6 @@ - - ..\..\..\packages\JetBrains.Annotations.10.0.0\lib\net20\JetBrains.Annotations.dll - True - @@ -135,4 +131,7 @@ --> + + + \ No newline at end of file diff --git a/src/Windows/Avalonia.Designer/packages.config b/src/Windows/Avalonia.Designer/packages.config deleted file mode 100644 index b0ac21bcd8..0000000000 --- a/src/Windows/Avalonia.Designer/packages.config +++ /dev/null @@ -1,4 +0,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 8292ab46ed..0773300656 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -1,5 +1,5 @@  - + Debug @@ -37,18 +37,6 @@ true - - ..\..\..\packages\SharpDX.3.1.1\lib\net45\SharpDX.dll - - - ..\..\..\packages\SharpDX.Direct2D1.3.1.1\lib\net45\SharpDX.Direct2D1.dll - - - ..\..\..\packages\SharpDX.Direct3D11.3.1.1\lib\net45\SharpDX.Direct3D11.dll - - - ..\..\..\packages\SharpDX.DXGI.3.1.1\lib\net45\SharpDX.DXGI.dll - @@ -133,4 +121,10 @@ --> + + + + + + \ No newline at end of file diff --git a/src/Windows/Avalonia.Direct2D1/packages.config b/src/Windows/Avalonia.Direct2D1/packages.config deleted file mode 100644 index 780e6014e5..0000000000 --- a/src/Windows/Avalonia.Direct2D1/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj index c05d2bf8cd..be86e3c4d3 100644 --- a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj +++ b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj @@ -1,5 +1,5 @@  - + Debug @@ -44,14 +44,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - @@ -121,4 +113,8 @@ --> + + + + \ No newline at end of file diff --git a/src/Windows/Avalonia.Win32/packages.config b/src/Windows/Avalonia.Win32/packages.config deleted file mode 100644 index 1e93a8c9e7..0000000000 --- a/src/Windows/Avalonia.Win32/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ 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 d7cba35d29..7ef7108785 100644 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj +++ b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj @@ -1,5 +1,5 @@  - + Debug iPhoneSimulator @@ -98,22 +98,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.3\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.3\System.Reactive.Linq.dll - True - - - ..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.3\System.Reactive.PlatformServices.dll - True - @@ -123,4 +107,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/iOS/Avalonia.iOS/packages.config b/src/iOS/Avalonia.iOS/packages.config deleted file mode 100644 index 57fa6a12d6..0000000000 --- a/src/iOS/Avalonia.iOS/packages.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ 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 ff7aa94502..089b8afb73 100644 --- a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj +++ b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj @@ -1,5 +1,5 @@  - + Debug iPhoneSimulator @@ -109,22 +109,6 @@ - - ..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.3\System.Reactive.Core.dll - True - - - ..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll - True - - - ..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.3\System.Reactive.Linq.dll - True - - - ..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.3\System.Reactive.PlatformServices.dll - True - @@ -203,4 +187,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/iOS/Avalonia.iOSTestApplication/packages.config b/src/iOS/Avalonia.iOSTestApplication/packages.config deleted file mode 100644 index 57fa6a12d6..0000000000 --- a/src/iOS/Avalonia.iOSTestApplication/packages.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ 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 07ed7f14ca..c44445a709 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -39,47 +39,8 @@ 4 - - ..\..\packages\Microsoft.Reactive.Testing.3.0.0\lib\net45\Microsoft.Reactive.Testing.dll - True - - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -162,4 +123,19 @@ --> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Base.UnitTests/packages.config b/tests/Avalonia.Base.UnitTests/packages.config deleted file mode 100644 index f2128ddba6..0000000000 --- a/tests/Avalonia.Base.UnitTests/packages.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index cb8b32c2cc..004c838336 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -1,5 +1,5 @@  - + Debug @@ -35,25 +35,9 @@ 4 - - ..\..\packages\BenchmarkDotNet.0.9.2\lib\net45\BenchmarkDotNet.dll - True - - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\AutoFixture.3.40.0\lib\net40\Ploeh.AutoFixture.dll - True - - - ..\..\packages\AutoFixture.AutoMoq.3.40.0\lib\net40\Ploeh.AutoFixture.AutoMoq.dll - True - @@ -123,4 +107,10 @@ --> + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Benchmarks/packages.config b/tests/Avalonia.Benchmarks/packages.config deleted file mode 100644 index b1d27d4562..0000000000 --- a/tests/Avalonia.Benchmarks/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ 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 c581cccf2f..f7b65d612b 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -39,51 +39,8 @@ 4 - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\AutoFixture.3.40.0\lib\net40\Ploeh.AutoFixture.dll - True - - - ..\..\packages\AutoFixture.AutoMoq.3.40.0\lib\net40\Ploeh.AutoFixture.AutoMoq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -244,4 +201,20 @@ --> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Controls.UnitTests/packages.config b/tests/Avalonia.Controls.UnitTests/packages.config deleted file mode 100644 index 8dd3ac4427..0000000000 --- a/tests/Avalonia.Controls.UnitTests/packages.config +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ 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 97dfda5967..be65465491 100644 --- a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj +++ b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -38,22 +38,6 @@ - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -83,4 +67,12 @@ --> + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.DesignerSupport.Tests/packages.config b/tests/Avalonia.DesignerSupport.Tests/packages.config deleted file mode 100644 index 24039f1451..0000000000 --- a/tests/Avalonia.DesignerSupport.Tests/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ 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 3db0bfa876..5eb48b8502 100644 --- a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj +++ b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj @@ -1,5 +1,5 @@  - + @@ -43,21 +43,6 @@ - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -124,4 +109,13 @@ --> + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Direct2D1.UnitTests/packages.config b/tests/Avalonia.Direct2D1.UnitTests/packages.config deleted file mode 100644 index dcbf45edf0..0000000000 --- a/tests/Avalonia.Direct2D1.UnitTests/packages.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ 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 5ed05e9e33..a1a917ed25 100644 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj @@ -1,5 +1,5 @@  - + @@ -35,54 +35,14 @@ 4 - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -151,4 +111,20 @@ --> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Input.UnitTests/packages.config b/tests/Avalonia.Input.UnitTests/packages.config deleted file mode 100644 index 459b77b465..0000000000 --- a/tests/Avalonia.Input.UnitTests/packages.config +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ 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 d8a6ee2506..710dfc88a7 100644 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj +++ b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj @@ -1,5 +1,5 @@  - + @@ -37,47 +37,12 @@ - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -138,4 +103,19 @@ --> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Interactivity.UnitTests/packages.config b/tests/Avalonia.Interactivity.UnitTests/packages.config deleted file mode 100644 index 953a4a666d..0000000000 --- a/tests/Avalonia.Interactivity.UnitTests/packages.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ 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 d7912d1828..7e0418f306 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -39,42 +39,7 @@ 4 - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\AutoFixture.3.40.0\lib\net40\Ploeh.AutoFixture.dll - True - - - ..\..\packages\AutoFixture.AutoMoq.3.40.0\lib\net40\Ploeh.AutoFixture.AutoMoq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -186,4 +151,18 @@ --> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Layout.UnitTests/packages.config b/tests/Avalonia.Layout.UnitTests/packages.config deleted file mode 100644 index 6dbff1e105..0000000000 --- a/tests/Avalonia.Layout.UnitTests/packages.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index 31e7d5ebea..cef6a02225 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -33,44 +33,8 @@ 4 - - ..\..\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\lib\dotMemory.Unit.dll - True - - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\AutoFixture.3.40.0\lib\net40\Ploeh.AutoFixture.dll - True - - - ..\..\packages\AutoFixture.AutoMoq.3.40.0\lib\net40\Ploeh.AutoFixture.AutoMoq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll - True - @@ -78,22 +42,6 @@ - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -178,4 +126,22 @@ --> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.LeakTests/packages.config b/tests/Avalonia.LeakTests/packages.config deleted file mode 100644 index 302ccfb214..0000000000 --- a/tests/Avalonia.LeakTests/packages.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ 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 e2b11dc1f0..ea7c87da2e 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -1,5 +1,5 @@  - + @@ -34,41 +34,13 @@ 4 - - ..\..\packages\Microsoft.Reactive.Testing.3.0.0\lib\net45\Microsoft.Reactive.Testing.dll - True - - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.ComponentModel.Annotations.dll - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll - True - @@ -76,22 +48,6 @@ - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -179,4 +135,22 @@ --> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Markup.UnitTests/packages.config b/tests/Avalonia.Markup.UnitTests/packages.config deleted file mode 100644 index d264c076fd..0000000000 --- a/tests/Avalonia.Markup.UnitTests/packages.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ 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 6bb8fb0008..dc044cbe83 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -42,45 +42,7 @@ 4 - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll - True - - - ..\..\packages\Sprache.2.1.0\lib\net40\Sprache.dll - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -221,4 +183,19 @@ --> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/packages.config b/tests/Avalonia.Markup.Xaml.UnitTests/packages.config deleted file mode 100644 index cad6395387..0000000000 --- a/tests/Avalonia.Markup.Xaml.UnitTests/packages.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ 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 cf53b4ef9b..e80ab1cc8b 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -39,47 +39,8 @@ 4 - - ..\..\packages\Microsoft.Reactive.Testing.3.0.0\lib\net45\Microsoft.Reactive.Testing.dll - True - - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -191,4 +152,19 @@ --> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Styling.UnitTests/packages.config b/tests/Avalonia.Styling.UnitTests/packages.config deleted file mode 100644 index f2128ddba6..0000000000 --- a/tests/Avalonia.Styling.UnitTests/packages.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj index f7878ab91a..1133da9286 100644 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj +++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -32,20 +32,8 @@ 4 - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - @@ -127,4 +115,9 @@ --> + + + + + \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/packages.config b/tests/Avalonia.UnitTests/packages.config deleted file mode 100644 index 8805596f60..0000000000 --- a/tests/Avalonia.UnitTests/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ 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 97b3e38e32..0d0e9648e6 100644 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -39,34 +39,7 @@ 4 - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -173,4 +146,16 @@ --> + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Visuals.UnitTests/packages.config b/tests/Avalonia.Visuals.UnitTests/packages.config deleted file mode 100644 index 8eb9d05cfc..0000000000 --- a/tests/Avalonia.Visuals.UnitTests/packages.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file From e780c4201af14fa74c0ba2f63ebe5a1cd95eda3d Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Tue, 7 Mar 2017 22:55:43 +0300 Subject: [PATCH 037/158] Switched to .NETStandard (mostly 1.1) --- Avalonia.sln | 4 +- samples/BindingTest/BindingTest.csproj | 7 ++- .../ControlCatalog.Desktop.csproj | 5 +- samples/ControlCatalog/ControlCatalog.csproj | 2 +- samples/RenderTest/RenderTest.csproj | 8 +-- .../VirtualizationTest.csproj | 7 ++- .../Resources/Resource.Designer.cs | 7 ++- .../Avalonia.AndroidTestApplication.csproj | 4 +- .../Resources/Resource.Designer.cs | 1 + .../Avalonia.Animation.csproj | 31 ++--------- src/Avalonia.Base/Avalonia.Base.csproj | 35 ++---------- .../Avalonia.Controls.csproj | 36 ++----------- src/Avalonia.Controls/Utils/UndoRedoHelper.cs | 1 - .../Avalonia.DesignerSupport.csproj | 32 ++--------- .../Avalonia.Diagnostics.csproj | 29 ++-------- .../Avalonia.DotNetCoreRuntime.csproj | 40 ++++---------- src/Avalonia.DotNetCoreRuntime/project.json | 11 ---- .../Avalonia.HtmlRenderer.csproj | 48 +++-------------- src/Avalonia.HtmlRenderer/Compat/Api.cs | 28 ++++++++++ src/Avalonia.Input/Avalonia.Input.csproj | 35 ++---------- src/Avalonia.Input/IInputElement.cs | 2 - .../Avalonia.Interactivity.csproj | 30 ++--------- src/Avalonia.Layout/Avalonia.Layout.csproj | 30 ++--------- .../Avalonia.Logging.Serilog.csproj | 33 ++---------- .../Avalonia.ReactiveUI.csproj | 53 ++++++++----------- src/Avalonia.ReactiveUI/Shims.cs | 34 ++++++++++++ src/Avalonia.Styling/Avalonia.Styling.csproj | 31 ++--------- .../Avalonia.Themes.Default.csproj | 31 ++--------- src/Avalonia.Visuals/Avalonia.Visuals.csproj | 35 ++---------- src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj | 29 ++-------- .../Avalonia.Markup.Xaml.csproj | 28 ++-------- .../Avalonia.Markup/Avalonia.Markup.csproj | 31 ++--------- .../StandardRuntimePlatform.cs | 2 +- .../Avalonia.Skia.Desktop.NetStandard.csproj | 34 +++--------- .../project.json | 11 ---- .../Avalonia.Skia.Desktop.csproj | 16 ------ .../Avalonia.Designer.csproj | 2 +- .../Avalonia.Win32.NetStandard.csproj | 32 ++--------- .../Avalonia.Win32.NetStandard/project.json | 11 ---- 39 files changed, 210 insertions(+), 636 deletions(-) delete mode 100644 src/Avalonia.DotNetCoreRuntime/project.json create mode 100644 src/Avalonia.HtmlRenderer/Compat/Api.cs create mode 100644 src/Avalonia.ReactiveUI/Shims.cs delete mode 100644 src/Skia/Avalonia.Skia.Desktop.NetStandard/project.json delete mode 100644 src/Windows/Avalonia.Win32.NetStandard/project.json diff --git a/Avalonia.sln b/Avalonia.sln index ad14483b40..c2ba081fc0 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.26228.4 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 diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingTest/BindingTest.csproj index 49cde9efdb..d8663f5031 100644 --- a/samples/BindingTest/BindingTest.csproj +++ b/samples/BindingTest/BindingTest.csproj @@ -166,8 +166,11 @@ --> - - + + + 2.1.0 + + diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj index 31b3360a15..bd0e56e3e6 100644 --- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj +++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj @@ -149,6 +149,9 @@ --> - + + + 2.1.0 + \ No newline at end of file diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj index 877c686a8b..80e1f591ea 100644 --- a/samples/ControlCatalog/ControlCatalog.csproj +++ b/samples/ControlCatalog/ControlCatalog.csproj @@ -234,6 +234,6 @@ --> - + \ No newline at end of file diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderTest/RenderTest.csproj index c8887f1a5d..b60eb7ab36 100644 --- a/samples/RenderTest/RenderTest.csproj +++ b/samples/RenderTest/RenderTest.csproj @@ -66,7 +66,6 @@ - @@ -188,8 +187,11 @@ --> - - + + + 2.1.0 + + diff --git a/samples/VirtualizationTest/VirtualizationTest.csproj b/samples/VirtualizationTest/VirtualizationTest.csproj index 0c109d4544..0ed2b9d9bd 100644 --- a/samples/VirtualizationTest/VirtualizationTest.csproj +++ b/samples/VirtualizationTest/VirtualizationTest.csproj @@ -163,8 +163,11 @@ --> - - + + + 2.1.0 + + diff --git a/src/Android/Avalonia.Android/Resources/Resource.Designer.cs b/src/Android/Avalonia.Android/Resources/Resource.Designer.cs index 80cbbc51ec..e66c2800d3 100644 --- a/src/Android/Avalonia.Android/Resources/Resource.Designer.cs +++ b/src/Android/Avalonia.Android/Resources/Resource.Designer.cs @@ -40,11 +40,14 @@ namespace Avalonia.Android public partial class String { + // aapt resource value: 0x7f020002 + public static int ApplicationName = 2130837506; + // aapt resource value: 0x7f020001 - public static int ApplicationName = 2130837505; + public static int Hello = 2130837505; // aapt resource value: 0x7f020000 - public static int Hello = 2130837504; + public static int library_name = 2130837504; static String() { diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj index 3bdf123a02..7ce8879304 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj @@ -162,8 +162,8 @@ --> - - + + diff --git a/src/Android/Avalonia.AndroidTestApplication/Resources/Resource.Designer.cs b/src/Android/Avalonia.AndroidTestApplication/Resources/Resource.Designer.cs index 3fa0707176..91327cf941 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Resources/Resource.Designer.cs +++ b/src/Android/Avalonia.AndroidTestApplication/Resources/Resource.Designer.cs @@ -28,6 +28,7 @@ namespace Avalonia.AndroidTestApplication { global::Avalonia.Android.Resource.String.ApplicationName = global::Avalonia.AndroidTestApplication.Resource.String.ApplicationName; global::Avalonia.Android.Resource.String.Hello = global::Avalonia.AndroidTestApplication.Resource.String.Hello; + global::Avalonia.Android.Resource.String.library_name = global::Avalonia.AndroidTestApplication.Resource.String.library_name; global::Splat.Resource.String.library_name = global::Avalonia.AndroidTestApplication.Resource.String.library_name; } diff --git a/src/Avalonia.Animation/Avalonia.Animation.csproj b/src/Avalonia.Animation/Avalonia.Animation.csproj index 8fd6eb1896..0ede370efc 100644 --- a/src/Avalonia.Animation/Avalonia.Animation.csproj +++ b/src/Avalonia.Animation/Avalonia.Animation.csproj @@ -1,20 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200} - Library - Properties - Avalonia.Animation - Avalonia.Animation - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 + netstandard1.1 + False + false true @@ -64,17 +52,6 @@ - - - - - diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index ce7a2b3aa8..f5c5815124 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Library - Properties - Avalonia - Avalonia.Base - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -128,18 +114,7 @@ - - - - - - + diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index 7ee49bb0da..21b29c53f9 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {D2221C82-4A25-4583-9B43-D791E3F6820C} - Library - Properties - Avalonia.Controls - Avalonia.Controls - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -215,9 +201,6 @@ - - - {D211E587-D8BC-45B9-95A4-F297C8FA5200} @@ -248,17 +231,8 @@ Avalonia.Styling - - - - + diff --git a/src/Avalonia.Controls/Utils/UndoRedoHelper.cs b/src/Avalonia.Controls/Utils/UndoRedoHelper.cs index 71ba3793d1..be4c1aa6c4 100644 --- a/src/Avalonia.Controls/Utils/UndoRedoHelper.cs +++ b/src/Avalonia.Controls/Utils/UndoRedoHelper.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using JetBrains.Annotations; using Avalonia.Utilities; namespace Avalonia.Controls.Utils diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index 58a328d405..455c149e30 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {799A7BB5-3C2C-48B6-85A7-406A12C420DA} - Library - Properties - Avalonia - Avalonia.DesignerSupport - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -94,20 +80,12 @@ - - - - - - - + diff --git a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj index 8eee79892b..3321afcc88 100644 --- a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj +++ b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {7062AE20-5DCC-4442-9645-8195BDECE63E} - Library - Properties - Avalonia.Diagnostics - Avalonia.Diagnostics - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -119,7 +105,6 @@ - Designer @@ -127,16 +112,12 @@ Designer - - - + diff --git a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj index 8a60d5d9c7..434420e376 100644 --- a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj +++ b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj @@ -1,22 +1,9 @@ - - - - - 14.0 - Debug - AnyCPU - {7863EA94-F0FB-4386-BF8C-E5BFA761560A} - Library - Properties - Avalonia.DotNetCoreRuntime - Avalonia.DotNetCoreRuntime - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - v5.0 - + + + netstandard1.6 + False + false + true full @@ -36,10 +23,6 @@ 4 bin\Release\Avalonia.DotNetCoreRuntime.XML - - - - SharedAssemblyInfo.cs @@ -77,13 +60,8 @@ + + + - - \ No newline at end of file diff --git a/src/Avalonia.DotNetCoreRuntime/project.json b/src/Avalonia.DotNetCoreRuntime/project.json deleted file mode 100644 index d6ae90b33b..0000000000 --- a/src/Avalonia.DotNetCoreRuntime/project.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "supports": {}, - "dependencies": { - "Microsoft.NETCore.Portable.Compatibility": "1.0.1", - "NETStandard.Library": "1.6.0", - "System.Threading.ThreadPool": "4.3.0" - }, - "frameworks": { - "netstandard1.5": {} - } -} \ No newline at end of file diff --git a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj index cda64c2bce..e759210820 100644 --- a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj +++ b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj @@ -1,22 +1,8 @@ - - - + - 10.0 - Debug - AnyCPU - {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D} - Library - Properties - Avalonia.HtmlRenderer - Avalonia.HtmlRenderer - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -35,6 +21,9 @@ prompt 4 + + + @@ -51,6 +40,7 @@ + @@ -171,28 +161,6 @@ - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - diff --git a/src/Avalonia.HtmlRenderer/Compat/Api.cs b/src/Avalonia.HtmlRenderer/Compat/Api.cs new file mode 100644 index 0000000000..798b697277 --- /dev/null +++ b/src/Avalonia.HtmlRenderer/Compat/Api.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace System.Net +{ + internal class AsyncCompletedEventArgs + { + public object UserState { get; set; } + public Exception Error { get; set; } + public bool Cancelled { get; set; } + + public AsyncCompletedEventArgs(Exception error, bool cancelled, object userState) + { + + } + } + + class WebException : Exception + { + public object Response { get; set; } + } + + class HttpWebResponse + { + public HttpStatusCode StatusCode { get; set; } + } +} diff --git a/src/Avalonia.Input/Avalonia.Input.csproj b/src/Avalonia.Input/Avalonia.Input.csproj index 161897fcad..3a2c069217 100644 --- a/src/Avalonia.Input/Avalonia.Input.csproj +++ b/src/Avalonia.Input/Avalonia.Input.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {62024B2D-53EB-4638-B26B-85EEAA54866E} - Library - Properties - Avalonia.Input - Avalonia.Input - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -117,19 +103,6 @@ - - - - - - - diff --git a/src/Avalonia.Input/IInputElement.cs b/src/Avalonia.Input/IInputElement.cs index 72f03d3ae5..786353f05c 100644 --- a/src/Avalonia.Input/IInputElement.cs +++ b/src/Avalonia.Input/IInputElement.cs @@ -1,7 +1,5 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. - -using System.Diagnostics.Contracts; using System; using System.Collections.Generic; using Avalonia.Interactivity; diff --git a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj index 32890f590f..68755fa2b8 100644 --- a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj +++ b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B} - Library - Properties - Avalonia.Interactivity - Avalonia.Interactivity - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -76,14 +62,6 @@ - - diff --git a/src/Avalonia.Layout/Avalonia.Layout.csproj b/src/Avalonia.Layout/Avalonia.Layout.csproj index c7938b2859..a3423cb60d 100644 --- a/src/Avalonia.Layout/Avalonia.Layout.csproj +++ b/src/Avalonia.Layout/Avalonia.Layout.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {42472427-4774-4C81-8AFF-9F27B8E31721} - Library - Properties - Avalonia - Avalonia.Layout - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -72,14 +58,6 @@ - - diff --git a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj b/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj index 2e703758ef..c5781c9a1a 100644 --- a/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj +++ b/src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj @@ -1,20 +1,8 @@ - - - + - 10.0 - Debug - AnyCPU - {B61B66A3-B82D-4875-8001-89D3394FE0C9} - Library - Properties - Avalonia.Logging.Serilog - Avalonia.Logging.Serilog - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 + netstandard1.1 + False + false true @@ -42,24 +30,13 @@ - - - {b09b78d8-9b26-48b0-9149-d64a2f120f3f} Avalonia.Base - - - + \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj index 7e65460e40..c5789eddac 100644 --- a/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj +++ b/src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj @@ -1,27 +1,15 @@ - - - + - 10.0 - Debug - AnyCPU - {6417B24E-49C2-4985-8DB2-3AB9D898EC91} - Library - Properties - Avalonia.ReactiveUI - Avalonia.ReactiveUI - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile259 - v4.5 + netstandard1.1 + False + false true full false bin\Debug\ - TRACE;DEBUG;MONO PORTABLE + TRACE;DEBUG;MONO PORTABLE;NETSTANDARD1_1 prompt 4 @@ -29,15 +17,19 @@ pdbonly true bin\Release\ - TRACE;MONO PORTABLE + TRACE;MONO PORTABLE;RELEASE;NETSTANDARD1_1 prompt 4 + + + + @@ -65,9 +57,7 @@ - - Code - + @@ -86,25 +76,26 @@ - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/src/Avalonia.ReactiveUI/Shims.cs b/src/Avalonia.ReactiveUI/Shims.cs new file mode 100644 index 0000000000..2729a68d6f --- /dev/null +++ b/src/Avalonia.ReactiveUI/Shims.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace System.Runtime.Serialization +{ + class IgnoreDataMemberAttribute : Attribute + { + } + + class DataMemberAttribute : Attribute + { + } + class OnDeserializedAttribute : Attribute + { + } + + class DataContractAttribute : Attribute + { + } + + class StreamingContext { } +} + +namespace System.Diagnostics.Contracts +{ + static class Contract + { + public static void Requires(bool condition) + { + + } + } +} diff --git a/src/Avalonia.Styling/Avalonia.Styling.csproj b/src/Avalonia.Styling/Avalonia.Styling.csproj index e6642cbf69..ea35845030 100644 --- a/src/Avalonia.Styling/Avalonia.Styling.csproj +++ b/src/Avalonia.Styling/Avalonia.Styling.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F} - Library - Properties - Avalonia - Avalonia.Styling - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -81,11 +67,6 @@ - - - - - {d211e587-d8bc-45b9-95a4-f297c8fa5200} @@ -100,14 +81,10 @@ Avalonia.Visuals - - diff --git a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj index 6d770ed90e..f599e007d5 100644 --- a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj +++ b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F} - Library - Properties - Avalonia.Themes.Default - Avalonia.Themes.Default - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -184,7 +170,6 @@ Designer - @@ -198,14 +183,6 @@ Designer - - diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj index 64fbab2307..0834384f90 100644 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj @@ -1,22 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {EB582467-6ABB-43A1-B052-E981BA910E3A} - Library - Properties - Avalonia - Avalonia.Visuals - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 - - + netstandard1.1 + False + false true @@ -168,19 +154,6 @@ - - - - - - - diff --git a/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj b/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj index 958af437a6..ac20833787 100644 --- a/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj +++ b/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj @@ -1,21 +1,8 @@ - - - + - 14.0 - Debug - AnyCPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658} - Library - Properties - Avalonia.Gtk3 - Avalonia.Gtk3 - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - v5.0 + netstandard1.1 + False + false true @@ -92,12 +79,4 @@ Avalonia.SceneGraph - - \ 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 c7be3a0d90..7786272834 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -1,20 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {3E53A01A-B331-47F3-B828-4A5717E77A24} - Library - Properties - Avalonia.Markup.Xaml - Avalonia.Markup.Xaml - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 + netstandard1.1 + False + false true @@ -279,10 +267,6 @@ - - - - {D211E587-D8BC-45B9-95A4-F297C8FA5200} @@ -326,14 +310,10 @@ - - diff --git a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj index 155779fa1f..9240561ba4 100644 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj +++ b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj @@ -1,20 +1,8 @@ - - - + - 11.0 - Debug - AnyCPU - {6417E941-21BC-467B-A771-0DE389353CE6} - Library - Properties - Avalonia.Markup - Avalonia.Markup - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile7 - v4.5 + netstandard1.1 + False + false true @@ -113,21 +101,12 @@ Avalonia.Styling - - - - - - - - + diff --git a/src/Shared/PlatformSupport/StandardRuntimePlatform.cs b/src/Shared/PlatformSupport/StandardRuntimePlatform.cs index e2aafd562b..1f42aec16e 100644 --- a/src/Shared/PlatformSupport/StandardRuntimePlatform.cs +++ b/src/Shared/PlatformSupport/StandardRuntimePlatform.cs @@ -13,7 +13,7 @@ namespace Avalonia.Shared.PlatformSupport { #if NETSTANDARD - public void PostThreadPoolItem(Action cb) => ThreadPool.QueueUserWorkItem(_ => cb(), null); + public void PostThreadPoolItem(Action cb) => ThreadPool.QueueUserWorkItem(_ => cb(), null); #else public Assembly[] GetLoadedAssemblies() => AppDomain.CurrentDomain.GetAssemblies(); public void PostThreadPoolItem(Action cb) => ThreadPool.UnsafeQueueUserWorkItem(_ => cb(), null); 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 f421ed04f4..4e8bb06e13 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 @@ -1,21 +1,10 @@ - - - + - 14.0 - Debug - AnyCPU - {7D2D3083-71DD-4CC9-8907-39A0D86FB322} - Library - Properties + netstandard1.3 + False + false Avalonia.Skia.Desktop Avalonia.Skia.Desktop - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - v5.0 true @@ -36,15 +25,14 @@ 4 true - - - - Properties\SharedAssemblyInfo.cs + + + {b09b78d8-9b26-48b0-9149-d64a2f120f3f} @@ -77,12 +65,4 @@ - - \ No newline at end of file diff --git a/src/Skia/Avalonia.Skia.Desktop.NetStandard/project.json b/src/Skia/Avalonia.Skia.Desktop.NetStandard/project.json deleted file mode 100644 index 8615e024b7..0000000000 --- a/src/Skia/Avalonia.Skia.Desktop.NetStandard/project.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "supports": {}, - "dependencies": { - "Microsoft.NETCore.Portable.Compatibility": "1.0.1", - "NETStandard.Library": "1.6.0", - "SkiaSharp": "1.56.1-beta" - }, - "frameworks": { - "netstandard1.3": {} - } -} \ 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 fd9d380cd4..164bccc933 100644 --- a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj +++ b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj @@ -104,27 +104,11 @@ Avalonia.Styling - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - \ 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 767ea06c60..b59892f4a4 100644 --- a/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj +++ b/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj @@ -132,6 +132,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 95d1b8a345..0642bc7754 100644 --- a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj +++ b/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj @@ -1,21 +1,8 @@ - - - + - 14.0 - Debug - AnyCPU - {40759A76-D0F2-464E-8000-6FF0F5C4BD7C} - Library - Properties - Avalonia.Win32 - Avalonia.Win32 - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - v5.0 + netstandard1.1 + False + false true @@ -81,16 +68,5 @@ - - - - - \ No newline at end of file diff --git a/src/Windows/Avalonia.Win32.NetStandard/project.json b/src/Windows/Avalonia.Win32.NetStandard/project.json deleted file mode 100644 index 74e316ac12..0000000000 --- a/src/Windows/Avalonia.Win32.NetStandard/project.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "supports": {}, - "dependencies": { - "Microsoft.NETCore.Portable.Compatibility": "1.0.1", - "NETStandard.Library": "1.6.0", - "System.Reactive.Core": "3.0.0" - }, - "frameworks": { - "netstandard1.1": {} - } -} \ No newline at end of file From 363898e658c3663405586b086c7ba144fe3638dc Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Tue, 7 Mar 2017 23:20:52 +0300 Subject: [PATCH 038/158] Migrated render tests to PackageReference --- .../Avalonia.Cairo.RenderTests.csproj | 83 ++++++++++--------- .../Avalonia.Direct2D1.RenderTests.csproj | 48 +++++------ .../Avalonia.Skia.RenderTests.csproj | 47 ++++++----- ...packages.Avalonia.Cairo.RenderTests.config | 16 ---- ...ages.Avalonia.Direct2D1.RenderTests.config | 10 --- .../packages.Avalonia.Skia.RenderTests.config | 10 --- 6 files changed, 90 insertions(+), 124 deletions(-) delete mode 100644 tests/Avalonia.RenderTests/packages.Avalonia.Cairo.RenderTests.config delete mode 100644 tests/Avalonia.RenderTests/packages.Avalonia.Direct2D1.RenderTests.config delete mode 100644 tests/Avalonia.RenderTests/packages.Avalonia.Skia.RenderTests.config diff --git a/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj b/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj index 7392fd76cd..3bf901298b 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj @@ -1,5 +1,5 @@  - + Debug @@ -37,49 +37,9 @@ 4 - - ..\..\packages\Magick.NET-Q16-AnyCPU.7.0.0.0101\lib\net40-client\Magick.NET-Q16-AnyCPU.dll - True - - - ..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll - True - - - ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll - True - - - ..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll - True - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -168,4 +128,45 @@ --> + + + 7.0.0.0101 + + + 3.0.0 + + + 3.0.0 + + + 3.0.0 + + + 3.0.0 + + + 3.0.0 + + + 3.0.0 + + + 2.1.0 + + + 2.0.0 + + + 2.1.0 + + + 2.1.0 + + + 2.1.0 + + + 2.1.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 68d25a73c8..a4d1324fbb 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -40,31 +40,8 @@ - - ..\..\packages\Magick.NET-Q16-AnyCPU.7.0.0.0101\lib\net40-client\Magick.NET-Q16-AnyCPU.dll - True - - - ..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -152,4 +129,27 @@ --> + + + 7.0.0.0101 + + + 2.1.0 + + + 2.0.0 + + + 2.1.0 + + + 2.1.0 + + + 2.1.0 + + + 2.1.0 + + \ 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 1ba80837f0..16fd908fcf 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj @@ -1,5 +1,5 @@  - + @@ -51,10 +51,6 @@ MinimumRecommendedRules.ruleset - - ..\..\packages\Magick.NET-Q16-AnyCPU.7.0.0.0101\lib\net40-client\Magick.NET-Q16-AnyCPU.dll - True - @@ -64,24 +60,6 @@ - - ..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll - - - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True - - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True - - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True - @@ -145,4 +123,27 @@ --> + + + 7.0.0.0101 + + + 2.1.0 + + + 2.0.0 + + + 2.1.0 + + + 2.1.0 + + + 2.1.0 + + + 2.1.0 + + \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/packages.Avalonia.Cairo.RenderTests.config b/tests/Avalonia.RenderTests/packages.Avalonia.Cairo.RenderTests.config deleted file mode 100644 index fa1e626283..0000000000 --- a/tests/Avalonia.RenderTests/packages.Avalonia.Cairo.RenderTests.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/packages.Avalonia.Direct2D1.RenderTests.config b/tests/Avalonia.RenderTests/packages.Avalonia.Direct2D1.RenderTests.config deleted file mode 100644 index 07a670d200..0000000000 --- a/tests/Avalonia.RenderTests/packages.Avalonia.Direct2D1.RenderTests.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/packages.Avalonia.Skia.RenderTests.config b/tests/Avalonia.RenderTests/packages.Avalonia.Skia.RenderTests.config deleted file mode 100644 index 07a670d200..0000000000 --- a/tests/Avalonia.RenderTests/packages.Avalonia.Skia.RenderTests.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file From b6b5b9de88ce03fbceb3ab51f57c3ba6560cb006 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 01:48:42 +0300 Subject: [PATCH 039/158] Test now compile and can be run from visual studio --- .../Avalonia.Base.UnitTests.csproj | 26 ++++-------- .../Avalonia.Benchmarks.csproj | 2 +- .../Avalonia.Controls.UnitTests.csproj | 23 ++++------- .../Avalonia.DesignerSupport.TestApp.csproj | 2 +- .../Avalonia.DesignerSupport.Tests.csproj | 14 +++---- .../Avalonia.Direct2D1.UnitTests.csproj | 23 ++++------- .../Avalonia.Input.UnitTests.csproj | 23 ++++------- .../Avalonia.Interactivity.UnitTests.csproj | 23 ++++------- .../Avalonia.Layout.UnitTests.csproj | 23 ++++------- .../Avalonia.LeakTests.csproj | 14 +++---- .../Avalonia.Markup.UnitTests.csproj | 40 ++++--------------- .../Avalonia.Markup.Xaml.UnitTests.csproj | 23 ++++------- .../Avalonia.Cairo.RenderTests.csproj | 33 ++++----------- .../Avalonia.Direct2D1.RenderTests.csproj | 31 ++++---------- .../Avalonia.Skia.RenderTests.csproj | 36 ++++------------- .../Avalonia.Styling.UnitTests.csproj | 23 ++++------- .../Avalonia.UnitTests.csproj | 2 +- .../Avalonia.Visuals.UnitTests.csproj | 23 ++++------- 18 files changed, 118 insertions(+), 266 deletions(-) diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj index c44445a709..c44bb23f3c 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -1,6 +1,5 @@  - Debug AnyCPU @@ -9,7 +8,7 @@ Properties Avalonia.Base.UnitTests Avalonia.Base.UnitTests - v4.5 + v4.6.1 512 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) @@ -74,9 +73,6 @@ - - - @@ -110,12 +106,6 @@ - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - + + + + + + \ 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 5eb48b8502..f0e3bb9471 100644 --- a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj +++ b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj @@ -1,6 +1,5 @@  - Debug @@ -10,7 +9,7 @@ Properties Avalonia.Direct2D1.UnitTests Avalonia.Direct2D1.UnitTests - v4.5 + v4.6.1 512 @@ -96,12 +95,6 @@ - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - - + + + + + + + \ 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 a1a917ed25..b76d63f563 100644 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj @@ -1,6 +1,5 @@  - Debug @@ -10,7 +9,7 @@ Properties Avalonia.Input.UnitTests Avalonia.Input.UnitTests - v4.5 + v4.6.1 512 @@ -98,12 +97,6 @@ - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - From 485fe1364eb4833edab133700d1eb0ce541af584 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 08:41:41 +0300 Subject: [PATCH 043/158] Everything is buildable via MSBuild --- Avalonia.sln | 9 --- samples/BindingTest/BindingTest.csproj | 3 +- .../ControlCatalog.Android.csproj | 1 + .../Resources/Resource.Designer.cs | 9 ++- .../ControlCatalog.Desktop.csproj | 3 +- .../ControlCatalog.iOS.csproj | 1 + samples/RenderTest/RenderTest.csproj | 1 + .../VirtualizationTest.csproj | 1 + .../GtkInteropDemo/GtkInteropDemo.csproj | 1 + .../WindowsInteropTest.csproj | 1 + .../Avalonia.Android/Avalonia.Android.csproj | 1 + .../Avalonia.AndroidTestApplication.csproj | 1 + .../Avalonia.DotNetFrameworkRuntime.csproj | 1 + src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj | 1 + src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj | 1 + .../Microsoft.NuGet.Build.Tasks.Patched.dll | Bin 0 -> 35328 bytes src/Shared/nuget.workaround.targets | 63 ++++++++++++++++++ .../Avalonia.Skia.Android.csproj | 1 + .../Avalonia.Skia.Desktop.csproj | 8 ++- .../Avalonia.Skia.iOS.csproj | 1 + .../Avalonia.Designer.csproj | 8 ++- .../Avalonia.Direct2D1.csproj | 1 + .../Avalonia.Win32/Avalonia.Win32.csproj | 1 + src/iOS/Avalonia.iOS/Avalonia.iOS.csproj | 1 + .../Avalonia.iOSTestApplication.csproj | 1 + .../Avalonia.Base.UnitTests.csproj | 23 +------ .../Avalonia.Benchmarks.csproj | 1 + .../Avalonia.Controls.UnitTests.csproj | 41 +----------- .../Avalonia.DesignerSupport.TestApp.csproj | 1 + .../Avalonia.DesignerSupport.Tests.csproj | 1 + .../Avalonia.Direct2D1.UnitTests.csproj | 6 +- .../Avalonia.Input.UnitTests.csproj | 1 + .../Avalonia.Interactivity.UnitTests.csproj | 1 + .../Avalonia.Layout.UnitTests.csproj | 22 +----- .../Avalonia.LeakTests.csproj | 1 + .../Avalonia.Markup.UnitTests.csproj | 1 + .../Avalonia.Markup.Xaml.UnitTests.csproj | 21 +----- .../Avalonia.Cairo.RenderTests.csproj | 17 +---- .../Avalonia.Direct2D1.RenderTests.csproj | 20 +----- .../Avalonia.Skia.RenderTests.csproj | 9 +-- .../Avalonia.Styling.UnitTests.csproj | 9 +-- .../Avalonia.UnitTests.csproj | 2 +- .../Avalonia.Visuals.UnitTests.csproj | 19 +----- 43 files changed, 129 insertions(+), 187 deletions(-) create mode 100644 src/Shared/Microsoft.NuGet.Build.Tasks.Patched.dll create mode 100644 src/Shared/nuget.workaround.targets diff --git a/Avalonia.sln b/Avalonia.sln index c2ba081fc0..e0b6972065 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -15,9 +15,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Direct2D1", "src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj", "{3E908F67-5543-4879-A1DC-08EACE79B3CD}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Designer", "src\Windows\Avalonia.Designer\Avalonia.Designer.csproj", "{EC42600F-049B-43FF-AED1-8314D61B2749}" - ProjectSection(ProjectDependencies) = postProject - {2B888490-D14A-4BCA-AB4B-48676FA93C9B} = {2B888490-D14A-4BCA-AB4B-48676FA93C9B} - EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Input", "src\Avalonia.Input\Avalonia.Input.csproj", "{62024B2D-53EB-4638-B26B-85EEAA54866E}" EndProject @@ -85,9 +82,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Markup.UnitTests", "tests\Avalonia.Markup.UnitTests\Avalonia.Markup.UnitTests.csproj", "{8EF392D5-1416-45AA-9956-7CBBC3229E8A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BindingTest", "samples\BindingTest\BindingTest.csproj", "{08B3E6B9-1CD5-443C-9F61-6D49D1C5F162}" - ProjectSection(ProjectDependencies) = postProject - {B61B66A3-B82D-4875-8001-89D3394FE0C9} = {B61B66A3-B82D-4875-8001-89D3394FE0C9} - EndProjectSection EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "RenderHelpers", "src\Shared\RenderHelpers\RenderHelpers.shproj", "{3C4C0CB4-0C0F-4450-A37B-148C84FF905F}" EndProject @@ -126,9 +120,6 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog", "samples\ControlCatalog\ControlCatalog.csproj", "{D0A739B9-3C68-4BA6-A328-41606954B6BD}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Desktop", "samples\ControlCatalog.Desktop\ControlCatalog.Desktop.csproj", "{2B888490-D14A-4BCA-AB4B-48676FA93C9B}" - ProjectSection(ProjectDependencies) = postProject - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {BB1F7BB5-6AD4-4776-94D9-C09D0A972658} - EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{57E0455D-D565-44BB-B069-EE1AA20F8337}" EndProject diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingTest/BindingTest.csproj index d8663f5031..fe5bd3aa1d 100644 --- a/samples/BindingTest/BindingTest.csproj +++ b/samples/BindingTest/BindingTest.csproj @@ -13,6 +13,7 @@ 512 true + PackageReference AnyCPU @@ -72,7 +73,6 @@ Designer - @@ -174,4 +174,5 @@ + \ No newline at end of file diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj index 9092238aa7..c9b12305dc 100644 --- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj +++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj @@ -170,4 +170,5 @@ --> + \ No newline at end of file diff --git a/samples/ControlCatalog.Android/Resources/Resource.Designer.cs b/samples/ControlCatalog.Android/Resources/Resource.Designer.cs index 96f0e76fd8..cee3331ba8 100644 --- a/samples/ControlCatalog.Android/Resources/Resource.Designer.cs +++ b/samples/ControlCatalog.Android/Resources/Resource.Designer.cs @@ -28,6 +28,8 @@ namespace ControlCatalog.Android { global::Avalonia.Android.Resource.String.ApplicationName = global::ControlCatalog.Android.Resource.String.ApplicationName; global::Avalonia.Android.Resource.String.Hello = global::ControlCatalog.Android.Resource.String.Hello; + global::Avalonia.Android.Resource.String.library_name = global::ControlCatalog.Android.Resource.String.library_name; + global::Splat.Resource.String.library_name = global::ControlCatalog.Android.Resource.String.library_name; } public partial class Attribute @@ -94,11 +96,14 @@ namespace ControlCatalog.Android public partial class String { + // aapt resource value: 0x7f040002 + public const int ApplicationName = 2130968578; + // aapt resource value: 0x7f040001 - public const int ApplicationName = 2130968577; + public const int Hello = 2130968577; // aapt resource value: 0x7f040000 - public const int Hello = 2130968576; + public const int library_name = 2130968576; static String() { diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj index bd0e56e3e6..73f50a18d6 100644 --- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj +++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj @@ -13,6 +13,7 @@ 512 true + PackageReference AnyCPU @@ -49,7 +50,6 @@ - @@ -154,4 +154,5 @@ 2.1.0 + \ No newline at end of file diff --git a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj index d0c73b2553..01d287ea83 100644 --- a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj +++ b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj @@ -181,4 +181,5 @@ + \ No newline at end of file diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderTest/RenderTest.csproj index b60eb7ab36..fdebadb444 100644 --- a/samples/RenderTest/RenderTest.csproj +++ b/samples/RenderTest/RenderTest.csproj @@ -199,4 +199,5 @@ + \ No newline at end of file diff --git a/samples/VirtualizationTest/VirtualizationTest.csproj b/samples/VirtualizationTest/VirtualizationTest.csproj index 0ed2b9d9bd..99f99cfe85 100644 --- a/samples/VirtualizationTest/VirtualizationTest.csproj +++ b/samples/VirtualizationTest/VirtualizationTest.csproj @@ -171,4 +171,5 @@ + \ No newline at end of file diff --git a/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj b/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj index 738a1e776c..9ae6063876 100644 --- a/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj +++ b/samples/interop/GtkInteropDemo/GtkInteropDemo.csproj @@ -157,4 +157,5 @@ --> + \ No newline at end of file diff --git a/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj b/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj index 671ebd0020..9ebe588fd1 100644 --- a/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj +++ b/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj @@ -187,4 +187,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 a9ff8e6924..cef2a2cdd6 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -158,4 +158,5 @@ + \ No newline at end of file diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj index 7ce8879304..0b6dee0d7d 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj @@ -185,4 +185,5 @@ + \ No newline at end of file diff --git a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj index 4a8ce05013..350b4c4fbc 100644 --- a/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj +++ b/src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj @@ -82,4 +82,5 @@ + \ 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 da3c8c9952..f0b4d4eb7d 100644 --- a/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj +++ b/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj @@ -116,4 +116,5 @@ + \ 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 257736aaf1..1681936e38 100644 --- a/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj +++ b/src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj @@ -104,4 +104,5 @@ + \ No newline at end of file diff --git a/src/Shared/Microsoft.NuGet.Build.Tasks.Patched.dll b/src/Shared/Microsoft.NuGet.Build.Tasks.Patched.dll new file mode 100644 index 0000000000000000000000000000000000000000..33ab0a4af72449d52371baa77daaaf60586fba1a GIT binary patch literal 35328 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 + + + + + + + + + + + + + + + + + + + + + + <_ReferencesFromNuGetPackages Remove="%(ReferencePath.FileName)" Condition="'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandTargetFramework'" /> + + + + <_ResolvedProjectReferencePaths Include="@(_ReferencesFromNuGetPackages)" Condition="'%(_ReferencesFromNuGetPackages.NuGetSourceType)' == 'Project'" /> + + + + + + + + + true + + + + + + + + + $(MSBuildToolsPath)\..\Roslyn + + \ 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 4c20239e64..252896dcc1 100644 --- a/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj +++ b/src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj @@ -98,4 +98,5 @@ + \ 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 164bccc933..ad2c35f922 100644 --- a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj +++ b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj @@ -12,9 +12,7 @@ v4.5 512 - - - True + false true @@ -111,4 +109,8 @@ + + + + \ 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 fc8d8f3053..17f01f377d 100644 --- a/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj +++ b/src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj @@ -92,4 +92,5 @@ + \ 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 b59892f4a4..105c2f2547 100644 --- a/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj +++ b/src/Windows/Avalonia.Designer/Avalonia.Designer.csproj @@ -12,8 +12,7 @@ v4.5 512 true - - + PackageReference @@ -132,6 +131,9 @@ --> - + + 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 0773300656..e19404ddbe 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -127,4 +127,5 @@ + \ No newline at end of file diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj index be86e3c4d3..6f270b148c 100644 --- a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj +++ b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj @@ -117,4 +117,5 @@ + \ 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 7ef7108785..a095668129 100644 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj +++ b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj @@ -128,4 +128,5 @@ + \ 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 089b8afb73..ba2e3ada87 100644 --- a/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj +++ b/src/iOS/Avalonia.iOSTestApplication/Avalonia.iOSTestApplication.csproj @@ -208,4 +208,5 @@ + \ 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 c44bb23f3c..5d17349179 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -10,13 +10,7 @@ Avalonia.Base.UnitTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -26,8 +20,6 @@ DEBUG;TRACE prompt 4 - bin\Debug\Avalonia.Base.UnitTests.XML - CS1591 pdbonly @@ -37,18 +29,6 @@ prompt 4 - - - - - - - - - - - - @@ -128,4 +108,5 @@ + \ No newline at end of file diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index c102b39744..8df2deabee 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -113,4 +113,5 @@ + \ 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 71ddbefebe..e59916e31f 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -5,18 +5,9 @@ AnyCPU {5CCB5571-7C30-4E7D-967D-0E2158EBD91F} Library - Properties - Avalonia.Controls.UnitTests - Avalonia.Controls.UnitTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -26,8 +17,6 @@ DEBUG;TRACE prompt 4 - bin\Debug\Avalonia.Controls.UnitTests.XML - CS1591 pdbonly @@ -41,14 +30,6 @@ - - - - - - - - @@ -167,25 +148,6 @@ - - - - - False - - - False - - - False - - - False - - - - - + \ 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 5cb7ba0e75..16de37d968 100644 --- a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj +++ b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj @@ -75,4 +75,5 @@ + \ 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 f0e3bb9471..4d14649b8b 100644 --- a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj +++ b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj @@ -11,8 +11,7 @@ Avalonia.Direct2D1.UnitTests v4.6.1 512 - - + true @@ -22,8 +21,6 @@ DEBUG;TRACE prompt 4 - bin\Debug\Avalonia.Direct2D1.UnitTests.XML - CS1591 pdbonly @@ -111,4 +108,5 @@ + \ 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 b76d63f563..fc4deba5dc 100644 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj @@ -120,4 +120,5 @@ + \ 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 0e47302b77..c7c13e3c5e 100644 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj +++ b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj @@ -111,4 +111,5 @@ + \ 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 2ba4e827e8..07e6c2ecaf 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -10,13 +10,7 @@ Avalonia.Layout.UnitTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -26,8 +20,6 @@ DEBUG;TRACE prompt 4 - bin\Debug\Avalonia.Layout.UnitTests.XML - CS1591 pdbonly @@ -37,17 +29,6 @@ prompt 4 - - - - - - - - - - - @@ -158,4 +139,5 @@ + \ No newline at end of file diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index 8aa5b2ede1..251e9e9297 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -144,4 +144,5 @@ + \ 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 12991766e2..534bd919e1 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -129,4 +129,5 @@ + \ 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 63ac4db742..b6d4407192 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -10,18 +11,7 @@ Avalonia.Markup.Xaml.UnitTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - SAK - SAK - SAK - SAK - - true @@ -43,14 +33,6 @@ - - - - - - - - @@ -191,4 +173,5 @@ + \ 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 1908367d93..fed9e121e5 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Cairo.RenderTests.csproj @@ -10,13 +10,7 @@ Avalonia.Cairo.RenderTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -40,14 +34,6 @@ - - - - - - - - {FB05AC90-89BA-4F2F-A924-F37875FB547C} @@ -150,4 +136,5 @@ + \ 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 c86db3c42b..32a27e1f23 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj @@ -10,13 +10,7 @@ Avalonia.Direct2D1.RenderTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -26,7 +20,6 @@ DEBUG;TRACE prompt 4 - ..\..\artifacts\tests\Avalonia.Direct2D1.RenderTests.XML CS1591 @@ -36,21 +29,11 @@ TRACE prompt 4 - - - - - - - - - - {D211E587-D8BC-45B9-95A4-F297C8FA5200} @@ -135,4 +118,5 @@ + \ 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 a42e434f0b..5b0aa4bd11 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj +++ b/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj @@ -11,8 +11,7 @@ Avalonia.Skia.RenderTests v4.6.1 512 - - + true @@ -37,17 +36,12 @@ TRACE;DEBUG;AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL full x86 - prompt - MinimumRecommendedRules.ruleset ..\..\artifacts\tests\ TRACE;AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL; true - pdbonly x86 - prompt - MinimumRecommendedRules.ruleset @@ -124,4 +118,5 @@ + \ 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 6873c50347..7b85c3fe4d 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -10,13 +10,7 @@ Avalonia.Styling.UnitTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -160,4 +154,5 @@ + \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj index b9d6e4681d..1c07e547ec 100644 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj +++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj @@ -5,7 +5,6 @@ Debug AnyCPU {88060192-33D5-4932-B0F9-8BD2763E857D} - {88060192-33D5-4932-B0F9-8BD2763E857D} Library Properties Avalonia.UnitTests @@ -120,4 +119,5 @@ + \ 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 a43c84ab9a..c731be7418 100644 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj @@ -10,13 +10,7 @@ Avalonia.Visuals.UnitTests v4.6.1 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + true @@ -26,8 +20,6 @@ DEBUG;TRACE prompt 4 - bin\Debug\Avalonia.Visuals.UnitTests.xml - CS1591 pdbonly @@ -40,14 +32,6 @@ - - - - - - - - @@ -151,4 +135,5 @@ + \ No newline at end of file From 8b8a9b99d9eaad234d159ecc7464a48c1490c3e0 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 16:41:06 +0300 Subject: [PATCH 044/158] Fixed vs build --- src/Shared/nuget.workaround.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Shared/nuget.workaround.targets b/src/Shared/nuget.workaround.targets index 32d86c21ff..4490fd8375 100644 --- a/src/Shared/nuget.workaround.targets +++ b/src/Shared/nuget.workaround.targets @@ -58,6 +58,6 @@ - $(MSBuildToolsPath)\..\Roslyn + $(MSBuildToolsPath)\..\Roslyn \ No newline at end of file From fef8d3448a2ed64241b2d1972246f55063349cbb Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 16:41:35 +0300 Subject: [PATCH 045/158] Added .NET Core version of control catalog --- Avalonia.sln | 43 +++++++++++++++++++ .../ControlCatalog.NetCore.csproj | 13 ++++++ samples/ControlCatalog.NetCore/Program.cs | 15 +++++++ 3 files changed, 71 insertions(+) create mode 100644 samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj create mode 100644 samples/ControlCatalog.NetCore/Program.cs diff --git a/Avalonia.sln b/Avalonia.sln index e0b6972065..8e06247b1a 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -155,6 +155,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.Desktop.NetSt EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Gtk3", "src\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj", "{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.NetCore", "samples\ControlCatalog.NetCore\ControlCatalog.NetCore.csproj", "{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{2f59f3d0-748d-4652-b01e-e0d954756308}*SharedItemsImports = 13 @@ -2433,6 +2435,46 @@ Global {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|Mono.Build.0 = Release|Any CPU {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|x86.ActiveCfg = Release|Any CPU {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|x86.Build.0 = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Mono.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Mono.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhone.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Mono.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Mono.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|x86.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|x86.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhone.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Mono.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Mono.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|x86.ActiveCfg = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|x86.Build.0 = Debug|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Any CPU.Build.0 = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhone.ActiveCfg = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhone.Build.0 = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Mono.ActiveCfg = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Mono.Build.0 = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|x86.ActiveCfg = Release|Any CPU + {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2488,5 +2530,6 @@ Global {40759A76-D0F2-464E-8000-6FF0F5C4BD7C} = {B39A8919-9F95-48FE-AD7B-76E08B509888} {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} EndGlobalSection EndGlobal diff --git a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj new file mode 100644 index 0000000000..d43c3a060e --- /dev/null +++ b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj @@ -0,0 +1,13 @@ + + + + Exe + netcoreapp1.1 + + + + + + + + \ No newline at end of file diff --git a/samples/ControlCatalog.NetCore/Program.cs b/samples/ControlCatalog.NetCore/Program.cs new file mode 100644 index 0000000000..57a508f923 --- /dev/null +++ b/samples/ControlCatalog.NetCore/Program.cs @@ -0,0 +1,15 @@ +using System; +using Avalonia; + +namespace ControlCatalog.NetCore +{ + class Program + { + static void Main(string[] args) + { + AppBuilder.Configure() + .UsePlatformDetect() + .Start(); + } + } +} \ No newline at end of file From d7c48e17f462d2619471c10e30c513e0ca4464b9 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 17:01:24 +0300 Subject: [PATCH 046/158] Exclude resources from submodules --- src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj | 10 ++++++---- .../Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj | 8 +++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj index e800a64a17..b51bc65607 100644 --- a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj +++ b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj @@ -21,9 +21,6 @@ prompt 4 - - - @@ -164,4 +161,9 @@ - \ 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 eba7395340..3f7343a1ec 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -326,4 +326,10 @@ - \ No newline at end of file + + + + + + + From 88ef461d5335871156a7c2b4f0de3e8f4e7a2242 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 17:14:56 +0300 Subject: [PATCH 047/158] Reference native linux binaries --- .../Avalonia.Skia.Desktop.NetStandard.csproj | 1 + 1 file changed, 1 insertion(+) 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 ddad89fd10..49d9403875 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 @@ -32,6 +32,7 @@ + From 4bb5ebf070a5bfbb0aec6179ed225d5395b24ad5 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 19:28:55 +0300 Subject: [PATCH 048/158] Fixed build script for windows --- appveyor.yml | 2 +- build.cake | 73 ++++++++----------- packages.cake | 52 ++++++++----- .../Avalonia.DotNetCoreRuntime.csproj | 2 +- .../Avalonia.Win32.NetStandard.csproj | 2 + 5 files changed, 66 insertions(+), 65 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index db7d129dd1..d11b4074f8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -os: Visual Studio 2015 +os: Visual Studio 2017 platform: - Any CPU configuration: diff --git a/build.cake b/build.cake index ee68c74bb3..8191774dc5 100644 --- a/build.cake +++ b/build.cake @@ -96,46 +96,10 @@ Task("Clean") CleanDirectory(parameters.TestsRoot); }); -Task("Prepare-XBuild-Solution") - .Does(() => -{ - var blacklistedProjects = new[] - { - "Avalonia.Win32.NetStandard", - "Avalonia.DotNetCoreRuntime", - "Avalonia.Skia.Desktop.NetStandard", - "Avalonia.Gtk3" - }; - var blacklistedGuids = System.IO.File.ReadAllLines(parameters.MSBuildSolution) - .Where(l=>l.StartsWith("Project") && blacklistedProjects.Any(p=>l.Contains(p))) - .Select(l => l.Split(',').Select(part => part.Trim()).FirstOrDefault(part => part.StartsWith("\"{"))) - .Where(g=>g!=null) - .Select(l=>l.Trim(new[]{'"', '}', '{'}).ToLower()).ToArray(); - - Console.WriteLine("Blacklisted guids are: " + string.Join(",", blacklistedGuids)); - var removeUntilEndProject = false; - - System.IO.File.WriteAllLines(parameters.XBuildSolution, System.IO.File.ReadAllLines(parameters.MSBuildSolution) - .Where(l => - { - if(removeUntilEndProject) - { - if(l.StartsWith("EndProject")) - removeUntilEndProject = false; - return false; - } - - var blacklist = blacklistedGuids.Any(g => l.ToLower().Contains(g)); - if(blacklist && l.StartsWith("Project")) - removeUntilEndProject = true; - - return !blacklist; - })); -}); Task("Restore-NuGet-Packages") .IsDependentOn("Clean") - .IsDependentOn("Prepare-XBuild-Solution") + .WithCriteria(parameters.IsRunningOnWindows) .Does(() => { var maxRetryCount = 5; @@ -168,6 +132,14 @@ Task("Restore-NuGet-Packages") }); }); +void DotNetCoreBuild() +{ +} + +Task("DotNetCoreBuild") + .IsDependentOn("Clean") + .Does(() => DotNetCoreBuild()); + Task("Build") .IsDependentOn("Restore-NuGet-Packages") .Does(() => @@ -179,25 +151,34 @@ Task("Build") settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); settings.SetVerbosity(Verbosity.Minimal); settings.WithProperty("Windows", "True"); - settings.UseToolVersion(MSBuildToolVersion.VS2015); + settings.UseToolVersion(MSBuildToolVersion.VS2017); settings.SetNodeReuse(false); }); } else { - XBuild(parameters.XBuildSolution, settings => { - settings.SetConfiguration(parameters.Configuration); - settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); - settings.SetVerbosity(Verbosity.Minimal); - }); + DotNetCoreBuild(); } }); +void RunDotNetCoreTest() +{ +} + +Task("Run-Net-Core-Unit-Tests") + .IsDependentOn("Clean") + .Does(() => RunDotNetCoreTest()); + Task("Run-Unit-Tests") .IsDependentOn("Build") .WithCriteria(() => !parameters.SkipTests) .Does(() => { + if(parameters.IsRunningOnWindows) + { + RunDotNetCoreTest(); + } + var unitTests = GetDirectories("./tests/Avalonia.*.UnitTests") .Select(dir => System.IO.Path.GetFileName(dir.FullPath)) .Where(name => parameters.IsRunningOnWindows ? true : !(name.IndexOf("Direct2D", StringComparison.OrdinalIgnoreCase) >= 0)) @@ -236,7 +217,11 @@ Task("Run-Unit-Tests") { CopyDirectory(test.GetDirectory(), parameters.TestsRoot); } - + + CopyFile(System.IO.Path.Combine(packages.NugetPackagesDir, "SkiaSharp", packages.SkiaSharpVersion, + "runtimes", "win7-x86", "native", "libSkiaSharp.dll"), + System.IO.Path.Combine(parameters.TestsRoot.ToString(), "libSkiaSharp.dll")); + var testsInDirectoryToRun = new List(); if(parameters.IsRunningOnWindows) { diff --git a/packages.cake b/packages.cake index 67483c4579..7f9c5bdb65 100644 --- a/packages.cake +++ b/packages.cake @@ -1,9 +1,12 @@ +using System.Xml.Linq; + public class Packages { public List NuspecNuGetSettings { get; private set; } public FilePath[] NugetPackages { get; private set; } public FilePath[] BinFiles { get; private set; } - + public string NugetPackagesDir {get; private set;} + public string SkiaSharpVersion {get; private set; } public Packages(ICakeContext context, Parameters parameters) { // NUGET NUSPECS @@ -23,21 +26,27 @@ public class Packages // Value is Tuple where Item1: Package Version, Item2: The packages.config file path. var packageVersions = new Dictionary>>(); - System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./src")).FullPath, "packages.config", SearchOption.AllDirectories).ToList().ForEach(fileName => + System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./src")).FullPath, + "*.csproj", SearchOption.AllDirectories).ToList().ForEach(fileName => { if (!ignoredSubModulesPaths.Any(i => normalizePath(fileName).Contains(normalizePath(i)))) { - var file = new PackageReferenceFile(fileName); - foreach (PackageReference packageReference in file.GetPackageReferences()) + var xdoc = XDocument.Load(fileName); + foreach (var reference in xdoc.Descendants().Where(x => x.Name.LocalName == "PackageReference")) { + var name = reference.Attribute("Include").Value; + var versionAttribute = reference.Attribute("Version"); + var version = versionAttribute != null + ? versionAttribute.Value + : reference.Elements().First(x=>x.Name.LocalName == "Version").Value; IList> versions; - packageVersions.TryGetValue(packageReference.Id, out versions); + packageVersions.TryGetValue(name, out versions); if (versions == null) { versions = new List>(); - packageVersions[packageReference.Id] = versions; + packageVersions[name] = versions; } - versions.Add(Tuple.Create(packageReference.Version.ToString(), fileName)); + versions.Add(Tuple.Create(version, fileName)); } } }); @@ -65,7 +74,7 @@ public class Packages var SplatVersion = packageVersions["Splat"].FirstOrDefault().Item1; var SpracheVersion = packageVersions["Sprache"].FirstOrDefault().Item1; var SystemReactiveVersion = packageVersions["System.Reactive"].FirstOrDefault().Item1; - var SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1; + SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1; var SharpDXVersion = packageVersions["SharpDX"].FirstOrDefault().Item1; var SharpDXDirect2D1Version = packageVersions["SharpDX.Direct2D1"].FirstOrDefault().Item1; var SharpDXDirect3D11Version = packageVersions["SharpDX.Direct3D11"].FirstOrDefault().Item1; @@ -81,6 +90,11 @@ public class Packages context.Information("Package: SharpDX.Direct3D11, version: {0}", SharpDXDirect3D11Version); context.Information("Package: SharpDX.DXGI, version: {0}", SharpDXDXGIVersion); + var nugetPackagesDir = System.Environment.GetEnvironmentVariable("NUGET_HOME") + ?? System.IO.Path.Combine(System.Environment.GetEnvironmentVariable("USERPROFILE"), ".nuget"); + + NugetPackagesDir = System.IO.Path.Combine(nugetPackagesDir, "packages"); + var SetNuGetNuspecCommonProperties = new Action ((nuspec) => { nuspec.Version = parameters.Version; nuspec.Authors = new [] { "Avalonia Team" }; @@ -129,12 +143,12 @@ public class Packages }; var coreLibrariesFiles = coreLibraries.Select((lib) => { - return (FilePath)context.File(lib[0] + lib[1] + "/bin/" + parameters.DirSuffix + "/" + lib[1] + lib[2]); + return (FilePath)context.File(lib[0] + lib[1] + "/bin/" + parameters.DirSuffix + "/netstandard1.1/" + lib[1] + lib[2]); }).ToList(); var coreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => { return new NuSpecContent { - Source = file.FullPath, Target = "lib/portable-windows8+net45" + Source = file.FullPath, Target = "lib/netstandard1.1" }; }); @@ -161,7 +175,7 @@ public class Packages var netCoreRuntimePlatformExtensions = new [] {".xml", ".dll"}; var netCoreRuntimePlatform = netCoreRuntimePlatformExtensions.Select(libSuffix => { return new NuSpecContent { - Source = ((FilePath)context.File("./src/Avalonia.DotNetCoreRuntime/bin/" + parameters.DirSuffix + "/Avalonia.DotNetCoreRuntime" + libSuffix)).FullPath, + Source = ((FilePath)context.File("./src/Avalonia.DotNetCoreRuntime/bin/" + parameters.DirSuffix + "/netcoreapp1.0/Avalonia.DotNetCoreRuntime" + libSuffix)).FullPath, Target = "lib/netcoreapp1.0" }; }); @@ -180,12 +194,12 @@ public class Packages new NuSpecDependency() { Id = "Splat", Version = SplatVersion }, new NuSpecDependency() { Id = "Sprache", Version = SpracheVersion }, new NuSpecDependency() { Id = "System.Reactive", Version = SystemReactiveVersion }, - new NuSpecDependency() { Id = "System.Threading.ThreadPool", TargetFramework = "netcoreapp1.0", Version = "4.3.0" }, //.NET Core + new NuSpecDependency() { Id = "System.Threading.ThreadPool", TargetFramework = "netcoreapp1.0", Version = "4.3.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 = "2.0.0" }, - new NuSpecDependency() { Id = "Serilog", TargetFramework = "netcoreapp1.0", Version = "2.3.0" }, + new NuSpecDependency() { Id = "Splat", TargetFramework = "netcoreapp1.0", Version = SplatVersion }, + new NuSpecDependency() { Id = "Serilog", TargetFramework = "netcoreapp1.0", Version = SerilogVersion }, new NuSpecDependency() { Id = "Sprache", TargetFramework = "netcoreapp1.0", Version = SpracheVersion }, new NuSpecDependency() { Id = "System.Reactive", TargetFramework = "netcoreapp1.0", Version = SystemReactiveVersion } }, @@ -208,9 +222,9 @@ public class Packages }, Files = new [] { - new NuSpecContent { Source = "Avalonia.HtmlRenderer.dll", Target = "lib/portable-windows8+net45" } + new NuSpecContent { Source = "Avalonia.HtmlRenderer.dll", Target = "lib/netstandard1.1" } }, - BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix), + BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix + "/netstandard1.1"), OutputDirectory = parameters.NugetRoot } }; @@ -324,7 +338,7 @@ public class Packages Files = new [] { new NuSpecContent { Source = "Avalonia.Win32/bin/" + parameters.DirSuffix + "/Avalonia.Win32.dll", Target = "lib/net45" }, - new NuSpecContent { Source = "Avalonia.Win32.NetStandard/bin/" + parameters.DirSuffix + "/Avalonia.Win32.dll", Target = "lib/netstandard1.1" } + new NuSpecContent { Source = "Avalonia.Win32.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.1/Avalonia.Win32.dll", Target = "lib/netstandard1.1" } }, BasePath = context.Directory("./src/Windows"), OutputDirectory = parameters.NugetRoot @@ -381,7 +395,7 @@ public class Packages { new NuSpecContent { Source = "Avalonia.Gtk3.dll", Target = "lib/netstandard1.1" } }, - BasePath = context.Directory("./src/Gtk/Avalonia.Gtk3/bin/" + parameters.DirSuffix), + BasePath = context.Directory("./src/Gtk/Avalonia.Gtk3/bin/" + parameters.DirSuffix + "/netstandard1.1"), OutputDirectory = parameters.NugetRoot }, /////////////////////////////////////////////////////////////////////////////// @@ -420,7 +434,7 @@ 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 + "/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" } }, BasePath = context.Directory("./src/Skia/"), OutputDirectory = parameters.NugetRoot diff --git a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj index ab5080c78d..1004201ec4 100644 --- a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj +++ b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj @@ -1,6 +1,6 @@  - netstandard1.6 + netcoreapp1.0 False false diff --git a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj b/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj index a1d490b1c4..5059131371 100644 --- a/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj +++ b/src/Windows/Avalonia.Win32.NetStandard/Avalonia.Win32.NetStandard.csproj @@ -3,6 +3,8 @@ netstandard1.1 False false + Avalonia.Win32 + Avalonia.Win32 true From 6827132a59ea0fa09f8b4ebd7c55063bd48f51bc Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 19:34:37 +0300 Subject: [PATCH 049/158] use rc appveyor image --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index d11b4074f8..bf817e7b22 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -os: Visual Studio 2017 +os: Visual Studio 2017 RC platform: - Any CPU configuration: From f6cad5f10cde8b73a212f2a0c4f972b21c4574ae Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 20:03:49 +0300 Subject: [PATCH 050/158] use msbuild for package restore --- build.cake | 21 ++++++++----------- .../Avalonia.Skia.Desktop.NetStandard.csproj | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/build.cake b/build.cake index 8191774dc5..3556a573a3 100644 --- a/build.cake +++ b/build.cake @@ -117,18 +117,15 @@ Task("Restore-NuGet-Packages") toolTimeout+=0.5; }}) .Execute(()=> { - if(parameters.IsRunningOnWindows) - { - NuGetRestore(parameters.MSBuildSolution, new NuGetRestoreSettings { - ToolTimeout = TimeSpan.FromMinutes(toolTimeout) - }); - } - else - { - NuGetRestore(parameters.XBuildSolution, new NuGetRestoreSettings { - ToolTimeout = TimeSpan.FromMinutes(toolTimeout) - }); - } + MSBuild(parameters.MSBuildSolution, settings => { + settings.SetConfiguration(parameters.Configuration); + settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); + settings.SetVerbosity(Verbosity.Minimal); + settings.WithProperty("Windows", "True"); + settings.UseToolVersion(MSBuildToolVersion.VS2017); + settings.WithTarget("restore"); + settings.SetNodeReuse(false); + }); }); }); 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 49d9403875..f1df5d36ea 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 @@ -32,7 +32,7 @@ - + From a6fb94afde3577ad17a46f0516dbdeecbf380b10 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 20:14:48 +0300 Subject: [PATCH 051/158] use nuget 4.3 --- build.cake | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/build.cake b/build.cake index 3556a573a3..e75950326d 100644 --- a/build.cake +++ b/build.cake @@ -4,6 +4,7 @@ #addin "nuget:?package=Polly&version=4.2.0" #addin "nuget:?package=NuGet.Core&version=2.12.0" +#tool "nuget:https://dotnet.myget.org/F/nuget-build/?package=NuGet.CommandLine&version=4.3.0-beta1-2361&prerelease" /////////////////////////////////////////////////////////////////////////////// // TOOLS @@ -117,15 +118,10 @@ Task("Restore-NuGet-Packages") toolTimeout+=0.5; }}) .Execute(()=> { - MSBuild(parameters.MSBuildSolution, settings => { - settings.SetConfiguration(parameters.Configuration); - settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); - settings.SetVerbosity(Verbosity.Minimal); - settings.WithProperty("Windows", "True"); - settings.UseToolVersion(MSBuildToolVersion.VS2017); - settings.WithTarget("restore"); - settings.SetNodeReuse(false); - }); + NuGetRestore(parameters.MSBuildSolution, new NuGetRestoreSettings { + ToolPath = "./tools/NuGet.CommandLine/tools/NuGet.exe", + ToolTimeout = TimeSpan.FromMinutes(toolTimeout) + }); }); }); From fa12a9ee282951581704140db7dd8db87e38343c Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 20:29:12 +0300 Subject: [PATCH 052/158] Get dotmemoryunit from %USERPFORILE%/.nuget/packages --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index bf817e7b22..b18330bc12 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,7 +19,7 @@ before_build: build_script: - ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration" after_build: -- .\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" +- %USERPROFILE%\.nuget\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" - "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%" - pip install codecov From a9f867c1276e8a1225aa3f4dcdffd9f7e59e3ed1 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 20:33:50 +0300 Subject: [PATCH 053/158] set path --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index b18330bc12..c609d69fb1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,8 +19,8 @@ before_build: build_script: - ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration" after_build: -- %USERPROFILE%\.nuget\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" - +- cmd set PATH=%USERPROFILE%\.nuget\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools;%PATH% +- dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" - "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%" - pip install codecov - codecov -f "./artifacts/coverage.xml" From c427ed5bdc857b818fc628ff6ad0b8c5bd517f63 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 20:50:41 +0300 Subject: [PATCH 054/158] whoops --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index c609d69fb1..aeb5d4eef2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,7 +19,7 @@ before_build: build_script: - ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration" after_build: -- cmd set PATH=%USERPROFILE%\.nuget\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools;%PATH% +- cmd: set PATH=%USERPROFILE%\.nuget\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools;%PATH% - dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" - "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%" - pip install codecov From beda69a2e6a4739dc70f30ac6a2185b6f19c8f3c Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 20:55:45 +0300 Subject: [PATCH 055/158] Special hack to keep VS happy --- build.cake | 1 + src/Android/Avalonia.Android/Avalonia.Android.csproj | 3 +++ src/Shared/nuget.workaround.targets | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index e75950326d..4ca75e1bb1 100644 --- a/build.cake +++ b/build.cake @@ -142,6 +142,7 @@ Task("Build") MSBuild(parameters.MSBuildSolution, settings => { settings.SetConfiguration(parameters.Configuration); settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); + settings.WithProperty("UseRoslynPathHack", "true"); settings.SetVerbosity(Verbosity.Minimal); settings.WithProperty("Windows", "True"); settings.UseToolVersion(MSBuildToolVersion.VS2017); diff --git a/src/Android/Avalonia.Android/Avalonia.Android.csproj b/src/Android/Avalonia.Android/Avalonia.Android.csproj index cef2a2cdd6..b763aad8f3 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -159,4 +159,7 @@ + + $(MSBuildToolsPath)\Roslyn + \ No newline at end of file diff --git a/src/Shared/nuget.workaround.targets b/src/Shared/nuget.workaround.targets index 4490fd8375..bf6b71ddba 100644 --- a/src/Shared/nuget.workaround.targets +++ b/src/Shared/nuget.workaround.targets @@ -57,7 +57,7 @@ - - $(MSBuildToolsPath)\..\Roslyn + + $(MSBuildToolsPath)\..\Roslyn \ No newline at end of file From a06a6d10bd646eaa349db9c1311fbcd662cb0df1 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 21:04:40 +0300 Subject: [PATCH 056/158] Install dotMemoryUnit from cake script --- appveyor.yml | 3 +-- build.cake | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index aeb5d4eef2..0701d5f65c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,8 +19,7 @@ before_build: build_script: - ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration" after_build: -- cmd: set PATH=%USERPROFILE%\.nuget\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools;%PATH% -- dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" +- tools\JetBrains.dotMemoryUnit\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" - "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%" - pip install codecov - codecov -f "./artifacts/coverage.xml" diff --git a/build.cake b/build.cake index 4ca75e1bb1..5e004afc1a 100644 --- a/build.cake +++ b/build.cake @@ -5,7 +5,7 @@ #addin "nuget:?package=Polly&version=4.2.0" #addin "nuget:?package=NuGet.Core&version=2.12.0" #tool "nuget:https://dotnet.myget.org/F/nuget-build/?package=NuGet.CommandLine&version=4.3.0-beta1-2361&prerelease" - +#tool "nuget:?package=JetBrains.dotMemoryUnit&version=2.1.20150828.125449" /////////////////////////////////////////////////////////////////////////////// // TOOLS /////////////////////////////////////////////////////////////////////////////// From dc8a32d1b14628df9ba5a77007594fa829d33a44 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 23:26:07 +0300 Subject: [PATCH 057/158] Run Avalonia.Base.UnitTests using `dotnet test` --- .travis.yml | 2 + Avalonia.sln | 11 +--- build.cake | 34 +++++++++--- .../Avalonia.Base.UnitTests.csproj | 55 ++----------------- .../Avalonia.Benchmarks.csproj | 2 +- .../Avalonia.Controls.UnitTests.csproj | 2 +- .../Avalonia.Input.UnitTests.csproj | 2 +- .../Avalonia.Layout.UnitTests.csproj | 2 +- .../Avalonia.LeakTests.csproj | 2 +- .../Avalonia.Markup.UnitTests.csproj | 2 +- .../Avalonia.Markup.Xaml.UnitTests.csproj | 2 +- .../Avalonia.Styling.UnitTests.csproj | 2 +- .../Avalonia.UnitTests.csproj | 39 +++++++------ .../InvariantCultureFixture.cs | 7 +-- .../Avalonia.Visuals.UnitTests.csproj | 2 +- tests/coretests.props | 25 +++++++++ 16 files changed, 95 insertions(+), 96 deletions(-) create mode 100644 tests/coretests.props diff --git a/.travis.yml b/.travis.yml index af7d5dbebf..5740a5ecfd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,10 @@ language: csharp os: - linux - osx +dist: trusty mono: - latest +dotnet: 1.0.1 script: - ./build.sh --target "Travis" --platform "Mono" --configuration "Release" notifications: diff --git a/Avalonia.sln b/Avalonia.sln index 8e06247b1a..d563d4548b 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -31,6 +31,9 @@ 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 @@ -163,9 +166,6 @@ Global src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4 src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{40759a76-d0f2-464e-8000-6ff0f5c4bd7c}*SharedItemsImports = 4 - src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4 - src\Shared\RenderHelpers\RenderHelpers.projitems*{47be08a7-5985-410b-9ffc-2264b8ea595f}*SharedItemsImports = 4 - src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{47be08a7-5985-410b-9ffc-2264b8ea595f}*SharedItemsImports = 4 tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{48840edd-24bf-495d-911e-2eb12ae75d3b}*SharedItemsImports = 13 src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4 @@ -176,11 +176,6 @@ Global src\Shared\RenderHelpers\RenderHelpers.projitems*{925dd807-b651-475f-9f7c-cbeb974ce43d}*SharedItemsImports = 4 src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{925dd807-b651-475f-9f7c-cbeb974ce43d}*SharedItemsImports = 4 src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{9defc6b7-845b-4d8f-afc0-d32bf0032b8c}*SharedItemsImports = 13 - src\Shared\RenderHelpers\RenderHelpers.projitems*{bd43f7c0-396b-4aa1-bad9-dfde54d51298}*SharedItemsImports = 4 - src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{bd43f7c0-396b-4aa1-bad9-dfde54d51298}*SharedItemsImports = 4 - tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{d35a9f3d-8bb0-496e-bf72-444038a7debb}*SharedItemsImports = 4 - tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{dabfd304-d6a4-4752-8123-c2ccf7ac7831}*SharedItemsImports = 4 - tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{e106cf37-4066-4615-b684-172a6d30b058}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{e4d9629c-f168-4224-3f51-a5e482ffbc42}*SharedItemsImports = 13 src\Shared\RenderHelpers\RenderHelpers.projitems*{fb05ac90-89ba-4f2f-a924-f37875fb547c}*SharedItemsImports = 4 EndGlobalSection diff --git a/build.cake b/build.cake index 5e004afc1a..2bb4671e62 100644 --- a/build.cake +++ b/build.cake @@ -127,6 +127,8 @@ Task("Restore-NuGet-Packages") void DotNetCoreBuild() { + DotNetCoreRestore("samples\\ControlCatalog.NetCore"); + DotNetBuild("samples\\ControlCatalog.NetCore"); } Task("DotNetCoreBuild") @@ -155,8 +157,23 @@ Task("Build") } }); +void RunCoreTest(string dir) +{ + DotNetCoreRestore(dir); + var frameworks = new List{"netcoreapp1.1"}; + if(parameters.IsRunningOnWindows) + frameworks.Add("net461"); + foreach(var fw in frameworks) + { + Information("Running for " + fw); + DotNetCoreTest(System.IO.Path.Combine(dir, System.IO.Path.GetFileName(dir)+".csproj"), + new DotNetCoreTestSettings{Framework = fw}); + } +} + void RunDotNetCoreTest() { + RunCoreTest("./tests/Avalonia.Base.UnitTests"); } Task("Run-Net-Core-Unit-Tests") @@ -164,14 +181,13 @@ Task("Run-Net-Core-Unit-Tests") .Does(() => RunDotNetCoreTest()); Task("Run-Unit-Tests") + .IsDependentOn("Run-Net-Core-Unit-Tests") .IsDependentOn("Build") .WithCriteria(() => !parameters.SkipTests) .Does(() => { - if(parameters.IsRunningOnWindows) - { - RunDotNetCoreTest(); - } + if(!parameters.IsRunningOnWindows) + return; var unitTests = GetDirectories("./tests/Avalonia.*.UnitTests") .Select(dir => System.IO.Path.GetFileName(dir.FullPath)) @@ -342,9 +358,13 @@ Task("Publish-NuGet") Task("Package") .IsDependentOn("Create-NuGet-Packages"); -Task("Default") - .IsDependentOn("Package"); - +Task("Default").Does(() => +{ + if(parameters.IsRunningOnWindows) + RunTarget("Package"); + else + RunTarget("Run-Net-Core-Unit-Tests"); +}); Task("AppVeyor") .IsDependentOn("Zip-Files") .IsDependentOn("Publish-MyGet") diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj index 5d17349179..31aed15ae8 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -1,17 +1,9 @@ - - + - Debug - AnyCPU + net461;netcoreapp1.1 {2905FF23-53FB-45E6-AA49-6AF47A172056} - Library - Properties - Avalonia.Base.UnitTests - Avalonia.Base.UnitTests - v4.6.1 - 512 - + true full @@ -20,6 +12,7 @@ DEBUG;TRACE prompt 4 + MinimumRecommendedRules.ruleset pdbonly @@ -28,6 +21,7 @@ TRACE prompt 4 + MinimumRecommendedRules.ruleset @@ -53,9 +47,6 @@ - - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} @@ -66,26 +57,6 @@ Avalonia.UnitTests - - - - - False - - - False - - - False - - - False - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index 8df2deabee..ed7af3b0ca 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -111,7 +111,7 @@ - + \ 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 e59916e31f..734d7a3d35 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -159,7 +159,7 @@ - + diff --git a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj index fc4deba5dc..31ceadb6ca 100644 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj @@ -105,7 +105,7 @@ --> - + diff --git a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj index 07e6c2ecaf..01732a85d7 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -128,7 +128,7 @@ - + diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index 251e9e9297..2c550bb97c 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -130,7 +130,7 @@ - + diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj index 534bd919e1..8778f6752d 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -113,7 +113,7 @@ --> - + 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 b6d4407192..31f5495a18 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -159,7 +159,7 @@ --> - + diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj index 7b85c3fe4d..c00036f6dc 100644 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj @@ -141,7 +141,7 @@ --> - + diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj index 1c07e547ec..e84fa4c89c 100644 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj +++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj @@ -1,17 +1,8 @@ - - - + - Debug - AnyCPU - {88060192-33D5-4932-B0F9-8BD2763E857D} - Library - Properties - Avalonia.UnitTests - Avalonia.UnitTests - v4.6.1 - 512 - + net461;netcoreapp1.1 + False + false true @@ -53,9 +44,13 @@ - + {4a1abb09-9047-4bd5-a4ad-a055e52c5ee0} Avalonia.DotNetFrameworkRuntime + + + {fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Avalonia.DotNetCoreRuntime {3e53a01a-b331-47f3-b828-4a5717e77a24} @@ -104,9 +99,7 @@ - - - + + + + + + + + - + + + + \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/InvariantCultureFixture.cs b/tests/Avalonia.UnitTests/InvariantCultureFixture.cs index f82afa5397..f27df8f599 100644 --- a/tests/Avalonia.UnitTests/InvariantCultureFixture.cs +++ b/tests/Avalonia.UnitTests/InvariantCultureFixture.cs @@ -20,14 +20,13 @@ namespace Avalonia.UnitTests public InvariantCultureFixture() { - _restore = Thread.CurrentThread.CurrentUICulture; - Thread.CurrentThread.CurrentUICulture = - Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; + _restore = CultureInfo.CurrentUICulture; + CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; } public void Dispose() { - Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = _restore; + CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture = _restore; } } } diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj index c731be7418..c9d8a02575 100644 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj @@ -124,7 +124,7 @@ --> - + diff --git a/tests/coretests.props b/tests/coretests.props new file mode 100644 index 0000000000..4253d70cdd --- /dev/null +++ b/tests/coretests.props @@ -0,0 +1,25 @@ + + + + + False + false + true + + + + + + + + + + + + + + + + + + \ No newline at end of file From f3394b881f759cd61f84f855e5f5b1539df6ac15 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 23:55:19 +0300 Subject: [PATCH 058/158] Fixed linux build --- build.cake | 12 +++++------- packages.cake | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/build.cake b/build.cake index 2bb4671e62..b5450017d0 100644 --- a/build.cake +++ b/build.cake @@ -157,7 +157,7 @@ Task("Build") } }); -void RunCoreTest(string dir) +void RunCoreTest(string dir, Parameters parameters) { DotNetCoreRestore(dir); var frameworks = new List{"netcoreapp1.1"}; @@ -171,14 +171,12 @@ void RunCoreTest(string dir) } } -void RunDotNetCoreTest() -{ - RunCoreTest("./tests/Avalonia.Base.UnitTests"); -} Task("Run-Net-Core-Unit-Tests") .IsDependentOn("Clean") - .Does(() => RunDotNetCoreTest()); + .Does(() => { + RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters); + }); Task("Run-Unit-Tests") .IsDependentOn("Run-Net-Core-Unit-Tests") @@ -371,7 +369,7 @@ Task("AppVeyor") .IsDependentOn("Publish-NuGet"); Task("Travis") - .IsDependentOn("Run-Unit-Tests"); + .IsDependentOn("Run-Net-Core-Unit-Tests"); /////////////////////////////////////////////////////////////////////////////// // EXECUTE diff --git a/packages.cake b/packages.cake index 7f9c5bdb65..ac65c26727 100644 --- a/packages.cake +++ b/packages.cake @@ -91,7 +91,7 @@ public class Packages context.Information("Package: SharpDX.DXGI, version: {0}", SharpDXDXGIVersion); var nugetPackagesDir = System.Environment.GetEnvironmentVariable("NUGET_HOME") - ?? System.IO.Path.Combine(System.Environment.GetEnvironmentVariable("USERPROFILE"), ".nuget"); + ?? System.IO.Path.Combine(System.Environment.GetEnvironmentVariable("USERPROFILE") ?? System.Environment.GetEnvironmentVariable("HOME"), ".nuget"); NugetPackagesDir = System.IO.Path.Combine(nugetPackagesDir, "packages"); From 635561af56fead8ac12dcc844a5e3c04611f65ca Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 8 Mar 2017 23:56:07 +0300 Subject: [PATCH 059/158] Install dotnet 1.0.1 on appveyor --- appveyor.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 0701d5f65c..418b48a439 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,8 +11,10 @@ environment: secure: OtVfyN3ErqQrDTnWH2HDfJDlCiu/i4/X4wFmK3ZXXP7HmCiXYPSbTjMPwwdOxRaK MYGET_API_URL: https://www.myget.org/F/avalonia-ci/api/v2/package install: + - if not exist dotnet-1.0.1.exe appveyor DownloadFile https://go.microsoft.com/fwlink/?linkid=843448 -FileName "dotnet-1.0.1.exe" - if not exist gtk-sharp-2.12.26.msi appveyor DownloadFile http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.26.msi - msiexec /i gtk-sharp-2.12.26.msi /qn /norestart + - cmd: call c:\dotnet.exe /quiet - cmd: set PATH=%programfiles(x86)%\GtkSharp\2.12\bin\;%PATH% before_build: - git submodule update --init @@ -30,3 +32,4 @@ artifacts: - path: artifacts\zip\*.zip cache: - gtk-sharp-2.12.26.msi + - dotnet-1.0.1.exe From e26141a64d9568cd05cdb28772a4d97c2e8ca8dd Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 9 Mar 2017 00:01:02 +0300 Subject: [PATCH 060/158] typo --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 418b48a439..4bf04efa12 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ install: - if not exist dotnet-1.0.1.exe appveyor DownloadFile https://go.microsoft.com/fwlink/?linkid=843448 -FileName "dotnet-1.0.1.exe" - if not exist gtk-sharp-2.12.26.msi appveyor DownloadFile http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.26.msi - msiexec /i gtk-sharp-2.12.26.msi /qn /norestart - - cmd: call c:\dotnet.exe /quiet + - cmd: call dotnet.exe /quiet - cmd: set PATH=%programfiles(x86)%\GtkSharp\2.12\bin\;%PATH% before_build: - git submodule update --init From 357bacc3ab2ccb0011eff504e7e8229904a25b77 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 9 Mar 2017 00:30:43 +0300 Subject: [PATCH 061/158] Update appveyor.yml --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 4bf04efa12..76f991d38e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ install: - if not exist dotnet-1.0.1.exe appveyor DownloadFile https://go.microsoft.com/fwlink/?linkid=843448 -FileName "dotnet-1.0.1.exe" - if not exist gtk-sharp-2.12.26.msi appveyor DownloadFile http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.26.msi - msiexec /i gtk-sharp-2.12.26.msi /qn /norestart - - cmd: call dotnet.exe /quiet + - cmd: call dotnet-1.0.1.exe /quiet - cmd: set PATH=%programfiles(x86)%\GtkSharp\2.12\bin\;%PATH% before_build: - git submodule update --init From bcbfbbb906943a8f3c05f7d4342e2093f866d115 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 9 Mar 2017 00:17:16 +0300 Subject: [PATCH 062/158] skip net core tests on windows --- build.cake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.cake b/build.cake index b5450017d0..32da451a49 100644 --- a/build.cake +++ b/build.cake @@ -160,9 +160,11 @@ Task("Build") void RunCoreTest(string dir, Parameters parameters) { DotNetCoreRestore(dir); - var frameworks = new List{"netcoreapp1.1"}; + var frameworks = new List();; if(parameters.IsRunningOnWindows) frameworks.Add("net461"); + else + frameworks.Add("netcoreapp1.1"); foreach(var fw in frameworks) { Information("Running for " + fw); From 42c68debf97fbd3b7c019e7382695642f291d845 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 9 Mar 2017 01:19:18 +0300 Subject: [PATCH 063/158] Disable default items --- src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj | 6 +----- .../Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj | 7 +------ 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj index b51bc65607..7c10c0f65e 100644 --- a/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj +++ b/src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj @@ -2,6 +2,7 @@ netstandard1.1 False + False false @@ -161,9 +162,4 @@ - - - - - diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj index 3f7343a1ec..478dd67a3c 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -2,6 +2,7 @@ netstandard1.1 False + false false @@ -326,10 +327,4 @@ - - - - - - From 886a65beaa0580ab915d84b5fde49b368450b9b8 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 9 Mar 2017 01:54:48 +0300 Subject: [PATCH 064/158] Use dotnet test for layout and controls tests --- build.cake | 7 +- .../Avalonia.Base.UnitTests.csproj | 27 +-- .../Avalonia.Benchmarks.csproj | 2 - .../Avalonia.Controls.UnitTests.csproj | 62 +---- .../TopLevelTests.cs | 2 - .../WindowBaseTests.cs | 2 - .../Avalonia.Layout.UnitTests.csproj | 213 ++++++------------ .../FullLayoutTests.cs | 50 +++- .../Avalonia.LeakTests.csproj | 2 - tests/coretests.props | 26 ++- 10 files changed, 147 insertions(+), 246 deletions(-) diff --git a/build.cake b/build.cake index 32da451a49..49fccd454b 100644 --- a/build.cake +++ b/build.cake @@ -159,12 +159,11 @@ Task("Build") void RunCoreTest(string dir, Parameters parameters) { + Information("Running tests from " + dir); DotNetCoreRestore(dir); - var frameworks = new List();; + var frameworks = new List(){"netcoreapp1.1"}; if(parameters.IsRunningOnWindows) frameworks.Add("net461"); - else - frameworks.Add("netcoreapp1.1"); foreach(var fw in frameworks) { Information("Running for " + fw); @@ -178,6 +177,8 @@ Task("Run-Net-Core-Unit-Tests") .IsDependentOn("Clean") .Does(() => { RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters); + RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters); + RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters); }); Task("Run-Unit-Tests") diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj index 31aed15ae8..b4d35dd439 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -4,25 +4,6 @@ {2905FF23-53FB-45E6-AA49-6AF47A172056} - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - MinimumRecommendedRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - MinimumRecommendedRules.ruleset - @@ -57,11 +38,5 @@ Avalonia.UnitTests - + \ No newline at end of file diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index ed7af3b0ca..98188e91ad 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -108,8 +108,6 @@ --> - - diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj index 734d7a3d35..641f5ca499 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -1,35 +1,9 @@ - - - - Debug - AnyCPU - {5CCB5571-7C30-4E7D-967D-0E2158EBD91F} - Library - v4.6.1 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - + + + net461;netcoreapp1.1 + {5CCB5571-7C30-4E7D-967D-0E2158EBD91F} + + @@ -92,10 +66,6 @@ - - {4a1abb09-9047-4bd5-a4ad-a055e52c5ee0} - Avalonia.DotNetFrameworkRuntime - {3e53a01a-b331-47f3-b828-4a5717e77a24} Avalonia.Markup.Xaml @@ -142,23 +112,6 @@ - - - - - - - - - - - @@ -172,5 +125,8 @@ + + + \ No newline at end of file diff --git a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs index e19729706d..8ca4ca0fbc 100644 --- a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs @@ -14,8 +14,6 @@ using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Styling; using Avalonia.UnitTests; -using Ploeh.AutoFixture; -using Ploeh.AutoFixture.AutoMoq; using Xunit; namespace Avalonia.Controls.UnitTests diff --git a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs index d4b850d66e..43dbcdc610 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs @@ -14,8 +14,6 @@ using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Styling; using Avalonia.UnitTests; -using Ploeh.AutoFixture; -using Ploeh.AutoFixture.AutoMoq; using Xunit; namespace Avalonia.Controls.UnitTests diff --git a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj index 01732a85d7..ff4de46b1b 100644 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ b/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj @@ -1,143 +1,72 @@ - - - - Debug - AnyCPU - {DB070A10-BF39-4752-8456-86E9D5928478} - Library - Properties - Avalonia.Layout.UnitTests - Avalonia.Layout.UnitTests - v4.6.1 - 512 - - - - 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 - - - {7062AE20-5DCC-4442-9645-8195BDECE63E} - Avalonia.Diagnostics - - - {4a1abb09-9047-4bd5-a4ad-a055e52c5ee0} - Avalonia.DotNetFrameworkRuntime - - - {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 - - - {5ccb5571-7c30-4e7d-967d-0e2158ebd91f} - Avalonia.Controls.UnitTests - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - - - - - - - - - - - - - - - - - - - - + + + net461;netcoreapp1.1 + {DB070A10-BF39-4752-8456-86E9D5928478} + + + + + + + + + + + + + {D211E587-D8BC-45B9-95A4-F297C8FA5200} + Avalonia.Animation + + + {B09B78D8-9B26-48B0-9149-D64A2F120F3F} + Avalonia.Base + + + {D2221C82-4A25-4583-9B43-D791E3F6820C} + Avalonia.Controls + + + {7062AE20-5DCC-4442-9645-8195BDECE63E} + Avalonia.Diagnostics + + + {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 + + + {5CCB5571-7C30-4E7D-967D-0E2158EBD91F} + Avalonia.UnitTests + + + + + \ No newline at end of file diff --git a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs b/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs index 9922b624e5..74a1fbc735 100644 --- a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs +++ b/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs @@ -9,8 +9,6 @@ using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; -using Avalonia.Controls.UnitTests; -using Avalonia.Controls.UnitTests.Primitives; using Avalonia.Diagnostics; using Avalonia.Input; using Avalonia.Platform; @@ -19,9 +17,10 @@ using Avalonia.Shared.PlatformSupport; using Avalonia.Styling; using Avalonia.Themes.Default; using Avalonia.VisualTree; -using Ploeh.AutoFixture; -using Ploeh.AutoFixture.AutoMoq; using Xunit; +using Avalonia.Media; +using System; +using System.Collections.Generic; namespace Avalonia.Layout.UnitTests { @@ -130,13 +129,44 @@ namespace Avalonia.Layout.UnitTests return v.Bounds.Position; } - private void RegisterServices() + class FormattedTextMock : IFormattedTextImpl { - var fixture = new Fixture().Customize(new AutoMoqCustomization()); + public FormattedTextMock(string text) + { + Text = text; + } + + public Size Constraint { get; set; } + + public string Text { get; } + + public void Dispose() + { + } + + public IEnumerable GetLines() => new FormattedTextLine[0]; + + public TextHitTestResult HitTestPoint(Point point) => new TextHitTestResult(); - var formattedText = fixture.Create(); + public Rect HitTestTextPosition(int index) => new Rect(); + + public IEnumerable HitTestTextRange(int index, int length) => new Rect[0]; + + public Size Measure() => Constraint; + + public void SetForegroundBrush(IBrush brush, int startIndex, int length) + { + } + } + + private void RegisterServices() + { var globalStyles = new Mock(); - var renderInterface = fixture.Create(); + var renderInterface = new Mock(); + renderInterface.Setup(x => x.CreateFormattedText(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(new FormattedTextMock("TEST")); + var windowImpl = new Mock(); Size clientSize = default(Size); @@ -152,9 +182,9 @@ namespace Avalonia.Layout.UnitTests .Bind().ToConstant(globalStyles.Object) .Bind().ToConstant(new LayoutManager()) .Bind().ToConstant(new AppBuilder().RuntimePlatform) - .Bind().ToConstant(renderInterface) + .Bind().ToConstant(renderInterface.Object) .Bind().ToConstant(new Styler()) - .Bind().ToConstant(new WindowingPlatformMock(() => windowImpl.Object)); + .Bind().ToConstant(new Avalonia.Controls.UnitTests.WindowingPlatformMock(() => windowImpl.Object)); var theme = new DefaultTheme(); globalStyles.Setup(x => x.Styles).Returns(theme); diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index 2c550bb97c..dfc759efd9 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -127,8 +127,6 @@ --> - - diff --git a/tests/coretests.props b/tests/coretests.props index 4253d70cdd..57b235dd60 100644 --- a/tests/coretests.props +++ b/tests/coretests.props @@ -1,10 +1,28 @@ - - False - false - true + False + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + MinimumRecommendedRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + MinimumRecommendedRules.ruleset From f129262238fa4d6d9b5e954c258e43bc814284c1 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 9 Mar 2017 02:58:53 +0300 Subject: [PATCH 065/158] Skip netcoreapp1.1 for layout and controls for now --- build.cake | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/build.cake b/build.cake index 49fccd454b..d803e89c9a 100644 --- a/build.cake +++ b/build.cake @@ -157,7 +157,7 @@ Task("Build") } }); -void RunCoreTest(string dir, Parameters parameters) +void RunCoreTest(string dir, Parameters parameters, bool net461Only) { Information("Running tests from " + dir); DotNetCoreRestore(dir); @@ -166,6 +166,8 @@ void RunCoreTest(string dir, Parameters parameters) frameworks.Add("net461"); foreach(var fw in frameworks) { + if(fw != "net461" && net461Only) + continue; Information("Running for " + fw); DotNetCoreTest(System.IO.Path.Combine(dir, System.IO.Path.GetFileName(dir)+".csproj"), new DotNetCoreTestSettings{Framework = fw}); @@ -176,9 +178,9 @@ void RunCoreTest(string dir, Parameters parameters) Task("Run-Net-Core-Unit-Tests") .IsDependentOn("Clean") .Does(() => { - RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters); - RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters); - RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters); + RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters, false); + RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters, true); + RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true); }); Task("Run-Unit-Tests") From 65f9fe67f7ce6d0f075ef3ef60d0389c623636ed Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 10 Mar 2017 00:24:44 +0100 Subject: [PATCH 066/158] Added a set of immutable brushes. Make `SolidColorBrush` immutable, but make the static `Brushes` properties return immutable brushes. The immutable brushes will be needed by the deferred renderer. --- .../Accents/BaseLight.xaml | 1 - src/Avalonia.Visuals/Avalonia.Visuals.csproj | 9 +- src/Avalonia.Visuals/Media/Brush.cs | 3 +- src/Avalonia.Visuals/Media/Brushes.cs | 566 +++++++++--------- src/Avalonia.Visuals/Media/IMutableBrush.cs | 16 + .../Media/Immutable/ImmutableGradientBrush.cs | 47 ++ .../Media/Immutable/ImmutableImageBrush.cs | 58 ++ .../Immutable/ImmutableLinearGradientBrush.cs | 51 ++ .../Immutable/ImmutableRadialGradientBrush.cs | 59 ++ .../Immutable/ImmutableSolidColorBrush.cs | 59 ++ .../Media/Immutable/ImmutableTileBrush.cs | 77 +++ .../Media/Immutable/ImmutableVisualBrush.cs | 58 ++ .../Media/Mutable/SolidColorBrush.cs | 35 -- src/Avalonia.Visuals/Media/SolidColorBrush.cs | 36 +- .../Properties/AssemblyInfo.cs | 3 +- .../Avalonia.Cairo/Media/DrawingContext.cs | 2 +- .../Media/SolidColorBrushImpl.cs | 2 +- .../Xaml/Style2.xaml | 9 +- .../Xaml/StyleTests.cs | 20 +- 19 files changed, 762 insertions(+), 349 deletions(-) create mode 100644 src/Avalonia.Visuals/Media/IMutableBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableGradientBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableLinearGradientBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableRadialGradientBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs delete mode 100644 src/Avalonia.Visuals/Media/Mutable/SolidColorBrush.cs diff --git a/src/Avalonia.Themes.Default/Accents/BaseLight.xaml b/src/Avalonia.Themes.Default/Accents/BaseLight.xaml index 38786f54d3..cb86598a42 100644 --- a/src/Avalonia.Themes.Default/Accents/BaseLight.xaml +++ b/src/Avalonia.Themes.Default/Accents/BaseLight.xaml @@ -1,6 +1,5 @@ \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs index 308a65dcd4..dc15074445 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs @@ -124,13 +124,12 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml { var xaml = @" @@ -139,12 +138,12 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); - var brush = (Avalonia.Media.Mutable.SolidColorBrush)window.FindStyleResource("brush"); + var brush = (ISolidColorBrush)window.FindStyleResource("brush"); var button = window.FindControl