diff --git a/Avalonia.sln b/Avalonia.sln index 0d9e521486..fff9f40ae3 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -86,8 +86,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.Android", "s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia", "src\Skia\Avalonia.Skia\Avalonia.Skia.csproj", "{7D2D3083-71DD-4CC9-8907-39A0D86FB322}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.NetCore", "samples\ControlCatalog.NetCore\ControlCatalog.NetCore.csproj", "{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1-27F5-4255-9AFC-04ABFD11683A}" ProjectSection(SolutionItems) = preProject build\AvaloniaPublicKey.props = build\AvaloniaPublicKey.props @@ -415,10 +413,6 @@ Global {7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Release|Any CPU.Build.0 = Release|Any CPU - {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Any CPU.Build.0 = Release|Any CPU {854568D5-13D1-4B4F-B50D-534DC7EFD3C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {854568D5-13D1-4B4F-B50D-534DC7EFD3C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {854568D5-13D1-4B4F-B50D-534DC7EFD3C9}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -714,7 +708,6 @@ Global {F1FDC5B0-4654-416F-AE69-E3E9BBD87801} = {9B9E3891-2366-4253-A952-D08BCEB71098} {29132311-1848-4FD6-AE0C-4FF841151BD3} = {9B9E3891-2366-4253-A952-D08BCEB71098} {7D2D3083-71DD-4CC9-8907-39A0D86FB322} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E} - {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3} = {9B9E3891-2366-4253-A952-D08BCEB71098} {854568D5-13D1-4B4F-B50D-534DC7EFD3C9} = {86C53C40-57AA-45B8-AD42-FAE0EFDF0F2B} {CBC4FF2F-92D4-420B-BE21-9FE0B930B04E} = {B39A8919-9F95-48FE-AD7B-76E08B509888} {E1582370-37B3-403C-917F-8209551B1634} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} diff --git a/Directory.Build.props b/Directory.Build.props index c6ed387d66..4498f87dab 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ $(MSBuildThisFileDirectory)build-intermediate/nuget - $(MSBuildThisFileDirectory)\src\tools\Avalonia.Designer.HostApp\bin\$(Configuration)\netstandard2.0\Avalonia.Designer.HostApp.dll + $(MSBuildThisFileDirectory)\src\tools\Avalonia.Designer.HostApp\bin\$(Configuration)\$(AvsCurrentTargetFramework)\Avalonia.Designer.HostApp.dll false False diff --git a/dirs.proj b/dirs.proj index dcefb46085..084fd30475 100644 --- a/dirs.proj +++ b/dirs.proj @@ -14,7 +14,6 @@ - diff --git a/packages/Avalonia/Avalonia.csproj b/packages/Avalonia/Avalonia.csproj index 44887bcefc..1cd1245d3f 100644 --- a/packages/Avalonia/Avalonia.csproj +++ b/packages/Avalonia/Avalonia.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0 + $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks) Avalonia @@ -27,13 +27,13 @@ - <_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/netstandard2.0/Avalonia.Designer.HostApp.dll"> - tools/netstandard2.0/designer + <_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/$(AvsCurrentTargetFramework)/Avalonia.Designer.HostApp.dll"> + tools/$(AvsCurrentTargetFramework)/designer false None - <_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/net461/Avalonia.Designer.HostApp.exe"> - tools/net461/designer + <_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/$(AvsLegacyTargetFrameworks)/Avalonia.Designer.HostApp.dll"> + tools/$(AvsLegacyTargetFrameworks)/designer false None diff --git a/packages/Avalonia/Avalonia.props b/packages/Avalonia/Avalonia.props index 50071bb01a..78656a1726 100644 --- a/packages/Avalonia/Avalonia.props +++ b/packages/Avalonia/Avalonia.props @@ -1,7 +1,6 @@ - $(MSBuildThisFileDirectory)\..\tools\netstandard2.0\designer\Avalonia.Designer.HostApp.dll - $(MSBuildThisFileDirectory)\..\tools\net461\designer\Avalonia.Designer.HostApp.exe + $(MSBuildThisFileDirectory)\..\tools\$(AvsCurrentTargetFramework)\designer\Avalonia.Designer.HostApp.dll $(MSBuildThisFileDirectory)\..\tools\netstandard2.0\Avalonia.Build.Tasks.dll $(UsedAvaloniaProducts);AvaloniaUI true diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj index 2c47effa38..9398987837 100644 --- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj +++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj @@ -1,22 +1,41 @@  - Exe - net461 - x64 + WinExe + $(AvsCurrentTargetFramework) + true true - ../ControlCatalog.NetCore/app.manifest - - + + + + + + + + PreserveNewest + - + + + + + + + + + + + en + app.manifest + + - + diff --git a/samples/ControlCatalog.NetCore/NativeControls/Gtk/EmbedSample.Gtk.cs b/samples/ControlCatalog.Desktop/NativeControls/Gtk/EmbedSample.Gtk.cs similarity index 96% rename from samples/ControlCatalog.NetCore/NativeControls/Gtk/EmbedSample.Gtk.cs rename to samples/ControlCatalog.Desktop/NativeControls/Gtk/EmbedSample.Gtk.cs index 81a5ba536f..c42ac73b88 100644 --- a/samples/ControlCatalog.NetCore/NativeControls/Gtk/EmbedSample.Gtk.cs +++ b/samples/ControlCatalog.Desktop/NativeControls/Gtk/EmbedSample.Gtk.cs @@ -5,7 +5,7 @@ using Avalonia.Controls.Platform; using System; using ControlCatalog.Pages; -namespace ControlCatalog.NetCore; +namespace ControlCatalog.Desktop; public class EmbedSampleGtk : INativeDemoControl { diff --git a/samples/ControlCatalog.NetCore/NativeControls/Gtk/GtkHelper.cs b/samples/ControlCatalog.Desktop/NativeControls/Gtk/GtkHelper.cs similarity index 97% rename from samples/ControlCatalog.NetCore/NativeControls/Gtk/GtkHelper.cs rename to samples/ControlCatalog.Desktop/NativeControls/Gtk/GtkHelper.cs index 9d698716ee..78d7a45154 100644 --- a/samples/ControlCatalog.NetCore/NativeControls/Gtk/GtkHelper.cs +++ b/samples/ControlCatalog.Desktop/NativeControls/Gtk/GtkHelper.cs @@ -7,7 +7,7 @@ using Avalonia.X11.NativeDialogs; using static Avalonia.X11.NativeDialogs.Gtk; using static Avalonia.X11.Interop.Glib; -namespace ControlCatalog.NetCore; +namespace ControlCatalog.Desktop; internal class GtkHelper { diff --git a/samples/ControlCatalog.NetCore/NativeControls/Gtk/nodes-license.md b/samples/ControlCatalog.Desktop/NativeControls/Gtk/nodes-license.md similarity index 100% rename from samples/ControlCatalog.NetCore/NativeControls/Gtk/nodes-license.md rename to samples/ControlCatalog.Desktop/NativeControls/Gtk/nodes-license.md diff --git a/samples/ControlCatalog.NetCore/NativeControls/Gtk/nodes.mp4 b/samples/ControlCatalog.Desktop/NativeControls/Gtk/nodes.mp4 similarity index 100% rename from samples/ControlCatalog.NetCore/NativeControls/Gtk/nodes.mp4 rename to samples/ControlCatalog.Desktop/NativeControls/Gtk/nodes.mp4 diff --git a/samples/ControlCatalog.NetCore/NativeControls/Mac/EmbedSample.Mac.cs b/samples/ControlCatalog.Desktop/NativeControls/Mac/EmbedSample.Mac.cs similarity index 95% rename from samples/ControlCatalog.NetCore/NativeControls/Mac/EmbedSample.Mac.cs rename to samples/ControlCatalog.Desktop/NativeControls/Mac/EmbedSample.Mac.cs index 7967c9c073..b761ce0972 100644 --- a/samples/ControlCatalog.NetCore/NativeControls/Mac/EmbedSample.Mac.cs +++ b/samples/ControlCatalog.Desktop/NativeControls/Mac/EmbedSample.Mac.cs @@ -8,7 +8,7 @@ using ControlCatalog.Pages; using MonoMac.Foundation; using MonoMac.WebKit; -namespace ControlCatalog.NetCore; +namespace ControlCatalog.Desktop; public class EmbedSampleMac : INativeDemoControl { diff --git a/samples/ControlCatalog.NetCore/NativeControls/Mac/MacHelper.cs b/samples/ControlCatalog.Desktop/NativeControls/Mac/MacHelper.cs similarity index 95% rename from samples/ControlCatalog.NetCore/NativeControls/Mac/MacHelper.cs rename to samples/ControlCatalog.Desktop/NativeControls/Mac/MacHelper.cs index 5b3bc9abf1..154878e4ff 100644 --- a/samples/ControlCatalog.NetCore/NativeControls/Mac/MacHelper.cs +++ b/samples/ControlCatalog.Desktop/NativeControls/Mac/MacHelper.cs @@ -3,7 +3,7 @@ using System; using Avalonia.Controls.Platform; using MonoMac.AppKit; -namespace ControlCatalog.NetCore; +namespace ControlCatalog.Desktop; internal class MacHelper { diff --git a/samples/ControlCatalog.NetCore/NativeControls/Win/EmbedSample.Win.cs b/samples/ControlCatalog.Desktop/NativeControls/Win/EmbedSample.Win.cs similarity index 98% rename from samples/ControlCatalog.NetCore/NativeControls/Win/EmbedSample.Win.cs rename to samples/ControlCatalog.Desktop/NativeControls/Win/EmbedSample.Win.cs index 77982db0ca..c529c093f6 100644 --- a/samples/ControlCatalog.NetCore/NativeControls/Win/EmbedSample.Win.cs +++ b/samples/ControlCatalog.Desktop/NativeControls/Win/EmbedSample.Win.cs @@ -6,7 +6,7 @@ using Avalonia.Platform; using ControlCatalog.Pages; -namespace ControlCatalog.NetCore; +namespace ControlCatalog.Desktop; public class EmbedSampleWin : INativeDemoControl { diff --git a/samples/ControlCatalog.NetCore/NativeControls/Win/WinApi.cs b/samples/ControlCatalog.Desktop/NativeControls/Win/WinApi.cs similarity index 98% rename from samples/ControlCatalog.NetCore/NativeControls/Win/WinApi.cs rename to samples/ControlCatalog.Desktop/NativeControls/Win/WinApi.cs index bd0c1bf98e..1bb3879ac3 100644 --- a/samples/ControlCatalog.NetCore/NativeControls/Win/WinApi.cs +++ b/samples/ControlCatalog.Desktop/NativeControls/Win/WinApi.cs @@ -1,7 +1,7 @@ using System; using System.Runtime.InteropServices; -namespace ControlCatalog.NetCore; +namespace ControlCatalog.Desktop; internal unsafe class WinApi { diff --git a/samples/ControlCatalog.Desktop/Program.cs b/samples/ControlCatalog.Desktop/Program.cs index 533ee8308a..707ead5f1d 100644 --- a/samples/ControlCatalog.Desktop/Program.cs +++ b/samples/ControlCatalog.Desktop/Program.cs @@ -1,38 +1,180 @@ using System; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; using Avalonia; -using Avalonia.Platform; -using ControlCatalog.NetCore; +using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Fonts.Inter; +using Avalonia.Headless; +using Avalonia.LinuxFramebuffer.Output; +using Avalonia.LogicalTree; +using Avalonia.Rendering.Composition; +using Avalonia.Threading; +using Avalonia.Vulkan; using ControlCatalog.Pages; -namespace ControlCatalog +namespace ControlCatalog.Desktop { - internal class Program + static class Program { + private static bool s_useFramebuffer; + [STAThread] - public static int Main(string[] args) - => BuildAvaloniaApp().StartWithClassicDesktopLifetime(args); + static int Main(string[] args) + { + if (args.Contains("--fbdev")) + { + s_useFramebuffer = true; + } + + if (args.Contains("--wait-for-attach")) + { + Console.WriteLine("Attach debugger and use 'Set next statement'"); + while (true) + { + Thread.Sleep(100); + if (Debugger.IsAttached) + break; + } + } + + var builder = BuildAvaloniaApp(); + + double GetScaling() + { + var idx = Array.IndexOf(args, "--scaling"); + if (idx != 0 && args.Length > idx + 1 && + double.TryParse(args[idx + 1], NumberStyles.Any, CultureInfo.InvariantCulture, out var scaling)) + return scaling; + return 1; + } + if (s_useFramebuffer) + { + SilenceConsole(); + return builder.StartLinuxFbDev(args, new FbDevOutputOptions() + { + Scaling = GetScaling() + }); + } + else if (args.Contains("--vnc")) + { + return builder.StartWithHeadlessVncPlatform(null, 5901, args, ShutdownMode.OnMainWindowClose); + } + else if (args.Contains("--full-headless")) + { + return builder + .UseHeadless(new AvaloniaHeadlessPlatformOptions + { + UseHeadlessDrawing = true + }) + .AfterSetup(_ => + { + DispatcherTimer.RunOnce(async () => + { + var window = ((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime) + .MainWindow; + var tc = window.GetLogicalDescendants().OfType().First(); + foreach (var page in tc.Items.Cast().ToList()) + { + if (page.Header.ToString() == "DatePicker" || page.Header.ToString() == "TreeView") + continue; + Console.WriteLine("Selecting " + page.Header); + tc.SelectedItem = page; + await Task.Delay(50); + } + Console.WriteLine("Selecting the first page"); + tc.SelectedItem = tc.Items.OfType().First(); + await Task.Delay(500); + Console.WriteLine("Clicked through all pages, triggering GC"); + for (var c = 0; c < 3; c++) + { + GC.Collect(2, GCCollectionMode.Forced); + await Task.Delay(50); + } + + void FormatMem(string metric, long bytes) + { + Console.WriteLine(metric + ": " + bytes / 1024 / 1024 + "MB"); + } + + FormatMem("GC allocated bytes", GC.GetTotalMemory(true)); + FormatMem("WorkingSet64", Process.GetCurrentProcess().WorkingSet64); + }, TimeSpan.FromSeconds(1)); + }) + .StartWithClassicDesktopLifetime(args); + } + else if (args.Contains("--drm")) + { + SilenceConsole(); + return builder.StartLinuxDrm(args, scaling: GetScaling()); + } + else if (args.Contains("--dxgi")) + { + builder.With(new Win32PlatformOptions() + { + CompositionMode = new [] { Win32CompositionMode.LowLatencyDxgiSwapChain } + }); + return builder.StartWithClassicDesktopLifetime(args); + } + else + return builder.StartWithClassicDesktopLifetime(args); + } /// /// This method is needed for IDE previewer infrastructure /// public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure() - .LogToTrace() + .UsePlatformDetect() + .With(new X11PlatformOptions + { + EnableMultiTouch = true, + UseDBusMenu = true, + EnableIme = true, + }) + + .With(new VulkanOptions + { + VulkanInstanceCreationOptions = new () + { + UseDebug = true + } + }) + .With(new CompositionOptions() + { + UseRegionDirtyRectClipping = true + }) + .UseSkia() + .WithInterFont() .AfterSetup(builder => { - builder.Instance!.AttachDevTools(new Avalonia.Diagnostics.DevToolsOptions() + if (!s_useFramebuffer) { - StartupScreenIndex = 1, - }); + builder.Instance!.AttachDevTools(new Avalonia.Diagnostics.DevToolsOptions() + { + StartupScreenIndex = 1, + }); + } - EmbedSample.Implementation = new EmbedSampleWin(); + EmbedSample.Implementation = OperatingSystem.IsWindows() ? (INativeDemoControl)new EmbedSampleWin() + : OperatingSystem.IsMacOS() ? new EmbedSampleMac() + : OperatingSystem.IsLinux() ? new EmbedSampleGtk() + : null; }) - .UseWin32() - .UseSkia(); + .LogToTrace(); - private static void ConfigureAssetAssembly(AppBuilder builder) + static void SilenceConsole() { - AssetLoader.SetDefaultAssembly(typeof(App).Assembly); + new Thread(() => + { + Console.CursorVisible = false; + while (true) + Console.ReadKey(true); + }) + { IsBackground = true }.Start(); } } } diff --git a/samples/ControlCatalog.NetCore/Properties/launchSettings.json b/samples/ControlCatalog.Desktop/Properties/launchSettings.json similarity index 87% rename from samples/ControlCatalog.NetCore/Properties/launchSettings.json rename to samples/ControlCatalog.Desktop/Properties/launchSettings.json index 11feb94bb3..d57a2680e4 100644 --- a/samples/ControlCatalog.NetCore/Properties/launchSettings.json +++ b/samples/ControlCatalog.Desktop/Properties/launchSettings.json @@ -1,6 +1,6 @@ { "profiles": { - "ControlCatalog.NetCore": { + "ControlCatalog.Desktop": { "commandName": "Project" }, "Dxgi": { diff --git a/samples/ControlCatalog.NetCore/app.manifest b/samples/ControlCatalog.Desktop/app.manifest similarity index 100% rename from samples/ControlCatalog.NetCore/app.manifest rename to samples/ControlCatalog.Desktop/app.manifest diff --git a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj deleted file mode 100644 index 9398987837..0000000000 --- a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - WinExe - $(AvsCurrentTargetFramework) - true - true - - - - - - - - - - - PreserveNewest - - - - - - - - - - - - - - - - - en - app.manifest - - - - - diff --git a/samples/ControlCatalog.NetCore/Program.cs b/samples/ControlCatalog.NetCore/Program.cs deleted file mode 100644 index 036dd13f7a..0000000000 --- a/samples/ControlCatalog.NetCore/Program.cs +++ /dev/null @@ -1,180 +0,0 @@ -using System; -using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Fonts.Inter; -using Avalonia.Headless; -using Avalonia.LinuxFramebuffer.Output; -using Avalonia.LogicalTree; -using Avalonia.Rendering.Composition; -using Avalonia.Threading; -using Avalonia.Vulkan; -using ControlCatalog.Pages; - -namespace ControlCatalog.NetCore -{ - static class Program - { - private static bool s_useFramebuffer; - - [STAThread] - static int Main(string[] args) - { - if (args.Contains("--fbdev")) - { - s_useFramebuffer = true; - } - - if (args.Contains("--wait-for-attach")) - { - Console.WriteLine("Attach debugger and use 'Set next statement'"); - while (true) - { - Thread.Sleep(100); - if (Debugger.IsAttached) - break; - } - } - - var builder = BuildAvaloniaApp(); - - double GetScaling() - { - var idx = Array.IndexOf(args, "--scaling"); - if (idx != 0 && args.Length > idx + 1 && - double.TryParse(args[idx + 1], NumberStyles.Any, CultureInfo.InvariantCulture, out var scaling)) - return scaling; - return 1; - } - if (s_useFramebuffer) - { - SilenceConsole(); - return builder.StartLinuxFbDev(args, new FbDevOutputOptions() - { - Scaling = GetScaling() - }); - } - else if (args.Contains("--vnc")) - { - return builder.StartWithHeadlessVncPlatform(null, 5901, args, ShutdownMode.OnMainWindowClose); - } - else if (args.Contains("--full-headless")) - { - return builder - .UseHeadless(new AvaloniaHeadlessPlatformOptions - { - UseHeadlessDrawing = true - }) - .AfterSetup(_ => - { - DispatcherTimer.RunOnce(async () => - { - var window = ((IClassicDesktopStyleApplicationLifetime)Application.Current.ApplicationLifetime) - .MainWindow; - var tc = window.GetLogicalDescendants().OfType().First(); - foreach (var page in tc.Items.Cast().ToList()) - { - if (page.Header.ToString() == "DatePicker" || page.Header.ToString() == "TreeView") - continue; - Console.WriteLine("Selecting " + page.Header); - tc.SelectedItem = page; - await Task.Delay(50); - } - Console.WriteLine("Selecting the first page"); - tc.SelectedItem = tc.Items.OfType().First(); - await Task.Delay(500); - Console.WriteLine("Clicked through all pages, triggering GC"); - for (var c = 0; c < 3; c++) - { - GC.Collect(2, GCCollectionMode.Forced); - await Task.Delay(50); - } - - void FormatMem(string metric, long bytes) - { - Console.WriteLine(metric + ": " + bytes / 1024 / 1024 + "MB"); - } - - FormatMem("GC allocated bytes", GC.GetTotalMemory(true)); - FormatMem("WorkingSet64", Process.GetCurrentProcess().WorkingSet64); - }, TimeSpan.FromSeconds(1)); - }) - .StartWithClassicDesktopLifetime(args); - } - else if (args.Contains("--drm")) - { - SilenceConsole(); - return builder.StartLinuxDrm(args, scaling: GetScaling()); - } - else if (args.Contains("--dxgi")) - { - builder.With(new Win32PlatformOptions() - { - CompositionMode = new [] { Win32CompositionMode.LowLatencyDxgiSwapChain } - }); - return builder.StartWithClassicDesktopLifetime(args); - } - else - return builder.StartWithClassicDesktopLifetime(args); - } - - /// - /// This method is needed for IDE previewer infrastructure - /// - public static AppBuilder BuildAvaloniaApp() - => AppBuilder.Configure() - .UsePlatformDetect() - .With(new X11PlatformOptions - { - EnableMultiTouch = true, - UseDBusMenu = true, - EnableIme = true, - }) - - .With(new VulkanOptions - { - VulkanInstanceCreationOptions = new () - { - UseDebug = true - } - }) - .With(new CompositionOptions() - { - UseRegionDirtyRectClipping = true - }) - .UseSkia() - .WithInterFont() - .AfterSetup(builder => - { - if (!s_useFramebuffer) - { - builder.Instance!.AttachDevTools(new Avalonia.Diagnostics.DevToolsOptions() - { - StartupScreenIndex = 1, - }); - } - - EmbedSample.Implementation = OperatingSystem.IsWindows() ? (INativeDemoControl)new EmbedSampleWin() - : OperatingSystem.IsMacOS() ? new EmbedSampleMac() - : OperatingSystem.IsLinux() ? new EmbedSampleGtk() - : null; - }) - .LogToTrace(); - - static void SilenceConsole() - { - new Thread(() => - { - Console.CursorVisible = false; - while (true) - Console.ReadKey(true); - }) - { IsBackground = true }.Start(); - } - } -} diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj index 7bbff55907..81caa6b2e4 100644 --- a/samples/ControlCatalog/ControlCatalog.csproj +++ b/samples/ControlCatalog/ControlCatalog.csproj @@ -1,6 +1,6 @@  - netstandard2.0;$(AvsCurrentTargetFramework) + $(AvsCurrentTargetFramework) true enable true diff --git a/samples/Directory.Build.props b/samples/Directory.Build.props index 169239237f..9814914977 100644 --- a/samples/Directory.Build.props +++ b/samples/Directory.Build.props @@ -2,7 +2,7 @@ false - $(MSBuildThisFileDirectory)..\src\tools\Avalonia.Designer.HostApp\bin\Debug\netstandard2.0\Avalonia.Designer.HostApp.dll + $(MSBuildThisFileDirectory)..\src\tools\Avalonia.Designer.HostApp\bin\Debug\$(AvsCurrentTargetFramework)\Avalonia.Designer.HostApp.dll false 14.0 $(NoWarn);CS8002 diff --git a/samples/MiniMvvm/MiniMvvm.csproj b/samples/MiniMvvm/MiniMvvm.csproj index 1f3869a2b5..9e3b13c471 100644 --- a/samples/MiniMvvm/MiniMvvm.csproj +++ b/samples/MiniMvvm/MiniMvvm.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + $(AvsCurrentTargetFramework) enable diff --git a/samples/SampleControls/ControlSamples.csproj b/samples/SampleControls/ControlSamples.csproj index 99ac655584..405175d01c 100644 --- a/samples/SampleControls/ControlSamples.csproj +++ b/samples/SampleControls/ControlSamples.csproj @@ -1,7 +1,7 @@  - netstandard2.0 + $(AvsCurrentTargetFramework) enable diff --git a/samples/XEmbedSample/XEmbedSample.csproj b/samples/XEmbedSample/XEmbedSample.csproj index a6e754692d..89bbf13273 100644 --- a/samples/XEmbedSample/XEmbedSample.csproj +++ b/samples/XEmbedSample/XEmbedSample.csproj @@ -7,6 +7,13 @@ enable true + + Exe + $(AvsCurrentTargetFramework) + enable + enable + true + diff --git a/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj b/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj index 533aacf382..5cb227f9cb 100644 --- a/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj +++ b/samples/interop/WindowsInteropTest/WindowsInteropTest.csproj @@ -1,7 +1,7 @@  WinExe - net461;$(AvsCurrentWindowsTargetFramework) + $(AvsCurrentWindowsTargetFramework) true true true diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 485a825017..7efb8409af 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0 + $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks) Avalonia True true diff --git a/src/Avalonia.Base/Rendering/Composition/CompositionObject.cs b/src/Avalonia.Base/Rendering/Composition/CompositionObject.cs index 9392c6a617..708cb49128 100644 --- a/src/Avalonia.Base/Rendering/Composition/CompositionObject.cs +++ b/src/Avalonia.Base/Rendering/Composition/CompositionObject.cs @@ -65,6 +65,18 @@ namespace Avalonia.Rendering.Composition throw new ArgumentException("Unknown property " + propertyName); } + /// Disconnects an animation from the specified property and stops the animation. + /// The name of the property to disconnect the animation from. + public void StopAnimation(string propertyName) + { + if (propertyName is null) + throw new ArgumentNullException(nameof(propertyName)); + if (Server is not ServerObject srv) + return; + var prop = srv.GetCompositionProperty(propertyName) ?? throw new ArgumentException("Unknown property " + propertyName); + srv.Animations?.RemoveAnimationForProperty(prop); + } + /// /// Starts an animation group. /// The StartAnimationGroup method on CompositionObject lets you start CompositionAnimationGroup. @@ -126,6 +138,27 @@ namespace Avalonia.Rendering.Composition throw new ArgumentException(); } + /// Stops an animation group. + /// The animation group to stop. + public void StopAnimationGroup(ICompositionAnimationBase grp) + { + if (grp is CompositionAnimation animation) + { + if (animation.Target == null) + throw new ArgumentException("Animation Target can't be null"); + StopAnimation(animation.Target); + } + else if (grp is CompositionAnimationGroup group) + { + foreach (var a in group.Animations) + { + if (a.Target == null) + throw new ArgumentException("Animation Target can't be null"); + StopAnimation(a.Target); + } + } + } + protected void RegisterForSerialization() { if (Server == null) diff --git a/src/Avalonia.Controls.ColorPicker/Avalonia.Controls.ColorPicker.csproj b/src/Avalonia.Controls.ColorPicker/Avalonia.Controls.ColorPicker.csproj index db7bc33232..473190fe59 100644 --- a/src/Avalonia.Controls.ColorPicker/Avalonia.Controls.ColorPicker.csproj +++ b/src/Avalonia.Controls.ColorPicker/Avalonia.Controls.ColorPicker.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0 + $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks) true diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index 09e9455082..a650c8a0e1 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0 + $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks) diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index 47ccd7af39..b7b4ec4d8c 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0 + $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks) diff --git a/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj b/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj index 0e5e4f70a7..c1819c2e88 100644 --- a/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj +++ b/src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj @@ -1,7 +1,7 @@  Exe - net461;netstandard2.0;$(AvsCurrentTargetFramework) + $(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks) $(DefineConstants);XAMLX_INTERNAL false diff --git a/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj b/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj index 7182b0d0f7..c6b95bb26c 100644 --- a/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj +++ b/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj @@ -1,7 +1,7 @@  - net472 + $(AvsCurrentTargetFramework);net481 false Library false @@ -15,10 +15,10 @@ - + Always - + Always @@ -33,7 +33,7 @@ diff --git a/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs b/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs index 09bd74bf41..a82cdfa8b7 100644 --- a/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs +++ b/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs @@ -19,7 +19,7 @@ namespace Avalonia.DesignerSupport.Tests { public class DesignerSupportTests { - private const string DesignerAppPath = "../../../../../src/tools/Avalonia.Designer.HostApp/bin/$BUILD/netstandard2.0/Avalonia.Designer.HostApp.dll"; + private const string DesignerAppPath = "../../../../../src/tools/Avalonia.Designer.HostApp/bin/$BUILD/$TFM/Avalonia.Designer.HostApp.dll"; private readonly Xunit.Abstractions.ITestOutputHelper outputHelper; public DesignerSupportTests(Xunit.Abstractions.ITestOutputHelper outputHelper) @@ -29,26 +29,26 @@ namespace Avalonia.DesignerSupport.Tests [SkippableTheory, InlineData( - @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/net10.0/", + @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/$TFM/", "Avalonia.DesignerSupport.TestApp", "Avalonia.DesignerSupport.TestApp.dll", @"..\..\..\..\..\tests\Avalonia.DesignerSupport.TestApp\MainWindow.xaml", "win32"), InlineData( - @"..\..\..\..\..\samples\ControlCatalog.NetCore\bin\$BUILD\net10.0\", - "ControlCatalog.NetCore", + @"..\..\..\..\..\samples\ControlCatalog.Desktop\bin\$BUILD\$TFM\", + "ControlCatalog.Desktop", "ControlCatalog.dll", @"..\..\..\..\..\samples\ControlCatalog\MainWindow.xaml", "win32"), InlineData( - @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/net10.0/", + @"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/$TFM/", "Avalonia.DesignerSupport.TestApp", "Avalonia.DesignerSupport.TestApp.dll", @"..\..\..\..\..\tests\Avalonia.DesignerSupport.TestApp\MainWindow.xaml", "avalonia-remote"), InlineData( - @"..\..\..\..\..\samples\ControlCatalog.NetCore\bin\$BUILD\net10.0\", - "ControlCatalog.NetCore", + @"..\..\..\..\..\samples\ControlCatalog.Desktop\bin\$BUILD\$TFM\", + "ControlCatalog.Desktop", "ControlCatalog.dll", @"..\..\..\..\..\samples\ControlCatalog\MainWindow.xaml", "avalonia-remote")] @@ -72,7 +72,9 @@ namespace Avalonia.DesignerSupport.Tests #else buildType = "Release"; #endif - outputDir = outputDir.Replace("$BUILD", buildType); + var tfm = $"net{Environment.Version.ToString(2)}"; + + outputDir = outputDir.Replace("$BUILD", buildType).Replace("$TFM", tfm); var assemblyPath = Path.Combine(outputDir, assemblyName); Assert.True(File.Exists(assemblyPath), "File.Exists(assemblyPath)"); @@ -133,7 +135,7 @@ namespace Avalonia.DesignerSupport.Tests var cmdline = $"exec --runtimeconfig \"{outputDir}{executableName}.runtimeconfig.json\" --depsfile \"{outputDir}{executableName}.deps.json\" " - + $" \"{DesignerAppPath.Replace("$BUILD", buildType)}\" " + + $" \"{DesignerAppPath.Replace("$BUILD", buildType).Replace("$TFM", tfm)}\" " + $"--transport tcp-bson://127.0.0.1:{port}/ --session-id {sessionId} --method {method} \"{outputDir}{executableName}.dll\""; using (var proc = new Process diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj index ca5e262c10..660e264a8b 100644 --- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj +++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework) + $(AvsCurrentTargetFramework) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj index 86da81bb00..e6336f5432 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);net481 + $(AvsCurrentTargetFramework) Library true diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj index eaf09b3e63..abec9f0e8f 100644 --- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj +++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj @@ -1,6 +1,6 @@  - $(AvsCurrentTargetFramework);net481 + $(AvsCurrentTargetFramework) false Library false diff --git a/tests/TestFiles/BuildTasks/PInvoke/PInvoke.csproj b/tests/TestFiles/BuildTasks/PInvoke/PInvoke.csproj index 86ad76129b..4f42380393 100644 --- a/tests/TestFiles/BuildTasks/PInvoke/PInvoke.csproj +++ b/tests/TestFiles/BuildTasks/PInvoke/PInvoke.csproj @@ -2,7 +2,7 @@ WinExe - $(AvsCurrentTargetFramework);netstandard2.0 + $(AvsCurrentTargetFramework) true true