From 1f06e4af50ae9ff56d4af8869cf0cdf0298e98ba Mon Sep 17 00:00:00 2001 From: Vitalii Orazov Date: Sun, 2 Jul 2023 13:31:33 +0300 Subject: [PATCH 01/72] use real data formats while storing atoms early --- src/Avalonia.X11/X11Clipboard.cs | 37 +++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/Avalonia.X11/X11Clipboard.cs b/src/Avalonia.X11/X11Clipboard.cs index 6e18151fae..bed0a8cebf 100644 --- a/src/Avalonia.X11/X11Clipboard.cs +++ b/src/Avalonia.X11/X11Clipboard.cs @@ -82,18 +82,9 @@ namespace Avalonia.X11 Encoding textEnc; if (target == _x11.Atoms.TARGETS) { - var atoms = new HashSet { _x11.Atoms.TARGETS, _x11.Atoms.MULTIPLE }; - foreach (var fmt in _storedDataObject.GetDataFormats()) - { - if (fmt == DataFormats.Text) - foreach (var ta in _textAtoms) - atoms.Add(ta); - else - atoms.Add(_x11.Atoms.GetAtom(fmt)); - } - + var atoms = ConvertDataObject(_storedDataObject); XChangeProperty(_x11.Display, window, property, - _x11.Atoms.XA_ATOM, 32, PropertyMode.Replace, atoms.ToArray(), atoms.Count); + _x11.Atoms.XA_ATOM, 32, PropertyMode.Replace, atoms, atoms.Length); return property; } else if(target == _x11.Atoms.SAVE_TARGETS && _x11.Atoms.SAVE_TARGETS != IntPtr.Zero) @@ -252,13 +243,29 @@ namespace Avalonia.X11 return (string)await SendDataRequest(target); } - private void StoreAtomsInClipboardManager(IntPtr[] atoms) + + private IntPtr[] ConvertDataObject(IDataObject data) + { + var atoms = new HashSet { _x11.Atoms.TARGETS, _x11.Atoms.MULTIPLE }; + foreach (var fmt in data.GetDataFormats()) + { + if (fmt == DataFormats.Text) + foreach (var ta in _textAtoms) + atoms.Add(ta); + else + atoms.Add(_x11.Atoms.GetAtom(fmt)); + } + return atoms.ToArray(); + } + + private void StoreAtomsInClipboardManager(IDataObject data) { if (_x11.Atoms.CLIPBOARD_MANAGER != IntPtr.Zero && _x11.Atoms.SAVE_TARGETS != IntPtr.Zero) { var clipboardManager = XGetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD_MANAGER); if (clipboardManager != IntPtr.Zero) - { + { + var atoms = ConvertDataObject(data); XChangeProperty(_x11.Display, _handle, _avaloniaSaveTargetsAtom, _x11.Atoms.XA_ATOM, 32, PropertyMode.Replace, atoms, atoms.Length); @@ -283,8 +290,8 @@ namespace Avalonia.X11 public Task SetDataObjectAsync(IDataObject data) { _storedDataObject = data; - XSetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD, _handle, IntPtr.Zero); - StoreAtomsInClipboardManager(_textAtoms); + XSetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD, _handle, IntPtr.Zero); + StoreAtomsInClipboardManager(data); return Task.CompletedTask; } From 0d1f7fac56936312c2d4249eb182ea6ae137dd35 Mon Sep 17 00:00:00 2001 From: Vitalii Orazov Date: Sun, 2 Jul 2023 14:19:10 +0300 Subject: [PATCH 02/72] await for completion when storing atoms early --- src/Avalonia.X11/X11Clipboard.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.X11/X11Clipboard.cs b/src/Avalonia.X11/X11Clipboard.cs index bed0a8cebf..53190b0f3e 100644 --- a/src/Avalonia.X11/X11Clipboard.cs +++ b/src/Avalonia.X11/X11Clipboard.cs @@ -14,6 +14,7 @@ namespace Avalonia.X11 private readonly X11Info _x11; private IDataObject _storedDataObject; private IntPtr _handle; + private TaskCompletionSource _storeAtomTcs; private TaskCompletionSource _requestedFormatsTcs; private TaskCompletionSource _requestedDataTcs; private readonly IntPtr[] _textAtoms; @@ -52,6 +53,12 @@ namespace Avalonia.X11 private unsafe void OnEvent(ref XEvent ev) { + if (ev.type == XEventName.SelectionClear) + { + _storeAtomTcs?.TrySetResult(); + return; + } + if (ev.type == XEventName.SelectionRequest) { var sel = ev.SelectionRequestEvent; @@ -258,21 +265,26 @@ namespace Avalonia.X11 return atoms.ToArray(); } - private void StoreAtomsInClipboardManager(IDataObject data) + private Task StoreAtomsInClipboardManager(IDataObject data) { if (_x11.Atoms.CLIPBOARD_MANAGER != IntPtr.Zero && _x11.Atoms.SAVE_TARGETS != IntPtr.Zero) { var clipboardManager = XGetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD_MANAGER); if (clipboardManager != IntPtr.Zero) - { + { + if (_storeAtomTcs == null || _storeAtomTcs.Task.IsCompleted) + _storeAtomTcs = new TaskCompletionSource(); + var atoms = ConvertDataObject(data); XChangeProperty(_x11.Display, _handle, _avaloniaSaveTargetsAtom, _x11.Atoms.XA_ATOM, 32, PropertyMode.Replace, atoms, atoms.Length); XConvertSelection(_x11.Display, _x11.Atoms.CLIPBOARD_MANAGER, _x11.Atoms.SAVE_TARGETS, _avaloniaSaveTargetsAtom, _handle, IntPtr.Zero); + return _storeAtomTcs.Task; } } + return Task.CompletedTask; } public Task SetTextAsync(string text) @@ -291,8 +303,7 @@ namespace Avalonia.X11 { _storedDataObject = data; XSetSelectionOwner(_x11.Display, _x11.Atoms.CLIPBOARD, _handle, IntPtr.Zero); - StoreAtomsInClipboardManager(data); - return Task.CompletedTask; + return StoreAtomsInClipboardManager(data); } public async Task GetFormatsAsync() From 22f68362b6af22a1ebdb39373a2aa142dd468f1c Mon Sep 17 00:00:00 2001 From: Vitalii Orazov Date: Sun, 2 Jul 2023 19:47:19 +0300 Subject: [PATCH 03/72] fix error CS0305: Using the generic type 'TaskCompletionSource' requires 1 type arguments --- src/Avalonia.X11/X11Clipboard.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.X11/X11Clipboard.cs b/src/Avalonia.X11/X11Clipboard.cs index 53190b0f3e..637d44d617 100644 --- a/src/Avalonia.X11/X11Clipboard.cs +++ b/src/Avalonia.X11/X11Clipboard.cs @@ -14,7 +14,7 @@ namespace Avalonia.X11 private readonly X11Info _x11; private IDataObject _storedDataObject; private IntPtr _handle; - private TaskCompletionSource _storeAtomTcs; + private TaskCompletionSource _storeAtomTcs; private TaskCompletionSource _requestedFormatsTcs; private TaskCompletionSource _requestedDataTcs; private readonly IntPtr[] _textAtoms; @@ -55,7 +55,7 @@ namespace Avalonia.X11 { if (ev.type == XEventName.SelectionClear) { - _storeAtomTcs?.TrySetResult(); + _storeAtomTcs?.TrySetResult(true); return; } @@ -273,7 +273,7 @@ namespace Avalonia.X11 if (clipboardManager != IntPtr.Zero) { if (_storeAtomTcs == null || _storeAtomTcs.Task.IsCompleted) - _storeAtomTcs = new TaskCompletionSource(); + _storeAtomTcs = new TaskCompletionSource(); var atoms = ConvertDataObject(data); XChangeProperty(_x11.Display, _handle, _avaloniaSaveTargetsAtom, _x11.Atoms.XA_ATOM, 32, From 03ec924d6bfeff81a21b69014c669882e4547130 Mon Sep 17 00:00:00 2001 From: Mike James Date: Mon, 3 Jul 2023 12:29:00 +0200 Subject: [PATCH 04/72] Update readme.md Resolving #12013 --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e9cd220714..24a3b7bd8c 100644 --- a/readme.md +++ b/readme.md @@ -17,7 +17,7 @@ Considered by many to be the spiritual successor to WPF, Avalonia UI provides a For those seeking a cross-platform WPF, we have created [Avalonia XPF](https://avaloniaui.net/xpf), enabling WPF applications to run on macOS and Linux with little to no code changes. Avalonia XPF is a commercial product and is licensed per-app, per-platform. #### Roadmap -To see the status of some of our features, please see our [Roadmap](https://github.com/AvaloniaUI/Avalonia/issues/2239). +To see the status of some of our features, look at our [Roadmap](https://github.com/AvaloniaUI/Avalonia/issues/2239). #### Breaking Changes You can also see what [breaking changes](https://github.com/AvaloniaUI/Avalonia/issues/3538) we have planned and what our [past breaking changes](https://github.com/AvaloniaUI/Avalonia/wiki/Breaking-Changes) have been. From b51341609857cb912716dfbb746295ef5b1c9244 Mon Sep 17 00:00:00 2001 From: yanlinlin Date: Tue, 4 Jul 2023 09:35:28 +0000 Subject: [PATCH 05/72] Add event trigger time in DevTools. #11338 --- .../Diagnostics/ViewModels/EventTreeNode.cs | 3 ++- .../Diagnostics/ViewModels/FiredEvent.cs | 5 ++++- .../Diagnostics/Views/EventsPageView.xaml | 10 ++++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs index 785fd49983..0002107ee0 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs @@ -72,12 +72,13 @@ namespace Avalonia.Diagnostics.ViewModels var s = sender!; var handled = e.Handled; var route = e.Route; + var triggerTime = DateTime.Now; void handler() { if (_currentEvent == null || !_currentEvent.IsPartOfSameEventChain(e)) { - _currentEvent = new FiredEvent(e, new EventChainLink(s, handled, route)); + _currentEvent = new FiredEvent(e, new EventChainLink(s, handled, route), triggerTime); _parentViewModel.RecordedEvents.Add(_currentEvent); diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs index a9f3182bef..1eab9afe8a 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs @@ -10,11 +10,12 @@ namespace Avalonia.Diagnostics.ViewModels private readonly RoutedEventArgs _eventArgs; private EventChainLink? _handledBy; - public FiredEvent(RoutedEventArgs eventArgs, EventChainLink originator) + public FiredEvent(RoutedEventArgs eventArgs, EventChainLink originator, DateTime triggerTime) { _eventArgs = eventArgs ?? throw new ArgumentNullException(nameof(eventArgs)); Originator = originator ?? throw new ArgumentNullException(nameof(originator)); AddToChain(originator); + TriggerTime = triggerTime; } public bool IsPartOfSameEventChain(RoutedEventArgs e) @@ -22,6 +23,8 @@ namespace Avalonia.Diagnostics.ViewModels return e == _eventArgs; } + public DateTime TriggerTime { get; } + public RoutedEvent Event => _eventArgs.RoutedEvent!; public bool IsHandled => HandledBy?.Handled == true; diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml b/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml index 54c2f06709..c18b8cf003 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml +++ b/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml @@ -77,21 +77,23 @@ - + - + + + - + - + From 7cd2350b682e7b503e370695a621e69f55d7eb20 Mon Sep 17 00:00:00 2001 From: Yoh Deadfall Date: Tue, 4 Jul 2023 22:40:48 +0300 Subject: [PATCH 06/72] Removed redundant Source check --- src/Avalonia.Base/Interactivity/EventRoute.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Avalonia.Base/Interactivity/EventRoute.cs b/src/Avalonia.Base/Interactivity/EventRoute.cs index 37539a7153..d0d82b4884 100644 --- a/src/Avalonia.Base/Interactivity/EventRoute.cs +++ b/src/Avalonia.Base/Interactivity/EventRoute.cs @@ -120,11 +120,6 @@ namespace Avalonia.Interactivity return; } - if (e.Source is null) - { - throw new ArgumentException("Event source may not be null", nameof(e)); - } - Interactive? lastTarget = null; var start = 0; var end = _route.Count; From 48162b0ebc7992b3a28b66e6cdb03e947108de07 Mon Sep 17 00:00:00 2001 From: jankrib Date: Wed, 5 Jul 2023 14:06:47 +0200 Subject: [PATCH 07/72] Use cancellation token in name generator --- .../NameGenerator/AvaloniaNameGenerator.cs | 8 +++++--- .../NameGenerator/AvaloniaNameSourceGenerator.cs | 12 ++++++++++-- .../NameGenerator/INameGenerator.cs | 3 ++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameGenerator.cs b/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameGenerator.cs index 8d45afafa7..fa20be721c 100644 --- a/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameGenerator.cs +++ b/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameGenerator.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using Avalonia.Generators.Common.Domain; using Microsoft.CodeAnalysis; @@ -31,7 +32,7 @@ internal class AvaloniaNameGenerator : INameGenerator _code = code; } - public IReadOnlyList GenerateNameReferences(IEnumerable additionalFiles) + public IEnumerable GenerateNameReferences(IEnumerable additionalFiles, CancellationToken cancellationToken) { var resolveViews = from file in additionalFiles @@ -39,7 +40,8 @@ internal class AvaloniaNameGenerator : INameGenerator file.Path.EndsWith(".paml") || file.Path.EndsWith(".axaml")) && _pathPattern.Matches(file.Path) - let xaml = file.GetText()!.ToString() + let xaml = file.GetText(cancellationToken)?.ToString() + where xaml != null let view = _classes.ResolveView(xaml) where view != null && _namespacePattern.Matches(view.Namespace) select view; @@ -51,7 +53,7 @@ internal class AvaloniaNameGenerator : INameGenerator let fileName = ResolveViewFileName(view, _naming) select new GeneratedPartialClass(fileName, code); - return query.ToList(); + return query; } private static string ResolveViewFileName(ResolvedView view, ViewFileNamingStrategy strategy) => strategy switch diff --git a/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs b/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs index fa1dcde064..c8a9825974 100644 --- a/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs +++ b/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs @@ -22,8 +22,16 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator return; } - var partials = generator.GenerateNameReferences(context.AdditionalFiles); - foreach (var (fileName, content) in partials) context.AddSource(fileName, content); + var partials = generator.GenerateNameReferences(context.AdditionalFiles, context.CancellationToken); + foreach (var (fileName, content) in partials) + { + if(context.CancellationToken.IsCancellationRequested) + { + break; + } + + context.AddSource(fileName, content); + } } catch (Exception exception) { diff --git a/src/tools/Avalonia.Generators/NameGenerator/INameGenerator.cs b/src/tools/Avalonia.Generators/NameGenerator/INameGenerator.cs index 922d800332..5b44de43c1 100644 --- a/src/tools/Avalonia.Generators/NameGenerator/INameGenerator.cs +++ b/src/tools/Avalonia.Generators/NameGenerator/INameGenerator.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; +using System.Threading; using Microsoft.CodeAnalysis; namespace Avalonia.Generators.NameGenerator; internal interface INameGenerator { - IReadOnlyList GenerateNameReferences(IEnumerable additionalFiles); + IEnumerable GenerateNameReferences(IEnumerable additionalFiles, CancellationToken cancellationToken); } internal record GeneratedPartialClass(string FileName, string Content); From 760ad47880b6585b8d0df51d441e547703f4129d Mon Sep 17 00:00:00 2001 From: Mike James Date: Wed, 5 Jul 2023 15:40:19 +0200 Subject: [PATCH 08/72] Update readme.md Removing the pause in PRs for v11. --- readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/readme.md b/readme.md index e9cd220714..c9539e1eb9 100644 --- a/readme.md +++ b/readme.md @@ -6,8 +6,6 @@
[![NuGet](https://img.shields.io/nuget/v/Avalonia.svg)](https://www.nuget.org/packages/Avalonia) [![downloads](https://img.shields.io/nuget/dt/avalonia)](https://www.nuget.org/packages/Avalonia) ![Size](https://img.shields.io/github/repo-size/avaloniaui/avalonia.svg) -⚠️ **v11 Update - [Pausing community contributions](https://github.com/AvaloniaUI/Avalonia/discussions/10599)** - ## 📖 About [Avalonia](https://avaloniaui.net) is a cross-platform UI framework for dotnet, providing a flexible styling system and supporting a wide range of platforms such as Windows, macOS, Linux, iOS, Android and WebAssembly. Avalonia is mature and production ready and is used by companies, including [Schneider Electric](https://avaloniaui.net/showcase#se), [Unity](https://avaloniaui.net/showcase#unity), [JetBrains](https://avaloniaui.net/showcase#rider) and [Github](https://avaloniaui.net/showcase#github). From 640fb5ec1bfcab76fe77bbd06e41ff656daaca9e Mon Sep 17 00:00:00 2001 From: AtomCrafty Date: Wed, 5 Jul 2023 20:12:59 +0200 Subject: [PATCH 09/72] add AutoCompleteBox with MinimumPrefixLength=0 to control gallery --- samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml b/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml index a492808f1d..b682ebf51d 100644 --- a/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml +++ b/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml @@ -18,6 +18,10 @@ + + + + @@ -42,7 +46,6 @@ - From 4b5b6225f1124dfdaedb2b1cb18c997cfe0d8a4c Mon Sep 17 00:00:00 2001 From: AtomCrafty Date: Wed, 5 Jul 2023 20:13:54 +0200 Subject: [PATCH 10/72] fix AutoCompleteBox dropdown not opening when the text box is empty --- .../AutoCompleteBox/AutoCompleteBox.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs b/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs index d0b894101f..ebf66164b7 100644 --- a/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs +++ b/src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs @@ -1320,17 +1320,14 @@ namespace Avalonia.Controls // Evaluate the conditions needed for completion. // 1. Minimum prefix length // 2. If a delay timer is in use, use it - bool populateReady = newText.Length >= MinimumPrefixLength && MinimumPrefixLength >= 0; - if (populateReady && MinimumPrefixLength == 0 && String.IsNullOrEmpty(newText) && String.IsNullOrEmpty(SearchText)) - { - populateReady = false; - } - _userCalledPopulate = populateReady ? userInitiated : false; + bool minimumLengthReached = newText.Length >= MinimumPrefixLength && MinimumPrefixLength >= 0; + + _userCalledPopulate = minimumLengthReached && userInitiated; // Update the interface and values only as necessary UpdateTextValue(newText, userInitiated); - if (populateReady) + if (minimumLengthReached) { _ignoreTextSelectionChange = true; From 124ad88924b3863162e8fd5936edeb5d0b39855c Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 5 Jul 2023 11:50:21 -0700 Subject: [PATCH 11/72] Fix egl opengl initialization on win32 --- src/Windows/Avalonia.Win32/Win32GlManager.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Windows/Avalonia.Win32/Win32GlManager.cs b/src/Windows/Avalonia.Win32/Win32GlManager.cs index b3760a37e1..ebb708f4c5 100644 --- a/src/Windows/Avalonia.Win32/Win32GlManager.cs +++ b/src/Windows/Avalonia.Win32/Win32GlManager.cs @@ -20,6 +20,10 @@ static class Win32GlManager { AvaloniaLocator.CurrentMutable.Bind().ToConstant(gl); } + if (gl is IPlatformGraphicsOpenGlContextFactory openGlFactory) + { + AvaloniaLocator.CurrentMutable.Bind().ToConstant(openGlFactory); + } return gl; } From 21f4a2044bb3e1fe79ef9fc5c630c3ea10dc245b Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 5 Jul 2023 11:50:33 -0700 Subject: [PATCH 12/72] Minor doc fix --- src/Avalonia.Base/Platform/Storage/PickerOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Base/Platform/Storage/PickerOptions.cs b/src/Avalonia.Base/Platform/Storage/PickerOptions.cs index ed061aa2d5..07f99f32c8 100644 --- a/src/Avalonia.Base/Platform/Storage/PickerOptions.cs +++ b/src/Avalonia.Base/Platform/Storage/PickerOptions.cs @@ -6,7 +6,7 @@ public class PickerOptions { /// - /// Gets or sets the text that appears in the title bar of a folder dialog. + /// Gets or sets the text that appears in the title bar of a picker. /// public string? Title { get; set; } From 42ad2fd46e4409874db5235efc1e838c0475f6b1 Mon Sep 17 00:00:00 2001 From: AtomCrafty Date: Wed, 5 Jul 2023 20:59:18 +0200 Subject: [PATCH 13/72] add regression test for AutoCompleteBox with MinimumPrefixLegth=0 --- .../AutoCompleteBoxTests.cs | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs index acae583b5c..f31df71c0d 100644 --- a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs @@ -1,21 +1,15 @@ using System; -using System.Collections; using System.Collections.Generic; -using System.ComponentModel; using System.Linq; using Avalonia.Controls.Primitives; -using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; using Avalonia.Data; -using Avalonia.Markup.Data; -using Avalonia.Platform; using Avalonia.Threading; using Avalonia.UnitTests; -using Moq; using Xunit; using System.Collections.ObjectModel; -using System.Reactive.Linq; using System.Reactive.Subjects; +using Avalonia.Input; namespace Avalonia.Controls.UnitTests { @@ -439,6 +433,29 @@ namespace Avalonia.Controls.UnitTests }); } + [Fact] + public void Explicit_Dropdown_Open_Request_MinimumPrefixLength_0() + { + RunTest((control, textbox) => + { + control.Text = ""; + control.MinimumPrefixLength = 0; + Dispatcher.UIThread.RunJobs(); + + Assert.False(control.IsDropDownOpen); + + control.RaiseEvent(new KeyEventArgs + { + RoutedEvent = InputElement.KeyDownEvent, + Key = Key.Down + }); + + Dispatcher.UIThread.RunJobs(); + + Assert.True(control.IsDropDownOpen); + }); + } + /// /// Retrieves a defined predicate filter through a new AutoCompleteBox /// control instance. @@ -1072,14 +1089,14 @@ namespace Avalonia.Controls.UnitTests private AutoCompleteBox CreateControl() { - var datePicker = + var autoCompleteBox = new AutoCompleteBox { Template = CreateTemplate() }; - datePicker.ApplyTemplate(); - return datePicker; + autoCompleteBox.ApplyTemplate(); + return autoCompleteBox; } private TextBox GetTextBox(AutoCompleteBox control) { From dfb3bfe3bae77ffba9a95266e51fd1e60ea0377c Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 5 Jul 2023 15:31:46 -0400 Subject: [PATCH 14/72] Update build.md --- Documentation/build.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Documentation/build.md b/Documentation/build.md index fd6b26337c..62d6d72a05 100644 --- a/Documentation/build.md +++ b/Documentation/build.md @@ -43,6 +43,25 @@ Build and run `ControlCatalog.NetCore` project to see the sample application. >CSC : error CS0006: Metadata file 'C:\...\Avalonia\packages\Avalonia\bin\Debug\netcoreapp2.0\Avalonia.dll' could not be found ``` To correct this, right click on the `Avalonia.DesktopRuntime` project then press `Build` to build the project manually. Afterwards the solution should build normally and the ControlCatalog can be run. + * **Error MSB4062 GenerateAvaloniaResourcesTask** + + Same as previous one, you need to manually build `Avalonia.Build.Tasks` project at least once. + + Alternatively, you can build the solution once with Nuke. + +## Building packages with Nuke + +Install Nuke +`dotnet tool install --global Nuke.GlobalTool --version 6.2.1` + +Build project: +`nuke --target Compile --configuration Release` + +And run tests: +`nuke --target RunTests --configuration Release` + +Or if you need to create nuget packages as well (it will compile and run tests automatically): +`nuke --target Package --configuration Release` # Linux/macOS From 75e60d9c2d97be30367e12b0ba7d9072c41363b4 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 5 Jul 2023 15:37:50 -0400 Subject: [PATCH 15/72] Update build.md --- Documentation/build.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Documentation/build.md b/Documentation/build.md index 62d6d72a05..3fcaae8963 100644 --- a/Documentation/build.md +++ b/Documentation/build.md @@ -14,6 +14,18 @@ git submodule update --init Go to https://dotnet.microsoft.com/download/visual-studio-sdks and install the latest version of the .NET Core SDK compatible with Avalonia UI. Make sure to download the SDK (not just the "runtime") package. The version compatible is indicated within the [global.json](https://github.com/AvaloniaUI/Avalonia/blob/master/global.json) file. Note that Avalonia UI does not always use the latest version and is hardcoded to use the last version known to be compatible (SDK releases may break the builds from time-to-time). +### Installing necessary .NET Workloads + +.NET SDK requires developers to install workloads for each platform they are targeting. +Since Avalonia targets pretty much every supported .NET platform, you need to install these workloads as well. +Running it from the command line: +``` +dotnet workload install android ios wasm-tools wasm-experimental +``` + +macOS workloads are not required to build Avalonia. +Note: on Unix OS you need to run this command from sudo. + ## Build and Run Avalonia ``` From 7dbe6f292a1159e5cc129c8a04dd68a92dbd093f Mon Sep 17 00:00:00 2001 From: jankrib Date: Wed, 5 Jul 2023 21:38:37 +0200 Subject: [PATCH 16/72] Handle OperationCanceledException --- .../NameGenerator/AvaloniaNameSourceGenerator.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs b/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs index c8a9825974..407cf4f35f 100644 --- a/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs +++ b/src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs @@ -33,6 +33,9 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator context.AddSource(fileName, content); } } + catch (OperationCanceledException) + { + } catch (Exception exception) { context.ReportNameGeneratorUnhandledError(exception); From c4178c8a4b0c6f561bdfca9dec275b07eccb44a5 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 5 Jul 2023 13:14:48 -0700 Subject: [PATCH 17/72] Fix WGL crash in virtual machine --- src/Windows/Avalonia.Win32/OpenGl/WglDisplay.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Windows/Avalonia.Win32/OpenGl/WglDisplay.cs b/src/Windows/Avalonia.Win32/OpenGl/WglDisplay.cs index e207bc23ab..85cab1d18e 100644 --- a/src/Windows/Avalonia.Win32/OpenGl/WglDisplay.cs +++ b/src/Windows/Avalonia.Win32/OpenGl/WglDisplay.cs @@ -38,12 +38,10 @@ namespace Avalonia.Win32.OpenGl [MemberNotNullWhen(true, nameof(s_wglChoosePixelFormatArb))] [MemberNotNullWhen(true, nameof(s_wglCreateContextAttribsArb))] - [MemberNotNullWhen(true, nameof(s_glDebugMessageCallback))] private static bool Initialize() => _initialized ??= InitializeCore(); [MemberNotNullWhen(true, nameof(s_wglChoosePixelFormatArb))] [MemberNotNullWhen(true, nameof(s_wglCreateContextAttribsArb))] - [MemberNotNullWhen(true, nameof(s_glDebugMessageCallback))] private static bool InitializeCore() { Dispatcher.UIThread.VerifyAccess(); @@ -74,9 +72,9 @@ namespace Avalonia.Win32.OpenGl Marshal.GetDelegateForFunctionPointer( wglGetProcAddress("wglChoosePixelFormatARB")); - s_glDebugMessageCallback = - Marshal.GetDelegateForFunctionPointer( - wglGetProcAddress("glDebugMessageCallback")); + s_glDebugMessageCallback = wglGetProcAddress("glDebugMessageCallback") is { } setDebugCallback && setDebugCallback != default ? + Marshal.GetDelegateForFunctionPointer(setDebugCallback) : + null; var formats = new int[1]; @@ -144,8 +142,12 @@ namespace Avalonia.Win32.OpenGl }); } - using(new WglRestoreContext(dc, context, null)) - s_glDebugMessageCallback(Marshal.GetFunctionPointerForDelegate(_debugCallback), IntPtr.Zero); + if (s_glDebugMessageCallback is not null) + { + using (new WglRestoreContext(dc, context, null)) + s_glDebugMessageCallback(Marshal.GetFunctionPointerForDelegate(_debugCallback), IntPtr.Zero); + } + if (context != IntPtr.Zero) return new WglContext(shareContext, version, context, window, dc, _defaultPixelFormat, _defaultPfd); From 2b1c0e25ac8c93e80ae2689d75a2030019a1654a Mon Sep 17 00:00:00 2001 From: afunc Date: Thu, 6 Jul 2023 22:08:49 +0800 Subject: [PATCH 18/72] Country or Region --- samples/ControlCatalog/Pages/DataGridPage.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/ControlCatalog/Pages/DataGridPage.xaml b/samples/ControlCatalog/Pages/DataGridPage.xaml index fb097da71b..356834832d 100644 --- a/samples/ControlCatalog/Pages/DataGridPage.xaml +++ b/samples/ControlCatalog/Pages/DataGridPage.xaml @@ -34,7 +34,7 @@ RowBackground="#1000"> - + @@ -68,7 +68,7 @@ - + From 62fc555e093be28afddcc3b648f4ce88253fdb9c Mon Sep 17 00:00:00 2001 From: AtomCrafty Date: Fri, 7 Jul 2023 00:21:40 +0200 Subject: [PATCH 19/72] fix dead link in readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c9539e1eb9..aa99360681 100644 --- a/readme.md +++ b/readme.md @@ -10,7 +10,7 @@ [Avalonia](https://avaloniaui.net) is a cross-platform UI framework for dotnet, providing a flexible styling system and supporting a wide range of platforms such as Windows, macOS, Linux, iOS, Android and WebAssembly. Avalonia is mature and production ready and is used by companies, including [Schneider Electric](https://avaloniaui.net/showcase#se), [Unity](https://avaloniaui.net/showcase#unity), [JetBrains](https://avaloniaui.net/showcase#rider) and [Github](https://avaloniaui.net/showcase#github). -Considered by many to be the spiritual successor to WPF, Avalonia UI provides a familiar, modern development experience for XAML developers creating cross-platform applications. While Avalonia UI is [similar to WPF](https://docs.avaloniaui.net/misc/wpf), it isn't a 1:1 copy, and you'll find plenty of improvements. +Considered by many to be the spiritual successor to WPF, Avalonia UI provides a familiar, modern development experience for XAML developers creating cross-platform applications. While Avalonia UI is [similar to WPF](https://docs.avaloniaui.net/docs/next/get-started/wpf/), it isn't a 1:1 copy, and you'll find plenty of improvements. For those seeking a cross-platform WPF, we have created [Avalonia XPF](https://avaloniaui.net/xpf), enabling WPF applications to run on macOS and Linux with little to no code changes. Avalonia XPF is a commercial product and is licensed per-app, per-platform. From 4405d7970c5408400fa1132d45e0a375b1bc66ab Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Thu, 6 Jul 2023 16:33:32 +0200 Subject: [PATCH 20/72] Drop original internal XAML resources after merge --- .../XamlCompilerTaskExecutor.cs | 39 ++++++++++++------- .../AvaloniaXamlIlRuntimeCompiler.cs | 23 +++++++---- .../AvaloniaXamlIlCompiler.cs | 6 ++- .../XamlMergeResourceGroupTransformer.cs | 20 +++++----- .../IXamlDocumentResource.cs | 4 +- .../XamlDocumentResource.cs | 34 ++++++++++------ .../XamlDocumentTypeBuilderProvider.cs | 23 +++++++++++ .../CompilerExtensions/XamlDocumentUsage.cs | 8 ++++ 8 files changed, 111 insertions(+), 46 deletions(-) create mode 100644 src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentTypeBuilderProvider.cs create mode 100644 src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentUsage.cs diff --git a/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs b/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs index 1b611db62b..80876f1819 100644 --- a/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs +++ b/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs @@ -304,7 +304,7 @@ namespace Avalonia.Build.Tasks || "Internal".Equals(classModifierText, StringComparison.OrdinalIgnoreCase)) classModifierPublic = false; else - throw new XamlParseException("Invalid value for x:ClassModifier. Expected value are: Public, NotPublic (internal).", precompileDirective); + throw new XamlParseException("Invalid value for x:ClassModifier. Expected value are: Public, NotPublic (internal).", classModifierDirective); } var classDirective = initialRoot.Children.OfType() @@ -353,10 +353,16 @@ namespace Avalonia.Build.Tasks ((List)parsedXamlDocuments).Add(new XamlDocumentResource( parsed, res.Uri, res, classType, classModifierPublic.Value, - populateBuilder, - compiler.DefinePopulateMethod(populateBuilder, parsed, populateName, - classTypeDefinition == null && classModifierPublic.Value), - buildName == null ? null : compiler.DefineBuildMethod(builder, parsed, buildName, classModifierPublic.Value))); + () => new XamlDocumentTypeBuilderProvider( + populateBuilder, + compiler.DefinePopulateMethod( + populateBuilder, + parsed, + populateName, + classTypeDefinition == null && classModifierPublic.Value), + buildName == null ? + null : + compiler.DefineBuildMethod(builder, parsed, buildName, classModifierPublic.Value)))); } catch (Exception e) { @@ -387,10 +393,17 @@ namespace Avalonia.Build.Tasks foreach (var document in parsedXamlDocuments) { + var res = (IResource)document.FileSource!; + + if (document.Usage == XamlDocumentUsage.Merged && !document.IsPublic) + { + res.Remove(); + continue; + } + var parsed = document.XamlDocument; - var res = (IResource)document.FileSource; var classType = document.ClassType; - var populateBuilder = document.TypeBuilder; + var populateBuilder = document.TypeBuilderProvider.TypeBuilder; try { @@ -399,8 +412,8 @@ namespace Avalonia.Build.Tasks compiler.Compile(parsed, contextClass, - document.PopulateMethod, - document.BuildMethod, + document.TypeBuilderProvider.PopulateMethod, + document.TypeBuilderProvider.BuildMethod, builder.DefineSubType(compilerConfig.WellKnownTypes.Object, "NamespaceInfo:" + res.Name, true), (closureName, closureBaseType) => populateBuilder.DefineSubType(closureBaseType, closureName, false), @@ -412,7 +425,7 @@ namespace Avalonia.Build.Tasks if (classTypeDefinition != null) { var compiledPopulateMethod = typeSystem.GetTypeReference(populateBuilder).Resolve() - .Methods.First(m => m.Name == document.PopulateMethod.Name); + .Methods.First(m => m.Name == document.TypeBuilderProvider.PopulateMethod.Name); var designLoaderFieldType = typeSystem .GetType("System.Action`1") @@ -536,12 +549,12 @@ namespace Avalonia.Build.Tasks } if (document.IsPublic - && (document.BuildMethod != null || classTypeDefinition != null)) + && (document.TypeBuilderProvider.BuildMethod != null || classTypeDefinition != null)) { - var compiledBuildMethod = document.BuildMethod == null ? + var compiledBuildMethod = document.TypeBuilderProvider.BuildMethod is not { } buildMethod ? null : typeSystem.GetTypeReference(builder).Resolve() - .Methods.First(m => m.Name == document.BuildMethod?.Name); + .Methods.First(m => m.Name == buildMethod.Name); var parameterlessConstructor = compiledBuildMethod != null ? null : classTypeDefinition.GetConstructors().FirstOrDefault(c => diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs index e2aab7d685..995ed91b8d 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; @@ -231,10 +232,19 @@ namespace Avalonia.Markup.Xaml.XamlIl ?? ((IXamlAstValueNode)parsed.Root).Type.GetClrType().Name; var tb = _sreBuilder.DefineType("Builder_" + Guid.NewGuid().ToString("N") + "_" + xamlName); var builder = _sreTypeSystem.CreateTypeBuilder(tb); - parsedDocuments.Add(new XamlDocumentResource(parsed, document.BaseUri?.ToString(), - null, null, true, builder, - compiler.DefinePopulateMethod(builder, parsed, AvaloniaXamlIlCompiler.PopulateName, true), - document.RootInstance is null ? compiler.DefineBuildMethod(builder, parsed, AvaloniaXamlIlCompiler.BuildName, true) : null)); + + parsedDocuments.Add(new XamlDocumentResource( + parsed, + document.BaseUri?.ToString(), + null, + null, + true, + () => new XamlDocumentTypeBuilderProvider( + builder, + compiler.DefinePopulateMethod(builder, parsed, AvaloniaXamlIlCompiler.PopulateName, true), + document.RootInstance is null ? + compiler.DefineBuildMethod(builder, parsed, AvaloniaXamlIlCompiler.BuildName, true) : + null))); originalDocuments.Add(document); } @@ -242,9 +252,8 @@ namespace Avalonia.Markup.Xaml.XamlIl var createdTypes = parsedDocuments.Select(document => { - compiler.Compile(document.XamlDocument, document.TypeBuilder, document.PopulateMethod, - document.BuildMethod, document.Uri, document.FileSource); - return _sreTypeSystem.GetType(document.TypeBuilder.CreateType()); + compiler.Compile(document.XamlDocument, document.TypeBuilderProvider, document.Uri, document.FileSource); + return _sreTypeSystem.GetType(document.TypeBuilderProvider.TypeBuilder.CreateType()); }).ToArray(); clrPropertyBuilder.CreateTypeInfo(); diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompiler.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompiler.cs index 23c67df810..af34d55a3d 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompiler.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompiler.cs @@ -179,9 +179,11 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions return parsed; } - public void Compile(XamlDocument document, IXamlTypeBuilder tb, IXamlMethodBuilder populateMethod, IXamlMethodBuilder buildMethod, string baseUri, IFileSource fileSource) + public void Compile(XamlDocument document, XamlDocumentTypeBuilderProvider typeBuilderProvider, string baseUri, IFileSource fileSource) { - Compile(document, _contextType, populateMethod, buildMethod, + var tb = typeBuilderProvider.TypeBuilder; + + Compile(document, _contextType, typeBuilderProvider.PopulateMethod, typeBuilderProvider.BuildMethod, _configuration.TypeMappings.XmlNamespaceInfoProvider == null ? null : tb.DefineSubType(_configuration.WellKnownTypes.Object, diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlMergeResourceGroupTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlMergeResourceGroupTransformer.cs index 8e04a7d467..f135ed5ffb 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlMergeResourceGroupTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlMergeResourceGroupTransformer.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.Linq; using Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers; using XamlX.Ast; -using XamlX.IL.Emitters; -using XamlX.Transform.Transformers; using XamlX.TypeSystem; namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.GroupTransformers; @@ -24,7 +22,6 @@ internal class XamlMergeResourceGroupTransformer : IXamlAstGroupTransformer var mergeResourceIncludeType = context.GetAvaloniaTypes().MergeResourceInclude; var mergeSourceNodes = new List(); - var mergedResourceWasAdded = false; foreach (var manipulationNode in resourceDictionaryManipulation.Children.ToArray()) { void ProcessXamlPropertyAssignmentNode(XamlManipulationGroupNode parent, XamlPropertyAssignmentNode assignmentNode) @@ -39,7 +36,6 @@ internal class XamlMergeResourceGroupTransformer : IXamlAstGroupTransformer { parent.Children.Remove(assignmentNode); mergeSourceNodes.Add(sourceAssignmentNode); - mergedResourceWasAdded = true; } else { @@ -85,25 +81,29 @@ internal class XamlMergeResourceGroupTransformer : IXamlAstGroupTransformer return context.ParseError( $"Node MergeResourceInclude is unable to resolve \"{originalAssetPath}\" path.", propertyNode, node); } - + var targetDocument = context.Documents.FirstOrDefault(d => - string.Equals(d.Uri, originalAssetPath, StringComparison.InvariantCultureIgnoreCase)) - ?.XamlDocument.Root as XamlValueWithManipulationNode; - if (targetDocument is null) + string.Equals(d.Uri, originalAssetPath, StringComparison.InvariantCultureIgnoreCase)); + if (targetDocument?.XamlDocument.Root is not XamlValueWithManipulationNode targetDocumentRoot) { return context.ParseError( $"Node MergeResourceInclude is unable to resolve \"{originalAssetPath}\" path.", propertyNode, node); } - var singleRootObject = ((XamlManipulationGroupNode)targetDocument.Manipulation) + var singleRootObject = ((XamlManipulationGroupNode)targetDocumentRoot.Manipulation) .Children.OfType().Single(); if (singleRootObject.Type != resourceDictionaryType) { return context.ParseError( - $"MergeResourceInclude can only include another ResourceDictionary", propertyNode, node); + "MergeResourceInclude can only include another ResourceDictionary", propertyNode, node); } manipulationGroup.Add(singleRootObject.Manipulation); + + if (targetDocument.Usage == XamlDocumentUsage.Unknown) + { + targetDocument.Usage = XamlDocumentUsage.Merged; + } } // Order of resources is defined by ResourceDictionary.TryGetResource. diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/IXamlDocumentResource.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/IXamlDocumentResource.cs index b859b3ed59..9b5c59682f 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/IXamlDocumentResource.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/IXamlDocumentResource.cs @@ -1,5 +1,4 @@ -using System; -using XamlX.Ast; +using XamlX.Ast; using XamlX.TypeSystem; namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions; @@ -14,4 +13,5 @@ internal interface IXamlDocumentResource IXamlMethod PopulateMethod { get; } IFileSource? FileSource { get; } XamlDocument XamlDocument { get; } + XamlDocumentUsage Usage { get; set; } } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentResource.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentResource.cs index 932fe067af..0dab80d743 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentResource.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentResource.cs @@ -1,6 +1,5 @@ using System; using XamlX.Ast; -using XamlX.IL; using XamlX.TypeSystem; #nullable enable @@ -8,24 +7,23 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions; internal class XamlDocumentResource : IXamlDocumentResource { + private readonly Func _createTypeBuilderProvider; + private XamlDocumentTypeBuilderProvider? _typeBuilderProvider; + public XamlDocumentResource( XamlDocument xamlDocument, string? uri, IFileSource? fileSource, IXamlType? classType, bool isPublic, - IXamlTypeBuilder typeBuilder, - IXamlMethodBuilder populateMethod, - IXamlMethodBuilder? buildMethod) + Func createTypeBuilderProvider) { + _createTypeBuilderProvider = createTypeBuilderProvider; XamlDocument = xamlDocument; Uri = uri; FileSource = fileSource; ClassType = classType; IsPublic = isPublic; - TypeBuilder = typeBuilder; - PopulateMethod = populateMethod; - BuildMethod = buildMethod; } public XamlDocument XamlDocument { get; } @@ -34,10 +32,22 @@ internal class XamlDocumentResource : IXamlDocumentResource public IXamlType? ClassType { get; } public bool IsPublic { get; } - public IXamlTypeBuilder TypeBuilder { get; } - public IXamlMethodBuilder PopulateMethod { get; } - public IXamlMethodBuilder? BuildMethod { get; } + public XamlDocumentUsage Usage { get; set; } + + public XamlDocumentTypeBuilderProvider TypeBuilderProvider + { + get + { + if (_typeBuilderProvider is null) + { + _typeBuilderProvider = _createTypeBuilderProvider(); + Usage = XamlDocumentUsage.Used; + } + + return _typeBuilderProvider; + } + } - IXamlMethod? IXamlDocumentResource.BuildMethod => BuildMethod; - IXamlMethod IXamlDocumentResource.PopulateMethod => PopulateMethod; + IXamlMethod? IXamlDocumentResource.BuildMethod => TypeBuilderProvider.BuildMethod; + IXamlMethod IXamlDocumentResource.PopulateMethod => TypeBuilderProvider.PopulateMethod; } diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentTypeBuilderProvider.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentTypeBuilderProvider.cs new file mode 100644 index 0000000000..4701403fb9 --- /dev/null +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentTypeBuilderProvider.cs @@ -0,0 +1,23 @@ +#nullable enable + +using XamlX.IL; +using XamlX.TypeSystem; + +namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions; + +internal sealed class XamlDocumentTypeBuilderProvider +{ + public XamlDocumentTypeBuilderProvider( + IXamlTypeBuilder typeBuilder, + IXamlMethodBuilder populateMethod, + IXamlMethodBuilder? buildMethod) + { + TypeBuilder = typeBuilder; + PopulateMethod = populateMethod; + BuildMethod = buildMethod; + } + + public IXamlTypeBuilder TypeBuilder { get; } + public IXamlMethodBuilder PopulateMethod { get; } + public IXamlMethodBuilder? BuildMethod { get; } +} diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentUsage.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentUsage.cs new file mode 100644 index 0000000000..ec5b931548 --- /dev/null +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlDocumentUsage.cs @@ -0,0 +1,8 @@ +namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions; + +internal enum XamlDocumentUsage +{ + Unknown, + Merged, + Used +} From 0e038492f7e5e20c2d7ceb3d1e69a564fe148e27 Mon Sep 17 00:00:00 2001 From: Daniil Pavliuchyk Date: Fri, 7 Jul 2023 19:03:18 +0300 Subject: [PATCH 21/72] Do not set Window Startup Location multiple times --- samples/Sandbox/MainWindow.axaml | 8 +---- src/Avalonia.Controls/Window.cs | 7 ++++ .../WindowTests.cs | 35 +++++++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/samples/Sandbox/MainWindow.axaml b/samples/Sandbox/MainWindow.axaml index f96abcac96..d8614983b7 100644 --- a/samples/Sandbox/MainWindow.axaml +++ b/samples/Sandbox/MainWindow.axaml @@ -1,11 +1,5 @@ - - - - - - - + diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index ce4fc8dd5c..dc58947994 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -169,6 +169,7 @@ namespace Avalonia.Controls private readonly Size _maxPlatformClientSize; private bool _shown; private bool _showingAsDialog; + private bool _wasShownBefore; /// /// Initializes static members of the class. @@ -718,6 +719,7 @@ namespace Avalonia.Controls StartRendering(); PlatformImpl?.Show(ShowActivated, false); OnOpened(EventArgs.Empty); + _wasShownBefore = true; } } @@ -871,6 +873,11 @@ namespace Avalonia.Controls private void SetWindowStartupLocation(Window? owner = null) { + if (_wasShownBefore == true) + { + return; + } + var startupLocation = WindowStartupLocation; if (startupLocation == WindowStartupLocation.CenterOwner && diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs index cd45a3d920..186b2f6836 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs @@ -513,6 +513,41 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Window_Should_Not_Be_Centered_When_WindowStartupLocation_Is_CenterScreen_And_Window_Is_Hidden_And_Shown() + { + var screen1 = new Mock(1.0, new PixelRect(new PixelSize(1920, 1080)), new PixelRect(new PixelSize(1920, 1040)), true); + + var screens = new Mock(); + screens.Setup(x => x.AllScreens).Returns(new Screen[] { screen1.Object }); + screens.Setup(x => x.ScreenFromPoint(It.IsAny())).Returns(screen1.Object); + + + var windowImpl = MockWindowingPlatform.CreateWindowMock(); + windowImpl.Setup(x => x.ClientSize).Returns(new Size(800, 480)); + windowImpl.Setup(x => x.DesktopScaling).Returns(1); + windowImpl.Setup(x => x.RenderScaling).Returns(1); + windowImpl.Setup(x => x.Screen).Returns(screens.Object); + + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(windowImpl.Object) + { + WindowStartupLocation = WindowStartupLocation.CenterScreen + }; + + window.Show(); + + var expected = new PixelPoint(150, 400); + window.Position = expected; + + window.IsVisible = false; + window.IsVisible = true; + + Assert.Equal(expected, window.Position); + } + } + [Fact] public void Window_Should_Be_Centered_When_WindowStartupLocation_Is_CenterScreen() { From c21e9ccbb4559caafceaf49795d002caf7907013 Mon Sep 17 00:00:00 2001 From: Daniil Pavliuchyk Date: Fri, 7 Jul 2023 19:03:47 +0300 Subject: [PATCH 22/72] Cleanup --- samples/Sandbox/MainWindow.axaml | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/Sandbox/MainWindow.axaml b/samples/Sandbox/MainWindow.axaml index d8614983b7..6929f192c7 100644 --- a/samples/Sandbox/MainWindow.axaml +++ b/samples/Sandbox/MainWindow.axaml @@ -1,5 +1,4 @@ - From 0013f444449b772920c275fb780655620cfac0f1 Mon Sep 17 00:00:00 2001 From: Vladimir Kulikov Date: Fri, 7 Jul 2023 21:57:39 +0300 Subject: [PATCH 23/72] Setting child of TestRoot once --- tests/Avalonia.UnitTests/TestRoot.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Avalonia.UnitTests/TestRoot.cs b/tests/Avalonia.UnitTests/TestRoot.cs index fcfd845602..f62afaf74d 100644 --- a/tests/Avalonia.UnitTests/TestRoot.cs +++ b/tests/Avalonia.UnitTests/TestRoot.cs @@ -35,7 +35,6 @@ namespace Avalonia.UnitTests public TestRoot(Control child) : this(false, child) { - Child = child; } public TestRoot(bool useGlobalStyles, Control child) From d4b5085ba3e7afaa859b87421c02f155b45e3d4d Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 15:29:40 -0400 Subject: [PATCH 24/72] Revert "Fix ImportCompleted spelling" --- .../Rendering/Composition/CompositionExternalMemory.cs | 3 +-- .../Rendering/Composition/CompositionInterop.cs | 6 +++--- .../Composition/Server/ServerCompositionDrawingSurface.cs | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs index 1021bc58b4..ce728f86a2 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs @@ -91,8 +91,7 @@ public interface ICompositionGpuImportedObject : IAsyncDisposable /// the user code is allowed to free the resource owner in case when a non-owning /// sharing handle was used /// - Task ImportCompleted { get; } - + Task ImportCompeted { get; } /// /// Indicates if the device context this instance is associated with is no longer available /// diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs b/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs index 9eea228e84..1643ec6e8d 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs @@ -67,18 +67,18 @@ abstract class CompositionGpuImportedObjectBase : ICompositionGpuImportedObject Context = context; Feature = feature; - ImportCompleted = Compositor.InvokeServerJobAsync(Import); + ImportCompeted = Compositor.InvokeServerJobAsync(Import); } protected abstract void Import(); public abstract void Dispose(); - public Task ImportCompleted { get; } + public Task ImportCompeted { get; } public bool IsLost => Context.IsLost; public ValueTask DisposeAsync() => new(Compositor.InvokeServerJobAsync(() => { - if (ImportCompleted.Status == TaskStatus.RanToCompletion) + if (ImportCompeted.Status == TaskStatus.RanToCompletion) Dispose(); })); } diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs index f58403f0bc..da24b3812a 100644 --- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs +++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs @@ -31,12 +31,12 @@ internal class ServerCompositionDrawingSurface : ServerCompositionSurface, IDisp throw new PlatformGraphicsContextLostException(); // This should never happen, but check for it anyway to avoid a deadlock - if (!image.ImportCompleted.IsCompleted) + if (!image.ImportCompeted.IsCompleted) throw new InvalidOperationException("The import operation is not completed yet"); // Rethrow the import here exception - if (image.ImportCompleted.IsFaulted) - image.ImportCompleted.GetAwaiter().GetResult(); + if (image.ImportCompeted.IsFaulted) + image.ImportCompeted.GetAwaiter().GetResult(); } void Update(IBitmapImpl newImage, IPlatformRenderInterfaceContext context) From 96f21b6cbf3cdc3d6eb96dc7a0e3eb22ea15c273 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 6 Jul 2023 14:17:01 -0700 Subject: [PATCH 25/72] Create initial ApiDiffValidation implementation --- .nuke/build.schema.json | 10 +++ nukebuild/ApiDiffValidation.cs | 123 +++++++++++++++++++++++++++++++++ nukebuild/Build.cs | 21 +++++- nukebuild/BuildParameters.cs | 15 +++- nukebuild/Shims.cs | 4 +- nukebuild/_build.csproj | 2 + 6 files changed, 170 insertions(+), 5 deletions(-) create mode 100644 nukebuild/ApiDiffValidation.cs diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index d2f2ee36d5..8bc812b0e2 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -6,6 +6,10 @@ "build": { "type": "object", "properties": { + "ApiValidationBaseline": { + "type": "string", + "description": "api-baseline" + }, "Configuration": { "type": "string", "description": "configuration" @@ -89,6 +93,7 @@ "RunRenderTests", "RunTests", "RunToolsTests", + "ValidateApiDiff", "ZipFiles" ] } @@ -124,10 +129,15 @@ "RunRenderTests", "RunTests", "RunToolsTests", + "ValidateApiDiff", "ZipFiles" ] } }, + "UpdateApiValidationSuppression": { + "type": "boolean", + "description": "update-api-suppression" + }, "Verbosity": { "type": "string", "description": "Logging verbosity during build execution. Default is 'Normal'", diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs new file mode 100644 index 0000000000..5112f87728 --- /dev/null +++ b/nukebuild/ApiDiffValidation.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net.Http; +using System.Text.RegularExpressions; +using Nuke.Common.Tooling; + +public static class ApiDiffValidation +{ + public static void ValidatePackage( + Tool apiCompatTool, string packagePath, Version baselineVersion, + string suppressionFilesFolder, bool updateSuppressionFile) + { + if (baselineVersion is null) + { + throw new InvalidOperationException( + "Build \"api-baseline\" parameter must be set when running Nuke CreatePackages"); + } + + if (!Directory.Exists(suppressionFilesFolder)) + { + Directory.CreateDirectory(suppressionFilesFolder!); + } + + using (var baselineStream = DownloadBaselinePackage(packagePath, baselineVersion)) + using (var target = new ZipArchive(File.Open(packagePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read)) + using (var baseline = new ZipArchive(baselineStream, ZipArchiveMode.Read)) + using (Helpers.UseTempDir(out var tempFolder)) + { + var targetDlls = GetDlls(target); + var baselineDlls = GetDlls(baseline); + + var left = new List(); + var right = new List(); + + var suppressionFile = Path.Combine(suppressionFilesFolder, Path.GetFileName(packagePath) + ".xml"); + + foreach (var baselineDll in baselineDlls) + { + var baselineDllPath = Path.Combine("baseline", baselineDll.target, baselineDll.entry.Name); + var baselineDllRealPath = Path.Combine(tempFolder, baselineDllPath); + Directory.CreateDirectory(Path.GetDirectoryName(baselineDllRealPath)!); + using (var baselineDllFile = File.Create(baselineDllRealPath)) + { + baselineDll.entry.Open().CopyTo(baselineDllFile); + } + + var targetDll = targetDlls.FirstOrDefault(e => + e.target == baselineDll.target && e.entry.Name == baselineDll.entry.Name); + if (targetDll.entry is null) + { + throw new InvalidOperationException($"Some assemblies are missing in the new package: {baselineDll.entry.Name} for {baselineDll.target}"); + } + + var targetDllPath = Path.Combine("target", targetDll.target, targetDll.entry.Name); + var targetDllRealPath = Path.Combine(tempFolder, targetDllPath); + Directory.CreateDirectory(Path.GetDirectoryName(targetDllRealPath)!); + using (var targetDllFile = File.Create(targetDllRealPath)) + { + targetDll.entry.Open().CopyTo(targetDllFile); + } + + left.Add(baselineDllPath); + right.Add(targetDllPath); + } + + var args = $""" -l={string.Join(',', left)} -r="{string.Join(',', right)}" """; + updateSuppressionFile = true; + if (File.Exists(suppressionFile)) + { + args += $""" --suppression-file="{suppressionFile}" """; + } + if (updateSuppressionFile) + { + args += $""" --suppression-output-file="{suppressionFile}" --generate-suppression-file=true """; + } + + apiCompatTool(args, tempFolder); + } + } + + private static IReadOnlyCollection<(string target, ZipArchiveEntry entry)> GetDlls(ZipArchive archive) + { + return archive.Entries + .Where(e => Path.GetExtension(e.FullName) == ".dll") + .Select(e => ( + entry: e, + isRef: e.FullName.Contains("ref/"), + target: Path.GetDirectoryName(e.FullName)!.Split('/').Last()) + ) + .GroupBy(e => (e.target, e.entry.Name)) + .Select(g => g.MaxBy(e => e.isRef)) + .Select(e => (e.target, e.entry)) + .ToArray(); + } + + static Stream DownloadBaselinePackage(string packagePath, Version baselineVersion) + { + Build.Information("Downloading {0} baseline package for version {1}", Path.GetFileName(packagePath), baselineVersion); + + try + { + var packageId = Regex.Replace( + Path.GetFileNameWithoutExtension(packagePath), + """(\.\d+\.\d+\.\d+)$""", ""); + + using var httpClient = new HttpClient(); + using var response = httpClient.Send(new HttpRequestMessage(HttpMethod.Get, + $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}")); + using var stream = response.Content.ReadAsStream(); + var memoryStream = new MemoryStream(); + stream.CopyTo(memoryStream); + memoryStream.Seek(0, SeekOrigin.Begin); + return memoryStream; + } + catch (Exception ex) + { + throw new InvalidOperationException($"Downloading baseline package for {packagePath} failed.\r" + ex.Message, ex); + } + } +} diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 524c9fa4e4..644c1267d6 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -36,6 +36,10 @@ using MicroCom.CodeGenerator; partial class Build : NukeBuild { BuildParameters Parameters { get; set; } + + [PackageExecutable("Microsoft.DotNet.ApiCompat.Tool", "Microsoft.DotNet.ApiCompat.Tool.dll")] + Tool ApiCompatTool; + protected override void OnBuildInitialized() { Parameters = new BuildParameters(this); @@ -278,7 +282,19 @@ partial class Build : NukeBuild RefAssemblyGenerator.GenerateRefAsmsInPackage(Parameters.NugetRoot / "Avalonia." + Parameters.Version + ".nupkg"); }); - + + Target ValidateApiDiff => _ => _ + .DependsOn(CreateNugetPackages) + .Executes(() => + { + foreach (var nugetPackage in Directory.GetFiles(Parameters.NugetRoot)) + { + ApiDiffValidation.ValidatePackage( + ApiCompatTool, nugetPackage, Parameters.ApiValidationBaseline, + Parameters.ApiValidationSuppressionFiles, Parameters.UpdateApiValidationSuppression); + } + }); + Target RunTests => _ => _ .DependsOn(RunCoreLibsTests) .DependsOn(RunRenderTests) @@ -288,7 +304,8 @@ partial class Build : NukeBuild Target Package => _ => _ .DependsOn(RunTests) - .DependsOn(CreateNugetPackages); + .DependsOn(CreateNugetPackages) + .DependsOn(ValidateApiDiff); Target CiAzureLinux => _ => _ .DependsOn(RunTests); diff --git a/nukebuild/BuildParameters.cs b/nukebuild/BuildParameters.cs index dfa914d1db..67ed086e20 100644 --- a/nukebuild/BuildParameters.cs +++ b/nukebuild/BuildParameters.cs @@ -22,6 +22,12 @@ public partial class Build [Parameter("skip-previewer")] public bool SkipPreviewer { get; set; } + [Parameter("api-baseline")] + public string ApiValidationBaseline { get; set; } + + [Parameter("update-api-suppression")] + public bool UpdateApiValidationSuppression { get; set; } + public class BuildParameters { public string Configuration { get; } @@ -57,7 +63,9 @@ public partial class Build public string FileZipSuffix { get; } public AbsolutePath ZipCoreArtifacts { get; } public AbsolutePath ZipNuGetArtifacts { get; } - + public Version ApiValidationBaseline { get; } + public bool UpdateApiValidationSuppression { get; } + public AbsolutePath ApiValidationSuppressionFiles { get; } public BuildParameters(Build b) { @@ -65,6 +73,10 @@ public partial class Build Configuration = b.Configuration ?? "Release"; SkipTests = b.SkipTests; SkipPreviewer = b.SkipPreviewer; + ApiValidationBaseline = b.ApiValidationBaseline is not null ? + new Version(b.ApiValidationBaseline) : + new Version(11, 0); + UpdateApiValidationSuppression = b.UpdateApiValidationSuppression; // CONFIGURATION MainRepo = "https://github.com/AvaloniaUI/Avalonia"; @@ -125,6 +137,7 @@ public partial class Build FileZipSuffix = Version + ".zip"; ZipCoreArtifacts = ZipRoot / ("Avalonia-" + FileZipSuffix); ZipNuGetArtifacts = ZipRoot / ("Avalonia-NuGet-" + FileZipSuffix); + ApiValidationSuppressionFiles = RootDirectory / "api"; } string GetVersion() diff --git a/nukebuild/Shims.cs b/nukebuild/Shims.cs index 6f79972ad6..eecfcf6da1 100644 --- a/nukebuild/Shims.cs +++ b/nukebuild/Shims.cs @@ -9,12 +9,12 @@ using Numerge; public partial class Build { - static void Information(string info) + internal static void Information(string info) { Logger.Info(info); } - static void Information(string info, params object[] args) + internal static void Information(string info, params object[] args) { Logger.Info(info, args); } diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj index 30e1200220..43453833d7 100644 --- a/nukebuild/_build.csproj +++ b/nukebuild/_build.csproj @@ -22,6 +22,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + + From 6eaf0f9e4f12e32a6851de7a167f9440891a3f4c Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 6 Jul 2023 14:17:10 -0700 Subject: [PATCH 26/72] Break the API --- src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs | 4 ++-- src/Avalonia.Controls.ColorPicker/HsvComponent.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs b/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs index b1d15d6b17..fb981db762 100644 --- a/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs +++ b/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs @@ -24,14 +24,14 @@ namespace Avalonia.Controls /// The new/updated color that triggered the change event. public ColorChangedEventArgs(Color oldColor, Color newColor) { - OldColor = oldColor; + //OldColor = oldColor; NewColor = newColor; } /// /// Gets the old/original color from before the change event. /// - public Color OldColor { get; private set; } + //public Color OldColor { get; private set; } /// /// Gets the new/updated color that triggered the change event. diff --git a/src/Avalonia.Controls.ColorPicker/HsvComponent.cs b/src/Avalonia.Controls.ColorPicker/HsvComponent.cs index 1a7a13166a..998633a8e1 100644 --- a/src/Avalonia.Controls.ColorPicker/HsvComponent.cs +++ b/src/Avalonia.Controls.ColorPicker/HsvComponent.cs @@ -18,7 +18,7 @@ namespace Avalonia.Controls /// /// Also see: /// - Alpha = 0, + // Alpha = 0, /// /// The Hue component. From c72aa402a8e5fbc84bf47b2afbd862f537055682 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 6 Jul 2023 14:25:54 -0700 Subject: [PATCH 27/72] Run in parallel --- nukebuild/ApiDiffValidation.cs | 18 +++++++++--------- nukebuild/Build.cs | 10 ++++------ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index 5112f87728..0ebded3b5a 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -5,11 +5,12 @@ using System.IO.Compression; using System.Linq; using System.Net.Http; using System.Text.RegularExpressions; +using System.Threading.Tasks; using Nuke.Common.Tooling; public static class ApiDiffValidation { - public static void ValidatePackage( + public static async Task ValidatePackage( Tool apiCompatTool, string packagePath, Version baselineVersion, string suppressionFilesFolder, bool updateSuppressionFile) { @@ -24,7 +25,7 @@ public static class ApiDiffValidation Directory.CreateDirectory(suppressionFilesFolder!); } - using (var baselineStream = DownloadBaselinePackage(packagePath, baselineVersion)) + using (var baselineStream = await DownloadBaselinePackage(packagePath, baselineVersion)) using (var target = new ZipArchive(File.Open(packagePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read)) using (var baseline = new ZipArchive(baselineStream, ZipArchiveMode.Read)) using (Helpers.UseTempDir(out var tempFolder)) @@ -44,7 +45,7 @@ public static class ApiDiffValidation Directory.CreateDirectory(Path.GetDirectoryName(baselineDllRealPath)!); using (var baselineDllFile = File.Create(baselineDllRealPath)) { - baselineDll.entry.Open().CopyTo(baselineDllFile); + await baselineDll.entry.Open().CopyToAsync(baselineDllFile); } var targetDll = targetDlls.FirstOrDefault(e => @@ -59,7 +60,7 @@ public static class ApiDiffValidation Directory.CreateDirectory(Path.GetDirectoryName(targetDllRealPath)!); using (var targetDllFile = File.Create(targetDllRealPath)) { - targetDll.entry.Open().CopyTo(targetDllFile); + await targetDll.entry.Open().CopyToAsync(targetDllFile); } left.Add(baselineDllPath); @@ -67,7 +68,6 @@ public static class ApiDiffValidation } var args = $""" -l={string.Join(',', left)} -r="{string.Join(',', right)}" """; - updateSuppressionFile = true; if (File.Exists(suppressionFile)) { args += $""" --suppression-file="{suppressionFile}" """; @@ -96,7 +96,7 @@ public static class ApiDiffValidation .ToArray(); } - static Stream DownloadBaselinePackage(string packagePath, Version baselineVersion) + static async Task DownloadBaselinePackage(string packagePath, Version baselineVersion) { Build.Information("Downloading {0} baseline package for version {1}", Path.GetFileName(packagePath), baselineVersion); @@ -107,11 +107,11 @@ public static class ApiDiffValidation """(\.\d+\.\d+\.\d+)$""", ""); using var httpClient = new HttpClient(); - using var response = httpClient.Send(new HttpRequestMessage(HttpMethod.Get, + using var response = await httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}")); - using var stream = response.Content.ReadAsStream(); + await using var stream = await response.Content.ReadAsStreamAsync(); var memoryStream = new MemoryStream(); - stream.CopyTo(memoryStream); + await stream.CopyToAsync(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); return memoryStream; } diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 644c1267d6..7c921cb630 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -285,14 +285,12 @@ partial class Build : NukeBuild Target ValidateApiDiff => _ => _ .DependsOn(CreateNugetPackages) - .Executes(() => + .Executes(async () => { - foreach (var nugetPackage in Directory.GetFiles(Parameters.NugetRoot)) - { - ApiDiffValidation.ValidatePackage( + await Task.WhenAll( + Directory.GetFiles(Parameters.NugetRoot).Select(nugetPackage => ApiDiffValidation.ValidatePackage( ApiCompatTool, nugetPackage, Parameters.ApiValidationBaseline, - Parameters.ApiValidationSuppressionFiles, Parameters.UpdateApiValidationSuppression); - } + Parameters.ApiValidationSuppressionFiles, Parameters.UpdateApiValidationSuppression))); }); Target RunTests => _ => _ From 65e29787dd5338a333f625b711e063c29a562dff Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 11:35:10 -0700 Subject: [PATCH 28/72] Parameters fixes --- .nuke/build.schema.json | 30 ++++++++++++------------------ nukebuild/ApiDiffValidation.cs | 19 +++++++++++-------- nukebuild/BuildParameters.cs | 21 ++++++++++----------- 3 files changed, 33 insertions(+), 37 deletions(-) diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index 8bc812b0e2..b802589fc7 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -6,21 +6,18 @@ "build": { "type": "object", "properties": { - "ApiValidationBaseline": { - "type": "string", - "description": "api-baseline" + "api-baseline": { + "type": "string" }, - "Configuration": { - "type": "string", - "description": "configuration" + "configuration": { + "type": "string" }, "Continue": { "type": "boolean", "description": "Indicates to continue a previously failed build attempt" }, - "ForceNugetVersion": { - "type": "string", - "description": "force-nuget-version" + "force-nuget-version": { + "type": "string" }, "Help": { "type": "boolean", @@ -98,13 +95,11 @@ ] } }, - "SkipPreviewer": { - "type": "boolean", - "description": "skip-previewer" + "skip-previewer": { + "type": "boolean" }, - "SkipTests": { - "type": "boolean", - "description": "skip-tests" + "skip-tests": { + "type": "boolean" }, "Target": { "type": "array", @@ -134,9 +129,8 @@ ] } }, - "UpdateApiValidationSuppression": { - "type": "boolean", - "description": "update-api-suppression" + "update-api-suppression": { + "type": "boolean" }, "Verbosity": { "type": "string", diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index 0ebded3b5a..41259d9b2f 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -10,8 +10,10 @@ using Nuke.Common.Tooling; public static class ApiDiffValidation { + private static readonly HttpClient s_httpClient = new(); + public static async Task ValidatePackage( - Tool apiCompatTool, string packagePath, Version baselineVersion, + Tool apiCompatTool, string packagePath, string baselineVersion, string suppressionFilesFolder, bool updateSuppressionFile) { if (baselineVersion is null) @@ -25,7 +27,7 @@ public static class ApiDiffValidation Directory.CreateDirectory(suppressionFilesFolder!); } - using (var baselineStream = await DownloadBaselinePackage(packagePath, baselineVersion)) + await using (var baselineStream = await DownloadBaselinePackage(packagePath, baselineVersion)) using (var target = new ZipArchive(File.Open(packagePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read)) using (var baseline = new ZipArchive(baselineStream, ZipArchiveMode.Read)) using (Helpers.UseTempDir(out var tempFolder)) @@ -43,7 +45,7 @@ public static class ApiDiffValidation var baselineDllPath = Path.Combine("baseline", baselineDll.target, baselineDll.entry.Name); var baselineDllRealPath = Path.Combine(tempFolder, baselineDllPath); Directory.CreateDirectory(Path.GetDirectoryName(baselineDllRealPath)!); - using (var baselineDllFile = File.Create(baselineDllRealPath)) + await using (var baselineDllFile = File.Create(baselineDllRealPath)) { await baselineDll.entry.Open().CopyToAsync(baselineDllFile); } @@ -58,7 +60,7 @@ public static class ApiDiffValidation var targetDllPath = Path.Combine("target", targetDll.target, targetDll.entry.Name); var targetDllRealPath = Path.Combine(tempFolder, targetDllPath); Directory.CreateDirectory(Path.GetDirectoryName(targetDllRealPath)!); - using (var targetDllFile = File.Create(targetDllRealPath)) + await using (var targetDllFile = File.Create(targetDllRealPath)) { await targetDll.entry.Open().CopyToAsync(targetDllFile); } @@ -96,7 +98,7 @@ public static class ApiDiffValidation .ToArray(); } - static async Task DownloadBaselinePackage(string packagePath, Version baselineVersion) + static async Task DownloadBaselinePackage(string packagePath, string baselineVersion) { Build.Information("Downloading {0} baseline package for version {1}", Path.GetFileName(packagePath), baselineVersion); @@ -106,9 +108,10 @@ public static class ApiDiffValidation Path.GetFileNameWithoutExtension(packagePath), """(\.\d+\.\d+\.\d+)$""", ""); - using var httpClient = new HttpClient(); - using var response = await httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, - $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}")); + using var response = await s_httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, + $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}"), HttpCompletionOption.ResponseHeadersRead); + response.EnsureSuccessStatusCode(); + await using var stream = await response.Content.ReadAsStreamAsync(); var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); diff --git a/nukebuild/BuildParameters.cs b/nukebuild/BuildParameters.cs index 67ed086e20..75c859f2e8 100644 --- a/nukebuild/BuildParameters.cs +++ b/nukebuild/BuildParameters.cs @@ -10,22 +10,22 @@ using static Nuke.Common.IO.PathConstruction; public partial class Build { - [Parameter("configuration")] + [Parameter(Name = "configuration")] public string Configuration { get; set; } - [Parameter("skip-tests")] + [Parameter(Name = "skip-tests")] public bool SkipTests { get; set; } - [Parameter("force-nuget-version")] + [Parameter(Name = "force-nuget-version")] public string ForceNugetVersion { get; set; } - [Parameter("skip-previewer")] + [Parameter(Name = "skip-previewer")] public bool SkipPreviewer { get; set; } - [Parameter("api-baseline")] + [Parameter(Name = "api-baseline")] public string ApiValidationBaseline { get; set; } - [Parameter("update-api-suppression")] + [Parameter(Name = "update-api-suppression")] public bool UpdateApiValidationSuppression { get; set; } public class BuildParameters @@ -63,7 +63,7 @@ public partial class Build public string FileZipSuffix { get; } public AbsolutePath ZipCoreArtifacts { get; } public AbsolutePath ZipNuGetArtifacts { get; } - public Version ApiValidationBaseline { get; } + public string ApiValidationBaseline { get; } public bool UpdateApiValidationSuppression { get; } public AbsolutePath ApiValidationSuppressionFiles { get; } @@ -73,10 +73,6 @@ public partial class Build Configuration = b.Configuration ?? "Release"; SkipTests = b.SkipTests; SkipPreviewer = b.SkipPreviewer; - ApiValidationBaseline = b.ApiValidationBaseline is not null ? - new Version(b.ApiValidationBaseline) : - new Version(11, 0); - UpdateApiValidationSuppression = b.UpdateApiValidationSuppression; // CONFIGURATION MainRepo = "https://github.com/AvaloniaUI/Avalonia"; @@ -115,6 +111,9 @@ public partial class Build // VERSION Version = b.ForceNugetVersion ?? GetVersion(); + ApiValidationBaseline = b.ApiValidationBaseline ?? new Version(new Version(Version).Major, 0).ToString(); + UpdateApiValidationSuppression = b.UpdateApiValidationSuppression; + if (IsRunningOnAzure) { if (!IsNuGetRelease) From 8097a1c9934d19373aee0062bc5ce57b5f42ab03 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 12:19:00 -0700 Subject: [PATCH 29/72] Throw on any output error --- nukebuild/ApiDiffValidation.cs | 29 ++++++++++++++++++++--------- nukebuild/Build.cs | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index 41259d9b2f..91bd54fd89 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -69,17 +69,28 @@ public static class ApiDiffValidation right.Add(targetDllPath); } - var args = $""" -l={string.Join(',', left)} -r="{string.Join(',', right)}" """; - if (File.Exists(suppressionFile)) + if (left.Any()) { - args += $""" --suppression-file="{suppressionFile}" """; - } - if (updateSuppressionFile) - { - args += $""" --suppression-output-file="{suppressionFile}" --generate-suppression-file=true """; - } + var args = $""" -l={string.Join(',', left)} -r="{string.Join(',', right)}" """; + if (File.Exists(suppressionFile)) + { + args += $""" --suppression-file="{suppressionFile}" """; + } - apiCompatTool(args, tempFolder); + if (updateSuppressionFile) + { + args += $""" --suppression-output-file="{suppressionFile}" --generate-suppression-file=true """; + } + + var result = apiCompatTool(args, tempFolder) + .Where(t => t.Type == OutputType.Err).ToArray(); + if (result.Any()) + { + throw new AggregateException( + $"ApiDiffValidation task has failed for \"{Path.GetFileName(packagePath)}\" package", + result.Select(r => new Exception(r.Text))); + } + } } } diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 7c921cb630..b82c446249 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -37,7 +37,7 @@ partial class Build : NukeBuild { BuildParameters Parameters { get; set; } - [PackageExecutable("Microsoft.DotNet.ApiCompat.Tool", "Microsoft.DotNet.ApiCompat.Tool.dll")] + [PackageExecutable("Microsoft.DotNet.ApiCompat.Tool", "Microsoft.DotNet.ApiCompat.Tool.dll", Framework = "net6.0")] Tool ApiCompatTool; protected override void OnBuildInitialized() From 003bed5c80599dcb18997d64cfe3917d3adbd578 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 12:21:52 -0700 Subject: [PATCH 30/72] Update exclusions --- nukebuild/ApiDiffValidation.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index 91bd54fd89..1bcb761cbb 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -97,7 +97,9 @@ public static class ApiDiffValidation private static IReadOnlyCollection<(string target, ZipArchiveEntry entry)> GetDlls(ZipArchive archive) { return archive.Entries - .Where(e => Path.GetExtension(e.FullName) == ".dll") + .Where(e => Path.GetExtension(e.FullName) == ".dll" + // Exclude analyzers and build task, as we don't care about breaking changes there + && !e.FullName.Contains("analyzers/") && !e.Name.Contains("Avalonia.Build.Tasks")) .Select(e => ( entry: e, isRef: e.FullName.Contains("ref/"), From 36b74afa17f587a3438bf677fdb0d1587754aac4 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 12:24:38 -0700 Subject: [PATCH 31/72] Set UpdateApiValidationSuppression to true by default on local build --- nukebuild/BuildParameters.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nukebuild/BuildParameters.cs b/nukebuild/BuildParameters.cs index 75c859f2e8..897fdc84f1 100644 --- a/nukebuild/BuildParameters.cs +++ b/nukebuild/BuildParameters.cs @@ -26,7 +26,7 @@ public partial class Build public string ApiValidationBaseline { get; set; } [Parameter(Name = "update-api-suppression")] - public bool UpdateApiValidationSuppression { get; set; } + public bool? UpdateApiValidationSuppression { get; set; } public class BuildParameters { @@ -112,7 +112,7 @@ public partial class Build Version = b.ForceNugetVersion ?? GetVersion(); ApiValidationBaseline = b.ApiValidationBaseline ?? new Version(new Version(Version).Major, 0).ToString(); - UpdateApiValidationSuppression = b.UpdateApiValidationSuppression; + UpdateApiValidationSuppression = b.UpdateApiValidationSuppression ?? IsLocalBuild; if (IsRunningOnAzure) { From 13c6fbe1dbd87e558cc9db0a54665bacb11a4349 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 12:31:44 -0700 Subject: [PATCH 32/72] Revert "Break the API" This reverts commit f043f6b1617c85706c7c33741024a09b5b8c7d89. --- src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs | 4 ++-- src/Avalonia.Controls.ColorPicker/HsvComponent.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs b/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs index fb981db762..b1d15d6b17 100644 --- a/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs +++ b/src/Avalonia.Controls.ColorPicker/ColorChangedEventArgs.cs @@ -24,14 +24,14 @@ namespace Avalonia.Controls /// The new/updated color that triggered the change event. public ColorChangedEventArgs(Color oldColor, Color newColor) { - //OldColor = oldColor; + OldColor = oldColor; NewColor = newColor; } /// /// Gets the old/original color from before the change event. /// - //public Color OldColor { get; private set; } + public Color OldColor { get; private set; } /// /// Gets the new/updated color that triggered the change event. diff --git a/src/Avalonia.Controls.ColorPicker/HsvComponent.cs b/src/Avalonia.Controls.ColorPicker/HsvComponent.cs index 998633a8e1..1a7a13166a 100644 --- a/src/Avalonia.Controls.ColorPicker/HsvComponent.cs +++ b/src/Avalonia.Controls.ColorPicker/HsvComponent.cs @@ -18,7 +18,7 @@ namespace Avalonia.Controls /// /// Also see: /// - // Alpha = 0, + Alpha = 0, /// /// The Hue component. From c755ea628bf832fbdd9b8a575980d86564aedc0c Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 7 Jul 2023 23:39:13 -0700 Subject: [PATCH 33/72] Fix regex --- nukebuild/ApiDiffValidation.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index 1bcb761cbb..a236178c83 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -117,9 +117,15 @@ public static class ApiDiffValidation try { + /* + Gets package name from versions like: + Avalonia.0.10.0-preview1 + Avalonia.11.0.999-cibuild0037534-beta + Avalonia.11.0.0 + */ var packageId = Regex.Replace( Path.GetFileNameWithoutExtension(packagePath), - """(\.\d+\.\d+\.\d+)$""", ""); + """(\.\d+\.\d+\.\d+(?:-.+)?)$""", ""); using var response = await s_httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}"), HttpCompletionOption.ResponseHeadersRead); From 19bae967d30a00d2767921b1842087321dae624b Mon Sep 17 00:00:00 2001 From: jgcodes2020 Date: Sun, 9 Jul 2023 18:09:48 -0400 Subject: [PATCH 34/72] Rename ImportCompeted into ImportCompleted --- .../Composition/CompositionExternalMemory.cs | 11 +++++++++-- .../Rendering/Composition/CompositionInterop.cs | 6 +++--- .../Server/ServerCompositionDrawingSurface.cs | 6 +++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs index ce728f86a2..476e15c47f 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs @@ -84,14 +84,21 @@ public enum CompositionGpuImportedImageSynchronizationCapabilities /// /// An imported GPU object that's usable by composition APIs /// +[NotClientImplementable] public interface ICompositionGpuImportedObject : IAsyncDisposable { /// /// Tracks the import status of the object. Once the task is completed, /// the user code is allowed to free the resource owner in case when a non-owning - /// sharing handle was used + /// sharing handle was used. /// - Task ImportCompeted { get; } + Task ImportCompleted { get; } + + /// + /// ImportCompleted (recommended replacement) + [Obsolete("Please use ICompositionGpuImportedObject.ImportCompleted instead")] + Task ImportCompeted => ImportCompleted; + /// /// Indicates if the device context this instance is associated with is no longer available /// diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs b/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs index 1643ec6e8d..9eea228e84 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs @@ -67,18 +67,18 @@ abstract class CompositionGpuImportedObjectBase : ICompositionGpuImportedObject Context = context; Feature = feature; - ImportCompeted = Compositor.InvokeServerJobAsync(Import); + ImportCompleted = Compositor.InvokeServerJobAsync(Import); } protected abstract void Import(); public abstract void Dispose(); - public Task ImportCompeted { get; } + public Task ImportCompleted { get; } public bool IsLost => Context.IsLost; public ValueTask DisposeAsync() => new(Compositor.InvokeServerJobAsync(() => { - if (ImportCompeted.Status == TaskStatus.RanToCompletion) + if (ImportCompleted.Status == TaskStatus.RanToCompletion) Dispose(); })); } diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs index da24b3812a..f58403f0bc 100644 --- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs +++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawingSurface.cs @@ -31,12 +31,12 @@ internal class ServerCompositionDrawingSurface : ServerCompositionSurface, IDisp throw new PlatformGraphicsContextLostException(); // This should never happen, but check for it anyway to avoid a deadlock - if (!image.ImportCompeted.IsCompleted) + if (!image.ImportCompleted.IsCompleted) throw new InvalidOperationException("The import operation is not completed yet"); // Rethrow the import here exception - if (image.ImportCompeted.IsFaulted) - image.ImportCompeted.GetAwaiter().GetResult(); + if (image.ImportCompleted.IsFaulted) + image.ImportCompleted.GetAwaiter().GetResult(); } void Update(IBitmapImpl newImage, IPlatformRenderInterfaceContext context) From 1e5975d4ded724c362e11e28894fef1d834ac8d3 Mon Sep 17 00:00:00 2001 From: jgcodes2020 Date: Sun, 9 Jul 2023 22:04:58 -0400 Subject: [PATCH 35/72] Hide ImportCompeted from smart completion (to avoid confusion) --- .../Rendering/Composition/CompositionExternalMemory.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs index 476e15c47f..236cb89fcd 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Threading.Tasks; using Avalonia.Metadata; using Avalonia.Platform; @@ -97,6 +98,7 @@ public interface ICompositionGpuImportedObject : IAsyncDisposable /// /// ImportCompleted (recommended replacement) [Obsolete("Please use ICompositionGpuImportedObject.ImportCompleted instead")] + [EditorBrowsable(EditorBrowsableState.Never)] Task ImportCompeted => ImportCompleted; /// From 4419ef7d4799af311dfc69169df04bd118cf9bce Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Mon, 10 Jul 2023 23:10:55 +0200 Subject: [PATCH 36/72] Add suppression for removed generated NamespaceInfo types --- ...ia.Controls.ColorPicker.11.0.999.nupkg.xml | 64 +++ api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml | 418 ++++++++++++++++++ api/Avalonia.Themes.Simple.11.0.999.nupkg.xml | 406 +++++++++++++++++ 3 files changed, 888 insertions(+) create mode 100644 api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml create mode 100644 api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml create mode 100644 api/Avalonia.Themes.Simple.11.0.999.nupkg.xml diff --git a/api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml b/api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml new file mode 100644 index 0000000000..978aafcc88 --- /dev/null +++ b/api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml @@ -0,0 +1,64 @@ + + + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPicker.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPreviewer.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSlider.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSpectrum.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorView.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPicker.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPreviewer.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSlider.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSpectrum.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorView.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + \ No newline at end of file diff --git a/api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml b/api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml new file mode 100644 index 0000000000..5204e75fdd --- /dev/null +++ b/api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml @@ -0,0 +1,418 @@ + + + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/BaseResources.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/FluentControlResources.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuScrollViewer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + \ No newline at end of file diff --git a/api/Avalonia.Themes.Simple.11.0.999.nupkg.xml b/api/Avalonia.Themes.Simple.11.0.999.nupkg.xml new file mode 100644 index 0000000000..199ccd76df --- /dev/null +++ b/api/Avalonia.Themes.Simple.11.0.999.nupkg.xml @@ -0,0 +1,406 @@ + + + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/Base.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + \ No newline at end of file From 98e5f74f4e8c793c43a331a692b12ad77c3b5dac Mon Sep 17 00:00:00 2001 From: Max Katz Date: Mon, 10 Jul 2023 20:22:40 -0400 Subject: [PATCH 37/72] Fix xml files generation --- api/Avalonia.Controls.ColorPicker.nupkg.xml | 64 +++ api/Avalonia.Themes.Fluent.nupkg.xml | 418 ++++++++++++++++++++ api/Avalonia.Themes.Simple.nupkg.xml | 406 +++++++++++++++++++ nukebuild/ApiDiffValidation.cs | 30 +- 4 files changed, 905 insertions(+), 13 deletions(-) create mode 100644 api/Avalonia.Controls.ColorPicker.nupkg.xml create mode 100644 api/Avalonia.Themes.Fluent.nupkg.xml create mode 100644 api/Avalonia.Themes.Simple.nupkg.xml diff --git a/api/Avalonia.Controls.ColorPicker.nupkg.xml b/api/Avalonia.Controls.ColorPicker.nupkg.xml new file mode 100644 index 0000000000..978aafcc88 --- /dev/null +++ b/api/Avalonia.Controls.ColorPicker.nupkg.xml @@ -0,0 +1,64 @@ + + + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPicker.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPreviewer.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSlider.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSpectrum.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorView.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPicker.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPreviewer.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSlider.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSpectrum.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorView.xaml + baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + + \ No newline at end of file diff --git a/api/Avalonia.Themes.Fluent.nupkg.xml b/api/Avalonia.Themes.Fluent.nupkg.xml new file mode 100644 index 0000000000..5204e75fdd --- /dev/null +++ b/api/Avalonia.Themes.Fluent.nupkg.xml @@ -0,0 +1,418 @@ + + + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/BaseResources.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/FluentControlResources.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuScrollViewer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + + \ No newline at end of file diff --git a/api/Avalonia.Themes.Simple.nupkg.xml b/api/Avalonia.Themes.Simple.nupkg.xml new file mode 100644 index 0000000000..199ccd76df --- /dev/null +++ b/api/Avalonia.Themes.Simple.nupkg.xml @@ -0,0 +1,406 @@ + + + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/Base.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + + CP0001 + T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml + baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll + target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + + \ No newline at end of file diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index a236178c83..d0fc3d02e1 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -38,7 +38,7 @@ public static class ApiDiffValidation var left = new List(); var right = new List(); - var suppressionFile = Path.Combine(suppressionFilesFolder, Path.GetFileName(packagePath) + ".xml"); + var suppressionFile = Path.Combine(suppressionFilesFolder, GetPackageId(packagePath) + ".nupkg.xml"); foreach (var baselineDll in baselineDlls) { @@ -113,20 +113,17 @@ public static class ApiDiffValidation static async Task DownloadBaselinePackage(string packagePath, string baselineVersion) { - Build.Information("Downloading {0} baseline package for version {1}", Path.GetFileName(packagePath), baselineVersion); + /* + Gets package name from versions like: + Avalonia.0.10.0-preview1 + Avalonia.11.0.999-cibuild0037534-beta + Avalonia.11.0.0 + */ + var packageId = GetPackageId(packagePath); + Build.Information("Downloading {0} {1} baseline package", packageId, baselineVersion); try { - /* - Gets package name from versions like: - Avalonia.0.10.0-preview1 - Avalonia.11.0.999-cibuild0037534-beta - Avalonia.11.0.0 - */ - var packageId = Regex.Replace( - Path.GetFileNameWithoutExtension(packagePath), - """(\.\d+\.\d+\.\d+(?:-.+)?)$""", ""); - using var response = await s_httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}"), HttpCompletionOption.ResponseHeadersRead); response.EnsureSuccessStatusCode(); @@ -139,7 +136,14 @@ public static class ApiDiffValidation } catch (Exception ex) { - throw new InvalidOperationException($"Downloading baseline package for {packagePath} failed.\r" + ex.Message, ex); + throw new InvalidOperationException($"Downloading baseline package for {packageId} {baselineVersion} failed.\r" + ex.Message, ex); } } + + static string GetPackageId(string packagePath) + { + return Regex.Replace( + Path.GetFileNameWithoutExtension(packagePath), + """(\.\d+\.\d+\.\d+(?:-.+)?)$""", ""); + } } From bd8628bfef9abd409aef8e37132c756a6814419b Mon Sep 17 00:00:00 2001 From: Max Katz Date: Mon, 10 Jul 2023 20:22:47 -0400 Subject: [PATCH 38/72] Revert "Add suppression for removed generated NamespaceInfo types" This reverts commit 4419ef7d4799af311dfc69169df04bd118cf9bce. --- ...ia.Controls.ColorPicker.11.0.999.nupkg.xml | 64 --- api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml | 418 ------------------ api/Avalonia.Themes.Simple.11.0.999.nupkg.xml | 406 ----------------- 3 files changed, 888 deletions(-) delete mode 100644 api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml delete mode 100644 api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml delete mode 100644 api/Avalonia.Themes.Simple.11.0.999.nupkg.xml diff --git a/api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml b/api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml deleted file mode 100644 index 978aafcc88..0000000000 --- a/api/Avalonia.Controls.ColorPicker.11.0.999.nupkg.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPicker.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPreviewer.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSlider.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSpectrum.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorView.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPicker.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPreviewer.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSlider.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSpectrum.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorView.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - - \ No newline at end of file diff --git a/api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml b/api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml deleted file mode 100644 index 5204e75fdd..0000000000 --- a/api/Avalonia.Themes.Fluent.11.0.999.nupkg.xml +++ /dev/null @@ -1,418 +0,0 @@ - - - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/BaseResources.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/FluentControlResources.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuScrollViewer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - - \ No newline at end of file diff --git a/api/Avalonia.Themes.Simple.11.0.999.nupkg.xml b/api/Avalonia.Themes.Simple.11.0.999.nupkg.xml deleted file mode 100644 index 199ccd76df..0000000000 --- a/api/Avalonia.Themes.Simple.11.0.999.nupkg.xml +++ /dev/null @@ -1,406 +0,0 @@ - - - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/Base.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - - CP0001 - T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll - - \ No newline at end of file From edccb582615b91048e9e5bb995e53acf1138f25a Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Tue, 11 Jul 2023 18:13:54 +0200 Subject: [PATCH 39/72] Composition: collect IRenderDataItem resources recursively --- .../Drawing/ServerCompositionRenderData.cs | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionRenderData.cs b/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionRenderData.cs index cb5e21be00..97083ccaf5 100644 --- a/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionRenderData.cs +++ b/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionRenderData.cs @@ -42,22 +42,31 @@ class ServerCompositionRenderData : SimpleServerRenderResource _items.Add(reader.ReadObject()); var collector = s_resourceHashSetPool.Get(); - foreach(var item in _items) - if (item is IRenderDataItemWithServerResources resourceItem) - resourceItem.Collect(collector); - + CollectResources(_items, collector); + foreach (var r in collector.Resources) { _referencedResources.Add(r); r.AddObserver(this); } - + collector.Resources.Clear(); s_resourceHashSetPool.ReturnAndSetNull(ref collector); base.DeserializeChangesCore(reader, committedAt); } + private static void CollectResources(PooledInlineList items, IRenderDataServerResourcesCollector collector) + { + foreach (var item in items) + { + if (item is IRenderDataItemWithServerResources resourceItem) + resourceItem.Collect(collector); + else if (item is RenderDataPushNode pushNode) + CollectResources(pushNode.Children, collector); + } + } + public Rect? Bounds { get @@ -133,4 +142,4 @@ class ServerCompositionRenderData : SimpleServerRenderResource Reset(); base.Dispose(); } -} \ No newline at end of file +} From 237e4cba69cf26e3ca8ca379c2326521dde29500 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Tue, 11 Jul 2023 18:35:38 +0200 Subject: [PATCH 40/72] Fix InlineDictionary enumeration when an array is used --- .../Utilities/SmallDictionary.cs | 16 +++--- .../Utilities/InlineDictionaryTests.cs | 53 +++++++++++++++++++ 2 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 tests/Avalonia.Base.UnitTests/Utilities/InlineDictionaryTests.cs diff --git a/src/Avalonia.Base/Utilities/SmallDictionary.cs b/src/Avalonia.Base/Utilities/SmallDictionary.cs index b6e62411da..1e63d554b4 100644 --- a/src/Avalonia.Base/Utilities/SmallDictionary.cs +++ b/src/Avalonia.Base/Utilities/SmallDictionary.cs @@ -51,7 +51,7 @@ internal struct InlineDictionary : IEnumerable : IEnumerable(); + dic.Add("foo", 1); + dic.Add("bar", 2); + dic.Add("baz", 3); + + Assert.Equal( + new[] { + new KeyValuePair("foo", 1), + new KeyValuePair("bar", 2), + new KeyValuePair("baz", 3) + }, + dic); + } + + [Fact] + public void Enumeration_After_Remove_With_Internal_Array_Works() + { + var dic = new InlineDictionary(); + dic.Add("foo", 1); + dic.Add("bar", 2); + dic.Add("baz", 3); + + Assert.Equal( + new[] { + new KeyValuePair("foo", 1), + new KeyValuePair("bar", 2), + new KeyValuePair("baz", 3) + }, + dic); + + dic.Remove("bar"); + + Assert.Equal( + new[] { + new KeyValuePair("foo", 1), + new KeyValuePair("baz", 3) + }, + dic); + } +} From bd64a51eebbc36571b086d22d72a710d47f94309 Mon Sep 17 00:00:00 2001 From: john_doe Date: Tue, 11 Jul 2023 23:03:15 +0200 Subject: [PATCH 41/72] Changed null checks to make use of nameof() --- src/Avalonia.Base/Threading/Dispatcher.Invoke.cs | 8 ++++---- src/Avalonia.Base/Threading/DispatcherTimer.cs | 4 ++-- src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs | 2 +- .../DataGridColumnCollection.cs | 2 +- src/Avalonia.Controls.DataGrid/DataGridLength.cs | 2 +- .../Automation/Peers/ControlAutomationPeer.cs | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs index 7d586e1cbd..25be5779b9 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs @@ -90,7 +90,7 @@ public partial class Dispatcher { if (callback == null) { - throw new ArgumentNullException("callback"); + throw new ArgumentNullException(nameof(callback)); } DispatcherPriority.Validate(priority, "priority"); @@ -212,7 +212,7 @@ public partial class Dispatcher { if (callback == null) { - throw new ArgumentNullException("callback"); + throw new ArgumentNullException(nameof(callback)); } DispatcherPriority.Validate(priority, "priority"); @@ -304,7 +304,7 @@ public partial class Dispatcher { if (callback == null) { - throw new ArgumentNullException("callback"); + throw new ArgumentNullException(nameof(callback)); } DispatcherPriority.Validate(priority, "priority"); @@ -379,7 +379,7 @@ public partial class Dispatcher { if (callback == null) { - throw new ArgumentNullException("callback"); + throw new ArgumentNullException(nameof(callback)); } DispatcherPriority.Validate(priority, "priority"); diff --git a/src/Avalonia.Base/Threading/DispatcherTimer.cs b/src/Avalonia.Base/Threading/DispatcherTimer.cs index 879d9d8a5f..473b9eeefa 100644 --- a/src/Avalonia.Base/Threading/DispatcherTimer.cs +++ b/src/Avalonia.Base/Threading/DispatcherTimer.cs @@ -62,7 +62,7 @@ public partial class DispatcherTimer { if (callback == null) { - throw new ArgumentNullException("callback"); + throw new ArgumentNullException(nameof(callback)); } Tick += callback; @@ -253,7 +253,7 @@ public partial class DispatcherTimer { if (dispatcher == null) { - throw new ArgumentNullException("dispatcher"); + throw new ArgumentNullException(nameof(dispatcher)); } DispatcherPriority.Validate(priority, "priority"); diff --git a/src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs index 5d080f5ef6..b2deb1c26e 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs @@ -222,7 +222,7 @@ namespace Avalonia.Controls { if (element == null) { - throw new ArgumentNullException("element"); + throw new ArgumentNullException(nameof(element)); } if (element is CheckBox checkBox) { diff --git a/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs index e7f9a9a6c4..798228c84c 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs @@ -191,7 +191,7 @@ namespace Avalonia.Controls } if (dataGridColumn == null) { - throw new ArgumentNullException("dataGridColumn"); + throw new ArgumentNullException(nameof(dataGridColumn)); } int columnIndexWithFiller = columnIndex; diff --git a/src/Avalonia.Controls.DataGrid/DataGridLength.cs b/src/Avalonia.Controls.DataGrid/DataGridLength.cs index 4841ddd494..a193352f52 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridLength.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridLength.cs @@ -499,7 +499,7 @@ namespace Avalonia.Controls { if (destinationType == null) { - throw new ArgumentNullException("destinationType"); + throw new ArgumentNullException(nameof(destinationType)); } if (destinationType != typeof(string)) { diff --git a/src/Avalonia.Controls/Automation/Peers/ControlAutomationPeer.cs b/src/Avalonia.Controls/Automation/Peers/ControlAutomationPeer.cs index 756951667b..c19d887230 100644 --- a/src/Avalonia.Controls/Automation/Peers/ControlAutomationPeer.cs +++ b/src/Avalonia.Controls/Automation/Peers/ControlAutomationPeer.cs @@ -18,7 +18,7 @@ namespace Avalonia.Automation.Peers public ControlAutomationPeer(Control owner) { - Owner = owner ?? throw new ArgumentNullException("owner"); + Owner = owner ?? throw new ArgumentNullException(nameof(owner)); Initialize(); } From 54158b475efce777c567d9a325d13a99b1c689af Mon Sep 17 00:00:00 2001 From: Max Katz Date: Tue, 11 Jul 2023 23:09:49 -0400 Subject: [PATCH 42/72] Fix separators issue in ApiDiffValidatiton too --- api/Avalonia.Controls.ColorPicker.nupkg.xml | 40 +-- api/Avalonia.Themes.Fluent.nupkg.xml | 276 ++++++++++---------- api/Avalonia.Themes.Simple.nupkg.xml | 268 +++++++++---------- nukebuild/ApiDiffValidation.cs | 14 +- 4 files changed, 301 insertions(+), 297 deletions(-) diff --git a/api/Avalonia.Controls.ColorPicker.nupkg.xml b/api/Avalonia.Controls.ColorPicker.nupkg.xml index 978aafcc88..90271d6e98 100644 --- a/api/Avalonia.Controls.ColorPicker.nupkg.xml +++ b/api/Avalonia.Controls.ColorPicker.nupkg.xml @@ -4,61 +4,61 @@ CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPicker.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorPreviewer.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSlider.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorSpectrum.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Fluent/ColorView.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPicker.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorPreviewer.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSlider.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorSpectrum.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Themes/Simple/ColorView.xaml - baseline\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll - target\lib\netstandard2.0\Avalonia.Controls.ColorPicker.dll + baseline/netstandard2.0/Avalonia.Controls.ColorPicker.dll + target/netstandard2.0/Avalonia.Controls.ColorPicker.dll \ No newline at end of file diff --git a/api/Avalonia.Themes.Fluent.nupkg.xml b/api/Avalonia.Themes.Fluent.nupkg.xml index 5204e75fdd..f35bf5a629 100644 --- a/api/Avalonia.Themes.Fluent.nupkg.xml +++ b/api/Avalonia.Themes.Fluent.nupkg.xml @@ -4,415 +4,415 @@ CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/BaseResources.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/FluentControlResources.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuScrollViewer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Fluent.dll - target\lib\netstandard2.0\Avalonia.Themes.Fluent.dll + baseline/netstandard2.0/Avalonia.Themes.Fluent.dll + target/netstandard2.0/Avalonia.Themes.Fluent.dll \ No newline at end of file diff --git a/api/Avalonia.Themes.Simple.nupkg.xml b/api/Avalonia.Themes.Simple.nupkg.xml index 199ccd76df..78d8c4b332 100644 --- a/api/Avalonia.Themes.Simple.nupkg.xml +++ b/api/Avalonia.Themes.Simple.nupkg.xml @@ -4,403 +4,403 @@ CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Accents/Base.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AdornerLayer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/AutoCompleteBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Button.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ButtonSpinner.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Calendar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarDayButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CalendarItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CaptionButtons.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Carousel.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/CheckBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ComboBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ContextMenu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DataValidationErrors.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DatePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DateTimePickerShared.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/DropDownButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/EmbeddableControlRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Expander.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/FlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/GridSplitter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ItemsControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Label.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ListBoxItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ManagedFileChooser.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Menu.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuFlyoutPresenter.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/MenuItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NativeMenuBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NotificationCard.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/NumericUpDown.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/OverlayPopupHost.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PathIcon.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/PopupRoot.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ProgressBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RadioButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshContainer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RefreshVisualizer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/RepeatButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ScrollViewer.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SelectableTextBlock.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Separator.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Slider.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/SplitView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStrip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TabStripItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TextBox.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ThemeVariantScope.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TimePicker.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TitleBar.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleButton.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToggleSwitch.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/ToolTip.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TransitioningContentControl.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeView.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/TreeViewItem.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/Window.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll CP0001 T:CompiledAvaloniaXaml.!AvaloniaResources.NamespaceInfo:/Controls/WindowNotificationManager.xaml - baseline\lib\netstandard2.0\Avalonia.Themes.Simple.dll - target\lib\netstandard2.0\Avalonia.Themes.Simple.dll + baseline/netstandard2.0/Avalonia.Themes.Simple.dll + target/netstandard2.0/Avalonia.Themes.Simple.dll \ No newline at end of file diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index d0fc3d02e1..bd576250bd 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -40,9 +40,12 @@ public static class ApiDiffValidation var suppressionFile = Path.Combine(suppressionFilesFolder, GetPackageId(packagePath) + ".nupkg.xml"); + // Don't use Path.Combine with these left and right tool parameters. + // Microsoft.DotNet.ApiCompat.Tool is stupid and treats '/' and '\' as different assemblies in suppression files. + // So, always use Unix '/' foreach (var baselineDll in baselineDlls) { - var baselineDllPath = Path.Combine("baseline", baselineDll.target, baselineDll.entry.Name); + var baselineDllPath = $"baseline/{baselineDll.target}/{baselineDll.entry.Name}"; var baselineDllRealPath = Path.Combine(tempFolder, baselineDllPath); Directory.CreateDirectory(Path.GetDirectoryName(baselineDllRealPath)!); await using (var baselineDllFile = File.Create(baselineDllRealPath)) @@ -57,7 +60,7 @@ public static class ApiDiffValidation throw new InvalidOperationException($"Some assemblies are missing in the new package: {baselineDll.entry.Name} for {baselineDll.target}"); } - var targetDllPath = Path.Combine("target", targetDll.target, targetDll.entry.Name); + var targetDllPath = $"target/{targetDll.target}/{targetDll.entry.Name}"; var targetDllRealPath = Path.Combine(tempFolder, targetDllPath); Directory.CreateDirectory(Path.GetDirectoryName(targetDllRealPath)!); await using (var targetDllFile = File.Create(targetDllRealPath)) @@ -99,11 +102,12 @@ public static class ApiDiffValidation return archive.Entries .Where(e => Path.GetExtension(e.FullName) == ".dll" // Exclude analyzers and build task, as we don't care about breaking changes there - && !e.FullName.Contains("analyzers/") && !e.Name.Contains("Avalonia.Build.Tasks")) + && !e.FullName.Contains("analyzers/") && !e.FullName.Contains("analyzers\\") + && !e.Name.Contains("Avalonia.Build.Tasks")) .Select(e => ( entry: e, - isRef: e.FullName.Contains("ref/"), - target: Path.GetDirectoryName(e.FullName)!.Split('/').Last()) + isRef: e.FullName.Contains("ref/") || e.FullName.Contains("ref\\"), + target: Path.GetDirectoryName(e.FullName)!.Split(new [] { '/', '\\' }).Last()) ) .GroupBy(e => (e.target, e.entry.Name)) .Select(g => g.MaxBy(e => e.isRef)) From 157c6e91a000d57e38692b9fca8383529c769619 Mon Sep 17 00:00:00 2001 From: Tom Edwards Date: Fri, 9 Jun 2023 21:38:32 +0200 Subject: [PATCH 43/72] Add an overload for GetObservable that accepts an untyped AvaloniaProperty and a converter to a typed value Added missing docstrings for type params --- src/Avalonia.Base/AvaloniaObjectExtensions.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Avalonia.Base/AvaloniaObjectExtensions.cs b/src/Avalonia.Base/AvaloniaObjectExtensions.cs index b3f41eb420..833cd4b034 100644 --- a/src/Avalonia.Base/AvaloniaObjectExtensions.cs +++ b/src/Avalonia.Base/AvaloniaObjectExtensions.cs @@ -60,6 +60,8 @@ namespace Avalonia } /// + /// The type of the values held by the . + /// The type of the value returned by the . /// /// /// A method which is executed to convert each property value to . @@ -71,6 +73,15 @@ namespace Avalonia converter ?? throw new ArgumentNullException(nameof(converter))); } + /// + public static IObservable GetObservable(this AvaloniaObject o, AvaloniaProperty property, Func converter) + { + return new AvaloniaPropertyObservable( + o ?? throw new ArgumentNullException(nameof(o)), + property ?? throw new ArgumentNullException(nameof(property)), + converter ?? throw new ArgumentNullException(nameof(converter))); + } + /// /// Gets an observable for an . /// @@ -92,6 +103,15 @@ namespace Avalonia property ?? throw new ArgumentNullException(nameof(property))); } + /// + public static IObservable> GetBindingObservable(this AvaloniaObject o, AvaloniaProperty property, Func converter) + { + return new AvaloniaPropertyBindingObservable( + o ?? throw new ArgumentNullException(nameof(o)), + property ?? throw new ArgumentNullException(nameof(property)), + converter?? throw new ArgumentNullException(nameof(converter))); + } + /// /// Gets an observable for an . /// From aa7a2a27644b974b06da0f4108c5a30d3c7368e9 Mon Sep 17 00:00:00 2001 From: startewho Date: Thu, 13 Jul 2023 17:11:07 +0800 Subject: [PATCH 44/72] fix 12161 --- src/Avalonia.Controls/Utils/StringUtils.cs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Avalonia.Controls/Utils/StringUtils.cs b/src/Avalonia.Controls/Utils/StringUtils.cs index 2ea47b442a..b664687650 100644 --- a/src/Avalonia.Controls/Utils/StringUtils.cs +++ b/src/Avalonia.Controls/Utils/StringUtils.cs @@ -76,7 +76,7 @@ namespace Avalonia.Controls.Utils } var codepoint = new Codepoint(text[index]); - + if (!codepoint.IsWhiteSpace) { return false; @@ -85,12 +85,16 @@ namespace Avalonia.Controls.Utils // preceeded by lwsp. if (index > 0) { - var nextCodePoint = new Codepoint(text[index + 1]); - - if (nextCodePoint.IsBreakChar) + if (index + 1 < text.Length) { - return true; + var nextCodePoint = new Codepoint(text[index + 1]); + + if (nextCodePoint.IsBreakChar) + { + return true; + } } + return true; } switch (codepoint.GeneralCategory) @@ -125,7 +129,7 @@ namespace Avalonia.Controls.Utils } cursor = Math.Min(cursor, text.Length); - + int begin; int i; int cr; @@ -181,7 +185,7 @@ namespace Avalonia.Controls.Utils { return cursor; } - + if (cr < text.Length && text[cr] == '\r' && cr + 1 < text.Length && text[cr + 1] == '\n') { lf = cr + 1; @@ -214,9 +218,9 @@ namespace Avalonia.Controls.Utils { return i; } - + var cc = GetCharClass(text[i]); - + // skip over the word, punctuation, or run of whitespace while (i < cr && GetCharClass(text[i]) == cc) { From e25995f3c94e2f8a9781c8d93afe3e9ee5d229cf Mon Sep 17 00:00:00 2001 From: jgcodes2020 Date: Thu, 13 Jul 2023 10:25:58 -0400 Subject: [PATCH 45/72] Implement @maxkatz6's suggestions --- .../Rendering/Composition/CompositionExternalMemory.cs | 4 +++- src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs index 236cb89fcd..31cbaf2a29 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionExternalMemory.cs @@ -6,6 +6,8 @@ using Avalonia.Metadata; using Avalonia.Platform; namespace Avalonia.Rendering.Composition; + +[NotClientImplementable] public interface ICompositionGpuInterop { /// @@ -99,7 +101,7 @@ public interface ICompositionGpuImportedObject : IAsyncDisposable /// ImportCompleted (recommended replacement) [Obsolete("Please use ICompositionGpuImportedObject.ImportCompleted instead")] [EditorBrowsable(EditorBrowsableState.Never)] - Task ImportCompeted => ImportCompleted; + Task ImportCompeted { get; } /// /// Indicates if the device context this instance is associated with is no longer available diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs b/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs index 9eea228e84..12a252ed96 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionInterop.cs @@ -74,6 +74,8 @@ abstract class CompositionGpuImportedObjectBase : ICompositionGpuImportedObject public abstract void Dispose(); public Task ImportCompleted { get; } + + public Task ImportCompeted => ImportCompleted; public bool IsLost => Context.IsLost; public ValueTask DisposeAsync() => new(Compositor.InvokeServerJobAsync(() => From 081803b292ce66c179441bfc9017019871271c98 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 13 Jul 2023 17:20:23 -0400 Subject: [PATCH 46/72] Add api change suppression for ImportCompleted --- api/Avalonia.nupkg.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 api/Avalonia.nupkg.xml diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml new file mode 100644 index 0000000000..6a7d53544e --- /dev/null +++ b/api/Avalonia.nupkg.xml @@ -0,0 +1,10 @@ + + + + + CP0006 + P:Avalonia.Rendering.Composition.ICompositionGpuImportedObject.ImportCompleted + baseline/netstandard2.0/Avalonia.Base.dll + target/netstandard2.0/Avalonia.Base.dll + + \ No newline at end of file From 4c1d7b4a204e437ac0f1e648361522753d650800 Mon Sep 17 00:00:00 2001 From: startewho Date: Fri, 14 Jul 2023 08:38:00 +0800 Subject: [PATCH 47/72] Update StringUtils.cs --- src/Avalonia.Controls/Utils/StringUtils.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Utils/StringUtils.cs b/src/Avalonia.Controls/Utils/StringUtils.cs index b664687650..0ae1ef0b97 100644 --- a/src/Avalonia.Controls/Utils/StringUtils.cs +++ b/src/Avalonia.Controls/Utils/StringUtils.cs @@ -94,7 +94,11 @@ namespace Avalonia.Controls.Utils return true; } } - return true; + else + { + return true; + } + } switch (codepoint.GeneralCategory) From 4e8e78886640ed84c89b7debb5c78957fb10829c Mon Sep 17 00:00:00 2001 From: startewho Date: Fri, 14 Jul 2023 09:33:28 +0800 Subject: [PATCH 48/72] handled --- src/Avalonia.Controls/ComboBox.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index bce1a3685f..fb27b3da22 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -270,6 +270,7 @@ namespace Avalonia.Controls { if (_popup?.IsInsidePopup(source) == true) { + e.Handled = true; return; } } From f89a0b2ac9323b38cd9c376f8bf2ed30814a1bd5 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 14 Jul 2023 10:57:45 +0200 Subject: [PATCH 49/72] Added failing test for #11220. --- .../SelectingItemsControlTests_SelectedValue.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs index e9b8895174..9ea12c62fb 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs @@ -268,6 +268,22 @@ namespace Avalonia.Controls.UnitTests.Primitives Assert.True(called); } + [Fact] + public void Handles_Null_SelectedItem_When_SelectedValueBinding_Assigned() + { + // Issue #11220 + var items = new object[] { null }; + var sic = new SelectingItemsControl + { + ItemsSource = items, + SelectedIndex = 0, + SelectedValueBinding = new Binding("Name"), + Template = Template() + }; + + Assert.Null(sic.SelectedValue); + } + private static FuncControlTemplate Template() { return new FuncControlTemplate((control, scope) => From c7da9c4bb86cc3583e796a45106ebb9fb8e6ad0d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 14 Jul 2023 11:01:38 +0200 Subject: [PATCH 50/72] Allow null item in BindingHelper.Evaluate. Fixes #11220. --- src/Avalonia.Controls/Primitives/SelectingItemsControl.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs index e22d03273a..66ed1a27e2 100644 --- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs @@ -1395,10 +1395,8 @@ namespace Avalonia.Controls.Primitives public object Evaluate(object? dataContext) { - dataContext = dataContext ?? throw new ArgumentNullException(nameof(dataContext)); - // Only update the DataContext if necessary - if (!dataContext.Equals(DataContext)) + if (!Equals(dataContext, DataContext)) DataContext = dataContext; return GetValue(ValueProperty); From 43e1d99bdd70315aa069f867928a053b0b22eb23 Mon Sep 17 00:00:00 2001 From: Lighto Date: Fri, 14 Jul 2023 15:44:14 +0300 Subject: [PATCH 51/72] Added support for Mica Light & Dark based on Win11 --- samples/ControlCatalog/MainView.xaml | 3 +- .../WindowTransparencyLevel.cs | 9 +- .../WinRT/Composition/D2DEffects.cs | 3 + .../WinRT/Composition/WinUIEffectBase.cs | 104 ++++++++++++++++++ .../Composition/WinUiCompositedWindow.cs | 27 +++-- .../Composition/WinUiCompositionShared.cs | 8 +- .../Composition/WinUiCompositionUtils.cs | 75 ++++++++++++- src/Windows/Avalonia.Win32/WinRT/IBlurHost.cs | 3 +- .../WinRT/WinRTPropertyValue.cs | 23 +++- src/Windows/Avalonia.Win32/WindowImpl.cs | 22 +++- 10 files changed, 253 insertions(+), 24 deletions(-) diff --git a/samples/ControlCatalog/MainView.xaml b/samples/ControlCatalog/MainView.xaml index 7ed2d67379..0a1621d02a 100644 --- a/samples/ControlCatalog/MainView.xaml +++ b/samples/ControlCatalog/MainView.xaml @@ -226,7 +226,8 @@ Transparent Blur AcrylicBlur - Mica + MicaLight + MicaDark - /// The window background is based on desktop wallpaper tint with a blur. This will only work on Windows 11 + /// The window background is based on desktop wallpaper tint with a light blur. This will only work on Windows 11 /// - public static WindowTransparencyLevel Mica { get; } = new(nameof(Mica)); + public static WindowTransparencyLevel MicaLight { get; } = new(nameof(MicaLight)); + + /// + /// The window background is based on desktop wallpaper tint with a dark blur. This will only work on Windows 11 + /// + public static WindowTransparencyLevel MicaDark { get; } = new(nameof(MicaDark)); public override string ToString() { diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/D2DEffects.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/D2DEffects.cs index bef5a55b06..98e1077885 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/D2DEffects.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/D2DEffects.cs @@ -28,6 +28,9 @@ namespace Avalonia.Win32.WinRT.Composition public static readonly Guid CLSID_D2D1Border = new Guid(0x2A2D49C0, 0x4ACF, 0x43C7, 0x8C, 0x6A, 0x7C, 0x4A, 0x27, 0x87, 0x4D, 0x27); + public static readonly Guid CLSID_D2D1Opacity = + new Guid("811d79a4-de28-4454-8094-c64685f8bd4c"); + public static readonly Guid CLSID_D2D1Brightness = new Guid(0x8CEA8D1E, 0x77B0, 0x4986, 0xB3, 0xB9, 0x2F, 0x0C, 0x0E, 0xAE, 0x78, 0x87); diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs index 1a922b4acd..10dbcfcc6b 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs @@ -52,6 +52,110 @@ namespace Avalonia.Win32.WinRT.Composition _sources = null; } } + + class BorderEffect : WinUIEffectBase + { + private readonly int _x; + private readonly int _y; + public override Guid EffectId => D2DEffects.CLSID_D2D1Border; + public override uint PropertyCount => 2; + + public BorderEffect(int x, int y, params IGraphicsEffectSource[] _sources):base(_sources) + { + _x = x; + _y = y; + } + + public override IPropertyValue? GetProperty(uint index) + { + if (index == 0) + return new WinRTPropertyValue((uint)_x); + if (index == 1) + return new WinRTPropertyValue((uint)_y); + return null; + } + } + + class BlendEffect : WinUIEffectBase + { + private readonly int _mode; + + public BlendEffect(int mode, params IGraphicsEffectSource[] _sources) : base(_sources) + { + _mode = mode; + } + + public override Guid EffectId => D2DEffects.CLSID_D2D1Blend; + public override uint PropertyCount => 1; + + public override IPropertyValue? GetProperty(uint index) + { + if (index == 0) + return new WinRTPropertyValue((uint)_mode); + return null; + } + } + + class CompositeStepEffect : WinUIEffectBase + { + private readonly float _mode; + + public CompositeStepEffect(int mode, params IGraphicsEffectSource[] _sources) : base(_sources) + { + _mode = mode; + } + + public override Guid EffectId => D2DEffects.CLSID_D2D1Composite; + public override uint PropertyCount => 1; + + public override IPropertyValue? GetProperty(uint index) + { + if (index == 0) + return new WinRTPropertyValue((uint)_mode); + return null; + } + } + + class OpacityEffect : WinUIEffectBase + { + private readonly float _opacity; + + public OpacityEffect(float opacity, params IGraphicsEffectSource[] _sources) : base(_sources) + { + _opacity = opacity; + } + + public override Guid EffectId => D2DEffects.CLSID_D2D1Opacity; + public override uint PropertyCount => 1; + + public override IPropertyValue? GetProperty(uint index) + { + if (index == 0) + return new WinRTPropertyValue(_opacity); + return null; + } + } + + class ColorSourceEffect : WinUIEffectBase + { + private readonly float[] _color; + + public ColorSourceEffect(float[] color) + { + _color = color; + } + + public override Guid EffectId => D2DEffects.CLSID_D2D1Flood; + public override uint PropertyCount => 1; + + public override IPropertyValue? GetProperty(uint index) + { + if (index == 0) + return new WinRTPropertyValue(_color); + return null; + } + } + internal class WinUIGaussianBlurEffect : WinUIEffectBase { diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs index 2f22ba99f9..d87c8d1361 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs @@ -12,7 +12,8 @@ internal class WinUiCompositedWindow : IDisposable public EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo WindowInfo { get; } private readonly WinUiCompositionShared _shared; private readonly ICompositionRoundedRectangleGeometry? _compositionRoundedRectangleGeometry; - private readonly IVisual? _mica; + private readonly IVisual? _micaLight; + private readonly IVisual? _micaDark; private readonly IVisual _blur; private readonly IVisual _visual; private PixelSize _size; @@ -25,7 +26,8 @@ internal class WinUiCompositedWindow : IDisposable { _compositionRoundedRectangleGeometry?.Dispose(); _blur.Dispose(); - _mica?.Dispose(); + _micaLight?.Dispose(); + _micaDark?.Dispose(); _visual.Dispose(); _surfaceBrush.Dispose(); _target.Dispose(); @@ -50,14 +52,20 @@ internal class WinUiCompositedWindow : IDisposable _target.SetRoot(containerVisual); _blur = WinUiCompositionUtils.CreateBlurVisual(shared.Compositor, shared.BlurBrush); - if (shared.MicaBrush != null) + if (shared.MicaBrushLight != null) { - _mica = WinUiCompositionUtils.CreateBlurVisual(shared.Compositor, shared.MicaBrush); - containerChildren.InsertAtTop(_mica); + _micaLight = WinUiCompositionUtils.CreateBlurVisual(shared.Compositor, shared.MicaBrushLight); + containerChildren.InsertAtTop(_micaLight); + } + + if (shared.MicaBrushDark != null) + { + _micaDark = WinUiCompositionUtils.CreateBlurVisual(shared.Compositor, shared.MicaBrushDark); + containerChildren.InsertAtTop(_micaDark); } _compositionRoundedRectangleGeometry = - WinUiCompositionUtils.ClipVisual(shared.Compositor, backdropCornerRadius, _blur, _mica); + WinUiCompositionUtils.ClipVisual(shared.Compositor, backdropCornerRadius, _blur, _micaLight, _micaDark); containerChildren.InsertAtTop(_blur); using var spriteVisual = shared.Compositor.CreateSpriteVisual(); @@ -79,12 +87,13 @@ internal class WinUiCompositedWindow : IDisposable { lock (_shared.SyncRoot) { - _blur.SetIsVisible(blurEffect == BlurEffect.Acrylic - || blurEffect == BlurEffect.Mica && _mica == null ? + || (blurEffect == BlurEffect.MicaLight && _micaLight == null) || + (blurEffect == BlurEffect.MicaDark && _micaDark == null) ? 1 : 0); - _mica?.SetIsVisible(blurEffect == BlurEffect.Mica ? 1 : 0); + _micaLight?.SetIsVisible(blurEffect == BlurEffect.MicaLight ? 1 : 0); + _micaDark?.SetIsVisible(blurEffect == BlurEffect.MicaDark ? 1 : 0); } } diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs index b3a328d097..5c7f490710 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs @@ -9,6 +9,8 @@ internal class WinUiCompositionShared : IDisposable public ICompositor5 Compositor5 { get; } public ICompositorDesktopInterop DesktopInterop { get; } public ICompositionBrush BlurBrush { get; } + public ICompositionBrush? MicaBrushLight { get; } + public ICompositionBrush? MicaBrushDark { get; } public ICompositionBrush? MicaBrush { get; } public object SyncRoot { get; } = new(); @@ -21,14 +23,16 @@ internal class WinUiCompositionShared : IDisposable Compositor = compositor.CloneReference(); Compositor5 = compositor.QueryInterface(); BlurBrush = WinUiCompositionUtils.CreateAcrylicBlurBackdropBrush(compositor); - MicaBrush = WinUiCompositionUtils.CreateMicaBackdropBrush(compositor); + MicaBrushLight = WinUiCompositionUtils.CreateMicaBackdropBrush(compositor, 242, 0.6f); + MicaBrushDark = WinUiCompositionUtils.CreateMicaBackdropBrush(compositor, 32, 0.8f); DesktopInterop = compositor.QueryInterface(); } public void Dispose() { BlurBrush.Dispose(); - MicaBrush?.Dispose(); + MicaBrushLight?.Dispose(); + MicaBrushDark?.Dispose(); DesktopInterop.Dispose(); Compositor.Dispose(); Compositor5.Dispose(); diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs index 7b970868df..1a130698ee 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs @@ -1,3 +1,4 @@ +using System; using System.Numerics; using MicroCom.Runtime; @@ -5,16 +6,75 @@ namespace Avalonia.Win32.WinRT.Composition; internal static class WinUiCompositionUtils { - public static ICompositionBrush? CreateMicaBackdropBrush(ICompositor compositor) + public static ICompositionBrush? CreateMicaBackdropBrush(ICompositor compositor, float color, float opacity) { if (Win32Platform.WindowsVersion.Build < 22000) return null; + using var backDropParameterFactory = + NativeWinRTMethods.CreateActivationFactory( + "Windows.UI.Composition.CompositionEffectSourceParameter"); + + + var tint = new[] { color / 255f, color / 255f, color / 255f, 255f / 255f }; + + using var tintColorEffect = new ColorSourceEffect(tint); + + + using var tintOpacityEffect = new OpacityEffect(1.0f, tintColorEffect); + using var tintOpacityEffectFactory = compositor.CreateEffectFactory(tintOpacityEffect); + using var tintOpacityEffectBrushEffect = tintOpacityEffectFactory.CreateBrush(); + using var tintOpacityEffectBrush = tintOpacityEffectBrushEffect.QueryInterface(); + + using var luminosityColorEffect = new ColorSourceEffect(tint); + + using var luminosityOpacityEffect = new OpacityEffect(opacity, luminosityColorEffect); + using var luminosityOpacityEffectFactory = compositor.CreateEffectFactory(luminosityOpacityEffect); + using var luminosityOpacityEffectBrushEffect = luminosityOpacityEffectFactory.CreateBrush(); + using var luminosityOpacityEffectBrush = + luminosityOpacityEffectBrushEffect.QueryInterface(); + + + // using var backDropParameterAsSource = GetParameterSource("BlurredWallpaperBackdrop", backDropParameterFactory, out var backdropHandle); + // using var backdropCompositionBrsuh = backDropParameterAsSource.QueryInterface(); using var compositorWithBlurredWallpaperBackdropBrush = compositor.QueryInterface(); using var blurredWallpaperBackdropBrush = compositorWithBlurredWallpaperBackdropBrush?.TryCreateBlurredWallpaperBackdropBrush(); - return blurredWallpaperBackdropBrush?.QueryInterface(); + using var micaBackdropBrush = blurredWallpaperBackdropBrush?.QueryInterface(); + + + using var backgroundParameterAsSource = + GetParameterSource("Background", backDropParameterFactory, out var backgroundHandle); + using var foregroundParameterAsSource = + GetParameterSource("Foreground", backDropParameterFactory, out var foregroundHandle); + + using var luminosityBlendEffect = + new BlendEffect(23, backgroundParameterAsSource, foregroundParameterAsSource); + using var luminosityBlendEffectFactory = compositor.CreateEffectFactory(luminosityBlendEffect); + using var luminosityBlendEffectBrush = luminosityBlendEffectFactory.CreateBrush(); + using var luminosityBlendEffectBrush1 = luminosityBlendEffectBrush.QueryInterface(); + luminosityBlendEffectBrush.SetSourceParameter(backgroundHandle, micaBackdropBrush); + luminosityBlendEffectBrush.SetSourceParameter(foregroundHandle, luminosityOpacityEffectBrush); + + + using var backgroundParameterAsSource1 = + GetParameterSource("Background", backDropParameterFactory, out var backgroundHandle1); + using var foregroundParameterAsSource1 = + GetParameterSource("Foreground", backDropParameterFactory, out var foregroundHandle1); + + using var colorBlendEffect = + new BlendEffect(22, backgroundParameterAsSource1, foregroundParameterAsSource1); + using var colorBlendEffectFactory = compositor.CreateEffectFactory(colorBlendEffect); + using var colorBlendEffectBrush = colorBlendEffectFactory.CreateBrush(); + colorBlendEffectBrush.SetSourceParameter(backgroundHandle1, luminosityBlendEffectBrush1); + colorBlendEffectBrush.SetSourceParameter(foregroundHandle1, tintOpacityEffectBrush); + + + // colorBlendEffectBrush.SetSourceParameter(backgroundHandle, micaBackdropBrush); + + using var micaBackdropBrush1 = colorBlendEffectBrush.QueryInterface(); + return micaBackdropBrush1.CloneReference(); } public static ICompositionBrush CreateAcrylicBlurBackdropBrush(ICompositor compositor) @@ -97,4 +157,15 @@ internal static class WinUiCompositionUtils brush?.Dispose(); } } + + private static IGraphicsEffectSource GetParameterSource(string name, + ICompositionEffectSourceParameterFactory backDropParameterFactory, out IntPtr handle) + { + var backdropString = new HStringInterop(name); + var backDropParameter = + backDropParameterFactory.Create(backdropString.Handle); + var backDropParameterAsSource = backDropParameter.QueryInterface(); + handle = backdropString.Handle; + return backDropParameterAsSource; + } } diff --git a/src/Windows/Avalonia.Win32/WinRT/IBlurHost.cs b/src/Windows/Avalonia.Win32/WinRT/IBlurHost.cs index a3918d9ae6..5f2e752af8 100644 --- a/src/Windows/Avalonia.Win32/WinRT/IBlurHost.cs +++ b/src/Windows/Avalonia.Win32/WinRT/IBlurHost.cs @@ -4,7 +4,8 @@ { None, Acrylic, - Mica + MicaLight, + MicaDark } internal interface IBlurHost diff --git a/src/Windows/Avalonia.Win32/WinRT/WinRTPropertyValue.cs b/src/Windows/Avalonia.Win32/WinRT/WinRTPropertyValue.cs index 684e7ff7b5..8874902d4e 100644 --- a/src/Windows/Avalonia.Win32/WinRT/WinRTPropertyValue.cs +++ b/src/Windows/Avalonia.Win32/WinRT/WinRTPropertyValue.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Avalonia.Win32.WinRT @@ -16,7 +17,15 @@ namespace Avalonia.Win32.WinRT UInt32 = u; Type = PropertyType.UInt32; } - + + public WinRTPropertyValue(float[] uiColor) + { + Type = PropertyType.SingleArray; + _singleArray = uiColor; + } + + private readonly float[]? _singleArray; + public PropertyType Type { get; } public int IsNumericScalar { get; } public byte UInt8 { get; } @@ -62,7 +71,17 @@ namespace Avalonia.Win32.WinRT public unsafe ulong* GetUInt64Array(uint* __valueSize) => throw NotImplemented; - public unsafe float* GetSingleArray(uint* __valueSize) => throw NotImplemented; + public unsafe float* GetSingleArray(uint* __valueSize) + { + if (_singleArray == null) + throw NotImplemented; + *__valueSize = (uint)_singleArray.Length; + var allocCoTaskMem = Marshal.AllocCoTaskMem(_singleArray.Length * Unsafe.SizeOf()); + Marshal.Copy(_singleArray, 0, allocCoTaskMem, _singleArray.Length); + float* s = (float*)allocCoTaskMem; + + return s; + } public unsafe double* GetDoubleArray(uint* __valueSize) => throw NotImplemented; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 057cdb2db0..2b16bbe275 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -374,8 +374,10 @@ namespace Avalonia.Win32 SetTransparencyBlur(windowsVersion); else if (level == WindowTransparencyLevel.AcrylicBlur) SetTransparencyAcrylicBlur(windowsVersion); - else if (level == WindowTransparencyLevel.Mica) - SetTransparencyMica(windowsVersion); + else if (level == WindowTransparencyLevel.MicaLight) + SetTransparencyMicaLight(windowsVersion); + else if (level == WindowTransparencyLevel.MicaDark) + SetTransparencyMicaDark(windowsVersion); TransparencyLevel = level; return; @@ -418,7 +420,7 @@ namespace Avalonia.Win32 return windowsVersion >= WinUiCompositionShared.MinAcrylicVersion; // Mica is supported on Windows >= 10.0.22000. - if (level == WindowTransparencyLevel.Mica) + if (level == WindowTransparencyLevel.MicaLight || level == WindowTransparencyLevel.MicaDark) return windowsVersion >= WinUiCompositionShared.MinHostBackdropVersion; return false; @@ -467,14 +469,24 @@ namespace Avalonia.Win32 _blurHost?.SetBlur(BlurEffect.Acrylic); } - private void SetTransparencyMica(Version windowsVersion) + private void SetTransparencyMicaLight(Version windowsVersion) { // Mica only supported with composition on Windows >= 10.0.22000. if (!_isUsingComposition || windowsVersion < WinUiCompositionShared.MinHostBackdropVersion) return; SetUseHostBackdropBrush(false); - _blurHost?.SetBlur(BlurEffect.Mica); + _blurHost?.SetBlur(BlurEffect.MicaLight); + } + + private void SetTransparencyMicaDark(Version windowsVersion) + { + // Mica only supported with composition on Windows >= 10.0.22000. + if (!_isUsingComposition || windowsVersion < WinUiCompositionShared.MinHostBackdropVersion) + return; + + SetUseHostBackdropBrush(false); + _blurHost?.SetBlur(BlurEffect.MicaDark); } private void SetAccentState(AccentState state) From 432dafac91dc4cb61ffd338f7d8afcf5d4ab6540 Mon Sep 17 00:00:00 2001 From: Lighto Date: Fri, 14 Jul 2023 18:38:35 +0300 Subject: [PATCH 52/72] Removed unused old property --- .../Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs index 5c7f490710..7a775afb3a 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionShared.cs @@ -11,7 +11,6 @@ internal class WinUiCompositionShared : IDisposable public ICompositionBrush BlurBrush { get; } public ICompositionBrush? MicaBrushLight { get; } public ICompositionBrush? MicaBrushDark { get; } - public ICompositionBrush? MicaBrush { get; } public object SyncRoot { get; } = new(); public static readonly Version MinWinCompositionVersion = new(10, 0, 17134); From 217a3e0624d0b116f5d279ca026e926107a6b0a0 Mon Sep 17 00:00:00 2001 From: Vitalii Orazov Date: Fri, 14 Jul 2023 22:31:01 +0300 Subject: [PATCH 53/72] remove duplicates in InternalsVisibleTo --- src/Avalonia.Base/Avalonia.Base.csproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index ddc2b7effb..16eb09de65 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -43,21 +43,15 @@ - - - - - - From c126db5b554349893e45e43a0cf289a601dedc20 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 15 Jul 2023 18:29:40 +0600 Subject: [PATCH 54/72] Added AvaloniaFilePreview target --- packages/Avalonia/AvaloniaBuildTasks.targets | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets index 33f22f4d02..6af35ff0d2 100644 --- a/packages/Avalonia/AvaloniaBuildTasks.targets +++ b/packages/Avalonia/AvaloniaBuildTasks.targets @@ -144,4 +144,30 @@ + + + Build + + + + + http://127.0.0.1:6001 + $(OutputPath)/$(AssemblyName).dll + MainWindow.axaml + $(APreviewExecutable) + $([System.IO.Path]::ChangeExtension('$(APreviewExecutable)', '.deps.json')) + $([System.IO.Path]::ChangeExtension('$(APreviewExecutable)', '.runtimeconfig.json')) + $([System.IO.Path]::GetFullPath('$(APreviewFile)')) + + + + + + + + + + + + From 55c03069b1e9cf681cde74a476038118296c340f Mon Sep 17 00:00:00 2001 From: Lighto Date: Sat, 15 Jul 2023 22:18:59 +0300 Subject: [PATCH 55/72] Changed Mica dark/light based on theme --- samples/ControlCatalog/MainView.xaml | 3 +- .../WindowTransparencyLevel.cs | 9 ++--- .../Composition/WinUiCompositedWindow.cs | 3 -- src/Windows/Avalonia.Win32/WindowImpl.cs | 33 +++++++++---------- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/samples/ControlCatalog/MainView.xaml b/samples/ControlCatalog/MainView.xaml index 0a1621d02a..7ed2d67379 100644 --- a/samples/ControlCatalog/MainView.xaml +++ b/samples/ControlCatalog/MainView.xaml @@ -226,8 +226,7 @@ Transparent Blur AcrylicBlur - MicaLight - MicaDark + Mica - /// The window background is based on desktop wallpaper tint with a light blur. This will only work on Windows 11 + /// The window background is based on desktop wallpaper tint with a blur. This will only work on Windows 11 /// - public static WindowTransparencyLevel MicaLight { get; } = new(nameof(MicaLight)); + public static WindowTransparencyLevel Mica { get; } = new(nameof(Mica)); - /// - /// The window background is based on desktop wallpaper tint with a dark blur. This will only work on Windows 11 - /// - public static WindowTransparencyLevel MicaDark { get; } = new(nameof(MicaDark)); - public override string ToString() { return _value; diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs index d87c8d1361..d720e525d3 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindow.cs @@ -76,9 +76,6 @@ internal class WinUiCompositedWindow : IDisposable using var compositionBrush = _surfaceBrush.QueryInterface(); spriteVisual.SetBrush(compositionBrush); _target.SetRoot(containerVisual); - - - } public void SetSurface(ICompositionSurface surface) => _surfaceBrush.SetSurface(surface); diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 2b16bbe275..044c2cad67 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -106,6 +106,7 @@ namespace Avalonia.Win32 private static POINTER_PEN_INFO[]? s_historyPenInfos; private static POINTER_INFO[]? s_historyInfos; private static MOUSEMOVEPOINT[]? s_mouseHistoryInfos; + private PlatformThemeVariant _currentThemeVariant; public WindowImpl() { @@ -374,10 +375,8 @@ namespace Avalonia.Win32 SetTransparencyBlur(windowsVersion); else if (level == WindowTransparencyLevel.AcrylicBlur) SetTransparencyAcrylicBlur(windowsVersion); - else if (level == WindowTransparencyLevel.MicaLight) - SetTransparencyMicaLight(windowsVersion); - else if (level == WindowTransparencyLevel.MicaDark) - SetTransparencyMicaDark(windowsVersion); + else if (level == WindowTransparencyLevel.Mica) + SetTransparencyMica(windowsVersion); TransparencyLevel = level; return; @@ -420,7 +419,7 @@ namespace Avalonia.Win32 return windowsVersion >= WinUiCompositionShared.MinAcrylicVersion; // Mica is supported on Windows >= 10.0.22000. - if (level == WindowTransparencyLevel.MicaLight || level == WindowTransparencyLevel.MicaDark) + if (level == WindowTransparencyLevel.Mica) return windowsVersion >= WinUiCompositionShared.MinHostBackdropVersion; return false; @@ -469,24 +468,19 @@ namespace Avalonia.Win32 _blurHost?.SetBlur(BlurEffect.Acrylic); } - private void SetTransparencyMicaLight(Version windowsVersion) + private void SetTransparencyMica(Version windowsVersion) { // Mica only supported with composition on Windows >= 10.0.22000. if (!_isUsingComposition || windowsVersion < WinUiCompositionShared.MinHostBackdropVersion) return; SetUseHostBackdropBrush(false); - _blurHost?.SetBlur(BlurEffect.MicaLight); - } - - private void SetTransparencyMicaDark(Version windowsVersion) - { - // Mica only supported with composition on Windows >= 10.0.22000. - if (!_isUsingComposition || windowsVersion < WinUiCompositionShared.MinHostBackdropVersion) - return; - - SetUseHostBackdropBrush(false); - _blurHost?.SetBlur(BlurEffect.MicaDark); + _blurHost?.SetBlur(_currentThemeVariant switch + { + PlatformThemeVariant.Light => BlurEffect.MicaLight, + PlatformThemeVariant.Dark => BlurEffect.MicaDark, + _ => throw new ArgumentOutOfRangeException() + }); } private void SetAccentState(AccentState state) @@ -790,6 +784,7 @@ namespace Avalonia.Win32 public unsafe void SetFrameThemeVariant(PlatformThemeVariant themeVariant) { + _currentThemeVariant = themeVariant; if (Win32Platform.WindowsVersion.Build >= 22000) { var pvUseBackdropBrush = themeVariant == PlatformThemeVariant.Dark ? 1 : 0; @@ -798,6 +793,10 @@ namespace Avalonia.Win32 (int)DwmWindowAttribute.DWMWA_USE_IMMERSIVE_DARK_MODE, &pvUseBackdropBrush, sizeof(int)); + if (TransparencyLevel == WindowTransparencyLevel.Mica) + { + SetTransparencyMica(Win32Platform.WindowsVersion); + } } } From 7a0e0c41a40baf60cce214ee6756f95ca75fd7a8 Mon Sep 17 00:00:00 2001 From: Lighto Date: Sat, 15 Jul 2023 22:20:50 +0300 Subject: [PATCH 56/72] Removed unnecessary spaces --- src/Avalonia.Controls/WindowTransparencyLevel.cs | 2 +- .../WinRT/Composition/WinUiCompositionUtils.cs | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Controls/WindowTransparencyLevel.cs b/src/Avalonia.Controls/WindowTransparencyLevel.cs index 9604a7ef5c..bce6e21e68 100644 --- a/src/Avalonia.Controls/WindowTransparencyLevel.cs +++ b/src/Avalonia.Controls/WindowTransparencyLevel.cs @@ -36,7 +36,7 @@ public readonly record struct WindowTransparencyLevel /// The window background is based on desktop wallpaper tint with a blur. This will only work on Windows 11 /// public static WindowTransparencyLevel Mica { get; } = new(nameof(Mica)); - + public override string ToString() { return _value; diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs index 1a130698ee..29c1e1fe27 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositionUtils.cs @@ -33,10 +33,7 @@ internal static class WinUiCompositionUtils using var luminosityOpacityEffectBrushEffect = luminosityOpacityEffectFactory.CreateBrush(); using var luminosityOpacityEffectBrush = luminosityOpacityEffectBrushEffect.QueryInterface(); - - - // using var backDropParameterAsSource = GetParameterSource("BlurredWallpaperBackdrop", backDropParameterFactory, out var backdropHandle); - // using var backdropCompositionBrsuh = backDropParameterAsSource.QueryInterface(); + using var compositorWithBlurredWallpaperBackdropBrush = compositor.QueryInterface(); using var blurredWallpaperBackdropBrush = From 746a027bd80e2f1b8f837abad11a851c17125077 Mon Sep 17 00:00:00 2001 From: Sorien Date: Sat, 15 Jul 2023 22:19:12 +0200 Subject: [PATCH 57/72] Fix typo --- src/Avalonia.Native/NativePlatformSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Native/NativePlatformSettings.cs b/src/Avalonia.Native/NativePlatformSettings.cs index 53d3da0378..42d05d831c 100644 --- a/src/Avalonia.Native/NativePlatformSettings.cs +++ b/src/Avalonia.Native/NativePlatformSettings.cs @@ -23,7 +23,7 @@ internal class NativePlatformSettings : DefaultPlatformSettings AvnPlatformThemeVariant.Dark => (PlatformThemeVariant.Dark, ColorContrastPreference.NoPreference), AvnPlatformThemeVariant.Light => (PlatformThemeVariant.Light, ColorContrastPreference.NoPreference), AvnPlatformThemeVariant.HighContrastDark => (PlatformThemeVariant.Dark, ColorContrastPreference.High), - AvnPlatformThemeVariant.HighContrastLight => (PlatformThemeVariant.Dark, ColorContrastPreference.High), + AvnPlatformThemeVariant.HighContrastLight => (PlatformThemeVariant.Light, ColorContrastPreference.High), _ => throw new ArgumentOutOfRangeException() }; var color = _platformSettings.AccentColor; From cbfa327aee6564a0a42ead2c68c15d33cb47fa46 Mon Sep 17 00:00:00 2001 From: Zachary Weldon Date: Sat, 15 Jul 2023 20:22:54 -0700 Subject: [PATCH 58/72] added clear function to combobox --- src/Avalonia.Controls/ComboBox.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index fb27b3da22..bd05d4947c 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -517,5 +517,14 @@ namespace Avalonia.Controls } } } + + /// + /// Clears the selection + /// + public void Clear() + { + SelectedItem = null; + SelectedIndex = -1; + } } } From 6eff41172fc88b0472fd3c9b04dd6c6b4eb19548 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Sun, 16 Jul 2023 00:21:01 +0200 Subject: [PATCH 59/72] Generate symbol packages --- build/SourceLink.props | 8 ++------ nukebuild/Numerge | 2 +- nukebuild/_build.csproj | 12 +++++------- .../Avalonia.Analyzers/Avalonia.Analyzers.csproj | 1 + .../Avalonia.Generators/Avalonia.Generators.csproj | 1 + 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/build/SourceLink.props b/build/SourceLink.props index dd7ecc8d2a..b0f1f2c2cc 100644 --- a/build/SourceLink.props +++ b/build/SourceLink.props @@ -1,9 +1,9 @@ true - false + true + snupkg true - $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb @@ -14,10 +14,6 @@ true - - embedded - - diff --git a/nukebuild/Numerge b/nukebuild/Numerge index aef10ae67d..7908ee8e86 160000 --- a/nukebuild/Numerge +++ b/nukebuild/Numerge @@ -1 +1 @@ -Subproject commit aef10ae67dc55c95f49b52a505a0be33bfa297a5 +Subproject commit 7908ee8e8619180d04a4de3b0210c009db400e78 diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj index 43453833d7..64eccbbb3f 100644 --- a/nukebuild/_build.csproj +++ b/nukebuild/_build.csproj @@ -8,8 +8,8 @@ 1 net7.0 - - + + @@ -32,9 +32,9 @@ - - - + + + @@ -43,7 +43,5 @@ dirs.proj - - diff --git a/src/tools/Avalonia.Analyzers/Avalonia.Analyzers.csproj b/src/tools/Avalonia.Analyzers/Avalonia.Analyzers.csproj index c27801db61..05d72618a9 100644 --- a/src/tools/Avalonia.Analyzers/Avalonia.Analyzers.csproj +++ b/src/tools/Avalonia.Analyzers/Avalonia.Analyzers.csproj @@ -5,6 +5,7 @@ Avalonia.Analyzers true true + false true diff --git a/src/tools/Avalonia.Generators/Avalonia.Generators.csproj b/src/tools/Avalonia.Generators/Avalonia.Generators.csproj index cd1e2fcaba..c6992f9438 100644 --- a/src/tools/Avalonia.Generators/Avalonia.Generators.csproj +++ b/src/tools/Avalonia.Generators/Avalonia.Generators.csproj @@ -5,6 +5,7 @@ Avalonia.Generators $(DefineConstants);XAMLX_INTERNAL true + false true true From 12e1d5ef104bb46731511e5ed3245517be822537 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Sun, 16 Jul 2023 01:58:50 +0200 Subject: [PATCH 60/72] Avoid api validation for symbol packages --- nukebuild/ApiDiffValidation.cs | 5 +++-- nukebuild/Build.cs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/nukebuild/ApiDiffValidation.cs b/nukebuild/ApiDiffValidation.cs index bd576250bd..483bfd336a 100644 --- a/nukebuild/ApiDiffValidation.cs +++ b/nukebuild/ApiDiffValidation.cs @@ -38,7 +38,8 @@ public static class ApiDiffValidation var left = new List(); var right = new List(); - var suppressionFile = Path.Combine(suppressionFilesFolder, GetPackageId(packagePath) + ".nupkg.xml"); + var packageId = GetPackageId(packagePath); + var suppressionFile = Path.Combine(suppressionFilesFolder, packageId + ".nupkg.xml"); // Don't use Path.Combine with these left and right tool parameters. // Microsoft.DotNet.ApiCompat.Tool is stupid and treats '/' and '\' as different assemblies in suppression files. @@ -57,7 +58,7 @@ public static class ApiDiffValidation e.target == baselineDll.target && e.entry.Name == baselineDll.entry.Name); if (targetDll.entry is null) { - throw new InvalidOperationException($"Some assemblies are missing in the new package: {baselineDll.entry.Name} for {baselineDll.target}"); + throw new InvalidOperationException($"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}"); } var targetDllPath = $"target/{targetDll.target}/{targetDll.entry.Name}"; diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index b82c446249..bbfc28aa9f 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -288,7 +288,7 @@ partial class Build : NukeBuild .Executes(async () => { await Task.WhenAll( - Directory.GetFiles(Parameters.NugetRoot).Select(nugetPackage => ApiDiffValidation.ValidatePackage( + Directory.GetFiles(Parameters.NugetRoot, "*.nupkg").Select(nugetPackage => ApiDiffValidation.ValidatePackage( ApiCompatTool, nugetPackage, Parameters.ApiValidationBaseline, Parameters.ApiValidationSuppressionFiles, Parameters.UpdateApiValidationSuppression))); }); From 97d4e7d9a1a57086173bc279996348aceff597bf Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Sun, 16 Jul 2023 11:38:59 +0200 Subject: [PATCH 61/72] Update Numerge --- nukebuild/Numerge | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nukebuild/Numerge b/nukebuild/Numerge index 7908ee8e86..9738c6121f 160000 --- a/nukebuild/Numerge +++ b/nukebuild/Numerge @@ -1 +1 @@ -Subproject commit 7908ee8e8619180d04a4de3b0210c009db400e78 +Subproject commit 9738c6121fdd143c78d3e25686a7e4e13c00f586 From 6a48527a52df21ea1a6f014e55952bddaa54c097 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 16 Jul 2023 23:16:34 +0200 Subject: [PATCH 62/72] Remove unnecessary cast. --- src/Windows/Avalonia.Win32/Automation/RootAutomationNode.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Automation/RootAutomationNode.cs b/src/Windows/Avalonia.Win32/Automation/RootAutomationNode.cs index ff8ff69d5e..739f0ac251 100644 --- a/src/Windows/Avalonia.Win32/Automation/RootAutomationNode.cs +++ b/src/Windows/Avalonia.Win32/Automation/RootAutomationNode.cs @@ -33,8 +33,7 @@ namespace Avalonia.Win32.Automation return null; var p = WindowImpl.PointToClient(new PixelPoint((int)x, (int)y)); - var peer = (WindowBaseAutomationPeer)Peer; - var found = InvokeSync(() => peer.GetPeerFromPoint(p)); + var found = InvokeSync(() => Peer.GetPeerFromPoint(p)); var result = GetOrCreate(found) as IRawElementProviderFragment; return result; } From 7f4f01b11a2863d326a48e8ce8c42233a51b1edc Mon Sep 17 00:00:00 2001 From: John Doe Date: Mon, 17 Jul 2023 02:40:47 +0200 Subject: [PATCH 63/72] Modernized argument check syntax --- src/Avalonia.Base/Threading/Dispatcher.Invoke.cs | 4 ++-- src/Avalonia.Base/Threading/DispatcherTimer.cs | 12 ++++++------ .../Collections/DataGridCollectionView.cs | 4 ++-- .../Automation/Peers/ScrollViewerAutomationPeer.cs | 4 ++-- .../DateTimePickers/DateTimePickerPanel.cs | 4 ++-- .../ScrollViewerIRefreshInfoProviderAdapter.cs | 10 +++++----- .../Utils/VirtualizingSnapPointsList.cs | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs index 25be5779b9..5995a03758 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs @@ -98,7 +98,7 @@ public partial class Dispatcher if (timeout.TotalMilliseconds < 0 && timeout != TimeSpan.FromMilliseconds(-1)) { - throw new ArgumentOutOfRangeException("timeout"); + throw new ArgumentOutOfRangeException(nameof(timeout)); } // Fast-Path: if on the same thread, and invoking at Send priority, @@ -220,7 +220,7 @@ public partial class Dispatcher if (timeout.TotalMilliseconds < 0 && timeout != TimeSpan.FromMilliseconds(-1)) { - throw new ArgumentOutOfRangeException("timeout"); + throw new ArgumentOutOfRangeException(nameof(timeout)); } // Fast-Path: if on the same thread, and invoking at Send priority, diff --git a/src/Avalonia.Base/Threading/DispatcherTimer.cs b/src/Avalonia.Base/Threading/DispatcherTimer.cs index 473b9eeefa..fbdeed4edc 100644 --- a/src/Avalonia.Base/Threading/DispatcherTimer.cs +++ b/src/Avalonia.Base/Threading/DispatcherTimer.cs @@ -112,11 +112,11 @@ public partial class DispatcherTimer bool updateOSTimer = false; if (value.TotalMilliseconds < 0) - throw new ArgumentOutOfRangeException("value", + throw new ArgumentOutOfRangeException(nameof(value), "TimeSpan period must be greater than or equal to zero."); if (value.TotalMilliseconds > Int32.MaxValue) - throw new ArgumentOutOfRangeException("value", + throw new ArgumentOutOfRangeException(nameof(value), "TimeSpan period must be less than or equal to Int32.MaxValue."); lock (_instanceLock) @@ -259,14 +259,14 @@ public partial class DispatcherTimer DispatcherPriority.Validate(priority, "priority"); if (priority == DispatcherPriority.Inactive) { - throw new ArgumentException("Specified priority is not valid.", "priority"); + throw new ArgumentException("Specified priority is not valid.", nameof(priority)); } if (interval.TotalMilliseconds < 0) - throw new ArgumentOutOfRangeException("interval", "TimeSpan period must be greater than or equal to zero."); + throw new ArgumentOutOfRangeException(nameof(interval), "TimeSpan period must be greater than or equal to zero."); if (interval.TotalMilliseconds > Int32.MaxValue) - throw new ArgumentOutOfRangeException("interval", + throw new ArgumentOutOfRangeException(nameof(interval), "TimeSpan period must be less than or equal to Int32.MaxValue."); @@ -349,4 +349,4 @@ public partial class DispatcherTimer // used by Dispatcher internal long DueTimeInMs { get; private set; } -} \ No newline at end of file +} diff --git a/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs b/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs index 30517f4b00..0026c9e074 100644 --- a/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs +++ b/src/Avalonia.Controls.DataGrid/Collections/DataGridCollectionView.cs @@ -807,7 +807,7 @@ namespace Avalonia.Collections { if (value < 0) { - throw new ArgumentOutOfRangeException("PageSize cannot have a negative value."); + throw new ArgumentOutOfRangeException(nameof(value), "PageSize cannot have a negative value."); } // if the Refresh is currently deferred, cache the desired PageSize @@ -1954,7 +1954,7 @@ namespace Avalonia.Collections // for indices larger than the count if (index >= Count || index < 0) { - throw new ArgumentOutOfRangeException("index"); + throw new ArgumentOutOfRangeException(nameof(index)); } if (IsGrouping) diff --git a/src/Avalonia.Controls/Automation/Peers/ScrollViewerAutomationPeer.cs b/src/Avalonia.Controls/Automation/Peers/ScrollViewerAutomationPeer.cs index 835ed1c4af..674eb9a241 100644 --- a/src/Avalonia.Controls/Automation/Peers/ScrollViewerAutomationPeer.cs +++ b/src/Avalonia.Controls/Automation/Peers/ScrollViewerAutomationPeer.cs @@ -146,12 +146,12 @@ namespace Avalonia.Automation.Peers if (scrollHorizontally && (horizontalPercent < 0.0) || (horizontalPercent > 100.0)) { - throw new ArgumentOutOfRangeException("horizontalPercent"); + throw new ArgumentOutOfRangeException(nameof(horizontalPercent)); } if (scrollVertically && (verticalPercent < 0.0) || (verticalPercent > 100.0)) { - throw new ArgumentOutOfRangeException("verticalPercent"); + throw new ArgumentOutOfRangeException(nameof(verticalPercent)); } var offset = Owner.Offset; diff --git a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs index 69b0ffe9a6..5a5c3fdf1d 100644 --- a/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs +++ b/src/Avalonia.Controls/DateTimePickers/DateTimePickerPanel.cs @@ -165,7 +165,7 @@ namespace Avalonia.Controls.Primitives set { if (value > MaximumValue || value < MinimumValue) - throw new ArgumentOutOfRangeException("SelectedValue"); + throw new ArgumentOutOfRangeException(nameof(value)); var sel = CoerceSelected(value); _selectedValue = sel; @@ -195,7 +195,7 @@ namespace Avalonia.Controls.Primitives set { if (value <= 0 || value > _range) - throw new ArgumentOutOfRangeException("Increment"); + throw new ArgumentOutOfRangeException(nameof(value)); _increment = value; UpdateHelperInfo(); var sel = CoerceSelected(SelectedValue); diff --git a/src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs b/src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs index 4c1e0c2565..7ff02711d6 100644 --- a/src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs +++ b/src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs @@ -98,14 +98,14 @@ namespace Avalonia.Controls.PullToRefresh if (_scrollViewer.Content == null) { - throw new ArgumentException(nameof(adaptee), "Adaptee's content property cannot be null."); + throw new ArgumentException("Adaptee's content property cannot be null.", nameof(adaptee)); } var content = adaptee.Content as Visual; if (content == null) { - throw new ArgumentException(nameof(adaptee), "Adaptee's content property must be a Visual"); + throw new ArgumentException("Adaptee's content property must be a Visual", nameof(adaptee)); } if (content.GetVisualParent() == null) @@ -118,7 +118,7 @@ namespace Avalonia.Controls.PullToRefresh if (content.Parent is not InputElement) { - throw new ArgumentException(nameof(adaptee), "Adaptee's content's parent must be a InputElement"); + throw new ArgumentException("Adaptee's content's parent must be a InputElement", nameof(adaptee)); } } @@ -194,12 +194,12 @@ namespace Avalonia.Controls.PullToRefresh var content = _scrollViewer?.Content as Visual; if (content == null) { - throw new ArgumentException(nameof(_scrollViewer), "Adaptee's content property must be a Visual"); + throw new ArgumentException("Adaptee's content property must be a Visual", nameof(_scrollViewer)); } if (content.Parent is not InputElement parent) { - throw new ArgumentException(nameof(_scrollViewer), "Adaptee's content parent must be an InputElement"); + throw new ArgumentException("Adaptee's content parent must be an InputElement", nameof(_scrollViewer)); } MakeInteractionSource(parent); diff --git a/src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs b/src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs index f92756c59b..eaf501b45f 100644 --- a/src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs +++ b/src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs @@ -39,7 +39,7 @@ namespace Avalonia.Controls.Utils get { if(index < 0 || index >= Count) - throw new ArgumentOutOfRangeException("index"); + throw new ArgumentOutOfRangeException(nameof(index)); index += _start; From 15b42836b13f67623efc9d5b47db8a6b9f11bc1d Mon Sep 17 00:00:00 2001 From: John Doe Date: Mon, 17 Jul 2023 02:50:25 +0200 Subject: [PATCH 64/72] string.Format converted to interpolated string --- src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs | 4 ++-- src/Avalonia.Remote.Protocol/MetsysBson.cs | 8 ++++---- src/Avalonia.X11/X11Structs.cs | 5 ++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs index b5be12fa54..30f9d8f380 100644 --- a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs +++ b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs @@ -1113,11 +1113,11 @@ namespace Avalonia.Controls } if (value < Minimum) { - throw new ArgumentOutOfRangeException(nameof(value), string.Format("Value must be greater than Minimum value of {0}", Minimum)); + throw new ArgumentOutOfRangeException(nameof(value), $"Value must be greater than Minimum value of {Minimum}"); } else if (value > Maximum) { - throw new ArgumentOutOfRangeException(nameof(value), string.Format("Value must be less than Maximum value of {0}", Maximum)); + throw new ArgumentOutOfRangeException(nameof(value), $"Value must be less than Maximum value of {Maximum}"); } } diff --git a/src/Avalonia.Remote.Protocol/MetsysBson.cs b/src/Avalonia.Remote.Protocol/MetsysBson.cs index 8966dd4206..9c5f92b6ac 100644 --- a/src/Avalonia.Remote.Protocol/MetsysBson.cs +++ b/src/Avalonia.Remote.Protocol/MetsysBson.cs @@ -752,7 +752,7 @@ namespace Metsys.Bson if (memberExpression.Expression.NodeType != ExpressionType.Parameter && memberExpression.Expression.NodeType != ExpressionType.Convert) { - throw new ArgumentException(string.Format("Expression '{0}' must resolve to top-level member.", lambdaExpression), nameof(lambdaExpression)); + throw new ArgumentException($"Expression '{lambdaExpression}' must resolve to top-level member.", nameof(lambdaExpression)); } return memberExpression.Member.Name; default: @@ -942,7 +942,7 @@ namespace Metsys.Bson return new ListWrapper(); } } - throw new BsonException(string.Format("Collection of type {0} cannot be deserialized", type.FullName)); + throw new BsonException($"Collection of type {type.FullName} cannot be deserialized"); } public abstract void Add(object value); @@ -1514,7 +1514,7 @@ namespace Metsys.Bson.Configuration result = Visit((MemberExpression)expression.Left); } var index = Expression.Lambda(expression.Right).Compile().DynamicInvoke(); - return result + string.Format("[{0}]", index); + return result + $"[{index}]"; } private string Visit(MemberExpression expression) @@ -1540,7 +1540,7 @@ namespace Metsys.Bson.Configuration if (expression.Method.Name == "get_Item" && expression.Arguments.Count == 1) { var index = Expression.Lambda(expression.Arguments[0]).Compile().DynamicInvoke(); - name += string.Format("[{0}]", index); + name += $"[{index}]"; } return name; } diff --git a/src/Avalonia.X11/X11Structs.cs b/src/Avalonia.X11/X11Structs.cs index 18f860a1a8..86ef7879a5 100644 --- a/src/Avalonia.X11/X11Structs.cs +++ b/src/Avalonia.X11/X11Structs.cs @@ -1109,7 +1109,7 @@ namespace Avalonia.X11 { public override string ToString () { - return string.Format("MotifWmHints Date: Mon, 17 Jul 2023 17:26:19 +0600 Subject: [PATCH 65/72] Special handling for macos dispatcher quirks --- .../Threading/Dispatcher.Queue.cs | 20 +++++++++++++------ .../Threading/Dispatcher.Timers.cs | 2 +- src/Avalonia.Base/Threading/Dispatcher.cs | 3 +++ .../Threading/DispatcherFrame.cs | 8 ++++++-- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Avalonia.Base/Threading/Dispatcher.Queue.cs b/src/Avalonia.Base/Threading/Dispatcher.Queue.cs index 829ab4cf87..1644332aea 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.Queue.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.Queue.cs @@ -9,7 +9,9 @@ public partial class Dispatcher private readonly DispatcherPriorityQueue _queue = new(); private bool _signaled; private bool _explicitBackgroundProcessingRequested; - private const int MaximumTimeProcessingBackgroundJobs = 50; + private const int MaximumInputStarvationTimeInFallbackMode = 50; + private const int MaximumInputStarvationTimeInExplicitProcessingExplicitMode = 50; + private int _maximumInputStarvationTime; void RequestBackgroundProcessing() { @@ -35,8 +37,8 @@ public partial class Dispatcher lock (InstanceLock) { _explicitBackgroundProcessingRequested = false; - ExecuteJobsCore(); } + ExecuteJobsCore(true); } /// @@ -130,10 +132,10 @@ public partial class Dispatcher lock (InstanceLock) _signaled = false; - ExecuteJobsCore(); + ExecuteJobsCore(false); } - void ExecuteJobsCore() + void ExecuteJobsCore(bool fromExplicitBackgroundProcessingCallback) { long? backgroundJobExecutionStartedAt = null; while (true) @@ -151,7 +153,6 @@ public partial class Dispatcher if (job.Priority > DispatcherPriority.Input) { ExecuteJob(job); - backgroundJobExecutionStartedAt = null; } // If platform supports pending input query, ask the platform if we can continue running low priority jobs else if (_pendingInputImpl?.CanQueryPendingInput == true) @@ -164,6 +165,13 @@ public partial class Dispatcher return; } } + // We can't ask if the implementation has pending input, so we should let it to call us back + // Once it thinks that input is handled + else if (_backgroundProcessingImpl != null && !fromExplicitBackgroundProcessingCallback) + { + RequestBackgroundProcessing(); + return; + } // We can't check if there is pending input, but still need to enforce interactivity // so we stop processing background jobs after some timeout and start a timer to continue later else @@ -171,7 +179,7 @@ public partial class Dispatcher if (backgroundJobExecutionStartedAt == null) backgroundJobExecutionStartedAt = Now; - if (Now - backgroundJobExecutionStartedAt.Value > MaximumTimeProcessingBackgroundJobs) + if (Now - backgroundJobExecutionStartedAt.Value > _maximumInputStarvationTime) { _signaled = true; RequestBackgroundProcessing(); diff --git a/src/Avalonia.Base/Threading/Dispatcher.Timers.cs b/src/Avalonia.Base/Threading/Dispatcher.Timers.cs index bb252b7f55..51408daad1 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.Timers.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.Timers.cs @@ -127,7 +127,7 @@ public partial class Dispatcher if (needToPromoteTimers) PromoteTimers(); if (needToProcessQueue) - ExecuteJobsCore(); + ExecuteJobsCore(false); UpdateOSTimer(); } diff --git a/src/Avalonia.Base/Threading/Dispatcher.cs b/src/Avalonia.Base/Threading/Dispatcher.cs index f257072dc8..46c6699b5a 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.cs @@ -34,6 +34,9 @@ public partial class Dispatcher : IDispatcher _controlledImpl = _impl as IControlledDispatcherImpl; _pendingInputImpl = _impl as IDispatcherImplWithPendingInput; _backgroundProcessingImpl = _impl as IDispatcherImplWithExplicitBackgroundProcessing; + _maximumInputStarvationTime = _backgroundProcessingImpl == null ? + MaximumInputStarvationTimeInFallbackMode : + MaximumInputStarvationTimeInExplicitProcessingExplicitMode; if (_backgroundProcessingImpl != null) _backgroundProcessingImpl.ReadyForBackgroundProcessing += OnReadyForExplicitBackgroundProcessing; } diff --git a/src/Avalonia.Base/Threading/DispatcherFrame.cs b/src/Avalonia.Base/Threading/DispatcherFrame.cs index e826432475..1a80740420 100644 --- a/src/Avalonia.Base/Threading/DispatcherFrame.cs +++ b/src/Avalonia.Base/Threading/DispatcherFrame.cs @@ -38,10 +38,14 @@ public class DispatcherFrame /// for their important criteria to be met. These frames /// should have a timeout associated with them. /// - public DispatcherFrame(bool exitWhenRequested) + public DispatcherFrame(bool exitWhenRequested) : this(Dispatcher.UIThread, exitWhenRequested) { - Dispatcher = Dispatcher.UIThread; Dispatcher.VerifyAccess(); + } + + internal DispatcherFrame(Dispatcher dispatcher, bool exitWhenRequested) + { + Dispatcher = dispatcher; _exitWhenRequested = exitWhenRequested; _continue = true; } From 250743d786147434b36c1f584d7741964f3e4975 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Tue, 18 Jul 2023 09:40:03 +0200 Subject: [PATCH 66/72] Rework GetNext/PreviousCharacterHit --- src/Avalonia.Base/Media/GlyphRun.cs | 6 +- .../Media/TextFormatting/TextLineImpl.cs | 321 ++++++------------ .../Media/GlyphRunTests.cs | 2 +- .../Media/TextFormatting/TextLineTests.cs | 116 ++++++- 4 files changed, 222 insertions(+), 223 deletions(-) diff --git a/src/Avalonia.Base/Media/GlyphRun.cs b/src/Avalonia.Base/Media/GlyphRun.cs index 0f70386424..fcb2cec733 100644 --- a/src/Avalonia.Base/Media/GlyphRun.cs +++ b/src/Avalonia.Base/Media/GlyphRun.cs @@ -424,13 +424,13 @@ namespace Avalonia.Media /// public CharacterHit GetPreviousCaretCharacterHit(CharacterHit characterHit) { + var previousCharacterHit = FindNearestCharacterHit(characterHit.FirstCharacterIndex - 1, out _); + if (characterHit.TrailingLength != 0) { - return new CharacterHit(characterHit.FirstCharacterIndex); + return previousCharacterHit; } - var previousCharacterHit = FindNearestCharacterHit(characterHit.FirstCharacterIndex - 1, out _); - return new CharacterHit(previousCharacterHit.FirstCharacterIndex); } diff --git a/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs b/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs index ca31d9a6d0..44f53420de 100644 --- a/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs +++ b/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs @@ -9,7 +9,7 @@ namespace Avalonia.Media.TextFormatting internal static Comparer TextBoundsComparer { get; } = Comparer.Create((x, y) => x.Rectangle.Left.CompareTo(y.Rectangle.Left)); - private IReadOnlyList? _indexedTextRuns; + internal IReadOnlyList? _indexedTextRuns; private readonly TextRun[] _textRuns; private readonly double _paragraphWidth; private readonly TextParagraphProperties _paragraphProperties; @@ -512,38 +512,45 @@ namespace Avalonia.Media.TextFormatting /// public override CharacterHit GetNextCaretCharacterHit(CharacterHit characterHit) { - if (_textRuns.Length == 0) + if (_textRuns.Length == 0 || _indexedTextRuns is null) { return new CharacterHit(); } - if (TryFindNextCharacterHit(characterHit, out var nextCharacterHit)) - { - return nextCharacterHit; - } - - var lastTextPosition = FirstTextSourceIndex + Length; + var currentCharacterrHit = characterHit; + var characterIndex = characterHit.FirstCharacterIndex + characterHit.TrailingLength; - // Can't move, we're after the last character - var runIndex = GetRunIndexAtCharacterIndex(lastTextPosition, LogicalDirection.Forward, out var currentPosition); + var currentRun = GetRunAtCharacterIndex(characterIndex, LogicalDirection.Forward, out var currentPosition); - var currentRun = _textRuns[runIndex]; + var nextCharacterHit = characterHit; switch (currentRun) { case ShapedTextRun shapedRun: { - nextCharacterHit = shapedRun.GlyphRun.GetNextCaretCharacterHit(characterHit); + var offset = Math.Max(0, currentPosition - shapedRun.GlyphRun.Metrics.FirstCluster - characterHit.TrailingLength); + + if (offset > 0) + { + currentCharacterrHit = new CharacterHit(Math.Max(0, characterHit.FirstCharacterIndex - offset), characterHit.TrailingLength); + } + + nextCharacterHit = shapedRun.GlyphRun.GetNextCaretCharacterHit(currentCharacterrHit); + + if (offset > 0) + { + nextCharacterHit = new CharacterHit(nextCharacterHit.FirstCharacterIndex + offset, nextCharacterHit.TrailingLength); + } break; } - default: + case TextRun: { nextCharacterHit = new CharacterHit(currentPosition + currentRun.Length); break; } } - if (characterHit.FirstCharacterIndex + characterHit.TrailingLength == nextCharacterHit.FirstCharacterIndex + nextCharacterHit.TrailingLength) + if (characterIndex == nextCharacterHit.FirstCharacterIndex + nextCharacterHit.TrailingLength) { return characterHit; } @@ -554,17 +561,75 @@ namespace Avalonia.Media.TextFormatting /// public override CharacterHit GetPreviousCaretCharacterHit(CharacterHit characterHit) { - if (TryFindPreviousCharacterHit(characterHit, out var previousCharacterHit)) + if (_textRuns.Length == 0 || _indexedTextRuns is null) + { + return new CharacterHit(); + } + + if (characterHit.TrailingLength > 0 && characterHit.FirstCharacterIndex <= FirstTextSourceIndex) + { + return new CharacterHit(FirstTextSourceIndex); + } + + var characterIndex = characterHit.FirstCharacterIndex + characterHit.TrailingLength; + + if (characterIndex <= FirstTextSourceIndex) { - return previousCharacterHit; + return new CharacterHit(FirstTextSourceIndex); + } + + var currentCharacterrHit = characterHit; + + var currentRun = GetRunAtCharacterIndex(characterIndex, LogicalDirection.Backward, out var currentPosition); + + if (currentPosition == characterHit.FirstCharacterIndex) + { + currentRun = GetRunAtCharacterIndex(characterHit.FirstCharacterIndex, LogicalDirection.Backward, out currentPosition); + } + + var previousCharacterHit = characterHit; + + switch (currentRun) + { + case ShapedTextRun shapedRun: + { + var offset = Math.Max(0, currentPosition - shapedRun.GlyphRun.Metrics.FirstCluster); + + if (offset > 0) + { + currentCharacterrHit = new CharacterHit(Math.Max(0, characterHit.FirstCharacterIndex - offset), characterHit.TrailingLength); + } + + previousCharacterHit = shapedRun.GlyphRun.GetPreviousCaretCharacterHit(currentCharacterrHit); + + if (offset > 0) + { + previousCharacterHit = new CharacterHit(previousCharacterHit.FirstCharacterIndex + offset, previousCharacterHit.TrailingLength); + } + break; + } + case TextRun: + { + if (characterHit.TrailingLength > 0) + { + previousCharacterHit = new CharacterHit(currentPosition, currentRun.Length); + + } + else + { + previousCharacterHit = new CharacterHit(currentPosition + currentRun.Length); + } + + break; + } } - if (characterHit.FirstCharacterIndex <= FirstTextSourceIndex) + if (characterIndex == previousCharacterHit.FirstCharacterIndex + previousCharacterHit.TrailingLength) { - characterHit = new CharacterHit(FirstTextSourceIndex); + return characterHit; } - return characterHit; // Can't move, we're before the first character + return previousCharacterHit; } /// @@ -1009,161 +1074,7 @@ namespace Avalonia.Media.TextFormatting if (_textLineBreak is null && _textRuns.Length > 1 && _textRuns[_textRuns.Length - 1] is TextEndOfLine textEndOfLine) { _textLineBreak = new TextLineBreak(textEndOfLine); - } - } - - /// - /// Tries to find the next character hit. - /// - /// The current character hit. - /// The next character hit. - /// - private bool TryFindNextCharacterHit(CharacterHit characterHit, out CharacterHit nextCharacterHit) - { - nextCharacterHit = characterHit; - - var codepointIndex = characterHit.FirstCharacterIndex + characterHit.TrailingLength; - var lastCodepointIndex = FirstTextSourceIndex + Length; - - if (codepointIndex >= lastCodepointIndex) - { - return false; // Cannot go forward anymore - } - - if (codepointIndex < FirstTextSourceIndex) - { - codepointIndex = FirstTextSourceIndex; - } - - var runIndex = GetRunIndexAtCharacterIndex(codepointIndex, LogicalDirection.Forward, out var currentPosition); - - while (runIndex < _textRuns.Length) - { - var currentRun = _textRuns[runIndex]; - - switch (currentRun) - { - case ShapedTextRun shapedRun: - { - var foundCharacterHit = shapedRun.GlyphRun.FindNearestCharacterHit(characterHit.FirstCharacterIndex + characterHit.TrailingLength, out _); - - var isAtEnd = foundCharacterHit.FirstCharacterIndex + foundCharacterHit.TrailingLength == FirstTextSourceIndex + Length; - - if (isAtEnd && !shapedRun.GlyphRun.IsLeftToRight) - { - nextCharacterHit = foundCharacterHit; - - return true; - } - - nextCharacterHit = isAtEnd || characterHit.TrailingLength != 0 ? - foundCharacterHit : - new CharacterHit(foundCharacterHit.FirstCharacterIndex + foundCharacterHit.TrailingLength); - - if (isAtEnd || nextCharacterHit.FirstCharacterIndex > characterHit.FirstCharacterIndex) - { - return true; - } - - break; - } - default: - { - var textPosition = characterHit.FirstCharacterIndex + characterHit.TrailingLength; - - if (textPosition == currentPosition) - { - nextCharacterHit = new CharacterHit(currentPosition + currentRun.Length); - - return true; - } - - break; - } - } - - currentPosition += currentRun.Length; - runIndex++; - } - - return false; - } - - /// - /// Tries to find the previous character hit. - /// - /// The current character hit. - /// The previous character hit. - /// - private bool TryFindPreviousCharacterHit(CharacterHit characterHit, out CharacterHit previousCharacterHit) - { - var characterIndex = characterHit.FirstCharacterIndex + characterHit.TrailingLength; - - if (characterIndex == FirstTextSourceIndex) - { - previousCharacterHit = new CharacterHit(FirstTextSourceIndex); - - return true; - } - - previousCharacterHit = characterHit; - - if (characterIndex < FirstTextSourceIndex) - { - return false; // Cannot go backward anymore. - } - - var runIndex = GetRunIndexAtCharacterIndex(characterIndex, LogicalDirection.Backward, out var currentPosition); - - while (runIndex >= 0) - { - var currentRun = _textRuns[runIndex]; - - switch (currentRun) - { - case ShapedTextRun shapedRun: - { - var foundCharacterHit = shapedRun.GlyphRun.FindNearestCharacterHit(characterHit.FirstCharacterIndex - 1, out _); - - if (foundCharacterHit.FirstCharacterIndex + foundCharacterHit.TrailingLength < characterIndex) - { - previousCharacterHit = foundCharacterHit; - - return true; - } - - var previousPosition = foundCharacterHit.FirstCharacterIndex + foundCharacterHit.TrailingLength; - - if (foundCharacterHit.TrailingLength > 0 && previousPosition == characterIndex) - { - previousCharacterHit = new CharacterHit(foundCharacterHit.FirstCharacterIndex); - } - - if (previousCharacterHit != characterHit) - { - return true; - } - - break; - } - default: - { - if (characterIndex == currentPosition + currentRun.Length) - { - previousCharacterHit = new CharacterHit(currentPosition); - - return true; - } - - break; - } - } - - currentPosition -= currentRun.Length; - runIndex--; } - - return false; } /// @@ -1173,15 +1084,23 @@ namespace Avalonia.Media.TextFormatting /// The logical direction. /// The text position of the found run index. /// The text run index. - private int GetRunIndexAtCharacterIndex(int codepointIndex, LogicalDirection direction, out int textPosition) + private TextRun? GetRunAtCharacterIndex(int codepointIndex, LogicalDirection direction, out int textPosition) { var runIndex = 0; textPosition = FirstTextSourceIndex; + + if (_indexedTextRuns is null) + { + return null; + } + + TextRun? currentRun = null; TextRun? previousRun = null; - while (runIndex < _textRuns.Length) + while (runIndex < _indexedTextRuns.Count) { - var currentRun = _textRuns[runIndex]; + var indexedRun = _indexedTextRuns[runIndex]; + currentRun = indexedRun.TextRun; switch (currentRun) { @@ -1189,64 +1108,49 @@ namespace Avalonia.Media.TextFormatting { var firstCluster = shapedRun.GlyphRun.Metrics.FirstCluster; - if (firstCluster > codepointIndex) - { - break; - } - - if (previousRun is ShapedTextRun previousShaped && !previousShaped.ShapedBuffer.IsLeftToRight) - { - if (shapedRun.ShapedBuffer.IsLeftToRight) - { - if (firstCluster >= codepointIndex) - { - return --runIndex; - } - } - else - { - if (codepointIndex > firstCluster + currentRun.Length) - { - return --runIndex; - } - } - } + firstCluster += Math.Max(0, indexedRun.TextSourceCharacterIndex - firstCluster); if (direction == LogicalDirection.Forward) { - if (codepointIndex >= firstCluster && codepointIndex <= firstCluster + currentRun.Length) + if (codepointIndex >= firstCluster && codepointIndex < firstCluster + currentRun.Length) { - return runIndex; + return currentRun; } } else { - if (codepointIndex > firstCluster && - codepointIndex <= firstCluster + currentRun.Length) + if (previousRun is not null && previousRun is not ShapedTextRun && codepointIndex == textPosition + firstCluster) + { + textPosition -= previousRun.Length; + + return previousRun; + } + + if (codepointIndex > firstCluster && codepointIndex <= firstCluster + currentRun.Length) { - return runIndex; + return currentRun; } } if (runIndex + 1 >= _textRuns.Length) { - return runIndex; + return currentRun; } textPosition += currentRun.Length; break; } - default: + case TextRun: { if (codepointIndex == textPosition) { - return runIndex; + return currentRun; } if (runIndex + 1 >= _textRuns.Length) { - return runIndex; + return currentRun; } textPosition += currentRun.Length; @@ -1257,10 +1161,11 @@ namespace Avalonia.Media.TextFormatting } runIndex++; + previousRun = currentRun; } - return runIndex; + return currentRun; } private TextLineMetrics CreateLineMetrics() diff --git a/tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs b/tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs index c273cc6489..69d7fc4916 100644 --- a/tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/GlyphRunTests.cs @@ -111,7 +111,7 @@ namespace Avalonia.Base.UnitTests.Media using(UnitTestApplication.Start(TestServices.MockPlatformRenderInterface)) using (var glyphRun = CreateGlyphRun(advances, clusters, bidiLevel)) { - var characterHit = glyphRun.GetPreviousCaretCharacterHit(new CharacterHit(currentIndex, currentLength)); + var characterHit = glyphRun.GetPreviousCaretCharacterHit(new CharacterHit(currentIndex + currentLength)); Assert.Equal(previousIndex, characterHit.FirstCharacterIndex); diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLineTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLineTests.cs index 12427e1f9e..d576a64523 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLineTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLineTests.cs @@ -194,7 +194,7 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting for (var i = 0; i < clusters.Count; i++) { var expectedCluster = clusters[i]; - var actualCluster = nextCharacterHit.FirstCharacterIndex; + var actualCluster = nextCharacterHit.FirstCharacterIndex + nextCharacterHit.TrailingLength; Assert.Equal(expectedCluster, actualCluster); @@ -278,16 +278,6 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting Assert.Equal(clusters[i], previousCharacterHit.FirstCharacterIndex + previousCharacterHit.TrailingLength); } - - firstCharacterHit = previousCharacterHit; - - firstCharacterHit = textLine.GetPreviousCaretCharacterHit(firstCharacterHit); - - previousCharacterHit = textLine.GetPreviousCaretCharacterHit(firstCharacterHit); - - Assert.Equal(firstCharacterHit.FirstCharacterIndex, previousCharacterHit.FirstCharacterIndex); - - Assert.Equal(0, previousCharacterHit.TrailingLength); } } @@ -728,6 +718,110 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting } } + [Fact] + public void Should_GetNextCaretCharacterHit_From_Mixed_TextBuffer() + { + using (Start()) + { + var defaultProperties = new GenericTextRunProperties(Typeface.Default); + var textSource = new MixedTextBufferTextSource(); + + var formatter = new TextFormatterImpl(); + + var textLine = + formatter.FormatLine(textSource, 0, double.PositiveInfinity, + new GenericTextParagraphProperties(defaultProperties)); + + var characterHit = textLine.GetNextCaretCharacterHit(new CharacterHit(9, 1)); + + Assert.Equal(10, characterHit.FirstCharacterIndex); + + Assert.Equal(1, characterHit.TrailingLength); + + characterHit = textLine.GetNextCaretCharacterHit(characterHit); + + Assert.Equal(11, characterHit.FirstCharacterIndex); + + Assert.Equal(1, characterHit.TrailingLength); + + characterHit = textLine.GetNextCaretCharacterHit(new CharacterHit(19, 1)); + + Assert.Equal(20, characterHit.FirstCharacterIndex); + + Assert.Equal(1, characterHit.TrailingLength); + + characterHit = textLine.GetNextCaretCharacterHit(new CharacterHit(10)); + + Assert.Equal(11, characterHit.FirstCharacterIndex); + + Assert.Equal(0, characterHit.TrailingLength); + + characterHit = textLine.GetNextCaretCharacterHit(characterHit); + + Assert.Equal(12, characterHit.FirstCharacterIndex); + + Assert.Equal(0, characterHit.TrailingLength); + + characterHit = textLine.GetNextCaretCharacterHit(new CharacterHit(20)); + + Assert.Equal(21, characterHit.FirstCharacterIndex); + + Assert.Equal(0, characterHit.TrailingLength); + } + } + + [Fact] + public void Should_GetPreviousCaretCharacterHit_From_Mixed_TextBuffer() + { + using (Start()) + { + var defaultProperties = new GenericTextRunProperties(Typeface.Default); + var textSource = new MixedTextBufferTextSource(); + + var formatter = new TextFormatterImpl(); + + var textLine = + formatter.FormatLine(textSource, 0, double.PositiveInfinity, + new GenericTextParagraphProperties(defaultProperties)); + + var characterHit = textLine.GetPreviousCaretCharacterHit(new CharacterHit(20, 1)); + + Assert.Equal(19, characterHit.FirstCharacterIndex); + + Assert.Equal(1, characterHit.TrailingLength); + + characterHit = textLine.GetPreviousCaretCharacterHit(new CharacterHit(10, 1)); + + Assert.Equal(9, characterHit.FirstCharacterIndex); + + Assert.Equal(1, characterHit.TrailingLength); + + characterHit = textLine.GetPreviousCaretCharacterHit(characterHit); + + Assert.Equal(8, characterHit.FirstCharacterIndex); + + Assert.Equal(1, characterHit.TrailingLength); + + characterHit = textLine.GetPreviousCaretCharacterHit(new CharacterHit(21)); + + Assert.Equal(20, characterHit.FirstCharacterIndex); + + Assert.Equal(0, characterHit.TrailingLength); + + characterHit = textLine.GetPreviousCaretCharacterHit(new CharacterHit(11)); + + Assert.Equal(10, characterHit.FirstCharacterIndex); + + Assert.Equal(0, characterHit.TrailingLength); + + characterHit = textLine.GetPreviousCaretCharacterHit(characterHit); + + Assert.Equal(9, characterHit.FirstCharacterIndex); + + Assert.Equal(0, characterHit.TrailingLength); + } + } + private class MixedTextBufferTextSource : ITextSource { public TextRun? GetTextRun(int textSourceIndex) From 7c4ce4bca3ef66859f91d5b4c0dea9e5b72b5e6a Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Tue, 18 Jul 2023 14:45:33 +0600 Subject: [PATCH 67/72] Make dispatcher more usable on non-ui threads --- .../Threading/AvaloniaSynchronizationContext.cs | 7 ++++--- src/Avalonia.Base/Threading/Dispatcher.Invoke.cs | 4 ++-- src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs | 2 +- src/Avalonia.Base/Threading/DispatcherOperation.cs | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Base/Threading/AvaloniaSynchronizationContext.cs b/src/Avalonia.Base/Threading/AvaloniaSynchronizationContext.cs index e0563876bf..1efaa01442 100644 --- a/src/Avalonia.Base/Threading/AvaloniaSynchronizationContext.cs +++ b/src/Avalonia.Base/Threading/AvaloniaSynchronizationContext.cs @@ -99,14 +99,15 @@ namespace Avalonia.Threading } } - public static RestoreContext Ensure(DispatcherPriority priority) + public static RestoreContext Ensure(DispatcherPriority priority) => Ensure(Dispatcher.UIThread, priority); + public static RestoreContext Ensure(Dispatcher dispatcher, DispatcherPriority priority) { if (Current is AvaloniaSynchronizationContext avaloniaContext && avaloniaContext.Priority == priority) return default; var oldContext = Current; - Dispatcher.UIThread.VerifyAccess(); - SetSynchronizationContext(Dispatcher.UIThread.GetContextWithPriority(priority)); + dispatcher.VerifyAccess(); + SetSynchronizationContext(dispatcher.GetContextWithPriority(priority)); return new RestoreContext(oldContext); } } diff --git a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs index 5995a03758..add990bd57 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.Invoke.cs @@ -106,7 +106,7 @@ public partial class Dispatcher // call the callback directly. if (!cancellationToken.IsCancellationRequested && priority == DispatcherPriority.Send && CheckAccess()) { - using (AvaloniaSynchronizationContext.Ensure(priority)) + using (AvaloniaSynchronizationContext.Ensure(this, priority)) callback(); return; } @@ -228,7 +228,7 @@ public partial class Dispatcher // call the callback directly. if (!cancellationToken.IsCancellationRequested && priority == DispatcherPriority.Send && CheckAccess()) { - using (AvaloniaSynchronizationContext.Ensure(priority)) + using (AvaloniaSynchronizationContext.Ensure(this, priority)) return callback(); } diff --git a/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs b/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs index e1833fef2b..4b60ee7479 100644 --- a/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs +++ b/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs @@ -49,7 +49,7 @@ public partial class Dispatcher try { _frames.Push(frame); - using (AvaloniaSynchronizationContext.Ensure(DispatcherPriority.Normal)) + using (AvaloniaSynchronizationContext.Ensure(this, DispatcherPriority.Normal)) frame.Run(_controlledImpl); } finally diff --git a/src/Avalonia.Base/Threading/DispatcherOperation.cs b/src/Avalonia.Base/Threading/DispatcherOperation.cs index 8bd6d3bc01..0008d771c6 100644 --- a/src/Avalonia.Base/Threading/DispatcherOperation.cs +++ b/src/Avalonia.Base/Threading/DispatcherOperation.cs @@ -258,7 +258,7 @@ public class DispatcherOperation try { - using (AvaloniaSynchronizationContext.Ensure(Priority)) + using (AvaloniaSynchronizationContext.Ensure(Dispatcher, Priority)) InvokeCore(); } finally From 2dd92675e3920f666cf8f67fc908b013ddb07669 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Tue, 18 Jul 2023 19:27:19 +0200 Subject: [PATCH 68/72] macOS native: fix destructors accessing freed .NET objects --- native/Avalonia.Native/src/OSX/app.mm | 18 ++++++++++++++++++ native/Avalonia.Native/src/OSX/common.h | 1 + native/Avalonia.Native/src/OSX/main.mm | 7 +++++++ src/Avalonia.Native/AvaloniaNativePlatform.cs | 10 ++++++++-- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index 9cc9fc9523..88cdf4d9de 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -2,6 +2,7 @@ #include "AvnString.h" @interface AvnAppDelegate : NSObject -(AvnAppDelegate* _Nonnull) initWithEvents: (IAvnApplicationEvents* _Nonnull) events; +-(void) releaseEvents; @end NSApplicationActivationPolicy AvnDesiredActivationPolicy = NSApplicationActivationPolicyRegular; @@ -15,6 +16,11 @@ ComPtr _events; return self; } +- (void)releaseEvents +{ + _events = nil; +} + - (void)applicationWillFinishLaunching:(NSNotification *)notification { if([[NSApplication sharedApplication] activationPolicy] != AvnDesiredActivationPolicy) @@ -105,6 +111,18 @@ extern void InitializeAvnApp(IAvnApplicationEvents* events, bool disableAppDeleg } } +extern void ReleaseAvnAppEvents() +{ + NSApplication* app = [AvnApplication sharedApplication]; + id delegate = [app delegate]; + if ([delegate isMemberOfClass:[AvnAppDelegate class]]) + { + AvnAppDelegate* avnDelegate = delegate; + [avnDelegate releaseEvents]; + [app setDelegate:nil]; + } +} + HRESULT AvnApplicationCommands::HideApp() { START_COM_CALL; diff --git a/native/Avalonia.Native/src/OSX/common.h b/native/Avalonia.Native/src/OSX/common.h index 5cf1b94a2f..672525c64a 100644 --- a/native/Avalonia.Native/src/OSX/common.h +++ b/native/Avalonia.Native/src/OSX/common.h @@ -38,6 +38,7 @@ extern IAvnMenu* GetAppMenu (); extern NSMenuItem* GetAppMenuItem (); extern void InitializeAvnApp(IAvnApplicationEvents* events, bool disableAppDelegate); +extern void ReleaseAvnAppEvents(); extern NSApplicationActivationPolicy AvnDesiredActivationPolicy; extern NSPoint ToNSPoint (AvnPoint p); extern NSRect ToNSRect (AvnRect r); diff --git a/native/Avalonia.Native/src/OSX/main.mm b/native/Avalonia.Native/src/OSX/main.mm index 1c7e2cf25a..37fd0758e5 100644 --- a/native/Avalonia.Native/src/OSX/main.mm +++ b/native/Avalonia.Native/src/OSX/main.mm @@ -197,6 +197,13 @@ class AvaloniaNative : public ComSingleObject Date: Wed, 19 Jul 2023 11:22:12 +0200 Subject: [PATCH 69/72] Update Rotate3DTransition.cs Fix flickering after transition has finished. This was originally contained in my previous PR, but was lost. --- src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs b/src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs index b4a1f02f09..fb8e9488a7 100644 --- a/src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs +++ b/src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs @@ -89,6 +89,7 @@ public class Rotate3DTransition: PageSlide { Easing = SlideInEasing, Duration = Duration, + FillMode = FillMode.Forward, Children = { CreateKeyFrame(0d, 90d * (forward ? 1 : -1), 1), From e16deecd6a2ee1b521e5528afa0257fa28cfa903 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Wed, 19 Jul 2023 12:05:49 +0200 Subject: [PATCH 70/72] Use ProcessExit to cleanup the native resources --- native/Avalonia.Native/src/OSX/main.mm | 3 ++- src/Avalonia.Native/AvaloniaNativePlatform.cs | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/main.mm b/native/Avalonia.Native/src/OSX/main.mm index 37fd0758e5..3fddb72529 100644 --- a/native/Avalonia.Native/src/OSX/main.mm +++ b/native/Avalonia.Native/src/OSX/main.mm @@ -198,7 +198,8 @@ class AvaloniaNative : public ComSingleObject Date: Wed, 19 Jul 2023 14:31:48 +0200 Subject: [PATCH 71/72] Handle ScrollContentPresenter extent rounding errors --- samples/Sandbox/MainWindow.axaml | 7 ----- .../Presenters/ScrollContentPresenter.cs | 19 ++++++++++-- .../Presenters/ScrollContentPresenterTests.cs | 31 +++++++++++++++++++ 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/samples/Sandbox/MainWindow.axaml b/samples/Sandbox/MainWindow.axaml index f96abcac96..6929f192c7 100644 --- a/samples/Sandbox/MainWindow.axaml +++ b/samples/Sandbox/MainWindow.axaml @@ -1,11 +1,4 @@ - - - - - - - diff --git a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs index bd3d2b5171..4ff8e7cfef 100644 --- a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs +++ b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs @@ -473,18 +473,31 @@ namespace Avalonia.Controls.Presenters } Viewport = finalSize; + Extent = ComputeExtent(finalSize); + _isAnchorElementDirty = true; + return finalSize; + } + + private Size ComputeExtent(Size viewportSize) + { var childMargin = Child!.Margin; + if (Child.UseLayoutRounding) { var scale = LayoutHelper.GetLayoutScale(Child); childMargin = LayoutHelper.RoundLayoutThickness(childMargin, scale, scale); } - Extent = Child!.Bounds.Size.Inflate(childMargin); - _isAnchorElementDirty = true; + var extent = Child!.Bounds.Size.Inflate(childMargin); - return finalSize; + if (MathUtilities.AreClose(extent.Width, viewportSize.Width, LayoutHelper.LayoutEpsilon)) + extent = extent.WithWidth(viewportSize.Width); + + if (MathUtilities.AreClose(extent.Height, viewportSize.Height, LayoutHelper.LayoutEpsilon)) + extent = extent.WithHeight(viewportSize.Height); + + return extent; } private void OnScrollGesture(object? sender, ScrollGestureEventArgs e) diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs index c7ea5c1b69..30628b1af8 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs @@ -275,6 +275,37 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.Equal(new Size(203.2, 203.2), target.Extent); } + [Fact] + public void Extent_Should_Be_Rounded_To_Viewport_When_Close() + { + var root = new TestRoot + { + LayoutScaling = 1.75, + UseLayoutRounding = true + }; + + var target = new ScrollContentPresenter + { + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + Content = new Border + { + Width = 164.57142857142858, + Height = 164.57142857142858, + Margin = new Thickness(6) + } + }; + + root.Child = target; + target.UpdateChild(); + target.Measure(new Size(1000, 1000)); + target.Arrange(new Rect(0, 0, 1000, 1000)); + + Assert.Equal(new Size(176.00000000000003, 176.00000000000003), target.Child!.DesiredSize); + Assert.Equal(new Size(176, 176), target.Viewport); + Assert.Equal(new Size(176, 176), target.Extent); + } + [Fact] public void Extent_Width_Should_Be_Arrange_Width_When_CanScrollHorizontally_False() { From 571f69fbb5d1f403ebb64d316681392a126b5a6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jul 2023 01:50:35 +0000 Subject: [PATCH 72/72] Bump word-wrap in /src/Browser/Avalonia.Browser/webapp Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/jonschlinkert/word-wrap/releases) - [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4) --- updated-dependencies: - dependency-name: word-wrap dependency-type: indirect ... Signed-off-by: dependabot[bot] --- .../Avalonia.Browser/webapp/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Browser/Avalonia.Browser/webapp/package-lock.json b/src/Browser/Avalonia.Browser/webapp/package-lock.json index 12757fd7a0..fd4c6a9539 100644 --- a/src/Browser/Avalonia.Browser/webapp/package-lock.json +++ b/src/Browser/Avalonia.Browser/webapp/package-lock.json @@ -3296,9 +3296,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5560,9 +5560,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true }, "wrappy": {