From 8a5dcaddd407b69f6fc950bb9fcaadced6b11c00 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Fri, 19 Jun 2020 14:59:34 +0300 Subject: [PATCH 1/9] Patch MSBuild tasks assembly during packaging --- nukebuild/Build.cs | 2 + nukebuild/BuildTasksPatcher.cs | 76 +++++++++++++++++++ nukebuild/_build.csproj | 3 + .../Avalonia.Build.Tasks.csproj | 19 ----- 4 files changed, 81 insertions(+), 19 deletions(-) create mode 100644 nukebuild/BuildTasksPatcher.cs diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 5460dc7720..d6e8889a12 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -268,6 +268,8 @@ partial class Build : NukeBuild .DependsOn(CreateIntermediateNugetPackages) .Executes(() => { + BuildTasksPatcher.PatchBuildTasksInPackage(Parameters.NugetIntermediateRoot / "Avalonia.Build.Tasks." + + Parameters.Version + ".nupkg"); var config = Numerge.MergeConfiguration.LoadFile(RootDirectory / "nukebuild" / "numerge.config"); EnsureCleanDirectory(Parameters.NugetRoot); if(!Numerge.NugetPackageMerger.Merge(Parameters.NugetIntermediateRoot, Parameters.NugetRoot, config, diff --git a/nukebuild/BuildTasksPatcher.cs b/nukebuild/BuildTasksPatcher.cs new file mode 100644 index 0000000000..44f01da669 --- /dev/null +++ b/nukebuild/BuildTasksPatcher.cs @@ -0,0 +1,76 @@ +using System; +using System.IO; +using System.IO.Compression; +using System.Linq; +using ILRepacking; +using Mono.Cecil; + +public class BuildTasksPatcher +{ + public static void PatchBuildTasksInPackage(string packagePath) + { + using (var archive = new ZipArchive(File.Open(packagePath, FileMode.Open, FileAccess.ReadWrite), + ZipArchiveMode.Update)) + { + + foreach (var entry in archive.Entries.ToList()) + { + if (entry.Name == "Avalonia.Build.Tasks.dll") + { + var temp = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".dll"); + var output = temp + ".output"; + var patched = new MemoryStream(); + try + { + entry.ExtractToFile(temp, true); + var repack = new ILRepacking.ILRepack(new RepackOptions() + { + Internalize = true, + InputAssemblies = new[] + { + temp, typeof(Mono.Cecil.AssemblyDefinition).Assembly.GetModules()[0] + .FullyQualifiedName + }, + SearchDirectories = new string[0], + OutputFile = output + }); + repack.Repack(); + + + // 'hurr-durr assembly with the same name is already loaded' prevention + using (var asm = AssemblyDefinition.ReadAssembly(output, + new ReaderParameters { ReadWrite = true, InMemory = true, })) + { + asm.Name = new AssemblyNameDefinition( + "Avalonia.Build.Tasks." + + Guid.NewGuid().ToString().Replace("-", ""), + new Version(0, 0, 0)); + asm.Write(patched); + patched.Position = 0; + } + } + finally + { + try + { + if (File.Exists(temp)) + File.Delete(temp); + if (File.Exists(output)) + File.Delete(output); + } + catch + { + //ignore + } + } + + var fn = entry.FullName; + entry.Delete(); + var newEntry = archive.CreateEntry(fn, CompressionLevel.Optimal); + using (var s = newEntry.Open()) + patched.CopyTo(s); + } + } + } + } +} \ No newline at end of file diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj index 584c36d033..4c64d4ff93 100644 --- a/nukebuild/_build.csproj +++ b/nukebuild/_build.csproj @@ -14,6 +14,9 @@ + + + diff --git a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj index 582e4499c5..d4022b70a0 100644 --- a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj +++ b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj @@ -46,25 +46,6 @@ - - - - - - $(MSBuildThisFileDirectory)bin\$(Configuration)\$(TargetFramework) - - - - - - - - - - - - - From a08f00d78fb22ea78905b703aefb1d02e3bb7124 Mon Sep 17 00:00:00 2001 From: Maksym Katsydan Date: Tue, 30 Jun 2020 20:21:18 -0400 Subject: [PATCH 2/9] Update ComboBox selected and focus styles --- src/Avalonia.Themes.Fluent/ComboBox.xaml | 191 +++++++++++-------- src/Avalonia.Themes.Fluent/ComboBoxItem.xaml | 70 +++++-- 2 files changed, 161 insertions(+), 100 deletions(-) diff --git a/src/Avalonia.Themes.Fluent/ComboBox.xaml b/src/Avalonia.Themes.Fluent/ComboBox.xaml index 1fc657c1a3..8cac89f156 100644 --- a/src/Avalonia.Themes.Fluent/ComboBox.xaml +++ b/src/Avalonia.Themes.Fluent/ComboBox.xaml @@ -1,4 +1,5 @@ - + @@ -25,6 +26,7 @@ - + + + - + - + - + - - + + + + - + - + + - + + diff --git a/src/Avalonia.Themes.Fluent/ComboBoxItem.xaml b/src/Avalonia.Themes.Fluent/ComboBoxItem.xaml index c26dec3d34..66ccea99b5 100644 --- a/src/Avalonia.Themes.Fluent/ComboBoxItem.xaml +++ b/src/Avalonia.Themes.Fluent/ComboBoxItem.xaml @@ -1,17 +1,19 @@ - - + + Item 1 - Item 2 - - - - Item 1 - Item 2 - - + Item 2 long + Item 3 + Item 4 + + @@ -19,12 +21,11 @@ - - + Padding="{TemplateBinding Padding}" /> + + + + + + + + - + - From 82bd3564a5de5db3f02a72d14d1679b42f482fc3 Mon Sep 17 00:00:00 2001 From: Maksym Katsydan Date: Tue, 30 Jun 2020 22:53:11 -0400 Subject: [PATCH 3/9] ComboBox: add focusvisual pseudoclass to replace focus adorner --- src/Avalonia.Controls/ComboBox.cs | 15 +++++++++++++++ src/Avalonia.Themes.Fluent/ComboBox.xaml | 8 ++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index 6557346b1f..5fdc19ed05 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -262,6 +262,21 @@ namespace Avalonia.Controls _popup.Closed += PopupClosed; } + protected override void OnGotFocus(GotFocusEventArgs e) + { + if (e.NavigationMethod == NavigationMethod.Tab + || e.NavigationMethod == NavigationMethod.Directional) + { + PseudoClasses.Set(":focusvisual", true); + } + } + + protected override void OnLostFocus(RoutedEventArgs e) + { + base.OnLostFocus(e); + PseudoClasses.Set(":focusvisual", false); + } + /// /// Called when the ComboBox popup is closed, with the /// that caused the popup to close. diff --git a/src/Avalonia.Themes.Fluent/ComboBox.xaml b/src/Avalonia.Themes.Fluent/ComboBox.xaml index 8cac89f156..7ece004530 100644 --- a/src/Avalonia.Themes.Fluent/ComboBox.xaml +++ b/src/Avalonia.Themes.Fluent/ComboBox.xaml @@ -191,20 +191,20 @@ - - - - From 300a6952d125911c8e77ee9d3e59b0d8f5f16fc8 Mon Sep 17 00:00:00 2001 From: Maksym Katsydan Date: Wed, 1 Jul 2020 16:34:49 -0400 Subject: [PATCH 4/9] Use focus-visible instead of custom focusvisual --- src/Avalonia.Controls/ComboBox.cs | 15 --------------- src/Avalonia.Themes.Fluent/ComboBox.xaml | 12 ++++++------ 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index 5fdc19ed05..6557346b1f 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -262,21 +262,6 @@ namespace Avalonia.Controls _popup.Closed += PopupClosed; } - protected override void OnGotFocus(GotFocusEventArgs e) - { - if (e.NavigationMethod == NavigationMethod.Tab - || e.NavigationMethod == NavigationMethod.Directional) - { - PseudoClasses.Set(":focusvisual", true); - } - } - - protected override void OnLostFocus(RoutedEventArgs e) - { - base.OnLostFocus(e); - PseudoClasses.Set(":focusvisual", false); - } - /// /// Called when the ComboBox popup is closed, with the /// that caused the popup to close. diff --git a/src/Avalonia.Themes.Fluent/ComboBox.xaml b/src/Avalonia.Themes.Fluent/ComboBox.xaml index 7ece004530..e996453b2e 100644 --- a/src/Avalonia.Themes.Fluent/ComboBox.xaml +++ b/src/Avalonia.Themes.Fluent/ComboBox.xaml @@ -191,20 +191,20 @@ - - - - @@ -214,7 +214,7 @@