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