From 394a5be4026afcf41202d876fb29dcf4beb8ab7c Mon Sep 17 00:00:00 2001 From: Lubomir Tetak Date: Fri, 17 Dec 2021 14:52:22 +0100 Subject: [PATCH 01/67] OSX handle CMD+key up combinations in Avalonia --- native/Avalonia.Native/src/OSX/app.mm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index 79175d9ff1..05b129baca 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -73,6 +73,11 @@ ComPtr _events; _isHandlingSendEvent = true; @try { [super sendEvent: event]; + if ([event type] == NSEventTypeKeyUp && ([event modifierFlags] & NSEventModifierFlagCommand)) + { + [[self keyWindow] sendEvent:event]; + } + } @finally { _isHandlingSendEvent = oldHandling; } From b2b4014b1c6e5805e7c2330582124aa2f73f34ca Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 3 Feb 2022 14:58:28 +0300 Subject: [PATCH 02/67] Make DispatcherPriority to be a struct with static readonly field values In future versions this will allow us to extend priority lists without breaking binary compatibility --- src/Avalonia.Base/ApiCompatBaseline.txt | 3 +- .../Threading/AvaloniaScheduler.cs | 2 +- src/Avalonia.Base/Threading/Dispatcher.cs | 12 +-- .../Threading/DispatcherPriority.cs | 97 ++++++++++++++----- .../Threading/DispatcherTimer.cs | 4 +- src/Avalonia.Base/Threading/IDispatcher.cs | 12 +-- .../Diagnostics/ViewModels/MainViewModel.cs | 3 +- .../Avalonia.UnitTests/ImmediateDispatcher.cs | 12 +-- 8 files changed, 96 insertions(+), 49 deletions(-) diff --git a/src/Avalonia.Base/ApiCompatBaseline.txt b/src/Avalonia.Base/ApiCompatBaseline.txt index 4701a83175..7f378d2f65 100644 --- a/src/Avalonia.Base/ApiCompatBaseline.txt +++ b/src/Avalonia.Base/ApiCompatBaseline.txt @@ -1,3 +1,4 @@ Compat issues with assembly Avalonia.Base: +MembersMustExist : Member 'public System.Int32 System.Int32 Avalonia.Threading.DispatcherPriority.value__' does not exist in the implementation but it does exist in the contract. InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Threading.IDispatcher.Post(System.Action, T, Avalonia.Threading.DispatcherPriority)' is present in the implementation but not in the contract. -Total Issues: 1 +Total Issues: 2 diff --git a/src/Avalonia.Base/Threading/AvaloniaScheduler.cs b/src/Avalonia.Base/Threading/AvaloniaScheduler.cs index 397826df53..6423d86e7c 100644 --- a/src/Avalonia.Base/Threading/AvaloniaScheduler.cs +++ b/src/Avalonia.Base/Threading/AvaloniaScheduler.cs @@ -46,7 +46,7 @@ namespace Avalonia.Threading { composite.Add(action(this, state)); } - }, DispatcherPriority.DataBind); + }, DispatcherPriority.Background); composite.Add(cancellation); diff --git a/src/Avalonia.Base/Threading/Dispatcher.cs b/src/Avalonia.Base/Threading/Dispatcher.cs index 49cee441d0..2eb2e7c01f 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.cs @@ -83,42 +83,42 @@ namespace Avalonia.Threading _jobRunner.HasJobsWithPriority(minimumPriority); /// - public Task InvokeAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Action action, DispatcherPriority priority = default) { _ = action ?? throw new ArgumentNullException(nameof(action)); return _jobRunner.InvokeAsync(action, priority); } /// - public Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Func function, DispatcherPriority priority = default) { _ = function ?? throw new ArgumentNullException(nameof(function)); return _jobRunner.InvokeAsync(function, priority); } /// - public Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Func function, DispatcherPriority priority = default) { _ = function ?? throw new ArgumentNullException(nameof(function)); return _jobRunner.InvokeAsync(function, priority).Unwrap(); } /// - public Task InvokeAsync(Func> function, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Func> function, DispatcherPriority priority = default) { _ = function ?? throw new ArgumentNullException(nameof(function)); return _jobRunner.InvokeAsync(function, priority).Unwrap(); } /// - public void Post(Action action, DispatcherPriority priority = DispatcherPriority.Normal) + public void Post(Action action, DispatcherPriority priority = default) { _ = action ?? throw new ArgumentNullException(nameof(action)); _jobRunner.Post(action, priority); } /// - public void Post(Action action, T arg, DispatcherPriority priority = DispatcherPriority.Normal) + public void Post(Action action, T arg, DispatcherPriority priority = default) { _ = action ?? throw new ArgumentNullException(nameof(action)); _jobRunner.Post(action, arg, priority); diff --git a/src/Avalonia.Base/Threading/DispatcherPriority.cs b/src/Avalonia.Base/Threading/DispatcherPriority.cs index a2b4b86bac..a93e4f406d 100644 --- a/src/Avalonia.Base/Threading/DispatcherPriority.cs +++ b/src/Avalonia.Base/Threading/DispatcherPriority.cs @@ -1,74 +1,121 @@ +using System; + namespace Avalonia.Threading { /// /// Defines the priorities with which jobs can be invoked on a . /// - // TODO: These are copied from WPF - many won't apply to Avalonia. - public enum DispatcherPriority + public readonly struct DispatcherPriority : IEquatable, IComparable { + /// + /// The integer value of the priority + /// + public int Value { get; } + + private DispatcherPriority(int value) + { + Value = value; + } + /// /// Minimum possible priority /// - MinValue = 1, - + public static readonly DispatcherPriority MinValue = new(0); + /// /// The job will be processed when the system is idle. /// - SystemIdle = 1, + [Obsolete("WPF compatibility")] public static readonly DispatcherPriority SystemIdle = MinValue; /// /// The job will be processed when the application is idle. /// - ApplicationIdle = 2, + [Obsolete("WPF compatibility")] public static readonly DispatcherPriority ApplicationIdle = MinValue; /// /// The job will be processed after background operations have completed. /// - ContextIdle = 3, + [Obsolete("WPF compatibility")] public static readonly DispatcherPriority ContextIdle = MinValue; /// - /// The job will be processed after other non-idle operations have completed. + /// The job will be processed with normal priority. /// - Background = 4, + public static readonly DispatcherPriority Normal = MinValue; /// - /// The job will be processed with the same priority as input. + /// The job will be processed after other non-idle operations have completed. /// - Input = 5, + public static readonly DispatcherPriority Background = new(1); /// - /// The job will be processed after layout and render but before input. + /// The job will be processed with the same priority as input. /// - Loaded = 6, + public static readonly DispatcherPriority Input = new(2); /// - /// The job will be processed with the same priority as render. + /// The job will be processed after layout and render but before input. /// - Render = 7, + public static readonly DispatcherPriority Loaded = new(3); /// /// The job will be processed with the same priority as render. /// - Layout = 8, - + public static readonly DispatcherPriority Render = new(5); + /// - /// The job will be processed with the same priority as data binding. + /// The job will be processed with the same priority as render. /// - DataBind = 9, + public static readonly DispatcherPriority Layout = new(6); /// - /// The job will be processed with normal priority. + /// The job will be processed with the same priority as data binding. /// - Normal = 10, + [Obsolete("WPF compatibility")] public static readonly DispatcherPriority DataBind = MinValue; /// /// The job will be processed before other asynchronous operations. /// - Send = 11, - + public static readonly DispatcherPriority Send = new(7); + /// /// Maximum possible priority /// - MaxValue = 11 + public static readonly DispatcherPriority MaxValue = Send; + + // Note: unlike ctor this one is validating + public static DispatcherPriority FromValue(int value) + { + if (value < MinValue.Value || value > MaxValue.Value) + throw new ArgumentOutOfRangeException(nameof(value)); + return new DispatcherPriority(value); + } + + public static implicit operator int(DispatcherPriority priority) => priority.Value; + + public static implicit operator DispatcherPriority(int value) => FromValue(value); + + /// + public bool Equals(DispatcherPriority other) => Value == other.Value; + + /// + public override bool Equals(object? obj) => obj is DispatcherPriority other && Equals(other); + + /// + public override int GetHashCode() => Value.GetHashCode(); + + public static bool operator ==(DispatcherPriority left, DispatcherPriority right) => left.Value == right.Value; + + public static bool operator !=(DispatcherPriority left, DispatcherPriority right) => left.Value != right.Value; + + public static bool operator <(DispatcherPriority left, DispatcherPriority right) => left.Value < right.Value; + + public static bool operator >(DispatcherPriority left, DispatcherPriority right) => left.Value > right.Value; + + public static bool operator <=(DispatcherPriority left, DispatcherPriority right) => left.Value <= right.Value; + + public static bool operator >=(DispatcherPriority left, DispatcherPriority right) => left.Value >= right.Value; + + /// + public int CompareTo(DispatcherPriority other) => Value.CompareTo(other.Value); } -} +} \ No newline at end of file diff --git a/src/Avalonia.Base/Threading/DispatcherTimer.cs b/src/Avalonia.Base/Threading/DispatcherTimer.cs index 93023b90a5..0c25d89722 100644 --- a/src/Avalonia.Base/Threading/DispatcherTimer.cs +++ b/src/Avalonia.Base/Threading/DispatcherTimer.cs @@ -123,7 +123,7 @@ namespace Avalonia.Threading /// The interval at which to tick. /// The priority to use. /// An used to cancel the timer. - public static IDisposable Run(Func action, TimeSpan interval, DispatcherPriority priority = DispatcherPriority.Normal) + public static IDisposable Run(Func action, TimeSpan interval, DispatcherPriority priority = default) { var timer = new DispatcherTimer(priority) { Interval = interval }; @@ -152,7 +152,7 @@ namespace Avalonia.Threading public static IDisposable RunOnce( Action action, TimeSpan interval, - DispatcherPriority priority = DispatcherPriority.Normal) + DispatcherPriority priority = default) { interval = (interval != TimeSpan.Zero) ? interval : TimeSpan.FromTicks(1); diff --git a/src/Avalonia.Base/Threading/IDispatcher.cs b/src/Avalonia.Base/Threading/IDispatcher.cs index cd5add70d4..eccd42bd4e 100644 --- a/src/Avalonia.Base/Threading/IDispatcher.cs +++ b/src/Avalonia.Base/Threading/IDispatcher.cs @@ -24,7 +24,7 @@ namespace Avalonia.Threading /// /// The method. /// The priority with which to invoke the method. - void Post(Action action, DispatcherPriority priority = DispatcherPriority.Normal); + void Post(Action action, DispatcherPriority priority = default); /// /// Posts an action that will be invoked on the dispatcher thread. @@ -33,7 +33,7 @@ namespace Avalonia.Threading /// The method to call. /// The argument of method to call. /// The priority with which to invoke the method. - void Post(Action action, T arg, DispatcherPriority priority = DispatcherPriority.Normal); + void Post(Action action, T arg, DispatcherPriority priority = default); /// /// Invokes a action on the dispatcher thread. @@ -41,7 +41,7 @@ namespace Avalonia.Threading /// The method. /// The priority with which to invoke the method. /// A task that can be used to track the method's execution. - Task InvokeAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal); + Task InvokeAsync(Action action, DispatcherPriority priority = default); /// /// Invokes a method on the dispatcher thread. @@ -49,7 +49,7 @@ namespace Avalonia.Threading /// The method. /// The priority with which to invoke the method. /// A task that can be used to track the method's execution. - Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal); + Task InvokeAsync(Func function, DispatcherPriority priority = default); /// /// Queues the specified work to run on the dispatcher thread and returns a proxy for the @@ -58,7 +58,7 @@ namespace Avalonia.Threading /// The work to execute asynchronously. /// The priority with which to invoke the method. /// A task that represents a proxy for the task returned by . - Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal); + Task InvokeAsync(Func function, DispatcherPriority priority = default); /// /// Queues the specified work to run on the dispatcher thread and returns a proxy for the @@ -67,6 +67,6 @@ namespace Avalonia.Threading /// The work to execute asynchronously. /// The priority with which to invoke the method. /// A task that represents a proxy for the task returned by . - Task InvokeAsync(Func> function, DispatcherPriority priority = DispatcherPriority.Normal); + Task InvokeAsync(Func> function, DispatcherPriority priority = default); } } diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs index e08c5bc8dd..140515eb40 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs @@ -163,8 +163,7 @@ namespace Avalonia.Diagnostics.ViewModels } catch { } }, - TimeSpan.FromMilliseconds(0), - DispatcherPriority.ApplicationIdle); + TimeSpan.FromMilliseconds(0)); } RaiseAndSetIfChanged(ref _content, value); diff --git a/tests/Avalonia.UnitTests/ImmediateDispatcher.cs b/tests/Avalonia.UnitTests/ImmediateDispatcher.cs index 5f0d41590f..03c89732f3 100644 --- a/tests/Avalonia.UnitTests/ImmediateDispatcher.cs +++ b/tests/Avalonia.UnitTests/ImmediateDispatcher.cs @@ -16,39 +16,39 @@ namespace Avalonia.UnitTests } /// - public void Post(Action action, DispatcherPriority priority = DispatcherPriority.Normal) + public void Post(Action action, DispatcherPriority priority) { action(); } /// - public void Post(Action action, T arg, DispatcherPriority priority = DispatcherPriority.Normal) + public void Post(Action action, T arg, DispatcherPriority priority) { action(arg); } /// - public Task InvokeAsync(Action action, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Action action, DispatcherPriority priority) { action(); return Task.CompletedTask; } /// - public Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Func function, DispatcherPriority priority) { var result = function(); return Task.FromResult(result); } /// - public Task InvokeAsync(Func function, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Func function, DispatcherPriority priority) { return function(); } /// - public Task InvokeAsync(Func> function, DispatcherPriority priority = DispatcherPriority.Normal) + public Task InvokeAsync(Func> function, DispatcherPriority priority) { return function(); } From 9eff7810f88e342274f3664ea55d3cc03241bbd2 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Fri, 25 Mar 2022 08:14:15 +0100 Subject: [PATCH 03/67] Relax typface resolution --- src/Skia/Avalonia.Skia/FontManagerImpl.cs | 4 +--- .../Avalonia.Skia/SKTypefaceCollection.cs | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Skia/Avalonia.Skia/FontManagerImpl.cs b/src/Skia/Avalonia.Skia/FontManagerImpl.cs index 075a2cc746..125dd0e455 100644 --- a/src/Skia/Avalonia.Skia/FontManagerImpl.cs +++ b/src/Skia/Avalonia.Skia/FontManagerImpl.cs @@ -122,9 +122,7 @@ namespace Avalonia.Skia skTypeface = _skFontManager.MatchFamily(familyName, fontStyle); - if (skTypeface is null - || (!skTypeface.FamilyName.Equals(familyName, StringComparison.Ordinal) - && defaultName.Equals(skTypeface.FamilyName, StringComparison.Ordinal))) + if (skTypeface is null || defaultName.Equals(skTypeface.FamilyName, StringComparison.Ordinal)) { continue; } diff --git a/src/Skia/Avalonia.Skia/SKTypefaceCollection.cs b/src/Skia/Avalonia.Skia/SKTypefaceCollection.cs index f66df9e6e9..1f3f20730f 100644 --- a/src/Skia/Avalonia.Skia/SKTypefaceCollection.cs +++ b/src/Skia/Avalonia.Skia/SKTypefaceCollection.cs @@ -59,15 +59,30 @@ namespace Avalonia.Skia return typeface; } - //Nothing was found so we try some regular cases. + if (TryFindStretchFallback(key, out typeface)) + { + return typeface; + } + + //Nothing was found so we try some regular typeface. if (_typefaces.TryGetValue(new Typeface(key.FontFamily), out typeface)) { return typeface; } - return _typefaces.TryGetValue(new Typeface(key.FontFamily, FontStyle.Italic), out typeface) ? - typeface : - null; + SKTypeface skTypeface = null; + + foreach(var pair in _typefaces) + { + skTypeface = pair.Value; + + if (skTypeface.FamilyName.Contains(key.FontFamily.Name)) + { + return skTypeface; + } + } + + return skTypeface; } private bool TryFindStretchFallback(Typeface key, out SKTypeface typeface) From 5dd49bbf50908e67bbabe634bb83a52058480803 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Fri, 25 Mar 2022 09:50:21 +0100 Subject: [PATCH 04/67] Update unit tests --- .../Media/SKTypefaceCollectionCacheTests.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs b/tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs index ddf4a36dcd..64050bd85e 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/SKTypefaceCollectionCacheTests.cs @@ -28,7 +28,7 @@ namespace Avalonia.Skia.UnitTests.Media } [Fact] - public void Should_Get_Null_For_Invalid_FamilyName() + public void Should_Get_Typeface_For_Invalid_FamilyName() { using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) { @@ -39,7 +39,24 @@ namespace Avalonia.Skia.UnitTests.Media var typeface = notoMonoCollection.Get(new Typeface("ABC")); - Assert.Null(typeface); + Assert.NotNull(typeface); + } + } + + [Fact] + public void Should_Get_Typeface_For_Partial_FamilyName() + { + using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) + { + var fontFamily = new FontFamily("resm:Avalonia.Skia.UnitTests.Assets?assembly=Avalonia.Skia.UnitTests#T"); + + var fontCollection = SKTypefaceCollectionCache.GetOrAddTypefaceCollection(fontFamily); + + var typeface = fontCollection.Get(new Typeface(fontFamily)); + + Assert.NotNull(typeface); + + Assert.Equal("Twitter Color Emoji", typeface.FamilyName); } } } From 5669a640d019ab5425775a80339aa73a32662dcd Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Wed, 9 Feb 2022 13:13:27 +0300 Subject: [PATCH 05/67] Fix #7567 - TreeView crashes the app when trying to display the same viewmodel twice --- .../Generators/TreeContainerIndex.cs | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Controls/Generators/TreeContainerIndex.cs b/src/Avalonia.Controls/Generators/TreeContainerIndex.cs index da13416700..eb60fca367 100644 --- a/src/Avalonia.Controls/Generators/TreeContainerIndex.cs +++ b/src/Avalonia.Controls/Generators/TreeContainerIndex.cs @@ -15,6 +15,7 @@ namespace Avalonia.Controls.Generators /// public class TreeContainerIndex { + private readonly Dictionary> _itemToContainerSet = new Dictionary>(); private readonly Dictionary _itemToContainer = new Dictionary(); private readonly Dictionary _containerToItem = new Dictionary(); @@ -45,14 +46,45 @@ namespace Avalonia.Controls.Generators /// The item container. public void Add(object item, IControl container) { - _itemToContainer.Add(item, container); + _itemToContainer[item] = container; + if (_itemToContainerSet.TryGetValue(item, out var set)) + { + set.Add(container); + } + else + { + _itemToContainerSet.Add(item, new HashSet { container }); + } + _containerToItem.Add(container, item); Materialized?.Invoke( - this, + this, new ItemContainerEventArgs(new ItemContainerInfo(container, item, 0))); } + /// + /// Removes a container from private collections. + /// + /// The item container. + /// The DataContext object + private void RemoveContainer(IControl container, object item) + { + if (_itemToContainerSet.TryGetValue(item, out var set)) + { + set.Remove(container); + if (set.Count == 0) + { + _itemToContainerSet.Remove(item); + _itemToContainer.Remove(item); + } + else + { + _itemToContainer[item] = set.First(); + } + } + } + /// /// Removes a container from the index. /// @@ -61,10 +93,10 @@ namespace Avalonia.Controls.Generators { var item = _containerToItem[container]; _containerToItem.Remove(container); - _itemToContainer.Remove(item); + RemoveContainer(container, item); Dematerialized?.Invoke( - this, + this, new ItemContainerEventArgs(new ItemContainerInfo(container, item, 0))); } @@ -79,7 +111,7 @@ namespace Avalonia.Controls.Generators { var item = _containerToItem[container.ContainerControl]; _containerToItem.Remove(container.ContainerControl); - _itemToContainer.Remove(item); + RemoveContainer(container.ContainerControl, item); } Dematerialized?.Invoke( @@ -97,6 +129,14 @@ namespace Avalonia.Controls.Generators if (item != null) { _itemToContainer.TryGetValue(item, out var result); + if (result == null) + { + _itemToContainerSet.TryGetValue(item, out var set); + if (set?.Count > 0) + { + return set.FirstOrDefault(); + } + } return result; } @@ -113,6 +153,10 @@ namespace Avalonia.Controls.Generators if (container != null) { _containerToItem.TryGetValue(container, out var result); + if (result != null) + { + _itemToContainer[result] = container; + } return result; } From bcc2be8d645275a41cb83c0f8d15955b56894af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro?= Date: Tue, 29 Mar 2022 01:09:47 +0100 Subject: [PATCH 06/67] Fixed ScrollViewer Padding. --- src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml | 2 +- src/Avalonia.Themes.Fluent/Controls/ScrollViewer.xaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml b/src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml index b357446bfa..aab1b76259 100644 --- a/src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml +++ b/src/Avalonia.Themes.Default/Controls/ScrollViewer.xaml @@ -13,7 +13,7 @@ CanVerticallyScroll="{TemplateBinding CanVerticallyScroll}" Content="{TemplateBinding Content}" Extent="{TemplateBinding Extent, Mode=TwoWay}" - Margin="{TemplateBinding Padding}" + Padding="{TemplateBinding Padding}" Offset="{TemplateBinding Offset, Mode=TwoWay}" Viewport="{TemplateBinding Viewport, Mode=TwoWay}" IsScrollChainingEnabled="{TemplateBinding IsScrollChainingEnabled}"> diff --git a/src/Avalonia.Themes.Fluent/Controls/ScrollViewer.xaml b/src/Avalonia.Themes.Fluent/Controls/ScrollViewer.xaml index 53a1b721d1..b7addcb61e 100644 --- a/src/Avalonia.Themes.Fluent/Controls/ScrollViewer.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/ScrollViewer.xaml @@ -32,7 +32,7 @@ CanVerticallyScroll="{TemplateBinding CanVerticallyScroll}" Content="{TemplateBinding Content}" Extent="{TemplateBinding Extent, Mode=TwoWay}" - Margin="{TemplateBinding Padding}" + Padding="{TemplateBinding Padding}" Offset="{TemplateBinding Offset, Mode=TwoWay}" Viewport="{TemplateBinding Viewport, Mode=TwoWay}" IsScrollChainingEnabled="{TemplateBinding IsScrollChainingEnabled}"> From 69f96d5b441c00c9c1e954f96a476b8fdb308ea4 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 00:13:17 +0200 Subject: [PATCH 07/67] Added failing integration test for #7906. --- samples/IntegrationTestApp/MainWindow.axaml | 5 ++++- .../ElementExtensions.cs | 11 +++++++++++ .../Avalonia.IntegrationTests.Appium/MenuTests.cs | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml index fe1487a7f2..0b5c20b849 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml +++ b/samples/IntegrationTestApp/MainWindow.axaml @@ -87,7 +87,10 @@ - None + + None + + diff --git a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs index 15e22f4424..290811d2a1 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs @@ -29,6 +29,12 @@ namespace Avalonia.IntegrationTests.Appium _ => throw new ArgumentOutOfRangeException($"Unexpected IsChecked value.") }; + public static bool GetIsFocused(this AppiumWebElement element) + { + var active = element.WrappedDriver.SwitchTo().ActiveElement() as AppiumWebElement; + return element.Id == active?.Id; + } + public static void SendClick(this AppiumWebElement element) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -44,6 +50,11 @@ namespace Avalonia.IntegrationTests.Appium } } + public static void MovePointerOver(this AppiumWebElement element) + { + new Actions(element.WrappedDriver).MoveToElement(element).Perform(); + } + public static string GetAttribute(AppiumWebElement element, string windows, string macOS) { return element.GetAttribute(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? windows : macOS); diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index e9a433b975..0562611a5b 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -59,5 +59,20 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal("Ctrl+O", childMenuItem.GetAttribute("AcceleratorKey")); } + + [Fact] + public void PointerOver_Does_Not_Steal_Focus() + { + // Issue #7906 + var textBox = _session.FindElementByAccessibilityId("MenuFocusTest"); + textBox.Click(); + + Assert.True(textBox.GetIsFocused()); + + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + rootMenuItem.MovePointerOver(); + + Assert.True(textBox.GetIsFocused()); + } } } From 5d35ac324f3deef50955ef1e4fa0f8f47b44bed6 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 01:53:57 +0200 Subject: [PATCH 08/67] Additional menu integration tests. --- samples/IntegrationTestApp/MainWindow.axaml | 3 +- .../IntegrationTestApp/MainWindow.axaml.cs | 2 + .../MenuTests.cs | 61 ++++++++++++++++++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml index 0b5c20b849..19ac68b15b 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml +++ b/samples/IntegrationTestApp/MainWindow.axaml @@ -82,13 +82,14 @@ - + None + diff --git a/samples/IntegrationTestApp/MainWindow.axaml.cs b/samples/IntegrationTestApp/MainWindow.axaml.cs index b9e631a312..9a612aa94d 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml.cs +++ b/samples/IntegrationTestApp/MainWindow.axaml.cs @@ -62,6 +62,8 @@ namespace IntegrationTestApp this.FindControl("BasicComboBox").SelectedIndex = 0; if (source?.Name == "ListBoxSelectionClear") this.FindControl("BasicListBox").SelectedIndex = -1; + if (source?.Name == "MenuClickedMenuItemReset") + this.FindControl("ClickedMenuItem").Text = "None"; } } } diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index 0562611a5b..763ad5f400 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -1,4 +1,7 @@ -using OpenQA.Selenium.Appium; +using System.Threading; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium; +using OpenQA.Selenium.Interactions; using Xunit; namespace Avalonia.IntegrationTests.Appium @@ -15,6 +18,12 @@ namespace Avalonia.IntegrationTests.Appium var tabs = _session.FindElementByAccessibilityId("MainTabs"); var tab = tabs.FindElementByName("Menu"); tab.Click(); + + var reset = _session.FindElementByAccessibilityId("MenuClickedMenuItemReset"); + reset.Click(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("None", clickedMenuItem.Text); } [Fact] @@ -48,11 +57,59 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal("_Grandchild", clickedMenuItem.Text); } + [PlatformFact(SkipOnOSX = true)] + public void Select_Child_With_Arrow_Keys() + { + new Actions(_session) + .KeyDown(Keys.Alt).KeyUp(Keys.Alt) + .SendKeys(Keys.Down + Keys.Enter) + .Perform(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Child 1", clickedMenuItem.Text); + } + + [PlatformFact(SkipOnOSX = true)] + public void Select_Grandchild_With_Arrow_Keys() + { + new Actions(_session) + .KeyDown(Keys.Alt).KeyUp(Keys.Alt) + .SendKeys(Keys.Down + Keys.Down + Keys.Right + Keys.Enter) + .Perform(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Grandchild", clickedMenuItem.Text); + } + + [PlatformFact(SkipOnOSX = true)] + public void Select_Child_With_Access_Keys() + { + new Actions(_session) + .KeyDown(Keys.Alt).KeyUp(Keys.Alt) + .SendKeys("rc") + .Perform(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Child 1", clickedMenuItem.Text); + } + + [PlatformFact(SkipOnOSX = true)] + public void Select_Grandchild_With_Access_Keys() + { + new Actions(_session) + .KeyDown(Keys.Alt).KeyUp(Keys.Alt) + .SendKeys("rhg") + .Perform(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Grandchild", clickedMenuItem.Text); + } + [PlatformFact(SkipOnOSX = true)] public void Child_AcceleratorKey() { var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); - + rootMenuItem.SendClick(); var childMenuItem = _session.FindElementByAccessibilityId("Child1MenuItem"); From 5f51c99c13759656a8fb5b3f584a35bf973de171 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 02:44:45 +0200 Subject: [PATCH 09/67] Don't steal focus when hovering menu bar. Don't focus the menu item when simply hovering over a top-level menu item. The item should only be focused when the containing menu is open. Fixes #7906 --- src/Avalonia.Controls/MenuItem.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs index c03c6000d8..955af8888b 100644 --- a/src/Avalonia.Controls/MenuItem.cs +++ b/src/Avalonia.Controls/MenuItem.cs @@ -644,7 +644,9 @@ namespace Avalonia.Controls /// The property change event. private void IsSelectedChanged(AvaloniaPropertyChangedEventArgs e) { - if ((bool)e.NewValue!) + var parentMenu = Parent as Menu; + + if ((bool)e.NewValue! && (parentMenu is null || parentMenu.IsOpen)) { Focus(); } From 909e9c57da089652bc15be4adda8f00cb1e06be7 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 11:40:13 +0200 Subject: [PATCH 10/67] Add failing menu tests for click + arrow select. --- .../MenuTests.cs | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index 763ad5f400..777ecd7e2b 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -58,7 +58,7 @@ namespace Avalonia.IntegrationTests.Appium } [PlatformFact(SkipOnOSX = true)] - public void Select_Child_With_Arrow_Keys() + public void Select_Child_With_Alt_Arrow_Keys() { new Actions(_session) .KeyDown(Keys.Alt).KeyUp(Keys.Alt) @@ -70,7 +70,7 @@ namespace Avalonia.IntegrationTests.Appium } [PlatformFact(SkipOnOSX = true)] - public void Select_Grandchild_With_Arrow_Keys() + public void Select_Grandchild_With_Alt_Arrow_Keys() { new Actions(_session) .KeyDown(Keys.Alt).KeyUp(Keys.Alt) @@ -82,7 +82,7 @@ namespace Avalonia.IntegrationTests.Appium } [PlatformFact(SkipOnOSX = true)] - public void Select_Child_With_Access_Keys() + public void Select_Child_With_Alt_Access_Keys() { new Actions(_session) .KeyDown(Keys.Alt).KeyUp(Keys.Alt) @@ -94,7 +94,7 @@ namespace Avalonia.IntegrationTests.Appium } [PlatformFact(SkipOnOSX = true)] - public void Select_Grandchild_With_Access_Keys() + public void Select_Grandchild_With_Alt_Access_Keys() { new Actions(_session) .KeyDown(Keys.Alt).KeyUp(Keys.Alt) @@ -105,6 +105,34 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal("_Grandchild", clickedMenuItem.Text); } + [PlatformFact(SkipOnOSX = true)] + public void Select_Child_With_Click_Arrow_Keys() + { + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + rootMenuItem.SendClick(); + + new Actions(_session) + .SendKeys(Keys.Down + Keys.Enter) + .Perform(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Child 1", clickedMenuItem.Text); + } + + [PlatformFact(SkipOnOSX = true)] + public void Select_Grandchild_With_Click_Arrow_Keys() + { + var rootMenuItem = _session.FindElementByAccessibilityId("RootMenuItem"); + rootMenuItem.SendClick(); + + new Actions(_session) + .SendKeys(Keys.Down + Keys.Down + Keys.Right + Keys.Enter) + .Perform(); + + var clickedMenuItem = _session.FindElementByAccessibilityId("ClickedMenuItem"); + Assert.Equal("_Grandchild", clickedMenuItem.Text); + } + [PlatformFact(SkipOnOSX = true)] public void Child_AcceleratorKey() { From bbf7bee56a8d050428a4685c0cda43d480439901 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 12:01:31 +0200 Subject: [PATCH 11/67] Fix unopened toplevel menu selection with down key. --- .../Platform/DefaultMenuInteractionHandler.cs | 11 ++++++++--- .../Platform/DefaultMenuInteractionHandlerTests.cs | 13 +++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs index 23ecdb2e7b..150b4f0792 100644 --- a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs +++ b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs @@ -149,13 +149,18 @@ namespace Avalonia.Controls.Platform case Key.Up: case Key.Down: { - if (item?.IsTopLevel == true) + if (item?.IsTopLevel == true && item.HasSubMenu) { - if (item.HasSubMenu && !item.IsSubMenuOpen) + if (!item.IsSubMenuOpen) { Open(item, true); - e.Handled = true; } + else + { + item.MoveSelection(NavigationDirection.First, true); + } + + e.Handled = true; } else { diff --git a/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs b/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs index 9eedd17716..d22a67f389 100644 --- a/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs @@ -53,6 +53,19 @@ namespace Avalonia.Controls.UnitTests.Platform Assert.True(e.Handled); } + [Fact] + public void Down_Selects_First_Item_Of_Already_Opened_Submenu() + { + var target = new DefaultMenuInteractionHandler(false); + var item = Mock.Of(x => x.IsTopLevel == true && x.HasSubMenu == true && x.IsSubMenuOpen); + var e = new KeyEventArgs { Key = Key.Down, Source = item }; + + target.KeyDown(item, e); + + Mock.Get(item).Verify(x => x.MoveSelection(NavigationDirection.First, true)); + Assert.True(e.Handled); + } + [Fact] public void Right_Selects_Next_MenuItem() { From 20d50b348a41f06e9989999f7309901e442f54ea Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 12:07:13 +0200 Subject: [PATCH 12/67] Don't close and re-open menu if selection unchanged. --- .../Platform/DefaultMenuInteractionHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs index 150b4f0792..6e9ac537f1 100644 --- a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs +++ b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs @@ -252,7 +252,8 @@ namespace Avalonia.Controls.Platform // new menu. if (item.IsSubMenuOpen && item.Parent is IMenu && - item.Parent.SelectedItem is object) + item.Parent.SelectedItem is object && + item.Parent.SelectedItem != item) { item.Close(); Open(item.Parent.SelectedItem, true); From 898b0fa2857833e74736fadb033fd7d442ac227d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2022 14:00:17 +0200 Subject: [PATCH 13/67] Disable focus test on mac. Because I can't work out how to implement the extremely advanced use-case of finding out whether a control is focused there /s --- .../ElementExtensions.cs | 12 ++++++++++-- tests/Avalonia.IntegrationTests.Appium/MenuTests.cs | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs index 290811d2a1..3eb8646835 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs @@ -31,8 +31,16 @@ namespace Avalonia.IntegrationTests.Appium public static bool GetIsFocused(this AppiumWebElement element) { - var active = element.WrappedDriver.SwitchTo().ActiveElement() as AppiumWebElement; - return element.Id == active?.Id; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + var active = element.WrappedDriver.SwitchTo().ActiveElement() as AppiumWebElement; + return element.Id == active?.Id; + } + else + { + // https://stackoverflow.com/questions/71807788/check-if-element-is-focused-in-appium + throw new NotSupportedException("Couldn't work out how to check if an element is focused on mac."); + } } public static void SendClick(this AppiumWebElement element) diff --git a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs index 777ecd7e2b..98fb335061 100644 --- a/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs +++ b/tests/Avalonia.IntegrationTests.Appium/MenuTests.cs @@ -145,7 +145,7 @@ namespace Avalonia.IntegrationTests.Appium Assert.Equal("Ctrl+O", childMenuItem.GetAttribute("AcceleratorKey")); } - [Fact] + [PlatformFact(SkipOnOSX = true)] public void PointerOver_Does_Not_Steal_Focus() { // Issue #7906 From f100caf0114c129f82641787c5320ae55cf7ae43 Mon Sep 17 00:00:00 2001 From: Tako Date: Mon, 11 Apr 2022 18:07:32 +0300 Subject: [PATCH 14/67] Disabled items in ComboBox souldnt be selectable with arrow keys. --- src/Avalonia.Controls/ComboBox.cs | 39 +++++++++++++------------------ 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index a6dee5cfaa..582f90e472 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -453,42 +453,35 @@ namespace Avalonia.Controls private void SelectNext() { - int next = SelectedIndex + 1; - - if (next >= ItemCount) + if (ItemCount >= 1) { - if (WrapSelection == true) + if (SelectedIndex == -1) { - next = 0; + if (MoveSelection(NavigationDirection.First, WrapSelection) == false) + { + // MoveSelection works only with indexes starting from 0 + // so to make it search further than the first item we need to set SelectedIndex to 0. + SelectedIndex = 0; + var isSelectionMoved = MoveSelection(NavigationDirection.Next, WrapSelection); + if (isSelectionMoved == false) + { + SelectedIndex = -1; + } + } } else { - return; + MoveSelection(NavigationDirection.Next, WrapSelection); } } - - - - SelectedIndex = next; } private void SelectPrev() { - int prev = SelectedIndex - 1; - - if (prev < 0) + if (ItemCount >= 1) { - if (WrapSelection == true) - { - prev = ItemCount - 1; - } - else - { - return; - } + MoveSelection(NavigationDirection.Previous, WrapSelection); } - - SelectedIndex = prev; } } } From 09048579133523347bc36f0ae5040334a09694fa Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 11 Apr 2022 17:42:39 +0200 Subject: [PATCH 15/67] Fix ScrollGestureEndedEvent type. While working on #7964 I noticed that the event type in the field for `ScrollGestureEndedEvent` is incorrect: it's a `ScrollGestureEndedEventArgs` object that gets passed, not a `ScrollGestureEventArgs`. --- src/Avalonia.Input/Gestures.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Input/Gestures.cs b/src/Avalonia.Input/Gestures.cs index 86e6e96a71..4349fca7db 100644 --- a/src/Avalonia.Input/Gestures.cs +++ b/src/Avalonia.Input/Gestures.cs @@ -26,8 +26,8 @@ namespace Avalonia.Input RoutedEvent.Register( "ScrollGesture", RoutingStrategies.Bubble, typeof(Gestures)); - public static readonly RoutedEvent ScrollGestureEndedEvent = - RoutedEvent.Register( + public static readonly RoutedEvent ScrollGestureEndedEvent = + RoutedEvent.Register( "ScrollGestureEnded", RoutingStrategies.Bubble, typeof(Gestures)); public static readonly RoutedEvent PointerTouchPadGestureMagnifyEvent = From a6098716d34542759d4e9190c1b13dc4b915357b Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 12 Apr 2022 13:39:12 +0100 Subject: [PATCH 16/67] add win32 gpu blacklist. --- src/Windows/Avalonia.Win32/Win32GlManager.cs | 18 ++++++++++++++++-- src/Windows/Avalonia.Win32/Win32Platform.cs | 5 +++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Win32GlManager.cs b/src/Windows/Avalonia.Win32/Win32GlManager.cs index 0376a41f8c..2a3f4a3384 100644 --- a/src/Windows/Avalonia.Win32/Win32GlManager.cs +++ b/src/Windows/Avalonia.Win32/Win32GlManager.cs @@ -24,9 +24,23 @@ namespace Avalonia.Win32 { var egl = EglPlatformOpenGlInterface.TryCreate(() => new AngleWin32EglDisplay()); - if (egl != null && opts.UseWindowsUIComposition) + if (egl != null) { - WinUICompositorConnection.TryCreateAndRegister(egl, opts.CompositionBackdropCornerRadius); + if (opts.EglRendererBlacklist != null) + { + foreach (var item in opts.EglRendererBlacklist) + { + if (egl.PrimaryEglContext.GlInterface.Renderer.Contains(item)) + { + return null; + } + } + } + + if (opts.UseWindowsUIComposition) + { + WinUICompositorConnection.TryCreateAndRegister(egl, opts.CompositionBackdropCornerRadius); + } } return egl; diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs index 5cfbab40e4..d46f69bc61 100644 --- a/src/Windows/Avalonia.Win32/Win32Platform.cs +++ b/src/Windows/Avalonia.Win32/Win32Platform.cs @@ -56,6 +56,11 @@ namespace Avalonia /// GPU rendering will not be enabled if this is set to false. /// public bool? AllowEglInitialization { get; set; } + + public IList EglRendererBlacklist { get; set; } = new List + { + "Microsoft Basic Renderer" + }; /// /// Enables multitouch support. The default value is true. From 946a6cd9a099ad1ebeb0ed2d43b4ad03e56754c4 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 12 Apr 2022 16:33:32 +0200 Subject: [PATCH 17/67] Updated ApiCompatBaseline. --- src/Avalonia.Input/ApiCompatBaseline.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Input/ApiCompatBaseline.txt b/src/Avalonia.Input/ApiCompatBaseline.txt index 68b4d4754f..93c4cba5a6 100644 --- a/src/Avalonia.Input/ApiCompatBaseline.txt +++ b/src/Avalonia.Input/ApiCompatBaseline.txt @@ -1,5 +1,6 @@ Compat issues with assembly Avalonia.Input: MembersMustExist : Member 'public Avalonia.Platform.IPlatformHandle Avalonia.Input.Cursor.PlatformCursor.get()' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.ScrollGestureEndedEvent' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.DoubleTappedEvent' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.RightTappedEvent' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.TappedEvent' does not exist in the implementation but it does exist in the contract. @@ -26,4 +27,4 @@ MembersMustExist : Member 'public Avalonia.Input.TextInput.TextInputContentType EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Url' is (System.Int32)6 in the implementation but (System.Int32)4 in the contract. TypesMustExist : Type 'Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs' does not exist in the implementation but it does exist in the contract. TypesMustExist : Type 'Avalonia.Platform.IStandardCursorFactory' does not exist in the implementation but it does exist in the contract. -Total Issues: 27 +Total Issues: 28 From bdbc76353175d7300a63ab321faddf6f64c6d616 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 12:57:14 +0100 Subject: [PATCH 18/67] remove traces of xamarin and specify sdk --- src/iOS/Avalonia.iOS/Avalonia.iOS.csproj | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj index 4e134b7d4e..ffd60b27f6 100644 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj +++ b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj @@ -1,8 +1,6 @@ - - + - net6.0-ios - $(TargetFrameworks);xamarin.ios10 + net6.0-ios 10.0 true @@ -10,8 +8,7 @@ - - + From 26ff6134130ef0d325601ac1a55dff68dd353894 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 13:58:25 +0100 Subject: [PATCH 19/67] use 6.0.202 sdk. --- azure-pipelines.yml | 12 ++++++------ global.json | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 79456b117b..adc71f67a8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -36,9 +36,9 @@ jobs: version: 3.1.414 - task: UseDotNet@2 - displayName: 'Use .NET Core SDK 6.0.100' + displayName: 'Use .NET Core SDK 6.0.202' inputs: - version: 6.0.200 + version: 6.0.202 - task: CmdLine@2 displayName: 'Run Build' @@ -67,9 +67,9 @@ jobs: version: 3.1.414 - task: UseDotNet@2 - displayName: 'Use .NET Core SDK 6.0.100' + displayName: 'Use .NET Core SDK 6.0.202' inputs: - version: 6.0.200 + version: 6.0.202 - task: CmdLine@2 displayName: 'Install Mono 5.18' @@ -139,9 +139,9 @@ jobs: version: 3.1.414 - task: UseDotNet@2 - displayName: 'Use .NET Core SDK 6.0.100' + displayName: 'Use .NET Core SDK 6.0.202' inputs: - version: 6.0.200 + version: 6.0.202 - task: CmdLine@2 displayName: 'Install Workloads' diff --git a/global.json b/global.json index 30265268dc..a6792b05c7 100644 --- a/global.json +++ b/global.json @@ -1,11 +1,10 @@ { "sdk": { - "version": "6.0.200", + "version": "6.0.202", "rollForward": "latestFeature" }, "msbuild-sdks": { "Microsoft.Build.Traversal": "1.0.43", - "Xamarin.Legacy.Sdk": "0.1.2-alpha6", "MSBuild.Sdk.Extras": "3.0.22", "AggregatePackage.NuGet.Sdk" : "0.1.12" } From 8d14ee389bedd68bb69c92e002b77ebf0b48e3ba Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 14:37:32 +0100 Subject: [PATCH 20/67] update 3.1.4 sdk --- azure-pipelines.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index adc71f67a8..a16229893d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -31,9 +31,9 @@ jobs: vmImage: 'ubuntu-20.04' steps: - task: UseDotNet@2 - displayName: 'Use .NET Core SDK 3.1.414' + displayName: 'Use .NET Core SDK 3.1.418' inputs: - version: 3.1.414 + version: 3.1.418 - task: UseDotNet@2 displayName: 'Use .NET Core SDK 6.0.202' @@ -62,9 +62,9 @@ jobs: vmImage: 'macOS-10.15' steps: - task: UseDotNet@2 - displayName: 'Use .NET Core SDK 3.1.414' + displayName: 'Use .NET Core SDK 3.1.418' inputs: - version: 3.1.414 + version: 3.1.418 - task: UseDotNet@2 displayName: 'Use .NET Core SDK 6.0.202' @@ -134,9 +134,9 @@ jobs: SolutionDir: '$(Build.SourcesDirectory)' steps: - task: UseDotNet@2 - displayName: 'Use .NET Core SDK 3.1.414' + displayName: 'Use .NET Core SDK 3.1.418' inputs: - version: 3.1.414 + version: 3.1.418 - task: UseDotNet@2 displayName: 'Use .NET Core SDK 6.0.202' From 1785cf565b44e7e0417964315c1f9e2bb21b50a3 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 14:40:39 +0100 Subject: [PATCH 21/67] remove legacy android sdk. --- src/Android/Avalonia.Android/Avalonia.Android.csproj | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Android/Avalonia.Android/Avalonia.Android.csproj b/src/Android/Avalonia.Android/Avalonia.Android.csproj index ad27888f26..6688dde8f5 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -1,7 +1,6 @@ - + - net6.0-android - $(TargetFrameworks);monoandroid11.0 + net6.0-android 21 true true From a7d6448de81546661140b96e8234934be9639d29 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 14:43:32 +0100 Subject: [PATCH 22/67] ensure workloads are latest. --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a16229893d..ddad402e46 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -147,7 +147,7 @@ jobs: displayName: 'Install Workloads' inputs: script: | - dotnet workload install --no-cache --disable-parallel android ios --skip-manifest-update --source "https://api.nuget.org/v3/index.json" + dotnet workload install - task: CmdLine@2 displayName: 'Install Nuke' From f7893ba39a177a3b78f121d357b47ee0831010f6 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 14:46:09 +0100 Subject: [PATCH 23/67] fix workload install --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ddad402e46..edf3c3d819 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -147,7 +147,7 @@ jobs: displayName: 'Install Workloads' inputs: script: | - dotnet workload install + dotnet workload install android ios - task: CmdLine@2 displayName: 'Install Nuke' From aa3b0d4cde553bb83f53656f16142d918b347707 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 16:10:47 +0100 Subject: [PATCH 24/67] remove hack --- src/iOS/Avalonia.iOS/Avalonia.iOS.csproj | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj index ffd60b27f6..ea3a79941d 100644 --- a/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj +++ b/src/iOS/Avalonia.iOS/Avalonia.iOS.csproj @@ -9,13 +9,5 @@ - - - - <_BuiltProjectOutputGroupOutputIntermediate Remove="$(OutDir)$(_DeploymentTargetApplicationManifestFileName)" /> - - - - From cab213cce204d27994725c93427c2e675eb667d7 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 13 Apr 2022 19:46:47 +0100 Subject: [PATCH 25/67] use eap release of skiasharp compatible with sdk 6.0.201/202+ --- NuGet.Config | 1 + build/HarfBuzzSharp.props | 6 +++--- build/SkiaSharp.props | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/NuGet.Config b/NuGet.Config index 7a1f28bea7..7d2bd8abd2 100644 --- a/NuGet.Config +++ b/NuGet.Config @@ -5,5 +5,6 @@ + diff --git a/build/HarfBuzzSharp.props b/build/HarfBuzzSharp.props index 6dd6cccb53..e10de93530 100644 --- a/build/HarfBuzzSharp.props +++ b/build/HarfBuzzSharp.props @@ -1,7 +1,7 @@  - - - + + + diff --git a/build/SkiaSharp.props b/build/SkiaSharp.props index 60bebaad40..a217a8272d 100644 --- a/build/SkiaSharp.props +++ b/build/SkiaSharp.props @@ -1,7 +1,7 @@  - - - + + + From b057a4df203c93034d7670a0cf302f03a8a1ceac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20=C5=A0olt=C3=A9s?= Date: Wed, 13 Apr 2022 22:44:39 +0200 Subject: [PATCH 26/67] Fix driver name --- src/Windows/Avalonia.Win32/Win32Platform.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs index d46f69bc61..dc5e5324c4 100644 --- a/src/Windows/Avalonia.Win32/Win32Platform.cs +++ b/src/Windows/Avalonia.Win32/Win32Platform.cs @@ -59,7 +59,7 @@ namespace Avalonia public IList EglRendererBlacklist { get; set; } = new List { - "Microsoft Basic Renderer" + "Microsoft Basic Render" }; /// From 8dd66b20049e406a50b53943cad3be8edec87d0e Mon Sep 17 00:00:00 2001 From: David Gordon Date: Wed, 13 Apr 2022 21:11:30 -0400 Subject: [PATCH 27/67] refactor DiscardDayTime method --- src/Avalonia.Controls/Calendar/DateTimeHelper.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/Calendar/DateTimeHelper.cs b/src/Avalonia.Controls/Calendar/DateTimeHelper.cs index eb90f6c399..7a5c74a51b 100644 --- a/src/Avalonia.Controls/Calendar/DateTimeHelper.cs +++ b/src/Avalonia.Controls/Calendar/DateTimeHelper.cs @@ -68,10 +68,7 @@ namespace Avalonia.Controls public static DateTime DiscardDayTime(DateTime d) { - int year = d.Year; - int month = d.Month; - DateTime newD = new DateTime(year, month, 1, 0, 0, 0); - return newD; + return new DateTime(d.Year, d.Month, 1, 0, 0, 0); } [return: NotNullIfNotNull("d")] From d083acc20d9fdda5cb022d1038b5ad4d97e5e656 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 31 Dec 2021 02:26:09 -0500 Subject: [PATCH 28/67] Implement support of NthChild in DataGrid --- .../ControlCatalog/Pages/DataGridPage.xaml | 19 ++++++++- src/Avalonia.Controls.DataGrid/DataGrid.cs | 10 ----- .../DataGridColumn.cs | 2 +- .../DataGridColumnCollection.cs | 36 +++++++++-------- .../DataGridColumns.cs | 9 ++--- .../DataGridDataConnection.cs | 36 +++++++++-------- src/Avalonia.Controls.DataGrid/DataGridRow.cs | 39 +------------------ .../DataGridRows.cs | 29 ++++++++++++-- .../Primitives/DataGridCellsPresenter.cs | 39 +++++++++++++++++-- .../DataGridColumnHeadersPresenter.cs | 36 ++++++++++++++++- .../Primitives/DataGridRowsPresenter.cs | 20 +++++++++- .../Themes/Default.xaml | 12 +++++- .../Themes/Fluent.xaml | 8 ++++ src/Avalonia.Controls/ItemsControl.cs | 2 +- src/Avalonia.Controls/Panel.cs | 2 +- .../Presenters/ItemsPresenterBase.cs | 2 +- .../LogicalTree/ChildIndexChangedEventArgs.cs | 2 + 17 files changed, 199 insertions(+), 104 deletions(-) diff --git a/samples/ControlCatalog/Pages/DataGridPage.xaml b/samples/ControlCatalog/Pages/DataGridPage.xaml index f7e3cf2441..31b4039d33 100644 --- a/samples/ControlCatalog/Pages/DataGridPage.xaml +++ b/samples/ControlCatalog/Pages/DataGridPage.xaml @@ -13,9 +13,22 @@ + + + + @@ -31,7 +44,9 @@ - + diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs index 9dfb34517b..9b67c9b096 100644 --- a/src/Avalonia.Controls.DataGrid/DataGrid.cs +++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs @@ -669,8 +669,6 @@ namespace Avalonia.Controls ItemsProperty.Changed.AddClassHandler((x, e) => x.OnItemsPropertyChanged(e)); CanUserResizeColumnsProperty.Changed.AddClassHandler((x, e) => x.OnCanUserResizeColumnsChanged(e)); ColumnWidthProperty.Changed.AddClassHandler((x, e) => x.OnColumnWidthChanged(e)); - RowBackgroundProperty.Changed.AddClassHandler((x, e) => x.OnRowBackgroundChanged(e)); - AlternatingRowBackgroundProperty.Changed.AddClassHandler((x, e) => x.OnRowBackgroundChanged(e)); FrozenColumnCountProperty.Changed.AddClassHandler((x, e) => x.OnFrozenColumnCountChanged(e)); GridLinesVisibilityProperty.Changed.AddClassHandler((x, e) => x.OnGridLinesVisibilityChanged(e)); HeadersVisibilityProperty.Changed.AddClassHandler((x, e) => x.OnHeadersVisibilityChanged(e)); @@ -1144,14 +1142,6 @@ namespace Avalonia.Controls InvalidateCellsArrange(); } - private void OnRowBackgroundChanged(AvaloniaPropertyChangedEventArgs e) - { - foreach (DataGridRow row in GetAllRows()) - { - row.EnsureBackground(); - } - } - private void OnColumnWidthChanged(AvaloniaPropertyChangedEventArgs e) { var value = (DataGridLength)e.NewValue; diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs index a77b482436..4a7137dcda 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridColumn.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs @@ -199,7 +199,7 @@ namespace Avalonia.Controls if (change.Property == IsVisibleProperty) { OwningGrid?.OnColumnVisibleStateChanging(this); - var isVisible = (change as AvaloniaPropertyChangedEventArgs).NewValue.Value; + var isVisible = change.NewValue.GetValueOrDefault(); if (_headerCell != null) { diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs index 922b1d9c08..e7f9a9a6c4 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs @@ -12,7 +12,8 @@ namespace Avalonia.Controls { internal class DataGridColumnCollection : ObservableCollection { - private DataGrid _owningGrid; + private readonly Dictionary _columnsMap = new Dictionary(); + private readonly DataGrid _owningGrid; public DataGridColumnCollection(DataGrid owningGrid) { @@ -124,18 +125,8 @@ namespace Avalonia.Controls internal int VisibleColumnCount { - get - { - int visibleColumnCount = 0; - for (int columnIndex = 0; columnIndex < ItemsInternal.Count; columnIndex++) - { - if (ItemsInternal[columnIndex].IsVisible) - { - visibleColumnCount++; - } - } - return visibleColumnCount; - } + get; + private set; } internal double VisibleEdgedColumnsWidth @@ -287,20 +278,31 @@ namespace Avalonia.Controls { VisibleStarColumnCount = 0; VisibleEdgedColumnsWidth = 0; + VisibleColumnCount = 0; + _columnsMap.Clear(); + for (int columnIndex = 0; columnIndex < ItemsInternal.Count; columnIndex++) { - if (ItemsInternal[columnIndex].IsVisible) + var item = ItemsInternal[columnIndex]; + _columnsMap[columnIndex] = item.DisplayIndex; + if (item.IsVisible) { - ItemsInternal[columnIndex].EnsureWidth(); - if (ItemsInternal[columnIndex].Width.IsStar) + VisibleColumnCount++; + item.EnsureWidth(); + if (item.Width.IsStar) { VisibleStarColumnCount++; } - VisibleEdgedColumnsWidth += ItemsInternal[columnIndex].ActualWidth; + VisibleEdgedColumnsWidth += item.ActualWidth; } } } + internal int GetColumnDisplayIndex(int columnIndex) + { + return _columnsMap.TryGetValue(columnIndex, out var displayIndex) ? displayIndex : -1; + } + internal DataGridColumn GetColumnAtDisplayIndex(int displayIndex) { if (displayIndex < 0 || displayIndex >= ItemsInternal.Count || displayIndex >= DisplayIndexMap.Count) diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumns.cs b/src/Avalonia.Controls.DataGrid/DataGridColumns.cs index a4577ee952..ea8a121d29 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridColumns.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridColumns.cs @@ -444,12 +444,11 @@ namespace Avalonia.Controls // We need to explicitly collapse the cells of the invisible column because layout only goes through // visible ones - if (!updatedColumn.IsVisible) + ColumnHeaders.InvalidateChildIndex(); + foreach (var row in GetAllRows()) { - foreach (DataGridRow row in GetAllRows()) - { - row.Cells[updatedColumn.Index].IsVisible = false; - } + row.Cells[updatedColumn.Index].IsVisible = updatedColumn.IsVisible; + row.InvalidateCellsIndex(); } } diff --git a/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs b/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs index fade597ca1..a3095ad214 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs @@ -77,7 +77,7 @@ namespace Avalonia.Controls private set; } - public int Count => GetCount(true); + public int Count => TryGetCount(true, false, out var count) ? count : 0; public bool DataIsPrimitive { @@ -193,22 +193,25 @@ namespace Avalonia.Controls } } - internal bool Any() - { - return GetCount(false) > 0; - } - /// When "allowSlow" is false, method will not use Linq.Count() method and will return 0 or 1 instead. - private int GetCount(bool allowSlow) + /// If "getAny" is true, method can use Linq.Any() method to speedup. + internal bool TryGetCount(bool allowSlow, bool getAny, out int count) { - return DataSource switch + bool result; + (result, count) = DataSource switch { - ICollection collection => collection.Count, - DataGridCollectionView cv => cv.Count, - IEnumerable enumerable when allowSlow => enumerable.Cast().Count(), - IEnumerable enumerable when !allowSlow => enumerable.Cast().Any() ? 1 : 0, - _ => 0 + ICollection collection => (true, collection.Count), + DataGridCollectionView cv => (true, cv.Count), + IEnumerable enumerable when allowSlow && !getAny => (true, enumerable.Cast().Count()), + IEnumerable enumerable when getAny => (true, enumerable.Cast().Any() ? 1 : 0), + _ => (false, 0) }; + return result; + } + + internal bool Any() + { + return TryGetCount(false, true, out var count) && count > 0; } /// @@ -383,7 +386,7 @@ namespace Avalonia.Controls List propertyNames = TypeHelper.SplitPropertyPath(propertyName); for (int i = 0; i < propertyNames.Count; i++) { - propertyInfo = propertyType.GetPropertyOrIndexer(propertyNames[i], out object[] index); + propertyInfo = propertyType.GetPropertyOrIndexer(propertyNames[i], out _); if (propertyInfo == null || propertyType.GetIsReadOnly() || propertyInfo.GetIsReadOnly()) { // Either the data type is read-only, the property doesn't exist, or it does exist but is read-only @@ -391,11 +394,10 @@ namespace Avalonia.Controls } // Check if EditableAttribute is defined on the property and if it indicates uneditable - object[] attributes = propertyInfo.GetCustomAttributes(typeof(EditableAttribute), true); + var attributes = propertyInfo.GetCustomAttributes(typeof(EditableAttribute), true); if (attributes != null && attributes.Length > 0) { - EditableAttribute editableAttribute = attributes[0] as EditableAttribute; - Debug.Assert(editableAttribute != null); + var editableAttribute = (EditableAttribute)attributes[0]; if (!editableAttribute.AllowEdit) { return true; diff --git a/src/Avalonia.Controls.DataGrid/DataGridRow.cs b/src/Avalonia.Controls.DataGrid/DataGridRow.cs index 1efce7c0b8..a6faec752d 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridRow.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridRow.cs @@ -543,7 +543,6 @@ namespace Avalonia.Controls RootElement = e.NameScope.Find(DATAGRIDROW_elementRoot); if (RootElement != null) { - EnsureBackground(); UpdatePseudoClasses(); } @@ -668,43 +667,9 @@ namespace Avalonia.Controls Slot = -1; } - // Make sure the row's background is set to its correct value. It could be explicity set or inherit - // DataGrid.RowBackground or DataGrid.AlternatingRowBackground - internal void EnsureBackground() + internal void InvalidateCellsIndex() { - // Inherit the DataGrid's RowBackground properties only if this row doesn't explicity have a background set - if (RootElement != null && OwningGrid != null) - { - IBrush newBackground = null; - if (Background == null) - { - if (Index % 2 == 0 || OwningGrid.AlternatingRowBackground == null) - { - // Use OwningGrid.RowBackground if the index is even or if the OwningGrid.AlternatingRowBackground is null - if (OwningGrid.RowBackground != null) - { - newBackground = OwningGrid.RowBackground; - } - } - else - { - // Alternate row - if (OwningGrid.AlternatingRowBackground != null) - { - newBackground = OwningGrid.AlternatingRowBackground; - } - } - } - else - { - newBackground = Background; - } - - if (RootElement.Background != newBackground) - { - RootElement.Background = newBackground; - } - } + _cellsElement?.InvalidateChildIndex(); } internal void EnsureFillerVisibility() diff --git a/src/Avalonia.Controls.DataGrid/DataGridRows.cs b/src/Avalonia.Controls.DataGrid/DataGridRows.cs index 1d5c899993..52b67b8921 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridRows.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridRows.cs @@ -5,6 +5,7 @@ using Avalonia.Collections; using Avalonia.Controls.Utils; +using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Utilities; using System; @@ -16,7 +17,7 @@ using System.Linq; namespace Avalonia.Controls { - public partial class DataGrid + public partial class DataGrid : IChildIndexProvider { internal bool AreRowBottomGridLinesRequired @@ -123,6 +124,26 @@ namespace Avalonia.Controls } } + internal EventHandler _childIndexChanged; + + event EventHandler IChildIndexProvider.ChildIndexChanged + { + add => _childIndexChanged += value; + remove => _childIndexChanged -= value; + } + + int IChildIndexProvider.GetChildIndex(ILogical child) + { + return child is DataGridRow row + ? row.Index + : throw new InvalidOperationException("Invalid DataGrid child"); + } + + bool IChildIndexProvider.TryGetTotalCount(out int count) + { + return DataConnection.TryGetCount(false, true, out count); + } + /// /// Clears the entire selection. Displayed rows are deselected explicitly to visualize /// potential transition effects @@ -811,7 +832,7 @@ namespace Avalonia.Controls if (row.Slot > slotDeleted) { CorrectRowAfterDeletion(row, wasRow); - row.EnsureBackground(); + _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); } } @@ -867,7 +888,7 @@ namespace Avalonia.Controls if (row.Slot >= slotInserted) { DataGrid.CorrectRowAfterInsertion(row, rowInserted); - row.EnsureBackground(); + _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); } } @@ -1485,8 +1506,8 @@ namespace Avalonia.Controls // If the row has been recycled, reapply the BackgroundBrush if (row.IsRecycled) { - row.EnsureBackground(); row.ApplyCellsState(); + _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); } else if (row == EditingRow) { diff --git a/src/Avalonia.Controls.DataGrid/Primitives/DataGridCellsPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridCellsPresenter.cs index c5fe9f0cb2..e07c933039 100644 --- a/src/Avalonia.Controls.DataGrid/Primitives/DataGridCellsPresenter.cs +++ b/src/Avalonia.Controls.DataGrid/Primitives/DataGridCellsPresenter.cs @@ -3,12 +3,13 @@ // Please see http://go.microsoft.com/fwlink/?LinkID=131993 for details. // All other rights reserved. +using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Utilities; using System; +using System.Collections.Generic; +using System.Collections.Specialized; using System.Diagnostics; -using Avalonia.Controls; -using Avalonia.Controls.Utils; namespace Avalonia.Controls.Primitives { @@ -16,9 +17,10 @@ namespace Avalonia.Controls.Primitives /// Used within the template of a /// to specify the location in the control's visual tree where the cells are to be added. /// - public sealed class DataGridCellsPresenter : Panel + public sealed class DataGridCellsPresenter : Panel, IChildIndexProvider { private double _fillerLeftEdge; + private EventHandler _childIndexChanged; // The desired height needs to be cached due to column virtualization; otherwise, the cells // would grow and shrink as the DataGrid scrolls horizontally @@ -42,6 +44,25 @@ namespace Avalonia.Controls.Primitives set; } + event EventHandler IChildIndexProvider.ChildIndexChanged + { + add => _childIndexChanged += value; + remove => _childIndexChanged -= value; + } + + int IChildIndexProvider.GetChildIndex(ILogical child) + { + return child is DataGridCell cell + ? OwningGrid.ColumnsInternal.GetColumnDisplayIndex(cell.ColumnIndex) + : throw new InvalidOperationException("Invalid cell type"); + } + + bool IChildIndexProvider.TryGetTotalCount(out int count) + { + count = OwningGrid.ColumnsInternal.VisibleColumnCount; + return true; + } + /// /// Arranges the content of the . /// @@ -120,6 +141,13 @@ namespace Avalonia.Controls.Primitives } } + protected override void ChildrenChanged(object sender, NotifyCollectionChangedEventArgs e) + { + base.ChildrenChanged(sender, e); + + InvalidateChildIndex(); + } + private static void EnsureCellDisplay(DataGridCell cell, bool displayColumn) { if (cell.IsCurrent) @@ -304,6 +332,11 @@ namespace Avalonia.Controls.Primitives DesiredHeight = 0; } + internal void InvalidateChildIndex() + { + _childIndexChanged?.Invoke(this, ChildIndexChangedEventArgs.Empty); + } + private bool ShouldDisplayCell(DataGridColumn column, double frozenLeftEdge, double scrollingLeftEdge) { if (!column.IsVisible) diff --git a/src/Avalonia.Controls.DataGrid/Primitives/DataGridColumnHeadersPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridColumnHeadersPresenter.cs index 4eed119240..108dc8ded7 100644 --- a/src/Avalonia.Controls.DataGrid/Primitives/DataGridColumnHeadersPresenter.cs +++ b/src/Avalonia.Controls.DataGrid/Primitives/DataGridColumnHeadersPresenter.cs @@ -3,8 +3,10 @@ // Please see http://go.microsoft.com/fwlink/?LinkID=131993 for details. // All other rights reserved. +using Avalonia.LogicalTree; using Avalonia.Media; using System; +using System.Collections.Specialized; using System.Diagnostics; namespace Avalonia.Controls.Primitives @@ -13,10 +15,11 @@ namespace Avalonia.Controls.Primitives /// Used within the template of a to specify the /// location in the control's visual tree where the column headers are to be added. /// - public sealed class DataGridColumnHeadersPresenter : Panel + public sealed class DataGridColumnHeadersPresenter : Panel, IChildIndexProvider { private Control _dragIndicator; private IControl _dropLocationIndicator; + private EventHandler _childIndexChanged; /// /// Tracks which column is currently being dragged. @@ -104,6 +107,25 @@ namespace Avalonia.Controls.Primitives set; } + event EventHandler IChildIndexProvider.ChildIndexChanged + { + add => _childIndexChanged += value; + remove => _childIndexChanged -= value; + } + + int IChildIndexProvider.GetChildIndex(ILogical child) + { + return child is DataGridColumnHeader header + ? OwningGrid.ColumnsInternal.GetColumnDisplayIndex(header.ColumnIndex) + : throw new InvalidOperationException("Invalid cell type"); + } + + bool IChildIndexProvider.TryGetTotalCount(out int count) + { + count = OwningGrid.ColumnsInternal.VisibleColumnCount; + return true; + } + /// /// Arranges the content of the . /// @@ -391,5 +413,17 @@ namespace Avalonia.Controls.Primitives OwningGrid.ColumnsInternal.EnsureVisibleEdgedColumnsWidth(); return new Size(OwningGrid.ColumnsInternal.VisibleEdgedColumnsWidth, height); } + + protected override void ChildrenChanged(object sender, NotifyCollectionChangedEventArgs e) + { + base.ChildrenChanged(sender, e); + + InvalidateChildIndex(); + } + + internal void InvalidateChildIndex() + { + _childIndexChanged?.Invoke(this, ChildIndexChangedEventArgs.Empty); + } } } diff --git a/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs index 308ebc69d4..0b9bd0a564 100644 --- a/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs +++ b/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs @@ -7,8 +7,8 @@ using System; using System.Diagnostics; using Avalonia.Input; -using Avalonia.Input.GestureRecognizers; using Avalonia.Layout; +using Avalonia.LogicalTree; using Avalonia.Media; namespace Avalonia.Controls.Primitives @@ -17,7 +17,7 @@ namespace Avalonia.Controls.Primitives /// Used within the template of a to specify the /// location in the control's visual tree where the rows are to be added. /// - public sealed class DataGridRowsPresenter : Panel + public sealed class DataGridRowsPresenter : Panel, IChildIndexProvider { public DataGridRowsPresenter() { @@ -44,6 +44,22 @@ namespace Avalonia.Controls.Primitives } } + event EventHandler IChildIndexProvider.ChildIndexChanged + { + add => OwningGrid._childIndexChanged += value; + remove => OwningGrid._childIndexChanged -= value; + } + + bool IChildIndexProvider.TryGetTotalCount(out int count) + { + return ((IChildIndexProvider)OwningGrid).TryGetTotalCount(out count); + } + + int IChildIndexProvider.GetChildIndex(ILogical child) + { + return ((IChildIndexProvider)OwningGrid).GetChildIndex(child); + } + /// /// Arranges the content of the . /// diff --git a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml index 8d4e327f3e..05c3d2dd19 100644 --- a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml +++ b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml @@ -103,8 +103,9 @@ + Background="{TemplateBinding Background}" + RowDefinitions="*,Auto,Auto" + ColumnDefinitions="Auto,*"> @@ -118,6 +119,13 @@ + + + + + + diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index 0cd72dc91c..114aa9727d 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/src/Avalonia.Controls/ItemsControl.cs @@ -166,7 +166,7 @@ namespace Avalonia.Controls if (Presenter is IChildIndexProvider innerProvider) { innerProvider.ChildIndexChanged += PresenterChildIndexChanged; - _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs()); + _childIndexChanged?.Invoke(this, ChildIndexChangedEventArgs.Empty); } } diff --git a/src/Avalonia.Controls/Panel.cs b/src/Avalonia.Controls/Panel.cs index 482a7fab84..2230b4b0d2 100644 --- a/src/Avalonia.Controls/Panel.cs +++ b/src/Avalonia.Controls/Panel.cs @@ -147,7 +147,7 @@ namespace Avalonia.Controls throw new NotSupportedException(); } - _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs()); + _childIndexChanged?.Invoke(this, ChildIndexChangedEventArgs.Empty); InvalidateMeasureOnChildrenChanged(); } diff --git a/src/Avalonia.Controls/Presenters/ItemsPresenterBase.cs b/src/Avalonia.Controls/Presenters/ItemsPresenterBase.cs index f938c8d437..2821fa8cf0 100644 --- a/src/Avalonia.Controls/Presenters/ItemsPresenterBase.cs +++ b/src/Avalonia.Controls/Presenters/ItemsPresenterBase.cs @@ -158,7 +158,7 @@ namespace Avalonia.Controls.Presenters { ItemsChanged(e); - _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs()); + _childIndexChanged?.Invoke(this, ChildIndexChangedEventArgs.Empty); } } diff --git a/src/Avalonia.Styling/LogicalTree/ChildIndexChangedEventArgs.cs b/src/Avalonia.Styling/LogicalTree/ChildIndexChangedEventArgs.cs index de41f5292c..afc6c1f5fc 100644 --- a/src/Avalonia.Styling/LogicalTree/ChildIndexChangedEventArgs.cs +++ b/src/Avalonia.Styling/LogicalTree/ChildIndexChangedEventArgs.cs @@ -8,6 +8,8 @@ namespace Avalonia.LogicalTree /// public class ChildIndexChangedEventArgs : EventArgs { + public static new ChildIndexChangedEventArgs Empty { get; } = new ChildIndexChangedEventArgs(); + public ChildIndexChangedEventArgs() { } From f7e8b7658fbc68e127f7dc508e386459bf763637 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 31 Dec 2021 03:43:23 -0500 Subject: [PATCH 29/67] Do not hardcode Margin and VerticalAlignment on data grid text column --- src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs | 5 +---- src/Avalonia.Controls.DataGrid/Themes/Default.xaml | 4 ++++ src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs index 863910c226..68736dee7f 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs @@ -19,8 +19,6 @@ namespace Avalonia.Controls /// public class DataGridTextColumn : DataGridBoundColumn { - private const string DATAGRID_TextColumnCellTextBlockMarginKey = "DataGridTextColumnCellTextBlockMargin"; - /// /// Initializes a new instance of the class. /// @@ -178,8 +176,7 @@ namespace Avalonia.Controls { TextBlock textBlockElement = new TextBlock { - [!Layoutable.MarginProperty] = new DynamicResourceExtension(DATAGRID_TextColumnCellTextBlockMarginKey), - VerticalAlignment = VerticalAlignment.Center + Name = "CellTextBlock" }; SyncProperties(textBlockElement); diff --git a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml index 05c3d2dd19..b066702212 100644 --- a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml +++ b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml @@ -29,6 +29,10 @@ + + + From 5019ee09853f91b695563b3ea330dcc0f04673a4 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 31 Dec 2021 03:46:59 -0500 Subject: [PATCH 30/67] Add missing support of Border properties to the DataGrid templates --- .../Themes/Default.xaml | 135 ++++++---- .../Themes/Fluent.xaml | 255 +++++++++--------- 2 files changed, 213 insertions(+), 177 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml index b066702212..0d1fe43eb6 100644 --- a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml +++ b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml @@ -12,20 +12,25 @@ - - - - - + + + + + + + @@ -44,35 +49,40 @@ - - - - - - + + + + + + + - + - + - + + @@ -106,19 +116,24 @@ @@ -192,12 +207,18 @@ + ColumnDefinitions="Auto,Auto,Auto,Auto" + RowDefinitions="Auto,*,Auto"> - + @@ -250,9 +271,11 @@ - + CornerRadius="{TemplateBinding CornerRadius}"> diff --git a/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml b/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml index 6a6ab283ab..8243d9c22d 100644 --- a/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml +++ b/src/Avalonia.Controls.DataGrid/Themes/Fluent.xaml @@ -93,54 +93,57 @@ - + + - - - - - + + + + - + - + - - + + + @@ -185,57 +188,58 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + Fill="{TemplateBinding SeparatorBrush}" + IsVisible="{TemplateBinding AreSeparatorsVisible}" /> + + + + + - + @@ -276,35 +280,40 @@ - - - - - - - - + + + + + + + - + DataGridFrozenGrid.IsFrozen="True" /> + + - + + @@ -315,7 +324,7 @@ - + @@ -443,9 +452,12 @@ Width="12" Height="12" Margin="12,0,0,0" + BorderBrush="{TemplateBinding BorderBrush}" + BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" - Foreground="{TemplateBinding Foreground}" - Focusable="False" /> + CornerRadius="{TemplateBinding CornerRadius}" + Focusable="False" + Foreground="{TemplateBinding Foreground}" /> - - + CornerRadius="{TemplateBinding CornerRadius}"> + From af9f27677d0289b5c45f366f2594f393d2782eb1 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 31 Dec 2021 04:21:11 -0500 Subject: [PATCH 31/67] Fix NRE in DataGrid --- .../DataGridColumns.cs | 2 +- .../DataGridRows.cs | 28 +++---------------- .../Primitives/DataGridRowsPresenter.cs | 19 +++++++++---- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumns.cs b/src/Avalonia.Controls.DataGrid/DataGridColumns.cs index ea8a121d29..52f0ad7537 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridColumns.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridColumns.cs @@ -444,7 +444,7 @@ namespace Avalonia.Controls // We need to explicitly collapse the cells of the invisible column because layout only goes through // visible ones - ColumnHeaders.InvalidateChildIndex(); + ColumnHeaders?.InvalidateChildIndex(); foreach (var row in GetAllRows()) { row.Cells[updatedColumn.Index].IsVisible = updatedColumn.IsVisible; diff --git a/src/Avalonia.Controls.DataGrid/DataGridRows.cs b/src/Avalonia.Controls.DataGrid/DataGridRows.cs index 52b67b8921..f3afe2c42d 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridRows.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridRows.cs @@ -17,7 +17,7 @@ using System.Linq; namespace Avalonia.Controls { - public partial class DataGrid : IChildIndexProvider + public partial class DataGrid { internal bool AreRowBottomGridLinesRequired @@ -124,26 +124,6 @@ namespace Avalonia.Controls } } - internal EventHandler _childIndexChanged; - - event EventHandler IChildIndexProvider.ChildIndexChanged - { - add => _childIndexChanged += value; - remove => _childIndexChanged -= value; - } - - int IChildIndexProvider.GetChildIndex(ILogical child) - { - return child is DataGridRow row - ? row.Index - : throw new InvalidOperationException("Invalid DataGrid child"); - } - - bool IChildIndexProvider.TryGetTotalCount(out int count) - { - return DataConnection.TryGetCount(false, true, out count); - } - /// /// Clears the entire selection. Displayed rows are deselected explicitly to visualize /// potential transition effects @@ -832,7 +812,7 @@ namespace Avalonia.Controls if (row.Slot > slotDeleted) { CorrectRowAfterDeletion(row, wasRow); - _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); + _rowsPresenter?.InvalidateChildIndex(row); } } @@ -888,7 +868,7 @@ namespace Avalonia.Controls if (row.Slot >= slotInserted) { DataGrid.CorrectRowAfterInsertion(row, rowInserted); - _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); + _rowsPresenter?.InvalidateChildIndex(row); } } @@ -1507,7 +1487,7 @@ namespace Avalonia.Controls if (row.IsRecycled) { row.ApplyCellsState(); - _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); + _rowsPresenter?.InvalidateChildIndex(row); } else if (row == EditingRow) { diff --git a/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs index 0b9bd0a564..5d82689eff 100644 --- a/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs +++ b/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs @@ -19,6 +19,8 @@ namespace Avalonia.Controls.Primitives /// public sealed class DataGridRowsPresenter : Panel, IChildIndexProvider { + private EventHandler _childIndexChanged; + public DataGridRowsPresenter() { AddHandler(Gestures.ScrollGestureEvent, OnScrollGesture); @@ -46,18 +48,25 @@ namespace Avalonia.Controls.Primitives event EventHandler IChildIndexProvider.ChildIndexChanged { - add => OwningGrid._childIndexChanged += value; - remove => OwningGrid._childIndexChanged -= value; + add => _childIndexChanged += value; + remove => _childIndexChanged -= value; + } + + int IChildIndexProvider.GetChildIndex(ILogical child) + { + return child is DataGridRow row + ? row.Index + : throw new InvalidOperationException("Invalid DataGrid child"); } bool IChildIndexProvider.TryGetTotalCount(out int count) { - return ((IChildIndexProvider)OwningGrid).TryGetTotalCount(out count); + return OwningGrid.DataConnection.TryGetCount(false, true, out count); } - int IChildIndexProvider.GetChildIndex(ILogical child) + internal void InvalidateChildIndex(DataGridRow row) { - return ((IChildIndexProvider)OwningGrid).GetChildIndex(child); + _childIndexChanged?.Invoke(this, new ChildIndexChangedEventArgs(row)); } /// From 64cce62e7b34f2b843d3258de640858d6bfe94f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20Komosi=C5=84ski?= Date: Tue, 12 Apr 2022 23:09:46 +0200 Subject: [PATCH 32/67] Benchmark for finding resources. --- .../Styling/ResourceBenchmarks.cs | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs diff --git a/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs b/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs new file mode 100644 index 0000000000..1445fcba05 --- /dev/null +++ b/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs @@ -0,0 +1,91 @@ +using System; +using Avalonia.Controls; +using Avalonia.Platform; +using Avalonia.PlatformSupport; +using Avalonia.Styling; +using Avalonia.Themes.Fluent; +using Avalonia.UnitTests; +using BenchmarkDotNet.Attributes; +using Moq; + +namespace Avalonia.Benchmarks.Styling +{ + [MemoryDiagnoser] + public class ResourceBenchmarks : IDisposable + { + private readonly Control _searchStart; + private readonly IDisposable _app; + + private static IDisposable CreateApp() + { + var services = new TestServices( + assetLoader: new AssetLoader(), + globalClock: new MockGlobalClock(), + platform: new AppBuilder().RuntimePlatform, + renderInterface: new MockPlatformRenderInterface(), + standardCursorFactory: Mock.Of(), + styler: new Styler(), + theme: () => LoadTheme(), + threadingInterface: new NullThreadingPlatform(), + fontManagerImpl: new MockFontManagerImpl(), + textShaperImpl: new MockTextShaperImpl(), + windowingPlatform: new MockWindowingPlatform()); + + return UnitTestApplication.Start(services); + } + + private static Styles LoadTheme() + { + AssetLoader.RegisterResUriParsers(); + + var hostStyle = new Style(); + + hostStyle.Resources.Add("test", null); + + return new Styles + { + hostStyle, + new FluentTheme(new Uri("avares://Avalonia.Benchmarks")) + }; + } + + public void Dispose() + { + _app.Dispose(); + } + + public ResourceBenchmarks() + { + _searchStart = new Button(); + + _app = CreateApp(); + + Decorator root = new TestRoot(true, null) + { + Renderer = new NullRenderer() + }; + + var current = root; + + for (int i = 0; i < 10; i++) + { + var child = new Decorator(); + + current.Child = child; + + current = child; + } + + current.Child = _searchStart; + } + + [Benchmark(Baseline = true)] + public void FindResource() + { + for (int i = 0; i < 100; ++i) + { + _searchStart.FindResource("test"); + } + } + } +} From 55e681a326673f680f8324fa1bb365be4305f86e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20Komosi=C5=84ski?= Date: Tue, 12 Apr 2022 23:15:55 +0200 Subject: [PATCH 33/67] Add more benchmark cases. --- .../Styling/ResourceBenchmarks.cs | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs b/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs index 1445fcba05..babfaef6ab 100644 --- a/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs +++ b/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs @@ -38,14 +38,17 @@ namespace Avalonia.Benchmarks.Styling { AssetLoader.RegisterResUriParsers(); - var hostStyle = new Style(); + var preHost = new Style(); + preHost.Resources.Add("preTheme", null); - hostStyle.Resources.Add("test", null); + var postHost = new Style(); + postHost.Resources.Add("postTheme", null); return new Styles { - hostStyle, - new FluentTheme(new Uri("avares://Avalonia.Benchmarks")) + preHost, + new FluentTheme(new Uri("avares://Avalonia.Benchmarks")), + postHost }; } @@ -79,12 +82,30 @@ namespace Avalonia.Benchmarks.Styling current.Child = _searchStart; } - [Benchmark(Baseline = true)] - public void FindResource() + [Benchmark] + public void FindPreResource() { for (int i = 0; i < 100; ++i) { - _searchStart.FindResource("test"); + _searchStart.FindResource("preTheme"); + } + } + + [Benchmark] + public void FindPostResource() + { + for (int i = 0; i < 100; ++i) + { + _searchStart.FindResource("postTheme"); + } + } + + [Benchmark] + public void FindNotExistingResource() + { + for (int i = 0; i < 100; ++i) + { + _searchStart.FindResource("notPresent"); } } } From fb0da85ad3a998bdf711b42e7b619550e6ff9de3 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 14 Apr 2022 14:39:44 +0200 Subject: [PATCH 34/67] Merge core libraries. (#5831) * Merge core libraries. Everything below `Avalonia.Controls` into `Avalonia.Base`. * Move new files to correct place. * Removed unused dirs/projects, * Removed outdated references from theme assemblies. * Merge unit tests to match new assembly layout. * Fixup test namespaces. * Make directory match namespace. * Move files to match namespace. * Move files to match namespace. * Fix up incorrect namespace. `Avalonia.Visuals.Media.Imaging` -> `Avalonia.Media.Imaging`. * Fix resource URL. * Removed outdated dependencies. * Added missing project reference. * Update test namespaces. * Fix merge error. * Fix merge errors. * Fix bad merge in WindowsInteropTest.csproj. * Fix up merge errors in csprojs. * Remove merged tests from nuke. * Fix up namespace. * Fix compile error. * Fix failing tests. Now that more unit tests are present in Avalonia.Base.UnitTests, general `AvaloniaObject` properties are getting registered. Ignore those. Co-authored-by: Jumar Macato <16554748+jmacato@users.noreply.github.com> --- Avalonia.sln | 318 ------------------ Directory.Build.props | 1 + build/CoreLibraries.props | 6 - nukebuild/Build.cs | 6 - .../ControlCatalog.Android.csproj | 40 +++ .../ControlCatalog.iOS.csproj | 49 +++ .../RenderDemo/Pages/PathMeasurementPage.cs | 6 - .../Pages/RenderTargetBitmapPage.cs | 1 - samples/RenderDemo/RenderDemo.csproj | 2 +- .../Avalonia.AndroidTestApplication.csproj | 36 ++ src/Avalonia.Animation/ApiCompatBaseline.txt | 5 - .../Avalonia.Animation.csproj | 15 - .../Properties/AssemblyInfo.cs | 9 - .../Animation}/Animatable.cs | 0 .../Animation}/Animation.cs | 0 .../Animation}/AnimationInstance`1.cs | 0 .../Animation}/AnimatorDrivenTransition.cs | 0 .../Animation}/AnimatorKeyFrame.cs | 0 .../AnimatorTransitionObservable.cs | 0 .../Animation}/Animators/Animator`1.cs | 0 .../Animation/Animators/BaseBrushAnimator.cs | 0 .../Animation}/Animators/BoolAnimator.cs | 0 .../Animation/Animators/BoxShadowAnimator.cs | 0 .../Animation/Animators/BoxShadowsAnimator.cs | 0 .../Animation}/Animators/ByteAnimator.cs | 0 .../Animation/Animators/ColorAnimator.cs | 0 .../Animators/CornerRadiusAnimator.cs | 0 .../Animation}/Animators/DecimalAnimator.cs | 0 .../Animation}/Animators/DoubleAnimator.cs | 0 .../Animation}/Animators/FloatAnimator.cs | 0 .../Animators/GradientBrushAnimator.cs | 0 .../Animation}/Animators/Int16Animator.cs | 0 .../Animation}/Animators/Int32Animator.cs | 0 .../Animation}/Animators/Int64Animator.cs | 0 .../Animation/Animators/PointAnimator.cs | 0 .../Animation/Animators/RectAnimator.cs | 0 .../Animators/RelativePointAnimator.cs | 0 .../Animation/Animators/SizeAnimator.cs | 0 .../Animators/SolidColorBrushAnimator.cs | 0 .../Animation/Animators/ThicknessAnimator.cs | 0 .../Animation/Animators/TransformAnimator.cs | 0 .../Animators/TransformOperationsAnimator.cs | 0 .../Animation}/Animators/UInt16Animator.cs | 0 .../Animation}/Animators/UInt32Animator.cs | 0 .../Animation}/Animators/UInt64Animator.cs | 0 .../Animation/Animators/VectorAnimator.cs | 0 .../Animation}/Clock.cs | 0 .../Animation}/ClockBase.cs | 0 .../Animation/CompositePageTransition.cs | 0 .../Animation/CrossFade.cs | 0 .../Animation}/Cue.cs | 0 .../DisposeAnimationInstanceSubject.cs | 0 .../Animation/Easings}/BackEaseIn.cs | 0 .../Animation/Easings}/BackEaseInOut.cs | 0 .../Animation/Easings}/BackEaseOut.cs | 0 .../Animation/Easings}/BounceEaseIn.cs | 0 .../Animation/Easings}/BounceEaseInOut.cs | 0 .../Animation/Easings}/BounceEaseOut.cs | 0 .../Animation/Easings}/CircularEaseIn.cs | 0 .../Animation/Easings}/CircularEaseInOut.cs | 0 .../Animation/Easings}/CircularEaseOut.cs | 0 .../Animation/Easings}/CubicEaseIn.cs | 0 .../Animation/Easings}/CubicEaseInOut.cs | 0 .../Animation/Easings}/CubicEaseOut.cs | 0 .../Animation/Easings}/Easing.cs | 0 .../Animation/Easings}/EasingTypeConverter.cs | 0 .../Animation/Easings}/ElasticEaseIn.cs | 0 .../Animation/Easings}/ElasticEaseInOut.cs | 0 .../Animation/Easings}/ElasticEaseOut.cs | 0 .../Animation/Easings}/ExponentialEaseIn.cs | 0 .../Easings}/ExponentialEaseInOut.cs | 0 .../Animation/Easings}/ExponentialEaseOut.cs | 0 .../Animation/Easings}/IEasing.cs | 0 .../Animation/Easings}/LinearEasing.cs | 0 .../Animation/Easings}/QuadraticEaseIn.cs | 0 .../Animation/Easings}/QuadraticEaseInOut.cs | 0 .../Animation/Easings}/QuadraticEaseOut.cs | 0 .../Animation/Easings}/QuarticEaseIn.cs | 0 .../Animation/Easings}/QuarticEaseInOut.cs | 0 .../Animation/Easings}/QuarticEaseOut.cs | 0 .../Animation/Easings}/QuinticEaseIn.cs | 0 .../Animation/Easings}/QuinticEaseInOut.cs | 0 .../Animation/Easings}/QuinticEaseOut.cs | 0 .../Animation/Easings}/SineEaseIn.cs | 0 .../Animation/Easings}/SineEaseInOut.cs | 0 .../Animation/Easings}/SineEaseOut.cs | 0 .../Animation/Easings}/SplineEasing.cs | 0 .../Animation}/FillMode.cs | 0 .../Animation}/IAnimation.cs | 0 .../Animation}/IAnimationSetter.cs | 0 .../Animation}/IAnimator.cs | 0 .../Animation}/IClock.cs | 0 .../Animation}/IGlobalClock.cs | 0 .../Animation/IPageTransition.cs | 0 .../Animation}/ITransition.cs | 0 .../Animation}/IterationCount.cs | 0 .../Animation}/IterationCountTypeConverter.cs | 0 .../Animation}/KeyFrame.cs | 0 .../Animation}/KeyFrames.cs | 0 .../Animation}/KeySpline.cs | 0 .../Animation}/KeySplineTypeConverter.cs | 0 .../Animation/PageSlide.cs | 0 .../Animation}/PlayState.cs | 0 .../Animation}/PlaybackDirection.cs | 0 .../Animation/RenderLoopClock.cs | 0 .../Animation}/Transition.cs | 0 .../Animation}/TransitionInstance.cs | 0 .../Animation}/TransitionObservableBase.cs | 0 .../Animation}/Transitions.cs | 0 .../Transitions/BoxShadowsTransition.cs | 0 .../Animation/Transitions/BrushTransition.cs | 0 .../Animation/Transitions/ColorTransition.cs | 0 .../Transitions/CornerRadiusTransition.cs | 0 .../Transitions/DoubleTransition.cs | 0 .../Animation}/Transitions/FloatTransition.cs | 0 .../Transitions/IntegerTransition.cs | 0 .../Animation/Transitions/PointTransition.cs | 0 .../Transitions/RelativePointTransition.cs | 0 .../Animation/Transitions/SizeTransition.cs | 0 .../Transitions/ThicknessTransition.cs | 0 .../TransformOperationsTransition.cs | 0 .../Animation/Transitions/VectorTransition.cs | 0 .../Animation}/Utils/BounceEaseUtils.cs | 0 .../Animation}/Utils/EasingUtils.cs | 0 .../Assets/BiDi.trie | Bin .../Assets/GraphemeBreak.trie | Bin .../Assets/UnicodeData.trie | Bin src/Avalonia.Base/Avalonia.Base.csproj | 3 + .../AvaloniaPropertyExtensions.cs | 0 .../ClassBindingManager.cs | 0 .../CombinedGeometry.cs | 0 .../Controls/ChildNameScope.cs | 2 +- .../Controls/Classes.cs | 0 .../Controls/INameScope.cs | 0 .../Controls/IPseudoClasses.cs | 0 .../Controls/IResourceDictionary.cs | 0 .../Controls/IResourceHost.cs | 0 .../Controls/IResourceNode.cs | 0 .../Controls/IResourceProvider.cs | 0 .../Controls/ISetInheritanceParent.cs | 0 .../Controls/ISetLogicalParent.cs | 0 .../Metadata/PseudoClassesAttribute.cs | 0 .../Metadata/TemplatePartAttribute.cs | 0 .../Controls/NameScope.cs | 2 +- .../Controls/NameScopeEventArgs.cs | 0 .../Controls/NameScopeExtensions.cs | 0 .../Controls/NameScopeLocator.cs | 0 .../Controls/PseudoClassesExtensions.cs | 0 .../Controls/ResourceDictionary.cs | 0 .../Controls/ResourceNodeExtensions.cs | 0 .../Controls/ResourcesChangedEventArgs.cs | 0 .../CornerRadius.cs | 0 .../Diagnostics/StyleDiagnostics.cs | 0 .../Diagnostics/StyledElementExtensions.cs | 0 .../GeometryCollection.cs | 0 .../Media => Avalonia.Base}/GeometryGroup.cs | 0 .../IDataContextProvider.cs | 0 .../INamed.cs | 0 .../IStyledElement.cs | 0 .../Input}/AccessKeyHandler.cs | 0 .../Input}/Cursor.cs | 0 .../Input}/DataFormats.cs | 0 .../Input}/DataObject.cs | 0 .../Input}/DragDrop.cs | 0 .../Input}/DragDropDevice.cs | 0 .../Input}/DragDropEffects.cs | 0 .../Input}/DragEventArgs.cs | 0 .../Input}/FocusManager.cs | 0 .../GestureRecognizerCollection.cs | 0 .../GestureRecognizers/IGestureRecognizer.cs | 0 .../ScrollGestureRecognizer.cs | 0 .../Input}/Gestures.cs | 0 .../Input}/GotFocusEventArgs.cs | 0 .../Input}/IAccessKeyHandler.cs | 0 .../Input}/IClickableControl.cs | 0 .../Input}/ICloseable.cs | 0 .../Input}/ICommandSource.cs | 0 .../Input}/ICustomKeyboardNavigation.cs | 0 .../Input}/IDataObject.cs | 0 .../Input}/IFocusManager.cs | 0 .../Input}/IFocusScope.cs | 0 .../Input}/IInputDevice.cs | 0 .../Input}/IInputElement.cs | 0 .../Input}/IInputManager.cs | 0 .../Input}/IInputRoot.cs | 0 .../Input}/IKeyboardDevice.cs | 0 .../Input}/IKeyboardNavigationHandler.cs | 0 .../Input}/IMainMenu.cs | 0 .../Input}/IMouseDevice.cs | 0 .../Input}/INavigableContainer.cs | 0 .../Input}/IPointer.cs | 0 .../Input}/IPointerDevice.cs | 0 .../Input}/InputElement.cs | 0 .../Input}/InputExtensions.cs | 0 .../Input}/InputManager.cs | 0 .../Input}/InputMethod.cs | 0 .../Input}/Key.cs | 0 .../Input}/KeyBinding.cs | 0 .../Input}/KeyEventArgs.cs | 0 .../Input}/KeyGesture.cs | 0 .../Input}/KeyboardDevice.cs | 0 .../Input}/KeyboardNavigation.cs | 0 .../Input}/KeyboardNavigationHandler.cs | 0 .../Input}/KeyboardNavigationMode.cs | 0 .../Input}/MouseDevice.cs | 0 .../Input}/Navigation/FocusExtensions.cs | 0 .../Input}/Navigation/TabNavigation.cs | 0 .../Input}/NavigationDirection.cs | 0 .../Input}/NavigationMethod.cs | 0 .../Input}/Platform/IClipboard.cs | 0 .../Input}/Platform/IPlatformDragSource.cs | 0 .../Platform/PlatformHotkeyConfiguration.cs | 0 .../Input}/Pointer.cs | 0 .../Input}/PointerDeltaEventArgs.cs | 0 .../Input}/PointerEventArgs.cs | 0 .../Input}/PointerPoint.cs | 0 .../Input}/PointerWheelEventArgs.cs | 0 .../Input}/Raw/IDragDropDevice.cs | 0 .../Input}/Raw/RawDragEvent.cs | 0 .../Input}/Raw/RawDragEventType.cs | 0 .../Input}/Raw/RawInputEventArgs.cs | 0 .../Input}/Raw/RawKeyEventArgs.cs | 0 .../Input}/Raw/RawMouseWheelEventArgs.cs | 0 .../Input}/Raw/RawPointerEventArgs.cs | 0 .../Input}/Raw/RawPointerGestureEventArgs.cs | 0 .../Input}/Raw/RawSizeEventArgs.cs | 0 .../Input}/Raw/RawTextInputEventArgs.cs | 0 .../Input}/Raw/RawTouchEventArgs.cs | 0 .../Input}/ScrollGestureEventArgs.cs | 0 .../Input}/TappedEventArgs.cs | 0 .../TextInput/ITextInputMethodClient.cs | 0 .../Input}/TextInput/ITextInputMethodImpl.cs | 0 .../Input}/TextInput/InputMethodManager.cs | 0 .../Input}/TextInput/TextInputContentType.cs | 0 ...TextInputMethodClientRequestedEventArgs.cs | 0 .../Input}/TextInput/TextInputOptions.cs | 0 .../TextInput/TransformTrackingHelper.cs | 0 .../Input}/TextInputEventArgs.cs | 0 .../Input}/TouchDevice.cs | 0 .../Input}/VectorEventArgs.cs | 0 .../Interactivity}/EventRoute.cs | 0 .../Interactivity}/IInteractive.cs | 0 .../Interactivity}/Interactive.cs | 0 .../Interactivity}/InteractiveExtensions.cs | 0 .../Interactivity}/RoutedEvent.cs | 0 .../Interactivity}/RoutedEventArgs.cs | 0 .../Interactivity}/RoutedEventRegistry.cs | 0 .../Layout}/AttachedLayout.cs | 0 .../EffectiveViewportChangedEventArgs.cs | 0 .../Layout}/ElementManager.cs | 0 .../Layout}/FlowLayoutAlgorithm.cs | 0 .../Layout}/IEmbeddedLayoutRoot.cs | 0 .../Layout}/IFlowLayoutAlgorithmDelegates.cs | 0 .../Layout}/ILayoutManager.cs | 0 .../Layout}/ILayoutRoot.cs | 0 .../Layout}/ILayoutable.cs | 0 .../Layout}/LayoutContext.cs | 0 .../Layout}/LayoutContextAdapter.cs | 0 .../Layout}/LayoutExtensions.cs | 0 .../Layout}/LayoutHelper.cs | 0 .../Layout}/LayoutManager.cs | 0 .../Layout}/LayoutQueue.cs | 0 .../Layout}/Layoutable.cs | 0 .../Layout}/NonVirtualizingLayout.cs | 0 .../Layout}/NonVirtualizingLayoutContext.cs | 0 .../Layout}/NonVirtualizingStackLayout.cs | 0 .../Layout}/Orientation.cs | 0 .../Layout}/OrientationBasedMeasures.cs | 0 .../Layout}/StackLayout.cs | 0 .../Layout}/StackLayoutState.cs | 0 .../Layout}/UniformGridLayout.cs | 0 .../Layout}/UniformGridLayoutState.cs | 0 .../Layout}/Utils/ListUtils.cs | 0 .../Layout}/VirtualLayoutContextAdapter.cs | 0 .../Layout}/VirtualizingLayout.cs | 0 .../Layout}/VirtualizingLayoutContext.cs | 0 .../Layout}/WrapLayout/UvBounds.cs | 0 .../Layout}/WrapLayout/UvMeasure.cs | 0 .../Layout}/WrapLayout/WrapItem.cs | 0 .../Layout}/WrapLayout/WrapLayout.cs | 0 .../Layout}/WrapLayout/WrapLayoutState.cs | 0 .../LogicalTree/ChildIndexChangedEventArgs.cs | 0 .../LogicalTree/ControlLocator.cs | 0 .../LogicalTree/IChildIndexProvider.cs | 0 .../LogicalTree/ILogical.cs | 0 .../LogicalTree/ILogicalRoot.cs | 0 .../LogicalTree/LogicalExtensions.cs | 0 .../LogicalTreeAttachmentEventArgs.cs | 0 .../Matrix.cs | 0 .../Media/AcrylicBackgroundSource.cs | 0 .../Media/AlignmentX.cs | 0 .../Media/AlignmentY.cs | 0 .../Media/ArcSegment.cs | 0 .../Media/BaselineAlignment.cs | 0 .../Media/BezierSegment .cs | 0 .../Media/BoxShadow.cs | 0 .../Media/BoxShadows.cs | 0 .../Media/Brush.cs | 0 .../Media/BrushConverter.cs | 0 .../Media/BrushExtensions.cs | 0 .../Media/BrushMappingMode.cs | 0 .../Media/Brushes.cs | 0 .../Media/CharacterHit.cs | 0 .../Media/Color.cs | 0 .../Media/Colors.cs | 0 .../Media/ConicGradientBrush.cs | 0 .../Media/DashStyle.cs | 0 .../Media/Drawing.cs | 0 .../Media/DrawingContext.cs | 2 +- .../Media/DrawingGroup.cs | 0 .../Media/DrawingImage.cs | 4 +- .../Media/EllipseGeometry.cs | 0 .../Media/ExperimentalAcrylicMaterial.cs | 0 .../Media/FillRule.cs | 0 .../Media/FlowDirection.cs | 0 .../Media/FontFallback.cs | 0 .../Media/FontFamily.cs | 0 .../Media/FontManager.cs | 0 .../Media/FontManagerOptions.cs | 0 .../Media/FontStretch.cs | 0 .../Media/FontStyle.cs | 0 .../Media/FontWeight.cs | 0 .../Media/Fonts/FamilyNameCollection.cs | 0 .../Media/Fonts/FontFamilyKey.cs | 0 .../Media/Fonts/FontFamilyLoader.cs | 0 .../Media/FormattedText.cs | 0 .../Media/Geometry.cs | 0 .../Media/GeometryDrawing.cs | 0 .../Media/GlyphRun.cs | 0 .../Media/GlyphRunDrawing.cs | 0 .../Media/GlyphRunMetrics.cs | 0 .../Media/GlyphTypeface.cs | 0 .../Media/GradientBrush.cs | 0 .../Media/GradientSpreadMethod.cs | 0 .../Media/GradientStop.cs | 0 .../Media/GradientStops.cs | 0 .../Media/HslColor.cs | 0 .../Media/HsvColor.cs | 0 .../Media/IAffectsRender.cs | 0 .../Media/IBrush.cs | 0 .../Media/IConicGradientBrush.cs | 0 .../Media/IDashStyle.cs | 0 .../Media/IExperimentalAcrylicMaterial.cs | 0 .../Media/IGradientBrush.cs | 0 .../Media/IGradientStop.cs | 0 .../Media/IImage.cs | 3 +- .../Media/IImageBrush.cs | 0 .../Media/ILinearGradientBrush.cs | 0 .../Media/IMutableBrush.cs | 0 .../IMutableExperimentalAcrylicMaterial.cs | 0 .../Media/IMutableTransform.cs | 0 .../Media/IPen.cs | 0 .../Media/IRadialGradientBrush.cs | 0 .../Media/ISolidColorBrush.cs | 0 .../Media/ITileBrush.cs | 2 +- .../Media/ITransform.cs | 0 .../Media/IVisualBrush.cs | 0 .../Media/ImageBrush.cs | 0 .../Media/ImageDrawing.cs | 0 .../Media/Imaging/Bitmap.cs | 1 - .../Media/Imaging/BitmapBlendingMode.cs | 2 +- .../Media/Imaging/BitmapInterpolationMode.cs | 2 +- .../Media/Imaging/CroppedBitmap.cs | 2 +- .../Media/Imaging/IBitmap.cs | 0 .../Media/Imaging/RenderTargetBitmap.cs | 0 .../Media/Imaging/WriteableBitmap.cs | 2 - .../Immutable/ImmutableConicGradientBrush.cs | 0 .../Media/Immutable/ImmutableDashStyle.cs | 0 .../Media/Immutable/ImmutableGradientBrush.cs | 0 .../Media/Immutable/ImmutableGradientStop.cs | 0 .../Media/Immutable/ImmutableImageBrush.cs | 1 - .../Immutable/ImmutableLinearGradientBrush.cs | 0 .../Media/Immutable/ImmutablePen.cs | 0 .../Immutable/ImmutableRadialGradientBrush.cs | 0 .../Immutable/ImmutableSolidColorBrush.cs | 0 .../Immutable/ImmutableTextDecoration.cs | 0 .../Media/Immutable/ImmutableTileBrush.cs | 2 +- .../Media/Immutable/ImmutableTransform.cs | 0 .../Media/Immutable/ImmutableVisualBrush.cs | 4 +- .../ImmutableExperimentalAcrylicMaterial.cs | 0 .../Media/KnownColors.cs | 0 .../Media/LineGeometry.cs | 0 .../Media/LineSegment.cs | 0 .../Media/LinearGradientBrush.cs | 0 .../Media/MaterialExtensions.cs | 0 .../Media/MatrixTransform.cs | 0 .../Media/MediaExtensions.cs | 0 .../Media/PathFigure.cs | 0 .../Media/PathGeometry.cs | 0 .../Media/PathGeometryCollections.cs | 0 .../Media/PathMarkupParser.cs | 0 .../Media/PathSegment.cs | 0 .../Media/Pen.cs | 0 .../Media/PenLineCap.cs | 0 .../Media/PenLineJoin.cs | 0 .../Media/PolyLineSegment.cs | 0 .../Media/PolylineGeometry.cs | 0 .../Media/PreciseEllipticArcHelper.cs | 0 .../Media/QuadraticBezierSegment .cs | 0 .../Media/RadialGradientBrush.cs | 0 .../Media/RectangleGeometry.cs | 0 .../Media/RenderOptions.cs | 2 +- .../Media/RotateTransform.cs | 0 .../Media/ScaleTransform.cs | 0 .../Media/SkewTransform.cs | 0 .../Media/SolidColorBrush.cs | 0 .../Media/StreamGeometry.cs | 0 .../Media/StreamGeometryContext.cs | 0 .../Media/Stretch.cs | 0 .../Media/StretchDirection.cs | 0 .../Media/SweepDirection.cs | 0 .../Media/TextAlignment.cs | 0 .../Media/TextCollapsingCreateInfo.cs | 0 .../Media/TextDecoration.cs | 0 .../Media/TextDecorationCollection.cs | 0 .../Media/TextDecorationLocation.cs | 0 .../Media/TextDecorationUnit.cs | 0 .../Media/TextDecorations.cs | 0 .../Media/TextFormatting/DrawableTextRun.cs | 0 .../Media/TextFormatting/FontMetrics.cs | 0 .../TextFormatting/FormattedTextSource.cs | 0 .../GenericTextParagraphProperties.cs | 0 .../GenericTextRunProperties.cs | 0 .../Media/TextFormatting/ITextSource.cs | 0 .../Media/TextFormatting/LogicalDirection.cs | 0 .../TextFormatting/ShapeableTextCharacters.cs | 0 .../Media/TextFormatting/ShapedBuffer.cs | 0 .../TextFormatting/ShapedTextCharacters.cs | 0 .../Media/TextFormatting/SplitResult.cs | 0 .../Media/TextFormatting/TextBounds.cs | 0 .../Media/TextFormatting/TextCharacters.cs | 0 .../TextCollapsingProperties.cs | 0 .../TextFormatting/TextEllipsisHelper.cs | 0 .../Media/TextFormatting/TextEndOfLine.cs | 0 .../TextFormatting/TextEndOfParagraph.cs | 0 .../Media/TextFormatting/TextFormatter.cs | 0 .../Media/TextFormatting/TextFormatterImpl.cs | 0 .../Media/TextFormatting/TextLayout.cs | 0 .../TextLeadingPrefixCharacterEllipsis.cs | 0 .../Media/TextFormatting/TextLine.cs | 0 .../Media/TextFormatting/TextLineBreak.cs | 0 .../Media/TextFormatting/TextLineImpl.cs | 0 .../Media/TextFormatting/TextLineMetrics.cs | 0 .../TextFormatting/TextParagraphProperties.cs | 0 .../Media/TextFormatting/TextRange.cs | 0 .../Media/TextFormatting/TextRun.cs | 0 .../Media/TextFormatting/TextRunProperties.cs | 0 .../Media/TextFormatting/TextShaper.cs | 0 .../Media/TextFormatting/TextShaperOptions.cs | 0 .../TextTrailingCharacterEllipsis.cs | 0 .../TextTrailingWordEllipsis.cs | 0 .../TextFormatting/Unicode/BiDiAlgorithm.cs | 0 .../Media/TextFormatting/Unicode/BiDiClass.cs | 0 .../Media/TextFormatting/Unicode/BiDiData.cs | 0 .../Unicode/BiDiPairedBracketType.cs | 0 .../Unicode/BinaryReaderExtensions.cs | 0 .../Media/TextFormatting/Unicode/Codepoint.cs | 0 .../Unicode/CodepointEnumerator.cs | 0 .../TextFormatting/Unicode/GeneralCategory.cs | 0 .../Media/TextFormatting/Unicode/Grapheme.cs | 0 .../Unicode/GraphemeBreakClass.cs | 0 .../Unicode/GraphemeEnumerator.cs | 0 .../Media/TextFormatting/Unicode/LineBreak.cs | 0 .../TextFormatting/Unicode/LineBreakClass.cs | 0 .../Unicode/LineBreakEnumerator.cs | 0 .../Unicode/LineBreakPairTable.cs | 0 .../Unicode/PropertyValueAliasHelper.cs | 0 .../Media/TextFormatting/Unicode/Script.cs | 0 .../TextFormatting/Unicode/UnicodeData.cs | 0 .../TextFormatting/Unicode/UnicodeTrie.cs | 0 .../Unicode/UnicodeTrieBuilder.Constants.cs | 0 .../Unicode/UnicodeTrieBuilder.cs | 0 .../Media/TextHitTestResult.cs | 0 .../Media/TextLeadingPrefixTrimming.cs | 0 .../Media/TextNoneTrimming.cs | 0 .../Media/TextTrailingTrimming.cs | 0 .../Media/TextTrimming.cs | 0 .../Media/TextWrapping.cs | 0 .../Media/TileBrush.cs | 2 +- .../Media/Transform.cs | 0 .../Media/TransformConverter.cs | 0 .../Media/TransformExtensions.cs | 0 .../Media/TransformGroup.cs | 0 .../Transformation/InterpolationUtilities.cs | 0 .../Transformation/TransformOperation.cs | 0 .../Transformation/TransformOperations.cs | 0 .../Media/Transformation/TransformParser.cs | 0 .../Media/TranslateTransform.cs | 0 .../Media/Typeface.cs | 0 .../Media/UnicodeRange.cs | 0 .../Media/VisualBrush.cs | 0 .../Media => Avalonia.Base}/PixelPoint.cs | 0 .../Media => Avalonia.Base}/PixelRect.cs | 0 .../Media => Avalonia.Base}/PixelSize.cs | 0 .../Media => Avalonia.Base}/PixelVector.cs | 0 .../Platform/AlphaFormat.cs | 0 .../Platform/IBitmapImpl.cs | 0 .../Platform/ICursorFactory.cs | 0 .../Platform/ICursorImpl.cs | 0 .../Platform/IDrawingContextImpl.cs | 2 +- .../IDrawingContextWithAcrylicLikeSupport.cs | 0 .../Platform/IFontManagerImpl.cs | 0 .../Platform/IGeometryContext.cs | 0 .../Platform/IGeometryImpl.cs | 0 .../Platform/IGlyphRunImpl.cs | 0 .../Platform/IGlyphTypefaceImpl.cs | 0 .../Platform/ILockedFramebuffer.cs | 0 .../Platform/IModuleEnvironmentChecker.cs | 0 .../Platform/IPlatformRenderInterface.cs | 2 +- .../Platform/IPlatformSettings.cs | 0 .../Platform/IRenderTarget.cs | 0 .../Platform/IRenderTargetBitmapImpl.cs | 0 .../Platform/IStreamGeometryContextImpl.cs | 0 .../Platform/IStreamGeometryImpl.cs | 0 .../Platform/ITextShaperImpl.cs | 0 .../Platform/ITransformedGeometryImpl.cs | 0 .../Platform/IWriteableBitmapImpl.cs | 0 .../Platform/LockedFramebuffer.cs | 0 .../Platform/PathGeometryContext.cs | 0 .../Platform/PixelFormat.cs | 0 .../Point.cs | 0 .../Points.cs | 0 src/Avalonia.Base/Properties/AssemblyInfo.cs | 29 +- .../Rect.cs | 0 .../RelativePoint.cs | 0 .../RelativeRect.cs | 0 .../RenderTargetCorruptedException.cs | 0 .../Rendering/DefaultRenderTimer.cs | 0 .../Rendering/DeferredRenderer.cs | 0 .../Rendering/DirtyRects.cs | 0 .../Rendering/DirtyVisuals.cs | 0 .../Rendering/DisplayDirtyRect.cs | 0 .../Rendering/DisplayDirtyRects.cs | 0 .../Rendering/ICustomSimpleHitTest.cs | 0 .../Rendering/IDeferredRendererLock.cs | 0 .../Rendering/IRenderLoop.cs | 0 .../Rendering/IRenderLoopTask.cs | 0 .../Rendering/IRenderRoot.cs | 0 .../Rendering/IRenderTimer.cs | 0 .../Rendering/IRenderer.cs | 0 .../Rendering/IRendererFactory.cs | 0 .../Rendering/IVisualBrushInitialize.cs | 0 .../Rendering/IVisualBrushRenderer.cs | 0 .../Rendering/ImmediateRenderer.cs | 0 .../Rendering/ManagedDeferredRendererLock.cs | 0 .../Rendering/RenderLayer.cs | 0 .../Rendering/RenderLayers.cs | 0 .../Rendering/RenderLoop.cs | 0 .../Rendering/RendererBase.cs | 0 .../SceneGraph/BitmapBlendModeNode.cs | 2 +- .../SceneGraph/BrushDrawOperation.cs | 0 .../Rendering/SceneGraph/ClipNode.cs | 0 .../SceneGraph/CustomDrawOperation.cs | 0 .../SceneGraph/DeferredDrawingContextImpl.cs | 2 +- .../Rendering/SceneGraph/DrawOperation.cs | 0 .../Rendering/SceneGraph/EllipseNode.cs | 0 .../SceneGraph/ExperimentalAcrylicNode.cs | 0 .../SceneGraph/GeometryBoundsHelper.cs | 0 .../Rendering/SceneGraph/GeometryClipNode.cs | 0 .../Rendering/SceneGraph/GeometryNode.cs | 0 .../Rendering/SceneGraph/GlyphRunNode.cs | 0 .../Rendering/SceneGraph/IDrawOperation.cs | 0 .../Rendering/SceneGraph/ISceneBuilder.cs | 0 .../Rendering/SceneGraph/IVisualNode.cs | 0 .../Rendering/SceneGraph/ImageNode.cs | 2 +- .../Rendering/SceneGraph/LineBoundsHelper.cs | 0 .../Rendering/SceneGraph/LineNode.cs | 0 .../Rendering/SceneGraph/OpacityMaskNode.cs | 0 .../Rendering/SceneGraph/OpacityNode.cs | 0 .../Rendering/SceneGraph/RectangleNode.cs | 0 .../Rendering/SceneGraph/Scene.cs | 0 .../Rendering/SceneGraph/SceneBuilder.cs | 0 .../Rendering/SceneGraph/SceneLayer.cs | 0 .../Rendering/SceneGraph/SceneLayers.cs | 0 .../Rendering/SceneGraph/VisualNode.cs | 0 .../Rendering/SceneInvalidatedEventArgs.cs | 0 .../Rendering/SleepLoopRenderTimer.cs | 0 .../Rendering/UiThreadRenderTimer.cs | 0 .../Utilities/TileBrushCalculator.cs | 0 .../Rendering/ZIndexComparer.cs | 0 .../RoundedRect.cs | 0 src/Avalonia.Base/Settings.StyleCop | 1 - .../Size.cs | 0 .../StyledElement.cs | 0 .../StyledElementExtensions.cs | 0 .../Styling/Activators/AndActivator.cs | 0 .../Styling/Activators/AndActivatorBuilder.cs | 0 .../Styling/Activators/IStyleActivator.cs | 0 .../Styling/Activators/IStyleActivatorSink.cs | 0 .../Styling/Activators/NotActivator.cs | 0 .../Styling/Activators/NthChildActivator.cs | 0 .../Styling/Activators/OrActivator.cs | 0 .../Styling/Activators/OrActivatorBuilder.cs | 0 .../Activators/PropertyEqualsActivator.cs | 0 .../Styling/Activators/StyleActivatorBase.cs | 0 .../Styling/Activators/StyleClassActivator.cs | 0 .../Styling/ChildSelector.cs | 0 .../Styling/DescendentSelector.cs | 0 .../Styling/IGlobalStyles.cs | 0 .../Styling/ISetter.cs | 0 .../Styling/ISetterInstance.cs | 0 .../Styling/ISetterValue.cs | 0 .../Styling/IStyle.cs | 0 .../Styling/IStyleHost.cs | 0 .../Styling/IStyleInstance.cs | 0 .../Styling/IStyleable.cs | 0 .../Styling/IStyler.cs | 0 .../Styling/ITemplate.cs | 0 .../Styling/ITemplatedControl.cs | 0 .../Styling/NotSelector.cs | 0 .../Styling/NthChildSelector.cs | 0 .../Styling/NthLastChildSelector.cs | 0 .../Styling/OrSelector.cs | 0 .../Styling/PropertyEqualsSelector.cs | 0 .../Styling/PropertySetterBindingInstance.cs | 0 .../Styling/PropertySetterInstance.cs | 0 .../Styling/PropertySetterLazyInstance.cs | 0 .../Styling/Selector.cs | 0 .../Styling/SelectorMatch.cs | 0 .../Styling/Selectors.cs | 0 .../Styling/Setter.cs | 0 .../Styling/Style.cs | 0 .../Styling/StyleInstance.cs | 0 .../Styling/Styler.cs | 0 .../Styling/Styles.cs | 0 .../Styling/TemplateSelector.cs | 0 .../Styling/TypeNameAndClassSelector.cs | 0 .../Thickness.cs | 0 .../Utilities/ArrayBuilder.cs | 0 .../Utilities/ArraySlice.cs | 0 .../Utilities/BinarySearchExtension.cs | 0 .../Utilities/FrugalList.cs | 0 .../Utilities/MappedArraySlice.cs | 0 .../Utilities/ReadOnlySlice.cs | 0 .../Utilities/Span.cs | 0 .../Utilities/ValueSpan.cs | 0 .../Vector.cs | 0 .../Visual.cs | 0 .../VisualExtensions.cs | 0 .../VisualTree/IHostedVisualTreeRoot.cs | 0 .../VisualTree/IVisual.cs | 0 .../VisualTree/IVisualTreeHost.cs | 0 .../VisualTree/IVisualWithRoundRectClip.cs | 0 .../VisualTree/TransformedBounds.cs | 0 .../VisualTree/VisualExtensions.cs | 0 .../VisualTree/VisualLocator.cs | 0 .../VisualTreeAttachmentEventArgs.cs | 0 .../Avalonia.Build.Tasks.csproj | 20 +- .../Avalonia.Controls.DataGrid.csproj | 6 - .../Avalonia.Controls.csproj | 6 - .../Avalonia.DesignerSupport.csproj | 6 - .../Avalonia.Diagnostics.csproj | 6 - .../HeadlessPlatformRenderInterface.cs | 2 +- src/Avalonia.Input/ApiCompatBaseline.txt | 30 -- src/Avalonia.Input/Avalonia.Input.csproj | 19 -- src/Avalonia.Input/Properties/AssemblyInfo.cs | 10 - .../ApiCompatBaseline.txt | 1 - .../Avalonia.Interactivity.csproj | 15 - src/Avalonia.Layout/ApiCompatBaseline.txt | 1 - src/Avalonia.Layout/Avalonia.Layout.csproj | 14 - .../Properties/AssemblyInfo.cs | 7 - src/Avalonia.OpenGL/Avalonia.OpenGL.csproj | 1 - .../Avalonia.Remote.Protocol.csproj | 2 +- src/Avalonia.Styling/ApiCompatBaseline.txt | 4 - src/Avalonia.Styling/Avalonia.Styling.csproj | 14 - .../Properties/AssemblyInfo.cs | 9 - .../Avalonia.Themes.Default.csproj | 8 +- .../Avalonia.Themes.Fluent.csproj | 8 +- src/Avalonia.Visuals/ApiCompatBaseline.txt | 188 ----------- src/Avalonia.Visuals/Avalonia.Visuals.csproj | 23 -- .../Properties/AssemblyInfo.cs | 15 - src/Avalonia.X11/X11IconLoader.cs | 5 +- .../Avalonia.Markup.Xaml.csproj | 6 - .../Avalonia.Markup/Avalonia.Markup.csproj | 2 - src/Skia/Avalonia.Skia/DrawingContextImpl.cs | 2 +- src/Skia/Avalonia.Skia/ImmutableBitmap.cs | 2 +- .../Avalonia.Skia/PlatformRenderInterface.cs | 2 +- src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs | 2 +- src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs | 2 +- .../Avalonia.Direct2D1/Direct2D1Platform.cs | 2 +- .../Media/DrawingContextImpl.cs | 4 +- .../Media/ImageBrushImpl.cs | 2 +- .../Media/Imaging/WicBitmapImpl.cs | 12 +- .../Media/Imaging/WriteableWicBitmapImpl.cs | 2 +- .../Avalonia.Designer.HostApp.csproj | 6 - .../Avalonia.Animation.UnitTests.csproj | 28 -- .../Properties/AssemblyInfo.cs | 7 - .../Animation}/AnimatableTests.cs | 6 +- .../Animation}/AnimationIterationTests.cs | 10 +- .../Animation}/BrushTransitionTests.cs | 7 +- .../Animation}/KeySplineTests.cs | 7 +- .../Animation}/TestClock.cs | 6 +- .../Animation}/TransitionsTests.cs | 4 +- .../Avalonia.Base.UnitTests.csproj | 5 + .../AvaloniaPropertyRegistryTests.cs | 5 +- .../CornerRadiusTests.cs | 5 +- .../DataAnnotationsValidationPluginTests.cs | 2 +- .../Data/DefaultValueConverterTests.cs | 2 +- .../Input}/GesturesTests.cs | 3 +- .../Input}/InputElement_Enabled.cs | 2 +- .../Input}/InputElement_Focus.cs | 3 +- .../Input}/KeyGestureTests.cs | 3 +- .../Input}/KeyboardDeviceTests.cs | 3 +- .../Input}/KeyboardNavigationTests_Custom.cs | 3 +- .../Input}/KeyboardNavigationTests_Tab.cs | 3 +- .../Input}/MouseDeviceTests.cs | 10 +- .../Input}/PointerTests.cs | 3 +- .../Input}/TouchDeviceTests.cs | 0 .../Interactivity}/InteractiveTests.cs | 3 +- .../RoutedEventRegistryTests.cs | 3 +- .../Layout}/ArrangeTests.cs | 3 +- .../Layout}/FullLayoutTests.cs | 4 +- .../Layout}/LayoutHelperTests.cs | 3 +- .../Layout}/LayoutManagerTests.cs | 3 +- .../Layout}/LayoutQueueTests.cs | 3 +- .../Layout}/LayoutTestControl.cs | 3 +- .../Layout}/LayoutTestRoot.cs | 3 +- .../Layout}/LayoutableTests.cs | 3 +- ...ayoutableTests_EffectiveViewportChanged.cs | 3 +- .../Layout}/MeasureTests.cs | 2 +- .../NonVirtualizingStackLayoutTests.cs | 3 +- .../Media/BoxShadowTests.cs | 2 +- .../Media/BrushTests.cs | 2 +- .../Media/ColorTests.cs | 2 +- .../Media/FontFamilyTests.cs | 2 +- .../Media/FontManagerTests.cs | 2 +- .../Media/Fonts/FamilyNameCollectionTests.cs | 2 +- .../Media/Fonts/FontFamilyKeyTests.cs | 2 +- .../Media/Fonts/FontFamilyLoaderTests.cs | 7 +- .../Media/GeometryGroupTests.cs | 0 .../Media/GeometryTests.cs | 2 +- .../Media/GlyphRunTests.cs | 2 +- .../Media/ImageBrushTests.cs | 7 +- .../Media/LinearGradientBrushTests.cs | 5 +- .../Media/MatrixTests.cs | 2 +- .../Media/PathMarkupParserTests.cs | 11 +- .../Media/PathSegmentTests.cs | 2 +- .../Media/PenTests.cs | 2 +- .../Media/PixelRectTests.cs | 7 +- .../Media/RectTests.cs | 7 +- .../Media/RectangleGeometryTests.cs | 5 +- .../Media/SolidColorBrushTests.cs | 5 +- .../Media/TextDecorationTests.cs | 2 +- .../TextFormatting/BiDiAlgorithmTests.cs | 0 .../BiDiClassTestDataGenerator.cs | 1 + .../Media/TextFormatting/BiDiClassTests.cs | 0 .../TextFormatting/BiDiTestDataGenerator.cs | 1 + .../Media/TextFormatting/BreakPairTable.txt | 0 .../GraphemeBreakClassTrieGenerator.cs | 2 +- .../GraphemeBreakClassTrieGeneratorTests.cs | 2 +- .../LineBreakEnumuratorTests.cs | 2 +- .../Media/TextFormatting/TestDataGenerator.cs | 2 +- .../TextFormatting/UnicodeDataGenerator.cs | 2 +- .../UnicodeDataGeneratorTests.cs | 2 +- .../TextFormatting/UnicodeEnumsGenerator.cs | 2 +- .../Media/TransformOperationsTests.cs | 2 +- .../Media/TypefaceTests.cs | 2 +- .../Media/UnicodeRangeSegmentTests.cs | 0 .../Media/UnicodeRangeTests.cs | 0 .../RectTests.cs | 2 +- .../RelativePointTests.cs | 3 +- .../RelativeRectComparer.cs | 2 +- .../RelativeRectTests.cs | 3 +- .../RenderTests_Culling.cs | 8 +- .../Rendering/CustomHitTestBorder.cs | 3 +- .../Rendering/DeferredRendererTests.cs | 7 +- .../DeferredRendererTests_HitTesting.cs | 3 +- .../Rendering/ImmediateRendererTests.cs | 2 +- .../ImmediateRendererTests_HitTesting.cs | 2 +- .../Rendering/RenderLoopTests.cs | 4 +- .../DeferredDrawingContextImplTests.cs | 6 +- .../SceneGraph/DrawOperationTests.cs | 4 +- .../Rendering/SceneGraph/EllipseNodeTests.cs | 0 .../Rendering/SceneGraph/LineNodeTests.cs | 0 .../Rendering/SceneGraph/SceneBuilderTests.cs | 19 +- .../SceneGraph/SceneBuilderTests_Layers.cs | 10 +- .../Rendering/SceneGraph/SceneLayersTests.cs | 5 +- .../Rendering/SceneGraph/SceneTests.cs | 5 +- .../Rendering/SceneGraph/VisualNodeTests.cs | 5 +- .../Utilities/TileBrushCalculatorTests.cs | 5 +- .../SizeTests.cs | 2 +- .../Styling}/ResourceDictionaryTests.cs | 2 +- .../Styling}/SelectorTests_Child.cs | 4 +- .../Styling}/SelectorTests_Class.cs | 8 +- .../Styling}/SelectorTests_Descendent.cs | 4 +- .../Styling}/SelectorTests_Multiple.cs | 4 +- .../Styling}/SelectorTests_Name.cs | 3 +- .../Styling}/SelectorTests_Not.cs | 4 +- .../Styling}/SelectorTests_NthChild.cs | 3 +- .../Styling}/SelectorTests_NthLastChild.cs | 3 +- .../Styling}/SelectorTests_OfType.cs | 3 +- .../Styling}/SelectorTests_Or.cs | 3 +- .../Styling}/SelectorTests_PropertyEquals.cs | 4 +- .../Styling}/SelectorTests_Template.cs | 11 +- .../Styling}/SetterTests.cs | 3 +- .../Styling}/StyleActivatorExtensions.cs | 2 +- .../Styling}/StyleTests.cs | 3 +- .../Styling}/StyledElementTests.cs | 16 +- .../Styling}/StyledElementTests_Resources.cs | 4 +- .../Styling}/StylesTests.cs | 4 +- .../Styling}/TestObservable.cs | 2 +- .../Styling}/TestObserver.cs | 2 +- .../Styling}/TestSelectors.cs | 2 +- .../Styling}/TestSubject.cs | 2 +- .../TestVisual.cs | 3 +- .../ThicknessTests.cs | 5 +- .../Utilities/ReadOnlySpanTests.cs | 2 +- .../VectorTests.cs | 5 +- .../VisualExtensionsTests.cs | 2 +- .../VisualTests.cs | 6 +- .../VisualTree/MockRenderInterface.cs | 4 +- .../VisualTree/TransformedBoundsTests.cs | 14 +- .../VisualExtensions_GetVisualsAt.cs | 2 +- .../Avalonia.Benchmarks.csproj | 6 - .../NullDrawingContextImpl.cs | 2 +- .../NullRenderingPlatform.cs | 2 +- .../Avalonia.Controls.UnitTests.csproj | 6 - .../Avalonia.DesignerSupport.TestApp.csproj | 6 - .../Avalonia.Direct2D1.RenderTests.csproj | 6 - .../Avalonia.Direct2D1.UnitTests.csproj | 6 - .../Avalonia.Input.UnitTests.csproj | 27 -- .../Properties/AssemblyInfo.cs | 7 - .../Avalonia.Interactivity.UnitTests.csproj | 27 -- .../Properties/AssemblyInfo.cs | 7 - .../Avalonia.Layout.UnitTests.csproj | 29 -- .../Properties/AssemblyInfo.cs | 7 - .../Avalonia.LeakTests.csproj | 6 - .../Avalonia.Markup.UnitTests.csproj | 6 - .../Avalonia.Markup.Xaml.UnitTests.csproj | 6 - .../Avalonia.Skia.RenderTests.csproj | 6 - .../Avalonia.Skia.UnitTests.csproj | 6 - .../Avalonia.Styling.UnitTests.csproj | 30 -- .../Properties/AssemblyInfo.cs | 7 - .../Avalonia.UnitTests.csproj | 6 - .../MockPlatformRenderInterface.cs | 2 +- .../Avalonia.Visuals.UnitTests.csproj | 40 --- .../Properties/AssemblyInfo.cs | 7 - 837 files changed, 437 insertions(+), 1366 deletions(-) delete mode 100644 src/Avalonia.Animation/ApiCompatBaseline.txt delete mode 100644 src/Avalonia.Animation/Avalonia.Animation.csproj delete mode 100644 src/Avalonia.Animation/Properties/AssemblyInfo.cs rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animatable.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animation.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/AnimationInstance`1.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/AnimatorDrivenTransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/AnimatorKeyFrame.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/AnimatorTransitionObservable.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/Animator`1.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/BaseBrushAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/BoolAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/BoxShadowAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/BoxShadowsAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/ByteAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/ColorAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/CornerRadiusAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/DecimalAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/DoubleAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/FloatAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/GradientBrushAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/Int16Animator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/Int32Animator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/Int64Animator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/PointAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/RectAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/RelativePointAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/SizeAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/SolidColorBrushAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/ThicknessAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/TransformAnimator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/TransformOperationsAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/UInt16Animator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/UInt32Animator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Animators/UInt64Animator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Animators/VectorAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Clock.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/ClockBase.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/CompositePageTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/CrossFade.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Cue.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/DisposeAnimationInstanceSubject.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/BackEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/BackEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/BackEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/BounceEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/BounceEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/BounceEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/CircularEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/CircularEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/CircularEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/CubicEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/CubicEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/CubicEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/Easing.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/EasingTypeConverter.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/ElasticEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/ElasticEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/ElasticEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/ExponentialEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/ExponentialEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/ExponentialEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/IEasing.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/LinearEasing.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuadraticEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuadraticEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuadraticEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuarticEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuarticEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuarticEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuinticEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuinticEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/QuinticEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/SineEaseIn.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/SineEaseInOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/SineEaseOut.cs (100%) rename src/{Avalonia.Animation/Easing => Avalonia.Base/Animation/Easings}/SplineEasing.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/FillMode.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IAnimation.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IAnimationSetter.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IAnimator.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IClock.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IGlobalClock.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/IPageTransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/ITransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IterationCount.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/IterationCountTypeConverter.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/KeyFrame.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/KeyFrames.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/KeySpline.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/KeySplineTypeConverter.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/PageSlide.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/PlayState.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/PlaybackDirection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/RenderLoopClock.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Transition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/TransitionInstance.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/TransitionObservableBase.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Transitions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/BoxShadowsTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/BrushTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/ColorTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/CornerRadiusTransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Transitions/DoubleTransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Transitions/FloatTransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Transitions/IntegerTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/PointTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/RelativePointTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/SizeTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/ThicknessTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/TransformOperationsTransition.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Animation/Transitions/VectorTransition.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Utils/BounceEaseUtils.cs (100%) rename src/{Avalonia.Animation => Avalonia.Base/Animation}/Utils/EasingUtils.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Assets/BiDi.trie (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Assets/GraphemeBreak.trie (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Assets/UnicodeData.trie (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/AvaloniaPropertyExtensions.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/ClassBindingManager.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/CombinedGeometry.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/ChildNameScope.cs (99%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/Classes.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/INameScope.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/IPseudoClasses.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/IResourceDictionary.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/IResourceHost.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/IResourceNode.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/IResourceProvider.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/ISetInheritanceParent.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/ISetLogicalParent.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/Metadata/PseudoClassesAttribute.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/Metadata/TemplatePartAttribute.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/NameScope.cs (99%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/NameScopeEventArgs.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/NameScopeExtensions.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/NameScopeLocator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/PseudoClassesExtensions.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/ResourceDictionary.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/ResourceNodeExtensions.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Controls/ResourcesChangedEventArgs.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/CornerRadius.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Diagnostics/StyleDiagnostics.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Diagnostics/StyledElementExtensions.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/GeometryCollection.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/GeometryGroup.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/IDataContextProvider.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/INamed.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/IStyledElement.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/AccessKeyHandler.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Cursor.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/DataFormats.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/DataObject.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/DragDrop.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/DragDropDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/DragDropEffects.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/DragEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/FocusManager.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/GestureRecognizers/GestureRecognizerCollection.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/GestureRecognizers/IGestureRecognizer.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/GestureRecognizers/ScrollGestureRecognizer.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Gestures.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/GotFocusEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IAccessKeyHandler.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IClickableControl.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/ICloseable.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/ICommandSource.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/ICustomKeyboardNavigation.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IDataObject.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IFocusManager.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IFocusScope.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IInputDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IInputElement.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IInputManager.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IInputRoot.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IKeyboardDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IKeyboardNavigationHandler.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IMainMenu.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IMouseDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/INavigableContainer.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IPointer.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/IPointerDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/InputElement.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/InputExtensions.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/InputManager.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/InputMethod.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Key.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyBinding.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyGesture.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyboardDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyboardNavigation.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyboardNavigationHandler.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/KeyboardNavigationMode.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/MouseDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Navigation/FocusExtensions.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Navigation/TabNavigation.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/NavigationDirection.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/NavigationMethod.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Platform/IClipboard.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Platform/IPlatformDragSource.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Platform/PlatformHotkeyConfiguration.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Pointer.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/PointerDeltaEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/PointerEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/PointerPoint.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/PointerWheelEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/IDragDropDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawDragEvent.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawDragEventType.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawInputEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawKeyEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawMouseWheelEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawPointerEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawPointerGestureEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawSizeEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawTextInputEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/Raw/RawTouchEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/ScrollGestureEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TappedEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/ITextInputMethodClient.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/ITextInputMethodImpl.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/InputMethodManager.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/TextInputContentType.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/TextInputMethodClientRequestedEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/TextInputOptions.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInput/TransformTrackingHelper.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TextInputEventArgs.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/TouchDevice.cs (100%) rename src/{Avalonia.Input => Avalonia.Base/Input}/VectorEventArgs.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/EventRoute.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/IInteractive.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/Interactive.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/InteractiveExtensions.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/RoutedEvent.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/RoutedEventArgs.cs (100%) rename src/{Avalonia.Interactivity => Avalonia.Base/Interactivity}/RoutedEventRegistry.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/AttachedLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/EffectiveViewportChangedEventArgs.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/ElementManager.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/FlowLayoutAlgorithm.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/IEmbeddedLayoutRoot.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/IFlowLayoutAlgorithmDelegates.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/ILayoutManager.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/ILayoutRoot.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/ILayoutable.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/LayoutContext.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/LayoutContextAdapter.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/LayoutExtensions.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/LayoutHelper.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/LayoutManager.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/LayoutQueue.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/Layoutable.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/NonVirtualizingLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/NonVirtualizingLayoutContext.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/NonVirtualizingStackLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/Orientation.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/OrientationBasedMeasures.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/StackLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/StackLayoutState.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/UniformGridLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/UniformGridLayoutState.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/Utils/ListUtils.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/VirtualLayoutContextAdapter.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/VirtualizingLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/VirtualizingLayoutContext.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/WrapLayout/UvBounds.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/WrapLayout/UvMeasure.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/WrapLayout/WrapItem.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/WrapLayout/WrapLayout.cs (100%) rename src/{Avalonia.Layout => Avalonia.Base/Layout}/WrapLayout/WrapLayoutState.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/ChildIndexChangedEventArgs.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/ControlLocator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/IChildIndexProvider.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/ILogical.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/ILogicalRoot.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/LogicalExtensions.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/LogicalTree/LogicalTreeAttachmentEventArgs.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Matrix.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/AcrylicBackgroundSource.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/AlignmentX.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/AlignmentY.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ArcSegment.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BaselineAlignment.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BezierSegment .cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BoxShadow.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BoxShadows.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Brush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BrushConverter.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BrushExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/BrushMappingMode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Brushes.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/CharacterHit.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Color.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Colors.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ConicGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/DashStyle.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Drawing.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/DrawingContext.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/DrawingGroup.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/DrawingImage.cs (96%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/EllipseGeometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ExperimentalAcrylicMaterial.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FillRule.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FlowDirection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontFallback.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontFamily.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontManager.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontManagerOptions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontStretch.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontStyle.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FontWeight.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Fonts/FamilyNameCollection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Fonts/FontFamilyKey.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Fonts/FontFamilyLoader.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/FormattedText.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Geometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GeometryDrawing.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GlyphRun.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GlyphRunDrawing.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GlyphRunMetrics.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GlyphTypeface.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GradientSpreadMethod.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GradientStop.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/GradientStops.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/HslColor.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/HsvColor.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IAffectsRender.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IConicGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IDashStyle.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IExperimentalAcrylicMaterial.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IGradientStop.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IImage.cs (93%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IImageBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ILinearGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IMutableBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IMutableExperimentalAcrylicMaterial.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IMutableTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IPen.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IRadialGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ISolidColorBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ITileBrush.cs (97%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ITransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/IVisualBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ImageBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ImageDrawing.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/Bitmap.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/BitmapBlendingMode.cs (97%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/BitmapInterpolationMode.cs (93%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/CroppedBitmap.cs (98%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/IBitmap.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/RenderTargetBitmap.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Imaging/WriteableBitmap.cs (98%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableConicGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableDashStyle.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableGradientStop.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableImageBrush.cs (98%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableLinearGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutablePen.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableRadialGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableSolidColorBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableTextDecoration.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableTileBrush.cs (98%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Immutable/ImmutableVisualBrush.cs (94%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ImmutableExperimentalAcrylicMaterial.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/KnownColors.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/LineGeometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/LineSegment.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/LinearGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/MaterialExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/MatrixTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/MediaExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PathFigure.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PathGeometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PathGeometryCollections.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PathMarkupParser.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PathSegment.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Pen.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PenLineCap.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PenLineJoin.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PolyLineSegment.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PolylineGeometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/PreciseEllipticArcHelper.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/QuadraticBezierSegment .cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/RadialGradientBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/RectangleGeometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/RenderOptions.cs (97%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/RotateTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/ScaleTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/SkewTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/SolidColorBrush.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/StreamGeometry.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/StreamGeometryContext.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Stretch.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/StretchDirection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/SweepDirection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextAlignment.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextCollapsingCreateInfo.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextDecoration.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextDecorationCollection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextDecorationLocation.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextDecorationUnit.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextDecorations.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/DrawableTextRun.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/FontMetrics.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/FormattedTextSource.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/GenericTextParagraphProperties.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/GenericTextRunProperties.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/ITextSource.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/LogicalDirection.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/ShapeableTextCharacters.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/ShapedBuffer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/ShapedTextCharacters.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/SplitResult.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextBounds.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextCharacters.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextCollapsingProperties.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextEllipsisHelper.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextEndOfLine.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextEndOfParagraph.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextFormatter.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextFormatterImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextLayout.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextLine.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextLineBreak.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextLineImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextLineMetrics.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextParagraphProperties.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextRange.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextRun.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextRunProperties.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextShaper.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextShaperOptions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextTrailingCharacterEllipsis.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/TextTrailingWordEllipsis.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/BiDiAlgorithm.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/BiDiClass.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/BiDiData.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/BiDiPairedBracketType.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/BinaryReaderExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/Codepoint.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/CodepointEnumerator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/GeneralCategory.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/Grapheme.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/GraphemeBreakClass.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/GraphemeEnumerator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/LineBreak.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/LineBreakClass.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/LineBreakEnumerator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/LineBreakPairTable.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/Script.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/UnicodeData.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/UnicodeTrie.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/UnicodeTrieBuilder.Constants.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextHitTestResult.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextLeadingPrefixTrimming.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextNoneTrimming.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextTrailingTrimming.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextTrimming.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TextWrapping.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TileBrush.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Transform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TransformConverter.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TransformExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TransformGroup.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Transformation/InterpolationUtilities.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Transformation/TransformOperation.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Transformation/TransformOperations.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Transformation/TransformParser.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/TranslateTransform.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/Typeface.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/UnicodeRange.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Media/VisualBrush.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/PixelPoint.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/PixelRect.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/PixelSize.cs (100%) rename src/{Avalonia.Visuals/Media => Avalonia.Base}/PixelVector.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/AlphaFormat.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IBitmapImpl.cs (100%) rename src/{Avalonia.Input => Avalonia.Base}/Platform/ICursorFactory.cs (100%) rename src/{Avalonia.Input => Avalonia.Base}/Platform/ICursorImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IDrawingContextImpl.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IDrawingContextWithAcrylicLikeSupport.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IFontManagerImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IGeometryContext.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IGeometryImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IGlyphRunImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IGlyphTypefaceImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/ILockedFramebuffer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IModuleEnvironmentChecker.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IPlatformRenderInterface.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IPlatformSettings.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IRenderTarget.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IRenderTargetBitmapImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IStreamGeometryContextImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IStreamGeometryImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/ITextShaperImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/ITransformedGeometryImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/IWriteableBitmapImpl.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/LockedFramebuffer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/PathGeometryContext.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Platform/PixelFormat.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Point.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Points.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rect.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/RelativePoint.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/RelativeRect.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/RenderTargetCorruptedException.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/DefaultRenderTimer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/DeferredRenderer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/DirtyRects.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/DirtyVisuals.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/DisplayDirtyRect.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/DisplayDirtyRects.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/ICustomSimpleHitTest.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IDeferredRendererLock.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IRenderLoop.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IRenderLoopTask.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IRenderRoot.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IRenderTimer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IRenderer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IRendererFactory.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IVisualBrushInitialize.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/IVisualBrushRenderer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/ImmediateRenderer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/ManagedDeferredRendererLock.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/RenderLayer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/RenderLayers.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/RenderLoop.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/RendererBase.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/BitmapBlendModeNode.cs (98%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/BrushDrawOperation.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/ClipNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/CustomDrawOperation.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/DeferredDrawingContextImpl.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/DrawOperation.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/EllipseNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/ExperimentalAcrylicNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/GeometryBoundsHelper.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/GeometryClipNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/GeometryNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/GlyphRunNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/IDrawOperation.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/ISceneBuilder.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/IVisualNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/ImageNode.cs (99%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/LineBoundsHelper.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/LineNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/OpacityMaskNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/OpacityNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/RectangleNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/Scene.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/SceneBuilder.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/SceneLayer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/SceneLayers.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneGraph/VisualNode.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SceneInvalidatedEventArgs.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/SleepLoopRenderTimer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/UiThreadRenderTimer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/Utilities/TileBrushCalculator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Rendering/ZIndexComparer.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/RoundedRect.cs (100%) delete mode 100644 src/Avalonia.Base/Settings.StyleCop rename src/{Avalonia.Visuals => Avalonia.Base}/Size.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/StyledElement.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/StyledElementExtensions.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/AndActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/AndActivatorBuilder.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/IStyleActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/IStyleActivatorSink.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/NotActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/NthChildActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/OrActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/OrActivatorBuilder.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/PropertyEqualsActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/StyleActivatorBase.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Activators/StyleClassActivator.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/ChildSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/DescendentSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/IGlobalStyles.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/ISetter.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/ISetterInstance.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/ISetterValue.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/IStyle.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/IStyleHost.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/IStyleInstance.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/IStyleable.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/IStyler.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/ITemplate.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/ITemplatedControl.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/NotSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/NthChildSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/NthLastChildSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/OrSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/PropertyEqualsSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/PropertySetterBindingInstance.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/PropertySetterInstance.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/PropertySetterLazyInstance.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Selector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/SelectorMatch.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Selectors.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Setter.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Style.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/StyleInstance.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Styler.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/Styles.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/TemplateSelector.cs (100%) rename src/{Avalonia.Styling => Avalonia.Base}/Styling/TypeNameAndClassSelector.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Thickness.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/ArrayBuilder.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/ArraySlice.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/BinarySearchExtension.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/FrugalList.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/MappedArraySlice.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/ReadOnlySlice.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/Span.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Utilities/ValueSpan.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Vector.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/Visual.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/IHostedVisualTreeRoot.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/IVisual.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/IVisualTreeHost.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/IVisualWithRoundRectClip.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/TransformedBounds.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/VisualExtensions.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTree/VisualLocator.cs (100%) rename src/{Avalonia.Visuals => Avalonia.Base}/VisualTreeAttachmentEventArgs.cs (100%) delete mode 100644 src/Avalonia.Input/ApiCompatBaseline.txt delete mode 100644 src/Avalonia.Input/Avalonia.Input.csproj delete mode 100644 src/Avalonia.Input/Properties/AssemblyInfo.cs delete mode 100644 src/Avalonia.Interactivity/ApiCompatBaseline.txt delete mode 100644 src/Avalonia.Interactivity/Avalonia.Interactivity.csproj delete mode 100644 src/Avalonia.Layout/ApiCompatBaseline.txt delete mode 100644 src/Avalonia.Layout/Avalonia.Layout.csproj delete mode 100644 src/Avalonia.Layout/Properties/AssemblyInfo.cs delete mode 100644 src/Avalonia.Styling/ApiCompatBaseline.txt delete mode 100644 src/Avalonia.Styling/Avalonia.Styling.csproj delete mode 100644 src/Avalonia.Styling/Properties/AssemblyInfo.cs delete mode 100644 src/Avalonia.Visuals/ApiCompatBaseline.txt delete mode 100644 src/Avalonia.Visuals/Avalonia.Visuals.csproj delete mode 100644 src/Avalonia.Visuals/Properties/AssemblyInfo.cs delete mode 100644 tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj delete mode 100644 tests/Avalonia.Animation.UnitTests/Properties/AssemblyInfo.cs rename tests/{Avalonia.Animation.UnitTests => Avalonia.Base.UnitTests/Animation}/AnimatableTests.cs (99%) rename tests/{Avalonia.Animation.UnitTests => Avalonia.Base.UnitTests/Animation}/AnimationIterationTests.cs (97%) rename tests/{Avalonia.Animation.UnitTests => Avalonia.Base.UnitTests/Animation}/BrushTransitionTests.cs (93%) rename tests/{Avalonia.Animation.UnitTests => Avalonia.Base.UnitTests/Animation}/KeySplineTests.cs (97%) rename tests/{Avalonia.Animation.UnitTests => Avalonia.Base.UnitTests/Animation}/TestClock.cs (90%) rename tests/{Avalonia.Animation.UnitTests => Avalonia.Base.UnitTests/Animation}/TransitionsTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/CornerRadiusTests.cs (93%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/GesturesTests.cs (98%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/InputElement_Enabled.cs (98%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/InputElement_Focus.cs (99%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/KeyGestureTests.cs (97%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/KeyboardDeviceTests.cs (98%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/KeyboardNavigationTests_Custom.cs (99%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/KeyboardNavigationTests_Tab.cs (99%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/MouseDeviceTests.cs (98%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/PointerTests.cs (95%) rename tests/{Avalonia.Input.UnitTests => Avalonia.Base.UnitTests/Input}/TouchDeviceTests.cs (100%) rename tests/{Avalonia.Interactivity.UnitTests => Avalonia.Base.UnitTests/Interactivity}/InteractiveTests.cs (99%) rename tests/{Avalonia.Interactivity.UnitTests => Avalonia.Base.UnitTests/Interactivity}/RoutedEventRegistryTests.cs (95%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/ArrangeTests.cs (98%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/FullLayoutTests.cs (98%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutHelperTests.cs (92%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutManagerTests.cs (99%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutQueueTests.cs (98%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutTestControl.cs (93%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutTestRoot.cs (94%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutableTests.cs (99%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/LayoutableTests_EffectiveViewportChanged.cs (99%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/MeasureTests.cs (99%) rename tests/{Avalonia.Layout.UnitTests => Avalonia.Base.UnitTests/Layout}/NonVirtualizingStackLayoutTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/BoxShadowTests.cs (96%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/BrushTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/ColorTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/FontFamilyTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/FontManagerTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/Fonts/FamilyNameCollectionTests.cs (91%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/Fonts/FontFamilyKeyTests.cs (95%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/Fonts/FontFamilyLoaderTests.cs (94%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/GeometryGroupTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/GeometryTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/GlyphRunTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/ImageBrushTests.cs (78%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/LinearGradientBrushTests.cs (97%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/MatrixTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/PathMarkupParserTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/PathSegmentTests.cs (94%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/PenTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/PixelRectTests.cs (90%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/RectTests.cs (74%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/RectangleGeometryTests.cs (93%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/SolidColorBrushTests.cs (82%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextDecorationTests.cs (95%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/BiDiAlgorithmTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/BiDiClassTestDataGenerator.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/BiDiClassTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/BiDiTestDataGenerator.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/BreakPairTable.txt (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs (96%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/LineBreakEnumuratorTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/TestDataGenerator.cs (97%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/UnicodeDataGenerator.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/UnicodeDataGeneratorTests.cs (97%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TextFormatting/UnicodeEnumsGenerator.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TransformOperationsTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/TypefaceTests.cs (93%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/UnicodeRangeSegmentTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Media/UnicodeRangeTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/RectTests.cs (97%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/RelativePointTests.cs (89%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/RelativeRectComparer.cs (94%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/RelativeRectTests.cs (93%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/RenderTests_Culling.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/CustomHitTestBorder.cs (84%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/DeferredRendererTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/DeferredRendererTests_HitTesting.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/ImmediateRendererTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/ImmediateRendererTests_HitTesting.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/RenderLoopTests.cs (97%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/DrawOperationTests.cs (96%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/EllipseNodeTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/LineNodeTests.cs (100%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/SceneBuilderTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/SceneBuilderTests_Layers.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/SceneLayersTests.cs (89%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/SceneTests.cs (90%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/SceneGraph/VisualNodeTests.cs (97%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Rendering/Utilities/TileBrushCalculatorTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/SizeTests.cs (92%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/ResourceDictionaryTests.cs (99%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Child.cs (97%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Class.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Descendent.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Multiple.cs (99%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Name.cs (96%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Not.cs (97%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_NthChild.cs (99%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_NthLastChild.cs (99%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_OfType.cs (95%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Or.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_PropertyEquals.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SelectorTests_Template.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/SetterTests.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/StyleActivatorExtensions.cs (97%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/StyleTests.cs (99%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/StyledElementTests.cs (99%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/StyledElementTests_Resources.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/StylesTests.cs (98%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/TestObservable.cs (90%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/TestObserver.cs (96%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/TestSelectors.cs (90%) rename tests/{Avalonia.Styling.UnitTests => Avalonia.Base.UnitTests/Styling}/TestSubject.cs (96%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/TestVisual.cs (94%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/ThicknessTests.cs (93%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/Utilities/ReadOnlySpanTests.cs (94%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/VectorTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/VisualExtensionsTests.cs (99%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/VisualTests.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/VisualTree/MockRenderInterface.cs (98%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/VisualTree/TransformedBoundsTests.cs (94%) rename tests/{Avalonia.Visuals.UnitTests => Avalonia.Base.UnitTests}/VisualTree/VisualExtensions_GetVisualsAt.cs (98%) delete mode 100644 tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj delete mode 100644 tests/Avalonia.Input.UnitTests/Properties/AssemblyInfo.cs delete mode 100644 tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj delete mode 100644 tests/Avalonia.Interactivity.UnitTests/Properties/AssemblyInfo.cs delete mode 100644 tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj delete mode 100644 tests/Avalonia.Layout.UnitTests/Properties/AssemblyInfo.cs delete mode 100644 tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj delete mode 100644 tests/Avalonia.Styling.UnitTests/Properties/AssemblyInfo.cs delete mode 100644 tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj delete mode 100644 tests/Avalonia.Visuals.UnitTests/Properties/AssemblyInfo.cs diff --git a/Avalonia.sln b/Avalonia.sln index 5043f474c2..a216229a5b 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -5,48 +5,26 @@ VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Visuals", "src\Avalonia.Visuals\Avalonia.Visuals.csproj", "{EB582467-6ABB-43A1-B052-E981BA910E3A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Layout", "src\Avalonia.Layout\Avalonia.Layout.csproj", "{42472427-4774-4C81-8AFF-9F27B8E31721}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windows", "Windows", "{B39A8919-9F95-48FE-AD7B-76E08B509888}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Win32", "src\Windows\Avalonia.Win32\Avalonia.Win32.csproj", "{811A76CF-1CF6-440F-963B-BBE31BD72A82}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Direct2D1", "src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj", "{3E908F67-5543-4879-A1DC-08EACE79B3CD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Input", "src\Avalonia.Input\Avalonia.Input.csproj", "{62024B2D-53EB-4638-B26B-85EEAA54866E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Interactivity", "src\Avalonia.Interactivity\Avalonia.Interactivity.csproj", "{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Controls", "src\Avalonia.Controls\Avalonia.Controls.csproj", "{D2221C82-4A25-4583-9B43-D791E3F6820C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Styling", "src\Avalonia.Styling\Avalonia.Styling.csproj", "{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Themes.Default", "src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj", "{3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Diagnostics", "src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj", "{7062AE20-5DCC-4442-9645-8195BDECE63E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Styling.UnitTests", "tests\Avalonia.Styling.UnitTests\Avalonia.Styling.UnitTests.csproj", "{47ECDF59-DEF8-4C53-87B1-2098A3429059}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Controls.UnitTests", "tests\Avalonia.Controls.UnitTests\Avalonia.Controls.UnitTests.csproj", "{5CCB5571-7C30-4E7D-967D-0E2158EBD91F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Visuals.UnitTests", "tests\Avalonia.Visuals.UnitTests\Avalonia.Visuals.UnitTests.csproj", "{76716382-3159-460E-BDA6-C5715CF606D7}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Base.UnitTests", "tests\Avalonia.Base.UnitTests\Avalonia.Base.UnitTests.csproj", "{2905FF23-53FB-45E6-AA49-6AF47A172056}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Layout.UnitTests", "tests\Avalonia.Layout.UnitTests\Avalonia.Layout.UnitTests.csproj", "{DB070A10-BF39-4752-8456-86E9D5928478}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Interactivity.UnitTests", "tests\Avalonia.Interactivity.UnitTests\Avalonia.Interactivity.UnitTests.csproj", "{08478EF5-44E8-42E9-92D6-15E00EC038D8}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Direct2D1.RenderTests", "tests\Avalonia.Direct2D1.RenderTests\Avalonia.Direct2D1.RenderTests.csproj", "{DABFD304-D6A4-4752-8123-C2CCF7AC7831}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Input.UnitTests", "tests\Avalonia.Input.UnitTests\Avalonia.Input.UnitTests.csproj", "{AC18926A-E784-40FE-B09D-BB0FE2B599F0}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Direct2D1.UnitTests", "tests\Avalonia.Direct2D1.UnitTests\Avalonia.Direct2D1.UnitTests.csproj", "{EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Markup.Xaml.UnitTests", "tests\Avalonia.Markup.Xaml.UnitTests\Avalonia.Markup.Xaml.UnitTests.csproj", "{99135EAB-653D-47E4-A378-C96E1278CA44}" @@ -185,8 +163,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Build.Tasks", "src EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "nukebuild\_build.csproj", "{3F00BC43-5095-477F-93D8-E65B08179A00}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Animation.UnitTests", "tests\Avalonia.Animation.UnitTests\Avalonia.Animation.UnitTests.csproj", "{AF227847-E65C-4BE9-BCE9-B551357788E0}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.X11", "src\Avalonia.X11\Avalonia.X11.csproj", "{41B02319-965D-4945-8005-C1A3D1224165}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlatformSanityChecks", "samples\PlatformSanityChecks\PlatformSanityChecks.csproj", "{D775DECB-4E00-4ED5-A75A-5FCE58ADFF0B}" @@ -279,54 +255,6 @@ Global {B09B78D8-9B26-48B0-9149-D64A2F120F3F}.Release|iPhone.Build.0 = Release|Any CPU {B09B78D8-9B26-48B0-9149-D64A2F120F3F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {B09B78D8-9B26-48B0-9149-D64A2F120F3F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.AppStore|Any CPU.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.AppStore|iPhone.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Debug|iPhone.Build.0 = Debug|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Release|Any CPU.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Release|iPhone.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Release|iPhone.Build.0 = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EB582467-6ABB-43A1-B052-E981BA910E3A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.AppStore|Any CPU.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.AppStore|iPhone.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Debug|iPhone.Build.0 = Debug|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Release|Any CPU.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Release|iPhone.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Release|iPhone.Build.0 = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {42472427-4774-4C81-8AFF-9F27B8E31721}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {811A76CF-1CF6-440F-963B-BBE31BD72A82}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {811A76CF-1CF6-440F-963B-BBE31BD72A82}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {811A76CF-1CF6-440F-963B-BBE31BD72A82}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -375,54 +303,6 @@ Global {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhone.Build.0 = Release|Any CPU {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.AppStore|Any CPU.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.AppStore|iPhone.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Debug|iPhone.Build.0 = Debug|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Release|Any CPU.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Release|iPhone.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Release|iPhone.Build.0 = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {62024B2D-53EB-4638-B26B-85EEAA54866E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.AppStore|Any CPU.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.AppStore|iPhone.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Debug|iPhone.Build.0 = Debug|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Release|Any CPU.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Release|iPhone.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Release|iPhone.Build.0 = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {D2221C82-4A25-4583-9B43-D791E3F6820C}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {D2221C82-4A25-4583-9B43-D791E3F6820C}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {D2221C82-4A25-4583-9B43-D791E3F6820C}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -447,30 +327,6 @@ Global {D2221C82-4A25-4583-9B43-D791E3F6820C}.Release|iPhone.Build.0 = Release|Any CPU {D2221C82-4A25-4583-9B43-D791E3F6820C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {D2221C82-4A25-4583-9B43-D791E3F6820C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.AppStore|Any CPU.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.AppStore|iPhone.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Debug|iPhone.Build.0 = Debug|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Release|Any CPU.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Release|iPhone.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Release|iPhone.Build.0 = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -519,54 +375,6 @@ Global {7062AE20-5DCC-4442-9645-8195BDECE63E}.Release|iPhone.Build.0 = Release|Any CPU {7062AE20-5DCC-4442-9645-8195BDECE63E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {7062AE20-5DCC-4442-9645-8195BDECE63E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.AppStore|Any CPU.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.AppStore|iPhone.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Debug|iPhone.Build.0 = Debug|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Release|Any CPU.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Release|iPhone.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Release|iPhone.Build.0 = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {D211E587-D8BC-45B9-95A4-F297C8FA5200}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.AppStore|Any CPU.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.AppStore|iPhone.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Debug|iPhone.Build.0 = Debug|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Release|Any CPU.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Release|iPhone.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Release|iPhone.Build.0 = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {47ECDF59-DEF8-4C53-87B1-2098A3429059}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {5CCB5571-7C30-4E7D-967D-0E2158EBD91F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {5CCB5571-7C30-4E7D-967D-0E2158EBD91F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {5CCB5571-7C30-4E7D-967D-0E2158EBD91F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -591,30 +399,6 @@ Global {5CCB5571-7C30-4E7D-967D-0E2158EBD91F}.Release|iPhone.Build.0 = Release|Any CPU {5CCB5571-7C30-4E7D-967D-0E2158EBD91F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {5CCB5571-7C30-4E7D-967D-0E2158EBD91F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.AppStore|Any CPU.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.AppStore|iPhone.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Debug|iPhone.Build.0 = Debug|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Release|Any CPU.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Release|iPhone.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Release|iPhone.Build.0 = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {76716382-3159-460E-BDA6-C5715CF606D7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2905FF23-53FB-45E6-AA49-6AF47A172056}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {2905FF23-53FB-45E6-AA49-6AF47A172056}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {2905FF23-53FB-45E6-AA49-6AF47A172056}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -639,54 +423,6 @@ Global {2905FF23-53FB-45E6-AA49-6AF47A172056}.Release|iPhone.Build.0 = Release|Any CPU {2905FF23-53FB-45E6-AA49-6AF47A172056}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {2905FF23-53FB-45E6-AA49-6AF47A172056}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.AppStore|Any CPU.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.AppStore|iPhone.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|iPhone.Build.0 = Debug|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Release|Any CPU.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Release|iPhone.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Release|iPhone.Build.0 = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DB070A10-BF39-4752-8456-86E9D5928478}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.AppStore|Any CPU.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.AppStore|iPhone.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Debug|iPhone.Build.0 = Debug|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Release|Any CPU.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Release|iPhone.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Release|iPhone.Build.0 = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {08478EF5-44E8-42E9-92D6-15E00EC038D8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {DABFD304-D6A4-4752-8123-C2CCF7AC7831}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {DABFD304-D6A4-4752-8123-C2CCF7AC7831}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {DABFD304-D6A4-4752-8123-C2CCF7AC7831}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -711,30 +447,6 @@ Global {DABFD304-D6A4-4752-8123-C2CCF7AC7831}.Release|iPhone.Build.0 = Release|Any CPU {DABFD304-D6A4-4752-8123-C2CCF7AC7831}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {DABFD304-D6A4-4752-8123-C2CCF7AC7831}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.AppStore|Any CPU.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.AppStore|iPhone.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Debug|iPhone.Build.0 = Debug|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Release|Any CPU.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Release|iPhone.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Release|iPhone.Build.0 = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AC18926A-E784-40FE-B09D-BB0FE2B599F0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -1641,30 +1353,6 @@ Global {3F00BC43-5095-477F-93D8-E65B08179A00}.Release|iPhone.Build.0 = Release|Any CPU {3F00BC43-5095-477F-93D8-E65B08179A00}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {3F00BC43-5095-477F-93D8-E65B08179A00}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|Any CPU.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhone.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhone.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhone.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|Any CPU.Build.0 = Release|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhone.ActiveCfg = Release|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhone.Build.0 = Release|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {41B02319-965D-4945-8005-C1A3D1224165}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU {41B02319-965D-4945-8005-C1A3D1224165}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {41B02319-965D-4945-8005-C1A3D1224165}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU @@ -2272,14 +1960,9 @@ Global GlobalSection(NestedProjects) = preSolution {811A76CF-1CF6-440F-963B-BBE31BD72A82} = {B39A8919-9F95-48FE-AD7B-76E08B509888} {3E908F67-5543-4879-A1DC-08EACE79B3CD} = {B39A8919-9F95-48FE-AD7B-76E08B509888} - {47ECDF59-DEF8-4C53-87B1-2098A3429059} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {5CCB5571-7C30-4E7D-967D-0E2158EBD91F} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} - {76716382-3159-460E-BDA6-C5715CF606D7} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {2905FF23-53FB-45E6-AA49-6AF47A172056} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} - {DB070A10-BF39-4752-8456-86E9D5928478} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} - {08478EF5-44E8-42E9-92D6-15E00EC038D8} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {DABFD304-D6A4-4752-8123-C2CCF7AC7831} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} - {AC18926A-E784-40FE-B09D-BB0FE2B599F0} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {99135EAB-653D-47E4-A378-C96E1278CA44} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {3E53A01A-B331-47F3-B828-4A5717E77A24} = {8B6A8209-894F-4BA1-B880-965FD453982C} @@ -2313,7 +1996,6 @@ Global {E1240B49-7B4B-4371-A00E-068778C5CF0B} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {D49233F8-F29C-47DD-9975-C4C9E4502720} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C} {3C471044-3640-45E3-B1B2-16D2FF8399EE} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C} - {AF227847-E65C-4BE9-BCE9-B551357788E0} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {41B02319-965D-4945-8005-C1A3D1224165} = {86C53C40-57AA-45B8-AD42-FAE0EFDF0F2B} {D775DECB-4E00-4ED5-A75A-5FCE58ADFF0B} = {9B9E3891-2366-4253-A952-D08BCEB71098} {AF915D5C-AB00-4EA0-B5E6-001F4AE84E68} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} diff --git a/Directory.Build.props b/Directory.Build.props index 835decc672..97781b7517 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,5 +5,6 @@ false false + False diff --git a/build/CoreLibraries.props b/build/CoreLibraries.props index 6bf69603c0..314d38190a 100644 --- a/build/CoreLibraries.props +++ b/build/CoreLibraries.props @@ -1,14 +1,8 @@ - - - - - - diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 72d90abbf3..9fcb9d6b7f 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -214,17 +214,11 @@ partial class Build : NukeBuild .DependsOn(Compile) .Executes(() => { - RunCoreTest("Avalonia.Animation.UnitTests"); RunCoreTest("Avalonia.Base.UnitTests"); RunCoreTest("Avalonia.Controls.UnitTests"); RunCoreTest("Avalonia.Controls.DataGrid.UnitTests"); - RunCoreTest("Avalonia.Input.UnitTests"); - RunCoreTest("Avalonia.Interactivity.UnitTests"); - RunCoreTest("Avalonia.Layout.UnitTests"); RunCoreTest("Avalonia.Markup.UnitTests"); RunCoreTest("Avalonia.Markup.Xaml.UnitTests"); - RunCoreTest("Avalonia.Styling.UnitTests"); - RunCoreTest("Avalonia.Visuals.UnitTests"); RunCoreTest("Avalonia.Skia.UnitTests"); RunCoreTest("Avalonia.ReactiveUI.UnitTests"); }); diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj index 9777bb46c3..8d2ead054c 100644 --- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj +++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj @@ -41,7 +41,47 @@ + + {7b92af71-6287-4693-9dcb-bd5b6e927e23} + Avalonia.Android + + + {b09b78d8-9b26-48b0-9149-d64a2f120f3f} + Avalonia.Base + + + {d2221c82-4a25-4583-9b43-d791e3f6820c} + Avalonia.Controls + + + {7062ae20-5dcc-4442-9645-8195bdece63e} + Avalonia.Diagnostics + + + {3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f} + Avalonia.Themes.Default + + + {3e53a01a-b331-47f3-b828-4a5717e77a24} + Avalonia.Markup.Xaml + + + {6417e941-21bc-467b-a771-0de389353ce6} + Avalonia.Markup + + + {7d2d3083-71dd-4cc9-8907-39a0d86fb322} + Avalonia.Skia + + + {d0a739b9-3c68-4ba6-a328-41606954b6bd} + ControlCatalog + + + + + diff --git a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj index 12d1d5645e..d4f10b3580 100644 --- a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj +++ b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj @@ -13,4 +13,53 @@ + + + + + + + + + {4488ad85-1495-4809-9aa4-ddfe0a48527e} + Avalonia.iOS + + + {3E53A01A-B331-47F3-B828-4A5717E77A24} + Avalonia.Markup.Xaml + + + {6417E941-21BC-467B-A771-0DE389353CE6} + Avalonia.Markup + + + {B09B78D8-9B26-48B0-9149-D64A2F120F3F} + Avalonia.Base + + + {D2221C82-4A25-4583-9B43-D791E3F6820C} + Avalonia.Controls + + + {7062AE20-5DCC-4442-9645-8195BDECE63E} + Avalonia.Diagnostics + + + {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F} + Avalonia.Themes.Default + + + {7d2d3083-71dd-4cc9-8907-39a0d86fb322} + Avalonia.Skia + + + {d0a739b9-3c68-4ba6-a328-41606954b6bd} + ControlCatalog + + + + + + + diff --git a/samples/RenderDemo/Pages/PathMeasurementPage.cs b/samples/RenderDemo/Pages/PathMeasurementPage.cs index 212377deae..cc5125609c 100644 --- a/samples/RenderDemo/Pages/PathMeasurementPage.cs +++ b/samples/RenderDemo/Pages/PathMeasurementPage.cs @@ -1,15 +1,9 @@ -using System; -using System.Diagnostics; -using System.Drawing.Drawing2D; -using System.Security.Cryptography; using Avalonia; using Avalonia.Controls; using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Media.Immutable; -using Avalonia.Threading; -using Avalonia.Visuals.Media.Imaging; namespace RenderDemo.Pages { diff --git a/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs b/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs index f263786ab7..f365b59c20 100644 --- a/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs +++ b/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs @@ -5,7 +5,6 @@ using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Threading; -using Avalonia.Visuals.Media.Imaging; namespace RenderDemo.Pages { diff --git a/samples/RenderDemo/RenderDemo.csproj b/samples/RenderDemo/RenderDemo.csproj index 3d5aee49e9..18a4ee5662 100644 --- a/samples/RenderDemo/RenderDemo.csproj +++ b/samples/RenderDemo/RenderDemo.csproj @@ -4,7 +4,7 @@ net6.0 - + TextFormatterPage.axaml Code diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj index db0bb01410..ee41b9f354 100644 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj @@ -40,4 +40,40 @@ + + + {7b92af71-6287-4693-9dcb-bd5b6e927e23} + Avalonia.Android + + + {3e53a01a-b331-47f3-b828-4a5717e77a24} + Avalonia.Markup.Xaml + + + {b09b78d8-9b26-48b0-9149-d64a2f120f3f} + Avalonia.Base + + + {d2221c82-4a25-4583-9b43-d791e3f6820c} + Avalonia.Controls + + + {7062ae20-5dcc-4442-9645-8195bdece63e} + Avalonia.Diagnostics + + + {3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f} + Avalonia.Themes.Default + + + {7d2d3083-71dd-4cc9-8907-39a0d86fb322} + Avalonia.Skia + + + + + + + + diff --git a/src/Avalonia.Animation/ApiCompatBaseline.txt b/src/Avalonia.Animation/ApiCompatBaseline.txt deleted file mode 100644 index 973698f872..0000000000 --- a/src/Avalonia.Animation/ApiCompatBaseline.txt +++ /dev/null @@ -1,5 +0,0 @@ -Compat issues with assembly Avalonia.Animation: -InterfacesShouldHaveSameMembers : Interface member 'public System.Threading.Tasks.Task Avalonia.Animation.IAnimation.RunAsync(Avalonia.Animation.Animatable, Avalonia.Animation.IClock)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public System.Threading.Tasks.Task Avalonia.Animation.IAnimation.RunAsync(Avalonia.Animation.Animatable, Avalonia.Animation.IClock)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Threading.Tasks.Task Avalonia.Animation.IAnimation.RunAsync(Avalonia.Animation.Animatable, Avalonia.Animation.IClock, System.Threading.CancellationToken)' is present in the implementation but not in the contract. -Total Issues: 3 diff --git a/src/Avalonia.Animation/Avalonia.Animation.csproj b/src/Avalonia.Animation/Avalonia.Animation.csproj deleted file mode 100644 index 80726f2884..0000000000 --- a/src/Avalonia.Animation/Avalonia.Animation.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - net6.0;netstandard2.0 - - - - - - - - - - - - diff --git a/src/Avalonia.Animation/Properties/AssemblyInfo.cs b/src/Avalonia.Animation/Properties/AssemblyInfo.cs deleted file mode 100644 index 6b539b075b..0000000000 --- a/src/Avalonia.Animation/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Avalonia.Metadata; -using System.Runtime.CompilerServices; - -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation.Easings")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation.Animators")] - -[assembly: InternalsVisibleTo("Avalonia.LeakTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Animation.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] diff --git a/src/Avalonia.Animation/Animatable.cs b/src/Avalonia.Base/Animation/Animatable.cs similarity index 100% rename from src/Avalonia.Animation/Animatable.cs rename to src/Avalonia.Base/Animation/Animatable.cs diff --git a/src/Avalonia.Animation/Animation.cs b/src/Avalonia.Base/Animation/Animation.cs similarity index 100% rename from src/Avalonia.Animation/Animation.cs rename to src/Avalonia.Base/Animation/Animation.cs diff --git a/src/Avalonia.Animation/AnimationInstance`1.cs b/src/Avalonia.Base/Animation/AnimationInstance`1.cs similarity index 100% rename from src/Avalonia.Animation/AnimationInstance`1.cs rename to src/Avalonia.Base/Animation/AnimationInstance`1.cs diff --git a/src/Avalonia.Animation/AnimatorDrivenTransition.cs b/src/Avalonia.Base/Animation/AnimatorDrivenTransition.cs similarity index 100% rename from src/Avalonia.Animation/AnimatorDrivenTransition.cs rename to src/Avalonia.Base/Animation/AnimatorDrivenTransition.cs diff --git a/src/Avalonia.Animation/AnimatorKeyFrame.cs b/src/Avalonia.Base/Animation/AnimatorKeyFrame.cs similarity index 100% rename from src/Avalonia.Animation/AnimatorKeyFrame.cs rename to src/Avalonia.Base/Animation/AnimatorKeyFrame.cs diff --git a/src/Avalonia.Animation/AnimatorTransitionObservable.cs b/src/Avalonia.Base/Animation/AnimatorTransitionObservable.cs similarity index 100% rename from src/Avalonia.Animation/AnimatorTransitionObservable.cs rename to src/Avalonia.Base/Animation/AnimatorTransitionObservable.cs diff --git a/src/Avalonia.Animation/Animators/Animator`1.cs b/src/Avalonia.Base/Animation/Animators/Animator`1.cs similarity index 100% rename from src/Avalonia.Animation/Animators/Animator`1.cs rename to src/Avalonia.Base/Animation/Animators/Animator`1.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/BaseBrushAnimator.cs b/src/Avalonia.Base/Animation/Animators/BaseBrushAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/BaseBrushAnimator.cs rename to src/Avalonia.Base/Animation/Animators/BaseBrushAnimator.cs diff --git a/src/Avalonia.Animation/Animators/BoolAnimator.cs b/src/Avalonia.Base/Animation/Animators/BoolAnimator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/BoolAnimator.cs rename to src/Avalonia.Base/Animation/Animators/BoolAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/BoxShadowAnimator.cs b/src/Avalonia.Base/Animation/Animators/BoxShadowAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/BoxShadowAnimator.cs rename to src/Avalonia.Base/Animation/Animators/BoxShadowAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/BoxShadowsAnimator.cs b/src/Avalonia.Base/Animation/Animators/BoxShadowsAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/BoxShadowsAnimator.cs rename to src/Avalonia.Base/Animation/Animators/BoxShadowsAnimator.cs diff --git a/src/Avalonia.Animation/Animators/ByteAnimator.cs b/src/Avalonia.Base/Animation/Animators/ByteAnimator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/ByteAnimator.cs rename to src/Avalonia.Base/Animation/Animators/ByteAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/ColorAnimator.cs b/src/Avalonia.Base/Animation/Animators/ColorAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/ColorAnimator.cs rename to src/Avalonia.Base/Animation/Animators/ColorAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/CornerRadiusAnimator.cs b/src/Avalonia.Base/Animation/Animators/CornerRadiusAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/CornerRadiusAnimator.cs rename to src/Avalonia.Base/Animation/Animators/CornerRadiusAnimator.cs diff --git a/src/Avalonia.Animation/Animators/DecimalAnimator.cs b/src/Avalonia.Base/Animation/Animators/DecimalAnimator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/DecimalAnimator.cs rename to src/Avalonia.Base/Animation/Animators/DecimalAnimator.cs diff --git a/src/Avalonia.Animation/Animators/DoubleAnimator.cs b/src/Avalonia.Base/Animation/Animators/DoubleAnimator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/DoubleAnimator.cs rename to src/Avalonia.Base/Animation/Animators/DoubleAnimator.cs diff --git a/src/Avalonia.Animation/Animators/FloatAnimator.cs b/src/Avalonia.Base/Animation/Animators/FloatAnimator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/FloatAnimator.cs rename to src/Avalonia.Base/Animation/Animators/FloatAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/GradientBrushAnimator.cs b/src/Avalonia.Base/Animation/Animators/GradientBrushAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/GradientBrushAnimator.cs rename to src/Avalonia.Base/Animation/Animators/GradientBrushAnimator.cs diff --git a/src/Avalonia.Animation/Animators/Int16Animator.cs b/src/Avalonia.Base/Animation/Animators/Int16Animator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/Int16Animator.cs rename to src/Avalonia.Base/Animation/Animators/Int16Animator.cs diff --git a/src/Avalonia.Animation/Animators/Int32Animator.cs b/src/Avalonia.Base/Animation/Animators/Int32Animator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/Int32Animator.cs rename to src/Avalonia.Base/Animation/Animators/Int32Animator.cs diff --git a/src/Avalonia.Animation/Animators/Int64Animator.cs b/src/Avalonia.Base/Animation/Animators/Int64Animator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/Int64Animator.cs rename to src/Avalonia.Base/Animation/Animators/Int64Animator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/PointAnimator.cs b/src/Avalonia.Base/Animation/Animators/PointAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/PointAnimator.cs rename to src/Avalonia.Base/Animation/Animators/PointAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/RectAnimator.cs b/src/Avalonia.Base/Animation/Animators/RectAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/RectAnimator.cs rename to src/Avalonia.Base/Animation/Animators/RectAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/RelativePointAnimator.cs b/src/Avalonia.Base/Animation/Animators/RelativePointAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/RelativePointAnimator.cs rename to src/Avalonia.Base/Animation/Animators/RelativePointAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/SizeAnimator.cs b/src/Avalonia.Base/Animation/Animators/SizeAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/SizeAnimator.cs rename to src/Avalonia.Base/Animation/Animators/SizeAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/SolidColorBrushAnimator.cs b/src/Avalonia.Base/Animation/Animators/SolidColorBrushAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/SolidColorBrushAnimator.cs rename to src/Avalonia.Base/Animation/Animators/SolidColorBrushAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/ThicknessAnimator.cs b/src/Avalonia.Base/Animation/Animators/ThicknessAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/ThicknessAnimator.cs rename to src/Avalonia.Base/Animation/Animators/ThicknessAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/TransformAnimator.cs b/src/Avalonia.Base/Animation/Animators/TransformAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/TransformAnimator.cs rename to src/Avalonia.Base/Animation/Animators/TransformAnimator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/TransformOperationsAnimator.cs b/src/Avalonia.Base/Animation/Animators/TransformOperationsAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/TransformOperationsAnimator.cs rename to src/Avalonia.Base/Animation/Animators/TransformOperationsAnimator.cs diff --git a/src/Avalonia.Animation/Animators/UInt16Animator.cs b/src/Avalonia.Base/Animation/Animators/UInt16Animator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/UInt16Animator.cs rename to src/Avalonia.Base/Animation/Animators/UInt16Animator.cs diff --git a/src/Avalonia.Animation/Animators/UInt32Animator.cs b/src/Avalonia.Base/Animation/Animators/UInt32Animator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/UInt32Animator.cs rename to src/Avalonia.Base/Animation/Animators/UInt32Animator.cs diff --git a/src/Avalonia.Animation/Animators/UInt64Animator.cs b/src/Avalonia.Base/Animation/Animators/UInt64Animator.cs similarity index 100% rename from src/Avalonia.Animation/Animators/UInt64Animator.cs rename to src/Avalonia.Base/Animation/Animators/UInt64Animator.cs diff --git a/src/Avalonia.Visuals/Animation/Animators/VectorAnimator.cs b/src/Avalonia.Base/Animation/Animators/VectorAnimator.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Animators/VectorAnimator.cs rename to src/Avalonia.Base/Animation/Animators/VectorAnimator.cs diff --git a/src/Avalonia.Animation/Clock.cs b/src/Avalonia.Base/Animation/Clock.cs similarity index 100% rename from src/Avalonia.Animation/Clock.cs rename to src/Avalonia.Base/Animation/Clock.cs diff --git a/src/Avalonia.Animation/ClockBase.cs b/src/Avalonia.Base/Animation/ClockBase.cs similarity index 100% rename from src/Avalonia.Animation/ClockBase.cs rename to src/Avalonia.Base/Animation/ClockBase.cs diff --git a/src/Avalonia.Visuals/Animation/CompositePageTransition.cs b/src/Avalonia.Base/Animation/CompositePageTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/CompositePageTransition.cs rename to src/Avalonia.Base/Animation/CompositePageTransition.cs diff --git a/src/Avalonia.Visuals/Animation/CrossFade.cs b/src/Avalonia.Base/Animation/CrossFade.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/CrossFade.cs rename to src/Avalonia.Base/Animation/CrossFade.cs diff --git a/src/Avalonia.Animation/Cue.cs b/src/Avalonia.Base/Animation/Cue.cs similarity index 100% rename from src/Avalonia.Animation/Cue.cs rename to src/Avalonia.Base/Animation/Cue.cs diff --git a/src/Avalonia.Animation/DisposeAnimationInstanceSubject.cs b/src/Avalonia.Base/Animation/DisposeAnimationInstanceSubject.cs similarity index 100% rename from src/Avalonia.Animation/DisposeAnimationInstanceSubject.cs rename to src/Avalonia.Base/Animation/DisposeAnimationInstanceSubject.cs diff --git a/src/Avalonia.Animation/Easing/BackEaseIn.cs b/src/Avalonia.Base/Animation/Easings/BackEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/BackEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/BackEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/BackEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/BackEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/BackEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/BackEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/BackEaseOut.cs b/src/Avalonia.Base/Animation/Easings/BackEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/BackEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/BackEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/BounceEaseIn.cs b/src/Avalonia.Base/Animation/Easings/BounceEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/BounceEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/BounceEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/BounceEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/BounceEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/BounceEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/BounceEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/BounceEaseOut.cs b/src/Avalonia.Base/Animation/Easings/BounceEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/BounceEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/BounceEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/CircularEaseIn.cs b/src/Avalonia.Base/Animation/Easings/CircularEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/CircularEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/CircularEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/CircularEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/CircularEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/CircularEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/CircularEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/CircularEaseOut.cs b/src/Avalonia.Base/Animation/Easings/CircularEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/CircularEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/CircularEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/CubicEaseIn.cs b/src/Avalonia.Base/Animation/Easings/CubicEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/CubicEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/CubicEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/CubicEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/CubicEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/CubicEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/CubicEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/CubicEaseOut.cs b/src/Avalonia.Base/Animation/Easings/CubicEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/CubicEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/CubicEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/Easing.cs b/src/Avalonia.Base/Animation/Easings/Easing.cs similarity index 100% rename from src/Avalonia.Animation/Easing/Easing.cs rename to src/Avalonia.Base/Animation/Easings/Easing.cs diff --git a/src/Avalonia.Animation/Easing/EasingTypeConverter.cs b/src/Avalonia.Base/Animation/Easings/EasingTypeConverter.cs similarity index 100% rename from src/Avalonia.Animation/Easing/EasingTypeConverter.cs rename to src/Avalonia.Base/Animation/Easings/EasingTypeConverter.cs diff --git a/src/Avalonia.Animation/Easing/ElasticEaseIn.cs b/src/Avalonia.Base/Animation/Easings/ElasticEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/ElasticEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/ElasticEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/ElasticEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/ElasticEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/ElasticEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/ElasticEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/ElasticEaseOut.cs b/src/Avalonia.Base/Animation/Easings/ElasticEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/ElasticEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/ElasticEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/ExponentialEaseIn.cs b/src/Avalonia.Base/Animation/Easings/ExponentialEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/ExponentialEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/ExponentialEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/ExponentialEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/ExponentialEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/ExponentialEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/ExponentialEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/ExponentialEaseOut.cs b/src/Avalonia.Base/Animation/Easings/ExponentialEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/ExponentialEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/ExponentialEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/IEasing.cs b/src/Avalonia.Base/Animation/Easings/IEasing.cs similarity index 100% rename from src/Avalonia.Animation/Easing/IEasing.cs rename to src/Avalonia.Base/Animation/Easings/IEasing.cs diff --git a/src/Avalonia.Animation/Easing/LinearEasing.cs b/src/Avalonia.Base/Animation/Easings/LinearEasing.cs similarity index 100% rename from src/Avalonia.Animation/Easing/LinearEasing.cs rename to src/Avalonia.Base/Animation/Easings/LinearEasing.cs diff --git a/src/Avalonia.Animation/Easing/QuadraticEaseIn.cs b/src/Avalonia.Base/Animation/Easings/QuadraticEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuadraticEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/QuadraticEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/QuadraticEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/QuadraticEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuadraticEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/QuadraticEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/QuadraticEaseOut.cs b/src/Avalonia.Base/Animation/Easings/QuadraticEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuadraticEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/QuadraticEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/QuarticEaseIn.cs b/src/Avalonia.Base/Animation/Easings/QuarticEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuarticEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/QuarticEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/QuarticEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/QuarticEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuarticEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/QuarticEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/QuarticEaseOut.cs b/src/Avalonia.Base/Animation/Easings/QuarticEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuarticEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/QuarticEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/QuinticEaseIn.cs b/src/Avalonia.Base/Animation/Easings/QuinticEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuinticEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/QuinticEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/QuinticEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/QuinticEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuinticEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/QuinticEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/QuinticEaseOut.cs b/src/Avalonia.Base/Animation/Easings/QuinticEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/QuinticEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/QuinticEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/SineEaseIn.cs b/src/Avalonia.Base/Animation/Easings/SineEaseIn.cs similarity index 100% rename from src/Avalonia.Animation/Easing/SineEaseIn.cs rename to src/Avalonia.Base/Animation/Easings/SineEaseIn.cs diff --git a/src/Avalonia.Animation/Easing/SineEaseInOut.cs b/src/Avalonia.Base/Animation/Easings/SineEaseInOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/SineEaseInOut.cs rename to src/Avalonia.Base/Animation/Easings/SineEaseInOut.cs diff --git a/src/Avalonia.Animation/Easing/SineEaseOut.cs b/src/Avalonia.Base/Animation/Easings/SineEaseOut.cs similarity index 100% rename from src/Avalonia.Animation/Easing/SineEaseOut.cs rename to src/Avalonia.Base/Animation/Easings/SineEaseOut.cs diff --git a/src/Avalonia.Animation/Easing/SplineEasing.cs b/src/Avalonia.Base/Animation/Easings/SplineEasing.cs similarity index 100% rename from src/Avalonia.Animation/Easing/SplineEasing.cs rename to src/Avalonia.Base/Animation/Easings/SplineEasing.cs diff --git a/src/Avalonia.Animation/FillMode.cs b/src/Avalonia.Base/Animation/FillMode.cs similarity index 100% rename from src/Avalonia.Animation/FillMode.cs rename to src/Avalonia.Base/Animation/FillMode.cs diff --git a/src/Avalonia.Animation/IAnimation.cs b/src/Avalonia.Base/Animation/IAnimation.cs similarity index 100% rename from src/Avalonia.Animation/IAnimation.cs rename to src/Avalonia.Base/Animation/IAnimation.cs diff --git a/src/Avalonia.Animation/IAnimationSetter.cs b/src/Avalonia.Base/Animation/IAnimationSetter.cs similarity index 100% rename from src/Avalonia.Animation/IAnimationSetter.cs rename to src/Avalonia.Base/Animation/IAnimationSetter.cs diff --git a/src/Avalonia.Animation/IAnimator.cs b/src/Avalonia.Base/Animation/IAnimator.cs similarity index 100% rename from src/Avalonia.Animation/IAnimator.cs rename to src/Avalonia.Base/Animation/IAnimator.cs diff --git a/src/Avalonia.Animation/IClock.cs b/src/Avalonia.Base/Animation/IClock.cs similarity index 100% rename from src/Avalonia.Animation/IClock.cs rename to src/Avalonia.Base/Animation/IClock.cs diff --git a/src/Avalonia.Animation/IGlobalClock.cs b/src/Avalonia.Base/Animation/IGlobalClock.cs similarity index 100% rename from src/Avalonia.Animation/IGlobalClock.cs rename to src/Avalonia.Base/Animation/IGlobalClock.cs diff --git a/src/Avalonia.Visuals/Animation/IPageTransition.cs b/src/Avalonia.Base/Animation/IPageTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/IPageTransition.cs rename to src/Avalonia.Base/Animation/IPageTransition.cs diff --git a/src/Avalonia.Animation/ITransition.cs b/src/Avalonia.Base/Animation/ITransition.cs similarity index 100% rename from src/Avalonia.Animation/ITransition.cs rename to src/Avalonia.Base/Animation/ITransition.cs diff --git a/src/Avalonia.Animation/IterationCount.cs b/src/Avalonia.Base/Animation/IterationCount.cs similarity index 100% rename from src/Avalonia.Animation/IterationCount.cs rename to src/Avalonia.Base/Animation/IterationCount.cs diff --git a/src/Avalonia.Animation/IterationCountTypeConverter.cs b/src/Avalonia.Base/Animation/IterationCountTypeConverter.cs similarity index 100% rename from src/Avalonia.Animation/IterationCountTypeConverter.cs rename to src/Avalonia.Base/Animation/IterationCountTypeConverter.cs diff --git a/src/Avalonia.Animation/KeyFrame.cs b/src/Avalonia.Base/Animation/KeyFrame.cs similarity index 100% rename from src/Avalonia.Animation/KeyFrame.cs rename to src/Avalonia.Base/Animation/KeyFrame.cs diff --git a/src/Avalonia.Animation/KeyFrames.cs b/src/Avalonia.Base/Animation/KeyFrames.cs similarity index 100% rename from src/Avalonia.Animation/KeyFrames.cs rename to src/Avalonia.Base/Animation/KeyFrames.cs diff --git a/src/Avalonia.Animation/KeySpline.cs b/src/Avalonia.Base/Animation/KeySpline.cs similarity index 100% rename from src/Avalonia.Animation/KeySpline.cs rename to src/Avalonia.Base/Animation/KeySpline.cs diff --git a/src/Avalonia.Animation/KeySplineTypeConverter.cs b/src/Avalonia.Base/Animation/KeySplineTypeConverter.cs similarity index 100% rename from src/Avalonia.Animation/KeySplineTypeConverter.cs rename to src/Avalonia.Base/Animation/KeySplineTypeConverter.cs diff --git a/src/Avalonia.Visuals/Animation/PageSlide.cs b/src/Avalonia.Base/Animation/PageSlide.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/PageSlide.cs rename to src/Avalonia.Base/Animation/PageSlide.cs diff --git a/src/Avalonia.Animation/PlayState.cs b/src/Avalonia.Base/Animation/PlayState.cs similarity index 100% rename from src/Avalonia.Animation/PlayState.cs rename to src/Avalonia.Base/Animation/PlayState.cs diff --git a/src/Avalonia.Animation/PlaybackDirection.cs b/src/Avalonia.Base/Animation/PlaybackDirection.cs similarity index 100% rename from src/Avalonia.Animation/PlaybackDirection.cs rename to src/Avalonia.Base/Animation/PlaybackDirection.cs diff --git a/src/Avalonia.Visuals/Animation/RenderLoopClock.cs b/src/Avalonia.Base/Animation/RenderLoopClock.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/RenderLoopClock.cs rename to src/Avalonia.Base/Animation/RenderLoopClock.cs diff --git a/src/Avalonia.Animation/Transition.cs b/src/Avalonia.Base/Animation/Transition.cs similarity index 100% rename from src/Avalonia.Animation/Transition.cs rename to src/Avalonia.Base/Animation/Transition.cs diff --git a/src/Avalonia.Animation/TransitionInstance.cs b/src/Avalonia.Base/Animation/TransitionInstance.cs similarity index 100% rename from src/Avalonia.Animation/TransitionInstance.cs rename to src/Avalonia.Base/Animation/TransitionInstance.cs diff --git a/src/Avalonia.Animation/TransitionObservableBase.cs b/src/Avalonia.Base/Animation/TransitionObservableBase.cs similarity index 100% rename from src/Avalonia.Animation/TransitionObservableBase.cs rename to src/Avalonia.Base/Animation/TransitionObservableBase.cs diff --git a/src/Avalonia.Animation/Transitions.cs b/src/Avalonia.Base/Animation/Transitions.cs similarity index 100% rename from src/Avalonia.Animation/Transitions.cs rename to src/Avalonia.Base/Animation/Transitions.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/BoxShadowsTransition.cs b/src/Avalonia.Base/Animation/Transitions/BoxShadowsTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/BoxShadowsTransition.cs rename to src/Avalonia.Base/Animation/Transitions/BoxShadowsTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/BrushTransition.cs b/src/Avalonia.Base/Animation/Transitions/BrushTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/BrushTransition.cs rename to src/Avalonia.Base/Animation/Transitions/BrushTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/ColorTransition.cs b/src/Avalonia.Base/Animation/Transitions/ColorTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/ColorTransition.cs rename to src/Avalonia.Base/Animation/Transitions/ColorTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/CornerRadiusTransition.cs b/src/Avalonia.Base/Animation/Transitions/CornerRadiusTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/CornerRadiusTransition.cs rename to src/Avalonia.Base/Animation/Transitions/CornerRadiusTransition.cs diff --git a/src/Avalonia.Animation/Transitions/DoubleTransition.cs b/src/Avalonia.Base/Animation/Transitions/DoubleTransition.cs similarity index 100% rename from src/Avalonia.Animation/Transitions/DoubleTransition.cs rename to src/Avalonia.Base/Animation/Transitions/DoubleTransition.cs diff --git a/src/Avalonia.Animation/Transitions/FloatTransition.cs b/src/Avalonia.Base/Animation/Transitions/FloatTransition.cs similarity index 100% rename from src/Avalonia.Animation/Transitions/FloatTransition.cs rename to src/Avalonia.Base/Animation/Transitions/FloatTransition.cs diff --git a/src/Avalonia.Animation/Transitions/IntegerTransition.cs b/src/Avalonia.Base/Animation/Transitions/IntegerTransition.cs similarity index 100% rename from src/Avalonia.Animation/Transitions/IntegerTransition.cs rename to src/Avalonia.Base/Animation/Transitions/IntegerTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/PointTransition.cs b/src/Avalonia.Base/Animation/Transitions/PointTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/PointTransition.cs rename to src/Avalonia.Base/Animation/Transitions/PointTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/RelativePointTransition.cs b/src/Avalonia.Base/Animation/Transitions/RelativePointTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/RelativePointTransition.cs rename to src/Avalonia.Base/Animation/Transitions/RelativePointTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/SizeTransition.cs b/src/Avalonia.Base/Animation/Transitions/SizeTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/SizeTransition.cs rename to src/Avalonia.Base/Animation/Transitions/SizeTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/ThicknessTransition.cs b/src/Avalonia.Base/Animation/Transitions/ThicknessTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/ThicknessTransition.cs rename to src/Avalonia.Base/Animation/Transitions/ThicknessTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/TransformOperationsTransition.cs b/src/Avalonia.Base/Animation/Transitions/TransformOperationsTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/TransformOperationsTransition.cs rename to src/Avalonia.Base/Animation/Transitions/TransformOperationsTransition.cs diff --git a/src/Avalonia.Visuals/Animation/Transitions/VectorTransition.cs b/src/Avalonia.Base/Animation/Transitions/VectorTransition.cs similarity index 100% rename from src/Avalonia.Visuals/Animation/Transitions/VectorTransition.cs rename to src/Avalonia.Base/Animation/Transitions/VectorTransition.cs diff --git a/src/Avalonia.Animation/Utils/BounceEaseUtils.cs b/src/Avalonia.Base/Animation/Utils/BounceEaseUtils.cs similarity index 100% rename from src/Avalonia.Animation/Utils/BounceEaseUtils.cs rename to src/Avalonia.Base/Animation/Utils/BounceEaseUtils.cs diff --git a/src/Avalonia.Animation/Utils/EasingUtils.cs b/src/Avalonia.Base/Animation/Utils/EasingUtils.cs similarity index 100% rename from src/Avalonia.Animation/Utils/EasingUtils.cs rename to src/Avalonia.Base/Animation/Utils/EasingUtils.cs diff --git a/src/Avalonia.Visuals/Assets/BiDi.trie b/src/Avalonia.Base/Assets/BiDi.trie similarity index 100% rename from src/Avalonia.Visuals/Assets/BiDi.trie rename to src/Avalonia.Base/Assets/BiDi.trie diff --git a/src/Avalonia.Visuals/Assets/GraphemeBreak.trie b/src/Avalonia.Base/Assets/GraphemeBreak.trie similarity index 100% rename from src/Avalonia.Visuals/Assets/GraphemeBreak.trie rename to src/Avalonia.Base/Assets/GraphemeBreak.trie diff --git a/src/Avalonia.Visuals/Assets/UnicodeData.trie b/src/Avalonia.Base/Assets/UnicodeData.trie similarity index 100% rename from src/Avalonia.Visuals/Assets/UnicodeData.trie rename to src/Avalonia.Base/Assets/UnicodeData.trie diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 637b86d759..5b79d3cd7b 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -5,6 +5,9 @@ Avalonia True + + + diff --git a/src/Avalonia.Visuals/AvaloniaPropertyExtensions.cs b/src/Avalonia.Base/AvaloniaPropertyExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/AvaloniaPropertyExtensions.cs rename to src/Avalonia.Base/AvaloniaPropertyExtensions.cs diff --git a/src/Avalonia.Styling/ClassBindingManager.cs b/src/Avalonia.Base/ClassBindingManager.cs similarity index 100% rename from src/Avalonia.Styling/ClassBindingManager.cs rename to src/Avalonia.Base/ClassBindingManager.cs diff --git a/src/Avalonia.Visuals/Media/CombinedGeometry.cs b/src/Avalonia.Base/CombinedGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/CombinedGeometry.cs rename to src/Avalonia.Base/CombinedGeometry.cs diff --git a/src/Avalonia.Styling/Controls/ChildNameScope.cs b/src/Avalonia.Base/Controls/ChildNameScope.cs similarity index 99% rename from src/Avalonia.Styling/Controls/ChildNameScope.cs rename to src/Avalonia.Base/Controls/ChildNameScope.cs index 58114a57fd..1ceaff924c 100644 --- a/src/Avalonia.Styling/Controls/ChildNameScope.cs +++ b/src/Avalonia.Base/Controls/ChildNameScope.cs @@ -22,7 +22,7 @@ namespace Avalonia.Controls return new SynchronousCompletionAsyncResult(found); // Not found and both current and parent scope are in completed state if(IsCompleted) - return new SynchronousCompletionAsyncResult(null); + return new SynchronousCompletionAsyncResult((object?)null); return DoFindAsync(name); } diff --git a/src/Avalonia.Styling/Controls/Classes.cs b/src/Avalonia.Base/Controls/Classes.cs similarity index 100% rename from src/Avalonia.Styling/Controls/Classes.cs rename to src/Avalonia.Base/Controls/Classes.cs diff --git a/src/Avalonia.Styling/Controls/INameScope.cs b/src/Avalonia.Base/Controls/INameScope.cs similarity index 100% rename from src/Avalonia.Styling/Controls/INameScope.cs rename to src/Avalonia.Base/Controls/INameScope.cs diff --git a/src/Avalonia.Styling/Controls/IPseudoClasses.cs b/src/Avalonia.Base/Controls/IPseudoClasses.cs similarity index 100% rename from src/Avalonia.Styling/Controls/IPseudoClasses.cs rename to src/Avalonia.Base/Controls/IPseudoClasses.cs diff --git a/src/Avalonia.Styling/Controls/IResourceDictionary.cs b/src/Avalonia.Base/Controls/IResourceDictionary.cs similarity index 100% rename from src/Avalonia.Styling/Controls/IResourceDictionary.cs rename to src/Avalonia.Base/Controls/IResourceDictionary.cs diff --git a/src/Avalonia.Styling/Controls/IResourceHost.cs b/src/Avalonia.Base/Controls/IResourceHost.cs similarity index 100% rename from src/Avalonia.Styling/Controls/IResourceHost.cs rename to src/Avalonia.Base/Controls/IResourceHost.cs diff --git a/src/Avalonia.Styling/Controls/IResourceNode.cs b/src/Avalonia.Base/Controls/IResourceNode.cs similarity index 100% rename from src/Avalonia.Styling/Controls/IResourceNode.cs rename to src/Avalonia.Base/Controls/IResourceNode.cs diff --git a/src/Avalonia.Styling/Controls/IResourceProvider.cs b/src/Avalonia.Base/Controls/IResourceProvider.cs similarity index 100% rename from src/Avalonia.Styling/Controls/IResourceProvider.cs rename to src/Avalonia.Base/Controls/IResourceProvider.cs diff --git a/src/Avalonia.Styling/Controls/ISetInheritanceParent.cs b/src/Avalonia.Base/Controls/ISetInheritanceParent.cs similarity index 100% rename from src/Avalonia.Styling/Controls/ISetInheritanceParent.cs rename to src/Avalonia.Base/Controls/ISetInheritanceParent.cs diff --git a/src/Avalonia.Styling/Controls/ISetLogicalParent.cs b/src/Avalonia.Base/Controls/ISetLogicalParent.cs similarity index 100% rename from src/Avalonia.Styling/Controls/ISetLogicalParent.cs rename to src/Avalonia.Base/Controls/ISetLogicalParent.cs diff --git a/src/Avalonia.Styling/Controls/Metadata/PseudoClassesAttribute.cs b/src/Avalonia.Base/Controls/Metadata/PseudoClassesAttribute.cs similarity index 100% rename from src/Avalonia.Styling/Controls/Metadata/PseudoClassesAttribute.cs rename to src/Avalonia.Base/Controls/Metadata/PseudoClassesAttribute.cs diff --git a/src/Avalonia.Styling/Controls/Metadata/TemplatePartAttribute.cs b/src/Avalonia.Base/Controls/Metadata/TemplatePartAttribute.cs similarity index 100% rename from src/Avalonia.Styling/Controls/Metadata/TemplatePartAttribute.cs rename to src/Avalonia.Base/Controls/Metadata/TemplatePartAttribute.cs diff --git a/src/Avalonia.Styling/Controls/NameScope.cs b/src/Avalonia.Base/Controls/NameScope.cs similarity index 99% rename from src/Avalonia.Styling/Controls/NameScope.cs rename to src/Avalonia.Base/Controls/NameScope.cs index 77f98f85c4..952401c00c 100644 --- a/src/Avalonia.Styling/Controls/NameScope.cs +++ b/src/Avalonia.Base/Controls/NameScope.cs @@ -82,7 +82,7 @@ namespace Avalonia.Controls if (found != null) return new SynchronousCompletionAsyncResult(found); if (IsCompleted) - return new SynchronousCompletionAsyncResult(null); + return new SynchronousCompletionAsyncResult((object?)null); if (!_pendingSearches.TryGetValue(name, out var tcs)) // We are intentionally running continuations synchronously here _pendingSearches[name] = tcs = new SynchronousCompletionAsyncResultSource(); diff --git a/src/Avalonia.Styling/Controls/NameScopeEventArgs.cs b/src/Avalonia.Base/Controls/NameScopeEventArgs.cs similarity index 100% rename from src/Avalonia.Styling/Controls/NameScopeEventArgs.cs rename to src/Avalonia.Base/Controls/NameScopeEventArgs.cs diff --git a/src/Avalonia.Styling/Controls/NameScopeExtensions.cs b/src/Avalonia.Base/Controls/NameScopeExtensions.cs similarity index 100% rename from src/Avalonia.Styling/Controls/NameScopeExtensions.cs rename to src/Avalonia.Base/Controls/NameScopeExtensions.cs diff --git a/src/Avalonia.Styling/Controls/NameScopeLocator.cs b/src/Avalonia.Base/Controls/NameScopeLocator.cs similarity index 100% rename from src/Avalonia.Styling/Controls/NameScopeLocator.cs rename to src/Avalonia.Base/Controls/NameScopeLocator.cs diff --git a/src/Avalonia.Styling/Controls/PseudoClassesExtensions.cs b/src/Avalonia.Base/Controls/PseudoClassesExtensions.cs similarity index 100% rename from src/Avalonia.Styling/Controls/PseudoClassesExtensions.cs rename to src/Avalonia.Base/Controls/PseudoClassesExtensions.cs diff --git a/src/Avalonia.Styling/Controls/ResourceDictionary.cs b/src/Avalonia.Base/Controls/ResourceDictionary.cs similarity index 100% rename from src/Avalonia.Styling/Controls/ResourceDictionary.cs rename to src/Avalonia.Base/Controls/ResourceDictionary.cs diff --git a/src/Avalonia.Styling/Controls/ResourceNodeExtensions.cs b/src/Avalonia.Base/Controls/ResourceNodeExtensions.cs similarity index 100% rename from src/Avalonia.Styling/Controls/ResourceNodeExtensions.cs rename to src/Avalonia.Base/Controls/ResourceNodeExtensions.cs diff --git a/src/Avalonia.Styling/Controls/ResourcesChangedEventArgs.cs b/src/Avalonia.Base/Controls/ResourcesChangedEventArgs.cs similarity index 100% rename from src/Avalonia.Styling/Controls/ResourcesChangedEventArgs.cs rename to src/Avalonia.Base/Controls/ResourcesChangedEventArgs.cs diff --git a/src/Avalonia.Visuals/CornerRadius.cs b/src/Avalonia.Base/CornerRadius.cs similarity index 100% rename from src/Avalonia.Visuals/CornerRadius.cs rename to src/Avalonia.Base/CornerRadius.cs diff --git a/src/Avalonia.Styling/Diagnostics/StyleDiagnostics.cs b/src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs similarity index 100% rename from src/Avalonia.Styling/Diagnostics/StyleDiagnostics.cs rename to src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs diff --git a/src/Avalonia.Styling/Diagnostics/StyledElementExtensions.cs b/src/Avalonia.Base/Diagnostics/StyledElementExtensions.cs similarity index 100% rename from src/Avalonia.Styling/Diagnostics/StyledElementExtensions.cs rename to src/Avalonia.Base/Diagnostics/StyledElementExtensions.cs diff --git a/src/Avalonia.Visuals/Media/GeometryCollection.cs b/src/Avalonia.Base/GeometryCollection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GeometryCollection.cs rename to src/Avalonia.Base/GeometryCollection.cs diff --git a/src/Avalonia.Visuals/Media/GeometryGroup.cs b/src/Avalonia.Base/GeometryGroup.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GeometryGroup.cs rename to src/Avalonia.Base/GeometryGroup.cs diff --git a/src/Avalonia.Styling/IDataContextProvider.cs b/src/Avalonia.Base/IDataContextProvider.cs similarity index 100% rename from src/Avalonia.Styling/IDataContextProvider.cs rename to src/Avalonia.Base/IDataContextProvider.cs diff --git a/src/Avalonia.Styling/INamed.cs b/src/Avalonia.Base/INamed.cs similarity index 100% rename from src/Avalonia.Styling/INamed.cs rename to src/Avalonia.Base/INamed.cs diff --git a/src/Avalonia.Styling/IStyledElement.cs b/src/Avalonia.Base/IStyledElement.cs similarity index 100% rename from src/Avalonia.Styling/IStyledElement.cs rename to src/Avalonia.Base/IStyledElement.cs diff --git a/src/Avalonia.Input/AccessKeyHandler.cs b/src/Avalonia.Base/Input/AccessKeyHandler.cs similarity index 100% rename from src/Avalonia.Input/AccessKeyHandler.cs rename to src/Avalonia.Base/Input/AccessKeyHandler.cs diff --git a/src/Avalonia.Input/Cursor.cs b/src/Avalonia.Base/Input/Cursor.cs similarity index 100% rename from src/Avalonia.Input/Cursor.cs rename to src/Avalonia.Base/Input/Cursor.cs diff --git a/src/Avalonia.Input/DataFormats.cs b/src/Avalonia.Base/Input/DataFormats.cs similarity index 100% rename from src/Avalonia.Input/DataFormats.cs rename to src/Avalonia.Base/Input/DataFormats.cs diff --git a/src/Avalonia.Input/DataObject.cs b/src/Avalonia.Base/Input/DataObject.cs similarity index 100% rename from src/Avalonia.Input/DataObject.cs rename to src/Avalonia.Base/Input/DataObject.cs diff --git a/src/Avalonia.Input/DragDrop.cs b/src/Avalonia.Base/Input/DragDrop.cs similarity index 100% rename from src/Avalonia.Input/DragDrop.cs rename to src/Avalonia.Base/Input/DragDrop.cs diff --git a/src/Avalonia.Input/DragDropDevice.cs b/src/Avalonia.Base/Input/DragDropDevice.cs similarity index 100% rename from src/Avalonia.Input/DragDropDevice.cs rename to src/Avalonia.Base/Input/DragDropDevice.cs diff --git a/src/Avalonia.Input/DragDropEffects.cs b/src/Avalonia.Base/Input/DragDropEffects.cs similarity index 100% rename from src/Avalonia.Input/DragDropEffects.cs rename to src/Avalonia.Base/Input/DragDropEffects.cs diff --git a/src/Avalonia.Input/DragEventArgs.cs b/src/Avalonia.Base/Input/DragEventArgs.cs similarity index 100% rename from src/Avalonia.Input/DragEventArgs.cs rename to src/Avalonia.Base/Input/DragEventArgs.cs diff --git a/src/Avalonia.Input/FocusManager.cs b/src/Avalonia.Base/Input/FocusManager.cs similarity index 100% rename from src/Avalonia.Input/FocusManager.cs rename to src/Avalonia.Base/Input/FocusManager.cs diff --git a/src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs b/src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizerCollection.cs similarity index 100% rename from src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs rename to src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizerCollection.cs diff --git a/src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs b/src/Avalonia.Base/Input/GestureRecognizers/IGestureRecognizer.cs similarity index 100% rename from src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs rename to src/Avalonia.Base/Input/GestureRecognizers/IGestureRecognizer.cs diff --git a/src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs b/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs similarity index 100% rename from src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs rename to src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs diff --git a/src/Avalonia.Input/Gestures.cs b/src/Avalonia.Base/Input/Gestures.cs similarity index 100% rename from src/Avalonia.Input/Gestures.cs rename to src/Avalonia.Base/Input/Gestures.cs diff --git a/src/Avalonia.Input/GotFocusEventArgs.cs b/src/Avalonia.Base/Input/GotFocusEventArgs.cs similarity index 100% rename from src/Avalonia.Input/GotFocusEventArgs.cs rename to src/Avalonia.Base/Input/GotFocusEventArgs.cs diff --git a/src/Avalonia.Input/IAccessKeyHandler.cs b/src/Avalonia.Base/Input/IAccessKeyHandler.cs similarity index 100% rename from src/Avalonia.Input/IAccessKeyHandler.cs rename to src/Avalonia.Base/Input/IAccessKeyHandler.cs diff --git a/src/Avalonia.Input/IClickableControl.cs b/src/Avalonia.Base/Input/IClickableControl.cs similarity index 100% rename from src/Avalonia.Input/IClickableControl.cs rename to src/Avalonia.Base/Input/IClickableControl.cs diff --git a/src/Avalonia.Input/ICloseable.cs b/src/Avalonia.Base/Input/ICloseable.cs similarity index 100% rename from src/Avalonia.Input/ICloseable.cs rename to src/Avalonia.Base/Input/ICloseable.cs diff --git a/src/Avalonia.Input/ICommandSource.cs b/src/Avalonia.Base/Input/ICommandSource.cs similarity index 100% rename from src/Avalonia.Input/ICommandSource.cs rename to src/Avalonia.Base/Input/ICommandSource.cs diff --git a/src/Avalonia.Input/ICustomKeyboardNavigation.cs b/src/Avalonia.Base/Input/ICustomKeyboardNavigation.cs similarity index 100% rename from src/Avalonia.Input/ICustomKeyboardNavigation.cs rename to src/Avalonia.Base/Input/ICustomKeyboardNavigation.cs diff --git a/src/Avalonia.Input/IDataObject.cs b/src/Avalonia.Base/Input/IDataObject.cs similarity index 100% rename from src/Avalonia.Input/IDataObject.cs rename to src/Avalonia.Base/Input/IDataObject.cs diff --git a/src/Avalonia.Input/IFocusManager.cs b/src/Avalonia.Base/Input/IFocusManager.cs similarity index 100% rename from src/Avalonia.Input/IFocusManager.cs rename to src/Avalonia.Base/Input/IFocusManager.cs diff --git a/src/Avalonia.Input/IFocusScope.cs b/src/Avalonia.Base/Input/IFocusScope.cs similarity index 100% rename from src/Avalonia.Input/IFocusScope.cs rename to src/Avalonia.Base/Input/IFocusScope.cs diff --git a/src/Avalonia.Input/IInputDevice.cs b/src/Avalonia.Base/Input/IInputDevice.cs similarity index 100% rename from src/Avalonia.Input/IInputDevice.cs rename to src/Avalonia.Base/Input/IInputDevice.cs diff --git a/src/Avalonia.Input/IInputElement.cs b/src/Avalonia.Base/Input/IInputElement.cs similarity index 100% rename from src/Avalonia.Input/IInputElement.cs rename to src/Avalonia.Base/Input/IInputElement.cs diff --git a/src/Avalonia.Input/IInputManager.cs b/src/Avalonia.Base/Input/IInputManager.cs similarity index 100% rename from src/Avalonia.Input/IInputManager.cs rename to src/Avalonia.Base/Input/IInputManager.cs diff --git a/src/Avalonia.Input/IInputRoot.cs b/src/Avalonia.Base/Input/IInputRoot.cs similarity index 100% rename from src/Avalonia.Input/IInputRoot.cs rename to src/Avalonia.Base/Input/IInputRoot.cs diff --git a/src/Avalonia.Input/IKeyboardDevice.cs b/src/Avalonia.Base/Input/IKeyboardDevice.cs similarity index 100% rename from src/Avalonia.Input/IKeyboardDevice.cs rename to src/Avalonia.Base/Input/IKeyboardDevice.cs diff --git a/src/Avalonia.Input/IKeyboardNavigationHandler.cs b/src/Avalonia.Base/Input/IKeyboardNavigationHandler.cs similarity index 100% rename from src/Avalonia.Input/IKeyboardNavigationHandler.cs rename to src/Avalonia.Base/Input/IKeyboardNavigationHandler.cs diff --git a/src/Avalonia.Input/IMainMenu.cs b/src/Avalonia.Base/Input/IMainMenu.cs similarity index 100% rename from src/Avalonia.Input/IMainMenu.cs rename to src/Avalonia.Base/Input/IMainMenu.cs diff --git a/src/Avalonia.Input/IMouseDevice.cs b/src/Avalonia.Base/Input/IMouseDevice.cs similarity index 100% rename from src/Avalonia.Input/IMouseDevice.cs rename to src/Avalonia.Base/Input/IMouseDevice.cs diff --git a/src/Avalonia.Input/INavigableContainer.cs b/src/Avalonia.Base/Input/INavigableContainer.cs similarity index 100% rename from src/Avalonia.Input/INavigableContainer.cs rename to src/Avalonia.Base/Input/INavigableContainer.cs diff --git a/src/Avalonia.Input/IPointer.cs b/src/Avalonia.Base/Input/IPointer.cs similarity index 100% rename from src/Avalonia.Input/IPointer.cs rename to src/Avalonia.Base/Input/IPointer.cs diff --git a/src/Avalonia.Input/IPointerDevice.cs b/src/Avalonia.Base/Input/IPointerDevice.cs similarity index 100% rename from src/Avalonia.Input/IPointerDevice.cs rename to src/Avalonia.Base/Input/IPointerDevice.cs diff --git a/src/Avalonia.Input/InputElement.cs b/src/Avalonia.Base/Input/InputElement.cs similarity index 100% rename from src/Avalonia.Input/InputElement.cs rename to src/Avalonia.Base/Input/InputElement.cs diff --git a/src/Avalonia.Input/InputExtensions.cs b/src/Avalonia.Base/Input/InputExtensions.cs similarity index 100% rename from src/Avalonia.Input/InputExtensions.cs rename to src/Avalonia.Base/Input/InputExtensions.cs diff --git a/src/Avalonia.Input/InputManager.cs b/src/Avalonia.Base/Input/InputManager.cs similarity index 100% rename from src/Avalonia.Input/InputManager.cs rename to src/Avalonia.Base/Input/InputManager.cs diff --git a/src/Avalonia.Input/InputMethod.cs b/src/Avalonia.Base/Input/InputMethod.cs similarity index 100% rename from src/Avalonia.Input/InputMethod.cs rename to src/Avalonia.Base/Input/InputMethod.cs diff --git a/src/Avalonia.Input/Key.cs b/src/Avalonia.Base/Input/Key.cs similarity index 100% rename from src/Avalonia.Input/Key.cs rename to src/Avalonia.Base/Input/Key.cs diff --git a/src/Avalonia.Input/KeyBinding.cs b/src/Avalonia.Base/Input/KeyBinding.cs similarity index 100% rename from src/Avalonia.Input/KeyBinding.cs rename to src/Avalonia.Base/Input/KeyBinding.cs diff --git a/src/Avalonia.Input/KeyEventArgs.cs b/src/Avalonia.Base/Input/KeyEventArgs.cs similarity index 100% rename from src/Avalonia.Input/KeyEventArgs.cs rename to src/Avalonia.Base/Input/KeyEventArgs.cs diff --git a/src/Avalonia.Input/KeyGesture.cs b/src/Avalonia.Base/Input/KeyGesture.cs similarity index 100% rename from src/Avalonia.Input/KeyGesture.cs rename to src/Avalonia.Base/Input/KeyGesture.cs diff --git a/src/Avalonia.Input/KeyboardDevice.cs b/src/Avalonia.Base/Input/KeyboardDevice.cs similarity index 100% rename from src/Avalonia.Input/KeyboardDevice.cs rename to src/Avalonia.Base/Input/KeyboardDevice.cs diff --git a/src/Avalonia.Input/KeyboardNavigation.cs b/src/Avalonia.Base/Input/KeyboardNavigation.cs similarity index 100% rename from src/Avalonia.Input/KeyboardNavigation.cs rename to src/Avalonia.Base/Input/KeyboardNavigation.cs diff --git a/src/Avalonia.Input/KeyboardNavigationHandler.cs b/src/Avalonia.Base/Input/KeyboardNavigationHandler.cs similarity index 100% rename from src/Avalonia.Input/KeyboardNavigationHandler.cs rename to src/Avalonia.Base/Input/KeyboardNavigationHandler.cs diff --git a/src/Avalonia.Input/KeyboardNavigationMode.cs b/src/Avalonia.Base/Input/KeyboardNavigationMode.cs similarity index 100% rename from src/Avalonia.Input/KeyboardNavigationMode.cs rename to src/Avalonia.Base/Input/KeyboardNavigationMode.cs diff --git a/src/Avalonia.Input/MouseDevice.cs b/src/Avalonia.Base/Input/MouseDevice.cs similarity index 100% rename from src/Avalonia.Input/MouseDevice.cs rename to src/Avalonia.Base/Input/MouseDevice.cs diff --git a/src/Avalonia.Input/Navigation/FocusExtensions.cs b/src/Avalonia.Base/Input/Navigation/FocusExtensions.cs similarity index 100% rename from src/Avalonia.Input/Navigation/FocusExtensions.cs rename to src/Avalonia.Base/Input/Navigation/FocusExtensions.cs diff --git a/src/Avalonia.Input/Navigation/TabNavigation.cs b/src/Avalonia.Base/Input/Navigation/TabNavigation.cs similarity index 100% rename from src/Avalonia.Input/Navigation/TabNavigation.cs rename to src/Avalonia.Base/Input/Navigation/TabNavigation.cs diff --git a/src/Avalonia.Input/NavigationDirection.cs b/src/Avalonia.Base/Input/NavigationDirection.cs similarity index 100% rename from src/Avalonia.Input/NavigationDirection.cs rename to src/Avalonia.Base/Input/NavigationDirection.cs diff --git a/src/Avalonia.Input/NavigationMethod.cs b/src/Avalonia.Base/Input/NavigationMethod.cs similarity index 100% rename from src/Avalonia.Input/NavigationMethod.cs rename to src/Avalonia.Base/Input/NavigationMethod.cs diff --git a/src/Avalonia.Input/Platform/IClipboard.cs b/src/Avalonia.Base/Input/Platform/IClipboard.cs similarity index 100% rename from src/Avalonia.Input/Platform/IClipboard.cs rename to src/Avalonia.Base/Input/Platform/IClipboard.cs diff --git a/src/Avalonia.Input/Platform/IPlatformDragSource.cs b/src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs similarity index 100% rename from src/Avalonia.Input/Platform/IPlatformDragSource.cs rename to src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs diff --git a/src/Avalonia.Input/Platform/PlatformHotkeyConfiguration.cs b/src/Avalonia.Base/Input/Platform/PlatformHotkeyConfiguration.cs similarity index 100% rename from src/Avalonia.Input/Platform/PlatformHotkeyConfiguration.cs rename to src/Avalonia.Base/Input/Platform/PlatformHotkeyConfiguration.cs diff --git a/src/Avalonia.Input/Pointer.cs b/src/Avalonia.Base/Input/Pointer.cs similarity index 100% rename from src/Avalonia.Input/Pointer.cs rename to src/Avalonia.Base/Input/Pointer.cs diff --git a/src/Avalonia.Input/PointerDeltaEventArgs.cs b/src/Avalonia.Base/Input/PointerDeltaEventArgs.cs similarity index 100% rename from src/Avalonia.Input/PointerDeltaEventArgs.cs rename to src/Avalonia.Base/Input/PointerDeltaEventArgs.cs diff --git a/src/Avalonia.Input/PointerEventArgs.cs b/src/Avalonia.Base/Input/PointerEventArgs.cs similarity index 100% rename from src/Avalonia.Input/PointerEventArgs.cs rename to src/Avalonia.Base/Input/PointerEventArgs.cs diff --git a/src/Avalonia.Input/PointerPoint.cs b/src/Avalonia.Base/Input/PointerPoint.cs similarity index 100% rename from src/Avalonia.Input/PointerPoint.cs rename to src/Avalonia.Base/Input/PointerPoint.cs diff --git a/src/Avalonia.Input/PointerWheelEventArgs.cs b/src/Avalonia.Base/Input/PointerWheelEventArgs.cs similarity index 100% rename from src/Avalonia.Input/PointerWheelEventArgs.cs rename to src/Avalonia.Base/Input/PointerWheelEventArgs.cs diff --git a/src/Avalonia.Input/Raw/IDragDropDevice.cs b/src/Avalonia.Base/Input/Raw/IDragDropDevice.cs similarity index 100% rename from src/Avalonia.Input/Raw/IDragDropDevice.cs rename to src/Avalonia.Base/Input/Raw/IDragDropDevice.cs diff --git a/src/Avalonia.Input/Raw/RawDragEvent.cs b/src/Avalonia.Base/Input/Raw/RawDragEvent.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawDragEvent.cs rename to src/Avalonia.Base/Input/Raw/RawDragEvent.cs diff --git a/src/Avalonia.Input/Raw/RawDragEventType.cs b/src/Avalonia.Base/Input/Raw/RawDragEventType.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawDragEventType.cs rename to src/Avalonia.Base/Input/Raw/RawDragEventType.cs diff --git a/src/Avalonia.Input/Raw/RawInputEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawInputEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawInputEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawInputEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawKeyEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawKeyEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawKeyEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawKeyEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawMouseWheelEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawMouseWheelEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawMouseWheelEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawMouseWheelEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawPointerEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawPointerEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawPointerEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawPointerEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawPointerGestureEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawPointerGestureEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawPointerGestureEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawPointerGestureEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawSizeEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawSizeEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawSizeEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawSizeEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawTextInputEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawTextInputEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawTextInputEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawTextInputEventArgs.cs diff --git a/src/Avalonia.Input/Raw/RawTouchEventArgs.cs b/src/Avalonia.Base/Input/Raw/RawTouchEventArgs.cs similarity index 100% rename from src/Avalonia.Input/Raw/RawTouchEventArgs.cs rename to src/Avalonia.Base/Input/Raw/RawTouchEventArgs.cs diff --git a/src/Avalonia.Input/ScrollGestureEventArgs.cs b/src/Avalonia.Base/Input/ScrollGestureEventArgs.cs similarity index 100% rename from src/Avalonia.Input/ScrollGestureEventArgs.cs rename to src/Avalonia.Base/Input/ScrollGestureEventArgs.cs diff --git a/src/Avalonia.Input/TappedEventArgs.cs b/src/Avalonia.Base/Input/TappedEventArgs.cs similarity index 100% rename from src/Avalonia.Input/TappedEventArgs.cs rename to src/Avalonia.Base/Input/TappedEventArgs.cs diff --git a/src/Avalonia.Input/TextInput/ITextInputMethodClient.cs b/src/Avalonia.Base/Input/TextInput/ITextInputMethodClient.cs similarity index 100% rename from src/Avalonia.Input/TextInput/ITextInputMethodClient.cs rename to src/Avalonia.Base/Input/TextInput/ITextInputMethodClient.cs diff --git a/src/Avalonia.Input/TextInput/ITextInputMethodImpl.cs b/src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs similarity index 100% rename from src/Avalonia.Input/TextInput/ITextInputMethodImpl.cs rename to src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs diff --git a/src/Avalonia.Input/TextInput/InputMethodManager.cs b/src/Avalonia.Base/Input/TextInput/InputMethodManager.cs similarity index 100% rename from src/Avalonia.Input/TextInput/InputMethodManager.cs rename to src/Avalonia.Base/Input/TextInput/InputMethodManager.cs diff --git a/src/Avalonia.Input/TextInput/TextInputContentType.cs b/src/Avalonia.Base/Input/TextInput/TextInputContentType.cs similarity index 100% rename from src/Avalonia.Input/TextInput/TextInputContentType.cs rename to src/Avalonia.Base/Input/TextInput/TextInputContentType.cs diff --git a/src/Avalonia.Input/TextInput/TextInputMethodClientRequestedEventArgs.cs b/src/Avalonia.Base/Input/TextInput/TextInputMethodClientRequestedEventArgs.cs similarity index 100% rename from src/Avalonia.Input/TextInput/TextInputMethodClientRequestedEventArgs.cs rename to src/Avalonia.Base/Input/TextInput/TextInputMethodClientRequestedEventArgs.cs diff --git a/src/Avalonia.Input/TextInput/TextInputOptions.cs b/src/Avalonia.Base/Input/TextInput/TextInputOptions.cs similarity index 100% rename from src/Avalonia.Input/TextInput/TextInputOptions.cs rename to src/Avalonia.Base/Input/TextInput/TextInputOptions.cs diff --git a/src/Avalonia.Input/TextInput/TransformTrackingHelper.cs b/src/Avalonia.Base/Input/TextInput/TransformTrackingHelper.cs similarity index 100% rename from src/Avalonia.Input/TextInput/TransformTrackingHelper.cs rename to src/Avalonia.Base/Input/TextInput/TransformTrackingHelper.cs diff --git a/src/Avalonia.Input/TextInputEventArgs.cs b/src/Avalonia.Base/Input/TextInputEventArgs.cs similarity index 100% rename from src/Avalonia.Input/TextInputEventArgs.cs rename to src/Avalonia.Base/Input/TextInputEventArgs.cs diff --git a/src/Avalonia.Input/TouchDevice.cs b/src/Avalonia.Base/Input/TouchDevice.cs similarity index 100% rename from src/Avalonia.Input/TouchDevice.cs rename to src/Avalonia.Base/Input/TouchDevice.cs diff --git a/src/Avalonia.Input/VectorEventArgs.cs b/src/Avalonia.Base/Input/VectorEventArgs.cs similarity index 100% rename from src/Avalonia.Input/VectorEventArgs.cs rename to src/Avalonia.Base/Input/VectorEventArgs.cs diff --git a/src/Avalonia.Interactivity/EventRoute.cs b/src/Avalonia.Base/Interactivity/EventRoute.cs similarity index 100% rename from src/Avalonia.Interactivity/EventRoute.cs rename to src/Avalonia.Base/Interactivity/EventRoute.cs diff --git a/src/Avalonia.Interactivity/IInteractive.cs b/src/Avalonia.Base/Interactivity/IInteractive.cs similarity index 100% rename from src/Avalonia.Interactivity/IInteractive.cs rename to src/Avalonia.Base/Interactivity/IInteractive.cs diff --git a/src/Avalonia.Interactivity/Interactive.cs b/src/Avalonia.Base/Interactivity/Interactive.cs similarity index 100% rename from src/Avalonia.Interactivity/Interactive.cs rename to src/Avalonia.Base/Interactivity/Interactive.cs diff --git a/src/Avalonia.Interactivity/InteractiveExtensions.cs b/src/Avalonia.Base/Interactivity/InteractiveExtensions.cs similarity index 100% rename from src/Avalonia.Interactivity/InteractiveExtensions.cs rename to src/Avalonia.Base/Interactivity/InteractiveExtensions.cs diff --git a/src/Avalonia.Interactivity/RoutedEvent.cs b/src/Avalonia.Base/Interactivity/RoutedEvent.cs similarity index 100% rename from src/Avalonia.Interactivity/RoutedEvent.cs rename to src/Avalonia.Base/Interactivity/RoutedEvent.cs diff --git a/src/Avalonia.Interactivity/RoutedEventArgs.cs b/src/Avalonia.Base/Interactivity/RoutedEventArgs.cs similarity index 100% rename from src/Avalonia.Interactivity/RoutedEventArgs.cs rename to src/Avalonia.Base/Interactivity/RoutedEventArgs.cs diff --git a/src/Avalonia.Interactivity/RoutedEventRegistry.cs b/src/Avalonia.Base/Interactivity/RoutedEventRegistry.cs similarity index 100% rename from src/Avalonia.Interactivity/RoutedEventRegistry.cs rename to src/Avalonia.Base/Interactivity/RoutedEventRegistry.cs diff --git a/src/Avalonia.Layout/AttachedLayout.cs b/src/Avalonia.Base/Layout/AttachedLayout.cs similarity index 100% rename from src/Avalonia.Layout/AttachedLayout.cs rename to src/Avalonia.Base/Layout/AttachedLayout.cs diff --git a/src/Avalonia.Layout/EffectiveViewportChangedEventArgs.cs b/src/Avalonia.Base/Layout/EffectiveViewportChangedEventArgs.cs similarity index 100% rename from src/Avalonia.Layout/EffectiveViewportChangedEventArgs.cs rename to src/Avalonia.Base/Layout/EffectiveViewportChangedEventArgs.cs diff --git a/src/Avalonia.Layout/ElementManager.cs b/src/Avalonia.Base/Layout/ElementManager.cs similarity index 100% rename from src/Avalonia.Layout/ElementManager.cs rename to src/Avalonia.Base/Layout/ElementManager.cs diff --git a/src/Avalonia.Layout/FlowLayoutAlgorithm.cs b/src/Avalonia.Base/Layout/FlowLayoutAlgorithm.cs similarity index 100% rename from src/Avalonia.Layout/FlowLayoutAlgorithm.cs rename to src/Avalonia.Base/Layout/FlowLayoutAlgorithm.cs diff --git a/src/Avalonia.Layout/IEmbeddedLayoutRoot.cs b/src/Avalonia.Base/Layout/IEmbeddedLayoutRoot.cs similarity index 100% rename from src/Avalonia.Layout/IEmbeddedLayoutRoot.cs rename to src/Avalonia.Base/Layout/IEmbeddedLayoutRoot.cs diff --git a/src/Avalonia.Layout/IFlowLayoutAlgorithmDelegates.cs b/src/Avalonia.Base/Layout/IFlowLayoutAlgorithmDelegates.cs similarity index 100% rename from src/Avalonia.Layout/IFlowLayoutAlgorithmDelegates.cs rename to src/Avalonia.Base/Layout/IFlowLayoutAlgorithmDelegates.cs diff --git a/src/Avalonia.Layout/ILayoutManager.cs b/src/Avalonia.Base/Layout/ILayoutManager.cs similarity index 100% rename from src/Avalonia.Layout/ILayoutManager.cs rename to src/Avalonia.Base/Layout/ILayoutManager.cs diff --git a/src/Avalonia.Layout/ILayoutRoot.cs b/src/Avalonia.Base/Layout/ILayoutRoot.cs similarity index 100% rename from src/Avalonia.Layout/ILayoutRoot.cs rename to src/Avalonia.Base/Layout/ILayoutRoot.cs diff --git a/src/Avalonia.Layout/ILayoutable.cs b/src/Avalonia.Base/Layout/ILayoutable.cs similarity index 100% rename from src/Avalonia.Layout/ILayoutable.cs rename to src/Avalonia.Base/Layout/ILayoutable.cs diff --git a/src/Avalonia.Layout/LayoutContext.cs b/src/Avalonia.Base/Layout/LayoutContext.cs similarity index 100% rename from src/Avalonia.Layout/LayoutContext.cs rename to src/Avalonia.Base/Layout/LayoutContext.cs diff --git a/src/Avalonia.Layout/LayoutContextAdapter.cs b/src/Avalonia.Base/Layout/LayoutContextAdapter.cs similarity index 100% rename from src/Avalonia.Layout/LayoutContextAdapter.cs rename to src/Avalonia.Base/Layout/LayoutContextAdapter.cs diff --git a/src/Avalonia.Layout/LayoutExtensions.cs b/src/Avalonia.Base/Layout/LayoutExtensions.cs similarity index 100% rename from src/Avalonia.Layout/LayoutExtensions.cs rename to src/Avalonia.Base/Layout/LayoutExtensions.cs diff --git a/src/Avalonia.Layout/LayoutHelper.cs b/src/Avalonia.Base/Layout/LayoutHelper.cs similarity index 100% rename from src/Avalonia.Layout/LayoutHelper.cs rename to src/Avalonia.Base/Layout/LayoutHelper.cs diff --git a/src/Avalonia.Layout/LayoutManager.cs b/src/Avalonia.Base/Layout/LayoutManager.cs similarity index 100% rename from src/Avalonia.Layout/LayoutManager.cs rename to src/Avalonia.Base/Layout/LayoutManager.cs diff --git a/src/Avalonia.Layout/LayoutQueue.cs b/src/Avalonia.Base/Layout/LayoutQueue.cs similarity index 100% rename from src/Avalonia.Layout/LayoutQueue.cs rename to src/Avalonia.Base/Layout/LayoutQueue.cs diff --git a/src/Avalonia.Layout/Layoutable.cs b/src/Avalonia.Base/Layout/Layoutable.cs similarity index 100% rename from src/Avalonia.Layout/Layoutable.cs rename to src/Avalonia.Base/Layout/Layoutable.cs diff --git a/src/Avalonia.Layout/NonVirtualizingLayout.cs b/src/Avalonia.Base/Layout/NonVirtualizingLayout.cs similarity index 100% rename from src/Avalonia.Layout/NonVirtualizingLayout.cs rename to src/Avalonia.Base/Layout/NonVirtualizingLayout.cs diff --git a/src/Avalonia.Layout/NonVirtualizingLayoutContext.cs b/src/Avalonia.Base/Layout/NonVirtualizingLayoutContext.cs similarity index 100% rename from src/Avalonia.Layout/NonVirtualizingLayoutContext.cs rename to src/Avalonia.Base/Layout/NonVirtualizingLayoutContext.cs diff --git a/src/Avalonia.Layout/NonVirtualizingStackLayout.cs b/src/Avalonia.Base/Layout/NonVirtualizingStackLayout.cs similarity index 100% rename from src/Avalonia.Layout/NonVirtualizingStackLayout.cs rename to src/Avalonia.Base/Layout/NonVirtualizingStackLayout.cs diff --git a/src/Avalonia.Layout/Orientation.cs b/src/Avalonia.Base/Layout/Orientation.cs similarity index 100% rename from src/Avalonia.Layout/Orientation.cs rename to src/Avalonia.Base/Layout/Orientation.cs diff --git a/src/Avalonia.Layout/OrientationBasedMeasures.cs b/src/Avalonia.Base/Layout/OrientationBasedMeasures.cs similarity index 100% rename from src/Avalonia.Layout/OrientationBasedMeasures.cs rename to src/Avalonia.Base/Layout/OrientationBasedMeasures.cs diff --git a/src/Avalonia.Layout/StackLayout.cs b/src/Avalonia.Base/Layout/StackLayout.cs similarity index 100% rename from src/Avalonia.Layout/StackLayout.cs rename to src/Avalonia.Base/Layout/StackLayout.cs diff --git a/src/Avalonia.Layout/StackLayoutState.cs b/src/Avalonia.Base/Layout/StackLayoutState.cs similarity index 100% rename from src/Avalonia.Layout/StackLayoutState.cs rename to src/Avalonia.Base/Layout/StackLayoutState.cs diff --git a/src/Avalonia.Layout/UniformGridLayout.cs b/src/Avalonia.Base/Layout/UniformGridLayout.cs similarity index 100% rename from src/Avalonia.Layout/UniformGridLayout.cs rename to src/Avalonia.Base/Layout/UniformGridLayout.cs diff --git a/src/Avalonia.Layout/UniformGridLayoutState.cs b/src/Avalonia.Base/Layout/UniformGridLayoutState.cs similarity index 100% rename from src/Avalonia.Layout/UniformGridLayoutState.cs rename to src/Avalonia.Base/Layout/UniformGridLayoutState.cs diff --git a/src/Avalonia.Layout/Utils/ListUtils.cs b/src/Avalonia.Base/Layout/Utils/ListUtils.cs similarity index 100% rename from src/Avalonia.Layout/Utils/ListUtils.cs rename to src/Avalonia.Base/Layout/Utils/ListUtils.cs diff --git a/src/Avalonia.Layout/VirtualLayoutContextAdapter.cs b/src/Avalonia.Base/Layout/VirtualLayoutContextAdapter.cs similarity index 100% rename from src/Avalonia.Layout/VirtualLayoutContextAdapter.cs rename to src/Avalonia.Base/Layout/VirtualLayoutContextAdapter.cs diff --git a/src/Avalonia.Layout/VirtualizingLayout.cs b/src/Avalonia.Base/Layout/VirtualizingLayout.cs similarity index 100% rename from src/Avalonia.Layout/VirtualizingLayout.cs rename to src/Avalonia.Base/Layout/VirtualizingLayout.cs diff --git a/src/Avalonia.Layout/VirtualizingLayoutContext.cs b/src/Avalonia.Base/Layout/VirtualizingLayoutContext.cs similarity index 100% rename from src/Avalonia.Layout/VirtualizingLayoutContext.cs rename to src/Avalonia.Base/Layout/VirtualizingLayoutContext.cs diff --git a/src/Avalonia.Layout/WrapLayout/UvBounds.cs b/src/Avalonia.Base/Layout/WrapLayout/UvBounds.cs similarity index 100% rename from src/Avalonia.Layout/WrapLayout/UvBounds.cs rename to src/Avalonia.Base/Layout/WrapLayout/UvBounds.cs diff --git a/src/Avalonia.Layout/WrapLayout/UvMeasure.cs b/src/Avalonia.Base/Layout/WrapLayout/UvMeasure.cs similarity index 100% rename from src/Avalonia.Layout/WrapLayout/UvMeasure.cs rename to src/Avalonia.Base/Layout/WrapLayout/UvMeasure.cs diff --git a/src/Avalonia.Layout/WrapLayout/WrapItem.cs b/src/Avalonia.Base/Layout/WrapLayout/WrapItem.cs similarity index 100% rename from src/Avalonia.Layout/WrapLayout/WrapItem.cs rename to src/Avalonia.Base/Layout/WrapLayout/WrapItem.cs diff --git a/src/Avalonia.Layout/WrapLayout/WrapLayout.cs b/src/Avalonia.Base/Layout/WrapLayout/WrapLayout.cs similarity index 100% rename from src/Avalonia.Layout/WrapLayout/WrapLayout.cs rename to src/Avalonia.Base/Layout/WrapLayout/WrapLayout.cs diff --git a/src/Avalonia.Layout/WrapLayout/WrapLayoutState.cs b/src/Avalonia.Base/Layout/WrapLayout/WrapLayoutState.cs similarity index 100% rename from src/Avalonia.Layout/WrapLayout/WrapLayoutState.cs rename to src/Avalonia.Base/Layout/WrapLayout/WrapLayoutState.cs diff --git a/src/Avalonia.Styling/LogicalTree/ChildIndexChangedEventArgs.cs b/src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/ChildIndexChangedEventArgs.cs rename to src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs diff --git a/src/Avalonia.Styling/LogicalTree/ControlLocator.cs b/src/Avalonia.Base/LogicalTree/ControlLocator.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/ControlLocator.cs rename to src/Avalonia.Base/LogicalTree/ControlLocator.cs diff --git a/src/Avalonia.Styling/LogicalTree/IChildIndexProvider.cs b/src/Avalonia.Base/LogicalTree/IChildIndexProvider.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/IChildIndexProvider.cs rename to src/Avalonia.Base/LogicalTree/IChildIndexProvider.cs diff --git a/src/Avalonia.Styling/LogicalTree/ILogical.cs b/src/Avalonia.Base/LogicalTree/ILogical.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/ILogical.cs rename to src/Avalonia.Base/LogicalTree/ILogical.cs diff --git a/src/Avalonia.Styling/LogicalTree/ILogicalRoot.cs b/src/Avalonia.Base/LogicalTree/ILogicalRoot.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/ILogicalRoot.cs rename to src/Avalonia.Base/LogicalTree/ILogicalRoot.cs diff --git a/src/Avalonia.Styling/LogicalTree/LogicalExtensions.cs b/src/Avalonia.Base/LogicalTree/LogicalExtensions.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/LogicalExtensions.cs rename to src/Avalonia.Base/LogicalTree/LogicalExtensions.cs diff --git a/src/Avalonia.Styling/LogicalTree/LogicalTreeAttachmentEventArgs.cs b/src/Avalonia.Base/LogicalTree/LogicalTreeAttachmentEventArgs.cs similarity index 100% rename from src/Avalonia.Styling/LogicalTree/LogicalTreeAttachmentEventArgs.cs rename to src/Avalonia.Base/LogicalTree/LogicalTreeAttachmentEventArgs.cs diff --git a/src/Avalonia.Visuals/Matrix.cs b/src/Avalonia.Base/Matrix.cs similarity index 100% rename from src/Avalonia.Visuals/Matrix.cs rename to src/Avalonia.Base/Matrix.cs diff --git a/src/Avalonia.Visuals/Media/AcrylicBackgroundSource.cs b/src/Avalonia.Base/Media/AcrylicBackgroundSource.cs similarity index 100% rename from src/Avalonia.Visuals/Media/AcrylicBackgroundSource.cs rename to src/Avalonia.Base/Media/AcrylicBackgroundSource.cs diff --git a/src/Avalonia.Visuals/Media/AlignmentX.cs b/src/Avalonia.Base/Media/AlignmentX.cs similarity index 100% rename from src/Avalonia.Visuals/Media/AlignmentX.cs rename to src/Avalonia.Base/Media/AlignmentX.cs diff --git a/src/Avalonia.Visuals/Media/AlignmentY.cs b/src/Avalonia.Base/Media/AlignmentY.cs similarity index 100% rename from src/Avalonia.Visuals/Media/AlignmentY.cs rename to src/Avalonia.Base/Media/AlignmentY.cs diff --git a/src/Avalonia.Visuals/Media/ArcSegment.cs b/src/Avalonia.Base/Media/ArcSegment.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ArcSegment.cs rename to src/Avalonia.Base/Media/ArcSegment.cs diff --git a/src/Avalonia.Visuals/Media/BaselineAlignment.cs b/src/Avalonia.Base/Media/BaselineAlignment.cs similarity index 100% rename from src/Avalonia.Visuals/Media/BaselineAlignment.cs rename to src/Avalonia.Base/Media/BaselineAlignment.cs diff --git a/src/Avalonia.Visuals/Media/BezierSegment .cs b/src/Avalonia.Base/Media/BezierSegment .cs similarity index 100% rename from src/Avalonia.Visuals/Media/BezierSegment .cs rename to src/Avalonia.Base/Media/BezierSegment .cs diff --git a/src/Avalonia.Visuals/Media/BoxShadow.cs b/src/Avalonia.Base/Media/BoxShadow.cs similarity index 100% rename from src/Avalonia.Visuals/Media/BoxShadow.cs rename to src/Avalonia.Base/Media/BoxShadow.cs diff --git a/src/Avalonia.Visuals/Media/BoxShadows.cs b/src/Avalonia.Base/Media/BoxShadows.cs similarity index 100% rename from src/Avalonia.Visuals/Media/BoxShadows.cs rename to src/Avalonia.Base/Media/BoxShadows.cs diff --git a/src/Avalonia.Visuals/Media/Brush.cs b/src/Avalonia.Base/Media/Brush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Brush.cs rename to src/Avalonia.Base/Media/Brush.cs diff --git a/src/Avalonia.Visuals/Media/BrushConverter.cs b/src/Avalonia.Base/Media/BrushConverter.cs similarity index 100% rename from src/Avalonia.Visuals/Media/BrushConverter.cs rename to src/Avalonia.Base/Media/BrushConverter.cs diff --git a/src/Avalonia.Visuals/Media/BrushExtensions.cs b/src/Avalonia.Base/Media/BrushExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/BrushExtensions.cs rename to src/Avalonia.Base/Media/BrushExtensions.cs diff --git a/src/Avalonia.Visuals/Media/BrushMappingMode.cs b/src/Avalonia.Base/Media/BrushMappingMode.cs similarity index 100% rename from src/Avalonia.Visuals/Media/BrushMappingMode.cs rename to src/Avalonia.Base/Media/BrushMappingMode.cs diff --git a/src/Avalonia.Visuals/Media/Brushes.cs b/src/Avalonia.Base/Media/Brushes.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Brushes.cs rename to src/Avalonia.Base/Media/Brushes.cs diff --git a/src/Avalonia.Visuals/Media/CharacterHit.cs b/src/Avalonia.Base/Media/CharacterHit.cs similarity index 100% rename from src/Avalonia.Visuals/Media/CharacterHit.cs rename to src/Avalonia.Base/Media/CharacterHit.cs diff --git a/src/Avalonia.Visuals/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Color.cs rename to src/Avalonia.Base/Media/Color.cs diff --git a/src/Avalonia.Visuals/Media/Colors.cs b/src/Avalonia.Base/Media/Colors.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Colors.cs rename to src/Avalonia.Base/Media/Colors.cs diff --git a/src/Avalonia.Visuals/Media/ConicGradientBrush.cs b/src/Avalonia.Base/Media/ConicGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ConicGradientBrush.cs rename to src/Avalonia.Base/Media/ConicGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/DashStyle.cs b/src/Avalonia.Base/Media/DashStyle.cs similarity index 100% rename from src/Avalonia.Visuals/Media/DashStyle.cs rename to src/Avalonia.Base/Media/DashStyle.cs diff --git a/src/Avalonia.Visuals/Media/Drawing.cs b/src/Avalonia.Base/Media/Drawing.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Drawing.cs rename to src/Avalonia.Base/Media/Drawing.cs diff --git a/src/Avalonia.Visuals/Media/DrawingContext.cs b/src/Avalonia.Base/Media/DrawingContext.cs similarity index 99% rename from src/Avalonia.Visuals/Media/DrawingContext.cs rename to src/Avalonia.Base/Media/DrawingContext.cs index d0a73ca9a8..d0f3b9e21a 100644 --- a/src/Avalonia.Visuals/Media/DrawingContext.cs +++ b/src/Avalonia.Base/Media/DrawingContext.cs @@ -4,7 +4,7 @@ using Avalonia.Platform; using Avalonia.Rendering.SceneGraph; using Avalonia.Threading; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media { diff --git a/src/Avalonia.Visuals/Media/DrawingGroup.cs b/src/Avalonia.Base/Media/DrawingGroup.cs similarity index 100% rename from src/Avalonia.Visuals/Media/DrawingGroup.cs rename to src/Avalonia.Base/Media/DrawingGroup.cs diff --git a/src/Avalonia.Visuals/Media/DrawingImage.cs b/src/Avalonia.Base/Media/DrawingImage.cs similarity index 96% rename from src/Avalonia.Visuals/Media/DrawingImage.cs rename to src/Avalonia.Base/Media/DrawingImage.cs index 488822b693..1663e384b5 100644 --- a/src/Avalonia.Visuals/Media/DrawingImage.cs +++ b/src/Avalonia.Base/Media/DrawingImage.cs @@ -1,8 +1,6 @@ using System; -using Avalonia.Data; using Avalonia.Metadata; -using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media { diff --git a/src/Avalonia.Visuals/Media/EllipseGeometry.cs b/src/Avalonia.Base/Media/EllipseGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/EllipseGeometry.cs rename to src/Avalonia.Base/Media/EllipseGeometry.cs diff --git a/src/Avalonia.Visuals/Media/ExperimentalAcrylicMaterial.cs b/src/Avalonia.Base/Media/ExperimentalAcrylicMaterial.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ExperimentalAcrylicMaterial.cs rename to src/Avalonia.Base/Media/ExperimentalAcrylicMaterial.cs diff --git a/src/Avalonia.Visuals/Media/FillRule.cs b/src/Avalonia.Base/Media/FillRule.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FillRule.cs rename to src/Avalonia.Base/Media/FillRule.cs diff --git a/src/Avalonia.Visuals/Media/FlowDirection.cs b/src/Avalonia.Base/Media/FlowDirection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FlowDirection.cs rename to src/Avalonia.Base/Media/FlowDirection.cs diff --git a/src/Avalonia.Visuals/Media/FontFallback.cs b/src/Avalonia.Base/Media/FontFallback.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontFallback.cs rename to src/Avalonia.Base/Media/FontFallback.cs diff --git a/src/Avalonia.Visuals/Media/FontFamily.cs b/src/Avalonia.Base/Media/FontFamily.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontFamily.cs rename to src/Avalonia.Base/Media/FontFamily.cs diff --git a/src/Avalonia.Visuals/Media/FontManager.cs b/src/Avalonia.Base/Media/FontManager.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontManager.cs rename to src/Avalonia.Base/Media/FontManager.cs diff --git a/src/Avalonia.Visuals/Media/FontManagerOptions.cs b/src/Avalonia.Base/Media/FontManagerOptions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontManagerOptions.cs rename to src/Avalonia.Base/Media/FontManagerOptions.cs diff --git a/src/Avalonia.Visuals/Media/FontStretch.cs b/src/Avalonia.Base/Media/FontStretch.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontStretch.cs rename to src/Avalonia.Base/Media/FontStretch.cs diff --git a/src/Avalonia.Visuals/Media/FontStyle.cs b/src/Avalonia.Base/Media/FontStyle.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontStyle.cs rename to src/Avalonia.Base/Media/FontStyle.cs diff --git a/src/Avalonia.Visuals/Media/FontWeight.cs b/src/Avalonia.Base/Media/FontWeight.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FontWeight.cs rename to src/Avalonia.Base/Media/FontWeight.cs diff --git a/src/Avalonia.Visuals/Media/Fonts/FamilyNameCollection.cs b/src/Avalonia.Base/Media/Fonts/FamilyNameCollection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Fonts/FamilyNameCollection.cs rename to src/Avalonia.Base/Media/Fonts/FamilyNameCollection.cs diff --git a/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs b/src/Avalonia.Base/Media/Fonts/FontFamilyKey.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs rename to src/Avalonia.Base/Media/Fonts/FontFamilyKey.cs diff --git a/src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs b/src/Avalonia.Base/Media/Fonts/FontFamilyLoader.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs rename to src/Avalonia.Base/Media/Fonts/FontFamilyLoader.cs diff --git a/src/Avalonia.Visuals/Media/FormattedText.cs b/src/Avalonia.Base/Media/FormattedText.cs similarity index 100% rename from src/Avalonia.Visuals/Media/FormattedText.cs rename to src/Avalonia.Base/Media/FormattedText.cs diff --git a/src/Avalonia.Visuals/Media/Geometry.cs b/src/Avalonia.Base/Media/Geometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Geometry.cs rename to src/Avalonia.Base/Media/Geometry.cs diff --git a/src/Avalonia.Visuals/Media/GeometryDrawing.cs b/src/Avalonia.Base/Media/GeometryDrawing.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GeometryDrawing.cs rename to src/Avalonia.Base/Media/GeometryDrawing.cs diff --git a/src/Avalonia.Visuals/Media/GlyphRun.cs b/src/Avalonia.Base/Media/GlyphRun.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GlyphRun.cs rename to src/Avalonia.Base/Media/GlyphRun.cs diff --git a/src/Avalonia.Visuals/Media/GlyphRunDrawing.cs b/src/Avalonia.Base/Media/GlyphRunDrawing.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GlyphRunDrawing.cs rename to src/Avalonia.Base/Media/GlyphRunDrawing.cs diff --git a/src/Avalonia.Visuals/Media/GlyphRunMetrics.cs b/src/Avalonia.Base/Media/GlyphRunMetrics.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GlyphRunMetrics.cs rename to src/Avalonia.Base/Media/GlyphRunMetrics.cs diff --git a/src/Avalonia.Visuals/Media/GlyphTypeface.cs b/src/Avalonia.Base/Media/GlyphTypeface.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GlyphTypeface.cs rename to src/Avalonia.Base/Media/GlyphTypeface.cs diff --git a/src/Avalonia.Visuals/Media/GradientBrush.cs b/src/Avalonia.Base/Media/GradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GradientBrush.cs rename to src/Avalonia.Base/Media/GradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/GradientSpreadMethod.cs b/src/Avalonia.Base/Media/GradientSpreadMethod.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GradientSpreadMethod.cs rename to src/Avalonia.Base/Media/GradientSpreadMethod.cs diff --git a/src/Avalonia.Visuals/Media/GradientStop.cs b/src/Avalonia.Base/Media/GradientStop.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GradientStop.cs rename to src/Avalonia.Base/Media/GradientStop.cs diff --git a/src/Avalonia.Visuals/Media/GradientStops.cs b/src/Avalonia.Base/Media/GradientStops.cs similarity index 100% rename from src/Avalonia.Visuals/Media/GradientStops.cs rename to src/Avalonia.Base/Media/GradientStops.cs diff --git a/src/Avalonia.Visuals/Media/HslColor.cs b/src/Avalonia.Base/Media/HslColor.cs similarity index 100% rename from src/Avalonia.Visuals/Media/HslColor.cs rename to src/Avalonia.Base/Media/HslColor.cs diff --git a/src/Avalonia.Visuals/Media/HsvColor.cs b/src/Avalonia.Base/Media/HsvColor.cs similarity index 100% rename from src/Avalonia.Visuals/Media/HsvColor.cs rename to src/Avalonia.Base/Media/HsvColor.cs diff --git a/src/Avalonia.Visuals/Media/IAffectsRender.cs b/src/Avalonia.Base/Media/IAffectsRender.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IAffectsRender.cs rename to src/Avalonia.Base/Media/IAffectsRender.cs diff --git a/src/Avalonia.Visuals/Media/IBrush.cs b/src/Avalonia.Base/Media/IBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IBrush.cs rename to src/Avalonia.Base/Media/IBrush.cs diff --git a/src/Avalonia.Visuals/Media/IConicGradientBrush.cs b/src/Avalonia.Base/Media/IConicGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IConicGradientBrush.cs rename to src/Avalonia.Base/Media/IConicGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/IDashStyle.cs b/src/Avalonia.Base/Media/IDashStyle.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IDashStyle.cs rename to src/Avalonia.Base/Media/IDashStyle.cs diff --git a/src/Avalonia.Visuals/Media/IExperimentalAcrylicMaterial.cs b/src/Avalonia.Base/Media/IExperimentalAcrylicMaterial.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IExperimentalAcrylicMaterial.cs rename to src/Avalonia.Base/Media/IExperimentalAcrylicMaterial.cs diff --git a/src/Avalonia.Visuals/Media/IGradientBrush.cs b/src/Avalonia.Base/Media/IGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IGradientBrush.cs rename to src/Avalonia.Base/Media/IGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/IGradientStop.cs b/src/Avalonia.Base/Media/IGradientStop.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IGradientStop.cs rename to src/Avalonia.Base/Media/IGradientStop.cs diff --git a/src/Avalonia.Visuals/Media/IImage.cs b/src/Avalonia.Base/Media/IImage.cs similarity index 93% rename from src/Avalonia.Visuals/Media/IImage.cs rename to src/Avalonia.Base/Media/IImage.cs index aff2a9ddf9..cbe25b7b58 100644 --- a/src/Avalonia.Visuals/Media/IImage.cs +++ b/src/Avalonia.Base/Media/IImage.cs @@ -1,5 +1,4 @@ -using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media { diff --git a/src/Avalonia.Visuals/Media/IImageBrush.cs b/src/Avalonia.Base/Media/IImageBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IImageBrush.cs rename to src/Avalonia.Base/Media/IImageBrush.cs diff --git a/src/Avalonia.Visuals/Media/ILinearGradientBrush.cs b/src/Avalonia.Base/Media/ILinearGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ILinearGradientBrush.cs rename to src/Avalonia.Base/Media/ILinearGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/IMutableBrush.cs b/src/Avalonia.Base/Media/IMutableBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IMutableBrush.cs rename to src/Avalonia.Base/Media/IMutableBrush.cs diff --git a/src/Avalonia.Visuals/Media/IMutableExperimentalAcrylicMaterial.cs b/src/Avalonia.Base/Media/IMutableExperimentalAcrylicMaterial.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IMutableExperimentalAcrylicMaterial.cs rename to src/Avalonia.Base/Media/IMutableExperimentalAcrylicMaterial.cs diff --git a/src/Avalonia.Visuals/Media/IMutableTransform.cs b/src/Avalonia.Base/Media/IMutableTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IMutableTransform.cs rename to src/Avalonia.Base/Media/IMutableTransform.cs diff --git a/src/Avalonia.Visuals/Media/IPen.cs b/src/Avalonia.Base/Media/IPen.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IPen.cs rename to src/Avalonia.Base/Media/IPen.cs diff --git a/src/Avalonia.Visuals/Media/IRadialGradientBrush.cs b/src/Avalonia.Base/Media/IRadialGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IRadialGradientBrush.cs rename to src/Avalonia.Base/Media/IRadialGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/ISolidColorBrush.cs b/src/Avalonia.Base/Media/ISolidColorBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ISolidColorBrush.cs rename to src/Avalonia.Base/Media/ISolidColorBrush.cs diff --git a/src/Avalonia.Visuals/Media/ITileBrush.cs b/src/Avalonia.Base/Media/ITileBrush.cs similarity index 97% rename from src/Avalonia.Visuals/Media/ITileBrush.cs rename to src/Avalonia.Base/Media/ITileBrush.cs index 12fb221a89..991857eec9 100644 --- a/src/Avalonia.Visuals/Media/ITileBrush.cs +++ b/src/Avalonia.Base/Media/ITileBrush.cs @@ -1,4 +1,4 @@ -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media { diff --git a/src/Avalonia.Visuals/Media/ITransform.cs b/src/Avalonia.Base/Media/ITransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ITransform.cs rename to src/Avalonia.Base/Media/ITransform.cs diff --git a/src/Avalonia.Visuals/Media/IVisualBrush.cs b/src/Avalonia.Base/Media/IVisualBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/IVisualBrush.cs rename to src/Avalonia.Base/Media/IVisualBrush.cs diff --git a/src/Avalonia.Visuals/Media/ImageBrush.cs b/src/Avalonia.Base/Media/ImageBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ImageBrush.cs rename to src/Avalonia.Base/Media/ImageBrush.cs diff --git a/src/Avalonia.Visuals/Media/ImageDrawing.cs b/src/Avalonia.Base/Media/ImageDrawing.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ImageDrawing.cs rename to src/Avalonia.Base/Media/ImageDrawing.cs diff --git a/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs b/src/Avalonia.Base/Media/Imaging/Bitmap.cs similarity index 99% rename from src/Avalonia.Visuals/Media/Imaging/Bitmap.cs rename to src/Avalonia.Base/Media/Imaging/Bitmap.cs index 647ce13528..5f1617d778 100644 --- a/src/Avalonia.Visuals/Media/Imaging/Bitmap.cs +++ b/src/Avalonia.Base/Media/Imaging/Bitmap.cs @@ -2,7 +2,6 @@ using System; using System.IO; using Avalonia.Platform; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; namespace Avalonia.Media.Imaging { diff --git a/src/Avalonia.Visuals/Media/Imaging/BitmapBlendingMode.cs b/src/Avalonia.Base/Media/Imaging/BitmapBlendingMode.cs similarity index 97% rename from src/Avalonia.Visuals/Media/Imaging/BitmapBlendingMode.cs rename to src/Avalonia.Base/Media/Imaging/BitmapBlendingMode.cs index 473b43dab3..eb39020939 100644 --- a/src/Avalonia.Visuals/Media/Imaging/BitmapBlendingMode.cs +++ b/src/Avalonia.Base/Media/Imaging/BitmapBlendingMode.cs @@ -1,4 +1,4 @@ -namespace Avalonia.Visuals.Media.Imaging +namespace Avalonia.Media.Imaging { /// /// Controls the way the bitmaps are drawn together. diff --git a/src/Avalonia.Visuals/Media/Imaging/BitmapInterpolationMode.cs b/src/Avalonia.Base/Media/Imaging/BitmapInterpolationMode.cs similarity index 93% rename from src/Avalonia.Visuals/Media/Imaging/BitmapInterpolationMode.cs rename to src/Avalonia.Base/Media/Imaging/BitmapInterpolationMode.cs index 5fa48a5ec8..7cdb5d8b9f 100644 --- a/src/Avalonia.Visuals/Media/Imaging/BitmapInterpolationMode.cs +++ b/src/Avalonia.Base/Media/Imaging/BitmapInterpolationMode.cs @@ -1,4 +1,4 @@ -namespace Avalonia.Visuals.Media.Imaging +namespace Avalonia.Media.Imaging { /// /// Controls the performance and quality of bitmap scaling. diff --git a/src/Avalonia.Visuals/Media/Imaging/CroppedBitmap.cs b/src/Avalonia.Base/Media/Imaging/CroppedBitmap.cs similarity index 98% rename from src/Avalonia.Visuals/Media/Imaging/CroppedBitmap.cs rename to src/Avalonia.Base/Media/Imaging/CroppedBitmap.cs index be1f6db561..70f9fbf567 100644 --- a/src/Avalonia.Visuals/Media/Imaging/CroppedBitmap.cs +++ b/src/Avalonia.Base/Media/Imaging/CroppedBitmap.cs @@ -1,5 +1,5 @@ using System; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media.Imaging { diff --git a/src/Avalonia.Visuals/Media/Imaging/IBitmap.cs b/src/Avalonia.Base/Media/Imaging/IBitmap.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Imaging/IBitmap.cs rename to src/Avalonia.Base/Media/Imaging/IBitmap.cs diff --git a/src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs b/src/Avalonia.Base/Media/Imaging/RenderTargetBitmap.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs rename to src/Avalonia.Base/Media/Imaging/RenderTargetBitmap.cs diff --git a/src/Avalonia.Visuals/Media/Imaging/WriteableBitmap.cs b/src/Avalonia.Base/Media/Imaging/WriteableBitmap.cs similarity index 98% rename from src/Avalonia.Visuals/Media/Imaging/WriteableBitmap.cs rename to src/Avalonia.Base/Media/Imaging/WriteableBitmap.cs index 40a24db338..1f39b1344d 100644 --- a/src/Avalonia.Visuals/Media/Imaging/WriteableBitmap.cs +++ b/src/Avalonia.Base/Media/Imaging/WriteableBitmap.cs @@ -1,8 +1,6 @@ using System; using System.IO; -using System.Threading.Tasks; using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; namespace Avalonia.Media.Imaging { diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableConicGradientBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableConicGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableConicGradientBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableConicGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableDashStyle.cs b/src/Avalonia.Base/Media/Immutable/ImmutableDashStyle.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableDashStyle.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableDashStyle.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableGradientBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableGradientBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableGradientStop.cs b/src/Avalonia.Base/Media/Immutable/ImmutableGradientStop.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableGradientStop.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableGradientStop.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableImageBrush.cs similarity index 98% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableImageBrush.cs index 2d4fe45c8e..c36e82eacb 100644 --- a/src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs +++ b/src/Avalonia.Base/Media/Immutable/ImmutableImageBrush.cs @@ -1,5 +1,4 @@ using Avalonia.Media.Imaging; -using Avalonia.Visuals.Media.Imaging; namespace Avalonia.Media.Immutable { diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableLinearGradientBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableLinearGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableLinearGradientBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableLinearGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutablePen.cs b/src/Avalonia.Base/Media/Immutable/ImmutablePen.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutablePen.cs rename to src/Avalonia.Base/Media/Immutable/ImmutablePen.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableRadialGradientBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableRadialGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableRadialGradientBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableRadialGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableSolidColorBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableSolidColorBrush.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableTextDecoration.cs b/src/Avalonia.Base/Media/Immutable/ImmutableTextDecoration.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableTextDecoration.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableTextDecoration.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableTileBrush.cs similarity index 98% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableTileBrush.cs index 1019751733..2c1844a2c2 100644 --- a/src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs +++ b/src/Avalonia.Base/Media/Immutable/ImmutableTileBrush.cs @@ -1,4 +1,4 @@ -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media.Immutable { diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableTransform.cs b/src/Avalonia.Base/Media/Immutable/ImmutableTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableTransform.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableTransform.cs diff --git a/src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs b/src/Avalonia.Base/Media/Immutable/ImmutableVisualBrush.cs similarity index 94% rename from src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs rename to src/Avalonia.Base/Media/Immutable/ImmutableVisualBrush.cs index 0fd2905660..8ecef63237 100644 --- a/src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs +++ b/src/Avalonia.Base/Media/Immutable/ImmutableVisualBrush.cs @@ -1,4 +1,4 @@ -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using Avalonia.VisualTree; namespace Avalonia.Media.Immutable @@ -33,7 +33,7 @@ namespace Avalonia.Media.Immutable RelativeRect? sourceRect = null, Stretch stretch = Stretch.Uniform, TileMode tileMode = TileMode.None, - BitmapInterpolationMode bitmapInterpolationMode = BitmapInterpolationMode.Default) + Imaging.BitmapInterpolationMode bitmapInterpolationMode = Imaging.BitmapInterpolationMode.Default) : base( alignmentX, alignmentY, diff --git a/src/Avalonia.Visuals/Media/ImmutableExperimentalAcrylicMaterial.cs b/src/Avalonia.Base/Media/ImmutableExperimentalAcrylicMaterial.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ImmutableExperimentalAcrylicMaterial.cs rename to src/Avalonia.Base/Media/ImmutableExperimentalAcrylicMaterial.cs diff --git a/src/Avalonia.Visuals/Media/KnownColors.cs b/src/Avalonia.Base/Media/KnownColors.cs similarity index 100% rename from src/Avalonia.Visuals/Media/KnownColors.cs rename to src/Avalonia.Base/Media/KnownColors.cs diff --git a/src/Avalonia.Visuals/Media/LineGeometry.cs b/src/Avalonia.Base/Media/LineGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/LineGeometry.cs rename to src/Avalonia.Base/Media/LineGeometry.cs diff --git a/src/Avalonia.Visuals/Media/LineSegment.cs b/src/Avalonia.Base/Media/LineSegment.cs similarity index 100% rename from src/Avalonia.Visuals/Media/LineSegment.cs rename to src/Avalonia.Base/Media/LineSegment.cs diff --git a/src/Avalonia.Visuals/Media/LinearGradientBrush.cs b/src/Avalonia.Base/Media/LinearGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/LinearGradientBrush.cs rename to src/Avalonia.Base/Media/LinearGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/MaterialExtensions.cs b/src/Avalonia.Base/Media/MaterialExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/MaterialExtensions.cs rename to src/Avalonia.Base/Media/MaterialExtensions.cs diff --git a/src/Avalonia.Visuals/Media/MatrixTransform.cs b/src/Avalonia.Base/Media/MatrixTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/MatrixTransform.cs rename to src/Avalonia.Base/Media/MatrixTransform.cs diff --git a/src/Avalonia.Visuals/Media/MediaExtensions.cs b/src/Avalonia.Base/Media/MediaExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/MediaExtensions.cs rename to src/Avalonia.Base/Media/MediaExtensions.cs diff --git a/src/Avalonia.Visuals/Media/PathFigure.cs b/src/Avalonia.Base/Media/PathFigure.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PathFigure.cs rename to src/Avalonia.Base/Media/PathFigure.cs diff --git a/src/Avalonia.Visuals/Media/PathGeometry.cs b/src/Avalonia.Base/Media/PathGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PathGeometry.cs rename to src/Avalonia.Base/Media/PathGeometry.cs diff --git a/src/Avalonia.Visuals/Media/PathGeometryCollections.cs b/src/Avalonia.Base/Media/PathGeometryCollections.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PathGeometryCollections.cs rename to src/Avalonia.Base/Media/PathGeometryCollections.cs diff --git a/src/Avalonia.Visuals/Media/PathMarkupParser.cs b/src/Avalonia.Base/Media/PathMarkupParser.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PathMarkupParser.cs rename to src/Avalonia.Base/Media/PathMarkupParser.cs diff --git a/src/Avalonia.Visuals/Media/PathSegment.cs b/src/Avalonia.Base/Media/PathSegment.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PathSegment.cs rename to src/Avalonia.Base/Media/PathSegment.cs diff --git a/src/Avalonia.Visuals/Media/Pen.cs b/src/Avalonia.Base/Media/Pen.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Pen.cs rename to src/Avalonia.Base/Media/Pen.cs diff --git a/src/Avalonia.Visuals/Media/PenLineCap.cs b/src/Avalonia.Base/Media/PenLineCap.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PenLineCap.cs rename to src/Avalonia.Base/Media/PenLineCap.cs diff --git a/src/Avalonia.Visuals/Media/PenLineJoin.cs b/src/Avalonia.Base/Media/PenLineJoin.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PenLineJoin.cs rename to src/Avalonia.Base/Media/PenLineJoin.cs diff --git a/src/Avalonia.Visuals/Media/PolyLineSegment.cs b/src/Avalonia.Base/Media/PolyLineSegment.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PolyLineSegment.cs rename to src/Avalonia.Base/Media/PolyLineSegment.cs diff --git a/src/Avalonia.Visuals/Media/PolylineGeometry.cs b/src/Avalonia.Base/Media/PolylineGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PolylineGeometry.cs rename to src/Avalonia.Base/Media/PolylineGeometry.cs diff --git a/src/Avalonia.Visuals/Media/PreciseEllipticArcHelper.cs b/src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PreciseEllipticArcHelper.cs rename to src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs diff --git a/src/Avalonia.Visuals/Media/QuadraticBezierSegment .cs b/src/Avalonia.Base/Media/QuadraticBezierSegment .cs similarity index 100% rename from src/Avalonia.Visuals/Media/QuadraticBezierSegment .cs rename to src/Avalonia.Base/Media/QuadraticBezierSegment .cs diff --git a/src/Avalonia.Visuals/Media/RadialGradientBrush.cs b/src/Avalonia.Base/Media/RadialGradientBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/RadialGradientBrush.cs rename to src/Avalonia.Base/Media/RadialGradientBrush.cs diff --git a/src/Avalonia.Visuals/Media/RectangleGeometry.cs b/src/Avalonia.Base/Media/RectangleGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/RectangleGeometry.cs rename to src/Avalonia.Base/Media/RectangleGeometry.cs diff --git a/src/Avalonia.Visuals/Media/RenderOptions.cs b/src/Avalonia.Base/Media/RenderOptions.cs similarity index 97% rename from src/Avalonia.Visuals/Media/RenderOptions.cs rename to src/Avalonia.Base/Media/RenderOptions.cs index 7abbc8a656..5863d0ac58 100644 --- a/src/Avalonia.Visuals/Media/RenderOptions.cs +++ b/src/Avalonia.Base/Media/RenderOptions.cs @@ -1,4 +1,4 @@ -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media { diff --git a/src/Avalonia.Visuals/Media/RotateTransform.cs b/src/Avalonia.Base/Media/RotateTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/RotateTransform.cs rename to src/Avalonia.Base/Media/RotateTransform.cs diff --git a/src/Avalonia.Visuals/Media/ScaleTransform.cs b/src/Avalonia.Base/Media/ScaleTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/ScaleTransform.cs rename to src/Avalonia.Base/Media/ScaleTransform.cs diff --git a/src/Avalonia.Visuals/Media/SkewTransform.cs b/src/Avalonia.Base/Media/SkewTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/SkewTransform.cs rename to src/Avalonia.Base/Media/SkewTransform.cs diff --git a/src/Avalonia.Visuals/Media/SolidColorBrush.cs b/src/Avalonia.Base/Media/SolidColorBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/SolidColorBrush.cs rename to src/Avalonia.Base/Media/SolidColorBrush.cs diff --git a/src/Avalonia.Visuals/Media/StreamGeometry.cs b/src/Avalonia.Base/Media/StreamGeometry.cs similarity index 100% rename from src/Avalonia.Visuals/Media/StreamGeometry.cs rename to src/Avalonia.Base/Media/StreamGeometry.cs diff --git a/src/Avalonia.Visuals/Media/StreamGeometryContext.cs b/src/Avalonia.Base/Media/StreamGeometryContext.cs similarity index 100% rename from src/Avalonia.Visuals/Media/StreamGeometryContext.cs rename to src/Avalonia.Base/Media/StreamGeometryContext.cs diff --git a/src/Avalonia.Visuals/Media/Stretch.cs b/src/Avalonia.Base/Media/Stretch.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Stretch.cs rename to src/Avalonia.Base/Media/Stretch.cs diff --git a/src/Avalonia.Visuals/Media/StretchDirection.cs b/src/Avalonia.Base/Media/StretchDirection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/StretchDirection.cs rename to src/Avalonia.Base/Media/StretchDirection.cs diff --git a/src/Avalonia.Visuals/Media/SweepDirection.cs b/src/Avalonia.Base/Media/SweepDirection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/SweepDirection.cs rename to src/Avalonia.Base/Media/SweepDirection.cs diff --git a/src/Avalonia.Visuals/Media/TextAlignment.cs b/src/Avalonia.Base/Media/TextAlignment.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextAlignment.cs rename to src/Avalonia.Base/Media/TextAlignment.cs diff --git a/src/Avalonia.Visuals/Media/TextCollapsingCreateInfo.cs b/src/Avalonia.Base/Media/TextCollapsingCreateInfo.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextCollapsingCreateInfo.cs rename to src/Avalonia.Base/Media/TextCollapsingCreateInfo.cs diff --git a/src/Avalonia.Visuals/Media/TextDecoration.cs b/src/Avalonia.Base/Media/TextDecoration.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextDecoration.cs rename to src/Avalonia.Base/Media/TextDecoration.cs diff --git a/src/Avalonia.Visuals/Media/TextDecorationCollection.cs b/src/Avalonia.Base/Media/TextDecorationCollection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextDecorationCollection.cs rename to src/Avalonia.Base/Media/TextDecorationCollection.cs diff --git a/src/Avalonia.Visuals/Media/TextDecorationLocation.cs b/src/Avalonia.Base/Media/TextDecorationLocation.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextDecorationLocation.cs rename to src/Avalonia.Base/Media/TextDecorationLocation.cs diff --git a/src/Avalonia.Visuals/Media/TextDecorationUnit.cs b/src/Avalonia.Base/Media/TextDecorationUnit.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextDecorationUnit.cs rename to src/Avalonia.Base/Media/TextDecorationUnit.cs diff --git a/src/Avalonia.Visuals/Media/TextDecorations.cs b/src/Avalonia.Base/Media/TextDecorations.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextDecorations.cs rename to src/Avalonia.Base/Media/TextDecorations.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/DrawableTextRun.cs b/src/Avalonia.Base/Media/TextFormatting/DrawableTextRun.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/DrawableTextRun.cs rename to src/Avalonia.Base/Media/TextFormatting/DrawableTextRun.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/FontMetrics.cs b/src/Avalonia.Base/Media/TextFormatting/FontMetrics.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/FontMetrics.cs rename to src/Avalonia.Base/Media/TextFormatting/FontMetrics.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/FormattedTextSource.cs b/src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/FormattedTextSource.cs rename to src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/GenericTextParagraphProperties.cs b/src/Avalonia.Base/Media/TextFormatting/GenericTextParagraphProperties.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/GenericTextParagraphProperties.cs rename to src/Avalonia.Base/Media/TextFormatting/GenericTextParagraphProperties.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/GenericTextRunProperties.cs b/src/Avalonia.Base/Media/TextFormatting/GenericTextRunProperties.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/GenericTextRunProperties.cs rename to src/Avalonia.Base/Media/TextFormatting/GenericTextRunProperties.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/ITextSource.cs b/src/Avalonia.Base/Media/TextFormatting/ITextSource.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/ITextSource.cs rename to src/Avalonia.Base/Media/TextFormatting/ITextSource.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/LogicalDirection.cs b/src/Avalonia.Base/Media/TextFormatting/LogicalDirection.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/LogicalDirection.cs rename to src/Avalonia.Base/Media/TextFormatting/LogicalDirection.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/ShapeableTextCharacters.cs b/src/Avalonia.Base/Media/TextFormatting/ShapeableTextCharacters.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/ShapeableTextCharacters.cs rename to src/Avalonia.Base/Media/TextFormatting/ShapeableTextCharacters.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/ShapedBuffer.cs b/src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/ShapedBuffer.cs rename to src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/ShapedTextCharacters.cs b/src/Avalonia.Base/Media/TextFormatting/ShapedTextCharacters.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/ShapedTextCharacters.cs rename to src/Avalonia.Base/Media/TextFormatting/ShapedTextCharacters.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/SplitResult.cs b/src/Avalonia.Base/Media/TextFormatting/SplitResult.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/SplitResult.cs rename to src/Avalonia.Base/Media/TextFormatting/SplitResult.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextBounds.cs b/src/Avalonia.Base/Media/TextFormatting/TextBounds.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextBounds.cs rename to src/Avalonia.Base/Media/TextFormatting/TextBounds.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs b/src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs rename to src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextCollapsingProperties.cs b/src/Avalonia.Base/Media/TextFormatting/TextCollapsingProperties.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextCollapsingProperties.cs rename to src/Avalonia.Base/Media/TextFormatting/TextCollapsingProperties.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextEllipsisHelper.cs b/src/Avalonia.Base/Media/TextFormatting/TextEllipsisHelper.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextEllipsisHelper.cs rename to src/Avalonia.Base/Media/TextFormatting/TextEllipsisHelper.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextEndOfLine.cs b/src/Avalonia.Base/Media/TextFormatting/TextEndOfLine.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextEndOfLine.cs rename to src/Avalonia.Base/Media/TextFormatting/TextEndOfLine.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextEndOfParagraph.cs b/src/Avalonia.Base/Media/TextFormatting/TextEndOfParagraph.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextEndOfParagraph.cs rename to src/Avalonia.Base/Media/TextFormatting/TextEndOfParagraph.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextFormatter.cs b/src/Avalonia.Base/Media/TextFormatting/TextFormatter.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextFormatter.cs rename to src/Avalonia.Base/Media/TextFormatting/TextFormatter.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs b/src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs rename to src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs b/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs rename to src/Avalonia.Base/Media/TextFormatting/TextLayout.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs b/src/Avalonia.Base/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs rename to src/Avalonia.Base/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLine.cs b/src/Avalonia.Base/Media/TextFormatting/TextLine.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextLine.cs rename to src/Avalonia.Base/Media/TextFormatting/TextLine.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLineBreak.cs b/src/Avalonia.Base/Media/TextFormatting/TextLineBreak.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextLineBreak.cs rename to src/Avalonia.Base/Media/TextFormatting/TextLineBreak.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLineImpl.cs b/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextLineImpl.cs rename to src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLineMetrics.cs b/src/Avalonia.Base/Media/TextFormatting/TextLineMetrics.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextLineMetrics.cs rename to src/Avalonia.Base/Media/TextFormatting/TextLineMetrics.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextParagraphProperties.cs b/src/Avalonia.Base/Media/TextFormatting/TextParagraphProperties.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextParagraphProperties.cs rename to src/Avalonia.Base/Media/TextFormatting/TextParagraphProperties.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextRange.cs b/src/Avalonia.Base/Media/TextFormatting/TextRange.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextRange.cs rename to src/Avalonia.Base/Media/TextFormatting/TextRange.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextRun.cs b/src/Avalonia.Base/Media/TextFormatting/TextRun.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextRun.cs rename to src/Avalonia.Base/Media/TextFormatting/TextRun.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextRunProperties.cs b/src/Avalonia.Base/Media/TextFormatting/TextRunProperties.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextRunProperties.cs rename to src/Avalonia.Base/Media/TextFormatting/TextRunProperties.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextShaper.cs b/src/Avalonia.Base/Media/TextFormatting/TextShaper.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextShaper.cs rename to src/Avalonia.Base/Media/TextFormatting/TextShaper.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextShaperOptions.cs b/src/Avalonia.Base/Media/TextFormatting/TextShaperOptions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextShaperOptions.cs rename to src/Avalonia.Base/Media/TextFormatting/TextShaperOptions.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextTrailingCharacterEllipsis.cs b/src/Avalonia.Base/Media/TextFormatting/TextTrailingCharacterEllipsis.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextTrailingCharacterEllipsis.cs rename to src/Avalonia.Base/Media/TextFormatting/TextTrailingCharacterEllipsis.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextTrailingWordEllipsis.cs b/src/Avalonia.Base/Media/TextFormatting/TextTrailingWordEllipsis.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/TextTrailingWordEllipsis.cs rename to src/Avalonia.Base/Media/TextFormatting/TextTrailingWordEllipsis.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiAlgorithm.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiAlgorithm.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiClass.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiClass.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiClass.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiClass.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiData.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiData.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiData.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiData.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiPairedBracketType.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiPairedBracketType.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/BiDiPairedBracketType.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiPairedBracketType.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/BinaryReaderExtensions.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/BinaryReaderExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/BinaryReaderExtensions.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/BinaryReaderExtensions.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/Codepoint.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/Codepoint.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/Codepoint.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/Codepoint.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/CodepointEnumerator.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/CodepointEnumerator.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/CodepointEnumerator.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/CodepointEnumerator.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/GeneralCategory.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/GeneralCategory.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/GeneralCategory.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/GeneralCategory.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/Grapheme.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/Grapheme.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/Grapheme.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/Grapheme.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/GraphemeBreakClass.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/GraphemeBreakClass.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/GraphemeBreakClass.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/GraphemeBreakClass.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/GraphemeEnumerator.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/GraphemeEnumerator.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/GraphemeEnumerator.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/GraphemeEnumerator.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreak.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreak.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreak.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreak.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreakClass.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakClass.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreakClass.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakClass.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreakEnumerator.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreakEnumerator.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreakPairTable.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakPairTable.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/LineBreakPairTable.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakPairTable.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/Script.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/Script.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/Script.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/Script.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeData.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeData.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeData.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeData.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeTrie.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrie.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeTrie.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrie.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeTrieBuilder.Constants.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.Constants.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeTrieBuilder.Constants.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.Constants.cs diff --git a/src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs rename to src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs diff --git a/src/Avalonia.Visuals/Media/TextHitTestResult.cs b/src/Avalonia.Base/Media/TextHitTestResult.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextHitTestResult.cs rename to src/Avalonia.Base/Media/TextHitTestResult.cs diff --git a/src/Avalonia.Visuals/Media/TextLeadingPrefixTrimming.cs b/src/Avalonia.Base/Media/TextLeadingPrefixTrimming.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextLeadingPrefixTrimming.cs rename to src/Avalonia.Base/Media/TextLeadingPrefixTrimming.cs diff --git a/src/Avalonia.Visuals/Media/TextNoneTrimming.cs b/src/Avalonia.Base/Media/TextNoneTrimming.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextNoneTrimming.cs rename to src/Avalonia.Base/Media/TextNoneTrimming.cs diff --git a/src/Avalonia.Visuals/Media/TextTrailingTrimming.cs b/src/Avalonia.Base/Media/TextTrailingTrimming.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextTrailingTrimming.cs rename to src/Avalonia.Base/Media/TextTrailingTrimming.cs diff --git a/src/Avalonia.Visuals/Media/TextTrimming.cs b/src/Avalonia.Base/Media/TextTrimming.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextTrimming.cs rename to src/Avalonia.Base/Media/TextTrimming.cs diff --git a/src/Avalonia.Visuals/Media/TextWrapping.cs b/src/Avalonia.Base/Media/TextWrapping.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TextWrapping.cs rename to src/Avalonia.Base/Media/TextWrapping.cs diff --git a/src/Avalonia.Visuals/Media/TileBrush.cs b/src/Avalonia.Base/Media/TileBrush.cs similarity index 99% rename from src/Avalonia.Visuals/Media/TileBrush.cs rename to src/Avalonia.Base/Media/TileBrush.cs index 0a4bc0e56d..ab1ee2d604 100644 --- a/src/Avalonia.Visuals/Media/TileBrush.cs +++ b/src/Avalonia.Base/Media/TileBrush.cs @@ -1,4 +1,4 @@ -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Media { diff --git a/src/Avalonia.Visuals/Media/Transform.cs b/src/Avalonia.Base/Media/Transform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Transform.cs rename to src/Avalonia.Base/Media/Transform.cs diff --git a/src/Avalonia.Visuals/Media/TransformConverter.cs b/src/Avalonia.Base/Media/TransformConverter.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TransformConverter.cs rename to src/Avalonia.Base/Media/TransformConverter.cs diff --git a/src/Avalonia.Visuals/Media/TransformExtensions.cs b/src/Avalonia.Base/Media/TransformExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TransformExtensions.cs rename to src/Avalonia.Base/Media/TransformExtensions.cs diff --git a/src/Avalonia.Visuals/Media/TransformGroup.cs b/src/Avalonia.Base/Media/TransformGroup.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TransformGroup.cs rename to src/Avalonia.Base/Media/TransformGroup.cs diff --git a/src/Avalonia.Visuals/Media/Transformation/InterpolationUtilities.cs b/src/Avalonia.Base/Media/Transformation/InterpolationUtilities.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Transformation/InterpolationUtilities.cs rename to src/Avalonia.Base/Media/Transformation/InterpolationUtilities.cs diff --git a/src/Avalonia.Visuals/Media/Transformation/TransformOperation.cs b/src/Avalonia.Base/Media/Transformation/TransformOperation.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Transformation/TransformOperation.cs rename to src/Avalonia.Base/Media/Transformation/TransformOperation.cs diff --git a/src/Avalonia.Visuals/Media/Transformation/TransformOperations.cs b/src/Avalonia.Base/Media/Transformation/TransformOperations.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Transformation/TransformOperations.cs rename to src/Avalonia.Base/Media/Transformation/TransformOperations.cs diff --git a/src/Avalonia.Visuals/Media/Transformation/TransformParser.cs b/src/Avalonia.Base/Media/Transformation/TransformParser.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Transformation/TransformParser.cs rename to src/Avalonia.Base/Media/Transformation/TransformParser.cs diff --git a/src/Avalonia.Visuals/Media/TranslateTransform.cs b/src/Avalonia.Base/Media/TranslateTransform.cs similarity index 100% rename from src/Avalonia.Visuals/Media/TranslateTransform.cs rename to src/Avalonia.Base/Media/TranslateTransform.cs diff --git a/src/Avalonia.Visuals/Media/Typeface.cs b/src/Avalonia.Base/Media/Typeface.cs similarity index 100% rename from src/Avalonia.Visuals/Media/Typeface.cs rename to src/Avalonia.Base/Media/Typeface.cs diff --git a/src/Avalonia.Visuals/Media/UnicodeRange.cs b/src/Avalonia.Base/Media/UnicodeRange.cs similarity index 100% rename from src/Avalonia.Visuals/Media/UnicodeRange.cs rename to src/Avalonia.Base/Media/UnicodeRange.cs diff --git a/src/Avalonia.Visuals/Media/VisualBrush.cs b/src/Avalonia.Base/Media/VisualBrush.cs similarity index 100% rename from src/Avalonia.Visuals/Media/VisualBrush.cs rename to src/Avalonia.Base/Media/VisualBrush.cs diff --git a/src/Avalonia.Visuals/Media/PixelPoint.cs b/src/Avalonia.Base/PixelPoint.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PixelPoint.cs rename to src/Avalonia.Base/PixelPoint.cs diff --git a/src/Avalonia.Visuals/Media/PixelRect.cs b/src/Avalonia.Base/PixelRect.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PixelRect.cs rename to src/Avalonia.Base/PixelRect.cs diff --git a/src/Avalonia.Visuals/Media/PixelSize.cs b/src/Avalonia.Base/PixelSize.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PixelSize.cs rename to src/Avalonia.Base/PixelSize.cs diff --git a/src/Avalonia.Visuals/Media/PixelVector.cs b/src/Avalonia.Base/PixelVector.cs similarity index 100% rename from src/Avalonia.Visuals/Media/PixelVector.cs rename to src/Avalonia.Base/PixelVector.cs diff --git a/src/Avalonia.Visuals/Platform/AlphaFormat.cs b/src/Avalonia.Base/Platform/AlphaFormat.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/AlphaFormat.cs rename to src/Avalonia.Base/Platform/AlphaFormat.cs diff --git a/src/Avalonia.Visuals/Platform/IBitmapImpl.cs b/src/Avalonia.Base/Platform/IBitmapImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IBitmapImpl.cs rename to src/Avalonia.Base/Platform/IBitmapImpl.cs diff --git a/src/Avalonia.Input/Platform/ICursorFactory.cs b/src/Avalonia.Base/Platform/ICursorFactory.cs similarity index 100% rename from src/Avalonia.Input/Platform/ICursorFactory.cs rename to src/Avalonia.Base/Platform/ICursorFactory.cs diff --git a/src/Avalonia.Input/Platform/ICursorImpl.cs b/src/Avalonia.Base/Platform/ICursorImpl.cs similarity index 100% rename from src/Avalonia.Input/Platform/ICursorImpl.cs rename to src/Avalonia.Base/Platform/ICursorImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IDrawingContextImpl.cs b/src/Avalonia.Base/Platform/IDrawingContextImpl.cs similarity index 99% rename from src/Avalonia.Visuals/Platform/IDrawingContextImpl.cs rename to src/Avalonia.Base/Platform/IDrawingContextImpl.cs index 82af6ff0b6..4e6612e908 100644 --- a/src/Avalonia.Visuals/Platform/IDrawingContextImpl.cs +++ b/src/Avalonia.Base/Platform/IDrawingContextImpl.cs @@ -2,7 +2,7 @@ using System; using Avalonia.Media; using Avalonia.Rendering.SceneGraph; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Platform { diff --git a/src/Avalonia.Visuals/Platform/IDrawingContextWithAcrylicLikeSupport.cs b/src/Avalonia.Base/Platform/IDrawingContextWithAcrylicLikeSupport.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IDrawingContextWithAcrylicLikeSupport.cs rename to src/Avalonia.Base/Platform/IDrawingContextWithAcrylicLikeSupport.cs diff --git a/src/Avalonia.Visuals/Platform/IFontManagerImpl.cs b/src/Avalonia.Base/Platform/IFontManagerImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IFontManagerImpl.cs rename to src/Avalonia.Base/Platform/IFontManagerImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IGeometryContext.cs b/src/Avalonia.Base/Platform/IGeometryContext.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IGeometryContext.cs rename to src/Avalonia.Base/Platform/IGeometryContext.cs diff --git a/src/Avalonia.Visuals/Platform/IGeometryImpl.cs b/src/Avalonia.Base/Platform/IGeometryImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IGeometryImpl.cs rename to src/Avalonia.Base/Platform/IGeometryImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IGlyphRunImpl.cs b/src/Avalonia.Base/Platform/IGlyphRunImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IGlyphRunImpl.cs rename to src/Avalonia.Base/Platform/IGlyphRunImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IGlyphTypefaceImpl.cs b/src/Avalonia.Base/Platform/IGlyphTypefaceImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IGlyphTypefaceImpl.cs rename to src/Avalonia.Base/Platform/IGlyphTypefaceImpl.cs diff --git a/src/Avalonia.Visuals/Platform/ILockedFramebuffer.cs b/src/Avalonia.Base/Platform/ILockedFramebuffer.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/ILockedFramebuffer.cs rename to src/Avalonia.Base/Platform/ILockedFramebuffer.cs diff --git a/src/Avalonia.Visuals/Platform/IModuleEnvironmentChecker.cs b/src/Avalonia.Base/Platform/IModuleEnvironmentChecker.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IModuleEnvironmentChecker.cs rename to src/Avalonia.Base/Platform/IModuleEnvironmentChecker.cs diff --git a/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs b/src/Avalonia.Base/Platform/IPlatformRenderInterface.cs similarity index 99% rename from src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs rename to src/Avalonia.Base/Platform/IPlatformRenderInterface.cs index 444cc2eb8c..c46efd46c3 100644 --- a/src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs +++ b/src/Avalonia.Base/Platform/IPlatformRenderInterface.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using Avalonia.Media; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Platform { diff --git a/src/Avalonia.Visuals/Platform/IPlatformSettings.cs b/src/Avalonia.Base/Platform/IPlatformSettings.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IPlatformSettings.cs rename to src/Avalonia.Base/Platform/IPlatformSettings.cs diff --git a/src/Avalonia.Visuals/Platform/IRenderTarget.cs b/src/Avalonia.Base/Platform/IRenderTarget.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IRenderTarget.cs rename to src/Avalonia.Base/Platform/IRenderTarget.cs diff --git a/src/Avalonia.Visuals/Platform/IRenderTargetBitmapImpl.cs b/src/Avalonia.Base/Platform/IRenderTargetBitmapImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IRenderTargetBitmapImpl.cs rename to src/Avalonia.Base/Platform/IRenderTargetBitmapImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IStreamGeometryContextImpl.cs b/src/Avalonia.Base/Platform/IStreamGeometryContextImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IStreamGeometryContextImpl.cs rename to src/Avalonia.Base/Platform/IStreamGeometryContextImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IStreamGeometryImpl.cs b/src/Avalonia.Base/Platform/IStreamGeometryImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IStreamGeometryImpl.cs rename to src/Avalonia.Base/Platform/IStreamGeometryImpl.cs diff --git a/src/Avalonia.Visuals/Platform/ITextShaperImpl.cs b/src/Avalonia.Base/Platform/ITextShaperImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/ITextShaperImpl.cs rename to src/Avalonia.Base/Platform/ITextShaperImpl.cs diff --git a/src/Avalonia.Visuals/Platform/ITransformedGeometryImpl.cs b/src/Avalonia.Base/Platform/ITransformedGeometryImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/ITransformedGeometryImpl.cs rename to src/Avalonia.Base/Platform/ITransformedGeometryImpl.cs diff --git a/src/Avalonia.Visuals/Platform/IWriteableBitmapImpl.cs b/src/Avalonia.Base/Platform/IWriteableBitmapImpl.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/IWriteableBitmapImpl.cs rename to src/Avalonia.Base/Platform/IWriteableBitmapImpl.cs diff --git a/src/Avalonia.Visuals/Platform/LockedFramebuffer.cs b/src/Avalonia.Base/Platform/LockedFramebuffer.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/LockedFramebuffer.cs rename to src/Avalonia.Base/Platform/LockedFramebuffer.cs diff --git a/src/Avalonia.Visuals/Platform/PathGeometryContext.cs b/src/Avalonia.Base/Platform/PathGeometryContext.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/PathGeometryContext.cs rename to src/Avalonia.Base/Platform/PathGeometryContext.cs diff --git a/src/Avalonia.Visuals/Platform/PixelFormat.cs b/src/Avalonia.Base/Platform/PixelFormat.cs similarity index 100% rename from src/Avalonia.Visuals/Platform/PixelFormat.cs rename to src/Avalonia.Base/Platform/PixelFormat.cs diff --git a/src/Avalonia.Visuals/Point.cs b/src/Avalonia.Base/Point.cs similarity index 100% rename from src/Avalonia.Visuals/Point.cs rename to src/Avalonia.Base/Point.cs diff --git a/src/Avalonia.Visuals/Points.cs b/src/Avalonia.Base/Points.cs similarity index 100% rename from src/Avalonia.Visuals/Points.cs rename to src/Avalonia.Base/Points.cs diff --git a/src/Avalonia.Base/Properties/AssemblyInfo.cs b/src/Avalonia.Base/Properties/AssemblyInfo.cs index 9ffb5872f0..4d7f487e00 100644 --- a/src/Avalonia.Base/Properties/AssemblyInfo.cs +++ b/src/Avalonia.Base/Properties/AssemblyInfo.cs @@ -1,15 +1,32 @@ -// Licensed under the MIT license. See licence.md file in the project root for full license information. - using System.Reflection; using System.Runtime.CompilerServices; using Avalonia.Metadata; +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation.Easings")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls")] [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Data.Converters")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Input")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Input.GestureRecognizers")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Input.TextInput")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Layout")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.LogicalTree")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media.Imaging")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media.Transformation")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Styling")] + [assembly: InternalsVisibleTo("Avalonia.Base.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] +[assembly: InternalsVisibleTo("Avalonia.Controls, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.Controls.DataGrid, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.Controls.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.Direct2D1.RenderTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.LeakTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.Markup.Xaml.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Visuals, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.PlatformSupport, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] - +[assembly: InternalsVisibleTo("Avalonia.Skia.RenderTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.Skia.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.Web.Blazor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] diff --git a/src/Avalonia.Visuals/Rect.cs b/src/Avalonia.Base/Rect.cs similarity index 100% rename from src/Avalonia.Visuals/Rect.cs rename to src/Avalonia.Base/Rect.cs diff --git a/src/Avalonia.Visuals/RelativePoint.cs b/src/Avalonia.Base/RelativePoint.cs similarity index 100% rename from src/Avalonia.Visuals/RelativePoint.cs rename to src/Avalonia.Base/RelativePoint.cs diff --git a/src/Avalonia.Visuals/RelativeRect.cs b/src/Avalonia.Base/RelativeRect.cs similarity index 100% rename from src/Avalonia.Visuals/RelativeRect.cs rename to src/Avalonia.Base/RelativeRect.cs diff --git a/src/Avalonia.Visuals/RenderTargetCorruptedException.cs b/src/Avalonia.Base/RenderTargetCorruptedException.cs similarity index 100% rename from src/Avalonia.Visuals/RenderTargetCorruptedException.cs rename to src/Avalonia.Base/RenderTargetCorruptedException.cs diff --git a/src/Avalonia.Visuals/Rendering/DefaultRenderTimer.cs b/src/Avalonia.Base/Rendering/DefaultRenderTimer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/DefaultRenderTimer.cs rename to src/Avalonia.Base/Rendering/DefaultRenderTimer.cs diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Base/Rendering/DeferredRenderer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/DeferredRenderer.cs rename to src/Avalonia.Base/Rendering/DeferredRenderer.cs diff --git a/src/Avalonia.Visuals/Rendering/DirtyRects.cs b/src/Avalonia.Base/Rendering/DirtyRects.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/DirtyRects.cs rename to src/Avalonia.Base/Rendering/DirtyRects.cs diff --git a/src/Avalonia.Visuals/Rendering/DirtyVisuals.cs b/src/Avalonia.Base/Rendering/DirtyVisuals.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/DirtyVisuals.cs rename to src/Avalonia.Base/Rendering/DirtyVisuals.cs diff --git a/src/Avalonia.Visuals/Rendering/DisplayDirtyRect.cs b/src/Avalonia.Base/Rendering/DisplayDirtyRect.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/DisplayDirtyRect.cs rename to src/Avalonia.Base/Rendering/DisplayDirtyRect.cs diff --git a/src/Avalonia.Visuals/Rendering/DisplayDirtyRects.cs b/src/Avalonia.Base/Rendering/DisplayDirtyRects.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/DisplayDirtyRects.cs rename to src/Avalonia.Base/Rendering/DisplayDirtyRects.cs diff --git a/src/Avalonia.Visuals/Rendering/ICustomSimpleHitTest.cs b/src/Avalonia.Base/Rendering/ICustomSimpleHitTest.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/ICustomSimpleHitTest.cs rename to src/Avalonia.Base/Rendering/ICustomSimpleHitTest.cs diff --git a/src/Avalonia.Visuals/Rendering/IDeferredRendererLock.cs b/src/Avalonia.Base/Rendering/IDeferredRendererLock.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IDeferredRendererLock.cs rename to src/Avalonia.Base/Rendering/IDeferredRendererLock.cs diff --git a/src/Avalonia.Visuals/Rendering/IRenderLoop.cs b/src/Avalonia.Base/Rendering/IRenderLoop.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IRenderLoop.cs rename to src/Avalonia.Base/Rendering/IRenderLoop.cs diff --git a/src/Avalonia.Visuals/Rendering/IRenderLoopTask.cs b/src/Avalonia.Base/Rendering/IRenderLoopTask.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IRenderLoopTask.cs rename to src/Avalonia.Base/Rendering/IRenderLoopTask.cs diff --git a/src/Avalonia.Visuals/Rendering/IRenderRoot.cs b/src/Avalonia.Base/Rendering/IRenderRoot.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IRenderRoot.cs rename to src/Avalonia.Base/Rendering/IRenderRoot.cs diff --git a/src/Avalonia.Visuals/Rendering/IRenderTimer.cs b/src/Avalonia.Base/Rendering/IRenderTimer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IRenderTimer.cs rename to src/Avalonia.Base/Rendering/IRenderTimer.cs diff --git a/src/Avalonia.Visuals/Rendering/IRenderer.cs b/src/Avalonia.Base/Rendering/IRenderer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IRenderer.cs rename to src/Avalonia.Base/Rendering/IRenderer.cs diff --git a/src/Avalonia.Visuals/Rendering/IRendererFactory.cs b/src/Avalonia.Base/Rendering/IRendererFactory.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IRendererFactory.cs rename to src/Avalonia.Base/Rendering/IRendererFactory.cs diff --git a/src/Avalonia.Visuals/Rendering/IVisualBrushInitialize.cs b/src/Avalonia.Base/Rendering/IVisualBrushInitialize.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IVisualBrushInitialize.cs rename to src/Avalonia.Base/Rendering/IVisualBrushInitialize.cs diff --git a/src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs b/src/Avalonia.Base/Rendering/IVisualBrushRenderer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs rename to src/Avalonia.Base/Rendering/IVisualBrushRenderer.cs diff --git a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs b/src/Avalonia.Base/Rendering/ImmediateRenderer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs rename to src/Avalonia.Base/Rendering/ImmediateRenderer.cs diff --git a/src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs b/src/Avalonia.Base/Rendering/ManagedDeferredRendererLock.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs rename to src/Avalonia.Base/Rendering/ManagedDeferredRendererLock.cs diff --git a/src/Avalonia.Visuals/Rendering/RenderLayer.cs b/src/Avalonia.Base/Rendering/RenderLayer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/RenderLayer.cs rename to src/Avalonia.Base/Rendering/RenderLayer.cs diff --git a/src/Avalonia.Visuals/Rendering/RenderLayers.cs b/src/Avalonia.Base/Rendering/RenderLayers.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/RenderLayers.cs rename to src/Avalonia.Base/Rendering/RenderLayers.cs diff --git a/src/Avalonia.Visuals/Rendering/RenderLoop.cs b/src/Avalonia.Base/Rendering/RenderLoop.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/RenderLoop.cs rename to src/Avalonia.Base/Rendering/RenderLoop.cs diff --git a/src/Avalonia.Visuals/Rendering/RendererBase.cs b/src/Avalonia.Base/Rendering/RendererBase.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/RendererBase.cs rename to src/Avalonia.Base/Rendering/RendererBase.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/BitmapBlendModeNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/BitmapBlendModeNode.cs similarity index 98% rename from src/Avalonia.Visuals/Rendering/SceneGraph/BitmapBlendModeNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/BitmapBlendModeNode.cs index 45b62b843b..98e89f6549 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/BitmapBlendModeNode.cs +++ b/src/Avalonia.Base/Rendering/SceneGraph/BitmapBlendModeNode.cs @@ -1,5 +1,5 @@ using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Rendering.SceneGraph { diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/BrushDrawOperation.cs b/src/Avalonia.Base/Rendering/SceneGraph/BrushDrawOperation.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/BrushDrawOperation.cs rename to src/Avalonia.Base/Rendering/SceneGraph/BrushDrawOperation.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/ClipNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/ClipNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/ClipNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/ClipNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/CustomDrawOperation.cs b/src/Avalonia.Base/Rendering/SceneGraph/CustomDrawOperation.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/CustomDrawOperation.cs rename to src/Avalonia.Base/Rendering/SceneGraph/CustomDrawOperation.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs b/src/Avalonia.Base/Rendering/SceneGraph/DeferredDrawingContextImpl.cs similarity index 99% rename from src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs rename to src/Avalonia.Base/Rendering/SceneGraph/DeferredDrawingContextImpl.cs index 9710ca6c3c..5225b85020 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/DeferredDrawingContextImpl.cs +++ b/src/Avalonia.Base/Rendering/SceneGraph/DeferredDrawingContextImpl.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using Avalonia.Media; using Avalonia.Platform; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using Avalonia.VisualTree; namespace Avalonia.Rendering.SceneGraph diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/DrawOperation.cs b/src/Avalonia.Base/Rendering/SceneGraph/DrawOperation.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/DrawOperation.cs rename to src/Avalonia.Base/Rendering/SceneGraph/DrawOperation.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/EllipseNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/EllipseNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/EllipseNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/EllipseNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/ExperimentalAcrylicNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/ExperimentalAcrylicNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/ExperimentalAcrylicNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/ExperimentalAcrylicNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryBoundsHelper.cs b/src/Avalonia.Base/Rendering/SceneGraph/GeometryBoundsHelper.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/GeometryBoundsHelper.cs rename to src/Avalonia.Base/Rendering/SceneGraph/GeometryBoundsHelper.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryClipNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/GeometryClipNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/GeometryClipNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/GeometryClipNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/GeometryNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/GeometryNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/GeometryNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/GlyphRunNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/GlyphRunNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/GlyphRunNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/GlyphRunNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/IDrawOperation.cs b/src/Avalonia.Base/Rendering/SceneGraph/IDrawOperation.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/IDrawOperation.cs rename to src/Avalonia.Base/Rendering/SceneGraph/IDrawOperation.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/ISceneBuilder.cs b/src/Avalonia.Base/Rendering/SceneGraph/ISceneBuilder.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/ISceneBuilder.cs rename to src/Avalonia.Base/Rendering/SceneGraph/ISceneBuilder.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/IVisualNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/IVisualNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/ImageNode.cs similarity index 99% rename from src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/ImageNode.cs index d3da19d8c9..23267166a5 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs +++ b/src/Avalonia.Base/Rendering/SceneGraph/ImageNode.cs @@ -1,6 +1,6 @@ using Avalonia.Platform; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Rendering.SceneGraph { diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/LineBoundsHelper.cs b/src/Avalonia.Base/Rendering/SceneGraph/LineBoundsHelper.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/LineBoundsHelper.cs rename to src/Avalonia.Base/Rendering/SceneGraph/LineBoundsHelper.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/LineNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/LineNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/LineNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/LineNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/OpacityMaskNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/OpacityMaskNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/OpacityMaskNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/OpacityMaskNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/OpacityNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/OpacityNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/OpacityNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/OpacityNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/RectangleNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/RectangleNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/RectangleNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/RectangleNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs b/src/Avalonia.Base/Rendering/SceneGraph/Scene.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs rename to src/Avalonia.Base/Rendering/SceneGraph/Scene.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Base/Rendering/SceneGraph/SceneBuilder.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs rename to src/Avalonia.Base/Rendering/SceneGraph/SceneBuilder.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneLayer.cs b/src/Avalonia.Base/Rendering/SceneGraph/SceneLayer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/SceneLayer.cs rename to src/Avalonia.Base/Rendering/SceneGraph/SceneLayer.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneLayers.cs b/src/Avalonia.Base/Rendering/SceneGraph/SceneLayers.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/SceneLayers.cs rename to src/Avalonia.Base/Rendering/SceneGraph/SceneLayers.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Base/Rendering/SceneGraph/VisualNode.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs rename to src/Avalonia.Base/Rendering/SceneGraph/VisualNode.cs diff --git a/src/Avalonia.Visuals/Rendering/SceneInvalidatedEventArgs.cs b/src/Avalonia.Base/Rendering/SceneInvalidatedEventArgs.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SceneInvalidatedEventArgs.cs rename to src/Avalonia.Base/Rendering/SceneInvalidatedEventArgs.cs diff --git a/src/Avalonia.Visuals/Rendering/SleepLoopRenderTimer.cs b/src/Avalonia.Base/Rendering/SleepLoopRenderTimer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/SleepLoopRenderTimer.cs rename to src/Avalonia.Base/Rendering/SleepLoopRenderTimer.cs diff --git a/src/Avalonia.Visuals/Rendering/UiThreadRenderTimer.cs b/src/Avalonia.Base/Rendering/UiThreadRenderTimer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/UiThreadRenderTimer.cs rename to src/Avalonia.Base/Rendering/UiThreadRenderTimer.cs diff --git a/src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs b/src/Avalonia.Base/Rendering/Utilities/TileBrushCalculator.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/Utilities/TileBrushCalculator.cs rename to src/Avalonia.Base/Rendering/Utilities/TileBrushCalculator.cs diff --git a/src/Avalonia.Visuals/Rendering/ZIndexComparer.cs b/src/Avalonia.Base/Rendering/ZIndexComparer.cs similarity index 100% rename from src/Avalonia.Visuals/Rendering/ZIndexComparer.cs rename to src/Avalonia.Base/Rendering/ZIndexComparer.cs diff --git a/src/Avalonia.Visuals/RoundedRect.cs b/src/Avalonia.Base/RoundedRect.cs similarity index 100% rename from src/Avalonia.Visuals/RoundedRect.cs rename to src/Avalonia.Base/RoundedRect.cs diff --git a/src/Avalonia.Base/Settings.StyleCop b/src/Avalonia.Base/Settings.StyleCop deleted file mode 100644 index bb05f99bc1..0000000000 --- a/src/Avalonia.Base/Settings.StyleCop +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Avalonia.Visuals/Size.cs b/src/Avalonia.Base/Size.cs similarity index 100% rename from src/Avalonia.Visuals/Size.cs rename to src/Avalonia.Base/Size.cs diff --git a/src/Avalonia.Styling/StyledElement.cs b/src/Avalonia.Base/StyledElement.cs similarity index 100% rename from src/Avalonia.Styling/StyledElement.cs rename to src/Avalonia.Base/StyledElement.cs diff --git a/src/Avalonia.Styling/StyledElementExtensions.cs b/src/Avalonia.Base/StyledElementExtensions.cs similarity index 100% rename from src/Avalonia.Styling/StyledElementExtensions.cs rename to src/Avalonia.Base/StyledElementExtensions.cs diff --git a/src/Avalonia.Styling/Styling/Activators/AndActivator.cs b/src/Avalonia.Base/Styling/Activators/AndActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/AndActivator.cs rename to src/Avalonia.Base/Styling/Activators/AndActivator.cs diff --git a/src/Avalonia.Styling/Styling/Activators/AndActivatorBuilder.cs b/src/Avalonia.Base/Styling/Activators/AndActivatorBuilder.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/AndActivatorBuilder.cs rename to src/Avalonia.Base/Styling/Activators/AndActivatorBuilder.cs diff --git a/src/Avalonia.Styling/Styling/Activators/IStyleActivator.cs b/src/Avalonia.Base/Styling/Activators/IStyleActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/IStyleActivator.cs rename to src/Avalonia.Base/Styling/Activators/IStyleActivator.cs diff --git a/src/Avalonia.Styling/Styling/Activators/IStyleActivatorSink.cs b/src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/IStyleActivatorSink.cs rename to src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs diff --git a/src/Avalonia.Styling/Styling/Activators/NotActivator.cs b/src/Avalonia.Base/Styling/Activators/NotActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/NotActivator.cs rename to src/Avalonia.Base/Styling/Activators/NotActivator.cs diff --git a/src/Avalonia.Styling/Styling/Activators/NthChildActivator.cs b/src/Avalonia.Base/Styling/Activators/NthChildActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/NthChildActivator.cs rename to src/Avalonia.Base/Styling/Activators/NthChildActivator.cs diff --git a/src/Avalonia.Styling/Styling/Activators/OrActivator.cs b/src/Avalonia.Base/Styling/Activators/OrActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/OrActivator.cs rename to src/Avalonia.Base/Styling/Activators/OrActivator.cs diff --git a/src/Avalonia.Styling/Styling/Activators/OrActivatorBuilder.cs b/src/Avalonia.Base/Styling/Activators/OrActivatorBuilder.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/OrActivatorBuilder.cs rename to src/Avalonia.Base/Styling/Activators/OrActivatorBuilder.cs diff --git a/src/Avalonia.Styling/Styling/Activators/PropertyEqualsActivator.cs b/src/Avalonia.Base/Styling/Activators/PropertyEqualsActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/PropertyEqualsActivator.cs rename to src/Avalonia.Base/Styling/Activators/PropertyEqualsActivator.cs diff --git a/src/Avalonia.Styling/Styling/Activators/StyleActivatorBase.cs b/src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/StyleActivatorBase.cs rename to src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs diff --git a/src/Avalonia.Styling/Styling/Activators/StyleClassActivator.cs b/src/Avalonia.Base/Styling/Activators/StyleClassActivator.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Activators/StyleClassActivator.cs rename to src/Avalonia.Base/Styling/Activators/StyleClassActivator.cs diff --git a/src/Avalonia.Styling/Styling/ChildSelector.cs b/src/Avalonia.Base/Styling/ChildSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/ChildSelector.cs rename to src/Avalonia.Base/Styling/ChildSelector.cs diff --git a/src/Avalonia.Styling/Styling/DescendentSelector.cs b/src/Avalonia.Base/Styling/DescendentSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/DescendentSelector.cs rename to src/Avalonia.Base/Styling/DescendentSelector.cs diff --git a/src/Avalonia.Styling/Styling/IGlobalStyles.cs b/src/Avalonia.Base/Styling/IGlobalStyles.cs similarity index 100% rename from src/Avalonia.Styling/Styling/IGlobalStyles.cs rename to src/Avalonia.Base/Styling/IGlobalStyles.cs diff --git a/src/Avalonia.Styling/Styling/ISetter.cs b/src/Avalonia.Base/Styling/ISetter.cs similarity index 100% rename from src/Avalonia.Styling/Styling/ISetter.cs rename to src/Avalonia.Base/Styling/ISetter.cs diff --git a/src/Avalonia.Styling/Styling/ISetterInstance.cs b/src/Avalonia.Base/Styling/ISetterInstance.cs similarity index 100% rename from src/Avalonia.Styling/Styling/ISetterInstance.cs rename to src/Avalonia.Base/Styling/ISetterInstance.cs diff --git a/src/Avalonia.Styling/Styling/ISetterValue.cs b/src/Avalonia.Base/Styling/ISetterValue.cs similarity index 100% rename from src/Avalonia.Styling/Styling/ISetterValue.cs rename to src/Avalonia.Base/Styling/ISetterValue.cs diff --git a/src/Avalonia.Styling/Styling/IStyle.cs b/src/Avalonia.Base/Styling/IStyle.cs similarity index 100% rename from src/Avalonia.Styling/Styling/IStyle.cs rename to src/Avalonia.Base/Styling/IStyle.cs diff --git a/src/Avalonia.Styling/Styling/IStyleHost.cs b/src/Avalonia.Base/Styling/IStyleHost.cs similarity index 100% rename from src/Avalonia.Styling/Styling/IStyleHost.cs rename to src/Avalonia.Base/Styling/IStyleHost.cs diff --git a/src/Avalonia.Styling/Styling/IStyleInstance.cs b/src/Avalonia.Base/Styling/IStyleInstance.cs similarity index 100% rename from src/Avalonia.Styling/Styling/IStyleInstance.cs rename to src/Avalonia.Base/Styling/IStyleInstance.cs diff --git a/src/Avalonia.Styling/Styling/IStyleable.cs b/src/Avalonia.Base/Styling/IStyleable.cs similarity index 100% rename from src/Avalonia.Styling/Styling/IStyleable.cs rename to src/Avalonia.Base/Styling/IStyleable.cs diff --git a/src/Avalonia.Styling/Styling/IStyler.cs b/src/Avalonia.Base/Styling/IStyler.cs similarity index 100% rename from src/Avalonia.Styling/Styling/IStyler.cs rename to src/Avalonia.Base/Styling/IStyler.cs diff --git a/src/Avalonia.Styling/Styling/ITemplate.cs b/src/Avalonia.Base/Styling/ITemplate.cs similarity index 100% rename from src/Avalonia.Styling/Styling/ITemplate.cs rename to src/Avalonia.Base/Styling/ITemplate.cs diff --git a/src/Avalonia.Styling/Styling/ITemplatedControl.cs b/src/Avalonia.Base/Styling/ITemplatedControl.cs similarity index 100% rename from src/Avalonia.Styling/Styling/ITemplatedControl.cs rename to src/Avalonia.Base/Styling/ITemplatedControl.cs diff --git a/src/Avalonia.Styling/Styling/NotSelector.cs b/src/Avalonia.Base/Styling/NotSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/NotSelector.cs rename to src/Avalonia.Base/Styling/NotSelector.cs diff --git a/src/Avalonia.Styling/Styling/NthChildSelector.cs b/src/Avalonia.Base/Styling/NthChildSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/NthChildSelector.cs rename to src/Avalonia.Base/Styling/NthChildSelector.cs diff --git a/src/Avalonia.Styling/Styling/NthLastChildSelector.cs b/src/Avalonia.Base/Styling/NthLastChildSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/NthLastChildSelector.cs rename to src/Avalonia.Base/Styling/NthLastChildSelector.cs diff --git a/src/Avalonia.Styling/Styling/OrSelector.cs b/src/Avalonia.Base/Styling/OrSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/OrSelector.cs rename to src/Avalonia.Base/Styling/OrSelector.cs diff --git a/src/Avalonia.Styling/Styling/PropertyEqualsSelector.cs b/src/Avalonia.Base/Styling/PropertyEqualsSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/PropertyEqualsSelector.cs rename to src/Avalonia.Base/Styling/PropertyEqualsSelector.cs diff --git a/src/Avalonia.Styling/Styling/PropertySetterBindingInstance.cs b/src/Avalonia.Base/Styling/PropertySetterBindingInstance.cs similarity index 100% rename from src/Avalonia.Styling/Styling/PropertySetterBindingInstance.cs rename to src/Avalonia.Base/Styling/PropertySetterBindingInstance.cs diff --git a/src/Avalonia.Styling/Styling/PropertySetterInstance.cs b/src/Avalonia.Base/Styling/PropertySetterInstance.cs similarity index 100% rename from src/Avalonia.Styling/Styling/PropertySetterInstance.cs rename to src/Avalonia.Base/Styling/PropertySetterInstance.cs diff --git a/src/Avalonia.Styling/Styling/PropertySetterLazyInstance.cs b/src/Avalonia.Base/Styling/PropertySetterLazyInstance.cs similarity index 100% rename from src/Avalonia.Styling/Styling/PropertySetterLazyInstance.cs rename to src/Avalonia.Base/Styling/PropertySetterLazyInstance.cs diff --git a/src/Avalonia.Styling/Styling/Selector.cs b/src/Avalonia.Base/Styling/Selector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Selector.cs rename to src/Avalonia.Base/Styling/Selector.cs diff --git a/src/Avalonia.Styling/Styling/SelectorMatch.cs b/src/Avalonia.Base/Styling/SelectorMatch.cs similarity index 100% rename from src/Avalonia.Styling/Styling/SelectorMatch.cs rename to src/Avalonia.Base/Styling/SelectorMatch.cs diff --git a/src/Avalonia.Styling/Styling/Selectors.cs b/src/Avalonia.Base/Styling/Selectors.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Selectors.cs rename to src/Avalonia.Base/Styling/Selectors.cs diff --git a/src/Avalonia.Styling/Styling/Setter.cs b/src/Avalonia.Base/Styling/Setter.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Setter.cs rename to src/Avalonia.Base/Styling/Setter.cs diff --git a/src/Avalonia.Styling/Styling/Style.cs b/src/Avalonia.Base/Styling/Style.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Style.cs rename to src/Avalonia.Base/Styling/Style.cs diff --git a/src/Avalonia.Styling/Styling/StyleInstance.cs b/src/Avalonia.Base/Styling/StyleInstance.cs similarity index 100% rename from src/Avalonia.Styling/Styling/StyleInstance.cs rename to src/Avalonia.Base/Styling/StyleInstance.cs diff --git a/src/Avalonia.Styling/Styling/Styler.cs b/src/Avalonia.Base/Styling/Styler.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Styler.cs rename to src/Avalonia.Base/Styling/Styler.cs diff --git a/src/Avalonia.Styling/Styling/Styles.cs b/src/Avalonia.Base/Styling/Styles.cs similarity index 100% rename from src/Avalonia.Styling/Styling/Styles.cs rename to src/Avalonia.Base/Styling/Styles.cs diff --git a/src/Avalonia.Styling/Styling/TemplateSelector.cs b/src/Avalonia.Base/Styling/TemplateSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/TemplateSelector.cs rename to src/Avalonia.Base/Styling/TemplateSelector.cs diff --git a/src/Avalonia.Styling/Styling/TypeNameAndClassSelector.cs b/src/Avalonia.Base/Styling/TypeNameAndClassSelector.cs similarity index 100% rename from src/Avalonia.Styling/Styling/TypeNameAndClassSelector.cs rename to src/Avalonia.Base/Styling/TypeNameAndClassSelector.cs diff --git a/src/Avalonia.Visuals/Thickness.cs b/src/Avalonia.Base/Thickness.cs similarity index 100% rename from src/Avalonia.Visuals/Thickness.cs rename to src/Avalonia.Base/Thickness.cs diff --git a/src/Avalonia.Visuals/Utilities/ArrayBuilder.cs b/src/Avalonia.Base/Utilities/ArrayBuilder.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/ArrayBuilder.cs rename to src/Avalonia.Base/Utilities/ArrayBuilder.cs diff --git a/src/Avalonia.Visuals/Utilities/ArraySlice.cs b/src/Avalonia.Base/Utilities/ArraySlice.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/ArraySlice.cs rename to src/Avalonia.Base/Utilities/ArraySlice.cs diff --git a/src/Avalonia.Visuals/Utilities/BinarySearchExtension.cs b/src/Avalonia.Base/Utilities/BinarySearchExtension.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/BinarySearchExtension.cs rename to src/Avalonia.Base/Utilities/BinarySearchExtension.cs diff --git a/src/Avalonia.Visuals/Utilities/FrugalList.cs b/src/Avalonia.Base/Utilities/FrugalList.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/FrugalList.cs rename to src/Avalonia.Base/Utilities/FrugalList.cs diff --git a/src/Avalonia.Visuals/Utilities/MappedArraySlice.cs b/src/Avalonia.Base/Utilities/MappedArraySlice.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/MappedArraySlice.cs rename to src/Avalonia.Base/Utilities/MappedArraySlice.cs diff --git a/src/Avalonia.Visuals/Utilities/ReadOnlySlice.cs b/src/Avalonia.Base/Utilities/ReadOnlySlice.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/ReadOnlySlice.cs rename to src/Avalonia.Base/Utilities/ReadOnlySlice.cs diff --git a/src/Avalonia.Visuals/Utilities/Span.cs b/src/Avalonia.Base/Utilities/Span.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/Span.cs rename to src/Avalonia.Base/Utilities/Span.cs diff --git a/src/Avalonia.Visuals/Utilities/ValueSpan.cs b/src/Avalonia.Base/Utilities/ValueSpan.cs similarity index 100% rename from src/Avalonia.Visuals/Utilities/ValueSpan.cs rename to src/Avalonia.Base/Utilities/ValueSpan.cs diff --git a/src/Avalonia.Visuals/Vector.cs b/src/Avalonia.Base/Vector.cs similarity index 100% rename from src/Avalonia.Visuals/Vector.cs rename to src/Avalonia.Base/Vector.cs diff --git a/src/Avalonia.Visuals/Visual.cs b/src/Avalonia.Base/Visual.cs similarity index 100% rename from src/Avalonia.Visuals/Visual.cs rename to src/Avalonia.Base/Visual.cs diff --git a/src/Avalonia.Visuals/VisualExtensions.cs b/src/Avalonia.Base/VisualExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/VisualExtensions.cs rename to src/Avalonia.Base/VisualExtensions.cs diff --git a/src/Avalonia.Visuals/VisualTree/IHostedVisualTreeRoot.cs b/src/Avalonia.Base/VisualTree/IHostedVisualTreeRoot.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/IHostedVisualTreeRoot.cs rename to src/Avalonia.Base/VisualTree/IHostedVisualTreeRoot.cs diff --git a/src/Avalonia.Visuals/VisualTree/IVisual.cs b/src/Avalonia.Base/VisualTree/IVisual.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/IVisual.cs rename to src/Avalonia.Base/VisualTree/IVisual.cs diff --git a/src/Avalonia.Visuals/VisualTree/IVisualTreeHost.cs b/src/Avalonia.Base/VisualTree/IVisualTreeHost.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/IVisualTreeHost.cs rename to src/Avalonia.Base/VisualTree/IVisualTreeHost.cs diff --git a/src/Avalonia.Visuals/VisualTree/IVisualWithRoundRectClip.cs b/src/Avalonia.Base/VisualTree/IVisualWithRoundRectClip.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/IVisualWithRoundRectClip.cs rename to src/Avalonia.Base/VisualTree/IVisualWithRoundRectClip.cs diff --git a/src/Avalonia.Visuals/VisualTree/TransformedBounds.cs b/src/Avalonia.Base/VisualTree/TransformedBounds.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/TransformedBounds.cs rename to src/Avalonia.Base/VisualTree/TransformedBounds.cs diff --git a/src/Avalonia.Visuals/VisualTree/VisualExtensions.cs b/src/Avalonia.Base/VisualTree/VisualExtensions.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/VisualExtensions.cs rename to src/Avalonia.Base/VisualTree/VisualExtensions.cs diff --git a/src/Avalonia.Visuals/VisualTree/VisualLocator.cs b/src/Avalonia.Base/VisualTree/VisualLocator.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTree/VisualLocator.cs rename to src/Avalonia.Base/VisualTree/VisualLocator.cs diff --git a/src/Avalonia.Visuals/VisualTreeAttachmentEventArgs.cs b/src/Avalonia.Base/VisualTreeAttachmentEventArgs.cs similarity index 100% rename from src/Avalonia.Visuals/VisualTreeAttachmentEventArgs.cs rename to src/Avalonia.Base/VisualTreeAttachmentEventArgs.cs diff --git a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj index 9629324c8d..6267c74df9 100644 --- a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj +++ b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj @@ -62,34 +62,34 @@ Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) - + Markup/%(RecursiveDir)%(FileName)%(Extension) diff --git a/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj b/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj index 0438e4e0e8..410cac72fc 100644 --- a/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj +++ b/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj @@ -4,14 +4,8 @@ Avalonia.Controls.DataGrid - - - - - - diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index 5d34261bdf..4d239e69f4 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -6,14 +6,8 @@ - - - - - - diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index f8a7cdc690..0270000d8c 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -16,14 +16,8 @@ - - - - - - diff --git a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj index bb908e07dc..2fb7c07b6f 100644 --- a/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj +++ b/src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj @@ -16,14 +16,8 @@ - - - - - - diff --git a/src/Avalonia.Headless/HeadlessPlatformRenderInterface.cs b/src/Avalonia.Headless/HeadlessPlatformRenderInterface.cs index 90221bb922..addc248d58 100644 --- a/src/Avalonia.Headless/HeadlessPlatformRenderInterface.cs +++ b/src/Avalonia.Headless/HeadlessPlatformRenderInterface.cs @@ -7,7 +7,7 @@ using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Rendering.SceneGraph; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Headless { diff --git a/src/Avalonia.Input/ApiCompatBaseline.txt b/src/Avalonia.Input/ApiCompatBaseline.txt deleted file mode 100644 index 93c4cba5a6..0000000000 --- a/src/Avalonia.Input/ApiCompatBaseline.txt +++ /dev/null @@ -1,30 +0,0 @@ -Compat issues with assembly Avalonia.Input: -MembersMustExist : Member 'public Avalonia.Platform.IPlatformHandle Avalonia.Input.Cursor.PlatformCursor.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.ScrollGestureEndedEvent' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.DoubleTappedEvent' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.RightTappedEvent' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.Gestures.TappedEvent' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.IFocusManager.RemoveFocusScope(Avalonia.Input.IFocusScope)' is present in the implementation but not in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.InputElement.TextInputOptionsQueryEvent' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.InputElement.DoubleTappedEvent' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Interactivity.RoutedEvent Avalonia.Interactivity.RoutedEvent Avalonia.Input.InputElement.TappedEvent' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Input.InputElement.add_DoubleTapped(System.EventHandler)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Input.InputElement.add_Tapped(System.EventHandler)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Input.InputElement.add_TextInputOptionsQuery(System.EventHandler)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Input.InputElement.remove_DoubleTapped(System.EventHandler)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Input.InputElement.remove_Tapped(System.EventHandler)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Input.InputElement.remove_TextInputOptionsQuery(System.EventHandler)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetActive(System.Boolean)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetActive(System.Boolean)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetClient(Avalonia.Input.TextInput.ITextInputMethodClient)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptions)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs)' does not exist in the implementation but it does exist in the contract. -EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Email' is (System.Int32)5 in the implementation but (System.Int32)1 in the contract. -EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Number' is (System.Int32)4 in the implementation but (System.Int32)3 in the contract. -EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Password' is (System.Int32)8 in the implementation but (System.Int32)5 in the contract. -MembersMustExist : Member 'public Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Phone' does not exist in the implementation but it does exist in the contract. -EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Url' is (System.Int32)6 in the implementation but (System.Int32)4 in the contract. -TypesMustExist : Type 'Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Platform.IStandardCursorFactory' does not exist in the implementation but it does exist in the contract. -Total Issues: 28 diff --git a/src/Avalonia.Input/Avalonia.Input.csproj b/src/Avalonia.Input/Avalonia.Input.csproj deleted file mode 100644 index 6e0321b3aa..0000000000 --- a/src/Avalonia.Input/Avalonia.Input.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - net6.0;netstandard2.0 - - - - - - - - - - - - - - - - diff --git a/src/Avalonia.Input/Properties/AssemblyInfo.cs b/src/Avalonia.Input/Properties/AssemblyInfo.cs deleted file mode 100644 index a7126d6ba9..0000000000 --- a/src/Avalonia.Input/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using Avalonia.Metadata; - -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Input")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Input.TextInput")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Input.GestureRecognizers")] - -[assembly: InternalsVisibleTo("Avalonia.Controls, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Controls.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] diff --git a/src/Avalonia.Interactivity/ApiCompatBaseline.txt b/src/Avalonia.Interactivity/ApiCompatBaseline.txt deleted file mode 100644 index fcc74cf864..0000000000 --- a/src/Avalonia.Interactivity/ApiCompatBaseline.txt +++ /dev/null @@ -1 +0,0 @@ -Total Issues: 0 diff --git a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj b/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj deleted file mode 100644 index fa115ed980..0000000000 --- a/src/Avalonia.Interactivity/Avalonia.Interactivity.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - net6.0;netstandard2.0 - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Avalonia.Layout/ApiCompatBaseline.txt b/src/Avalonia.Layout/ApiCompatBaseline.txt deleted file mode 100644 index fcc74cf864..0000000000 --- a/src/Avalonia.Layout/ApiCompatBaseline.txt +++ /dev/null @@ -1 +0,0 @@ -Total Issues: 0 diff --git a/src/Avalonia.Layout/Avalonia.Layout.csproj b/src/Avalonia.Layout/Avalonia.Layout.csproj deleted file mode 100644 index d94c3eb101..0000000000 --- a/src/Avalonia.Layout/Avalonia.Layout.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net6.0;netstandard2.0 - - - - - - - - - - - diff --git a/src/Avalonia.Layout/Properties/AssemblyInfo.cs b/src/Avalonia.Layout/Properties/AssemblyInfo.cs deleted file mode 100644 index efcbf184b5..0000000000 --- a/src/Avalonia.Layout/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Runtime.CompilerServices; -using Avalonia.Metadata; - -[assembly: InternalsVisibleTo("Avalonia.Layout.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] - -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Layout")] - diff --git a/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj b/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj index 07cd295711..76924d060f 100644 --- a/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj +++ b/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj @@ -8,7 +8,6 @@ - diff --git a/src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj b/src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj index 5a8301a2e9..d746c6db7e 100644 --- a/src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj +++ b/src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj @@ -7,7 +7,7 @@ Avalonia.Remote.Protocol - + \ No newline at end of file diff --git a/src/Avalonia.Styling/ApiCompatBaseline.txt b/src/Avalonia.Styling/ApiCompatBaseline.txt deleted file mode 100644 index 0eedc3e360..0000000000 --- a/src/Avalonia.Styling/ApiCompatBaseline.txt +++ /dev/null @@ -1,4 +0,0 @@ -Compat issues with assembly Avalonia.Styling: -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Styling.IStyleInstance.IsActive' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Styling.IStyleInstance.IsActive.get()' is present in the implementation but not in the contract. -Total Issues: 2 diff --git a/src/Avalonia.Styling/Avalonia.Styling.csproj b/src/Avalonia.Styling/Avalonia.Styling.csproj deleted file mode 100644 index 260cfb0516..0000000000 --- a/src/Avalonia.Styling/Avalonia.Styling.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net6.0;netstandard2.0 - Avalonia.Styling - Avalonia - - - - - - - - - diff --git a/src/Avalonia.Styling/Properties/AssemblyInfo.cs b/src/Avalonia.Styling/Properties/AssemblyInfo.cs deleted file mode 100644 index ab034740ed..0000000000 --- a/src/Avalonia.Styling/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Runtime.CompilerServices; -using Avalonia.Metadata; - -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.LogicalTree")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Styling")] - -[assembly: InternalsVisibleTo("Avalonia.Styling.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] - diff --git a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj index ef200b5532..40ed4a0f87 100644 --- a/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj +++ b/src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj @@ -3,16 +3,10 @@ net6.0;netstandard2.0 - - - - - - - + diff --git a/src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj b/src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj index 885661536c..35603fe216 100644 --- a/src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj +++ b/src/Avalonia.Themes.Fluent/Avalonia.Themes.Fluent.csproj @@ -3,16 +3,10 @@ net6.0;netstandard2.0 - - - - - - - + diff --git a/src/Avalonia.Visuals/ApiCompatBaseline.txt b/src/Avalonia.Visuals/ApiCompatBaseline.txt deleted file mode 100644 index 0e82ef7367..0000000000 --- a/src/Avalonia.Visuals/ApiCompatBaseline.txt +++ /dev/null @@ -1,188 +0,0 @@ -Compat issues with assembly Avalonia.Visuals: -MembersMustExist : Member 'public System.Threading.Tasks.Task Avalonia.Animation.CompositePageTransition.Start(Avalonia.Visual, Avalonia.Visual, System.Boolean)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Threading.Tasks.Task Avalonia.Animation.CrossFade.Start(Avalonia.Visual, Avalonia.Visual)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Threading.Tasks.Task Avalonia.Animation.IPageTransition.Start(Avalonia.Visual, Avalonia.Visual, System.Boolean)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public System.Threading.Tasks.Task Avalonia.Animation.IPageTransition.Start(Avalonia.Visual, Avalonia.Visual, System.Boolean)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Threading.Tasks.Task Avalonia.Animation.IPageTransition.Start(Avalonia.Visual, Avalonia.Visual, System.Boolean, System.Threading.CancellationToken)' is present in the implementation but not in the contract. -MembersMustExist : Member 'public System.Threading.Tasks.Task Avalonia.Animation.PageSlide.Start(Avalonia.Visual, Avalonia.Visual, System.Boolean)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.DrawingContext.DrawText(Avalonia.Media.IBrush, Avalonia.Point, Avalonia.Media.FormattedText)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Boolean Avalonia.Media.FontManager.TryMatchCharacter(System.Int32, Avalonia.Media.FontStyle, Avalonia.Media.FontWeight, Avalonia.Media.FontFamily, System.Globalization.CultureInfo, Avalonia.Media.Typeface)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText..ctor()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText..ctor(Avalonia.Platform.IPlatformRenderInterface)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText..ctor(System.String, Avalonia.Media.Typeface, System.Double, Avalonia.Media.TextAlignment, Avalonia.Media.TextWrapping, Avalonia.Size)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Rect Avalonia.Media.FormattedText.Bounds.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Size Avalonia.Media.FormattedText.Constraint.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText.Constraint.set(Avalonia.Size)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Double Avalonia.Media.FormattedText.FontSize.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText.FontSize.set(System.Double)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Collections.Generic.IEnumerable Avalonia.Media.FormattedText.GetLines()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextHitTestResult Avalonia.Media.FormattedText.HitTestPoint(Avalonia.Point)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Rect Avalonia.Media.FormattedText.HitTestTextPosition(System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Collections.Generic.IEnumerable Avalonia.Media.FormattedText.HitTestTextRange(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Platform.IFormattedTextImpl Avalonia.Media.FormattedText.PlatformImpl.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Collections.Generic.IReadOnlyList Avalonia.Media.FormattedText.Spans.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText.Spans.set(System.Collections.Generic.IReadOnlyList)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.String Avalonia.Media.FormattedText.Text.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText.Text.set(System.String)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextWrapping Avalonia.Media.FormattedText.TextWrapping.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText.TextWrapping.set(Avalonia.Media.TextWrapping)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.Typeface Avalonia.Media.FormattedText.Typeface.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.FormattedText.Typeface.set(Avalonia.Media.Typeface)' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Media.FormattedTextLine' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Media.FormattedTextStyleSpan' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun..ctor()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun..ctor(Avalonia.Media.GlyphTypeface, System.Double, Avalonia.Utilities.ReadOnlySlice, Avalonia.Utilities.ReadOnlySlice, Avalonia.Utilities.ReadOnlySlice, Avalonia.Utilities.ReadOnlySlice, Avalonia.Utilities.ReadOnlySlice, System.Int32)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Utilities.ReadOnlySlice Avalonia.Media.GlyphRun.GlyphAdvances.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun.GlyphAdvances.set(Avalonia.Utilities.ReadOnlySlice)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Utilities.ReadOnlySlice Avalonia.Media.GlyphRun.GlyphClusters.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun.GlyphClusters.set(Avalonia.Utilities.ReadOnlySlice)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Utilities.ReadOnlySlice Avalonia.Media.GlyphRun.GlyphIndices.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun.GlyphIndices.set(Avalonia.Utilities.ReadOnlySlice)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Utilities.ReadOnlySlice Avalonia.Media.GlyphRun.GlyphOffsets.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun.GlyphOffsets.set(Avalonia.Utilities.ReadOnlySlice)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.GlyphRun.GlyphTypeface.set(Avalonia.Media.GlyphTypeface)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Media.ITransform Avalonia.Media.IBrush.Transform' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Media.ITransform Avalonia.Media.IBrush.Transform.get()' is present in the implementation but not in the contract. -CannotSealType : Type 'Avalonia.Media.Pen' is actually (has the sealed modifier) sealed in the implementation but not sealed in the contract. -MembersMustExist : Member 'protected void Avalonia.Media.Pen.AffectsRender(Avalonia.AvaloniaProperty[])' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'protected void Avalonia.Media.Pen.RaiseInvalidated(System.EventArgs)' does not exist in the implementation but it does exist in the contract. -CannotSealType : Type 'Avalonia.Media.TextHitTestResult' is actually (has the sealed modifier) sealed in the implementation but not sealed in the contract. -TypeCannotChangeClassification : Type 'Avalonia.Media.TextHitTestResult' is a 'struct' in the implementation but is a 'class' in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextHitTestResult..ctor()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextHitTestResult.IsInside.set(System.Boolean)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextHitTestResult.IsTrailing.set(System.Boolean)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextHitTestResult.TextPosition.set(System.Int32)' does not exist in the implementation but it does exist in the contract. -CannotMakeTypeAbstract : Type 'Avalonia.Media.TextTrimming' is abstract in the implementation but is not abstract in the contract. -TypeCannotChangeClassification : Type 'Avalonia.Media.TextTrimming' is a 'class' in the implementation but is a 'struct' in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextTrimming Avalonia.Media.TextTrimming Avalonia.Media.TextTrimming.CharacterEllipsis' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextTrimming Avalonia.Media.TextTrimming Avalonia.Media.TextTrimming.None' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextTrimming Avalonia.Media.TextTrimming Avalonia.Media.TextTrimming.WordEllipsis' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Int32 System.Int32 Avalonia.Media.TextTrimming.value__' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.Typeface..ctor(Avalonia.Media.FontFamily, Avalonia.Media.FontStyle, Avalonia.Media.FontWeight)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.Typeface..ctor(System.String, Avalonia.Media.FontStyle, Avalonia.Media.FontWeight)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.Immutable.ImmutableConicGradientBrush..ctor(System.Collections.Generic.IReadOnlyList, System.Double, Avalonia.Media.GradientSpreadMethod, System.Nullable, System.Double)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'protected void Avalonia.Media.Immutable.ImmutableGradientBrush..ctor(System.Collections.Generic.IReadOnlyList, System.Double, Avalonia.Media.GradientSpreadMethod)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.Immutable.ImmutableLinearGradientBrush..ctor(System.Collections.Generic.IReadOnlyList, System.Double, Avalonia.Media.GradientSpreadMethod, System.Nullable, System.Nullable)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.Immutable.ImmutableRadialGradientBrush..ctor(System.Collections.Generic.IReadOnlyList, System.Double, Avalonia.Media.GradientSpreadMethod, System.Nullable, System.Nullable, System.Double)' does not exist in the implementation but it does exist in the contract. -TypeCannotChangeClassification : Type 'Avalonia.Media.Immutable.ImmutableSolidColorBrush' is a 'class' in the implementation but is a 'struct' in the contract. -MembersMustExist : Member 'public void Avalonia.Media.Immutable.ImmutableSolidColorBrush..ctor(Avalonia.Media.Color, System.Double)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'protected void Avalonia.Media.Immutable.ImmutableTileBrush..ctor(Avalonia.Media.AlignmentX, Avalonia.Media.AlignmentY, Avalonia.RelativeRect, System.Double, Avalonia.RelativeRect, Avalonia.Media.Stretch, Avalonia.Media.TileMode, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.DrawableTextRun.Baseline' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.DrawableTextRun.Baseline.get()' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.DrawableTextRun.Draw(Avalonia.Media.DrawingContext)' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public void Avalonia.Media.TextFormatting.DrawableTextRun.Draw(Avalonia.Media.DrawingContext, Avalonia.Point)' is abstract in the implementation but is missing in the contract. -CannotSealType : Type 'Avalonia.Media.TextFormatting.GenericTextParagraphProperties' is actually (has the sealed modifier) sealed in the implementation but not sealed in the contract. -CannotMakeMemberNonVirtual : Member 'public Avalonia.Media.TextFormatting.TextRunProperties Avalonia.Media.TextFormatting.GenericTextParagraphProperties.DefaultTextRunProperties' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public System.Double Avalonia.Media.TextFormatting.GenericTextParagraphProperties.LineHeight' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public Avalonia.Media.TextAlignment Avalonia.Media.TextFormatting.GenericTextParagraphProperties.TextAlignment' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public Avalonia.Media.TextWrapping Avalonia.Media.TextFormatting.GenericTextParagraphProperties.TextWrapping' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public Avalonia.Media.TextFormatting.TextRunProperties Avalonia.Media.TextFormatting.GenericTextParagraphProperties.DefaultTextRunProperties.get()' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public System.Double Avalonia.Media.TextFormatting.GenericTextParagraphProperties.LineHeight.get()' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public Avalonia.Media.TextAlignment Avalonia.Media.TextFormatting.GenericTextParagraphProperties.TextAlignment.get()' is non-virtual in the implementation but is virtual in the contract. -CannotMakeMemberNonVirtual : Member 'public Avalonia.Media.TextWrapping Avalonia.Media.TextFormatting.GenericTextParagraphProperties.TextWrapping.get()' is non-virtual in the implementation but is virtual in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.GenericTextRunProperties..ctor(Avalonia.Media.Typeface, System.Double, Avalonia.Media.TextDecorationCollection, Avalonia.Media.IBrush, Avalonia.Media.IBrush, System.Globalization.CultureInfo)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.ShapeableTextCharacters..ctor(Avalonia.Utilities.ReadOnlySlice, Avalonia.Media.TextFormatting.TextRunProperties)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.ShapedTextCharacters..ctor(Avalonia.Media.GlyphRun, Avalonia.Media.TextFormatting.TextRunProperties)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.ShapedTextCharacters.Draw(Avalonia.Media.DrawingContext)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.ShapedTextCharacters.SplitTextCharactersResult Avalonia.Media.TextFormatting.ShapedTextCharacters.Split(System.Int32)' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Media.TextFormatting.ShapedTextCharacters.SplitTextCharactersResult' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'protected System.Boolean Avalonia.Media.TextFormatting.TextCharacters.TryGetRunProperties(Avalonia.Utilities.ReadOnlySlice, Avalonia.Media.Typeface, Avalonia.Media.Typeface, System.Int32)' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public System.Collections.Generic.List Avalonia.Media.TextFormatting.TextCollapsingProperties.Collapse(Avalonia.Media.TextFormatting.TextLine)' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextCollapsingStyle Avalonia.Media.TextFormatting.TextCollapsingProperties.Style.get()' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Media.TextFormatting.TextCollapsingStyle' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextEndOfLine..ctor()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextLayout..ctor(System.String, Avalonia.Media.Typeface, System.Double, Avalonia.Media.IBrush, Avalonia.Media.TextAlignment, Avalonia.Media.TextWrapping, Avalonia.Media.TextTrimming, Avalonia.Media.TextDecorationCollection, System.Double, System.Double, System.Double, System.Int32, System.Collections.Generic.IReadOnlyList>)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextLayout.Draw(Avalonia.Media.DrawingContext)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Size Avalonia.Media.TextFormatting.TextLayout.Size.get()' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Baseline' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Extent' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.FirstTextSourceIndex' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Boolean Avalonia.Media.TextFormatting.TextLine.HasOverflowed' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Height' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.Length' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.NewLineLength' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.OverhangAfter' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.OverhangLeading' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.OverhangTrailing' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Start' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.TrailingWhitespaceLength' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Width' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.WidthIncludingTrailingWhitespace' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Baseline.get()' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextLine.Draw(Avalonia.Media.DrawingContext)' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public void Avalonia.Media.TextFormatting.TextLine.Draw(Avalonia.Media.DrawingContext, Avalonia.Point)' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Extent.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.FirstTextSourceIndex.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Collections.Generic.IReadOnlyList Avalonia.Media.TextFormatting.TextLine.GetTextBounds(System.Int32, System.Int32)' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Boolean Avalonia.Media.TextFormatting.TextLine.HasOverflowed.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Height.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.Length.get()' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextLineMetrics Avalonia.Media.TextFormatting.TextLine.LineMetrics.get()' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.NewLineLength.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.OverhangAfter.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.OverhangLeading.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.OverhangTrailing.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Start.get()' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextRange Avalonia.Media.TextFormatting.TextLine.TextRange.get()' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public System.Int32 Avalonia.Media.TextFormatting.TextLine.TrailingWhitespaceLength.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.Width.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextLine.WidthIncludingTrailingWhitespace.get()' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextLineBreak..ctor(System.Collections.Generic.IReadOnlyList)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public System.Collections.Generic.IReadOnlyList Avalonia.Media.TextFormatting.TextLineBreak.RemainingCharacters.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextLineMetrics..ctor(Avalonia.Size, System.Double, Avalonia.Media.TextFormatting.TextRange, System.Boolean)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextLineMetrics Avalonia.Media.TextFormatting.TextLineMetrics.Create(System.Collections.Generic.IEnumerable, Avalonia.Media.TextFormatting.TextRange, System.Double, Avalonia.Media.TextFormatting.TextParagraphProperties)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Size Avalonia.Media.TextFormatting.TextLineMetrics.Size.get()' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextRange Avalonia.Media.TextFormatting.TextLineMetrics.TextRange.get()' does not exist in the implementation but it does exist in the contract. -CannotAddAbstractMembers : Member 'public System.Boolean Avalonia.Media.TextFormatting.TextParagraphProperties.FirstLineInParagraph' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public Avalonia.Media.FlowDirection Avalonia.Media.TextFormatting.TextParagraphProperties.FlowDirection' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextParagraphProperties.Indent' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Boolean Avalonia.Media.TextFormatting.TextParagraphProperties.FirstLineInParagraph.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public Avalonia.Media.FlowDirection Avalonia.Media.TextFormatting.TextParagraphProperties.FlowDirection.get()' is abstract in the implementation but is missing in the contract. -CannotAddAbstractMembers : Member 'public System.Double Avalonia.Media.TextFormatting.TextParagraphProperties.Indent.get()' is abstract in the implementation but is missing in the contract. -MembersMustExist : Member 'public Avalonia.Media.GlyphRun Avalonia.Media.TextFormatting.TextShaper.ShapeText(Avalonia.Utilities.ReadOnlySlice, Avalonia.Media.Typeface, System.Double, System.Globalization.CultureInfo)' does not exist in the implementation but it does exist in the contract. -CannotSealType : Type 'Avalonia.Media.TextFormatting.TextTrailingCharacterEllipsis' is actually (has the sealed modifier) sealed in the implementation but not sealed in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextTrailingCharacterEllipsis..ctor(System.Double, Avalonia.Media.TextFormatting.TextRunProperties)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextCollapsingStyle Avalonia.Media.TextFormatting.TextTrailingCharacterEllipsis.Style.get()' does not exist in the implementation but it does exist in the contract. -CannotSealType : Type 'Avalonia.Media.TextFormatting.TextTrailingWordEllipsis' is actually (has the sealed modifier) sealed in the implementation but not sealed in the contract. -MembersMustExist : Member 'public void Avalonia.Media.TextFormatting.TextTrailingWordEllipsis..ctor(System.Double, Avalonia.Media.TextFormatting.TextRunProperties)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.TextCollapsingStyle Avalonia.Media.TextFormatting.TextTrailingWordEllipsis.Style.get()' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Media.TextFormatting.Unicode.BiDiClass' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'public Avalonia.Media.TextFormatting.Unicode.BiDiClass Avalonia.Media.TextFormatting.Unicode.Codepoint.BiDiClass.get()' does not exist in the implementation but it does exist in the contract. -TypesMustExist : Type 'Avalonia.Platform.ExportRenderingSubsystemAttribute' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Platform.IDrawingContextImpl.DrawEllipse(Avalonia.Media.IBrush, Avalonia.Media.IPen, Avalonia.Rect)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Platform.IDrawingContextImpl.DrawText(Avalonia.Media.IBrush, Avalonia.Point, Avalonia.Platform.IFormattedTextImpl)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public void Avalonia.Platform.IDrawingContextImpl.DrawText(Avalonia.Media.IBrush, Avalonia.Point, Avalonia.Platform.IFormattedTextImpl)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Platform.IDrawingContextImpl.PopBitmapBlendMode()' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Platform.IDrawingContextImpl.PushBitmapBlendMode(Avalonia.Visuals.Media.Imaging.BitmapBlendingMode)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Platform.IFontManagerImpl.TryMatchCharacter(System.Int32, Avalonia.Media.FontStyle, Avalonia.Media.FontWeight, Avalonia.Media.FontFamily, System.Globalization.CultureInfo, Avalonia.Media.Typeface)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public System.Boolean Avalonia.Platform.IFontManagerImpl.TryMatchCharacter(System.Int32, Avalonia.Media.FontStyle, Avalonia.Media.FontWeight, Avalonia.Media.FontFamily, System.Globalization.CultureInfo, Avalonia.Media.Typeface)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Platform.IFontManagerImpl.TryMatchCharacter(System.Int32, Avalonia.Media.FontStyle, Avalonia.Media.FontWeight, Avalonia.Media.FontStretch, Avalonia.Media.FontFamily, System.Globalization.CultureInfo, Avalonia.Media.Typeface)' is present in the implementation but not in the contract. -TypesMustExist : Type 'Avalonia.Platform.IFormattedTextImpl' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Double Avalonia.Platform.IGeometryImpl.ContourLength' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Double Avalonia.Platform.IGeometryImpl.ContourLength.get()' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Platform.IGeometryImpl.TryGetPointAndTangentAtDistance(System.Double, Avalonia.Point, Avalonia.Point)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Platform.IGeometryImpl.TryGetPointAtDistance(System.Double, Avalonia.Point)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.Platform.IGeometryImpl.TryGetSegment(System.Double, System.Double, System.Boolean, Avalonia.Platform.IGeometryImpl)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IGeometryImpl Avalonia.Platform.IPlatformRenderInterface.CreateCombinedGeometry(Avalonia.Media.GeometryCombineMode, Avalonia.Media.Geometry, Avalonia.Media.Geometry)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IFormattedTextImpl Avalonia.Platform.IPlatformRenderInterface.CreateFormattedText(System.String, Avalonia.Media.Typeface, System.Double, Avalonia.Media.TextAlignment, Avalonia.Media.TextWrapping, Avalonia.Size, System.Collections.Generic.IReadOnlyList)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public Avalonia.Platform.IFormattedTextImpl Avalonia.Platform.IPlatformRenderInterface.CreateFormattedText(System.String, Avalonia.Media.Typeface, System.Double, Avalonia.Media.TextAlignment, Avalonia.Media.TextWrapping, Avalonia.Size, System.Collections.Generic.IReadOnlyList)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IGeometryImpl Avalonia.Platform.IPlatformRenderInterface.CreateGeometryGroup(Avalonia.Media.FillRule, System.Collections.Generic.IReadOnlyList)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IGlyphRunImpl Avalonia.Platform.IPlatformRenderInterface.CreateGlyphRun(Avalonia.Media.GlyphRun)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IGlyphRunImpl Avalonia.Platform.IPlatformRenderInterface.CreateGlyphRun(Avalonia.Media.GlyphRun, System.Double)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public Avalonia.Platform.IGlyphRunImpl Avalonia.Platform.IPlatformRenderInterface.CreateGlyphRun(Avalonia.Media.GlyphRun, System.Double)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmap(System.IO.Stream)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmap(System.String)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmapToHeight(System.IO.Stream, System.Int32, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Platform.IWriteableBitmapImpl Avalonia.Platform.IPlatformRenderInterface.LoadWriteableBitmapToWidth(System.IO.Stream, System.Int32, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Size Avalonia.Platform.IPlatformSettings.TouchDoubleClickSize' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.TimeSpan Avalonia.Platform.IPlatformSettings.TouchDoubleClickTime' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Size Avalonia.Platform.IPlatformSettings.TouchDoubleClickSize.get()' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.TimeSpan Avalonia.Platform.IPlatformSettings.TouchDoubleClickTime.get()' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Media.TextFormatting.ShapedBuffer Avalonia.Platform.ITextShaperImpl.ShapeText(Avalonia.Utilities.ReadOnlySlice, Avalonia.Media.TextFormatting.TextShaperOptions)' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Media.GlyphRun Avalonia.Platform.ITextShaperImpl.ShapeText(Avalonia.Utilities.ReadOnlySlice, Avalonia.Media.Typeface, System.Double, System.Globalization.CultureInfo)' is present in the contract but not in the implementation. -MembersMustExist : Member 'public Avalonia.Media.GlyphRun Avalonia.Platform.ITextShaperImpl.ShapeText(Avalonia.Utilities.ReadOnlySlice, Avalonia.Media.Typeface, System.Double, System.Globalization.CultureInfo)' does not exist in the implementation but it does exist in the contract. -MembersMustExist : Member 'protected void Avalonia.Rendering.RendererBase.RenderFps(Avalonia.Platform.IDrawingContextImpl, Avalonia.Rect, System.Nullable)' does not exist in the implementation but it does exist in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.VisualTree.IVisual.HasMirrorTransform' is present in the implementation but not in the contract. -InterfacesShouldHaveSameMembers : Interface member 'public System.Boolean Avalonia.VisualTree.IVisual.HasMirrorTransform.get()' is present in the implementation but not in the contract. -MembersMustExist : Member 'public void Avalonia.Utilities.ReadOnlySlice..ctor(System.ReadOnlyMemory, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract. -Total Issues: 186 diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj deleted file mode 100644 index 7e9947812b..0000000000 --- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - net6.0;netstandard2.0 - Avalonia - true - - - - - - - - - - - - - - - - - - diff --git a/src/Avalonia.Visuals/Properties/AssemblyInfo.cs b/src/Avalonia.Visuals/Properties/AssemblyInfo.cs deleted file mode 100644 index ebff097199..0000000000 --- a/src/Avalonia.Visuals/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Runtime.CompilerServices; -using Avalonia.Metadata; - -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media.Imaging")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media.Transformation")] -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia")] - -[assembly: InternalsVisibleTo("Avalonia.Visuals.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Direct2D1.RenderTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Skia.RenderTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Skia.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] -[assembly: InternalsVisibleTo("Avalonia.Web.Blazor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] - diff --git a/src/Avalonia.X11/X11IconLoader.cs b/src/Avalonia.X11/X11IconLoader.cs index 6632573ba2..36939f4103 100644 --- a/src/Avalonia.X11/X11IconLoader.cs +++ b/src/Avalonia.X11/X11IconLoader.cs @@ -2,12 +2,9 @@ using System; using System.IO; using System.Runtime.InteropServices; using Avalonia.Controls.Platform.Surfaces; -using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Platform; -using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; -using static Avalonia.X11.XLib; + namespace Avalonia.X11 { class X11IconLoader : IPlatformIconLoader diff --git a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj index 6624392258..622ec416e8 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj +++ b/src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj @@ -56,14 +56,8 @@ - - - - - - diff --git a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj index 119f57973c..f7f1a111ba 100644 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj +++ b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj @@ -11,8 +11,6 @@ - - diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index 642808eacb..2548b9f5aa 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -9,7 +9,7 @@ using Avalonia.Rendering; using Avalonia.Rendering.SceneGraph; using Avalonia.Rendering.Utilities; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SkiaSharp; namespace Avalonia.Skia diff --git a/src/Skia/Avalonia.Skia/ImmutableBitmap.cs b/src/Skia/Avalonia.Skia/ImmutableBitmap.cs index 3010f49420..5628ae177c 100644 --- a/src/Skia/Avalonia.Skia/ImmutableBitmap.cs +++ b/src/Skia/Avalonia.Skia/ImmutableBitmap.cs @@ -5,7 +5,7 @@ using System.Security.Cryptography; using Avalonia.Media.Imaging; using Avalonia.Platform; using Avalonia.Skia.Helpers; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SkiaSharp; namespace Avalonia.Skia diff --git a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs index 1c92c7d193..d3c3585cd0 100644 --- a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs +++ b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs @@ -10,7 +10,7 @@ using Avalonia.Media; using Avalonia.OpenGL; using Avalonia.OpenGL.Imaging; using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SkiaSharp; namespace Avalonia.Skia diff --git a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs index 75b4231640..166f2e8f98 100644 --- a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs +++ b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs @@ -1,7 +1,7 @@ using System; using Avalonia.Media; using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SkiaSharp; namespace Avalonia.Skia diff --git a/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs b/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs index 63a1e8f869..506edf0627 100644 --- a/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs +++ b/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs @@ -4,7 +4,7 @@ using System.Threading; using Avalonia.Media.Imaging; using Avalonia.Platform; using Avalonia.Skia.Helpers; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SkiaSharp; namespace Avalonia.Skia diff --git a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs index c32c58605f..d9e992bb80 100644 --- a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs +++ b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs @@ -9,7 +9,7 @@ using Avalonia.Direct2D1.Media.Imaging; using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SharpDX.DirectWrite; using GlyphRun = Avalonia.Media.GlyphRun; using TextAlignment = Avalonia.Media.TextAlignment; diff --git a/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs index b62a6fa5a6..a259d8fab9 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs @@ -5,11 +5,11 @@ using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Rendering.SceneGraph; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using SharpDX; using SharpDX.Direct2D1; using SharpDX.Mathematics.Interop; -using BitmapInterpolationMode = Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode; +using BitmapInterpolationMode = Avalonia.Media.Imaging.BitmapInterpolationMode; namespace Avalonia.Direct2D1.Media { diff --git a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs index 09b900b0c2..296cefad4e 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs @@ -9,7 +9,7 @@ namespace Avalonia.Direct2D1.Media { private readonly OptionalDispose _bitmap; - private readonly Visuals.Media.Imaging.BitmapInterpolationMode _bitmapInterpolationMode; + private readonly Avalonia.Media.Imaging.BitmapInterpolationMode _bitmapInterpolationMode; public ImageBrushImpl( ITileBrush brush, diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs index cac35aa4ae..df07f7f39c 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs @@ -15,21 +15,21 @@ namespace Avalonia.Direct2D1.Media { private readonly BitmapDecoder _decoder; - private static BitmapInterpolationMode ConvertInterpolationMode(Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode interpolationMode) + private static BitmapInterpolationMode ConvertInterpolationMode(Avalonia.Media.Imaging.BitmapInterpolationMode interpolationMode) { switch (interpolationMode) { - case Visuals.Media.Imaging.BitmapInterpolationMode.Default: + case Avalonia.Media.Imaging.BitmapInterpolationMode.Default: return BitmapInterpolationMode.Fant; - case Visuals.Media.Imaging.BitmapInterpolationMode.LowQuality: + case Avalonia.Media.Imaging.BitmapInterpolationMode.LowQuality: return BitmapInterpolationMode.NearestNeighbor; - case Visuals.Media.Imaging.BitmapInterpolationMode.MediumQuality: + case Avalonia.Media.Imaging.BitmapInterpolationMode.MediumQuality: return BitmapInterpolationMode.Fant; default: - case Visuals.Media.Imaging.BitmapInterpolationMode.HighQuality: + case Avalonia.Media.Imaging.BitmapInterpolationMode.HighQuality: return BitmapInterpolationMode.HighQualityCubic; } @@ -118,7 +118,7 @@ namespace Avalonia.Direct2D1.Media } } - public WicBitmapImpl(Stream stream, int decodeSize, bool horizontal, Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode interpolationMode) + public WicBitmapImpl(Stream stream, int decodeSize, bool horizontal, Avalonia.Media.Imaging.BitmapInterpolationMode interpolationMode) { _decoder = new BitmapDecoder(Direct2D1Platform.ImagingFactory, stream, DecodeOptions.CacheOnLoad); diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WriteableWicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WriteableWicBitmapImpl.cs index fef6a9aa82..885be132a4 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WriteableWicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WriteableWicBitmapImpl.cs @@ -9,7 +9,7 @@ namespace Avalonia.Direct2D1.Media.Imaging class WriteableWicBitmapImpl : WicBitmapImpl, IWriteableBitmapImpl { public WriteableWicBitmapImpl(Stream stream, int decodeSize, bool horizontal, - Avalonia.Visuals.Media.Imaging.BitmapInterpolationMode interpolationMode) + Avalonia.Media.Imaging.BitmapInterpolationMode interpolationMode) : base(stream, decodeSize, horizontal, interpolationMode) { } diff --git a/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj b/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj index a2d27fd579..1cf68c1605 100644 --- a/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj +++ b/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj @@ -7,15 +7,9 @@ - - - - - - diff --git a/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj b/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj deleted file mode 100644 index e07ece5460..0000000000 --- a/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - net6.0 - Library - true - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.Animation.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Animation.UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index b57cd55868..0000000000 --- a/tests/Avalonia.Animation.UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; -using Xunit; - -[assembly: AssemblyTitle("Avalonia.Animation.UnitTests")] - -// Don't run tests in parallel. -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file diff --git a/tests/Avalonia.Animation.UnitTests/AnimatableTests.cs b/tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs similarity index 99% rename from tests/Avalonia.Animation.UnitTests/AnimatableTests.cs rename to tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs index 1d5296bebd..f9ff8caab1 100644 --- a/tests/Avalonia.Animation.UnitTests/AnimatableTests.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs @@ -1,5 +1,5 @@ using System; -using Avalonia.Animation.Animators; +using Avalonia.Animation; using Avalonia.Controls; using Avalonia.Controls.Shapes; using Avalonia.Data; @@ -10,7 +10,7 @@ using Avalonia.UnitTests; using Moq; using Xunit; -namespace Avalonia.Animation.UnitTests +namespace Avalonia.Base.UnitTests.Animation { public class AnimatableTests { @@ -136,7 +136,7 @@ namespace Avalonia.Animation.UnitTests KeyTime = TimeSpan.FromSeconds(3), }; - var animation = new Animation() + var animation = new Avalonia.Animation.Animation() { Duration = TimeSpan.FromSeconds(3), Children = diff --git a/tests/Avalonia.Animation.UnitTests/AnimationIterationTests.cs b/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs similarity index 97% rename from tests/Avalonia.Animation.UnitTests/AnimationIterationTests.cs rename to tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs index 58bd7a42c3..ca24b95e65 100644 --- a/tests/Avalonia.Animation.UnitTests/AnimationIterationTests.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs @@ -12,8 +12,10 @@ using Avalonia.Animation.Easings; using System.Threading; using System.Reactive.Linq; -namespace Avalonia.Animation.UnitTests +namespace Avalonia.Base.UnitTests.Animation { + using Animation = Avalonia.Animation.Animation; + public class AnimationIterationTests { [Fact] @@ -37,7 +39,7 @@ namespace Avalonia.Animation.UnitTests KeyTime = TimeSpan.FromSeconds(0) }; - var animation = new Animation() + var animation = new Avalonia.Animation.Animation() { Duration = TimeSpan.FromSeconds(1), Children = @@ -86,7 +88,7 @@ namespace Avalonia.Animation.UnitTests Cue = new Cue(0d) }; - var animation = new Animation() + var animation = new Avalonia.Animation.Animation() { Duration = TimeSpan.FromSeconds(3), Delay = TimeSpan.FromSeconds(3), @@ -147,7 +149,7 @@ namespace Avalonia.Animation.UnitTests Cue = new Cue(1.0d) }; - var animation = new Animation() + var animation = new Avalonia.Animation.Animation() { Duration = TimeSpan.FromSeconds(0.05d), Delay = TimeSpan.FromSeconds(0.05d), diff --git a/tests/Avalonia.Animation.UnitTests/BrushTransitionTests.cs b/tests/Avalonia.Base.UnitTests/Animation/BrushTransitionTests.cs similarity index 93% rename from tests/Avalonia.Animation.UnitTests/BrushTransitionTests.cs rename to tests/Avalonia.Base.UnitTests/Animation/BrushTransitionTests.cs index 1986bd2ee3..acc32fd6a2 100644 --- a/tests/Avalonia.Animation.UnitTests/BrushTransitionTests.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/BrushTransitionTests.cs @@ -1,13 +1,10 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Avalonia.Animation; using Avalonia.Controls; using Avalonia.Media; using Xunit; -namespace Avalonia.Animation.UnitTests +namespace Avalonia.Base.UnitTests.Animation { public class BrushTransitionTests { diff --git a/tests/Avalonia.Animation.UnitTests/KeySplineTests.cs b/tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs similarity index 97% rename from tests/Avalonia.Animation.UnitTests/KeySplineTests.cs rename to tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs index fa2ed61e65..3cd12d92ec 100644 --- a/tests/Avalonia.Animation.UnitTests/KeySplineTests.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs @@ -1,11 +1,12 @@ using System; +using Avalonia.Animation; using Avalonia.Animation.Easings; using Avalonia.Controls.Shapes; using Avalonia.Media; using Avalonia.Styling; using Xunit; -namespace Avalonia.Animation.UnitTests +namespace Avalonia.Base.UnitTests.Animation { public class KeySplineTests { @@ -123,7 +124,7 @@ namespace Avalonia.Animation.UnitTests 0.499999999999999999) }; - var animation = new Animation() + var animation = new Avalonia.Animation.Animation() { Duration = TimeSpan.FromSeconds(5), Children = @@ -190,7 +191,7 @@ namespace Avalonia.Animation.UnitTests KeyTime = TimeSpan.FromSeconds(5), }; - var animation = new Animation() + var animation = new Avalonia.Animation.Animation() { Duration = TimeSpan.FromSeconds(5), Children = diff --git a/tests/Avalonia.Animation.UnitTests/TestClock.cs b/tests/Avalonia.Base.UnitTests/Animation/TestClock.cs similarity index 90% rename from tests/Avalonia.Animation.UnitTests/TestClock.cs rename to tests/Avalonia.Base.UnitTests/Animation/TestClock.cs index 4812880c03..6604bd29a4 100644 --- a/tests/Avalonia.Animation.UnitTests/TestClock.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/TestClock.cs @@ -1,7 +1,7 @@ using System; -using System.Collections.Generic; +using Avalonia.Animation; -namespace Avalonia.Animation.UnitTests +namespace Avalonia.Base.UnitTests.Animation { internal class TestClock : IClock, IDisposable { @@ -33,4 +33,4 @@ namespace Avalonia.Animation.UnitTests return this; } } -} \ No newline at end of file +} diff --git a/tests/Avalonia.Animation.UnitTests/TransitionsTests.cs b/tests/Avalonia.Base.UnitTests/Animation/TransitionsTests.cs similarity index 98% rename from tests/Avalonia.Animation.UnitTests/TransitionsTests.cs rename to tests/Avalonia.Base.UnitTests/Animation/TransitionsTests.cs index 640013dedd..65cf90b642 100644 --- a/tests/Avalonia.Animation.UnitTests/TransitionsTests.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/TransitionsTests.cs @@ -1,9 +1,9 @@ using System; +using Avalonia.Animation; using Avalonia.Controls; -using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Animation.UnitTests +namespace Avalonia.Base.UnitTests.Animation { public class TransitionsTests { diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj index 9628d16a6c..602e5e4496 100644 --- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj +++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj @@ -12,6 +12,11 @@ + + + + + diff --git a/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs b/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs index 7f4db23268..0d62f20f7e 100644 --- a/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs +++ b/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using System.Reactive.Linq; using Xunit; @@ -56,7 +57,7 @@ namespace Avalonia.Base.UnitTests .Select(x => x.Name) .ToArray(); - Assert.Equal(new[] { "Attached" }, names); + Assert.Contains("Attached", names); } [Fact] @@ -66,7 +67,7 @@ namespace Avalonia.Base.UnitTests .Select(x => x.Name) .ToArray(); - Assert.Equal(new[] { "Attached" }, names); + Assert.Contains("Attached", names); } [Fact] diff --git a/tests/Avalonia.Visuals.UnitTests/CornerRadiusTests.cs b/tests/Avalonia.Base.UnitTests/CornerRadiusTests.cs similarity index 93% rename from tests/Avalonia.Visuals.UnitTests/CornerRadiusTests.cs rename to tests/Avalonia.Base.UnitTests/CornerRadiusTests.cs index 21633b1cec..edfbd5acd9 100644 --- a/tests/Avalonia.Visuals.UnitTests/CornerRadiusTests.cs +++ b/tests/Avalonia.Base.UnitTests/CornerRadiusTests.cs @@ -1,7 +1,6 @@ -using System.Globalization; using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class CornerRadiusTests { @@ -37,4 +36,4 @@ namespace Avalonia.Visuals.UnitTests Assert.Equal(new CornerRadius(1.1, 2.2, 3.3, 4.4), result); } } -} \ No newline at end of file +} diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs b/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs index 1d9524a191..574ecd2ca4 100644 --- a/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs +++ b/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs @@ -7,7 +7,7 @@ using Avalonia.Data.Core.Plugins; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Markup.UnitTests.Data.Plugins +namespace Avalonia.Base.UnitTests.Data.Core.Plugins { public class DataAnnotationsValidationPluginTests : IClassFixture { diff --git a/tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs b/tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs index f522acf9ce..7cf84d767a 100644 --- a/tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs +++ b/tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs @@ -7,7 +7,7 @@ using Avalonia.Data.Converters; using Avalonia.Layout; using Xunit; -namespace Avalonia.Base.UnitTests.Data.Converters +namespace Avalonia.Base.UnitTests.Data { public class DefaultValueConverterTests { diff --git a/tests/Avalonia.Input.UnitTests/GesturesTests.cs b/tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs similarity index 98% rename from tests/Avalonia.Input.UnitTests/GesturesTests.cs rename to tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs index b2687c2555..57ec00cb58 100644 --- a/tests/Avalonia.Input.UnitTests/GesturesTests.cs +++ b/tests/Avalonia.Base.UnitTests/Input/GesturesTests.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class GesturesTests { diff --git a/tests/Avalonia.Input.UnitTests/InputElement_Enabled.cs b/tests/Avalonia.Base.UnitTests/Input/InputElement_Enabled.cs similarity index 98% rename from tests/Avalonia.Input.UnitTests/InputElement_Enabled.cs rename to tests/Avalonia.Base.UnitTests/Input/InputElement_Enabled.cs index 11d68d307e..1c001d4b3a 100644 --- a/tests/Avalonia.Input.UnitTests/InputElement_Enabled.cs +++ b/tests/Avalonia.Base.UnitTests/Input/InputElement_Enabled.cs @@ -1,7 +1,7 @@ using Avalonia.Controls; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class InputElement_Enabled { diff --git a/tests/Avalonia.Input.UnitTests/InputElement_Focus.cs b/tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs similarity index 99% rename from tests/Avalonia.Input.UnitTests/InputElement_Focus.cs rename to tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs index 602455ba36..2d8ee62ef2 100644 --- a/tests/Avalonia.Input.UnitTests/InputElement_Focus.cs +++ b/tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs @@ -1,8 +1,9 @@ using Avalonia.Controls; +using Avalonia.Input; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class InputElement_Focus { diff --git a/tests/Avalonia.Input.UnitTests/KeyGestureTests.cs b/tests/Avalonia.Base.UnitTests/Input/KeyGestureTests.cs similarity index 97% rename from tests/Avalonia.Input.UnitTests/KeyGestureTests.cs rename to tests/Avalonia.Base.UnitTests/Input/KeyGestureTests.cs index 90f9a0a985..33cd94ec98 100644 --- a/tests/Avalonia.Input.UnitTests/KeyGestureTests.cs +++ b/tests/Avalonia.Base.UnitTests/Input/KeyGestureTests.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; +using Avalonia.Input; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class KeyGestureTests { diff --git a/tests/Avalonia.Input.UnitTests/KeyboardDeviceTests.cs b/tests/Avalonia.Base.UnitTests/Input/KeyboardDeviceTests.cs similarity index 98% rename from tests/Avalonia.Input.UnitTests/KeyboardDeviceTests.cs rename to tests/Avalonia.Base.UnitTests/Input/KeyboardDeviceTests.cs index 32ba14d337..07bfa0d2e6 100644 --- a/tests/Avalonia.Input.UnitTests/KeyboardDeviceTests.cs +++ b/tests/Avalonia.Base.UnitTests/Input/KeyboardDeviceTests.cs @@ -1,12 +1,13 @@ using System; using System.Windows.Input; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.Input.Raw; using Avalonia.UnitTests; using Moq; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class KeyboardDeviceTests { diff --git a/tests/Avalonia.Input.UnitTests/KeyboardNavigationTests_Custom.cs b/tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_Custom.cs similarity index 99% rename from tests/Avalonia.Input.UnitTests/KeyboardNavigationTests_Custom.cs rename to tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_Custom.cs index f9c85ee4ca..830f7223ec 100644 --- a/tests/Avalonia.Input.UnitTests/KeyboardNavigationTests_Custom.cs +++ b/tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_Custom.cs @@ -1,7 +1,8 @@ using Avalonia.Controls; +using Avalonia.Input; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class KeyboardNavigationTests_Custom { diff --git a/tests/Avalonia.Input.UnitTests/KeyboardNavigationTests_Tab.cs b/tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_Tab.cs similarity index 99% rename from tests/Avalonia.Input.UnitTests/KeyboardNavigationTests_Tab.cs rename to tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_Tab.cs index 9a117bb71d..7fd8cb345d 100644 --- a/tests/Avalonia.Input.UnitTests/KeyboardNavigationTests_Tab.cs +++ b/tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_Tab.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using Avalonia.Controls; +using Avalonia.Input; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class KeyboardNavigationTests_Tab { diff --git a/tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs b/tests/Avalonia.Base.UnitTests/Input/MouseDeviceTests.cs similarity index 98% rename from tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs rename to tests/Avalonia.Base.UnitTests/Input/MouseDeviceTests.cs index 223f458f25..758d501cc1 100644 --- a/tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs +++ b/tests/Avalonia.Base.UnitTests/Input/MouseDeviceTests.cs @@ -1,16 +1,16 @@ -using Avalonia.Controls; +using System; +using System.Collections.Generic; +using Avalonia.Controls; +using Avalonia.Input; using Avalonia.Input.Raw; -using Avalonia.Interactivity; using Avalonia.Media; using Avalonia.Rendering; using Avalonia.UnitTests; using Avalonia.VisualTree; using Moq; -using System; -using System.Collections.Generic; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class MouseDeviceTests { diff --git a/tests/Avalonia.Input.UnitTests/PointerTests.cs b/tests/Avalonia.Base.UnitTests/Input/PointerTests.cs similarity index 95% rename from tests/Avalonia.Input.UnitTests/PointerTests.cs rename to tests/Avalonia.Base.UnitTests/Input/PointerTests.cs index e639726dbd..e25ef0a9b8 100644 --- a/tests/Avalonia.Input.UnitTests/PointerTests.cs +++ b/tests/Avalonia.Base.UnitTests/Input/PointerTests.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; using System.Linq; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Input.UnitTests +namespace Avalonia.Base.UnitTests.Input { public class PointerTests { diff --git a/tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs b/tests/Avalonia.Base.UnitTests/Input/TouchDeviceTests.cs similarity index 100% rename from tests/Avalonia.Input.UnitTests/TouchDeviceTests.cs rename to tests/Avalonia.Base.UnitTests/Input/TouchDeviceTests.cs diff --git a/tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs b/tests/Avalonia.Base.UnitTests/Interactivity/InteractiveTests.cs similarity index 99% rename from tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs rename to tests/Avalonia.Base.UnitTests/Interactivity/InteractiveTests.cs index b997ffbbd9..1ca7e9bd49 100644 --- a/tests/Avalonia.Interactivity.UnitTests/InteractiveTests.cs +++ b/tests/Avalonia.Base.UnitTests/Interactivity/InteractiveTests.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using Avalonia.Interactivity; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Interactivity.UnitTests +namespace Avalonia.Base.UnitTests.Interactivity { public class InteractiveTests { diff --git a/tests/Avalonia.Interactivity.UnitTests/RoutedEventRegistryTests.cs b/tests/Avalonia.Base.UnitTests/Interactivity/RoutedEventRegistryTests.cs similarity index 95% rename from tests/Avalonia.Interactivity.UnitTests/RoutedEventRegistryTests.cs rename to tests/Avalonia.Base.UnitTests/Interactivity/RoutedEventRegistryTests.cs index 8276039d09..05b2187df4 100644 --- a/tests/Avalonia.Interactivity.UnitTests/RoutedEventRegistryTests.cs +++ b/tests/Avalonia.Base.UnitTests/Interactivity/RoutedEventRegistryTests.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using Avalonia.Controls; using Avalonia.Input; +using Avalonia.Interactivity; using Xunit; -namespace Avalonia.Interactivity.UnitTests +namespace Avalonia.Base.UnitTests.Interactivity { public class RoutedEventRegistryTests { diff --git a/tests/Avalonia.Layout.UnitTests/ArrangeTests.cs b/tests/Avalonia.Base.UnitTests/Layout/ArrangeTests.cs similarity index 98% rename from tests/Avalonia.Layout.UnitTests/ArrangeTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/ArrangeTests.cs index db0ead1b00..b771cf2d24 100644 --- a/tests/Avalonia.Layout.UnitTests/ArrangeTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/ArrangeTests.cs @@ -1,7 +1,8 @@ using Avalonia.Controls; +using Avalonia.Layout; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class ArrangeTests { diff --git a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs b/tests/Avalonia.Base.UnitTests/Layout/FullLayoutTests.cs similarity index 98% rename from tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/FullLayoutTests.cs index dcc29a9716..1d6eead6dd 100644 --- a/tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/FullLayoutTests.cs @@ -3,12 +3,12 @@ using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; -using Avalonia.Styling; +using Avalonia.Layout; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class FullLayoutTests { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutHelperTests.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutHelperTests.cs similarity index 92% rename from tests/Avalonia.Layout.UnitTests/LayoutHelperTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutHelperTests.cs index f9187edc42..3df31939d1 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutHelperTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutHelperTests.cs @@ -1,7 +1,8 @@ using System; +using Avalonia.Layout; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class LayoutHelperTests { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutManagerTests.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs similarity index 99% rename from tests/Avalonia.Layout.UnitTests/LayoutManagerTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs index e429adce85..f0e8e1cd11 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutManagerTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutManagerTests.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using System.Linq; using Avalonia.Controls; +using Avalonia.Layout; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class LayoutManagerTests { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutQueueTests.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutQueueTests.cs similarity index 98% rename from tests/Avalonia.Layout.UnitTests/LayoutQueueTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutQueueTests.cs index f047677a8a..fc3b5c3d43 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutQueueTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutQueueTests.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Linq; +using Avalonia.Layout; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class LayoutQueueTests { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutTestControl.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutTestControl.cs similarity index 93% rename from tests/Avalonia.Layout.UnitTests/LayoutTestControl.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutTestControl.cs index f7f072eb1e..ca593cc665 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutTestControl.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutTestControl.cs @@ -1,7 +1,8 @@ using System; using Avalonia.Controls; +using Avalonia.Layout; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { internal class LayoutTestControl : Decorator { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutTestRoot.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutTestRoot.cs similarity index 94% rename from tests/Avalonia.Layout.UnitTests/LayoutTestRoot.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutTestRoot.cs index a94459df96..19ab54a339 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutTestRoot.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutTestRoot.cs @@ -1,7 +1,8 @@ using System; +using Avalonia.Layout; using Avalonia.UnitTests; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { internal class LayoutTestRoot : TestRoot, ILayoutable { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutableTests.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutableTests.cs similarity index 99% rename from tests/Avalonia.Layout.UnitTests/LayoutableTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutableTests.cs index a8aa0bbf0e..87fa8cf1f3 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutableTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutableTests.cs @@ -1,10 +1,11 @@ using System; using Avalonia.Controls; +using Avalonia.Layout; using Avalonia.UnitTests; using Moq; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class LayoutableTests { diff --git a/tests/Avalonia.Layout.UnitTests/LayoutableTests_EffectiveViewportChanged.cs b/tests/Avalonia.Base.UnitTests/Layout/LayoutableTests_EffectiveViewportChanged.cs similarity index 99% rename from tests/Avalonia.Layout.UnitTests/LayoutableTests_EffectiveViewportChanged.cs rename to tests/Avalonia.Base.UnitTests/Layout/LayoutableTests_EffectiveViewportChanged.cs index 178855d71c..7c1a525002 100644 --- a/tests/Avalonia.Layout.UnitTests/LayoutableTests_EffectiveViewportChanged.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/LayoutableTests_EffectiveViewportChanged.cs @@ -4,11 +4,12 @@ using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; +using Avalonia.Layout; using Avalonia.Media; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class LayoutableTests_EffectiveViewportChanged { diff --git a/tests/Avalonia.Layout.UnitTests/MeasureTests.cs b/tests/Avalonia.Base.UnitTests/Layout/MeasureTests.cs similarity index 99% rename from tests/Avalonia.Layout.UnitTests/MeasureTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/MeasureTests.cs index 140ebede15..32c3e89b74 100644 --- a/tests/Avalonia.Layout.UnitTests/MeasureTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/MeasureTests.cs @@ -1,7 +1,7 @@ using Avalonia.Controls; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class MeasureTests { diff --git a/tests/Avalonia.Layout.UnitTests/NonVirtualizingStackLayoutTests.cs b/tests/Avalonia.Base.UnitTests/Layout/NonVirtualizingStackLayoutTests.cs similarity index 99% rename from tests/Avalonia.Layout.UnitTests/NonVirtualizingStackLayoutTests.cs rename to tests/Avalonia.Base.UnitTests/Layout/NonVirtualizingStackLayoutTests.cs index a7b378c322..78cf63ed3f 100644 --- a/tests/Avalonia.Layout.UnitTests/NonVirtualizingStackLayoutTests.cs +++ b/tests/Avalonia.Base.UnitTests/Layout/NonVirtualizingStackLayoutTests.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using System.Linq; using Avalonia.Controls; +using Avalonia.Layout; using Xunit; -namespace Avalonia.Layout.UnitTests +namespace Avalonia.Base.UnitTests.Layout { public class NonVirtualizingStackLayoutTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/BoxShadowTests.cs b/tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs similarity index 96% rename from tests/Avalonia.Visuals.UnitTests/Media/BoxShadowTests.cs rename to tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs index e3b703baf2..5f1860d177 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/BoxShadowTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs @@ -1,7 +1,7 @@ using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class BoxShadowTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/BrushTests.cs b/tests/Avalonia.Base.UnitTests/Media/BrushTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/BrushTests.cs rename to tests/Avalonia.Base.UnitTests/Media/BrushTests.cs index 1a2f7732dd..6edce79de1 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/BrushTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/BrushTests.cs @@ -2,7 +2,7 @@ using System; using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class BrushTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/ColorTests.cs b/tests/Avalonia.Base.UnitTests/Media/ColorTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/ColorTests.cs rename to tests/Avalonia.Base.UnitTests/Media/ColorTests.cs index 352e58abd1..1392635b32 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/ColorTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/ColorTests.cs @@ -2,7 +2,7 @@ using System; using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class ColorTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs b/tests/Avalonia.Base.UnitTests/Media/FontFamilyTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs rename to tests/Avalonia.Base.UnitTests/Media/FontFamilyTests.cs index 8ed5e408fa..1f8ae9bd8b 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/FontFamilyTests.cs @@ -4,7 +4,7 @@ using Avalonia.Media; using Avalonia.Media.Fonts; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class FontFamilyTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/FontManagerTests.cs b/tests/Avalonia.Base.UnitTests/Media/FontManagerTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/FontManagerTests.cs rename to tests/Avalonia.Base.UnitTests/Media/FontManagerTests.cs index 2be0209c85..11ecac0039 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/FontManagerTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/FontManagerTests.cs @@ -3,7 +3,7 @@ using Avalonia.Media; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class FontManagerTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs b/tests/Avalonia.Base.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs similarity index 91% rename from tests/Avalonia.Visuals.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs rename to tests/Avalonia.Base.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs index f2fcd51629..07415ac2d6 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs @@ -2,7 +2,7 @@ using Avalonia.Media.Fonts; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media.Fonts +namespace Avalonia.Base.UnitTests.Media.Fonts { public class FamilyNameCollectionTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs b/tests/Avalonia.Base.UnitTests/Media/Fonts/FontFamilyKeyTests.cs similarity index 95% rename from tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs rename to tests/Avalonia.Base.UnitTests/Media/Fonts/FontFamilyKeyTests.cs index d99301ea6c..0cb70ea016 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/Fonts/FontFamilyKeyTests.cs @@ -2,7 +2,7 @@ using Avalonia.Media.Fonts; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media.Fonts +namespace Avalonia.Base.UnitTests.Media.Fonts { public class FontFamilyKeyTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs b/tests/Avalonia.Base.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs similarity index 94% rename from tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs rename to tests/Avalonia.Base.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs index 7e1cc4cd96..1bb2300724 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Linq; using Avalonia.Media; using Avalonia.Media.Fonts; @@ -6,10 +7,8 @@ using Avalonia.Platform; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media.Fonts +namespace Avalonia.Base.UnitTests.Media.Fonts { - using System.Diagnostics; - public class FontFamilyLoaderTests : IDisposable { private const string AssetMyFontRegular = AssetLocation + ".MyFont Regular.ttf" + Assembly + FontName; @@ -100,7 +99,7 @@ namespace Avalonia.Visuals.UnitTests.Media.Fonts { var assetLoader = AvaloniaLocator.Current.GetService(); - var fontFamily = new FontFamily("resm:Avalonia.Visuals.UnitTests.Assets?assembly=Avalonia.Visuals.UnitTests#Noto Mono"); + var fontFamily = new FontFamily("resm:Avalonia.Base.UnitTests.Assets?assembly=Avalonia.Base.UnitTests#Noto Mono"); var fontAssets = FontFamilyLoader.LoadFontAssets(fontFamily.Key).ToArray(); diff --git a/tests/Avalonia.Visuals.UnitTests/Media/GeometryGroupTests.cs b/tests/Avalonia.Base.UnitTests/Media/GeometryGroupTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Media/GeometryGroupTests.cs rename to tests/Avalonia.Base.UnitTests/Media/GeometryGroupTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/Media/GeometryTests.cs b/tests/Avalonia.Base.UnitTests/Media/GeometryTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/GeometryTests.cs rename to tests/Avalonia.Base.UnitTests/Media/GeometryTests.cs index 7b1ed7f977..ae8dc9dad2 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/GeometryTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/GeometryTests.cs @@ -4,7 +4,7 @@ using Avalonia.Platform; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class GeometryTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/GlyphRunTests.cs b/tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/GlyphRunTests.cs rename to tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs index ba334fdb74..cd0586233f 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/GlyphRunTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs @@ -5,7 +5,7 @@ using Avalonia.UnitTests; using Avalonia.Utilities; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class GlyphRunTests : TestWithServicesBase { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/ImageBrushTests.cs b/tests/Avalonia.Base.UnitTests/Media/ImageBrushTests.cs similarity index 78% rename from tests/Avalonia.Visuals.UnitTests/Media/ImageBrushTests.cs rename to tests/Avalonia.Base.UnitTests/Media/ImageBrushTests.cs index ff7b94105a..2e872e7f7f 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/ImageBrushTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/ImageBrushTests.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Avalonia.Media; +using Avalonia.Media; using Avalonia.Media.Imaging; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class ImageBrushTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/LinearGradientBrushTests.cs b/tests/Avalonia.Base.UnitTests/Media/LinearGradientBrushTests.cs similarity index 97% rename from tests/Avalonia.Visuals.UnitTests/Media/LinearGradientBrushTests.cs rename to tests/Avalonia.Base.UnitTests/Media/LinearGradientBrushTests.cs index b3f78dfe8f..736bafba66 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/LinearGradientBrushTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/LinearGradientBrushTests.cs @@ -1,10 +1,9 @@ -using System; -using Avalonia.Media; +using Avalonia.Media; using Avalonia.Media.Imaging; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class LinearGradientBrushTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/MatrixTests.cs b/tests/Avalonia.Base.UnitTests/Media/MatrixTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/MatrixTests.cs rename to tests/Avalonia.Base.UnitTests/Media/MatrixTests.cs index 6ef48b6161..98b1ff0e28 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/MatrixTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/MatrixTests.cs @@ -2,7 +2,7 @@ using Avalonia.Utilities; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class MatrixTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs b/tests/Avalonia.Base.UnitTests/Media/PathMarkupParserTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs rename to tests/Avalonia.Base.UnitTests/Media/PathMarkupParserTests.cs index ba8c490829..c829690eb4 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/PathMarkupParserTests.cs @@ -1,14 +1,13 @@ +using System.Globalization; +using System.IO; using Avalonia.Media; +using Avalonia.Platform; using Avalonia.Visuals.Platform; +using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { - using System.Globalization; - using System.IO; - using Avalonia.Platform; - using Moq; - public class PathMarkupParserTests { [Fact] diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PathSegmentTests.cs b/tests/Avalonia.Base.UnitTests/Media/PathSegmentTests.cs similarity index 94% rename from tests/Avalonia.Visuals.UnitTests/Media/PathSegmentTests.cs rename to tests/Avalonia.Base.UnitTests/Media/PathSegmentTests.cs index 0737b4dc88..41d2fdb349 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PathSegmentTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/PathSegmentTests.cs @@ -1,7 +1,7 @@ using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class PathSegmentTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PenTests.cs b/tests/Avalonia.Base.UnitTests/Media/PenTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/PenTests.cs rename to tests/Avalonia.Base.UnitTests/Media/PenTests.cs index 8c25019606..fecdd30834 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PenTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/PenTests.cs @@ -3,7 +3,7 @@ using Avalonia.Media; using Avalonia.Media.Immutable; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class PenTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PixelRectTests.cs b/tests/Avalonia.Base.UnitTests/Media/PixelRectTests.cs similarity index 90% rename from tests/Avalonia.Visuals.UnitTests/Media/PixelRectTests.cs rename to tests/Avalonia.Base.UnitTests/Media/PixelRectTests.cs index c6da9b77e9..61c410ca8e 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PixelRectTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/PixelRectTests.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Xunit; +using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class PixelRectTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/RectTests.cs b/tests/Avalonia.Base.UnitTests/Media/RectTests.cs similarity index 74% rename from tests/Avalonia.Visuals.UnitTests/Media/RectTests.cs rename to tests/Avalonia.Base.UnitTests/Media/RectTests.cs index cd0c7e1ace..96473348cd 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/RectTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/RectTests.cs @@ -1,7 +1,6 @@ -using System.Globalization; -using Xunit; +using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class RectTests { @@ -13,4 +12,4 @@ namespace Avalonia.Visuals.UnitTests.Media Assert.Equal(expected, rect); } } -} \ No newline at end of file +} diff --git a/tests/Avalonia.Visuals.UnitTests/Media/RectangleGeometryTests.cs b/tests/Avalonia.Base.UnitTests/Media/RectangleGeometryTests.cs similarity index 93% rename from tests/Avalonia.Visuals.UnitTests/Media/RectangleGeometryTests.cs rename to tests/Avalonia.Base.UnitTests/Media/RectangleGeometryTests.cs index 5af1bb572e..387b2f4a19 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/RectangleGeometryTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/RectangleGeometryTests.cs @@ -1,11 +1,10 @@ -using System; -using Avalonia.Media; +using Avalonia.Media; using Avalonia.Platform; using Avalonia.UnitTests; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class RectangleGeometryTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/SolidColorBrushTests.cs b/tests/Avalonia.Base.UnitTests/Media/SolidColorBrushTests.cs similarity index 82% rename from tests/Avalonia.Visuals.UnitTests/Media/SolidColorBrushTests.cs rename to tests/Avalonia.Base.UnitTests/Media/SolidColorBrushTests.cs index bcf63f9660..c982d8c1c8 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/SolidColorBrushTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/SolidColorBrushTests.cs @@ -1,8 +1,7 @@ -using System; -using Avalonia.Media; +using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class SolidColorBrushTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextDecorationTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextDecorationTests.cs similarity index 95% rename from tests/Avalonia.Visuals.UnitTests/Media/TextDecorationTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TextDecorationTests.cs index 60a41baaa7..c4537ea2f8 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextDecorationTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextDecorationTests.cs @@ -1,7 +1,7 @@ using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class TextDecorationTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiAlgorithmTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiAlgorithmTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiAlgorithmTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiAlgorithmTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiClassTestDataGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTestDataGenerator.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiClassTestDataGenerator.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTestDataGenerator.cs index 2f1064be21..f6b01d737c 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiClassTestDataGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTestDataGenerator.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; +using Avalonia.Base.UnitTests.Media.TextFormatting; namespace Avalonia.Visuals.UnitTests.Media.TextFormatting { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiClassTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiClassTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiTestDataGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiTestDataGenerator.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiTestDataGenerator.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiTestDataGenerator.cs index 4102de10ec..033e0e2242 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BiDiTestDataGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiTestDataGenerator.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; +using Avalonia.Base.UnitTests.Media.TextFormatting; using Avalonia.Media.TextFormatting.Unicode; namespace Avalonia.Visuals.UnitTests.Media.TextFormatting diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BreakPairTable.txt b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BreakPairTable.txt similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/BreakPairTable.txt rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/BreakPairTable.txt diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs index c074e5a1f1..7ad2e71d77 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGenerator.cs @@ -5,7 +5,7 @@ using System.Net.Http; using System.Text.RegularExpressions; using Avalonia.Media.TextFormatting.Unicode; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { public static class GraphemeBreakClassTrieGenerator { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs similarity index 96% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs index 848b60b341..e1e3e14ea7 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakClassTrieGeneratorTests.cs @@ -2,7 +2,7 @@ using Avalonia.Media.TextFormatting.Unicode; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { /// /// This class is intended for use when the Unicode spec changes. Otherwise the containing tests are redundant. diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/LineBreakEnumuratorTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/LineBreakEnumuratorTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/LineBreakEnumuratorTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/LineBreakEnumuratorTests.cs index a90be6d519..1dbfbe4d24 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/LineBreakEnumuratorTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/LineBreakEnumuratorTests.cs @@ -8,7 +8,7 @@ using Avalonia.Media.TextFormatting.Unicode; using Xunit; using Xunit.Abstractions; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { public class LineBreakEnumeratorTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/TestDataGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/TestDataGenerator.cs similarity index 97% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/TestDataGenerator.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/TestDataGenerator.cs index 058de909df..33b4c8a269 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/TestDataGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/TestDataGenerator.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using System.Net.Http; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { public abstract class TestDataGenerator : IEnumerable { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeDataGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeDataGenerator.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeDataGenerator.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeDataGenerator.cs index da9e494405..e2877abd83 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeDataGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeDataGenerator.cs @@ -6,7 +6,7 @@ using System.Text.RegularExpressions; using Avalonia.Media.TextFormatting.Unicode; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { internal static class UnicodeDataGenerator { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeDataGeneratorTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeDataGeneratorTests.cs similarity index 97% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeDataGeneratorTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeDataGeneratorTests.cs index f122876322..f3aea83316 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeDataGeneratorTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeDataGeneratorTests.cs @@ -2,7 +2,7 @@ using Avalonia.Media.TextFormatting.Unicode; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { public class UnicodeDataGeneratorTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs rename to tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs index e483728423..1323ddfbd1 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs @@ -4,7 +4,7 @@ using System.IO; using System.Linq; using System.Net.Http; -namespace Avalonia.Visuals.UnitTests.Media.TextFormatting +namespace Avalonia.Base.UnitTests.Media.TextFormatting { internal static class UnicodeEnumsGenerator { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TransformOperationsTests.cs b/tests/Avalonia.Base.UnitTests/Media/TransformOperationsTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Media/TransformOperationsTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TransformOperationsTests.cs index e4f88706d8..0d84ba1700 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TransformOperationsTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TransformOperationsTests.cs @@ -2,7 +2,7 @@ using Avalonia.Media.Transformation; using Avalonia.Utilities; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class TransformOperationsTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/TypefaceTests.cs b/tests/Avalonia.Base.UnitTests/Media/TypefaceTests.cs similarity index 93% rename from tests/Avalonia.Visuals.UnitTests/Media/TypefaceTests.cs rename to tests/Avalonia.Base.UnitTests/Media/TypefaceTests.cs index e526172622..826c1f292b 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/TypefaceTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TypefaceTests.cs @@ -2,7 +2,7 @@ using Avalonia.Media; using Xunit; -namespace Avalonia.Visuals.UnitTests.Media +namespace Avalonia.Base.UnitTests.Media { public class TypefaceTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/UnicodeRangeSegmentTests.cs b/tests/Avalonia.Base.UnitTests/Media/UnicodeRangeSegmentTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Media/UnicodeRangeSegmentTests.cs rename to tests/Avalonia.Base.UnitTests/Media/UnicodeRangeSegmentTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/Media/UnicodeRangeTests.cs b/tests/Avalonia.Base.UnitTests/Media/UnicodeRangeTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Media/UnicodeRangeTests.cs rename to tests/Avalonia.Base.UnitTests/Media/UnicodeRangeTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/RectTests.cs b/tests/Avalonia.Base.UnitTests/RectTests.cs similarity index 97% rename from tests/Avalonia.Visuals.UnitTests/RectTests.cs rename to tests/Avalonia.Base.UnitTests/RectTests.cs index a2b0569949..95a438b287 100644 --- a/tests/Avalonia.Visuals.UnitTests/RectTests.cs +++ b/tests/Avalonia.Base.UnitTests/RectTests.cs @@ -1,6 +1,6 @@ using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class RectTests { diff --git a/tests/Avalonia.Visuals.UnitTests/RelativePointTests.cs b/tests/Avalonia.Base.UnitTests/RelativePointTests.cs similarity index 89% rename from tests/Avalonia.Visuals.UnitTests/RelativePointTests.cs rename to tests/Avalonia.Base.UnitTests/RelativePointTests.cs index c871b8ee87..c242a504b9 100644 --- a/tests/Avalonia.Visuals.UnitTests/RelativePointTests.cs +++ b/tests/Avalonia.Base.UnitTests/RelativePointTests.cs @@ -1,7 +1,6 @@ -using System.Globalization; using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class RelativePointTests { diff --git a/tests/Avalonia.Visuals.UnitTests/RelativeRectComparer.cs b/tests/Avalonia.Base.UnitTests/RelativeRectComparer.cs similarity index 94% rename from tests/Avalonia.Visuals.UnitTests/RelativeRectComparer.cs rename to tests/Avalonia.Base.UnitTests/RelativeRectComparer.cs index bf3bf39367..3e0acddb02 100644 --- a/tests/Avalonia.Visuals.UnitTests/RelativeRectComparer.cs +++ b/tests/Avalonia.Base.UnitTests/RelativeRectComparer.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class RelativeRectComparer : IEqualityComparer { diff --git a/tests/Avalonia.Visuals.UnitTests/RelativeRectTests.cs b/tests/Avalonia.Base.UnitTests/RelativeRectTests.cs similarity index 93% rename from tests/Avalonia.Visuals.UnitTests/RelativeRectTests.cs rename to tests/Avalonia.Base.UnitTests/RelativeRectTests.cs index 9753e0779a..ff53419d5c 100644 --- a/tests/Avalonia.Visuals.UnitTests/RelativeRectTests.cs +++ b/tests/Avalonia.Base.UnitTests/RelativeRectTests.cs @@ -1,8 +1,7 @@ using System; -using System.Globalization; using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class RelativeRectTests { diff --git a/tests/Avalonia.Visuals.UnitTests/RenderTests_Culling.cs b/tests/Avalonia.Base.UnitTests/RenderTests_Culling.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/RenderTests_Culling.cs rename to tests/Avalonia.Base.UnitTests/RenderTests_Culling.cs index ba632b791a..c7421c5827 100644 --- a/tests/Avalonia.Visuals.UnitTests/RenderTests_Culling.cs +++ b/tests/Avalonia.Base.UnitTests/RenderTests_Culling.cs @@ -1,12 +1,12 @@ -using Moq; using Avalonia.Controls; using Avalonia.Media; -using Avalonia.Rendering; -using Xunit; using Avalonia.Platform; +using Avalonia.Rendering; using Avalonia.UnitTests; +using Moq; +using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class RenderTests_Culling { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/CustomHitTestBorder.cs b/tests/Avalonia.Base.UnitTests/Rendering/CustomHitTestBorder.cs similarity index 84% rename from tests/Avalonia.Visuals.UnitTests/Rendering/CustomHitTestBorder.cs rename to tests/Avalonia.Base.UnitTests/Rendering/CustomHitTestBorder.cs index 3221f097ad..fece152713 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/CustomHitTestBorder.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/CustomHitTestBorder.cs @@ -1,8 +1,7 @@ using Avalonia.Controls; -using Avalonia.Media; using Avalonia.Rendering; -namespace Avalonia.Visuals.UnitTests.Rendering +namespace Avalonia.Base.UnitTests.Rendering { internal class CustomHitTestBorder : Border, ICustomHitTest { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/DeferredRendererTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/DeferredRendererTests.cs index e58eea42d8..c345b9a7ea 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/DeferredRendererTests.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Reactive.Subjects; -using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Media; @@ -11,14 +10,12 @@ using Avalonia.Rendering; using Avalonia.Rendering.SceneGraph; using Avalonia.Threading; using Avalonia.UnitTests; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using Avalonia.VisualTree; - using Moq; - using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering +namespace Avalonia.Base.UnitTests.Rendering { public class DeferredRendererTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs b/tests/Avalonia.Base.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs rename to tests/Avalonia.Base.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs index d24d183709..33c7b3e0f8 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/DeferredRendererTests_HitTesting.cs @@ -3,7 +3,6 @@ using System.Linq; using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Shapes; -using Avalonia.Input; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Platform; @@ -13,7 +12,7 @@ using Avalonia.VisualTree; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering +namespace Avalonia.Base.UnitTests.Rendering { public class DeferredRendererTests_HitTesting { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/ImmediateRendererTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/ImmediateRendererTests.cs index 6859b2b139..84bb9b00cd 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/ImmediateRendererTests.cs @@ -10,7 +10,7 @@ using Avalonia.VisualTree; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering +namespace Avalonia.Base.UnitTests.Rendering { public class ImmediateRendererTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs b/tests/Avalonia.Base.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs rename to tests/Avalonia.Base.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs index a3b0a0cdd5..1a9822e259 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/ImmediateRendererTests_HitTesting.cs @@ -9,7 +9,7 @@ using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering +namespace Avalonia.Base.UnitTests.Rendering { public class ImmediateRendererTests_HitTesting { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/RenderLoopTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/RenderLoopTests.cs similarity index 97% rename from tests/Avalonia.Visuals.UnitTests/Rendering/RenderLoopTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/RenderLoopTests.cs index e9aefc46e6..6855a378b4 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/RenderLoopTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/RenderLoopTests.cs @@ -1,13 +1,11 @@ using System; -using System.Collections.Generic; -using System.Text; using System.Threading.Tasks; using Avalonia.Rendering; using Avalonia.Threading; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering +namespace Avalonia.Base.UnitTests.Rendering { public class RenderLoopTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs index 27aa0c55b5..8f307978f2 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs @@ -1,7 +1,5 @@ -using System; -using System.Linq; +using System.Linq; using Avalonia.Media; -using Avalonia.Platform; using Avalonia.Rendering.SceneGraph; using Avalonia.UnitTests; using Avalonia.Utilities; @@ -9,7 +7,7 @@ using Avalonia.VisualTree; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public class DeferredDrawingContextImplTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs similarity index 96% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs index 0cdc8827ad..2fac968206 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs @@ -2,11 +2,11 @@ using Avalonia.Platform; using Avalonia.Rendering.SceneGraph; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public class DrawOperationTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/EllipseNodeTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/EllipseNodeTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/EllipseNodeTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/EllipseNodeTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/LineNodeTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/LineNodeTests.cs similarity index 100% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/LineNodeTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/LineNodeTests.cs diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs index e317b43efc..01afe85b8b 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs @@ -1,20 +1,19 @@ -using System; -using System.Linq; +using System.Linq; +using System.Reactive.Subjects; using Avalonia.Controls; +using Avalonia.Data; +using Avalonia.Layout; using Avalonia.Media; +using Avalonia.Media.Imaging; +using Avalonia.Platform; using Avalonia.Rendering.SceneGraph; using Avalonia.UnitTests; +using Avalonia.Utilities; using Avalonia.VisualTree; -using Xunit; -using Avalonia.Layout; using Moq; -using Avalonia.Platform; -using System.Reactive.Subjects; -using Avalonia.Data; -using Avalonia.Utilities; -using Avalonia.Media.Imaging; +using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public partial class SceneBuilderTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs index 19b4c7e606..9f5a0363ed 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs @@ -1,16 +1,14 @@ -using System; -using System.Linq; +using System.Linq; +using System.Reactive.Subjects; using Avalonia.Controls; +using Avalonia.Data; using Avalonia.Media; using Avalonia.Rendering.SceneGraph; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -using Avalonia.Layout; -using System.Reactive.Subjects; -using Avalonia.Data; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public partial class SceneBuilderTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneLayersTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneLayersTests.cs similarity index 89% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneLayersTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneLayersTests.cs index fac6e1ceb6..9d25a3aa44 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneLayersTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneLayersTests.cs @@ -1,12 +1,11 @@ -using System; -using System.Linq; +using System.Linq; using Avalonia.Controls; using Avalonia.Rendering.SceneGraph; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public class SceneLayersTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneTests.cs similarity index 90% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneTests.cs index bba0c8b8f3..18ff31f676 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/SceneTests.cs @@ -1,11 +1,10 @@ -using System; -using System.Linq; +using System.Linq; using Avalonia.Controls; using Avalonia.Rendering.SceneGraph; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public class SceneTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs similarity index 97% rename from tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs index 4ec3630053..93266c428c 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs @@ -1,11 +1,10 @@ -using System; -using Avalonia.Rendering.SceneGraph; +using Avalonia.Rendering.SceneGraph; using Avalonia.Utilities; using Avalonia.VisualTree; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph +namespace Avalonia.Base.UnitTests.Rendering.SceneGraph { public class VisualNodeTests { diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs rename to tests/Avalonia.Base.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs index 8d70b45842..349fd0a6d0 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs @@ -1,10 +1,9 @@ -using System; -using Avalonia.Controls; +using Avalonia.Controls; using Avalonia.Media; using Avalonia.Rendering.Utilities; using Xunit; -namespace Avalonia.Visuals.UnitTests.Rendering.Utilities +namespace Avalonia.Base.UnitTests.Rendering.Utilities { public class TileBrushCalculatorTests { diff --git a/tests/Avalonia.Visuals.UnitTests/SizeTests.cs b/tests/Avalonia.Base.UnitTests/SizeTests.cs similarity index 92% rename from tests/Avalonia.Visuals.UnitTests/SizeTests.cs rename to tests/Avalonia.Base.UnitTests/SizeTests.cs index 96197785b9..9b8125748a 100644 --- a/tests/Avalonia.Visuals.UnitTests/SizeTests.cs +++ b/tests/Avalonia.Base.UnitTests/SizeTests.cs @@ -1,6 +1,6 @@ using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class SizeTests { diff --git a/tests/Avalonia.Styling.UnitTests/ResourceDictionaryTests.cs b/tests/Avalonia.Base.UnitTests/Styling/ResourceDictionaryTests.cs similarity index 99% rename from tests/Avalonia.Styling.UnitTests/ResourceDictionaryTests.cs rename to tests/Avalonia.Base.UnitTests/Styling/ResourceDictionaryTests.cs index d91d1fab9e..86b1b897d4 100644 --- a/tests/Avalonia.Styling.UnitTests/ResourceDictionaryTests.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/ResourceDictionaryTests.cs @@ -3,7 +3,7 @@ using Avalonia.Controls; using Moq; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class ResourceDictionaryTests { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Child.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Child.cs similarity index 97% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Child.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Child.cs index d011c16ebb..66efe2cc7b 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Child.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Child.cs @@ -1,11 +1,11 @@ using System.Collections.Generic; -using System.Reactive.Linq; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.LogicalTree; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Child { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Class.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Class.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Class.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Class.cs index 72383501be..376e2b23d0 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Class.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Class.cs @@ -1,14 +1,12 @@ -using System; -using System.Linq; +using System.Collections.Generic; using System.Reactive.Linq; using System.Threading.Tasks; -using Moq; using Avalonia.Controls; using Avalonia.Styling; +using Moq; using Xunit; -using System.Collections.Generic; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Class { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Descendent.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Descendent.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Descendent.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Descendent.cs index aacf2ce223..6b52936ec5 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Descendent.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Descendent.cs @@ -1,11 +1,11 @@ -using System.Linq; using System.Reactive.Linq; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.LogicalTree; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Descendant { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Multiple.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Multiple.cs similarity index 99% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Multiple.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Multiple.cs index 4436f02429..258a4a44a1 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Multiple.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Multiple.cs @@ -1,13 +1,13 @@ -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Controls.Templates; +using Avalonia.Styling; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Multiple { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Name.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Name.cs similarity index 96% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Name.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Name.cs index 308070c52f..46b97cf384 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Name.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Name.cs @@ -1,8 +1,9 @@ using Avalonia.Controls; +using Avalonia.Styling; using Moq; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Name { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Not.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Not.cs similarity index 97% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Not.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Not.cs index 23b711725a..fd1385ac47 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Not.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Not.cs @@ -1,9 +1,9 @@ -using System.Reactive.Linq; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Not { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_NthChild.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_NthChild.cs similarity index 99% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_NthChild.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_NthChild.cs index e1507be110..7f645be4a9 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_NthChild.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_NthChild.cs @@ -1,9 +1,10 @@ using System.Linq; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_NthChild { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_NthLastChild.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_NthLastChild.cs similarity index 99% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_NthLastChild.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_NthLastChild.cs index 00a99523c7..821ed3d0ab 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_NthLastChild.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_NthLastChild.cs @@ -1,8 +1,9 @@ using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_NthLastChild { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_OfType.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_OfType.cs similarity index 95% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_OfType.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_OfType.cs index 2aef46575d..e86a323c71 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_OfType.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_OfType.cs @@ -1,8 +1,9 @@ using Avalonia.Controls; +using Avalonia.Styling; using Moq; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_OfType { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Or.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Or.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Or.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Or.cs index 2b55482593..fb5d54bd1f 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Or.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Or.cs @@ -1,7 +1,8 @@ using Avalonia.Controls; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Or { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_PropertyEquals.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_PropertyEquals.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_PropertyEquals.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_PropertyEquals.cs index 729b42196b..ee1b654ba8 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_PropertyEquals.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_PropertyEquals.cs @@ -1,10 +1,10 @@ -using System.Linq; using System.Reactive.Linq; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Styling; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_PropertyEquals { diff --git a/tests/Avalonia.Styling.UnitTests/SelectorTests_Template.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Template.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/SelectorTests_Template.cs rename to tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Template.cs index 13cb2578cf..8b4c988037 100644 --- a/tests/Avalonia.Styling.UnitTests/SelectorTests_Template.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Template.cs @@ -1,14 +1,13 @@ -using System; using System.Linq; -using System.Reactive.Linq; -using Moq; +using System.Threading.Tasks; using Avalonia.Controls; -using Avalonia.VisualTree; using Avalonia.Diagnostics; +using Avalonia.Styling; +using Avalonia.VisualTree; +using Moq; using Xunit; -using System.Threading.Tasks; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SelectorTests_Template { diff --git a/tests/Avalonia.Styling.UnitTests/SetterTests.cs b/tests/Avalonia.Base.UnitTests/Styling/SetterTests.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/SetterTests.cs rename to tests/Avalonia.Base.UnitTests/Styling/SetterTests.cs index 901233801e..40d2cab4a3 100644 --- a/tests/Avalonia.Styling.UnitTests/SetterTests.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/SetterTests.cs @@ -5,10 +5,11 @@ using Avalonia.Controls; using Avalonia.Controls.Templates; using Avalonia.Data; using Avalonia.Data.Converters; +using Avalonia.Styling; using Moq; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class SetterTests { diff --git a/tests/Avalonia.Styling.UnitTests/StyleActivatorExtensions.cs b/tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs similarity index 97% rename from tests/Avalonia.Styling.UnitTests/StyleActivatorExtensions.cs rename to tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs index 22f4db79d1..f5b3bb40a3 100644 --- a/tests/Avalonia.Styling.UnitTests/StyleActivatorExtensions.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs @@ -4,7 +4,7 @@ using System.Threading.Tasks; using Avalonia.Reactive; using Avalonia.Styling.Activators; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { internal static class StyleActivatorExtensions { diff --git a/tests/Avalonia.Styling.UnitTests/StyleTests.cs b/tests/Avalonia.Base.UnitTests/Styling/StyleTests.cs similarity index 99% rename from tests/Avalonia.Styling.UnitTests/StyleTests.cs rename to tests/Avalonia.Base.UnitTests/Styling/StyleTests.cs index 14710f44ba..8dedf3471f 100644 --- a/tests/Avalonia.Styling.UnitTests/StyleTests.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/StyleTests.cs @@ -3,11 +3,12 @@ using System.Collections.Generic; using Avalonia.Controls; using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.Styling; using Avalonia.UnitTests; using Moq; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class StyleTests { diff --git a/tests/Avalonia.Styling.UnitTests/StyledElementTests.cs b/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests.cs similarity index 99% rename from tests/Avalonia.Styling.UnitTests/StyledElementTests.cs rename to tests/Avalonia.Base.UnitTests/Styling/StyledElementTests.cs index fcbccba695..bb4d590060 100644 --- a/tests/Avalonia.Styling.UnitTests/StyledElementTests.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests.cs @@ -1,19 +1,17 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Reactive.Linq; -using Moq; -using Avalonia.Styling; -using Avalonia.UnitTests; -using Xunit; -using Avalonia.LogicalTree; using Avalonia.Controls; -using System.ComponentModel; -using Avalonia.Controls.Primitives; -using Avalonia.Markup.Xaml.Templates; using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.LogicalTree; +using Avalonia.Styling; +using Avalonia.UnitTests; +using Moq; +using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class StyledElementTests { diff --git a/tests/Avalonia.Styling.UnitTests/StyledElementTests_Resources.cs b/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Resources.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/StyledElementTests_Resources.cs rename to tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Resources.cs index 05315380fd..69d37d1c54 100644 --- a/tests/Avalonia.Styling.UnitTests/StyledElementTests_Resources.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Resources.cs @@ -1,11 +1,11 @@ -using System; +using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; using Avalonia.Styling; using Avalonia.UnitTests; using Xunit; -namespace Avalonia.Controls.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class StyledElementTests_Resources { diff --git a/tests/Avalonia.Styling.UnitTests/StylesTests.cs b/tests/Avalonia.Base.UnitTests/Styling/StylesTests.cs similarity index 98% rename from tests/Avalonia.Styling.UnitTests/StylesTests.cs rename to tests/Avalonia.Base.UnitTests/Styling/StylesTests.cs index 88ab124e01..a6777c9466 100644 --- a/tests/Avalonia.Styling.UnitTests/StylesTests.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/StylesTests.cs @@ -1,9 +1,9 @@ -using System; using Avalonia.Controls; +using Avalonia.Styling; using Moq; using Xunit; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class StylesTests { diff --git a/tests/Avalonia.Styling.UnitTests/TestObservable.cs b/tests/Avalonia.Base.UnitTests/Styling/TestObservable.cs similarity index 90% rename from tests/Avalonia.Styling.UnitTests/TestObservable.cs rename to tests/Avalonia.Base.UnitTests/Styling/TestObservable.cs index 7a07f12883..05cf7ef3e1 100644 --- a/tests/Avalonia.Styling.UnitTests/TestObservable.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/TestObservable.cs @@ -1,7 +1,7 @@ using System; using System.Reactive.Disposables; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public class TestObservable : IObservable { diff --git a/tests/Avalonia.Styling.UnitTests/TestObserver.cs b/tests/Avalonia.Base.UnitTests/Styling/TestObserver.cs similarity index 96% rename from tests/Avalonia.Styling.UnitTests/TestObserver.cs rename to tests/Avalonia.Base.UnitTests/Styling/TestObserver.cs index c18fa8618f..46f26804f1 100644 --- a/tests/Avalonia.Styling.UnitTests/TestObserver.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/TestObserver.cs @@ -1,6 +1,6 @@ using System; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { internal class TestObserver : IObserver { diff --git a/tests/Avalonia.Styling.UnitTests/TestSelectors.cs b/tests/Avalonia.Base.UnitTests/Styling/TestSelectors.cs similarity index 90% rename from tests/Avalonia.Styling.UnitTests/TestSelectors.cs rename to tests/Avalonia.Base.UnitTests/Styling/TestSelectors.cs index 44a087af19..bd60275d50 100644 --- a/tests/Avalonia.Styling.UnitTests/TestSelectors.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/TestSelectors.cs @@ -1,7 +1,7 @@ using System; using Avalonia.Styling; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { public static class TestSelectors { diff --git a/tests/Avalonia.Styling.UnitTests/TestSubject.cs b/tests/Avalonia.Base.UnitTests/Styling/TestSubject.cs similarity index 96% rename from tests/Avalonia.Styling.UnitTests/TestSubject.cs rename to tests/Avalonia.Base.UnitTests/Styling/TestSubject.cs index 7550b545b6..c162f24d59 100644 --- a/tests/Avalonia.Styling.UnitTests/TestSubject.cs +++ b/tests/Avalonia.Base.UnitTests/Styling/TestSubject.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace Avalonia.Styling.UnitTests +namespace Avalonia.Base.UnitTests.Styling { internal class TestSubject : IObserver, IObservable { diff --git a/tests/Avalonia.Visuals.UnitTests/TestVisual.cs b/tests/Avalonia.Base.UnitTests/TestVisual.cs similarity index 94% rename from tests/Avalonia.Visuals.UnitTests/TestVisual.cs rename to tests/Avalonia.Base.UnitTests/TestVisual.cs index 29d61ddefc..fc9b9e22fb 100644 --- a/tests/Avalonia.Visuals.UnitTests/TestVisual.cs +++ b/tests/Avalonia.Base.UnitTests/TestVisual.cs @@ -1,10 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; -using Avalonia.Rendering; using Avalonia.VisualTree; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class ParamEventArgs : EventArgs { diff --git a/tests/Avalonia.Visuals.UnitTests/ThicknessTests.cs b/tests/Avalonia.Base.UnitTests/ThicknessTests.cs similarity index 93% rename from tests/Avalonia.Visuals.UnitTests/ThicknessTests.cs rename to tests/Avalonia.Base.UnitTests/ThicknessTests.cs index e85a9d5b85..094acada26 100644 --- a/tests/Avalonia.Visuals.UnitTests/ThicknessTests.cs +++ b/tests/Avalonia.Base.UnitTests/ThicknessTests.cs @@ -1,7 +1,6 @@ -using System.Globalization; using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class ThicknessTests { @@ -37,4 +36,4 @@ namespace Avalonia.Visuals.UnitTests Assert.Equal(new Thickness(1.2, 3.4, 5, 6), result); } } -} \ No newline at end of file +} diff --git a/tests/Avalonia.Visuals.UnitTests/Utilities/ReadOnlySpanTests.cs b/tests/Avalonia.Base.UnitTests/Utilities/ReadOnlySpanTests.cs similarity index 94% rename from tests/Avalonia.Visuals.UnitTests/Utilities/ReadOnlySpanTests.cs rename to tests/Avalonia.Base.UnitTests/Utilities/ReadOnlySpanTests.cs index 1afd84e546..da30ee9d02 100644 --- a/tests/Avalonia.Visuals.UnitTests/Utilities/ReadOnlySpanTests.cs +++ b/tests/Avalonia.Base.UnitTests/Utilities/ReadOnlySpanTests.cs @@ -2,7 +2,7 @@ using Avalonia.Utilities; using Xunit; -namespace Avalonia.Visuals.UnitTests.Utilities +namespace Avalonia.Base.UnitTests.Utilities { public class ReadOnlySpanTests { diff --git a/tests/Avalonia.Visuals.UnitTests/VectorTests.cs b/tests/Avalonia.Base.UnitTests/VectorTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/VectorTests.cs rename to tests/Avalonia.Base.UnitTests/VectorTests.cs index f9a9e59436..154b4a8e6c 100644 --- a/tests/Avalonia.Visuals.UnitTests/VectorTests.cs +++ b/tests/Avalonia.Base.UnitTests/VectorTests.cs @@ -1,8 +1,7 @@ -using Xunit; -using Avalonia; using System; +using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class VectorTests { diff --git a/tests/Avalonia.Visuals.UnitTests/VisualExtensionsTests.cs b/tests/Avalonia.Base.UnitTests/VisualExtensionsTests.cs similarity index 99% rename from tests/Avalonia.Visuals.UnitTests/VisualExtensionsTests.cs rename to tests/Avalonia.Base.UnitTests/VisualExtensionsTests.cs index 781169cfa6..4863c0fa61 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualExtensionsTests.cs +++ b/tests/Avalonia.Base.UnitTests/VisualExtensionsTests.cs @@ -5,7 +5,7 @@ using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class VisualExtensionsTests { diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTests.cs b/tests/Avalonia.Base.UnitTests/VisualTests.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/VisualTests.cs rename to tests/Avalonia.Base.UnitTests/VisualTests.cs index 38131fbfca..382001229b 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualTests.cs +++ b/tests/Avalonia.Base.UnitTests/VisualTests.cs @@ -10,7 +10,7 @@ using Avalonia.VisualTree; using Moq; using Xunit; -namespace Avalonia.Visuals.UnitTests +namespace Avalonia.Base.UnitTests { public class VisualTests { @@ -262,7 +262,7 @@ namespace Avalonia.Visuals.UnitTests LogCallback checkLogMessage = (level, area, src, mt, pv) => { - if (level >= Logging.LogEventLevel.Warning) + if (level >= Avalonia.Logging.LogEventLevel.Warning) { called = true; } @@ -285,7 +285,7 @@ namespace Avalonia.Visuals.UnitTests LogCallback checkLogMessage = (level, area, src, mt, pv) => { - if (level >= Logging.LogEventLevel.Warning) + if (level >= Avalonia.Logging.LogEventLevel.Warning) { called = true; } diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs b/tests/Avalonia.Base.UnitTests/VisualTree/MockRenderInterface.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs rename to tests/Avalonia.Base.UnitTests/VisualTree/MockRenderInterface.cs index 6100f2cb74..add8f7fd73 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualTree/MockRenderInterface.cs +++ b/tests/Avalonia.Base.UnitTests/VisualTree/MockRenderInterface.cs @@ -4,9 +4,9 @@ using System.IO; using Avalonia.Media; using Avalonia.Platform; using Avalonia.UnitTests; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; -namespace Avalonia.Visuals.UnitTests.VisualTree +namespace Avalonia.Base.UnitTests.VisualTree { class MockRenderInterface : IPlatformRenderInterface { diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTree/TransformedBoundsTests.cs b/tests/Avalonia.Base.UnitTests/VisualTree/TransformedBoundsTests.cs similarity index 94% rename from tests/Avalonia.Visuals.UnitTests/VisualTree/TransformedBoundsTests.cs rename to tests/Avalonia.Base.UnitTests/VisualTree/TransformedBoundsTests.cs index 54d9ce40f0..d8158fd673 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualTree/TransformedBoundsTests.cs +++ b/tests/Avalonia.Base.UnitTests/VisualTree/TransformedBoundsTests.cs @@ -1,18 +1,16 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Reactive.Linq; using Avalonia.Controls; using Avalonia.Controls.Shapes; -using Avalonia.VisualTree; -using Avalonia.Rendering; -using Xunit; using Avalonia.Media; -using Moq; -using Avalonia.UnitTests; using Avalonia.Platform; +using Avalonia.Rendering; +using Avalonia.UnitTests; +using Avalonia.VisualTree; +using Moq; +using Xunit; -namespace Avalonia.Visuals.UnitTests.VisualTree +namespace Avalonia.Base.UnitTests.VisualTree { public class TransformedBoundsTests { diff --git a/tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensions_GetVisualsAt.cs b/tests/Avalonia.Base.UnitTests/VisualTree/VisualExtensions_GetVisualsAt.cs similarity index 98% rename from tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensions_GetVisualsAt.cs rename to tests/Avalonia.Base.UnitTests/VisualTree/VisualExtensions_GetVisualsAt.cs index 139a7925b1..1020a3a4d6 100644 --- a/tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensions_GetVisualsAt.cs +++ b/tests/Avalonia.Base.UnitTests/VisualTree/VisualExtensions_GetVisualsAt.cs @@ -8,7 +8,7 @@ using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; -namespace Avalonia.Visuals.UnitTests.VisualTree +namespace Avalonia.Base.UnitTests.VisualTree { public class VisualExtensions_GetVisualsAt { diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index 2dbb054221..5d17808e0c 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -6,15 +6,9 @@ false - - - - - - diff --git a/tests/Avalonia.Benchmarks/NullDrawingContextImpl.cs b/tests/Avalonia.Benchmarks/NullDrawingContextImpl.cs index 59067e642f..6fb2a5ac24 100644 --- a/tests/Avalonia.Benchmarks/NullDrawingContextImpl.cs +++ b/tests/Avalonia.Benchmarks/NullDrawingContextImpl.cs @@ -2,7 +2,7 @@ using Avalonia.Platform; using Avalonia.Rendering.SceneGraph; using Avalonia.Utilities; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Benchmarks { diff --git a/tests/Avalonia.Benchmarks/NullRenderingPlatform.cs b/tests/Avalonia.Benchmarks/NullRenderingPlatform.cs index ccdb0eed2f..5cbb3b2c49 100644 --- a/tests/Avalonia.Benchmarks/NullRenderingPlatform.cs +++ b/tests/Avalonia.Benchmarks/NullRenderingPlatform.cs @@ -4,7 +4,7 @@ using System.IO; using Avalonia.Media; using Avalonia.Platform; using Avalonia.UnitTests; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; namespace Avalonia.Benchmarks { diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj index 4aed8c60c3..12eb290fde 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -18,14 +18,8 @@ - - - - - - diff --git a/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj b/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj index f4c6434a68..f66b2b0457 100644 --- a/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj +++ b/tests/Avalonia.DesignerSupport.TestApp/Avalonia.DesignerSupport.TestApp.csproj @@ -18,15 +18,9 @@ - - - - - - diff --git a/tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj b/tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj index cdadc3dcba..e7f1552370 100644 --- a/tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj +++ b/tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj @@ -11,14 +11,8 @@ - - - - - - diff --git a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj index 636643d9e4..ad7e3ad504 100644 --- a/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj +++ b/tests/Avalonia.Direct2D1.UnitTests/Avalonia.Direct2D1.UnitTests.csproj @@ -12,14 +12,8 @@ - - - - - - diff --git a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj deleted file mode 100644 index 3b0b082093..0000000000 --- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - net6.0 - Library - true - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.Input.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Input.UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index 3974559efc..0000000000 --- a/tests/Avalonia.Input.UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; -using Xunit; - -[assembly: AssemblyTitle("Avalonia.Input.UnitTests")] - -// Don't run tests in parallel. -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ 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 deleted file mode 100644 index f6cfe51db4..0000000000 --- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - net6.0 - Library - true - latest - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.Interactivity.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Interactivity.UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index c5bf2d8657..0000000000 --- a/tests/Avalonia.Interactivity.UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; -using Xunit; - -[assembly: AssemblyTitle("Avalonia.Interactivity.UnitTests")] - -// Don't run tests in parallel. -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ 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 deleted file mode 100644 index a3c85c72b5..0000000000 --- a/tests/Avalonia.Layout.UnitTests/Avalonia.Layout.UnitTests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - net6.0 - Library - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.Layout.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Layout.UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index 6f62e38bda..0000000000 --- a/tests/Avalonia.Layout.UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; -using Xunit; - -[assembly: AssemblyTitle("Avalonia.Layout.UnitTests")] - -// Don't run tests in parallel. -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index 7e569f2eac..0c663e1a8f 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -12,14 +12,8 @@ - - - - - - diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj index fceea56273..fc15ad8230 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -13,14 +13,8 @@ - - - - - - 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 14f6525dbe..a0efa7bdeb 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -16,14 +16,8 @@ - - - - - - diff --git a/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj b/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj index 5189e9335a..ffbcdd9e7c 100644 --- a/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj +++ b/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj @@ -12,14 +12,8 @@ - - - - - - diff --git a/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj b/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj index e37cd25009..ccde66a50e 100644 --- a/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj +++ b/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj @@ -13,14 +13,8 @@ - - - - - - diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj deleted file mode 100644 index c5eb636a9a..0000000000 --- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - net6.0 - Library - CS0067 - true - latest - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.Styling.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Styling.UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index 3bdb8a2f2e..0000000000 --- a/tests/Avalonia.Styling.UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; -using Xunit; - -[assembly: AssemblyTitle("Avalonia.Styling.UnitTests")] - -// Don't run tests in parallel. -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj index c3cf6cd8d3..f54ccaa857 100644 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj +++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj @@ -17,14 +17,8 @@ - - - - - - diff --git a/tests/Avalonia.UnitTests/MockPlatformRenderInterface.cs b/tests/Avalonia.UnitTests/MockPlatformRenderInterface.cs index 2858a9f228..376121c269 100644 --- a/tests/Avalonia.UnitTests/MockPlatformRenderInterface.cs +++ b/tests/Avalonia.UnitTests/MockPlatformRenderInterface.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.IO; using Avalonia.Media; using Avalonia.Platform; -using Avalonia.Visuals.Media.Imaging; +using Avalonia.Media.Imaging; using Moq; namespace Avalonia.UnitTests diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj deleted file mode 100644 index 57de90114e..0000000000 --- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj +++ /dev/null @@ -1,40 +0,0 @@ - - - net6.0 - Library - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/Avalonia.Visuals.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Visuals.UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index 2251cc6e92..0000000000 --- a/tests/Avalonia.Visuals.UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; -using Xunit; - -[assembly: AssemblyTitle("Avalonia.Visuals.UnitTests")] - -// Don't run tests in parallel. -[assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file From a2bcd8a9c95b2fc854939b8ce1ef8f854dfc0e38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20Komosi=C5=84ski?= Date: Thu, 14 Apr 2022 14:39:56 +0200 Subject: [PATCH 35/67] Remove dependency on fluent theme. --- .../Styling/ResourceBenchmarks.cs | 17 ++++++----- tests/Avalonia.Benchmarks/TestStyles.cs | 29 +++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 tests/Avalonia.Benchmarks/TestStyles.cs diff --git a/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs b/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs index babfaef6ab..2a048beefa 100644 --- a/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs +++ b/tests/Avalonia.Benchmarks/Styling/ResourceBenchmarks.cs @@ -3,7 +3,6 @@ using Avalonia.Controls; using Avalonia.Platform; using Avalonia.PlatformSupport; using Avalonia.Styling; -using Avalonia.Themes.Fluent; using Avalonia.UnitTests; using BenchmarkDotNet.Attributes; using Moq; @@ -25,7 +24,7 @@ namespace Avalonia.Benchmarks.Styling renderInterface: new MockPlatformRenderInterface(), standardCursorFactory: Mock.Of(), styler: new Styler(), - theme: () => LoadTheme(), + theme: () => CreateTheme(), threadingInterface: new NullThreadingPlatform(), fontManagerImpl: new MockFontManagerImpl(), textShaperImpl: new MockTextShaperImpl(), @@ -34,7 +33,7 @@ namespace Avalonia.Benchmarks.Styling return UnitTestApplication.Start(services); } - private static Styles LoadTheme() + private static Styles CreateTheme() { AssetLoader.RegisterResUriParsers(); @@ -43,11 +42,11 @@ namespace Avalonia.Benchmarks.Styling var postHost = new Style(); postHost.Resources.Add("postTheme", null); - + return new Styles { preHost, - new FluentTheme(new Uri("avares://Avalonia.Benchmarks")), + new TestStyles(50, 3, 5), postHost }; } @@ -81,11 +80,13 @@ namespace Avalonia.Benchmarks.Styling current.Child = _searchStart; } + + private const int LookupCount = 100; [Benchmark] public void FindPreResource() { - for (int i = 0; i < 100; ++i) + for (int i = 0; i < LookupCount; ++i) { _searchStart.FindResource("preTheme"); } @@ -94,7 +95,7 @@ namespace Avalonia.Benchmarks.Styling [Benchmark] public void FindPostResource() { - for (int i = 0; i < 100; ++i) + for (int i = 0; i < LookupCount; ++i) { _searchStart.FindResource("postTheme"); } @@ -103,7 +104,7 @@ namespace Avalonia.Benchmarks.Styling [Benchmark] public void FindNotExistingResource() { - for (int i = 0; i < 100; ++i) + for (int i = 0; i < LookupCount; ++i) { _searchStart.FindResource("notPresent"); } diff --git a/tests/Avalonia.Benchmarks/TestStyles.cs b/tests/Avalonia.Benchmarks/TestStyles.cs new file mode 100644 index 0000000000..be2ad7d072 --- /dev/null +++ b/tests/Avalonia.Benchmarks/TestStyles.cs @@ -0,0 +1,29 @@ +using Avalonia.Styling; + +namespace Avalonia.Benchmarks +{ + public class TestStyles : Styles + { + public TestStyles(int childStylesCount, int childInnerStyleCount, int childResourceCount) + { + for (int i = 0; i < childStylesCount; i++) + { + var childStyles = new Styles(); + + for (int j = 0; j < childInnerStyleCount; j++) + { + var childStyle = new Style(); + + for (int k = 0; k < childResourceCount; k++) + { + childStyle.Resources.Add($"resource.{i}.{j}.{k}", null); + } + + childStyles.Add(childStyle); + } + + Add(childStyles); + } + } + } +} From 0ec26bcdc3e9b9f841993242ca662f2ea194aa4e Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 14 Apr 2022 11:40:38 -0400 Subject: [PATCH 36/67] Make empty ChildIndexChangedEventArgs ctor private --- src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs b/src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs index afc6c1f5fc..497596fcc1 100644 --- a/src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs +++ b/src/Avalonia.Base/LogicalTree/ChildIndexChangedEventArgs.cs @@ -10,7 +10,7 @@ namespace Avalonia.LogicalTree { public static new ChildIndexChangedEventArgs Empty { get; } = new ChildIndexChangedEventArgs(); - public ChildIndexChangedEventArgs() + private ChildIndexChangedEventArgs() { } From 9bef2acafe18551bd0d717c316864677e6400814 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 14 Apr 2022 11:47:25 -0400 Subject: [PATCH 37/67] Move pointerover logic out of input device layer --- src/Avalonia.Controls/TopLevel.cs | 25 +- src/Avalonia.Input/IInputRoot.cs | 3 - src/Avalonia.Input/IKeyboardDevice.cs | 6 - src/Avalonia.Input/IMouseDevice.cs | 2 + src/Avalonia.Input/IPointerDevice.cs | 16 +- src/Avalonia.Input/KeyboardDevice.cs | 2 +- src/Avalonia.Input/MouseDevice.cs | 328 +++--------------- src/Avalonia.Input/PointerEventArgs.cs | 2 + src/Avalonia.Input/PointerOverPreProcessor.cs | 210 +++++++++++ src/Avalonia.Input/Raw/RawDragEvent.cs | 2 +- src/Avalonia.Input/Raw/RawInputHelpers.cs | 27 ++ src/Avalonia.Input/Raw/RawPointerEventArgs.cs | 2 + src/Avalonia.Input/TouchDevice.cs | 47 ++- 13 files changed, 358 insertions(+), 314 deletions(-) create mode 100644 src/Avalonia.Input/PointerOverPreProcessor.cs create mode 100644 src/Avalonia.Input/Raw/RawInputHelpers.cs diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 55202dd20d..75a34659a2 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -15,7 +15,6 @@ using Avalonia.Rendering; using Avalonia.Styling; using Avalonia.Utilities; using Avalonia.VisualTree; -using JetBrains.Annotations; namespace Avalonia.Controls { @@ -87,6 +86,8 @@ namespace Avalonia.Controls private readonly IKeyboardNavigationHandler? _keyboardNavigationHandler; private readonly IPlatformRenderInterface? _renderInterface; private readonly IGlobalStyles? _globalStyles; + private readonly PointerOverPreProcessor? _pointerOverPreProcessor; + private readonly IDisposable? _pointerOverPreProcessorSubscription; private Size _clientSize; private Size? _frameSize; private WindowTransparencyLevel _actualTransparencyLevel; @@ -195,6 +196,9 @@ namespace Avalonia.Controls } impl.LostFocus += PlatformImpl_LostFocus; + + _pointerOverPreProcessor = new PointerOverPreProcessor(this); + _pointerOverPreProcessorSubscription = _inputManager?.PreProcess.Subscribe(_pointerOverPreProcessor); } /// @@ -283,9 +287,7 @@ namespace Avalonia.Controls /// IKeyboardNavigationHandler IInputRoot.KeyboardNavigationHandler => _keyboardNavigationHandler!; - /// - /// Gets or sets the input element that the pointer is currently over. - /// + /// IInputElement? IInputRoot.PointerOverElement { get { return GetValue(PointerOverElementProperty); } @@ -378,10 +380,12 @@ namespace Avalonia.Controls Renderer?.Dispose(); Renderer = null!; - - (this as IInputRoot).MouseDevice?.TopLevelClosed(this); + + _pointerOverPreProcessor?.OnCompleted(); + _pointerOverPreProcessorSubscription?.Dispose(); + PlatformImpl = null; - + var logicalArgs = new LogicalTreeAttachmentEventArgs(this, this, null); ((ILogical)this).NotifyDetachedFromLogicalTree(logicalArgs); @@ -515,12 +519,17 @@ namespace Avalonia.Controls /// The event args. private void HandleInput(RawInputEventArgs e) { + if (e is RawPointerEventArgs pointerArgs) + { + pointerArgs.InputHitTestResult = this.InputHitTest(pointerArgs.Position); + } + _inputManager?.ProcessInput(e); } private void SceneInvalidated(object? sender, SceneInvalidatedEventArgs e) { - (this as IInputRoot).MouseDevice?.SceneInvalidated(this, e.DirtyRect); + _pointerOverPreProcessor?.SceneInvalidated(e.DirtyRect); } void PlatformImpl_LostFocus() diff --git a/src/Avalonia.Input/IInputRoot.cs b/src/Avalonia.Input/IInputRoot.cs index 3e2b8cc477..98e8699573 100644 --- a/src/Avalonia.Input/IInputRoot.cs +++ b/src/Avalonia.Input/IInputRoot.cs @@ -1,5 +1,3 @@ -using JetBrains.Annotations; - namespace Avalonia.Input { /// @@ -30,7 +28,6 @@ namespace Avalonia.Input /// /// Gets associated mouse device /// - [CanBeNull] IMouseDevice? MouseDevice { get; } } } diff --git a/src/Avalonia.Input/IKeyboardDevice.cs b/src/Avalonia.Input/IKeyboardDevice.cs index 9506dc36fb..d0e84e5ad0 100644 --- a/src/Avalonia.Input/IKeyboardDevice.cs +++ b/src/Avalonia.Input/IKeyboardDevice.cs @@ -50,12 +50,6 @@ namespace Avalonia.Input KeyboardMask = Alt | Control | Shift | Meta } - internal static class KeyModifiersUtils - { - public static KeyModifiers ConvertToKey(RawInputModifiers modifiers) => - (KeyModifiers)(modifiers & RawInputModifiers.KeyboardMask); - } - public interface IKeyboardDevice : IInputDevice, INotifyPropertyChanged { IInputElement? FocusedElement { get; } diff --git a/src/Avalonia.Input/IMouseDevice.cs b/src/Avalonia.Input/IMouseDevice.cs index 272d1eb8d7..6b7f0e76e5 100644 --- a/src/Avalonia.Input/IMouseDevice.cs +++ b/src/Avalonia.Input/IMouseDevice.cs @@ -13,8 +13,10 @@ namespace Avalonia.Input [Obsolete("Use PointerEventArgs.GetPosition")] PixelPoint Position { get; } + [Obsolete] void TopLevelClosed(IInputRoot root); + [Obsolete] void SceneInvalidated(IInputRoot root, Rect rect); } } diff --git a/src/Avalonia.Input/IPointerDevice.cs b/src/Avalonia.Input/IPointerDevice.cs index 1f82cb1ed7..0096bb77bf 100644 --- a/src/Avalonia.Input/IPointerDevice.cs +++ b/src/Avalonia.Input/IPointerDevice.cs @@ -1,17 +1,31 @@ using System; using Avalonia.VisualTree; +using Avalonia.Input.Raw; namespace Avalonia.Input { public interface IPointerDevice : IInputDevice { + /// [Obsolete("Use IPointer")] IInputElement? Captured { get; } - + + /// [Obsolete("Use IPointer")] void Capture(IInputElement? control); + /// [Obsolete("Use PointerEventArgs.GetPosition")] Point GetPosition(IVisual relativeTo); + + /// + /// Gets a pointer for specific event args. + /// + /// + /// If pointer doesn't exist or wasn't yet created this method will return null. + /// + /// Raw pointer event args associated with the pointer. + /// The pointer. + IPointer? TryGetPointer(RawPointerEventArgs ev); } } diff --git a/src/Avalonia.Input/KeyboardDevice.cs b/src/Avalonia.Input/KeyboardDevice.cs index 3df717b8c4..0600b54618 100644 --- a/src/Avalonia.Input/KeyboardDevice.cs +++ b/src/Avalonia.Input/KeyboardDevice.cs @@ -188,7 +188,7 @@ namespace Avalonia.Input RoutedEvent = routedEvent, Device = this, Key = keyInput.Key, - KeyModifiers = KeyModifiersUtils.ConvertToKey(keyInput.Modifiers), + KeyModifiers = keyInput.Modifiers.ToKeyModifiers(), Source = element, }; diff --git a/src/Avalonia.Input/MouseDevice.cs b/src/Avalonia.Input/MouseDevice.cs index a5d54bb047..5f8ab24b79 100644 --- a/src/Avalonia.Input/MouseDevice.cs +++ b/src/Avalonia.Input/MouseDevice.cs @@ -21,27 +21,17 @@ namespace Avalonia.Input private readonly Pointer _pointer; private bool _disposed; - private PixelPoint? _position; + private PixelPoint? _position; + private MouseButton _lastMouseDownButton; public MouseDevice(Pointer? pointer = null) { _pointer = pointer ?? new Pointer(Pointer.GetNextFreeId(), PointerType.Mouse, true); } - - /// - /// Gets the control that is currently capturing by the mouse, if any. - /// - /// - /// When an element captures the mouse, it receives mouse input whether the cursor is - /// within the control's bounds or not. To set the mouse capture, call the - /// method. - /// + [Obsolete("Use IPointer instead")] public IInputElement? Captured => _pointer.Captured; - /// - /// Gets the mouse position, in screen coordinates. - /// [Obsolete("Use events instead")] public PixelPoint Position { @@ -49,15 +39,7 @@ namespace Avalonia.Input protected set => _position = value; } - /// - /// Captures mouse input to the specified control. - /// - /// The control. - /// - /// When an element captures the mouse, it receives mouse input whether the cursor is - /// within the control's bounds or not. The current mouse capture control is exposed - /// by the property. - /// + [Obsolete("Use IPointer instead")] public void Capture(IInputElement? control) { _pointer.Capture(control); @@ -90,39 +72,6 @@ namespace Avalonia.Input ProcessRawEvent(margs); } - public void TopLevelClosed(IInputRoot root) - { - ClearPointerOver(this, 0, root, PointerPointProperties.None, KeyModifiers.None); - } - - public void SceneInvalidated(IInputRoot root, Rect rect) - { - // Pointer is outside of the target area - if (_position == null ) - { - if (root.PointerOverElement != null) - ClearPointerOver(this, 0, root, PointerPointProperties.None, KeyModifiers.None); - return; - } - - - var clientPoint = root.PointToClient(_position.Value); - - if (rect.Contains(clientPoint)) - { - if (_pointer.Captured == null) - { - SetPointerOver(this, 0 /* TODO: proper timestamp */, root, clientPoint, - PointerPointProperties.None, KeyModifiers.None); - } - else - { - SetPointerOver(this, 0 /* TODO: proper timestamp */, root, _pointer.Captured, - PointerPointProperties.None, KeyModifiers.None); - } - } - } - int ButtonCount(PointerPointProperties props) { var rv = 0; @@ -138,7 +87,7 @@ namespace Avalonia.Input rv++; return rv; } - + private void ProcessRawEvent(RawPointerEventArgs e) { e = e ?? throw new ArgumentNullException(nameof(e)); @@ -147,15 +96,14 @@ namespace Avalonia.Input if(mouse._disposed) return; - if (e.Type == RawPointerEventType.NonClientLeftButtonDown) return; - _position = e.Root.PointToScreen(e.Position); var props = CreateProperties(e); - var keyModifiers = KeyModifiersUtils.ConvertToKey(e.InputModifiers); + var keyModifiers = e.InputModifiers.ToKeyModifiers(); switch (e.Type) { case RawPointerEventType.LeaveWindow: - LeaveWindow(mouse, e.Timestamp, e.Root, props, keyModifiers); + case RawPointerEventType.NonClientLeftButtonDown: + LeaveWindow(); break; case RawPointerEventType.LeftButtonDown: case RawPointerEventType.RightButtonDown: @@ -163,10 +111,9 @@ namespace Avalonia.Input case RawPointerEventType.XButton1Down: case RawPointerEventType.XButton2Down: if (ButtonCount(props) > 1) - e.Handled = MouseMove(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.IntermediatePoints); + e.Handled = MouseMove(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.IntermediatePoints, e.InputHitTestResult); else - e.Handled = MouseDown(mouse, e.Timestamp, e.Root, e.Position, - props, keyModifiers); + e.Handled = MouseDown(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.InputHitTestResult); break; case RawPointerEventType.LeftButtonUp: case RawPointerEventType.RightButtonUp: @@ -174,82 +121,50 @@ namespace Avalonia.Input case RawPointerEventType.XButton1Up: case RawPointerEventType.XButton2Up: if (ButtonCount(props) != 0) - e.Handled = MouseMove(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.IntermediatePoints); + e.Handled = MouseMove(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.IntermediatePoints, e.InputHitTestResult); else - e.Handled = MouseUp(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers); + e.Handled = MouseUp(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.InputHitTestResult); break; case RawPointerEventType.Move: - e.Handled = MouseMove(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.IntermediatePoints); + e.Handled = MouseMove(mouse, e.Timestamp, e.Root, e.Position, props, keyModifiers, e.IntermediatePoints, e.InputHitTestResult); break; case RawPointerEventType.Wheel: - e.Handled = MouseWheel(mouse, e.Timestamp, e.Root, e.Position, props, ((RawMouseWheelEventArgs)e).Delta, keyModifiers); + e.Handled = MouseWheel(mouse, e.Timestamp, e.Root, e.Position, props, ((RawMouseWheelEventArgs)e).Delta, keyModifiers, e.InputHitTestResult); break; case RawPointerEventType.Magnify: - e.Handled = GestureMagnify(mouse, e.Timestamp, e.Root, e.Position, props, ((RawPointerGestureEventArgs)e).Delta, keyModifiers); + e.Handled = GestureMagnify(mouse, e.Timestamp, e.Root, e.Position, props, ((RawPointerGestureEventArgs)e).Delta, keyModifiers, e.InputHitTestResult); break; case RawPointerEventType.Rotate: - e.Handled = GestureRotate(mouse, e.Timestamp, e.Root, e.Position, props, ((RawPointerGestureEventArgs)e).Delta, keyModifiers); + e.Handled = GestureRotate(mouse, e.Timestamp, e.Root, e.Position, props, ((RawPointerGestureEventArgs)e).Delta, keyModifiers, e.InputHitTestResult); break; case RawPointerEventType.Swipe: - e.Handled = GestureSwipe(mouse, e.Timestamp, e.Root, e.Position, props, ((RawPointerGestureEventArgs)e).Delta, keyModifiers); + e.Handled = GestureSwipe(mouse, e.Timestamp, e.Root, e.Position, props, ((RawPointerGestureEventArgs)e).Delta, keyModifiers, e.InputHitTestResult); break; } } - private void LeaveWindow(IMouseDevice device, ulong timestamp, IInputRoot root, PointerPointProperties properties, - KeyModifiers inputModifiers) + private void LeaveWindow() { - device = device ?? throw new ArgumentNullException(nameof(device)); - root = root ?? throw new ArgumentNullException(nameof(root)); - _position = null; - ClearPointerOver(this, timestamp, root, properties, inputModifiers); } - PointerPointProperties CreateProperties(RawPointerEventArgs args) { - - var kind = PointerUpdateKind.Other; - - if (args.Type == RawPointerEventType.LeftButtonDown) - kind = PointerUpdateKind.LeftButtonPressed; - if (args.Type == RawPointerEventType.MiddleButtonDown) - kind = PointerUpdateKind.MiddleButtonPressed; - if (args.Type == RawPointerEventType.RightButtonDown) - kind = PointerUpdateKind.RightButtonPressed; - if (args.Type == RawPointerEventType.XButton1Down) - kind = PointerUpdateKind.XButton1Pressed; - if (args.Type == RawPointerEventType.XButton2Down) - kind = PointerUpdateKind.XButton2Pressed; - if (args.Type == RawPointerEventType.LeftButtonUp) - kind = PointerUpdateKind.LeftButtonReleased; - if (args.Type == RawPointerEventType.MiddleButtonUp) - kind = PointerUpdateKind.MiddleButtonReleased; - if (args.Type == RawPointerEventType.RightButtonUp) - kind = PointerUpdateKind.RightButtonReleased; - if (args.Type == RawPointerEventType.XButton1Up) - kind = PointerUpdateKind.XButton1Released; - if (args.Type == RawPointerEventType.XButton2Up) - kind = PointerUpdateKind.XButton2Released; - - return new PointerPointProperties(args.InputModifiers, kind); + return new PointerPointProperties(args.InputModifiers, args.Type.ToUpdateKind()); } - private MouseButton _lastMouseDownButton; private bool MouseDown(IMouseDevice device, ulong timestamp, IInputElement root, Point p, PointerPointProperties properties, - KeyModifiers inputModifiers) + KeyModifiers inputModifiers, IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - var hit = HitTest(root, p); + var source = _pointer.Captured ?? root.InputHitTest(p); - if (hit != null) + if (source != null) { - _pointer.Capture(hit); - var source = GetSource(hit); + _pointer.Capture(source); if (source != null) { var settings = AvaloniaLocator.Current.GetService(); @@ -275,23 +190,14 @@ namespace Avalonia.Input return false; } - private bool MouseMove(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, PointerPointProperties properties, - KeyModifiers inputModifiers, Lazy?>? intermediatePoints) + private bool MouseMove(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, + PointerPointProperties properties, KeyModifiers inputModifiers, Lazy?>? intermediatePoints, + IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - IInputElement? source; - - if (_pointer.Captured == null) - { - source = SetPointerOver(this, timestamp, root, p, properties, inputModifiers); - } - else - { - SetPointerOver(this, timestamp, root, _pointer.Captured, properties, inputModifiers); - source = _pointer.Captured; - } + var source = _pointer.Captured ?? hitTest; if (source is object) { @@ -306,13 +212,12 @@ namespace Avalonia.Input } private bool MouseUp(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, PointerPointProperties props, - KeyModifiers inputModifiers) + KeyModifiers inputModifiers, IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - var hit = HitTest(root, p); - var source = GetSource(hit); + var source = _pointer.Captured ?? hitTest; if (source is not null) { @@ -329,13 +234,12 @@ namespace Avalonia.Input private bool MouseWheel(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, PointerPointProperties props, - Vector delta, KeyModifiers inputModifiers) + Vector delta, KeyModifiers inputModifiers, IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - var hit = HitTest(root, p); - var source = GetSource(hit); + var source = _pointer.Captured ?? hitTest; // KeyModifiers.Shift should scroll in horizontal direction. This does not work on every platform. // If Shift-Key is pressed and X is close to 0 we swap the Vector. @@ -356,16 +260,15 @@ namespace Avalonia.Input } private bool GestureMagnify(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, - PointerPointProperties props, Vector delta, KeyModifiers inputModifiers) + PointerPointProperties props, Vector delta, KeyModifiers inputModifiers, IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - var hit = HitTest(root, p); + var source = _pointer.Captured ?? hitTest; - if (hit != null) + if (source != null) { - var source = GetSource(hit); var e = new PointerDeltaEventArgs(Gestures.PointerTouchPadGestureMagnifyEvent, source, _pointer, root, p, timestamp, props, inputModifiers, delta); @@ -377,16 +280,15 @@ namespace Avalonia.Input } private bool GestureRotate(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, - PointerPointProperties props, Vector delta, KeyModifiers inputModifiers) + PointerPointProperties props, Vector delta, KeyModifiers inputModifiers, IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - var hit = HitTest(root, p); + var source = _pointer.Captured ?? hitTest; - if (hit != null) + if (source != null) { - var source = GetSource(hit); var e = new PointerDeltaEventArgs(Gestures.PointerTouchPadGestureRotateEvent, source, _pointer, root, p, timestamp, props, inputModifiers, delta); @@ -398,16 +300,15 @@ namespace Avalonia.Input } private bool GestureSwipe(IMouseDevice device, ulong timestamp, IInputRoot root, Point p, - PointerPointProperties props, Vector delta, KeyModifiers inputModifiers) + PointerPointProperties props, Vector delta, KeyModifiers inputModifiers, IInputElement? hitTest) { device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - var hit = HitTest(root, p); + var source = _pointer.Captured ?? hitTest; - if (hit != null) + if (source != null) { - var source = GetSource(hit); var e = new PointerDeltaEventArgs(Gestures.PointerTouchPadGestureSwipeEvent, source, _pointer, root, p, timestamp, props, inputModifiers, delta); @@ -418,154 +319,27 @@ namespace Avalonia.Input return false; } - private IInteractive? GetSource(IVisual? hit) - { - if (hit is null) - return null; - - return _pointer.Captured ?? - (hit as IInteractive) ?? - hit.GetSelfAndVisualAncestors().OfType().FirstOrDefault(); - } - - private IInputElement? HitTest(IInputElement root, Point p) - { - root = root ?? throw new ArgumentNullException(nameof(root)); - - return _pointer.Captured ?? root.InputHitTest(p); - } - - PointerEventArgs CreateSimpleEvent(RoutedEvent ev, ulong timestamp, IInteractive? source, - PointerPointProperties properties, - KeyModifiers inputModifiers) - { - return new PointerEventArgs(ev, source, _pointer, null, default, - timestamp, properties, inputModifiers); - } - - private void ClearPointerOver(IPointerDevice device, ulong timestamp, IInputRoot root, - PointerPointProperties properties, - KeyModifiers inputModifiers) - { - device = device ?? throw new ArgumentNullException(nameof(device)); - root = root ?? throw new ArgumentNullException(nameof(root)); - - var element = root.PointerOverElement; - var e = CreateSimpleEvent(InputElement.PointerLeaveEvent, timestamp, element, properties, inputModifiers); - - if (element!=null && !element.IsAttachedToVisualTree) - { - // element has been removed from visual tree so do top down cleanup - if (root.IsPointerOver) - ClearChildrenPointerOver(e, root,true); - } - while (element != null) - { - e.Source = element; - e.Handled = false; - element.RaiseEvent(e); - element = (IInputElement?)element.VisualParent; - } - - root.PointerOverElement = null; - } - - private void ClearChildrenPointerOver(PointerEventArgs e, IInputElement element,bool clearRoot) + public void Dispose() { - foreach (IInputElement el in element.VisualChildren) - { - if (el.IsPointerOver) - { - ClearChildrenPointerOver(e, el, true); - break; - } - } - if(clearRoot) - { - e.Source = element; - e.Handled = false; - element.RaiseEvent(e); - } + _disposed = true; + _pointer?.Dispose(); } - private IInputElement? SetPointerOver(IPointerDevice device, ulong timestamp, IInputRoot root, Point p, - PointerPointProperties properties, - KeyModifiers inputModifiers) + [Obsolete] + public void TopLevelClosed(IInputRoot root) { - device = device ?? throw new ArgumentNullException(nameof(device)); - root = root ?? throw new ArgumentNullException(nameof(root)); - - var element = root.InputHitTest(p); - - if (element != root.PointerOverElement) - { - if (element != null) - { - SetPointerOver(device, timestamp, root, element, properties, inputModifiers); - } - else - { - ClearPointerOver(device, timestamp, root, properties, inputModifiers); - } - } - - return element; + // no-op } - private void SetPointerOver(IPointerDevice device, ulong timestamp, IInputRoot root, IInputElement element, - PointerPointProperties properties, - KeyModifiers inputModifiers) + [Obsolete] + public void SceneInvalidated(IInputRoot root, Rect rect) { - device = device ?? throw new ArgumentNullException(nameof(device)); - root = root ?? throw new ArgumentNullException(nameof(root)); - element = element ?? throw new ArgumentNullException(nameof(element)); - - IInputElement? branch = null; - - IInputElement? el = element; - - while (el != null) - { - if (el.IsPointerOver) - { - branch = el; - break; - } - el = (IInputElement?)el.VisualParent; - } - - el = root.PointerOverElement; - - var e = CreateSimpleEvent(InputElement.PointerLeaveEvent, timestamp, el, properties, inputModifiers); - if (el!=null && branch!=null && !el.IsAttachedToVisualTree) - { - ClearChildrenPointerOver(e,branch,false); - } - - while (el != null && el != branch) - { - e.Source = el; - e.Handled = false; - el.RaiseEvent(e); - el = (IInputElement?)el.VisualParent; - } - - el = root.PointerOverElement = element; - e.RoutedEvent = InputElement.PointerEnterEvent; - - while (el != null && el != branch) - { - e.Source = el; - e.Handled = false; - el.RaiseEvent(e); - el = (IInputElement?)el.VisualParent; - } + // no-op } - public void Dispose() + public IPointer? TryGetPointer(RawPointerEventArgs ev) { - _disposed = true; - _pointer?.Dispose(); + return _pointer; } } } diff --git a/src/Avalonia.Input/PointerEventArgs.cs b/src/Avalonia.Input/PointerEventArgs.cs index 0604d09dc4..5495802920 100644 --- a/src/Avalonia.Input/PointerEventArgs.cs +++ b/src/Avalonia.Input/PointerEventArgs.cs @@ -63,6 +63,8 @@ namespace Avalonia.Input } public Point GetPosition(IVisual relativeTo) => _ev.GetPosition(relativeTo); + + public IPointer? TryGetPointer(RawPointerEventArgs ev) => _ev.Pointer; } public IPointer Pointer { get; } diff --git a/src/Avalonia.Input/PointerOverPreProcessor.cs b/src/Avalonia.Input/PointerOverPreProcessor.cs new file mode 100644 index 0000000000..a38364197d --- /dev/null +++ b/src/Avalonia.Input/PointerOverPreProcessor.cs @@ -0,0 +1,210 @@ +using System; +using Avalonia.Input.Raw; + +namespace Avalonia.Input +{ + internal class PointerOverPreProcessor : IObserver + { + private IPointerDevice? _lastActivePointerDevice; + private (IPointer pointer, PixelPoint position)? _lastPointer; + + private readonly IInputRoot _inputRoot; + + public PointerOverPreProcessor(IInputRoot inputRoot) + { + _inputRoot = inputRoot ?? throw new ArgumentNullException(nameof(inputRoot)); + } + + public void OnCompleted() + { + ClearPointerOver(); + } + + public void OnError(Exception error) + { + } + + public void OnNext(RawInputEventArgs value) + { + if (value is RawPointerEventArgs args + && args.Root == _inputRoot + && value.Device is IPointerDevice pointerDevice) + { + if (pointerDevice != _lastActivePointerDevice) + { + ClearPointerOver(); + + // Set last active device before processing input, because ClearPointerOver might be called and clear last device. + _lastActivePointerDevice = pointerDevice; + } + + if (args.Type is RawPointerEventType.LeaveWindow or RawPointerEventType.NonClientLeftButtonDown + && _lastPointer is (var lastPointer, var lastPosition)) + { + _lastPointer = null; + ClearPointerOver(lastPointer, args.Root, 0, args.Root.PointToClient(lastPosition), + new PointerPointProperties(args.InputModifiers, args.Type.ToUpdateKind()), + args.InputModifiers.ToKeyModifiers()); + } + else if (pointerDevice.TryGetPointer(args) is IPointer pointer + && pointer.Type != PointerType.Touch) + { + var element = pointer.Captured ?? args.InputHitTestResult; + + SetPointerOver(pointer, args.Root, element, args.Timestamp, args.Position, + new PointerPointProperties(args.InputModifiers, args.Type.ToUpdateKind()), + args.InputModifiers.ToKeyModifiers()); + } + } + } + + public void SceneInvalidated(Rect dirtyRect) + { + // Pointer is outside of the target area + if (_lastPointer is (var pointer, var position)) + { + var clientPoint = _inputRoot.PointToClient(position); + + if (dirtyRect.Contains(clientPoint)) + { + SetPointerOver(pointer, _inputRoot, _inputRoot.InputHitTest(clientPoint), 0, clientPoint, PointerPointProperties.None, KeyModifiers.None); + } + else if (!_inputRoot.Bounds.Contains(clientPoint)) + { + ClearPointerOver(pointer, _inputRoot, 0, new Point(-1, -1), PointerPointProperties.None, KeyModifiers.None); + } + } + } + + private void ClearPointerOver() + { + if (_lastPointer is (var pointer, var _)) + { + ClearPointerOver(pointer, _inputRoot, 0, new Point(-1, -1), PointerPointProperties.None, KeyModifiers.None); + } + _lastPointer = null; + _lastActivePointerDevice = null; + } + + private void ClearPointerOver(IPointer pointer, IInputRoot root, + ulong timestamp, Point position, PointerPointProperties properties, KeyModifiers inputModifiers) + { + var element = root.PointerOverElement; + if (element is null) + { + return; + } + + // Do not pass rootVisual, when we have unknown (negative) position, + // so GetPosition won't return invalid values. + var hasPosition = position.X >= 0 && position.Y >= 0; + var e = new PointerEventArgs(InputElement.PointerLeaveEvent, element, pointer, + hasPosition ? root : null, hasPosition ? position : default, + timestamp, properties, inputModifiers); + + if (element != null && !element.IsAttachedToVisualTree) + { + // element has been removed from visual tree so do top down cleanup + if (root.IsPointerOver) + { + ClearChildrenPointerOver(e, root, true); + } + } + while (element != null) + { + e.Source = element; + e.Handled = false; + element.RaiseEvent(e); + element = (IInputElement?)element.VisualParent; + } + + root.PointerOverElement = null; + _lastActivePointerDevice = null; + _lastPointer = null; + } + + private void ClearChildrenPointerOver(PointerEventArgs e, IInputElement element, bool clearRoot) + { + foreach (IInputElement el in element.VisualChildren) + { + if (el.IsPointerOver) + { + ClearChildrenPointerOver(e, el, true); + break; + } + } + if (clearRoot) + { + e.Source = element; + e.Handled = false; + element.RaiseEvent(e); + } + } + + private void SetPointerOver(IPointer pointer, IInputRoot root, IInputElement? element, + ulong timestamp, Point position, PointerPointProperties properties, KeyModifiers inputModifiers) + { + var pointerOverElement = root.PointerOverElement; + + if (element != pointerOverElement) + { + if (element != null) + { + SetPointerOverToElement(pointer, root, element, timestamp, position, properties, inputModifiers); + } + else + { + ClearPointerOver(pointer, root, timestamp, position, properties, inputModifiers); + } + } + } + + private void SetPointerOverToElement(IPointer pointer, IInputRoot root, IInputElement element, + ulong timestamp, Point position, PointerPointProperties properties, KeyModifiers inputModifiers) + { + IInputElement? branch = null; + + IInputElement? el = element; + + while (el != null) + { + if (el.IsPointerOver) + { + branch = el; + break; + } + el = (IInputElement?)el.VisualParent; + } + + el = root.PointerOverElement; + + var e = new PointerEventArgs(InputElement.PointerLeaveEvent, el, pointer, root, position, + timestamp, properties, inputModifiers); + if (el != null && branch != null && !el.IsAttachedToVisualTree) + { + ClearChildrenPointerOver(e, branch, false); + } + + while (el != null && el != branch) + { + e.Source = el; + e.Handled = false; + el.RaiseEvent(e); + el = (IInputElement?)el.VisualParent; + } + + el = root.PointerOverElement = element; + _lastPointer = (pointer, root.PointToScreen(position)); + + e.RoutedEvent = InputElement.PointerEnterEvent; + + while (el != null && el != branch) + { + e.Source = el; + e.Handled = false; + el.RaiseEvent(e); + el = (IInputElement?)el.VisualParent; + } + } + } +} diff --git a/src/Avalonia.Input/Raw/RawDragEvent.cs b/src/Avalonia.Input/Raw/RawDragEvent.cs index 6e9ce20ff1..652bad7115 100644 --- a/src/Avalonia.Input/Raw/RawDragEvent.cs +++ b/src/Avalonia.Input/Raw/RawDragEvent.cs @@ -20,7 +20,7 @@ namespace Avalonia.Input.Raw Location = location; Data = data; Effects = effects; - KeyModifiers = KeyModifiersUtils.ConvertToKey(modifiers); + KeyModifiers = modifiers.ToKeyModifiers(); #pragma warning disable CS0618 // Type or member is obsolete Modifiers = (InputModifiers)modifiers; #pragma warning restore CS0618 // Type or member is obsolete diff --git a/src/Avalonia.Input/Raw/RawInputHelpers.cs b/src/Avalonia.Input/Raw/RawInputHelpers.cs new file mode 100644 index 0000000000..9d329bae59 --- /dev/null +++ b/src/Avalonia.Input/Raw/RawInputHelpers.cs @@ -0,0 +1,27 @@ +using Avalonia.Input.Raw; + +namespace Avalonia.Input +{ + internal static class RawInputHelpers + { + public static KeyModifiers ToKeyModifiers(this RawInputModifiers modifiers) => + (KeyModifiers)(modifiers & RawInputModifiers.KeyboardMask); + + public static PointerUpdateKind ToUpdateKind(this RawPointerEventType type) => type switch + { + RawPointerEventType.LeftButtonDown => PointerUpdateKind.LeftButtonPressed, + RawPointerEventType.LeftButtonUp => PointerUpdateKind.LeftButtonReleased, + RawPointerEventType.RightButtonDown => PointerUpdateKind.RightButtonPressed, + RawPointerEventType.RightButtonUp => PointerUpdateKind.RightButtonReleased, + RawPointerEventType.MiddleButtonDown => PointerUpdateKind.MiddleButtonPressed, + RawPointerEventType.MiddleButtonUp => PointerUpdateKind.MiddleButtonReleased, + RawPointerEventType.XButton1Down => PointerUpdateKind.XButton1Pressed, + RawPointerEventType.XButton1Up => PointerUpdateKind.XButton1Released, + RawPointerEventType.XButton2Down => PointerUpdateKind.XButton2Pressed, + RawPointerEventType.XButton2Up => PointerUpdateKind.XButton2Released, + RawPointerEventType.TouchBegin => PointerUpdateKind.LeftButtonPressed, + RawPointerEventType.TouchEnd => PointerUpdateKind.LeftButtonReleased, + _ => PointerUpdateKind.Other + }; + } +} diff --git a/src/Avalonia.Input/Raw/RawPointerEventArgs.cs b/src/Avalonia.Input/Raw/RawPointerEventArgs.cs index c157fa059c..8b9d7c161d 100644 --- a/src/Avalonia.Input/Raw/RawPointerEventArgs.cs +++ b/src/Avalonia.Input/Raw/RawPointerEventArgs.cs @@ -120,6 +120,8 @@ namespace Avalonia.Input.Raw /// only valid for Move and TouchUpdate /// public Lazy?>? IntermediatePoints { get; set; } + + internal IInputElement? InputHitTestResult { get; set; } } public struct RawPointerPoint diff --git a/src/Avalonia.Input/TouchDevice.cs b/src/Avalonia.Input/TouchDevice.cs index 20cafb9e8e..54dcc4051e 100644 --- a/src/Avalonia.Input/TouchDevice.cs +++ b/src/Avalonia.Input/TouchDevice.cs @@ -3,24 +3,26 @@ using System.Collections.Generic; using System.Linq; using Avalonia.Input.Raw; using Avalonia.Platform; +using Avalonia.VisualTree; namespace Avalonia.Input { /// /// Handles raw touch events + /// /// /// This class is supposed to be used on per-toplevel basis, don't use a shared one /// - /// - public class TouchDevice : IInputDevice, IDisposable + public class TouchDevice : IPointerDevice, IDisposable { private readonly Dictionary _pointers = new Dictionary(); private bool _disposed; private int _clickCount; private Rect _lastClickRect; private ulong _lastClickTime; - KeyModifiers GetKeyModifiers(RawInputModifiers modifiers) => - (KeyModifiers)(modifiers & RawInputModifiers.KeyboardMask); + private Pointer? _lastPointer; + + IInputElement? IPointerDevice.Captured => _lastPointer?.Captured; RawInputModifiers GetModifiers(RawInputModifiers modifiers, bool isLeftButtonDown) { @@ -30,6 +32,10 @@ namespace Avalonia.Input return rv; } + void IPointerDevice.Capture(IInputElement? control) => _lastPointer?.Capture(control); + + Point IPointerDevice.GetPosition(IVisual relativeTo) => default; + public void ProcessRawEvent(RawInputEventArgs ev) { if (ev.Handled || _disposed) @@ -39,15 +45,18 @@ namespace Avalonia.Input { if (args.Type == RawPointerEventType.TouchEnd) return; - var hit = args.Root.InputHitTest(args.Position); + var hit = args.InputHitTestResult; _pointers[args.TouchPointId] = pointer = new Pointer(Pointer.GetNextFreeId(), PointerType.Touch, _pointers.Count == 0); pointer.Capture(hit); } - + _lastPointer = pointer; var target = pointer.Captured ?? args.Root; + var updateKind = args.Type.ToUpdateKind(); + var keyModifier = args.InputModifiers.ToKeyModifiers(); + if (args.Type == RawPointerEventType.TouchBegin) { if (_pointers.Count > 1) @@ -73,9 +82,8 @@ namespace Avalonia.Input target.RaiseEvent(new PointerPressedEventArgs(target, pointer, args.Root, args.Position, ev.Timestamp, - new PointerPointProperties(GetModifiers(args.InputModifiers, true), - PointerUpdateKind.LeftButtonPressed), - GetKeyModifiers(args.InputModifiers), _clickCount)); + new PointerPointProperties(GetModifiers(args.InputModifiers, true), updateKind), + keyModifier, _clickCount)); } if (args.Type == RawPointerEventType.TouchEnd) @@ -85,10 +93,10 @@ namespace Avalonia.Input { target.RaiseEvent(new PointerReleasedEventArgs(target, pointer, args.Root, args.Position, ev.Timestamp, - new PointerPointProperties(GetModifiers(args.InputModifiers, false), - PointerUpdateKind.LeftButtonReleased), - GetKeyModifiers(args.InputModifiers), MouseButton.Left)); + new PointerPointProperties(GetModifiers(args.InputModifiers, false), updateKind), + keyModifier, MouseButton.Left)); } + _lastPointer = null; } if (args.Type == RawPointerEventType.TouchCancel) @@ -96,18 +104,16 @@ namespace Avalonia.Input _pointers.Remove(args.TouchPointId); using (pointer) pointer.Capture(null); + _lastPointer = null; } if (args.Type == RawPointerEventType.TouchUpdate) { - var modifiers = GetModifiers(args.InputModifiers, pointer.IsPrimary); target.RaiseEvent(new PointerEventArgs(InputElement.PointerMovedEvent, target, pointer, args.Root, args.Position, ev.Timestamp, - new PointerPointProperties(GetModifiers(args.InputModifiers, true), PointerUpdateKind.Other), - GetKeyModifiers(args.InputModifiers), args.IntermediatePoints)); + new PointerPointProperties(GetModifiers(args.InputModifiers, true), updateKind), + keyModifier, args.IntermediatePoints)); } - - } public void Dispose() @@ -121,5 +127,12 @@ namespace Avalonia.Input p.Dispose(); } + public IPointer? TryGetPointer(RawPointerEventArgs ev) + { + return ev is RawTouchEventArgs args + && _pointers.TryGetValue(args.TouchPointId, out var pointer) + ? pointer + : null; + } } } From 8fba608156ecc275f90a44d6b7af1aaa2a7e15f5 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 14 Apr 2022 11:47:35 -0400 Subject: [PATCH 38/67] Add more tests for pointerover --- .../TopLevelTests.cs | 21 +- .../MouseDeviceTests.cs | 177 ------ .../PointerOverTests.cs | 533 ++++++++++++++++++ 3 files changed, 536 insertions(+), 195 deletions(-) create mode 100644 tests/Avalonia.Input.UnitTests/PointerOverTests.cs diff --git a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs index 9c2d760733..db6349cc5a 100644 --- a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs @@ -193,6 +193,9 @@ namespace Avalonia.Controls.UnitTests public void Impl_Input_Should_Pass_Input_To_InputManager() { var inputManagerMock = new Mock(); + inputManagerMock.DefaultValue = DefaultValue.Mock; + inputManagerMock.SetupAllProperties(); + var services = TestServices.StyledWindow.With(inputManager: inputManagerMock.Object); using (UnitTestApplication.Start(services)) @@ -249,24 +252,6 @@ namespace Avalonia.Controls.UnitTests } } - [Fact] - public void Close_Should_Notify_MouseDevice() - { - using (UnitTestApplication.Start(TestServices.StyledWindow)) - { - var impl = new Mock(); - var mouseDevice = new Mock(); - impl.SetupAllProperties(); - impl.Setup(x => x.MouseDevice).Returns(mouseDevice.Object); - - var target = new TestTopLevel(impl.Object); - - impl.Object.Closed(); - - mouseDevice.Verify(x => x.TopLevelClosed(target)); - } - } - [Fact] public void Close_Should_Dispose_LayoutManager() { diff --git a/tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs b/tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs index 223f458f25..e8f8244d83 100644 --- a/tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs +++ b/tests/Avalonia.Input.UnitTests/MouseDeviceTests.cs @@ -1,13 +1,10 @@ using Avalonia.Controls; using Avalonia.Input.Raw; -using Avalonia.Interactivity; using Avalonia.Media; using Avalonia.Rendering; using Avalonia.UnitTests; -using Avalonia.VisualTree; using Moq; using System; -using System.Collections.Generic; using Xunit; namespace Avalonia.Input.UnitTests @@ -34,160 +31,6 @@ namespace Avalonia.Input.UnitTests } #pragma warning restore CS0618 // Type or member is obsolete - [Fact] - public void MouseMove_Should_Update_IsPointerOver() - { - var renderer = new Mock(); - - using (TestApplication(renderer.Object)) - { - var inputManager = InputManager.Instance; - - Canvas canvas; - Border border; - Decorator decorator; - - var root = new TestRoot - { - MouseDevice = new MouseDevice(), - Renderer = renderer.Object, - Child = new Panel - { - Children = - { - (canvas = new Canvas()), - (border = new Border - { - Child = decorator = new Decorator(), - }) - } - } - }; - - SetHit(renderer, decorator); - SendMouseMove(inputManager, root); - - Assert.True(decorator.IsPointerOver); - Assert.True(border.IsPointerOver); - Assert.False(canvas.IsPointerOver); - Assert.True(root.IsPointerOver); - - SetHit(renderer, canvas); - SendMouseMove(inputManager, root); - - Assert.False(decorator.IsPointerOver); - Assert.False(border.IsPointerOver); - Assert.True(canvas.IsPointerOver); - Assert.True(root.IsPointerOver); - } - } - - [Fact] - public void IsPointerOver_Should_Be_Updated_When_Child_Sets_Handled_True() - { - var renderer = new Mock(); - - using (TestApplication(renderer.Object)) - { - var inputManager = InputManager.Instance; - - Canvas canvas; - Border border; - Decorator decorator; - - var root = new TestRoot - { - MouseDevice = new MouseDevice(), - Renderer = renderer.Object, - Child = new Panel - { - Children = - { - (canvas = new Canvas()), - (border = new Border - { - Child = decorator = new Decorator(), - }) - } - } - }; - - SetHit(renderer, canvas); - SendMouseMove(inputManager, root); - - Assert.False(decorator.IsPointerOver); - Assert.False(border.IsPointerOver); - Assert.True(canvas.IsPointerOver); - Assert.True(root.IsPointerOver); - - // Ensure that e.Handled is reset between controls. - decorator.PointerEnter += (s, e) => e.Handled = true; - - SetHit(renderer, decorator); - SendMouseMove(inputManager, root); - - Assert.True(decorator.IsPointerOver); - Assert.True(border.IsPointerOver); - Assert.False(canvas.IsPointerOver); - Assert.True(root.IsPointerOver); - } - } - - [Fact] - public void PointerEnter_Leave_Should_Be_Raised_In_Correct_Order() - { - var renderer = new Mock(); - var result = new List<(object, string)>(); - - void HandleEvent(object sender, PointerEventArgs e) - { - result.Add((sender, e.RoutedEvent.Name)); - } - - using (TestApplication(renderer.Object)) - { - var inputManager = InputManager.Instance; - - Canvas canvas; - Border border; - Decorator decorator; - - var root = new TestRoot - { - MouseDevice = new MouseDevice(), - Renderer = renderer.Object, - Child = new Panel - { - Children = - { - (canvas = new Canvas()), - (border = new Border - { - Child = decorator = new Decorator(), - }) - } - } - }; - - SetHit(renderer, canvas); - SendMouseMove(inputManager, root); - - AddEnterLeaveHandlers(HandleEvent, root, canvas, border, decorator); - SetHit(renderer, decorator); - SendMouseMove(inputManager, root); - - Assert.Equal( - new[] - { - ((object)canvas, "PointerLeave"), - ((object)decorator, "PointerEnter"), - ((object)border, "PointerEnter"), - }, - result); - } - } - - [Fact] public void GetPosition_Should_Respect_Control_RenderTransform() { @@ -216,17 +59,6 @@ namespace Avalonia.Input.UnitTests } } - private void AddEnterLeaveHandlers( - EventHandler handler, - params IControl[] controls) - { - foreach (var c in controls) - { - c.PointerEnter += handler; - c.PointerLeave += handler; - } - } - private void SendMouseMove(IInputManager inputManager, TestRoot root, Point p = new Point()) { inputManager.ProcessInput(new RawPointerEventArgs( @@ -238,15 +70,6 @@ namespace Avalonia.Input.UnitTests RawInputModifiers.None)); } - private void SetHit(Mock renderer, IControl hit) - { - renderer.Setup(x => x.HitTest(It.IsAny(), It.IsAny(), It.IsAny>())) - .Returns(new[] { hit }); - - renderer.Setup(x => x.HitTestFirst(It.IsAny(), It.IsAny(), It.IsAny>())) - .Returns(hit); - } - private IDisposable TestApplication(IRenderer renderer) { return UnitTestApplication.Start( diff --git a/tests/Avalonia.Input.UnitTests/PointerOverTests.cs b/tests/Avalonia.Input.UnitTests/PointerOverTests.cs new file mode 100644 index 0000000000..14acf9f946 --- /dev/null +++ b/tests/Avalonia.Input.UnitTests/PointerOverTests.cs @@ -0,0 +1,533 @@ +#nullable enable +using System; +using System.Collections.Generic; + +using Avalonia.Controls; +using Avalonia.Controls.Presenters; +using Avalonia.Controls.Templates; +using Avalonia.Input.Raw; +using Avalonia.Platform; +using Avalonia.Rendering; +using Avalonia.UnitTests; +using Avalonia.VisualTree; + +using Moq; + +using Xunit; + +namespace Avalonia.Input.UnitTests +{ + public class PointerOverTests + { + // https://github.com/AvaloniaUI/Avalonia/issues/2821 + [Fact] + public void Close_Should_Remove_PointerOver() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var device = CreatePointerDeviceMock().Object; + var impl = CreateTopLevelImplMock(renderer.Object); + + Canvas canvas; + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()) + } + }); + + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.True(canvas.IsPointerOver); + + impl.Object.Closed!(); + + Assert.False(canvas.IsPointerOver); + } + + [Fact] + public void MouseMove_Should_Update_IsPointerOver() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var device = CreatePointerDeviceMock().Object; + var impl = CreateTopLevelImplMock(renderer.Object); + + Canvas canvas; + Border border; + Decorator decorator; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()), + (border = new Border + { + Child = decorator = new Decorator(), + }) + } + }); + + SetHit(renderer, decorator); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.True(decorator.IsPointerOver); + Assert.True(border.IsPointerOver); + Assert.False(canvas.IsPointerOver); + Assert.True(root.IsPointerOver); + + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.False(decorator.IsPointerOver); + Assert.False(border.IsPointerOver); + Assert.True(canvas.IsPointerOver); + Assert.True(root.IsPointerOver); + } + + + [Fact] + public void TouchMove_Should_Not_Set_IsPointerOver() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var device = CreatePointerDeviceMock(pointerType: PointerType.Touch).Object; + var impl = CreateTopLevelImplMock(renderer.Object); + + Canvas canvas; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()) + } + }); + + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.False(canvas.IsPointerOver); + Assert.False(root.IsPointerOver); + } + + [Fact] + public void HitTest_Should_Be_Ignored_If_Element_Captured() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var pointer = new Mock(); + var device = CreatePointerDeviceMock(pointer.Object).Object; + var impl = CreateTopLevelImplMock(renderer.Object); + + Canvas canvas; + Border border; + Decorator decorator; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()), + (border = new Border + { + Child = decorator = new Decorator(), + }) + } + }); + + SetHit(renderer, canvas); + pointer.SetupGet(p => p.Captured).Returns(decorator); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.True(decorator.IsPointerOver); + Assert.True(border.IsPointerOver); + Assert.False(canvas.IsPointerOver); + Assert.True(root.IsPointerOver); + } + + [Fact] + public void IsPointerOver_Should_Be_Updated_When_Child_Sets_Handled_True() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var device = CreatePointerDeviceMock().Object; + var impl = CreateTopLevelImplMock(renderer.Object); + + Canvas canvas; + Border border; + Decorator decorator; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()), + (border = new Border + { + Child = decorator = new Decorator(), + }) + } + }); + + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.False(decorator.IsPointerOver); + Assert.False(border.IsPointerOver); + Assert.True(canvas.IsPointerOver); + Assert.True(root.IsPointerOver); + + // Ensure that e.Handled is reset between controls. + root.PointerMoved += (s, e) => e.Handled = true; + decorator.PointerEnter += (s, e) => e.Handled = true; + + SetHit(renderer, decorator); + impl.Object.Input!(CreateRawPointerMovedArgs(device, root)); + + Assert.True(decorator.IsPointerOver); + Assert.True(border.IsPointerOver); + Assert.False(canvas.IsPointerOver); + Assert.True(root.IsPointerOver); + } + + [Fact] + public void Pointer_Enter_Move_Leave_Should_Be_Followed() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var deviceMock = CreatePointerDeviceMock(); + var impl = CreateTopLevelImplMock(renderer.Object); + var result = new List<(object?, string)>(); + + void HandleEvent(object? sender, PointerEventArgs e) + { + result.Add((sender, e.RoutedEvent!.Name)); + } + + Canvas canvas; + Border border; + Decorator decorator; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()), + (border = new Border + { + Child = decorator = new Decorator(), + }) + } + }); + + AddEnterLeaveHandlers(HandleEvent, canvas, decorator); + + // Enter decorator + SetHit(renderer, decorator); + SetMove(deviceMock, root, decorator); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root)); + + // Leave decorator + SetHit(renderer, canvas); + SetMove(deviceMock, root, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root)); + + Assert.Equal( + new[] + { + ((object?)decorator, "PointerEnter"), + (decorator, "PointerMove"), + (decorator, "PointerLeave"), + (canvas, "PointerEnter"), + (canvas, "PointerMove") + }, + result); + } + + [Fact] + public void PointerEnter_Leave_Should_Be_Raised_In_Correct_Order() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var deviceMock = CreatePointerDeviceMock(); + var impl = CreateTopLevelImplMock(renderer.Object); + var result = new List<(object?, string)>(); + + void HandleEvent(object? sender, PointerEventArgs e) + { + result.Add((sender, e.RoutedEvent!.Name)); + } + + Canvas canvas; + Border border; + Decorator decorator; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()), + (border = new Border + { + Child = decorator = new Decorator(), + }) + } + }); + + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root)); + + AddEnterLeaveHandlers(HandleEvent, root, canvas, border, decorator); + + SetHit(renderer, decorator); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root)); + + Assert.Equal( + new[] + { + ((object?)canvas, "PointerLeave"), + (decorator, "PointerEnter"), + (border, "PointerEnter"), + }, + result); + } + + // https://github.com/AvaloniaUI/Avalonia/issues/7896 + [Fact] + public void PointerEnter_Leave_Should_Set_Correct_Position() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var expectedPosition = new Point(15, 15); + var renderer = new Mock(); + var deviceMock = CreatePointerDeviceMock(); + var impl = CreateTopLevelImplMock(renderer.Object); + var result = new List<(object?, string, Point)>(); + + void HandleEvent(object? sender, PointerEventArgs e) + { + result.Add((sender, e.RoutedEvent!.Name, e.GetPosition(null))); + } + + Canvas canvas; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()) + } + }); + + AddEnterLeaveHandlers(HandleEvent, root, canvas); + + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root, expectedPosition)); + + SetHit(renderer, null); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root, expectedPosition)); + + Assert.Equal( + new[] + { + ((object?)canvas, "PointerEnter", expectedPosition), + (root, "PointerEnter", expectedPosition), + (canvas, "PointerLeave", expectedPosition), + (root, "PointerLeave", expectedPosition) + }, + result); + } + + [Fact] + public void Render_Invalidation_Should_Affect_PointerOver() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var deviceMock = CreatePointerDeviceMock(); + var impl = CreateTopLevelImplMock(renderer.Object); + + var invalidateRect = new Rect(0, 0, 15, 15); + + Canvas canvas; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()) + } + }); + + // Let input know about latest device. + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root)); + Assert.True(canvas.IsPointerOver); + + SetHit(renderer, canvas); + renderer.Raise(r => r.SceneInvalidated += null, new SceneInvalidatedEventArgs((IRenderRoot)root, invalidateRect)); + Assert.True(canvas.IsPointerOver); + + // Raise SceneInvalidated again, but now hide element from the hittest. + SetHit(renderer, null); + renderer.Raise(r => r.SceneInvalidated += null, new SceneInvalidatedEventArgs((IRenderRoot)root, invalidateRect)); + Assert.False(canvas.IsPointerOver); + } + + // https://github.com/AvaloniaUI/Avalonia/issues/7748 + [Fact] + public void LeaveWindow_Should_Reset_PointerOver() + { + using var app = UnitTestApplication.Start(new TestServices(inputManager: new InputManager())); + + var renderer = new Mock(); + var deviceMock = CreatePointerDeviceMock(); + var impl = CreateTopLevelImplMock(renderer.Object); + + var lastClientPosition = new Point(1, 5); + var invalidateRect = new Rect(0, 0, 15, 15); + var result = new List<(object?, string, Point)>(); + + void HandleEvent(object? sender, PointerEventArgs e) + { + result.Add((sender, e.RoutedEvent!.Name, e.GetPosition(null))); + } + + Canvas canvas; + + var root = CreateInputRoot(impl.Object, new Panel + { + Children = + { + (canvas = new Canvas()) + } + }); + + AddEnterLeaveHandlers(HandleEvent, root, canvas); + + // Init pointer over. + SetHit(renderer, canvas); + impl.Object.Input!(CreateRawPointerMovedArgs(deviceMock.Object, root, lastClientPosition)); + Assert.True(canvas.IsPointerOver); + + // Send LeaveWindow. + impl.Object.Input!(new RawPointerEventArgs(deviceMock.Object, 0, root, RawPointerEventType.LeaveWindow, new Point(), default)); + Assert.False(canvas.IsPointerOver); + + Assert.Equal( + new[] + { + ((object?)canvas, "PointerEnter", lastClientPosition), + (root, "PointerEnter", lastClientPosition), + (canvas, "PointerLeave", lastClientPosition), + (root, "PointerLeave", lastClientPosition), + }, + result); + } + + private static void AddEnterLeaveHandlers( + EventHandler handler, + params IInputElement[] controls) + { + foreach (var c in controls) + { + c.PointerEnter += handler; + c.PointerLeave += handler; + c.PointerMoved += handler; + } + } + + private static void SetHit(Mock renderer, IControl? hit) + { + renderer.Setup(x => x.HitTest(It.IsAny(), It.IsAny(), It.IsAny>())) + .Returns(hit is null ? Array.Empty() : new[] { hit }); + + renderer.Setup(x => x.HitTestFirst(It.IsAny(), It.IsAny(), It.IsAny>())) + .Returns(hit); + } + + private static void SetMove(Mock deviceMock, IInputRoot root, IInputElement element) + { + deviceMock.Setup(d => d.ProcessRawEvent(It.IsAny())) + .Callback(() => element.RaiseEvent(CreatePointerMovedArgs(root, element))); + } + + private static Mock CreateTopLevelImplMock(IRenderer renderer) + { + var impl = new Mock(); + impl.DefaultValue = DefaultValue.Mock; + impl.SetupAllProperties(); + impl.SetupGet(r => r.RenderScaling).Returns(1); + impl.Setup(r => r.CreateRenderer(It.IsAny())).Returns(renderer); + impl.Setup(r => r.PointToScreen(It.IsAny())).Returns(p => new PixelPoint((int)p.X, (int)p.Y)); + impl.Setup(r => r.PointToClient(It.IsAny())).Returns(p => new Point(p.X, p.Y)); + return impl; + } + + private static IInputRoot CreateInputRoot(IWindowImpl impl, IControl child) + { + var root = new Window(impl) + { + Width = 100, + Height = 100, + Content = child, + Template = new FuncControlTemplate((w, _) => new ContentPresenter + { + Content = w.Content + }) + }; + root.Show(); + return root; + } + + private static IInputRoot CreateInputRoot(IRenderer renderer, IControl child) + { + return CreateInputRoot(CreateTopLevelImplMock(renderer).Object, child); + } + + private static RawPointerEventArgs CreateRawPointerMovedArgs( + IPointerDevice pointerDevice, + IInputRoot root, + Point? positition = null) + { + return new RawPointerEventArgs(pointerDevice, 0, root, RawPointerEventType.Move, + positition ?? default, default); + } + + private static PointerEventArgs CreatePointerMovedArgs( + IInputRoot root, IInputElement? source, Point? positition = null) + { + return new PointerEventArgs(InputElement.PointerMovedEvent, source, new Mock().Object, root, + positition ?? default, default, PointerPointProperties.None, KeyModifiers.None); + } + + private static Mock CreatePointerDeviceMock( + IPointer? pointer = null, + PointerType pointerType = PointerType.Mouse) + { + if (pointer is null) + { + var pointerMock = new Mock(); + pointerMock.SetupGet(p => p.Type).Returns(pointerType); + pointer = pointerMock.Object; + } + + var pointerDevice = new Mock(); + pointerDevice.Setup(d => d.TryGetPointer(It.IsAny())) + .Returns(pointer); + + return pointerDevice; + } + } +} From 45916251515cbe354833366fb91c43decf1541c6 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 14 Apr 2022 11:47:38 -0400 Subject: [PATCH 39/67] Api compat --- src/Avalonia.Input/ApiCompatBaseline.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Avalonia.Input/ApiCompatBaseline.txt b/src/Avalonia.Input/ApiCompatBaseline.txt index 93c4cba5a6..6e68e7aed9 100644 --- a/src/Avalonia.Input/ApiCompatBaseline.txt +++ b/src/Avalonia.Input/ApiCompatBaseline.txt @@ -14,6 +14,7 @@ MembersMustExist : Member 'public void Avalonia.Input.InputElement.add_TextInput MembersMustExist : Member 'public void Avalonia.Input.InputElement.remove_DoubleTapped(System.EventHandler)' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'public void Avalonia.Input.InputElement.remove_Tapped(System.EventHandler)' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'public void Avalonia.Input.InputElement.remove_TextInputOptionsQuery(System.EventHandler)' does not exist in the implementation but it does exist in the contract. +InterfacesShouldHaveSameMembers : Interface member 'public Avalonia.Input.IPointer Avalonia.Input.IPointerDevice.TryGetPointer(Avalonia.Input.Raw.RawPointerEventArgs)' is present in the implementation but not in the contract. InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetActive(System.Boolean)' is present in the contract but not in the implementation. MembersMustExist : Member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetActive(System.Boolean)' does not exist in the implementation but it does exist in the contract. InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetClient(Avalonia.Input.TextInput.ITextInputMethodClient)' is present in the implementation but not in the contract. From 3c8cc3610f5559f8b8f2610faf8ca8ab0fdb3cb6 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 14 Apr 2022 11:47:56 -0400 Subject: [PATCH 40/67] Use InputHitTest instead of GetInputElementsAt+Linq in dev tools --- .../Diagnostics/ViewModels/MainViewModel.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs index e08c5bc8dd..d92bbb742b 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs @@ -7,7 +7,6 @@ using Avalonia.Diagnostics.Models; using Avalonia.Input; using Avalonia.Metadata; using Avalonia.Threading; -using System.Reactive.Linq; using System.Linq; namespace Avalonia.Diagnostics.ViewModels @@ -59,8 +58,8 @@ namespace Avalonia.Diagnostics.ViewModels .Subscribe(e => { PointerOverRoot = e.Root; - PointerOverElement = e.Root.GetInputElementsAt(e.Position).FirstOrDefault(); - }); + PointerOverElement = e.Root.InputHitTest(e.Position); + }); #nullable restore } Console = new ConsoleViewModel(UpdateConsoleContext); From 0bb22cff12d804b5a7993ea2e9ef6f0876060b3b Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 01:07:11 +0800 Subject: [PATCH 41/67] SubtypesFactory generator --- Avalonia.sln | 29 ++- build/SourceGenerators.props | 6 + src/Avalonia.Base/Animation/Easings/Easing.cs | 35 ++-- src/Avalonia.Base/Avalonia.Base.csproj | 1 + src/Avalonia.Base/Input/KeyGesture.cs | 8 + .../Remote/HtmlTransport/HtmlTransport.cs | 8 + .../Avalonia.SourceGenerator.csproj | 17 ++ .../SubtypesFactoryGenerator.cs | 167 ++++++++++++++++++ src/Shared/SourceGeneratorAttributes.cs | 17 ++ 9 files changed, 265 insertions(+), 23 deletions(-) create mode 100644 build/SourceGenerators.props create mode 100644 src/Avalonia.SourceGenerator/Avalonia.SourceGenerator.csproj create mode 100644 src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs create mode 100644 src/Shared/SourceGeneratorAttributes.cs diff --git a/Avalonia.sln b/Avalonia.sln index a216229a5b..39788160b2 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -39,6 +39,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A689DE ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig src\Shared\ModuleInitializer.cs = src\Shared\ModuleInitializer.cs + src\Shared\RawEventGrouping.cs = src\Shared\RawEventGrouping.cs + src\Shared\SourceGeneratorAttributes.cs = src\Shared\SourceGeneratorAttributes.cs EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.ReactiveUI", "src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj", "{6417B24E-49C2-4985-8DB2-3AB9D898EC91}" @@ -209,10 +211,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlSamples", "samples\S EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.PlatformSupport", "src\Avalonia.PlatformSupport\Avalonia.PlatformSupport.csproj", "{E8A597F0-2AB5-4BDA-A235-41162DAF53CF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{70B9F5CC-E2F9-4314-9514-EDE762ACCC4B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{70B9F5CC-E2F9-4314-9514-EDE762ACCC4B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.PlatformSupport.UnitTests", "tests\Avalonia.PlatformSupport.UnitTests\Avalonia.PlatformSupport.UnitTests.csproj", "{CE910927-CE5A-456F-BC92-E4C757354A5C}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.SourceGenerator", "src\Avalonia.SourceGenerator\Avalonia.SourceGenerator.csproj", "{CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevAnalyzers", "src\tools\DevAnalyzers\DevAnalyzers.csproj", "{2B390431-288C-435C-BB6B-A374033BD8D1}" EndProject Global @@ -1929,6 +1932,30 @@ Global {CE910927-CE5A-456F-BC92-E4C757354A5C}.Release|iPhone.Build.0 = Release|Any CPU {CE910927-CE5A-456F-BC92-E4C757354A5C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {CE910927-CE5A-456F-BC92-E4C757354A5C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.AppStore|iPhone.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Debug|iPhone.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Release|Any CPU.Build.0 = Release|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Release|iPhone.ActiveCfg = Release|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Release|iPhone.Build.0 = Release|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {2B390431-288C-435C-BB6B-A374033BD8D1}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU {2B390431-288C-435C-BB6B-A374033BD8D1}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {2B390431-288C-435C-BB6B-A374033BD8D1}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU diff --git a/build/SourceGenerators.props b/build/SourceGenerators.props new file mode 100644 index 0000000000..f9eab24d08 --- /dev/null +++ b/build/SourceGenerators.props @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/Avalonia.Base/Animation/Easings/Easing.cs b/src/Avalonia.Base/Animation/Easings/Easing.cs index c721772f3e..6dfc4c86b3 100644 --- a/src/Avalonia.Base/Animation/Easings/Easing.cs +++ b/src/Avalonia.Base/Animation/Easings/Easing.cs @@ -1,8 +1,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Globalization; -using System.Linq; +using Avalonia.SourceGenerator; namespace Avalonia.Animation.Easings { @@ -10,14 +11,15 @@ namespace Avalonia.Animation.Easings /// Base class for all Easing classes. /// [TypeConverter(typeof(EasingTypeConverter))] - public abstract class Easing : IEasing + public abstract partial class Easing : IEasing { /// public abstract double Ease(double progress); - static Dictionary? _easingTypes; + private const string Namespace = "Avalonia.Animation.Easings"; - static readonly Type s_thisType = typeof(Easing); + [SubtypesFactory(typeof(Easing), Namespace)] + private static partial bool TryCreateEasingInstance(string type, [NotNullWhen(true)] out Easing? instance); /// /// Parses a Easing type string. @@ -26,33 +28,22 @@ namespace Avalonia.Animation.Easings /// Returns the instance of the parsed type. public static Easing Parse(string e) { +#if NETSTANDARD2_0 + if (e.Contains(",")) +#else if (e.Contains(',')) +#endif { return new SplineEasing(KeySpline.Parse(e, CultureInfo.InvariantCulture)); } - if (_easingTypes == null) + if (TryCreateEasingInstance(e, out var easing)) { - _easingTypes = new Dictionary(); - - // Fetch the built-in easings. - var derivedTypes = typeof(Easing).Assembly.GetTypes() - .Where(p => p.Namespace == s_thisType.Namespace) - .Where(p => p.IsSubclassOf(s_thisType)) - .Select(p => p); - - foreach (var easingType in derivedTypes) - _easingTypes.Add(easingType.Name, easingType); - } - - if (_easingTypes.ContainsKey(e)) - { - var type = _easingTypes[e]; - return (Easing)Activator.CreateInstance(type)!; + return easing; } else { - throw new FormatException($"Easing \"{e}\" was not found in {s_thisType.Namespace} namespace."); + throw new FormatException($"Easing \"{e}\" was not found in {Namespace} namespace."); } } } diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 5b79d3cd7b..8e4755b4b7 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -16,4 +16,5 @@ + diff --git a/src/Avalonia.Base/Input/KeyGesture.cs b/src/Avalonia.Base/Input/KeyGesture.cs index 0adbe73263..6f302a3ae7 100644 --- a/src/Avalonia.Base/Input/KeyGesture.cs +++ b/src/Avalonia.Base/Input/KeyGesture.cs @@ -155,7 +155,11 @@ namespace Avalonia.Input if (s_keySynonyms.TryGetValue(key.ToLower(), out Key rv)) return rv; +#if NETSTANDARD2_0 return (Key)Enum.Parse(typeof(Key), key, true); +#else + return Enum.Parse(key, true); +#endif } private static KeyModifiers ParseModifier(ReadOnlySpan modifier) @@ -172,7 +176,11 @@ namespace Avalonia.Input return KeyModifiers.Meta; } +#if NETSTANDARD2_0 return (KeyModifiers)Enum.Parse(typeof(KeyModifiers), modifier.ToString(), true); +#else + return Enum.Parse(modifier.ToString(), true); +#endif } private Key ResolveNumPadOperationKey(Key key) diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs index 6b1934ed06..7965e5d0d8 100644 --- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs +++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs @@ -320,15 +320,23 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport ? null : modifiersText .Split(',') +#if NETSTANDARD2_0 .Select(x => (InputProtocol.InputModifiers)Enum.Parse( typeof(InputProtocol.InputModifiers), x, true)) +#else + .Select(x => Enum.Parse(x, true)) +#endif .ToArray(); private static InputProtocol.MouseButton ParseMouseButton(string buttonText) => string.IsNullOrWhiteSpace(buttonText) ? InputProtocol.MouseButton.None +#if NETSTANDARD2_0 : (InputProtocol.MouseButton)Enum.Parse( typeof(InputProtocol.MouseButton), buttonText, true); +#else + : Enum.Parse(buttonText, true); +#endif private static double ParseDouble(string text) => double.Parse(text, NumberStyles.Float, CultureInfo.InvariantCulture); diff --git a/src/Avalonia.SourceGenerator/Avalonia.SourceGenerator.csproj b/src/Avalonia.SourceGenerator/Avalonia.SourceGenerator.csproj new file mode 100644 index 0000000000..97e58f8a64 --- /dev/null +++ b/src/Avalonia.SourceGenerator/Avalonia.SourceGenerator.csproj @@ -0,0 +1,17 @@ + + + + netstandard2.0 + enable + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + diff --git a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs new file mode 100644 index 0000000000..7bc240853e --- /dev/null +++ b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs @@ -0,0 +1,167 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Avalonia.SourceGenerator +{ + internal class GenerateSubtypesSyntaxReceiver : ISyntaxReceiver + { + public List<(MethodDeclarationSyntax, AttributeSyntax)> CandidateMethods { get; } = new(); + public List Types { get; } = new(); + + public void OnVisitSyntaxNode(SyntaxNode syntaxNode) + { + if (syntaxNode is MethodDeclarationSyntax declarationSyntax) + { + foreach (var attribute in declarationSyntax.AttributeLists.SelectMany(i => i.Attributes)) + { + CandidateMethods.Add((declarationSyntax, attribute)); + } + } + + if (syntaxNode is ClassDeclarationSyntax or StructDeclarationSyntax) + { + Types.Add(syntaxNode); + } + } + } + + [Generator] + internal class SubtypesFactoryGenerator : ISourceGenerator + { + private readonly GenerateSubtypesSyntaxReceiver _receiver = new(); + private static readonly string s_attributeName = typeof(SubtypesFactoryAttribute).FullName; + + public void Execute(GeneratorExecutionContext context) + { + var methods = new List<(IMethodSymbol, ITypeSymbol, string)>(); + + foreach (var (method, attribute) in _receiver.CandidateMethods) + { + var semanticModel = context.Compilation.GetSemanticModel(method.SyntaxTree); + var attributeTypeInfo = semanticModel.GetTypeInfo(attribute); + if (attributeTypeInfo.Type is null || + attributeTypeInfo.Type.ToString() != s_attributeName || + attribute.ArgumentList is null) + { + continue; + } + + var arguments = attribute.ArgumentList.Arguments; + if (arguments.Count != 2) + { + continue; + } + + if (arguments[0].Expression is not TypeOfExpressionSyntax typeOfExpr || + arguments[1].Expression is not LiteralExpressionSyntax and not IdentifierNameSyntax) + { + continue; + } + + var type = semanticModel.GetTypeInfo(typeOfExpr.Type); + var ns = semanticModel.GetConstantValue(arguments[1].Expression); + var methodDeclInfo = semanticModel.GetDeclaredSymbol(method); + + if (type.Type is not ITypeSymbol baseType || + ns.HasValue is false || + ns.Value is not string nsValue || + methodDeclInfo is not IMethodSymbol methodSymbol || + methodSymbol.Parameters.Length != 2 || + methodSymbol.Parameters[1].RefKind != RefKind.Out) + { + continue; + } + + methods.Add((methodSymbol, baseType, nsValue)); + } + + var types = new List(); + foreach (var type in _receiver.Types) + { + var semanticModel = context.Compilation.GetSemanticModel(type.SyntaxTree); + var decl = semanticModel.GetDeclaredSymbol(type); + if (decl is ITypeSymbol typeSymbol) + { + types.Add(typeSymbol); + } + } + + GenerateSubTypes(context, methods, types); + } + + private bool IsSubtypeOf(ITypeSymbol type, ITypeSymbol baseType) + { + if (type.BaseType is null) + { + return false; + } + + if (SymbolEqualityComparer.Default.Equals(type.BaseType, baseType)) + { + return true; + } + + return IsSubtypeOf(type.BaseType, baseType); + } + + private void GenerateSubTypes( + GeneratorExecutionContext context, + List<(IMethodSymbol Method, ITypeSymbol BaseType, string Namespace)> methods, + List types) + { + foreach (var (method, baseType, @namespace) in methods) + { + var candidateTypes = types.Where(i => IsSubtypeOf(i, baseType)).Where(i => $"{i.ContainingNamespace}.".StartsWith($"{@namespace}.")).ToArray(); + var type = method.ContainingType; + var isGeneric = type.TypeParameters.Length > 0; + var isClass = type.TypeKind == TypeKind.Class; + + if (method.DeclaringSyntaxReferences.FirstOrDefault()?.GetSyntax() is not MethodDeclarationSyntax methodDecl) + { + continue; + } + + var parameters = new SeparatedSyntaxList().AddRange(methodDecl.ParameterList.Parameters.Select(i => i.WithAttributeLists(new SyntaxList()))); + + var methodDeclText = methodDecl + .WithAttributeLists(new SyntaxList()) + .WithParameterList(methodDecl.ParameterList.WithParameters(parameters)) + .WithBody(null) + .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None)) + .WithoutTrivia().ToString(); + + var typeDecl = $"partial {(isClass ? "class" : "struct")} {type.Name}{(isGeneric ? $"<{string.Join(", ", type.TypeParameters)}>" : "")}"; + var source = $@"using System; +using System.Collections.Generic; + +namespace {method.ContainingNamespace} +{{ + {typeDecl} + {{ + {methodDeclText} + {{ + var hasMatch = false; + (hasMatch, {method.Parameters[1].Name}) = {method.Parameters[0].Name} switch + {{ +{string.Join("\n", candidateTypes.Select(i => $" \"{i.Name}\" => (true, ({method.Parameters[1].Type})new {i}()),"))} + _ => (false, default({method.Parameters[1].Type})) + }}; + + return hasMatch; + }} + }} +}}"; + + context.AddSource($"{type}.{method.MetadataName}.gen.cs", source); + } + } + + public void Initialize(GeneratorInitializationContext context) + { + context.RegisterForSyntaxNotifications(() => _receiver); + } + } +} diff --git a/src/Shared/SourceGeneratorAttributes.cs b/src/Shared/SourceGeneratorAttributes.cs new file mode 100644 index 0000000000..fdb5977d23 --- /dev/null +++ b/src/Shared/SourceGeneratorAttributes.cs @@ -0,0 +1,17 @@ +using System; + +namespace Avalonia.SourceGenerator +{ + [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)] + internal sealed class SubtypesFactoryAttribute : Attribute + { + public SubtypesFactoryAttribute(Type baseType, string @namespace) + { + BaseType = baseType; + Namespace = @namespace; + } + + public string Namespace { get; } + public Type BaseType { get; } + } +} From e6044ea33069d994b65aa05aad7c775e7686d8d9 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 14 Apr 2022 23:49:52 +0200 Subject: [PATCH 42/67] Remove Avalonia.AndroidTestApplication. It's no longer needed. --- Avalonia.sln | 21 +--- .../Avalonia.AndroidTestApplication.csproj | 79 ------------- .../MainActivity.cs | 104 ------------------ .../Properties/AndroidManifest.xml | 4 - .../Resources/AboutResources.txt | 50 --------- .../Resources/drawable/Icon.png | Bin 4147 -> 0 bytes .../Resources/values/Strings.xml | 6 - 7 files changed, 1 insertion(+), 263 deletions(-) delete mode 100644 src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj delete mode 100644 src/Android/Avalonia.AndroidTestApplication/MainActivity.cs delete mode 100644 src/Android/Avalonia.AndroidTestApplication/Properties/AndroidManifest.xml delete mode 100644 src/Android/Avalonia.AndroidTestApplication/Resources/AboutResources.txt delete mode 100644 src/Android/Avalonia.AndroidTestApplication/Resources/drawable/Icon.png delete mode 100644 src/Android/Avalonia.AndroidTestApplication/Resources/values/Strings.xml diff --git a/Avalonia.sln b/Avalonia.sln index a216229a5b..64ed214e1f 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -55,8 +55,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Android", "Android", "{7CF9 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Android", "src\Android\Avalonia.Android\Avalonia.Android.csproj", "{7B92AF71-6287-4693-9DCB-BD5B6E927E23}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.AndroidTestApplication", "src\Android\Avalonia.AndroidTestApplication\Avalonia.AndroidTestApplication.csproj", "{FF69B927-C545-49AE-8E16-3D14D621AA12}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "iOS", "iOS", "{0CB0B92E-6CFF-4240-80A5-CCAFE75D91E1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.iOS", "src\iOS\Avalonia.iOS\Avalonia.iOS.csproj", "{4488AD85-1495-4809-9AA4-DDFE0A48527E}" @@ -209,7 +207,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlSamples", "samples\S EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.PlatformSupport", "src\Avalonia.PlatformSupport\Avalonia.PlatformSupport.csproj", "{E8A597F0-2AB5-4BDA-A235-41162DAF53CF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{70B9F5CC-E2F9-4314-9514-EDE762ACCC4B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{70B9F5CC-E2F9-4314-9514-EDE762ACCC4B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.PlatformSupport.UnitTests", "tests\Avalonia.PlatformSupport.UnitTests\Avalonia.PlatformSupport.UnitTests.csproj", "{CE910927-CE5A-456F-BC92-E4C757354A5C}" EndProject @@ -629,22 +627,6 @@ Global {7B92AF71-6287-4693-9DCB-BD5B6E927E23}.Release|Any CPU.Build.0 = Release|Any CPU {7B92AF71-6287-4693-9DCB-BD5B6E927E23}.Release|iPhone.ActiveCfg = Release|Any CPU {7B92AF71-6287-4693-9DCB-BD5B6E927E23}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Release|Any CPU.Build.0 = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Release|Any CPU.Deploy.0 = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Release|iPhone.ActiveCfg = Release|Any CPU - {FF69B927-C545-49AE-8E16-3D14D621AA12}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {4488AD85-1495-4809-9AA4-DDFE0A48527E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU {4488AD85-1495-4809-9AA4-DDFE0A48527E}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU {4488AD85-1495-4809-9AA4-DDFE0A48527E}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU @@ -1970,7 +1952,6 @@ Global {8EF392D5-1416-45AA-9956-7CBBC3229E8A} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {08B3E6B9-1CD5-443C-9F61-6D49D1C5F162} = {9B9E3891-2366-4253-A952-D08BCEB71098} {7B92AF71-6287-4693-9DCB-BD5B6E927E23} = {7CF9789C-F1D3-4D0E-90E5-F1DF67A2753F} - {FF69B927-C545-49AE-8E16-3D14D621AA12} = {7CF9789C-F1D3-4D0E-90E5-F1DF67A2753F} {4488AD85-1495-4809-9AA4-DDFE0A48527E} = {0CB0B92E-6CFF-4240-80A5-CCAFE75D91E1} {E1AA3DBF-9056-4530-9376-18119A7A3FFE} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {88060192-33D5-4932-B0F9-8BD2763E857D} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj deleted file mode 100644 index ee41b9f354..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj +++ /dev/null @@ -1,79 +0,0 @@ - - - net6.0-android - 21 - Exe - enable - com.Avalonia.AndroidTestApplication - 1 - 1.0 - apk - true - portable - - - - - Resources\drawable\Icon.png - - - - - True - True - True - True - - - - - - - True - - - - True - - - - - - - - - {7b92af71-6287-4693-9dcb-bd5b6e927e23} - Avalonia.Android - - - {3e53a01a-b331-47f3-b828-4a5717e77a24} - Avalonia.Markup.Xaml - - - {b09b78d8-9b26-48b0-9149-d64a2f120f3f} - Avalonia.Base - - - {d2221c82-4a25-4583-9b43-d791e3f6820c} - Avalonia.Controls - - - {7062ae20-5dcc-4442-9645-8195bdece63e} - Avalonia.Diagnostics - - - {3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f} - Avalonia.Themes.Default - - - {7d2d3083-71dd-4cc9-8907-39a0d86fb322} - Avalonia.Skia - - - - - - - - - diff --git a/src/Android/Avalonia.AndroidTestApplication/MainActivity.cs b/src/Android/Avalonia.AndroidTestApplication/MainActivity.cs deleted file mode 100644 index 8f4beb2737..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/MainActivity.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using Android.App; -using Android.Content.PM; -using Avalonia.Android; -using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Input.TextInput; -using Avalonia.Markup.Xaml; -using Avalonia.Media; -using Avalonia.Styling; -using Avalonia.Themes.Default; - -namespace Avalonia.AndroidTestApplication -{ - [Activity(Label = "Main", - MainLauncher = true, - Icon = "@drawable/icon", - Theme = "@style/Theme.AppCompat.NoActionBar", - ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, - LaunchMode = LaunchMode.SingleInstance/*, - ScreenOrientation = ScreenOrientation.Landscape*/)] - public class MainActivity : AvaloniaActivity - { - protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) - { - return base.CustomizeAppBuilder(builder); - } - } - - public class App : Application - { - public override void Initialize() - { - Styles.Add(new SimpleTheme(new Uri("avares://Avalonia.AndroidTestApplication"))); - } - - public override void OnFrameworkInitializationCompleted() - { - if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewLifetime) - { - singleViewLifetime.MainView = CreateSimpleWindow(); - } - - base.OnFrameworkInitializationCompleted(); - } - - // This provides a simple UI tree for testing input handling, drawing, etc - public static ContentControl CreateSimpleWindow() - { - ContentControl window = new ContentControl() - { - Background = Brushes.Red, - Content = new StackPanel - { - Margin = new Thickness(30), - Background = Brushes.Yellow, - Children = - { - new TextBlock - { - Text = "TEXT BLOCK", - Width = 300, - Height = 40, - Background = Brushes.White, - Foreground = Brushes.Black - }, - - new Button - { - Content = "BUTTON", - Width = 150, - Height = 40, - Background = Brushes.LightGreen, - Foreground = Brushes.Black - }, - - CreateTextBox(TextInputContentType.Normal), - CreateTextBox(TextInputContentType.Password), - CreateTextBox(TextInputContentType.Email), - CreateTextBox(TextInputContentType.Url), - CreateTextBox(TextInputContentType.Digits), - CreateTextBox(TextInputContentType.Number), - } - } - }; - - return window; - } - - private static TextBox CreateTextBox(TextInputContentType contentType) - { - var textBox = new TextBox() - { - Margin = new Thickness(20, 10), - Watermark = contentType.ToString(), - BorderThickness = new Thickness(3), - FontSize = 20, - [TextInputOptions.ContentTypeProperty] = contentType - }; - - return textBox; - } - } -} diff --git a/src/Android/Avalonia.AndroidTestApplication/Properties/AndroidManifest.xml b/src/Android/Avalonia.AndroidTestApplication/Properties/AndroidManifest.xml deleted file mode 100644 index ad8134f628..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/Properties/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/Android/Avalonia.AndroidTestApplication/Resources/AboutResources.txt b/src/Android/Avalonia.AndroidTestApplication/Resources/AboutResources.txt deleted file mode 100644 index 194ae28a59..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/Resources/AboutResources.txt +++ /dev/null @@ -1,50 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.xml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable-hdpi/ - icon.png - - drawable-ldpi/ - icon.png - - drawable-mdpi/ - icon.png - - layout/ - main.xml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called -"Resource" that contains the tokens for each one of the resources included. For example, -for the above Resources layout, this is what the Resource class would expose: - -public class Resource { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main -to reference the layout/main.xml file, or Resource.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/src/Android/Avalonia.AndroidTestApplication/Resources/drawable/Icon.png b/src/Android/Avalonia.AndroidTestApplication/Resources/drawable/Icon.png deleted file mode 100644 index 8074c4c571b8cd19e27f4ee5545df367420686d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4147 zcmV-35X|q1P)OwvMs$Q8_8nISM!^>PxsujeDCl4&hPxrxkp%Qc^^|l zp6LqAcf3zf1H4aA1Gv-O6ha)ktct9Y+VA@N^9i;p0H%6v>ZJZYQ`zEa396z-gi{r_ zDz)D=vgRv62GCVeRjK{15j7V@v6|2nafFX6W7z2j1_T0a zLyT3pGTubf1lB5)32>bl0*BflrA!$|_(WD2)iJIfV}37=ZKAC zSe3boYtQ=;o0i>)RtBvsI#iT{0!oF1VFeW`jDjF2Q4aE?{pGCAd>o8Kg#neIh*AMY zLl{;F!vLiem7s*x0<9FKAd6LoPz3~G32P+F+cuGOJ5gcC@pU_?C2fmix7g2)SUaQO$NS07~H)#fn!Q<}KQWtX}wW`g2>cMld+`7Rxgq zChaey66SG560JhO66zA!;sK1cWa2AG$9k~VQY??6bOmJsw9@3uL*z;WWa7(Nm{^TA zilc?y#N9O3LcTo2c)6d}SQl-v-pE4^#wb=s(RxaE28f3FQW(yp$ulG9{KcQ7r>7mQ zE!HYxUYex~*7IinL+l*>HR*UaD;HkQhkL(5I@UwN%Wz504M^d!ylo>ANvKPF_TvA< zkugG5;F6x}$s~J8cnev->_(Ic7%lGQgUi3n#XVo36lUpcS9s z)ympRr7}@|6WF)Ae;D{owN1;aZSR50al9h~?-WhbtKK%bDd zhML131oi1Bu1&Qb$Cp199LJ#;j5d|FhW8_i4KO1OI>}J^p2DfreMSVGY9aFlr&90t zyI2FvxQiKMFviSQeP$Ixh#70qj5O%I+O_I2t2XHWqmh2!1~tHpN3kA4n=1iHj?`@c<~3q^X6_Q$AqTDjBU`|!y<&lkqL|m5tG(b z8a!z&j^m(|;?SW(l*?tZ*{m2H9d&3jqBtXh>O-5e4Qp-W*a5=2NL&Oi62BUM)>zE3 zbSHb>aU3d@3cGggA`C-PsT9^)oy}%dHCaO~nwOrm5E54=aDg(&HR4S23Oa#-a^=}w%g?ZP-1iq8PSjE8jYaGZu z$I)?YN8he?F9>)2d$G6a*zm0XB*Rf&gZAjq(8l@CUDSY1tB#!i> zW$VfG%#SYSiZ};)>pHA`qlfDTEYQEwN6>NNEp+uxuqx({Fgr zjI@!4xRc?vk^9+~eU|mzH__dCDI=xb{Cd}4bELS9xRaS!*FXMwtMR-RR%SLMh0Cjl zencr8#Su<4(%}$yGVBU-HX{18v=yPH*+%^Vtknc>2A;%-~DrYFx^3XfuVgvZ{#1tA== zm3>IzAM2{3Iv_d1XG{P6^tN3|PkJMnjs&CWN7%7_CmjoVakUhsa&dMv==2~^ri?&x zVdv*rnfVyM+I1^Kg*S=23mR@+0T9BWFZUu~@toA8d)fw6be=`Yb6DSX6D?jB%2YT~ z*aHjtIOozfMhA!Jd*?u5_n!SnX>vX`=Ti-1HA4RiE>eI3vTn zz+>Ccf0HX6Ans-ebOB>RJST-Cyr#4XAk+mAlJgdQnoE{^iIN)OcYFSpgJUmXtl@tT z-^ZuUeSj5hSFrQwqX>~EtZ*{>Gi8Bu9_|o06oNtaXP?E936!a@DsvS*tsB@fa6kEA z5GkjwmH?EgpiG&itsB_Tb1NxtFnvxh_s@9KYX1Sttf?AlI~)z zT=6Y7ulx=}<8Scr_UqU-_z)5gPo%050PsbM*ZLno;_-ow&k?FZJtYmb2hPA$LkP)8 z=^d0Q6PImh6Y|QT?{grxj)S=uBKvY2EQUbm@ns9^yKiP~$DcD)c$5Em`zDSScH%iH zVov&m=cMo`1tYwA=!a}vb_ef_{)Q2?FUqn>BR$6phXQRv^1%=YfyE-F$AR4Q?9D!f zCzB^^#td~4u&l~l#rp2QLfe3+_ub9@+|x+m;=2(sQ`s%gO|j$XBb>A7Q(UydipiMw%igcweV#Cr~SP);q>w`bxts_4} znKHg?X==JDkQl3Y>Ckt%`s{n?Nq-1Fw5~%Mq$CAsi-`yu_bKm zxs#QdE7&vgJD%M84f4SNzSDv)S|V?|$!d5a#lhT5>>YWE4NGqa9-fbmV$=)@k&32kdEYetna>=j@0>V8+wRsL;po!3ivVwh<9tn z2S<1u9DAAQ>x1Sn=fk`)At|quvleV($B|#Kap_lB-F^*yV=wZ{9baUu(uXfokr95^ zA*!*W=5a>$2Ps`-F^+qRQT^{*cN>vipT*4!r#p%{(#I7s z0NN94*q?ib$KJjfDI_sjHNdmEVp5wB&j54O#VoFqBwy)gfA$%)4d_X4q${L9Xom2R3xy&ZBSNgt4a1d7K^CDWa9r zVb-_52m}Vp)`9;ZSKd#|U4ZYj5}Gp49{4utST|=c`~(#>KHF6}CCov1iHYw zt{bWo)A@yF2$~c(nR$rSAaFQ$(Wh{vkG1AlutDMw=mM`C`T=X&|Ad9fb5Od}ROt1z zOpczHqrb4Jo^rSCiW#&o(m7jFamnrsTpQb;*h4o8r#$aZ}2RaT-x2u^^ z%u@YyIv$U^u~@9(XGbSwU@fk6SikH>j+D1jQrYTKGJpW%vUT{!d}7THI5&Sa?~MKy zS0-mvMl+BOcroEJ@hN!2H_?coTEJ5Q<;Nd?yx;eIj4{$$E2?YUO|NtNPJ-PdDf;s} zab;}Mz0kbOI}5*w@3gROcnl#5)wQnEhDBfn!Xhy`u>C}*E~vWpO^HS)FC>8^umI=+ z&H;LW6w#;EF`}vQd_9Muru`KnQVPI9U?(sD)&Dg-0j3#(!fNKVZ_GoYH{la~d*1Yh$TI-TL>mI4vpNb@sU2=IZ8vL%AXUx0 zz{K0|nK(yizLHaeW#ZhRfQXoK^}1$=$#1{Yn002ovPDHLkV1n#w+^+xt diff --git a/src/Android/Avalonia.AndroidTestApplication/Resources/values/Strings.xml b/src/Android/Avalonia.AndroidTestApplication/Resources/values/Strings.xml deleted file mode 100644 index c8dca13c35..0000000000 --- a/src/Android/Avalonia.AndroidTestApplication/Resources/values/Strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - Hello World, Click Me! - Avalonia.AndroidTestApplication - \ No newline at end of file From a71ddcc8700cdd9a589b2385c0e801d55df0928c Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 14 Apr 2022 23:50:16 +0200 Subject: [PATCH 43/67] Fix project files broken by #5831. --- .../ControlCatalog.Android.csproj | 44 +-------------- .../ControlCatalog.iOS.csproj | 53 +------------------ 2 files changed, 4 insertions(+), 93 deletions(-) diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj index 8d2ead054c..04c67e84e8 100644 --- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj +++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj @@ -39,49 +39,9 @@ - + - - {7b92af71-6287-4693-9dcb-bd5b6e927e23} - Avalonia.Android - - - {b09b78d8-9b26-48b0-9149-d64a2f120f3f} - Avalonia.Base - - - {d2221c82-4a25-4583-9b43-d791e3f6820c} - Avalonia.Controls - - - {7062ae20-5dcc-4442-9645-8195bdece63e} - Avalonia.Diagnostics - - - {3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f} - Avalonia.Themes.Default - - - {3e53a01a-b331-47f3-b828-4a5717e77a24} - Avalonia.Markup.Xaml - - - {6417e941-21bc-467b-a771-0de389353ce6} - Avalonia.Markup - - - {7d2d3083-71dd-4cc9-8907-39a0d86fb322} - Avalonia.Skia - - - {d0a739b9-3c68-4ba6-a328-41606954b6bd} - ControlCatalog - - - - - - + \ No newline at end of file diff --git a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj index d4f10b3580..513ac44f83 100644 --- a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj +++ b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj @@ -7,59 +7,10 @@ True iossimulator-x64 - + - - - - - - - - - {4488ad85-1495-4809-9aa4-ddfe0a48527e} - Avalonia.iOS - - - {3E53A01A-B331-47F3-B828-4A5717E77A24} - Avalonia.Markup.Xaml - - - {6417E941-21BC-467B-A771-0DE389353CE6} - Avalonia.Markup - - - {B09B78D8-9B26-48B0-9149-D64A2F120F3F} - Avalonia.Base - - - {D2221C82-4A25-4583-9B43-D791E3F6820C} - Avalonia.Controls - - - {7062AE20-5DCC-4442-9645-8195BDECE63E} - Avalonia.Diagnostics - - - {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F} - Avalonia.Themes.Default - - - {7d2d3083-71dd-4cc9-8907-39a0d86fb322} - Avalonia.Skia - - - {d0a739b9-3c68-4ba6-a328-41606954b6bd} - ControlCatalog - - - - - - - - + \ No newline at end of file From c1644eb21455bb2658ed67c52c5425139c0cb672 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Apr 2022 22:11:48 +0000 Subject: [PATCH 44/67] Bump async in /src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4. - [Release notes](https://github.com/caolan/async/releases) - [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md) - [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4) --- updated-dependencies: - dependency-name: async dependency-type: indirect ... Signed-off-by: dependabot[bot] --- .../Remote/HtmlTransport/webapp/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/package-lock.json b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/package-lock.json index 08ede477c3..403bb5a59a 100644 --- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/package-lock.json +++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/package-lock.json @@ -377,9 +377,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" From 3b24669d084c1801c3f94eb294d7e95ba2194bfc Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 17:27:39 +0800 Subject: [PATCH 45/67] Add missing props reference to sln --- Avalonia.sln | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Avalonia.sln b/Avalonia.sln index e5baee7911..8e94eb4e63 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -113,6 +113,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1 build\SharedVersion.props = build\SharedVersion.props build\SharpDX.props = build\SharpDX.props build\SkiaSharp.props = build\SkiaSharp.props + build\SourceGenerators.props = build\SourceGenerators.props build\SourceLink.props = build\SourceLink.props build\System.Drawing.Common.props = build\System.Drawing.Common.props build\System.Memory.props = build\System.Memory.props @@ -214,6 +215,7 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.PlatformSupport.UnitTests", "tests\Avalonia.PlatformSupport.UnitTests\Avalonia.PlatformSupport.UnitTests.csproj", "{CE910927-CE5A-456F-BC92-E4C757354A5C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.SourceGenerator", "src\Avalonia.SourceGenerator\Avalonia.SourceGenerator.csproj", "{CA932DF3-2616-4BF6-8F28-1AD0EC40F1FF}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevAnalyzers", "src\tools\DevAnalyzers\DevAnalyzers.csproj", "{2B390431-288C-435C-BB6B-A374033BD8D1}" EndProject Global From 7418fd7dc39aa91ea70dc4dcc2a4c5246ec71993 Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 18:19:07 +0800 Subject: [PATCH 46/67] Apply code review feedbacks --- Avalonia.sln | 2 +- src/Avalonia.Base/Avalonia.Base.csproj | 1 + src/Avalonia.Base/Input/KeyGesture.cs | 12 ++---------- .../Avalonia.DesignerSupport.csproj | 1 + .../Remote/HtmlTransport/HtmlTransport.cs | 14 ++------------ src/Shared/EnumParserHelper.cs | 19 +++++++++++++++++++ 6 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 src/Shared/EnumParserHelper.cs diff --git a/Avalonia.sln b/Avalonia.sln index 8e94eb4e63..1f59a94e2e 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -38,8 +38,8 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A689DEF5-D50F-4975-8B72-124C9EB54066}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig + src\Shared\EnumParserHelper.cs = src\Shared\EnumParserHelper.cs src\Shared\ModuleInitializer.cs = src\Shared\ModuleInitializer.cs - src\Shared\RawEventGrouping.cs = src\Shared\RawEventGrouping.cs src\Shared\SourceGeneratorAttributes.cs = src\Shared\SourceGeneratorAttributes.cs EndProjectSection EndProject diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 8e4755b4b7..f0d54d831a 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -7,6 +7,7 @@ + diff --git a/src/Avalonia.Base/Input/KeyGesture.cs b/src/Avalonia.Base/Input/KeyGesture.cs index 6f302a3ae7..d7fe89afda 100644 --- a/src/Avalonia.Base/Input/KeyGesture.cs +++ b/src/Avalonia.Base/Input/KeyGesture.cs @@ -155,11 +155,7 @@ namespace Avalonia.Input if (s_keySynonyms.TryGetValue(key.ToLower(), out Key rv)) return rv; -#if NETSTANDARD2_0 - return (Key)Enum.Parse(typeof(Key), key, true); -#else - return Enum.Parse(key, true); -#endif + return EnumParserHelper.ParseEnum(key, true); } private static KeyModifiers ParseModifier(ReadOnlySpan modifier) @@ -176,11 +172,7 @@ namespace Avalonia.Input return KeyModifiers.Meta; } -#if NETSTANDARD2_0 - return (KeyModifiers)Enum.Parse(typeof(KeyModifiers), modifier.ToString(), true); -#else - return Enum.Parse(modifier.ToString(), true); -#endif + return EnumParserHelper.ParseEnum(modifier.ToString(), true); } private Key ResolveNumPadOperationKey(Key key) diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index 0270000d8c..66a7a6389e 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs index 7965e5d0d8..11a1efb9c7 100644 --- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs +++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs @@ -320,23 +320,13 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport ? null : modifiersText .Split(',') -#if NETSTANDARD2_0 - .Select(x => (InputProtocol.InputModifiers)Enum.Parse( - typeof(InputProtocol.InputModifiers), x, true)) -#else - .Select(x => Enum.Parse(x, true)) -#endif + .Select(x => EnumParserHelper.ParseEnum(x, true)) .ToArray(); private static InputProtocol.MouseButton ParseMouseButton(string buttonText) => string.IsNullOrWhiteSpace(buttonText) ? InputProtocol.MouseButton.None -#if NETSTANDARD2_0 - : (InputProtocol.MouseButton)Enum.Parse( - typeof(InputProtocol.MouseButton), buttonText, true); -#else - : Enum.Parse(buttonText, true); -#endif + : EnumParserHelper.ParseEnum(buttonText, true); private static double ParseDouble(string text) => double.Parse(text, NumberStyles.Float, CultureInfo.InvariantCulture); diff --git a/src/Shared/EnumParserHelper.cs b/src/Shared/EnumParserHelper.cs new file mode 100644 index 0000000000..09d6a0cb7d --- /dev/null +++ b/src/Shared/EnumParserHelper.cs @@ -0,0 +1,19 @@ +using System; + +namespace Avalonia +{ + internal class EnumParserHelper + { +#if NET6_0 + public static T ParseEnum(ReadOnlySpan key, bool ignoreCase) where T : struct + { + return Enum.Parse(key, ignoreCase); + } +#else + public static T ParseEnum(string key, bool ignoreCase) where T : struct + { + return (T)Enum.Parse(typeof(T), key, ignoreCase); + } +#endif + } +} From 67b18b8e3fdb7ed507dbae6f6834faff50a7d4ba Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 18:22:10 +0800 Subject: [PATCH 47/67] Rename EnumParserHelper --- Avalonia.sln | 2 +- src/Avalonia.Base/Avalonia.Base.csproj | 2 +- src/Avalonia.Base/Input/KeyGesture.cs | 4 ++-- .../Avalonia.DesignerSupport.csproj | 2 +- .../Remote/HtmlTransport/HtmlTransport.cs | 4 ++-- src/Shared/{EnumParserHelper.cs => EnumHelper.cs} | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) rename src/Shared/{EnumParserHelper.cs => EnumHelper.cs} (51%) diff --git a/Avalonia.sln b/Avalonia.sln index 1f59a94e2e..8a48566653 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -38,7 +38,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A689DEF5-D50F-4975-8B72-124C9EB54066}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig - src\Shared\EnumParserHelper.cs = src\Shared\EnumParserHelper.cs + src\Shared\EnumHelper.cs = src\Shared\EnumHelper.cs src\Shared\ModuleInitializer.cs = src\Shared\ModuleInitializer.cs src\Shared\SourceGeneratorAttributes.cs = src\Shared\SourceGeneratorAttributes.cs EndProjectSection diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index f0d54d831a..a9a606de8d 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/Avalonia.Base/Input/KeyGesture.cs b/src/Avalonia.Base/Input/KeyGesture.cs index d7fe89afda..cb6d12ac0d 100644 --- a/src/Avalonia.Base/Input/KeyGesture.cs +++ b/src/Avalonia.Base/Input/KeyGesture.cs @@ -155,7 +155,7 @@ namespace Avalonia.Input if (s_keySynonyms.TryGetValue(key.ToLower(), out Key rv)) return rv; - return EnumParserHelper.ParseEnum(key, true); + return EnumHelper.Parse(key, true); } private static KeyModifiers ParseModifier(ReadOnlySpan modifier) @@ -172,7 +172,7 @@ namespace Avalonia.Input return KeyModifiers.Meta; } - return EnumParserHelper.ParseEnum(modifier.ToString(), true); + return EnumHelper.Parse(modifier.ToString(), true); } private Key ResolveNumPadOperationKey(Key key) diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index 66a7a6389e..586d13f179 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -19,7 +19,7 @@ - + diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs index 11a1efb9c7..794bc94256 100644 --- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs +++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs @@ -320,13 +320,13 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport ? null : modifiersText .Split(',') - .Select(x => EnumParserHelper.ParseEnum(x, true)) + .Select(x => EnumHelper.Parse(x, true)) .ToArray(); private static InputProtocol.MouseButton ParseMouseButton(string buttonText) => string.IsNullOrWhiteSpace(buttonText) ? InputProtocol.MouseButton.None - : EnumParserHelper.ParseEnum(buttonText, true); + : EnumHelper.Parse(buttonText, true); private static double ParseDouble(string text) => double.Parse(text, NumberStyles.Float, CultureInfo.InvariantCulture); diff --git a/src/Shared/EnumParserHelper.cs b/src/Shared/EnumHelper.cs similarity index 51% rename from src/Shared/EnumParserHelper.cs rename to src/Shared/EnumHelper.cs index 09d6a0cb7d..8511e712fa 100644 --- a/src/Shared/EnumParserHelper.cs +++ b/src/Shared/EnumHelper.cs @@ -2,15 +2,15 @@ namespace Avalonia { - internal class EnumParserHelper + internal class EnumHelper { #if NET6_0 - public static T ParseEnum(ReadOnlySpan key, bool ignoreCase) where T : struct + public static T Parse(ReadOnlySpan key, bool ignoreCase) where T : struct { return Enum.Parse(key, ignoreCase); } #else - public static T ParseEnum(string key, bool ignoreCase) where T : struct + public static T Parse(string key, bool ignoreCase) where T : struct { return (T)Enum.Parse(typeof(T), key, ignoreCase); } From 4f6da322fa4ac370d320f50a84aa9bcb5e5dd405 Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 18:23:18 +0800 Subject: [PATCH 48/67] PrivateAssets --- build/SourceGenerators.props | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build/SourceGenerators.props b/build/SourceGenerators.props index f9eab24d08..d000af1bf6 100644 --- a/build/SourceGenerators.props +++ b/build/SourceGenerators.props @@ -1,6 +1,10 @@ - + From d416b4de45413987330ef856035a02d07e177ad1 Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 18:30:08 +0800 Subject: [PATCH 49/67] NET6_0 -> NET6_0_OR_GREATER --- src/Shared/EnumHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Shared/EnumHelper.cs b/src/Shared/EnumHelper.cs index 8511e712fa..fddcf7ebc5 100644 --- a/src/Shared/EnumHelper.cs +++ b/src/Shared/EnumHelper.cs @@ -4,7 +4,7 @@ namespace Avalonia { internal class EnumHelper { -#if NET6_0 +#if NET6_0_OR_GREATER public static T Parse(ReadOnlySpan key, bool ignoreCase) where T : struct { return Enum.Parse(key, ignoreCase); From 578f5fc1cbd2abb42f85fb3bf798395721de6c57 Mon Sep 17 00:00:00 2001 From: Rustam Sayfutdinov Date: Fri, 15 Apr 2022 13:31:37 +0300 Subject: [PATCH 50/67] Fix PlatformSupport.UnitTests --- nukebuild/Build.cs | 1 + src/Avalonia.PlatformSupport/AssetLoader.cs | 8 ++++---- .../Avalonia.PlatformSupport.csproj | 2 +- .../Internal/AssemblyDescriptor.cs | 10 +++++++++- .../Internal/AssemblyDescriptorResolver.cs | 11 ++++++++--- .../AssetLoaderTests.cs | 6 +++--- 6 files changed, 26 insertions(+), 12 deletions(-) diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 9fcb9d6b7f..f0f677b844 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -221,6 +221,7 @@ partial class Build : NukeBuild RunCoreTest("Avalonia.Markup.Xaml.UnitTests"); RunCoreTest("Avalonia.Skia.UnitTests"); RunCoreTest("Avalonia.ReactiveUI.UnitTests"); + RunCoreTest("Avalonia.PlatformSupport.UnitTests"); }); Target RunRenderTests => _ => _ diff --git a/src/Avalonia.PlatformSupport/AssetLoader.cs b/src/Avalonia.PlatformSupport/AssetLoader.cs index fb03ec2f6e..0e33c3d4c7 100644 --- a/src/Avalonia.PlatformSupport/AssetLoader.cs +++ b/src/Avalonia.PlatformSupport/AssetLoader.cs @@ -14,14 +14,14 @@ namespace Avalonia.PlatformSupport /// public class AssetLoader : IAssetLoader { - private static AssemblyDescriptorResolver s_assemblyDescriptorResolver = new(); + private static IAssemblyDescriptorResolver s_assemblyDescriptorResolver = new AssemblyDescriptorResolver(); private AssemblyDescriptor? _defaultResmAssembly; /// /// Introduced for tests. /// - internal static void SetAssemblyDescriptorResolver(AssemblyDescriptorResolver resolver) => + internal static void SetAssemblyDescriptorResolver(IAssemblyDescriptorResolver resolver) => s_assemblyDescriptorResolver = resolver; /// @@ -182,13 +182,13 @@ namespace Avalonia.PlatformSupport throw new ArgumentException($"Unsupported url type: " + uri.Scheme, nameof(uri)); } - private (AssemblyDescriptor asm, string path) GetResAsmAndPath(Uri uri) + private (IAssemblyDescriptor asm, string path) GetResAsmAndPath(Uri uri) { var asm = s_assemblyDescriptorResolver.GetAssembly(uri.Authority); return (asm, uri.GetUnescapeAbsolutePath()); } - private AssemblyDescriptor? GetAssembly(Uri? uri) + private IAssemblyDescriptor? GetAssembly(Uri? uri) { if (uri != null) { diff --git a/src/Avalonia.PlatformSupport/Avalonia.PlatformSupport.csproj b/src/Avalonia.PlatformSupport/Avalonia.PlatformSupport.csproj index 420ac0796c..5336f1e630 100644 --- a/src/Avalonia.PlatformSupport/Avalonia.PlatformSupport.csproj +++ b/src/Avalonia.PlatformSupport/Avalonia.PlatformSupport.csproj @@ -19,6 +19,6 @@ - + diff --git a/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptor.cs b/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptor.cs index a3de7f2b8a..64ffec8482 100644 --- a/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptor.cs +++ b/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptor.cs @@ -6,7 +6,15 @@ using Avalonia.Utilities; namespace Avalonia.PlatformSupport.Internal; -internal class AssemblyDescriptor +internal interface IAssemblyDescriptor +{ + Assembly Assembly { get; } + Dictionary? Resources { get; } + Dictionary? AvaloniaResources { get; } + string? Name { get; } +} + +internal class AssemblyDescriptor : IAssemblyDescriptor { public AssemblyDescriptor(Assembly assembly) { diff --git a/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptorResolver.cs b/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptorResolver.cs index a78051a9c4..28ae35d57d 100644 --- a/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptorResolver.cs +++ b/src/Avalonia.PlatformSupport/Internal/AssemblyDescriptorResolver.cs @@ -5,11 +5,16 @@ using System.Reflection; namespace Avalonia.PlatformSupport.Internal; -internal class AssemblyDescriptorResolver +internal interface IAssemblyDescriptorResolver { - private readonly Dictionary _assemblyNameCache = new(); + IAssemblyDescriptor GetAssembly(string name); +} + +internal class AssemblyDescriptorResolver: IAssemblyDescriptorResolver +{ + private readonly Dictionary _assemblyNameCache = new(); - public AssemblyDescriptor GetAssembly(string name) + public IAssemblyDescriptor GetAssembly(string name) { if (name == null) throw new ArgumentNullException(nameof(name)); diff --git a/tests/Avalonia.PlatformSupport.UnitTests/AssetLoaderTests.cs b/tests/Avalonia.PlatformSupport.UnitTests/AssetLoaderTests.cs index f950fb7e99..dfd195073b 100644 --- a/tests/Avalonia.PlatformSupport.UnitTests/AssetLoaderTests.cs +++ b/tests/Avalonia.PlatformSupport.UnitTests/AssetLoaderTests.cs @@ -16,7 +16,7 @@ public class AssetLoaderTests static AssetLoaderTests() { - var resolver = Mock.Of(); + var resolver = Mock.Of(); var descriptor = CreateAssemblyDescriptor(AssemblyNameWithWhitespace); Mock.Get(resolver).Setup(x => x.GetAssembly(AssemblyNameWithWhitespace)).Returns(descriptor); @@ -49,13 +49,13 @@ public class AssetLoaderTests Assert.Equal(AssemblyNameWithNonAscii, assemblyActual?.FullName); } - private static AssemblyDescriptor CreateAssemblyDescriptor(string assemblyName) + private static IAssemblyDescriptor CreateAssemblyDescriptor(string assemblyName) { var assembly = Mock.Of(); Mock.Get(assembly).Setup(x => x.GetName()).Returns(new AssemblyName(assemblyName)); Mock.Get(assembly).Setup(x => x.FullName).Returns(assemblyName); - var descriptor = Mock.Of(); + var descriptor = Mock.Of(); Mock.Get(descriptor).Setup(x => x.Assembly).Returns(assembly); return descriptor; } From fd5e2169c143fb38b32edb1f2e2825bb2a35a513 Mon Sep 17 00:00:00 2001 From: Tako Date: Fri, 15 Apr 2022 14:56:02 +0300 Subject: [PATCH 51/67] reimplementation and some tests --- src/Avalonia.Controls/ComboBox.cs | 19 +---- src/Avalonia.Controls/ItemsControl.cs | 1 - src/Avalonia.Controls/StackPanel.cs | 2 +- .../ComboBoxTests.cs | 75 +++++++++++++++++++ 4 files changed, 77 insertions(+), 20 deletions(-) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index 582f90e472..cbf9b35a05 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -455,24 +455,7 @@ namespace Avalonia.Controls { if (ItemCount >= 1) { - if (SelectedIndex == -1) - { - if (MoveSelection(NavigationDirection.First, WrapSelection) == false) - { - // MoveSelection works only with indexes starting from 0 - // so to make it search further than the first item we need to set SelectedIndex to 0. - SelectedIndex = 0; - var isSelectionMoved = MoveSelection(NavigationDirection.Next, WrapSelection); - if (isSelectionMoved == false) - { - SelectedIndex = -1; - } - } - } - else - { - MoveSelection(NavigationDirection.Next, WrapSelection); - } + MoveSelection(NavigationDirection.Next, WrapSelection); } } diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index 0cd72dc91c..afe4a08446 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/src/Avalonia.Controls/ItemsControl.cs @@ -508,7 +508,6 @@ namespace Avalonia.Controls do { result = container.GetControl(direction, c, wrap); - from = from ?? result; if (result != null && result.Focusable && diff --git a/src/Avalonia.Controls/StackPanel.cs b/src/Avalonia.Controls/StackPanel.cs index feb425a9c3..50c48d2bb0 100644 --- a/src/Avalonia.Controls/StackPanel.cs +++ b/src/Avalonia.Controls/StackPanel.cs @@ -123,7 +123,7 @@ namespace Avalonia.Controls index = Children.Count - 1; break; case NavigationDirection.Next: - if (index != -1) ++index; + ++index; break; case NavigationDirection.Previous: if (index != -1) --index; diff --git a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs index cb2fd11175..98695fe88e 100644 --- a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs @@ -36,6 +36,81 @@ namespace Avalonia.Controls.UnitTests Assert.False(target.IsDropDownOpen); } + [Fact] + public void WrapSelection_Should_Work() + { + using (UnitTestApplication.Start(TestServices.RealFocus)) + { + var items = new[] + { + new ComboBoxItem() { Content = "bla" }, + new ComboBoxItem() { Content = "dd" }, + new ComboBoxItem() { Content = "sdf", IsEnabled = false } + }; + var target = new ComboBox + { + Items = items, + Template = GetTemplate(), + WrapSelection = true + }; + var root = new TestRoot(target); + target.ApplyTemplate(); + target.Presenter.ApplyTemplate(); + target.Focus(); + Assert.Equal(target.SelectedIndex, -1); + Assert.True(target.IsFocused); + target.RaiseEvent(new KeyEventArgs + { + RoutedEvent = InputElement.KeyDownEvent, + Key = Key.Up, + }); + Assert.Equal(target.SelectedIndex, 1); + target.RaiseEvent(new KeyEventArgs + { + RoutedEvent = InputElement.KeyDownEvent, + Key = Key.Down, + }); + Assert.Equal(target.SelectedIndex, 0); + } + } + + [Fact] + public void Focuses_Next_Item_On_Key_Down() + { + using (UnitTestApplication.Start(TestServices.RealFocus)) + { + var items = new[] + { + new ComboBoxItem() { Content = "bla" }, + new ComboBoxItem() { Content = "dd", IsEnabled = false }, + new ComboBoxItem() { Content = "sdf" } + }; + var target = new ComboBox + { + Items = items, + Template = GetTemplate() + }; + var root = new TestRoot(target); + target.ApplyTemplate(); + target.Presenter.ApplyTemplate(); + target.Focus(); + Assert.Equal(target.SelectedIndex, -1); + Assert.True(target.IsFocused); + target.RaiseEvent(new KeyEventArgs + { + RoutedEvent = InputElement.KeyDownEvent, + Key = Key.Down, + }); + Assert.Equal(target.SelectedIndex, 0); + target.RaiseEvent(new KeyEventArgs + { + RoutedEvent = InputElement.KeyDownEvent, + Key = Key.Down, + }); + Assert.Equal(target.SelectedIndex, 2); + } + } + [Fact] public void SelectionBoxItem_Is_Rectangle_With_VisualBrush_When_Selection_Is_Control() { From 2a2e4ca6db9651a334de740033eb507aea6f3c3b Mon Sep 17 00:00:00 2001 From: Steven He Date: Fri, 15 Apr 2022 23:53:10 +0800 Subject: [PATCH 52/67] Apply code review feedbacks --- Avalonia.sln | 1 - 1 file changed, 1 deletion(-) diff --git a/Avalonia.sln b/Avalonia.sln index 8a48566653..1e2a3c6027 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -38,7 +38,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A689DEF5-D50F-4975-8B72-124C9EB54066}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig - src\Shared\EnumHelper.cs = src\Shared\EnumHelper.cs src\Shared\ModuleInitializer.cs = src\Shared\ModuleInitializer.cs src\Shared\SourceGeneratorAttributes.cs = src\Shared\SourceGeneratorAttributes.cs EndProjectSection From be8bcd2be7bb31321af83a6c0ba99f87a07d67cc Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 15 Apr 2022 12:06:45 -0400 Subject: [PATCH 53/67] Update src/Avalonia.Base/Input/PointerOverPreProcessor.cs --- src/Avalonia.Base/Input/PointerOverPreProcessor.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Avalonia.Base/Input/PointerOverPreProcessor.cs b/src/Avalonia.Base/Input/PointerOverPreProcessor.cs index a38364197d..d22252893d 100644 --- a/src/Avalonia.Base/Input/PointerOverPreProcessor.cs +++ b/src/Avalonia.Base/Input/PointerOverPreProcessor.cs @@ -60,7 +60,6 @@ namespace Avalonia.Input public void SceneInvalidated(Rect dirtyRect) { - // Pointer is outside of the target area if (_lastPointer is (var pointer, var position)) { var clientPoint = _inputRoot.PointToClient(position); From 7530e20be04366fd621bca9650faba41294cdbb7 Mon Sep 17 00:00:00 2001 From: Steven He Date: Sat, 16 Apr 2022 00:21:42 +0800 Subject: [PATCH 54/67] Move EnumHelper to Avalonia.Base --- src/Avalonia.Base/Avalonia.Base.csproj | 1 - src/Avalonia.Base/Input/KeyGesture.cs | 1 + src/Avalonia.Base/Properties/AssemblyInfo.cs | 1 + src/{Shared => Avalonia.Base/Utilities}/EnumHelper.cs | 2 +- src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj | 1 - .../Remote/HtmlTransport/HtmlTransport.cs | 1 + 6 files changed, 4 insertions(+), 3 deletions(-) rename src/{Shared => Avalonia.Base/Utilities}/EnumHelper.cs (93%) diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index a9a606de8d..8e4755b4b7 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -7,7 +7,6 @@ - diff --git a/src/Avalonia.Base/Input/KeyGesture.cs b/src/Avalonia.Base/Input/KeyGesture.cs index cb6d12ac0d..3b7a828b86 100644 --- a/src/Avalonia.Base/Input/KeyGesture.cs +++ b/src/Avalonia.Base/Input/KeyGesture.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using Avalonia.Utilities; namespace Avalonia.Input { diff --git a/src/Avalonia.Base/Properties/AssemblyInfo.cs b/src/Avalonia.Base/Properties/AssemblyInfo.cs index 4d7f487e00..a0560924e7 100644 --- a/src/Avalonia.Base/Properties/AssemblyInfo.cs +++ b/src/Avalonia.Base/Properties/AssemblyInfo.cs @@ -21,6 +21,7 @@ using Avalonia.Metadata; [assembly: InternalsVisibleTo("Avalonia.Controls, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.Controls.DataGrid, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.Controls.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] +[assembly: InternalsVisibleTo("Avalonia.DesignerSupport, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.Direct2D1.RenderTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.LeakTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] [assembly: InternalsVisibleTo("Avalonia.Markup.Xaml.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87")] diff --git a/src/Shared/EnumHelper.cs b/src/Avalonia.Base/Utilities/EnumHelper.cs similarity index 93% rename from src/Shared/EnumHelper.cs rename to src/Avalonia.Base/Utilities/EnumHelper.cs index fddcf7ebc5..c857033ef1 100644 --- a/src/Shared/EnumHelper.cs +++ b/src/Avalonia.Base/Utilities/EnumHelper.cs @@ -1,6 +1,6 @@ using System; -namespace Avalonia +namespace Avalonia.Utilities { internal class EnumHelper { diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index 586d13f179..0270000d8c 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -19,7 +19,6 @@ - diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs index 794bc94256..f100be5d5b 100644 --- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs +++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using Avalonia.Remote.Protocol; using Avalonia.Remote.Protocol.Viewport; +using Avalonia.Utilities; using InputProtocol = Avalonia.Remote.Protocol.Input; namespace Avalonia.DesignerSupport.Remote.HtmlTransport From 37f678e96a7b35c2d0c79d6871d5e06fd540948b Mon Sep 17 00:00:00 2001 From: robloo Date: Fri, 15 Apr 2022 19:05:10 -0400 Subject: [PATCH 55/67] Fix missing color alpha rounding --- src/Avalonia.Base/Media/Color.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs index eaa886ccbd..9ad75b3290 100644 --- a/src/Avalonia.Base/Media/Color.cs +++ b/src/Avalonia.Base/Media/Color.cs @@ -375,7 +375,7 @@ namespace Avalonia.Media byte.TryParse(components[2], NumberStyles.Number, CultureInfo.InvariantCulture, out byte blue) && TryInternalParse(components[3], out double alpha)) { - color = new Color((byte)(alpha * 255), red, green, blue); + color = new Color((byte)Math.Round(alpha * 255.0), red, green, blue); return true; } } From c7e0a68f2779361ac23bf13003860ed5634c8278 Mon Sep 17 00:00:00 2001 From: robloo Date: Fri, 15 Apr 2022 19:07:01 -0400 Subject: [PATCH 56/67] Support RGB component percentages in CSS format parsing --- src/Avalonia.Base/Media/Color.cs | 43 +++++++++++++++---- .../Media/ColorTests.cs | 24 ++++++++--- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs index 9ad75b3290..2f0def58a4 100644 --- a/src/Avalonia.Base/Media/Color.cs +++ b/src/Avalonia.Base/Media/Color.cs @@ -360,9 +360,9 @@ namespace Avalonia.Media if (components.Length == 3) // RGB { - if (byte.TryParse(components[0], NumberStyles.Number, CultureInfo.InvariantCulture, out byte red) && - byte.TryParse(components[1], NumberStyles.Number, CultureInfo.InvariantCulture, out byte green) && - byte.TryParse(components[2], NumberStyles.Number, CultureInfo.InvariantCulture, out byte blue)) + if (InternalTryParseByte(components[0], out byte red) && + InternalTryParseByte(components[1], out byte green) && + InternalTryParseByte(components[2], out byte blue)) { color = new Color(0xFF, red, green, blue); return true; @@ -370,18 +370,45 @@ namespace Avalonia.Media } else if (components.Length == 4) // RGBA { - if (byte.TryParse(components[0], NumberStyles.Number, CultureInfo.InvariantCulture, out byte red) && - byte.TryParse(components[1], NumberStyles.Number, CultureInfo.InvariantCulture, out byte green) && - byte.TryParse(components[2], NumberStyles.Number, CultureInfo.InvariantCulture, out byte blue) && - TryInternalParse(components[3], out double alpha)) + if (InternalTryParseByte(components[0], out byte red) && + InternalTryParseByte(components[1], out byte green) && + InternalTryParseByte(components[2], out byte blue) && + InternalTryParseDouble(components[3], out double alpha)) { color = new Color((byte)Math.Round(alpha * 255.0), red, green, blue); return true; } } + // Local function to specially parse a byte value with an optional percentage sign + bool InternalTryParseByte(string inString, out byte outByte) + { + // The percent sign, if it exists, must be at the end of the number + int percentIndex = inString.IndexOf("%", StringComparison.Ordinal); + + if (percentIndex >= 0) + { + var result = double.TryParse( + inString.Substring(0, percentIndex), + NumberStyles.Number, + CultureInfo.InvariantCulture, + out double percentage); + + outByte = (byte)Math.Round((percentage / 100.0) * 255.0); + return result; + } + else + { + return byte.TryParse( + inString, + NumberStyles.Number, + CultureInfo.InvariantCulture, + out outByte); + } + } + // Local function to specially parse a double value with an optional percentage sign - bool TryInternalParse(string inString, out double outDouble) + bool InternalTryParseDouble(string inString, out double outDouble) { // The percent sign, if it exists, must be at the end of the number int percentIndex = inString.IndexOf("%", StringComparison.Ordinal); diff --git a/tests/Avalonia.Base.UnitTests/Media/ColorTests.cs b/tests/Avalonia.Base.UnitTests/Media/ColorTests.cs index 1392635b32..36929d5e95 100644 --- a/tests/Avalonia.Base.UnitTests/Media/ColorTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/ColorTests.cs @@ -216,8 +216,8 @@ namespace Avalonia.Base.UnitTests.Media Tuple.Create("hsl(-1000, -1000, -1000)", new HslColor(1, 0, 0, 0)), // Clamps to min Tuple.Create("hsl(-1000, -1000%, -1000%)", new HslColor(1, 0, 0, 0)), // Clamps to min - Tuple.Create("hsl(1000, 1000, 1000)", new HslColor(1, 0, 1, 1)), // Clamps to max - Tuple.Create("hsl(1000, 1000%, 1000%)", new HslColor(1, 0, 1, 1)), // Clamps to max + Tuple.Create("hsl(1000, 1000, 1000)", new HslColor(1, 0, 1, 1)), // Clamps to max (Hue wraps to zero) + Tuple.Create("hsl(1000, 1000%, 1000%)", new HslColor(1, 0, 1, 1)), // Clamps to max (Hue wraps to zero) Tuple.Create("hsl(300, 0.8, 0.2)", new HslColor(1.0, 300, 0.8, 0.2)), Tuple.Create("hsl(300, 80%, 20%)", new HslColor(1.0, 300, 0.8, 0.2)), @@ -262,8 +262,8 @@ namespace Avalonia.Base.UnitTests.Media Tuple.Create("hsv(-1000, -1000, -1000)", new HsvColor(1, 0, 0, 0)), // Clamps to min Tuple.Create("hsv(-1000, -1000%, -1000%)", new HsvColor(1, 0, 0, 0)), // Clamps to min - Tuple.Create("hsv(1000, 1000, 1000)", new HsvColor(1, 0, 1, 1)), // Clamps to max - Tuple.Create("hsv(1000, 1000%, 1000%)", new HsvColor(1, 0, 1, 1)), // Clamps to max + Tuple.Create("hsv(1000, 1000, 1000)", new HsvColor(1, 0, 1, 1)), // Clamps to max (Hue wraps to zero) + Tuple.Create("hsv(1000, 1000%, 1000%)", new HsvColor(1, 0, 1, 1)), // Clamps to max (Hue wraps to zero) Tuple.Create("hsv(300, 0.8, 0.2)", new HsvColor(1.0, 300, 0.8, 0.2)), Tuple.Create("hsv(300, 80%, 20%)", new HsvColor(1.0, 300, 0.8, 0.2)), @@ -303,8 +303,20 @@ namespace Avalonia.Base.UnitTests.Media Tuple.Create("#123456", new Color(0xff, 0x12, 0x34, 0x56)), Tuple.Create("rgb(100, 30, 45)", new Color(255, 100, 30, 45)), - Tuple.Create("rgba(100, 30, 45, 0.9)", new Color(229, 100, 30, 45)), - Tuple.Create("rgba(100, 30, 45, 90%)", new Color(229, 100, 30, 45)), + Tuple.Create("rgba(100, 30, 45, 0.9)", new Color(230, 100, 30, 45)), + Tuple.Create("rgba(100, 30, 45, 90%)", new Color(230, 100, 30, 45)), + + Tuple.Create("rgb(255,0,0)", new Color(255, 255, 0, 0)), + Tuple.Create("rgb(0,255,0)", new Color(255, 0, 255, 0)), + Tuple.Create("rgb(0,0,255)", new Color(255, 0, 0, 255)), + + Tuple.Create("rgb(100%, 0, 0)", new Color(255, 255, 0, 0)), + Tuple.Create("rgb(0, 100%, 0)", new Color(255, 0, 255, 0)), + Tuple.Create("rgb(0, 0, 100%)", new Color(255, 0, 0, 255)), + + Tuple.Create("rgba(0, 0, 100%, 50%)", new Color(128, 0, 0, 255)), + Tuple.Create("rgba(50%, 10%, 80%, 50%)", new Color(128, 128, 26, 204)), + Tuple.Create("rgba(50%, 10%, 80%, 0.5)", new Color(128, 128, 26, 204)), // HSL Tuple.Create("hsl(296, 85%, 12%)", new Color(255, 53, 5, 57)), From 467f78b58d3ee2554a79df40693e260cd736d3ca Mon Sep 17 00:00:00 2001 From: robloo Date: Fri, 15 Apr 2022 19:16:17 -0400 Subject: [PATCH 57/67] Improve color format length checking for performance --- src/Avalonia.Base/Media/Color.cs | 22 ++++++++++++++-------- src/Avalonia.Base/Media/HslColor.cs | 11 +++++++++-- src/Avalonia.Base/Media/HsvColor.cs | 11 +++++++++-- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs index 2f0def58a4..dc22f87d49 100644 --- a/src/Avalonia.Base/Media/Color.cs +++ b/src/Avalonia.Base/Media/Color.cs @@ -166,7 +166,10 @@ namespace Avalonia.Media return true; } - if (s.Length > 5 && + // Note: The length checks are also an important optimization. + // The shortest possible CSS format is "rbg(0,0,0)", Length = 10. + + if (s.Length >= 10 && (s[0] == 'r' || s[0] == 'R') && (s[1] == 'g' || s[1] == 'G') && (s[2] == 'b' || s[2] == 'B') && @@ -175,7 +178,7 @@ namespace Avalonia.Media return true; } - if (s.Length > 5 && + if (s.Length >= 10 && (s[0] == 'h' || s[0] == 'H') && (s[1] == 's' || s[1] == 'S') && (s[2] == 'l' || s[2] == 'L') && @@ -185,7 +188,7 @@ namespace Avalonia.Media return true; } - if (s.Length > 5 && + if (s.Length >= 10 && (s[0] == 'h' || s[0] == 'H') && (s[1] == 's' || s[1] == 'S') && (s[2] == 'v' || s[2] == 'V') && @@ -229,7 +232,10 @@ namespace Avalonia.Media // At this point all parsing uses strings var str = s.ToString(); - if (s.Length > 5 && + // Note: The length checks are also an important optimization. + // The shortest possible CSS format is "rbg(0,0,0)", Length = 10. + + if (s.Length >= 10 && (s[0] == 'r' || s[0] == 'R') && (s[1] == 'g' || s[1] == 'G') && (s[2] == 'b' || s[2] == 'B') && @@ -238,7 +244,7 @@ namespace Avalonia.Media return true; } - if (s.Length > 5 && + if (s.Length >= 10 && (s[0] == 'h' || s[0] == 'H') && (s[1] == 's' || s[1] == 'S') && (s[2] == 'l' || s[2] == 'L') && @@ -248,7 +254,7 @@ namespace Avalonia.Media return true; } - if (s.Length > 5 && + if (s.Length >= 10 && (s[0] == 'h' || s[0] == 'H') && (s[1] == 's' || s[1] == 'S') && (s[2] == 'v' || s[2] == 'V') && @@ -342,14 +348,14 @@ namespace Avalonia.Media return false; } - if (workingString.Length > 6 && + if (workingString.Length >= 11 && workingString.StartsWith("rgba(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(5, workingString.Length - 6); } - if (workingString.Length > 5 && + if (workingString.Length >= 10 && workingString.StartsWith("rgb(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { diff --git a/src/Avalonia.Base/Media/HslColor.cs b/src/Avalonia.Base/Media/HslColor.cs index e27a4f3106..622d3ac2b7 100644 --- a/src/Avalonia.Base/Media/HslColor.cs +++ b/src/Avalonia.Base/Media/HslColor.cs @@ -241,19 +241,26 @@ namespace Avalonia.Media return false; } - if (workingString.Length > 6 && + // Note: The length checks are also an important optimization. + // The shortest possible format is "hsl(0,0,0)", Length = 10. + + if (workingString.Length >= 11 && workingString.StartsWith("hsla(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(5, workingString.Length - 6); } - if (workingString.Length > 5 && + if (workingString.Length >= 10 && workingString.StartsWith("hsl(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(4, workingString.Length - 5); } + else + { + return false; + } string[] components = workingString.Split(','); diff --git a/src/Avalonia.Base/Media/HsvColor.cs b/src/Avalonia.Base/Media/HsvColor.cs index 164aeb1df1..1e718b5739 100644 --- a/src/Avalonia.Base/Media/HsvColor.cs +++ b/src/Avalonia.Base/Media/HsvColor.cs @@ -241,19 +241,26 @@ namespace Avalonia.Media return false; } - if (workingString.Length > 6 && + // Note: The length checks are also an important optimization. + // The shortest possible format is "hsv(0,0,0)", Length = 10. + + if (workingString.Length >= 11 && workingString.StartsWith("hsva(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(5, workingString.Length - 6); } - if (workingString.Length > 5 && + if (workingString.Length >= 10 && workingString.StartsWith("hsv(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(4, workingString.Length - 5); } + else + { + return false; + } string[] components = workingString.Split(','); From 02e7e8702ed3e9866701755edb0d4814da7ac88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20Komosi=C5=84ski?= Date: Sat, 16 Apr 2022 01:24:32 +0200 Subject: [PATCH 58/67] Allow for parsing relative points during compile time. (#7987) * Allow for parsing relative points during compile time. * Revert extra target framework. --- src/Avalonia.Base/RelativePoint.cs | 15 +++++++++--- .../Avalonia.Build.Tasks.csproj | 3 +++ .../Properties/launchSettings.json | 10 ++++++++ .../AvaloniaXamlIlLanguageParseIntrinsics.cs | 23 +++++++++++++++++++ .../AvaloniaXamlIlWellKnownTypes.cs | 7 ++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/Avalonia.Build.Tasks/Properties/launchSettings.json diff --git a/src/Avalonia.Base/RelativePoint.cs b/src/Avalonia.Base/RelativePoint.cs index 4550dbd54b..e1fd0093b6 100644 --- a/src/Avalonia.Base/RelativePoint.cs +++ b/src/Avalonia.Base/RelativePoint.cs @@ -1,7 +1,8 @@ using System; using System.Globalization; - +#if !BUILDTASK using Avalonia.Animation.Animators; +#endif using Avalonia.Utilities; namespace Avalonia @@ -10,7 +11,10 @@ namespace Avalonia /// Defines the reference point units of an or /// . /// - public enum RelativeUnit +#if !BUILDTASK + public +#endif + enum RelativeUnit { /// /// The point is expressed as a fraction of the containing element's size. @@ -26,7 +30,10 @@ namespace Avalonia /// /// Defines a point that may be defined relative to a containing element. /// - public readonly struct RelativePoint : IEquatable +#if !BUILDTASK + public +#endif + readonly struct RelativePoint : IEquatable { /// /// A point at the top left of the containing element. @@ -49,7 +56,9 @@ namespace Avalonia static RelativePoint() { +#if !BUILDTASK Animation.Animation.RegisterAnimator(prop => typeof(RelativePoint).IsAssignableFrom(prop.PropertyType)); +#endif } /// diff --git a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj index 6267c74df9..e9b99c9aa8 100644 --- a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj +++ b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj @@ -95,6 +95,9 @@ Markup/%(RecursiveDir)%(FileName)%(Extension) + + Markup/%(RecursiveDir)%(FileName)%(Extension) + diff --git a/src/Avalonia.Build.Tasks/Properties/launchSettings.json b/src/Avalonia.Build.Tasks/Properties/launchSettings.json new file mode 100644 index 0000000000..e9f5af46d6 --- /dev/null +++ b/src/Avalonia.Build.Tasks/Properties/launchSettings.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "Compile Sandbox": { + "commandName": "Project", + "executablePath": "$(SolutionDir)\\src\\Avalonia.Build.Tasks\\bin\\Debug\\net6.0\\Avalonia.Build.Tasks.exe", + "commandLineArgs": "$(SolutionDir)\\samples\\Sandbox\\obj\\Debug\\net6.0\\Avalonia\\original.dll $(SolutionDir)\\samples\\Sandbox\\bin\\Debug\\net6.0\\Sandbox.dll.refs $(SolutionDir)\\out.dll" + } + } +} diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs index 88529ae3a0..d907bcbef9 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs @@ -160,6 +160,29 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions return true; } + if (type.Equals(types.RelativePoint)) + { + try + { + var relativePoint = RelativePoint.Parse(text); + + var relativePointTypeRef = new XamlAstClrTypeReference(node, types.RelativePoint, false); + + result = new XamlAstNewClrObjectNode(node, relativePointTypeRef, types.RelativePointFullConstructor, new List + { + new XamlConstantNode(node, types.XamlIlTypes.Double, relativePoint.Point.X), + new XamlConstantNode(node, types.XamlIlTypes.Double, relativePoint.Point.Y), + new XamlConstantNode(node, types.RelativeUnit, (int) relativePoint.Unit), + }); + + return true; + } + catch + { + throw new XamlX.XamlLoadException($"Unable to parse \"{text}\" as a relative point", node); + } + } + if (type.Equals(types.GridLength)) { try diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs index 99072ace02..76f3cc071f 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs @@ -71,6 +71,9 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers public IXamlConstructor MatrixFullConstructor { get; } public IXamlType CornerRadius { get; } public IXamlConstructor CornerRadiusFullConstructor { get; } + public IXamlType RelativeUnit { get; } + public IXamlType RelativePoint { get; } + public IXamlConstructor RelativePointFullConstructor { get; } public IXamlType GridLength { get; } public IXamlConstructor GridLengthConstructorValueType { get; } public IXamlType Color { get; } @@ -175,6 +178,10 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers (Matrix, MatrixFullConstructor) = GetNumericTypeInfo("Avalonia.Matrix", XamlIlTypes.Double, 6); (CornerRadius, CornerRadiusFullConstructor) = GetNumericTypeInfo("Avalonia.CornerRadius", XamlIlTypes.Double, 4); + RelativeUnit = cfg.TypeSystem.GetType("Avalonia.RelativeUnit"); + RelativePoint = cfg.TypeSystem.GetType("Avalonia.RelativePoint"); + RelativePointFullConstructor = RelativePoint.GetConstructor(new List { XamlIlTypes.Double, XamlIlTypes.Double, RelativeUnit }); + GridLength = cfg.TypeSystem.GetType("Avalonia.Controls.GridLength"); GridLengthConstructorValueType = GridLength.GetConstructor(new List { XamlIlTypes.Double, cfg.TypeSystem.GetType("Avalonia.Controls.GridUnitType") }); Color = cfg.TypeSystem.GetType("Avalonia.Media.Color"); From 024dd47943e2b3c2461be965e8c102ff7fa87339 Mon Sep 17 00:00:00 2001 From: robloo Date: Fri, 15 Apr 2022 19:39:05 -0400 Subject: [PATCH 59/67] Improve color comments --- src/Avalonia.Base/Media/Color.cs | 6 +++++ src/Avalonia.Base/Media/HslColor.cs | 38 ++++++++++++++++++++++++++--- src/Avalonia.Base/Media/HsvColor.cs | 38 ++++++++++++++++++++++++++--- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs index dc22f87d49..208e359f80 100644 --- a/src/Avalonia.Base/Media/Color.cs +++ b/src/Avalonia.Base/Media/Color.cs @@ -277,6 +277,9 @@ namespace Avalonia.Media return false; } + /// + /// Parses the given span of characters representing a hex color value into a new . + /// private static bool TryParseHexFormat(ReadOnlySpan s, out Color color) { static bool TryParseCore(ReadOnlySpan input, ref Color color) @@ -331,6 +334,9 @@ namespace Avalonia.Media return TryParseCore(input, ref color); } + /// + /// Parses the given string representing a CSS color value into a new . + /// private static bool TryParseCssFormat(string s, out Color color) { color = default; diff --git a/src/Avalonia.Base/Media/HslColor.cs b/src/Avalonia.Base/Media/HslColor.cs index 622d3ac2b7..cd98c72e3f 100644 --- a/src/Avalonia.Base/Media/HslColor.cs +++ b/src/Avalonia.Base/Media/HslColor.cs @@ -12,6 +12,7 @@ namespace Avalonia.Media { /// /// Defines a color using the hue/saturation/lightness (HSL) model. + /// This uses a cylindrical-coordinate representation of a color. /// #if !BUILDTASK public @@ -98,24 +99,53 @@ namespace Avalonia.Media } /// - /// Gets the Alpha (transparency) component in the range from 0..1. + /// Gets the Alpha (transparency) component in the range from 0..1 (percentage). /// + /// + /// + /// 0 is fully transparent. + /// 1 is fully opaque. + /// + /// public double A { get; } /// - /// Gets the Hue component in the range from 0..360. + /// Gets the Hue component in the range from 0..360 (degrees). + /// This is the color's location, in degrees, on a color wheel/circle from 0 to 360. /// Note that 360 is equivalent to 0 and will be adjusted automatically. /// + /// + /// + /// 0/360 degrees is Red. + /// 60 degrees is Yellow. + /// 120 degrees is Green. + /// 180 degrees is Cyan. + /// 240 degrees is Blue. + /// 300 degrees is Magenta. + /// + /// public double H { get; } /// - /// Gets the Saturation component in the range from 0..1. + /// Gets the Saturation component in the range from 0..1 (percentage). /// + /// + /// + /// 0 is a shade of gray (no color). + /// 1 is the full color. + /// + /// public double S { get; } /// - /// Gets the Lightness component in the range from 0..1. + /// Gets the Lightness component in the range from 0..1 (percentage). /// + /// + /// + /// 0 is fully black. + /// 1 is fully white. + /// + /// public double L { get; } /// diff --git a/src/Avalonia.Base/Media/HsvColor.cs b/src/Avalonia.Base/Media/HsvColor.cs index 1e718b5739..1ef0bcc742 100644 --- a/src/Avalonia.Base/Media/HsvColor.cs +++ b/src/Avalonia.Base/Media/HsvColor.cs @@ -12,6 +12,7 @@ namespace Avalonia.Media { /// /// Defines a color using the hue/saturation/value (HSV) model. + /// This uses a cylindrical-coordinate representation of a color. /// #if !BUILDTASK public @@ -98,24 +99,53 @@ namespace Avalonia.Media } /// - /// Gets the Alpha (transparency) component in the range from 0..1. + /// Gets the Alpha (transparency) component in the range from 0..1 (percentage). /// + /// + /// + /// 0 is fully transparent. + /// 1 is fully opaque. + /// + /// public double A { get; } /// - /// Gets the Hue component in the range from 0..360. + /// Gets the Hue component in the range from 0..360 (degrees). + /// This is the color's location, in degrees, on a color wheel/circle from 0 to 360. /// Note that 360 is equivalent to 0 and will be adjusted automatically. /// + /// + /// + /// 0/360 degrees is Red. + /// 60 degrees is Yellow. + /// 120 degrees is Green. + /// 180 degrees is Cyan. + /// 240 degrees is Blue. + /// 300 degrees is Magenta. + /// + /// public double H { get; } /// - /// Gets the Saturation component in the range from 0..1. + /// Gets the Saturation component in the range from 0..1 (percentage). /// + /// + /// + /// 0 is a shade of gray (no color). + /// 1 is the full color. + /// + /// public double S { get; } /// - /// Gets the Value component in the range from 0..1. + /// Gets the Value (or Brightness/Intensity) component in the range from 0..1 (percentage). /// + /// + /// + /// 0 is fully black and shows no color. + /// 1 is the brightest and shows full color. + /// + /// public double V { get; } /// From a7dc94b3cde14fa5faa8b5d38f2a07341a7702c3 Mon Sep 17 00:00:00 2001 From: robloo Date: Fri, 15 Apr 2022 19:54:11 -0400 Subject: [PATCH 60/67] More strictly match color prefixes --- src/Avalonia.Base/Media/Color.cs | 12 +++++++++++- src/Avalonia.Base/Media/HslColor.cs | 10 ++++++++-- src/Avalonia.Base/Media/HsvColor.cs | 10 ++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs index 208e359f80..cb90404f6d 100644 --- a/src/Avalonia.Base/Media/Color.cs +++ b/src/Avalonia.Base/Media/Color.cs @@ -339,6 +339,8 @@ namespace Avalonia.Media /// private static bool TryParseCssFormat(string s, out Color color) { + bool prefixMatched = false; + color = default; if (s is null) @@ -359,13 +361,21 @@ namespace Avalonia.Media workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(5, workingString.Length - 6); + prefixMatched = true; } - if (workingString.Length >= 10 && + if (prefixMatched == false && + workingString.Length >= 10 && workingString.StartsWith("rgb(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(4, workingString.Length - 5); + prefixMatched = true; + } + + if (prefixMatched == false) + { + return false; } string[] components = workingString.Split(','); diff --git a/src/Avalonia.Base/Media/HslColor.cs b/src/Avalonia.Base/Media/HslColor.cs index cd98c72e3f..e8a4d6f94f 100644 --- a/src/Avalonia.Base/Media/HslColor.cs +++ b/src/Avalonia.Base/Media/HslColor.cs @@ -256,6 +256,8 @@ namespace Avalonia.Media /// True if parsing was successful; otherwise, false. public static bool TryParse(string s, out HslColor hslColor) { + bool prefixMatched = false; + hslColor = default; if (s is null) @@ -279,15 +281,19 @@ namespace Avalonia.Media workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(5, workingString.Length - 6); + prefixMatched = true; } - if (workingString.Length >= 10 && + if (prefixMatched == false && + workingString.Length >= 10 && workingString.StartsWith("hsl(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(4, workingString.Length - 5); + prefixMatched = true; } - else + + if (prefixMatched == false) { return false; } diff --git a/src/Avalonia.Base/Media/HsvColor.cs b/src/Avalonia.Base/Media/HsvColor.cs index 1ef0bcc742..924ef4778b 100644 --- a/src/Avalonia.Base/Media/HsvColor.cs +++ b/src/Avalonia.Base/Media/HsvColor.cs @@ -256,6 +256,8 @@ namespace Avalonia.Media /// True if parsing was successful; otherwise, false. public static bool TryParse(string s, out HsvColor hsvColor) { + bool prefixMatched = false; + hsvColor = default; if (s is null) @@ -279,15 +281,19 @@ namespace Avalonia.Media workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(5, workingString.Length - 6); + prefixMatched = true; } - if (workingString.Length >= 10 && + if (prefixMatched == false && + workingString.Length >= 10 && workingString.StartsWith("hsv(", StringComparison.OrdinalIgnoreCase) && workingString.EndsWith(")", StringComparison.Ordinal)) { workingString = workingString.Substring(4, workingString.Length - 5); + prefixMatched = true; } - else + + if (prefixMatched == false) { return false; } From 26e219404cbb920849e818f8f5e8eb804b302dd0 Mon Sep 17 00:00:00 2001 From: robloo Date: Fri, 15 Apr 2022 21:37:23 -0400 Subject: [PATCH 61/67] Add TemplatePart attributes for DataGrid controls --- src/Avalonia.Controls.DataGrid/DataGrid.cs | 8 ++++++++ src/Avalonia.Controls.DataGrid/DataGridCell.cs | 1 + src/Avalonia.Controls.DataGrid/DataGridRow.cs | 5 +++++ src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs | 6 ++++++ src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs | 1 + 5 files changed, 21 insertions(+) diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs index 9b67c9b096..aaac3f8f9c 100644 --- a/src/Avalonia.Controls.DataGrid/DataGrid.cs +++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs @@ -32,6 +32,14 @@ namespace Avalonia.Controls /// /// Displays data in a customizable grid. /// + [TemplatePart(DATAGRID_elementBottomRightCornerHeaderName, typeof(IVisual))] + [TemplatePart(DATAGRID_elementColumnHeadersPresenterName, typeof(DataGridColumnHeadersPresenter))] + [TemplatePart(DATAGRID_elementFrozenColumnScrollBarSpacerName, typeof(Control))] + [TemplatePart(DATAGRID_elementHorizontalScrollbarName, typeof(ScrollBar))] + [TemplatePart(DATAGRID_elementRowsPresenterName, typeof(DataGridRowsPresenter))] + [TemplatePart(DATAGRID_elementTopLeftCornerHeaderName, typeof(ContentControl))] + [TemplatePart(DATAGRID_elementTopRightCornerHeaderName, typeof(ContentControl))] + [TemplatePart(DATAGRID_elementVerticalScrollbarName, typeof(ScrollBar))] [PseudoClasses(":invalid", ":empty-rows", ":empty-columns")] public partial class DataGrid : TemplatedControl { diff --git a/src/Avalonia.Controls.DataGrid/DataGridCell.cs b/src/Avalonia.Controls.DataGrid/DataGridCell.cs index e3f150f5c4..67183781d3 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridCell.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridCell.cs @@ -13,6 +13,7 @@ namespace Avalonia.Controls /// /// Represents an individual cell. /// + [TemplatePart(DATAGRIDCELL_elementRightGridLine, typeof(Rectangle))] [PseudoClasses(":selected", ":current", ":edited", ":invalid")] public class DataGridCell : ContentControl { diff --git a/src/Avalonia.Controls.DataGrid/DataGridRow.cs b/src/Avalonia.Controls.DataGrid/DataGridRow.cs index a6faec752d..db5d428942 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridRow.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridRow.cs @@ -21,6 +21,11 @@ namespace Avalonia.Controls /// /// Represents a row. /// + [TemplatePart(DATAGRIDROW_elementBottomGridLine, typeof(Rectangle))] + [TemplatePart(DATAGRIDROW_elementCells, typeof(DataGridCellsPresenter))] + [TemplatePart(DATAGRIDROW_elementDetails, typeof(DataGridDetailsPresenter))] + [TemplatePart(DATAGRIDROW_elementRoot, typeof(Panel))] + [TemplatePart(DATAGRIDROW_elementRowHeader, typeof(DataGridRowHeader))] [PseudoClasses(":selected", ":editing", ":invalid")] public class DataGridRow : TemplatedControl { diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs index 49ca23d34c..a3dfa44fc9 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs @@ -14,6 +14,12 @@ using System.Reactive.Linq; namespace Avalonia.Controls { + [TemplatePart(DATAGRIDROWGROUPHEADER_expanderButton, typeof(ToggleButton))] + [TemplatePart(DATAGRIDROWGROUPHEADER_indentSpacer, typeof(Control))] + [TemplatePart(DATAGRIDROWGROUPHEADER_itemCountElement, typeof(TextBlock))] + [TemplatePart(DATAGRIDROWGROUPHEADER_propertyNameElement, typeof(TextBlock))] + [TemplatePart(DataGridRow.DATAGRIDROW_elementRoot, typeof(Panel))] + [TemplatePart(DataGridRow.DATAGRIDROW_elementRowHeader, typeof(DataGridRowHeader))] [PseudoClasses(":pressed", ":current", ":expanded")] public class DataGridRowGroupHeader : TemplatedControl { diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs index 510072174f..03299bbf35 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs @@ -13,6 +13,7 @@ namespace Avalonia.Controls.Primitives /// /// Represents an individual row header. /// + [TemplatePart(DATAGRIDROWHEADER_elementRootName, typeof(Control))] [PseudoClasses(":invalid", ":selected", ":editing", ":current")] public class DataGridRowHeader : ContentControl { From 18e7a11a023b5283373303030b353a2fed8bb1c9 Mon Sep 17 00:00:00 2001 From: Steven He Date: Sat, 16 Apr 2022 15:41:16 +0800 Subject: [PATCH 62/67] Implement IncrementalGenerator --- src/Avalonia.Base/Animation/Easings/Easing.cs | 11 +- .../IsExternalInit.cs | 14 ++ .../SubtypesFactoryGenerator.cs | 234 +++++++++--------- 3 files changed, 131 insertions(+), 128 deletions(-) create mode 100644 src/Avalonia.SourceGenerator/IsExternalInit.cs diff --git a/src/Avalonia.Base/Animation/Easings/Easing.cs b/src/Avalonia.Base/Animation/Easings/Easing.cs index 6dfc4c86b3..d4f817ccc3 100644 --- a/src/Avalonia.Base/Animation/Easings/Easing.cs +++ b/src/Avalonia.Base/Animation/Easings/Easing.cs @@ -37,14 +37,9 @@ namespace Avalonia.Animation.Easings return new SplineEasing(KeySpline.Parse(e, CultureInfo.InvariantCulture)); } - if (TryCreateEasingInstance(e, out var easing)) - { - return easing; - } - else - { - throw new FormatException($"Easing \"{e}\" was not found in {Namespace} namespace."); - } + return TryCreateEasingInstance(e, out var easing) + ? easing + : throw new FormatException($"Easing \"{e}\" was not found in {Namespace} namespace."); } } } diff --git a/src/Avalonia.SourceGenerator/IsExternalInit.cs b/src/Avalonia.SourceGenerator/IsExternalInit.cs new file mode 100644 index 0000000000..c6ddf762ad --- /dev/null +++ b/src/Avalonia.SourceGenerator/IsExternalInit.cs @@ -0,0 +1,14 @@ +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; + +namespace System.Runtime.CompilerServices +{ + /// + /// Reserved to be used by the compiler for tracking metadata. + /// This class should not be used by developers in source code. + /// + [ExcludeFromCodeCoverage, DebuggerNonUserCode] + internal static class IsExternalInit + { + } +} diff --git a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs index 7bc240853e..6ba1f6ac18 100644 --- a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs +++ b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs @@ -1,140 +1,48 @@ -using System.Collections.Generic; +using System; +using System.Collections.Immutable; using System.Linq; +using System.Threading; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace Avalonia.SourceGenerator { - internal class GenerateSubtypesSyntaxReceiver : ISyntaxReceiver + [Generator(LanguageNames.CSharp)] + public class SubtypesFactoryGenerator : IIncrementalGenerator { - public List<(MethodDeclarationSyntax, AttributeSyntax)> CandidateMethods { get; } = new(); - public List Types { get; } = new(); - - public void OnVisitSyntaxNode(SyntaxNode syntaxNode) - { - if (syntaxNode is MethodDeclarationSyntax declarationSyntax) - { - foreach (var attribute in declarationSyntax.AttributeLists.SelectMany(i => i.Attributes)) - { - CandidateMethods.Add((declarationSyntax, attribute)); - } - } - - if (syntaxNode is ClassDeclarationSyntax or StructDeclarationSyntax) - { - Types.Add(syntaxNode); - } - } - } - - [Generator] - internal class SubtypesFactoryGenerator : ISourceGenerator - { - private readonly GenerateSubtypesSyntaxReceiver _receiver = new(); + private record MethodTarget(IMethodSymbol Method, ITypeSymbol BaseType, string Namespace); private static readonly string s_attributeName = typeof(SubtypesFactoryAttribute).FullName; - public void Execute(GeneratorExecutionContext context) + private static bool IsSubtypeOf(ITypeSymbol type, ITypeSymbol baseType) { - var methods = new List<(IMethodSymbol, ITypeSymbol, string)>(); - - foreach (var (method, attribute) in _receiver.CandidateMethods) - { - var semanticModel = context.Compilation.GetSemanticModel(method.SyntaxTree); - var attributeTypeInfo = semanticModel.GetTypeInfo(attribute); - if (attributeTypeInfo.Type is null || - attributeTypeInfo.Type.ToString() != s_attributeName || - attribute.ArgumentList is null) - { - continue; - } - - var arguments = attribute.ArgumentList.Arguments; - if (arguments.Count != 2) - { - continue; - } - - if (arguments[0].Expression is not TypeOfExpressionSyntax typeOfExpr || - arguments[1].Expression is not LiteralExpressionSyntax and not IdentifierNameSyntax) - { - continue; - } - - var type = semanticModel.GetTypeInfo(typeOfExpr.Type); - var ns = semanticModel.GetConstantValue(arguments[1].Expression); - var methodDeclInfo = semanticModel.GetDeclaredSymbol(method); - - if (type.Type is not ITypeSymbol baseType || - ns.HasValue is false || - ns.Value is not string nsValue || - methodDeclInfo is not IMethodSymbol methodSymbol || - methodSymbol.Parameters.Length != 2 || - methodSymbol.Parameters[1].RefKind != RefKind.Out) - { - continue; - } - - methods.Add((methodSymbol, baseType, nsValue)); - } - - var types = new List(); - foreach (var type in _receiver.Types) - { - var semanticModel = context.Compilation.GetSemanticModel(type.SyntaxTree); - var decl = semanticModel.GetDeclaredSymbol(type); - if (decl is ITypeSymbol typeSymbol) - { - types.Add(typeSymbol); - } - } - - GenerateSubTypes(context, methods, types); + return type.BaseType is not null && (SymbolEqualityComparer.Default.Equals(type.BaseType, baseType) || IsSubtypeOf(type.BaseType, baseType)); } - private bool IsSubtypeOf(ITypeSymbol type, ITypeSymbol baseType) + private static void GenerateSubTypes(SourceProductionContext context, MethodTarget methodTarget, ImmutableArray types) { - if (type.BaseType is null) - { - return false; - } + var (method, baseType, @namespace) = methodTarget; + var candidateTypes = types.Where(i => IsSubtypeOf(i, baseType)).Where(i => $"{i.ContainingNamespace}.".StartsWith($"{@namespace}.")).ToArray(); + var type = method.ContainingType; + var isGeneric = type.TypeParameters.Length > 0; + var isClass = type.TypeKind == TypeKind.Class; - if (SymbolEqualityComparer.Default.Equals(type.BaseType, baseType)) + if (method.DeclaringSyntaxReferences.FirstOrDefault()?.GetSyntax() is not MethodDeclarationSyntax methodDecl) { - return true; + return; } - return IsSubtypeOf(type.BaseType, baseType); - } + var parameters = new SeparatedSyntaxList().AddRange(methodDecl.ParameterList.Parameters.Select(i => i.WithAttributeLists(new SyntaxList()))); - private void GenerateSubTypes( - GeneratorExecutionContext context, - List<(IMethodSymbol Method, ITypeSymbol BaseType, string Namespace)> methods, - List types) - { - foreach (var (method, baseType, @namespace) in methods) - { - var candidateTypes = types.Where(i => IsSubtypeOf(i, baseType)).Where(i => $"{i.ContainingNamespace}.".StartsWith($"{@namespace}.")).ToArray(); - var type = method.ContainingType; - var isGeneric = type.TypeParameters.Length > 0; - var isClass = type.TypeKind == TypeKind.Class; - - if (method.DeclaringSyntaxReferences.FirstOrDefault()?.GetSyntax() is not MethodDeclarationSyntax methodDecl) - { - continue; - } + var methodDeclText = methodDecl + .WithAttributeLists(new SyntaxList()) + .WithParameterList(methodDecl.ParameterList.WithParameters(parameters)) + .WithBody(null) + .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None)) + .WithoutTrivia().ToString(); - var parameters = new SeparatedSyntaxList().AddRange(methodDecl.ParameterList.Parameters.Select(i => i.WithAttributeLists(new SyntaxList()))); - - var methodDeclText = methodDecl - .WithAttributeLists(new SyntaxList()) - .WithParameterList(methodDecl.ParameterList.WithParameters(parameters)) - .WithBody(null) - .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None)) - .WithoutTrivia().ToString(); - - var typeDecl = $"partial {(isClass ? "class" : "struct")} {type.Name}{(isGeneric ? $"<{string.Join(", ", type.TypeParameters)}>" : "")}"; - var source = $@"using System; + var typeDecl = $"partial {(isClass ? "class" : "struct")} {type.Name}{(isGeneric ? $"<{string.Join(", ", type.TypeParameters)}>" : "")}"; + var source = $@"using System; using System.Collections.Generic; namespace {method.ContainingNamespace} @@ -155,13 +63,99 @@ namespace {method.ContainingNamespace} }} }}"; - context.AddSource($"{type}.{method.MetadataName}.gen.cs", source); + context.AddSource($"{type}.{method.MetadataName}.gen.cs", source); + } + + private static MethodTarget? PopulateMethodTargets(GeneratorSyntaxContext context, CancellationToken token) + { + token.ThrowIfCancellationRequested(); + if (context.Node is MethodDeclarationSyntax method) + { + var attributes = method.AttributeLists.SelectMany(i => i.Attributes); + var semanticModel = context.SemanticModel; + foreach (var attribute in attributes) + { + var attributeTypeInfo = semanticModel.GetTypeInfo(attribute); + if (attributeTypeInfo.Type is null || + attributeTypeInfo.Type.ToString() != s_attributeName || + attribute.ArgumentList is null) + { + continue; + } + + var arguments = attribute.ArgumentList.Arguments; + if (arguments.Count != 2) + { + continue; + } + + if (arguments[0].Expression is not TypeOfExpressionSyntax typeOfExpr || + arguments[1].Expression is not LiteralExpressionSyntax and not IdentifierNameSyntax) + { + continue; + } + + var type = semanticModel.GetTypeInfo(typeOfExpr.Type); + var ns = semanticModel.GetConstantValue(arguments[1].Expression); + var methodDeclInfo = semanticModel.GetDeclaredSymbol(method); + + if (type.Type is not ITypeSymbol baseType || + ns.HasValue is false || + ns.Value is not string nsValue || + methodDeclInfo is not IMethodSymbol methodSymbol || + methodSymbol.Parameters.Length != 2 || + methodSymbol.Parameters[1].RefKind != RefKind.Out) + { + continue; + } + + return new MethodTarget(methodSymbol, baseType, nsValue); + } } + + return null; } - public void Initialize(GeneratorInitializationContext context) + public void Initialize(IncrementalGeneratorInitializationContext context) { - context.RegisterForSyntaxNotifications(() => _receiver); + var typesProvider = context.SyntaxProvider.CreateSyntaxProvider( + static (syntaxNode, token) => + { + token.ThrowIfCancellationRequested(); + return syntaxNode is ClassDeclarationSyntax or StructDeclarationSyntax; + }, + static (syntaxContext, token) => + { + token.ThrowIfCancellationRequested(); + return syntaxContext.Node is ClassDeclarationSyntax or StructDeclarationSyntax && + syntaxContext.SemanticModel.GetDeclaredSymbol(syntaxContext.Node) is ITypeSymbol typeSymbol + ? typeSymbol : null; + }) + .SelectMany((type, token) => + { + token.ThrowIfCancellationRequested(); + return type is null ? Array.Empty() : new ITypeSymbol[] { type }; + }); + + var methodsProvider = context.SyntaxProvider.CreateSyntaxProvider( + static (syntaxNode, token) => + { + token.ThrowIfCancellationRequested(); + return syntaxNode is ClassDeclarationSyntax or StructDeclarationSyntax or MethodDeclarationSyntax { AttributeLists.Count: > 0 }; + }, PopulateMethodTargets) + .SelectMany((method, token) => + { + token.ThrowIfCancellationRequested(); + return method is null ? Array.Empty() : new MethodTarget[] { method }; + }); + + var generateContext = methodsProvider.Combine(typesProvider.Collect()); + + context.RegisterSourceOutput(generateContext, static (sourceContext, source) => + { + sourceContext.CancellationToken.ThrowIfCancellationRequested(); + GenerateSubTypes(sourceContext, source.Left, source.Right); + }); } } } From b4a5d2e88a51e52b9fadb3f1bfe1969d73ea8826 Mon Sep 17 00:00:00 2001 From: Steven He Date: Sat, 16 Apr 2022 15:45:25 +0800 Subject: [PATCH 63/67] Use record struct --- src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs index 6ba1f6ac18..dbdef5e089 100644 --- a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs +++ b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs @@ -11,7 +11,7 @@ namespace Avalonia.SourceGenerator [Generator(LanguageNames.CSharp)] public class SubtypesFactoryGenerator : IIncrementalGenerator { - private record MethodTarget(IMethodSymbol Method, ITypeSymbol BaseType, string Namespace); + private record struct MethodTarget(IMethodSymbol Method, ITypeSymbol BaseType, string Namespace); private static readonly string s_attributeName = typeof(SubtypesFactoryAttribute).FullName; private static bool IsSubtypeOf(ITypeSymbol type, ITypeSymbol baseType) @@ -146,7 +146,7 @@ namespace {method.ContainingNamespace} .SelectMany((method, token) => { token.ThrowIfCancellationRequested(); - return method is null ? Array.Empty() : new MethodTarget[] { method }; + return method is null ? Array.Empty() : new MethodTarget[] { method.Value }; }); var generateContext = methodsProvider.Combine(typesProvider.Collect()); From de771d6fc49cdd1b8d5043e4a6b0730ff5350698 Mon Sep 17 00:00:00 2001 From: Steven He Date: Sat, 16 Apr 2022 15:46:33 +0800 Subject: [PATCH 64/67] Remove unnecessary nodes in MethodTargets --- src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs index dbdef5e089..10c18580b3 100644 --- a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs +++ b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs @@ -141,7 +141,7 @@ namespace {method.ContainingNamespace} static (syntaxNode, token) => { token.ThrowIfCancellationRequested(); - return syntaxNode is ClassDeclarationSyntax or StructDeclarationSyntax or MethodDeclarationSyntax { AttributeLists.Count: > 0 }; + return syntaxNode is MethodDeclarationSyntax { AttributeLists.Count: > 0 }; }, PopulateMethodTargets) .SelectMany((method, token) => { From d7a098b75e39c84db552aa620e4bd34d2d448758 Mon Sep 17 00:00:00 2001 From: Steven He Date: Sat, 16 Apr 2022 15:51:05 +0800 Subject: [PATCH 65/67] Avoid reparse source in codegen stage --- .../SubtypesFactoryGenerator.cs | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs index 10c18580b3..4fc9397e7a 100644 --- a/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs +++ b/src/Avalonia.SourceGenerator/SubtypesFactoryGenerator.cs @@ -11,7 +11,7 @@ namespace Avalonia.SourceGenerator [Generator(LanguageNames.CSharp)] public class SubtypesFactoryGenerator : IIncrementalGenerator { - private record struct MethodTarget(IMethodSymbol Method, ITypeSymbol BaseType, string Namespace); + private record struct MethodTarget(IMethodSymbol Method, string MethodDecl, ITypeSymbol BaseType, string Namespace); private static readonly string s_attributeName = typeof(SubtypesFactoryAttribute).FullName; private static bool IsSubtypeOf(ITypeSymbol type, ITypeSymbol baseType) @@ -21,26 +21,12 @@ namespace Avalonia.SourceGenerator private static void GenerateSubTypes(SourceProductionContext context, MethodTarget methodTarget, ImmutableArray types) { - var (method, baseType, @namespace) = methodTarget; + var (method, methodDecl, baseType, @namespace) = methodTarget; var candidateTypes = types.Where(i => IsSubtypeOf(i, baseType)).Where(i => $"{i.ContainingNamespace}.".StartsWith($"{@namespace}.")).ToArray(); var type = method.ContainingType; var isGeneric = type.TypeParameters.Length > 0; var isClass = type.TypeKind == TypeKind.Class; - if (method.DeclaringSyntaxReferences.FirstOrDefault()?.GetSyntax() is not MethodDeclarationSyntax methodDecl) - { - return; - } - - var parameters = new SeparatedSyntaxList().AddRange(methodDecl.ParameterList.Parameters.Select(i => i.WithAttributeLists(new SyntaxList()))); - - var methodDeclText = methodDecl - .WithAttributeLists(new SyntaxList()) - .WithParameterList(methodDecl.ParameterList.WithParameters(parameters)) - .WithBody(null) - .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None)) - .WithoutTrivia().ToString(); - var typeDecl = $"partial {(isClass ? "class" : "struct")} {type.Name}{(isGeneric ? $"<{string.Join(", ", type.TypeParameters)}>" : "")}"; var source = $@"using System; using System.Collections.Generic; @@ -49,7 +35,7 @@ namespace {method.ContainingNamespace} {{ {typeDecl} {{ - {methodDeclText} + {methodDecl} {{ var hasMatch = false; (hasMatch, {method.Parameters[1].Name}) = {method.Parameters[0].Name} switch @@ -109,7 +95,15 @@ namespace {method.ContainingNamespace} continue; } - return new MethodTarget(methodSymbol, baseType, nsValue); + var parameters = new SeparatedSyntaxList().AddRange(method.ParameterList.Parameters.Select(i => i.WithAttributeLists(new SyntaxList()))); + var methodDecl = method + .WithAttributeLists(new SyntaxList()) + .WithParameterList(method.ParameterList.WithParameters(parameters)) + .WithBody(null) + .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None)) + .WithoutTrivia().ToString(); + + return new MethodTarget(methodSymbol, methodDecl, baseType, nsValue); } } From d79854ec54df61a7377cd475e012771aa49a55f2 Mon Sep 17 00:00:00 2001 From: Steven He Date: Sat, 16 Apr 2022 21:38:51 +0800 Subject: [PATCH 66/67] Remove rd.xml --- .../ControlCatalog.NetCore/ControlCatalog.NetCore.csproj | 5 ++--- samples/ControlCatalog.NetCore/rd.xml | 7 ------- 2 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 samples/ControlCatalog.NetCore/rd.xml diff --git a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj index d1b657722c..2b45ac1508 100644 --- a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj +++ b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj @@ -6,7 +6,7 @@ true - + true https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json 7.0.0-* @@ -22,12 +22,11 @@ - + - diff --git a/samples/ControlCatalog.NetCore/rd.xml b/samples/ControlCatalog.NetCore/rd.xml deleted file mode 100644 index 27db7f34ca..0000000000 --- a/samples/ControlCatalog.NetCore/rd.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From d5e049e70a6f9d8a3c6c0fdbda8686dfa82456ee Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 16 Apr 2022 17:41:38 +0300 Subject: [PATCH 67/67] Fixed path to DevAnalyzers.csproj Linux uses case-sensetive file systems, so MSBuild was unable to find the file --- build/DevAnalyzers.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DevAnalyzers.props b/build/DevAnalyzers.props index 28959dbd47..14e4f6a563 100644 --- a/build/DevAnalyzers.props +++ b/build/DevAnalyzers.props @@ -1,6 +1,6 @@ -