diff --git a/.gitignore b/.gitignore
index a9a8fd36b4..583a2b8a2b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -176,5 +176,9 @@ nuget
Avalonia.XBuild.sln
project.lock.json
.idea/*
-**/obj-Skia/*
-**/obj-Direct2D1/*
+
+
+##################
+## BenchmarkDotNet
+##################
+BenchmarkDotNet.Artifacts/
diff --git a/.ncrunch/Avalonia.Designer.HostApp.NetFX.v3.ncrunchproject b/.ncrunch/Avalonia.Designer.HostApp.NetFX.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/Avalonia.Designer.HostApp.NetFX.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/BindingDemo.net461.v3.ncrunchproject b/.ncrunch/BindingDemo.net461.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/BindingDemo.net461.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/BindingDemo.netcoreapp2.0.v3.ncrunchproject b/.ncrunch/BindingDemo.netcoreapp2.0.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/BindingDemo.netcoreapp2.0.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/Previewer.v3.ncrunchproject b/.ncrunch/Previewer.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/Previewer.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/RemoteDemo.v3.ncrunchproject b/.ncrunch/RemoteDemo.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/RemoteDemo.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/RenderDemo.net461.v3.ncrunchproject b/.ncrunch/RenderDemo.net461.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/RenderDemo.net461.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/RenderDemo.netcoreapp2.0.v3.ncrunchproject b/.ncrunch/RenderDemo.netcoreapp2.0.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/RenderDemo.netcoreapp2.0.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/VirtualizationDemo.net461.v3.ncrunchproject b/.ncrunch/VirtualizationDemo.net461.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/VirtualizationDemo.net461.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/.ncrunch/VirtualizationDemo.netcoreapp2.0.v3.ncrunchproject b/.ncrunch/VirtualizationDemo.netcoreapp2.0.v3.ncrunchproject
new file mode 100644
index 0000000000..319cd523ce
--- /dev/null
+++ b/.ncrunch/VirtualizationDemo.netcoreapp2.0.v3.ncrunchproject
@@ -0,0 +1,5 @@
+
+
+ True
+
+
\ No newline at end of file
diff --git a/Avalonia.sln b/Avalonia.sln
index 54f6f5e7e7..75bca0bca8 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -71,7 +71,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Markup", "src\Mark
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Markup.UnitTests", "tests\Avalonia.Markup.UnitTests\Avalonia.Markup.UnitTests.csproj", "{8EF392D5-1416-45AA-9956-7CBBC3229E8A}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BindingTest", "samples\BindingTest\BindingTest.csproj", "{08B3E6B9-1CD5-443C-9F61-6D49D1C5F162}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BindingDemo", "samples\BindingDemo\BindingDemo.csproj", "{08B3E6B9-1CD5-443C-9F61-6D49D1C5F162}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "RenderHelpers", "src\Shared\RenderHelpers\RenderHelpers.shproj", "{3C4C0CB4-0C0F-4450-A37B-148C84FF905F}"
EndProject
@@ -109,7 +109,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DesignerSupport.Te
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DesignerSupport.TestApp", "tests\Avalonia.DesignerSupport.TestApp\Avalonia.DesignerSupport.TestApp.csproj", "{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VirtualizationTest", "samples\VirtualizationTest\VirtualizationTest.csproj", "{FBCAF3D0-2808-4934-8E96-3F607594517B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VirtualizationDemo", "samples\VirtualizationDemo\VirtualizationDemo.csproj", "{FBCAF3D0-2808-4934-8E96-3F607594517B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Interop", "Interop", "{A0CC0258-D18C-4AB3-854F-7101680FC3F9}"
EndProject
@@ -117,7 +117,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInteropTest", "sampl
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DotNetFrameworkRuntime", "src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj", "{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RenderTest", "samples\RenderTest\RenderTest.csproj", "{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RenderDemo", "samples\RenderDemo\RenderDemo.csproj", "{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Android", "samples\ControlCatalog.Android\ControlCatalog.Android.csproj", "{29132311-1848-4FD6-AE0C-4FF841151BD3}"
EndProject
@@ -141,6 +141,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1
build\Microsoft.Reactive.Testing.props = build\Microsoft.Reactive.Testing.props
build\Moq.props = build\Moq.props
build\NetCore.props = build\NetCore.props
+ build\NetFX.props = build\NetFX.props
build\ReactiveUI.props = build\ReactiveUI.props
build\Rx.props = build\Rx.props
build\SampleApp.props = build\SampleApp.props
@@ -169,7 +170,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.RenderTests",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Remote.Protocol", "src\Avalonia.Remote.Protocol\Avalonia.Remote.Protocol.csproj", "{D78A720C-C0C6-478B-8564-F167F9BDD01B}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RemoteTest", "samples\RemoteTest\RemoteTest.csproj", "{E2999E4A-9086-401F-898C-AEB0AD38E676}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RemoteDemo", "samples\RemoteDemo\RemoteDemo.csproj", "{E2999E4A-9086-401F-898C-AEB0AD38E676}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{4ED8B739-6F4E-4CD4-B993-545E6B5CE637}"
EndProject
@@ -183,6 +184,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.MonoMac", "src\OSX
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Designer.HostApp.NetFX", "src\tools\Avalonia.Designer.HostApp.NetFX\Avalonia.Designer.HostApp.NetFX.csproj", "{4ADA61C8-D191-428D-9066-EF4F0D86520F}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.UnitTests", "tests\Avalonia.Skia.UnitTests\Avalonia.Skia.UnitTests.csproj", "{E1240B49-7B4B-4371-A00E-068778C5CF0B}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
@@ -395,6 +398,7 @@ Global
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|x86.ActiveCfg = Debug|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|x86.Build.0 = Debug|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -404,6 +408,7 @@ Global
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+ {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|NetCoreOnly.Build.0 = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.ActiveCfg = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.Build.0 = Release|Any CPU
{62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
@@ -2468,6 +2473,46 @@ Global
{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|x86.ActiveCfg = Release|Any CPU
{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|x86.Build.0 = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|NetCoreOnly.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|NetCoreOnly.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.AppStore|x86.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Debug|x86.Build.0 = Debug|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhone.Build.0 = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|NetCoreOnly.Build.0 = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|x86.ActiveCfg = Release|Any CPU
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -2520,6 +2565,7 @@ Global
{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{CBFD5788-567D-401B-9DFA-74E4224025A0} = {A59C4C0A-64DF-4621-B450-2BA00D6F61E2}
{4ADA61C8-D191-428D-9066-EF4F0D86520F} = {4ED8B739-6F4E-4CD4-B993-545E6B5CE637}
+ {E1240B49-7B4B-4371-A00E-068778C5CF0B} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}
diff --git a/build.cake b/build.cake
index bf3ae41b58..78c166a3bc 100644
--- a/build.cake
+++ b/build.cake
@@ -6,6 +6,7 @@
#addin "nuget:?package=NuGet.Core&version=2.14.0"
#tool "nuget:?package=NuGet.CommandLine&version=4.3.0"
#tool "nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2017.1.20170613.162720"
+
///////////////////////////////////////////////////////////////////////////////
// TOOLS
///////////////////////////////////////////////////////////////////////////////
@@ -98,7 +99,7 @@ Teardown((context, buildContext) =>
// TASKS
///////////////////////////////////////////////////////////////////////////////
-Task("Clean")
+Task("Clean-Impl")
.Does(data =>
{
CleanDirectories(data.Parameters.BuildDirs);
@@ -108,9 +109,9 @@ Task("Clean")
CleanDirectory(data.Parameters.BinRoot);
});
-Task("Restore-NuGet-Packages")
- .IsDependentOn("Clean")
+Task("Restore-NuGet-Packages-Impl")
.WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
+ .WithCriteria((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
.Does(data =>
{
var maxRetryCount = 5;
@@ -148,11 +149,10 @@ void DotNetCoreBuild(Parameters parameters)
DotNetCoreBuild(parameters.MSBuildSolution, settings);
}
-Task("Build")
- .IsDependentOn("Restore-NuGet-Packages")
+Task("Build-Impl")
.Does(data =>
{
- if(data.Parameters.IsRunningOnWindows)
+ if(data.Parameters.IsRunningOnWindows && !data.Parameters.IsPlatformNetCoreOnly)
{
MSBuild(data.Parameters.MSBuildSolution, settings => {
settings.SetConfiguration(data.Parameters.Configuration);
@@ -171,7 +171,6 @@ Task("Build")
}
});
-
void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
{
if(!project.EndsWith(".csproj"))
@@ -194,93 +193,91 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
}
}
-Task("Run-Unit-Tests")
- .IsDependentOn("Build")
+Task("Run-Unit-Tests-Impl")
.WithCriteria((context, data) => !data.Parameters.SkipTests)
- .Does(data => {
- RunCoreTest("./tests/Avalonia.Base.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Controls.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Input.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Layout.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Markup.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Styling.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data.Parameters, false);
- if (data.Parameters.IsRunningOnWindows)
- {
- RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, true);
- }
- });
+ .Does(data =>
+{
+ RunCoreTest("./tests/Avalonia.Base.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Controls.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Input.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Layout.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Markup.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Styling.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Skia.UnitTests", data.Parameters, false);
+ if (data.Parameters.IsRunningOnWindows && !data.Parameters.IsPlatformNetCoreOnly)
+ {
+ RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, true);
+ }
+});
-Task("Run-Designer-Tests")
- .IsDependentOn("Build")
+Task("Run-Designer-Tests-Impl")
.WithCriteria((context, data) => !data.Parameters.SkipTests)
- .Does(data => {
- RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false);
- });
+ .Does(data =>
+{
+ RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false);
+});
-Task("Run-Render-Tests")
- .IsDependentOn("Build")
- .WithCriteria((context, data) => !data.Parameters.SkipTests && data.Parameters.IsRunningOnWindows)
- .Does(data => {
- RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data.Parameters, true);
- RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data.Parameters, true);
- });
+Task("Run-Render-Tests-Impl")
+ .WithCriteria((context, data) => !data.Parameters.SkipTests)
+ .WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
+ .WithCriteria((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
+ .Does(data =>
+{
+ RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data.Parameters, true);
+ RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data.Parameters, true);
+});
-Task("Run-Leak-Tests")
- .WithCriteria((context, data) => !data.Parameters.SkipTests && data.Parameters.IsRunningOnWindows)
- .IsDependentOn("Build")
+Task("Run-Leak-Tests-Impl")
+ .WithCriteria((context, data) => !data.Parameters.SkipTests)
+ .WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
+ .WithCriteria((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
.Does(() =>
+{
+ var dotMemoryUnit = Context.Tools.Resolve("dotMemoryUnit.exe");
+ var leakTestsExitCode = StartProcess(dotMemoryUnit, new ProcessSettings
{
- var dotMemoryUnit = Context.Tools.Resolve("dotMemoryUnit.exe");
- var leakTestsExitCode = StartProcess(dotMemoryUnit, new ProcessSettings
- {
- Arguments = new ProcessArgumentBuilder()
- .Append(Context.Tools.Resolve("xunit.console.x86.exe").FullPath)
- .Append("--propagate-exit-code")
- .Append("--")
- .Append("tests\\Avalonia.LeakTests\\bin\\Release\\net461\\Avalonia.LeakTests.dll"),
- Timeout = 120000
- });
-
- if (leakTestsExitCode != 0)
- {
- throw new Exception("Leak Tests failed");
- }
+ Arguments = new ProcessArgumentBuilder()
+ .Append(Context.Tools.Resolve("xunit.console.x86.exe").FullPath)
+ .Append("--propagate-exit-code")
+ .Append("--")
+ .Append("tests\\Avalonia.LeakTests\\bin\\Release\\net461\\Avalonia.LeakTests.dll"),
+ Timeout = 120000
});
-Task("Run-Tests")
- .IsDependentOn("Run-Unit-Tests")
- .IsDependentOn("Run-Render-Tests")
- .IsDependentOn("Run-Designer-Tests")
- .IsDependentOn("Run-Leak-Tests");
+ if (leakTestsExitCode != 0)
+ {
+ throw new Exception("Leak Tests failed");
+ }
+});
-Task("Copy-Files")
- .IsDependentOn("Run-Tests")
+Task("Copy-Files-Impl")
.Does(data =>
{
CopyFiles(data.Packages.BinFiles, data.Parameters.BinRoot);
});
-Task("Zip-Files")
- .IsDependentOn("Copy-Files")
+Task("Zip-Files-Impl")
.Does(data =>
{
Zip(data.Parameters.BinRoot, data.Parameters.ZipCoreArtifacts);
- Zip(data.Parameters.ZipSourceControlCatalogDesktopDirs,
- data.Parameters.ZipTargetControlCatalogDesktopDirs,
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
+ Zip(data.Parameters.NugetRoot, data.Parameters.ZipNuGetArtifacts);
+
+ if (!data.Parameters.IsPlatformNetCoreOnly) {
+ Zip(data.Parameters.ZipSourceControlCatalogDesktopDirs,
+ data.Parameters.ZipTargetControlCatalogDesktopDirs,
+ GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") +
+ GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") +
+ GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") +
+ GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") +
+ GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
+ }
});
-Task("Create-NuGet-Packages")
- .IsDependentOn("Run-Tests")
- .IsDependentOn("Inspect")
+Task("Create-NuGet-Packages-Impl")
.Does(data =>
{
foreach(var nuspec in data.Packages.NuspecNuGetSettings)
@@ -289,8 +286,7 @@ Task("Create-NuGet-Packages")
}
});
-Task("Publish-MyGet")
- .IsDependentOn("Create-NuGet-Packages")
+Task("Publish-MyGet-Impl")
.WithCriteria((context, data) => !data.Parameters.IsLocalBuild)
.WithCriteria((context, data) => !data.Parameters.IsPullRequest)
.WithCriteria((context, data) => data.Parameters.IsMainRepo)
@@ -323,8 +319,7 @@ Task("Publish-MyGet")
Information("Publish-MyGet Task failed, but continuing with next Task...");
});
-Task("Publish-NuGet")
- .IsDependentOn("Create-NuGet-Packages")
+Task("Publish-NuGet-Impl")
.WithCriteria((context, data) => !data.Parameters.IsLocalBuild)
.WithCriteria((context, data) => !data.Parameters.IsPullRequest)
.WithCriteria((context, data) => data.Parameters.IsMainRepo)
@@ -356,54 +351,67 @@ Task("Publish-NuGet")
Information("Publish-NuGet Task failed, but continuing with next Task...");
});
-Task("Inspect")
+Task("Inspect-Impl")
.WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
- .IsDependentOn("Restore-NuGet-Packages")
+ .WithCriteria((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
.Does(() =>
- {
- var badIssues = new []{"PossibleNullReferenceException"};
- var whitelist = new []{"tests", "src\\android", "src\\ios",
- "src\\markup\\avalonia.markup.xaml\\portablexaml\\portable.xaml.github"};
- Information("Running code inspections");
-
- var exitCode = StartProcess(Context.Tools.Resolve("inspectcode.exe"),
- new ProcessSettings
- {
- Arguments = "--output=artifacts\\inspectcode.xml --profile=Avalonia.sln.DotSettings Avalonia.sln",
- RedirectStandardOutput = true
- });
+{
+ var badIssues = new []{"PossibleNullReferenceException"};
+ var whitelist = new []{"tests", "src\\android", "src\\ios",
+ "src\\markup\\avalonia.markup.xaml\\portablexaml\\portable.xaml.github"};
+ Information("Running code inspections");
+
+ var exitCode = StartProcess(Context.Tools.Resolve("inspectcode.exe"),
+ new ProcessSettings
+ {
+ Arguments = "--output=artifacts\\inspectcode.xml --profile=Avalonia.sln.DotSettings Avalonia.sln",
+ RedirectStandardOutput = true
+ });
- Information("Analyzing report");
- var doc = XDocument.Parse(System.IO.File.ReadAllText("artifacts\\inspectcode.xml"));
- var failBuild = false;
- foreach(var xml in doc.Descendants("Issue"))
+ Information("Analyzing report");
+ var doc = XDocument.Parse(System.IO.File.ReadAllText("artifacts\\inspectcode.xml"));
+ var failBuild = false;
+ foreach(var xml in doc.Descendants("Issue"))
+ {
+ var typeId = xml.Attribute("TypeId").Value.ToString();
+ if(badIssues.Contains(typeId))
{
- var typeId = xml.Attribute("TypeId").Value.ToString();
- if(badIssues.Contains(typeId))
- {
- var file = xml.Attribute("File").Value.ToString().ToLower();
- if(whitelist.Any(wh => file.StartsWith(wh)))
- continue;
- var line = xml.Attribute("Line").Value.ToString();
- Error(typeId + " - " + file + " on line " + line);
- failBuild = true;
- }
+ var file = xml.Attribute("File").Value.ToString().ToLower();
+ if(whitelist.Any(wh => file.StartsWith(wh)))
+ continue;
+ var line = xml.Attribute("Line").Value.ToString();
+ Error(typeId + " - " + file + " on line " + line);
+ failBuild = true;
}
- if(failBuild)
- throw new Exception("Issues found");
- });
+ }
+ if(failBuild)
+ throw new Exception("Issues found");
+});
///////////////////////////////////////////////////////////////////////////////
// TARGETS
///////////////////////////////////////////////////////////////////////////////
+Task("Run-Tests")
+ .IsDependentOn("Clean-Impl")
+ .IsDependentOn("Restore-NuGet-Packages-Impl")
+ .IsDependentOn("Build-Impl")
+ .IsDependentOn("Run-Unit-Tests-Impl")
+ .IsDependentOn("Run-Render-Tests-Impl")
+ .IsDependentOn("Run-Designer-Tests-Impl")
+ .IsDependentOn("Run-Leak-Tests-Impl");
+
Task("Package")
- .IsDependentOn("Create-NuGet-Packages");
+ .IsDependentOn("Run-Tests")
+ .IsDependentOn("Inspect-Impl")
+ .IsDependentOn("Create-NuGet-Packages-Impl");
Task("AppVeyor")
- .IsDependentOn("Zip-Files")
- .IsDependentOn("Publish-MyGet")
- .IsDependentOn("Publish-NuGet");
+ .IsDependentOn("Package")
+ .IsDependentOn("Copy-Files-Impl")
+ .IsDependentOn("Zip-Files-Impl")
+ .IsDependentOn("Publish-MyGet-Impl")
+ .IsDependentOn("Publish-NuGet-Impl");
Task("Travis")
.IsDependentOn("Run-Tests");
diff --git a/build/SkiaSharp.props b/build/SkiaSharp.props
index 04e8a3ad4f..35c979a95e 100644
--- a/build/SkiaSharp.props
+++ b/build/SkiaSharp.props
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/build/System.Memory.props b/build/System.Memory.props
new file mode 100644
index 0000000000..f3253f8882
--- /dev/null
+++ b/build/System.Memory.props
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/packages.cake b/packages.cake
index 7e7e722c82..51d9c48159 100644
--- a/packages.cake
+++ b/packages.cake
@@ -1,3 +1,6 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
using System.Xml.Linq;
public class Packages
@@ -9,12 +12,11 @@ public class Packages
public string SkiaSharpVersion {get; private set; }
public string SkiaSharpLinuxVersion {get; private set; }
public Dictionary>> PackageVersions{get; private set;}
-
-
-
+
class DependencyBuilder : List
{
Packages _parent;
+
public DependencyBuilder(Packages parent)
{
_parent = parent;
@@ -24,8 +26,7 @@ public class Packages
{
return _parent.PackageVersions[name].First().Item1;
}
-
-
+
public DependencyBuilder Dep(string name, params string[] fws)
{
if(fws.Length == 0)
@@ -212,17 +213,33 @@ public class Packages
};
});
- var toolsContent = new[] {
- new NuSpecContent{
- Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp/bin/" + parameters.DirSuffix + "/netcoreapp2.0/Avalonia.Designer.HostApp.dll")).FullPath,
- Target = "tools/netcoreapp2.0/previewer"
- },
- new NuSpecContent{
- Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp.NetFx/bin/" + parameters.DirSuffix + "/Avalonia.Designer.HostApp.exe")).FullPath,
- Target = "tools/net461/previewer"
- }
+ var toolHostApp = new NuSpecContent{
+ Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp/bin/" + parameters.DirSuffix + "/netcoreapp2.0/Avalonia.Designer.HostApp.dll")).FullPath,
+ Target = "tools/netcoreapp2.0/previewer"
+ };
+
+ var toolHostAppNetFx = new NuSpecContent{
+ Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp.NetFx/bin/" + parameters.DirSuffix + "/Avalonia.Designer.HostApp.exe")).FullPath,
+ Target = "tools/net461/previewer"
};
+ IList coreFiles;
+
+ if (!parameters.IsPlatformNetCoreOnly) {
+ var toolsContent = new[] { toolHostApp, toolHostAppNetFx };
+ coreFiles = coreLibrariesNuSpecContent
+ .Concat(win32CoreLibrariesNuSpecContent).Concat(net45RuntimePlatform)
+ .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
+ .Concat(toolsContent)
+ .ToList();
+ } else {
+ var toolsContent = new[] { toolHostApp };
+ coreFiles = coreLibrariesNuSpecContent
+ .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
+ .Concat(toolsContent)
+ .ToList();
+ }
+
var nuspecNuGetSettingsCore = new []
{
///////////////////////////////////////////////////////////////////////////////
@@ -253,13 +270,9 @@ public class Packages
}
.Deps(new string[]{null, "netcoreapp2.0"},
"System.ValueTuple", "System.ComponentModel.TypeConverter", "System.ComponentModel.Primitives",
- "System.Runtime.Serialization.Primitives", "System.Xml.XmlDocument", "System.Xml.ReaderWriter")
+ "System.Runtime.Serialization.Primitives", "System.Xml.XmlDocument", "System.Xml.ReaderWriter", "System.Memory")
.ToArray(),
- Files = coreLibrariesNuSpecContent
- .Concat(win32CoreLibrariesNuSpecContent).Concat(net45RuntimePlatform)
- .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
- .Concat(toolsContent)
- .ToList(),
+ Files = coreFiles,
BasePath = context.Directory("./"),
OutputDirectory = parameters.NugetRoot
},
@@ -451,22 +464,6 @@ public class Packages
BasePath = context.Directory("./"),
OutputDirectory = parameters.NugetRoot
},
- new NuGetPackSettings()
- {
- Id = "Avalonia.Win32.Interoperability",
- Dependencies = new []
- {
- new NuSpecDependency() { Id = "Avalonia.Win32", Version = parameters.Version },
- new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = parameters.Version },
- new NuSpecDependency() { Id = "SharpDX.Direct3D9", Version = SharpDXDirect3D9Version },
- },
- Files = new []
- {
- new NuSpecContent { Source = "Avalonia.Win32.Interop/bin/" + parameters.DirSuffix + "/Avalonia.Win32.Interop.dll", Target = "lib/net45" }
- },
- BasePath = context.Directory("./src/Windows"),
- OutputDirectory = parameters.NugetRoot
- },
///////////////////////////////////////////////////////////////////////////////
// Avalonia.LinuxFramebuffer
///////////////////////////////////////////////////////////////////////////////
@@ -487,11 +484,32 @@ public class Packages
}
};
+ var nuspecNuGetSettingInterop = new NuGetPackSettings()
+ {
+ Id = "Avalonia.Win32.Interoperability",
+ Dependencies = new []
+ {
+ new NuSpecDependency() { Id = "Avalonia.Win32", Version = parameters.Version },
+ new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = parameters.Version },
+ new NuSpecDependency() { Id = "SharpDX.Direct3D9", Version = SharpDXDirect3D9Version },
+ },
+ Files = new []
+ {
+ new NuSpecContent { Source = "Avalonia.Win32.Interop/bin/" + parameters.DirSuffix + "/Avalonia.Win32.Interop.dll", Target = "lib/net45" }
+ },
+ BasePath = context.Directory("./src/Windows"),
+ OutputDirectory = parameters.NugetRoot
+ };
+
NuspecNuGetSettings = new List();
NuspecNuGetSettings.AddRange(nuspecNuGetSettingsCore);
NuspecNuGetSettings.AddRange(nuspecNuGetSettingsDesktop);
- NuspecNuGetSettings.AddRange(nuspecNuGetSettingsMobile);
+
+ if (!parameters.IsPlatformNetCoreOnly) {
+ NuspecNuGetSettings.Add(nuspecNuGetSettingInterop);
+ NuspecNuGetSettings.AddRange(nuspecNuGetSettingsMobile);
+ }
NuspecNuGetSettings.ForEach((nuspec) => SetNuGetNuspecCommonProperties(nuspec));
diff --git a/parameters.cake b/parameters.cake
index ffd472cbd4..e595b8159f 100644
--- a/parameters.cake
+++ b/parameters.cake
@@ -8,11 +8,11 @@ public class Parameters
public string AssemblyInfoPath { get; private set; }
public string ReleasePlatform { get; private set; }
public string ReleaseConfiguration { get; private set; }
- public string MSBuildSolution { get; private set; }
- public string XBuildSolution { get; private set; }
+ public string MSBuildSolution { get; private set; }
public bool IsPlatformAnyCPU { get; private set; }
public bool IsPlatformX86 { get; private set; }
public bool IsPlatformX64 { get; private set; }
+ public bool IsPlatformNetCoreOnly { get; private set; }
public bool IsLocalBuild { get; private set; }
public bool IsRunningOnUnix { get; private set; }
public bool IsRunningOnWindows { get; private set; }
@@ -34,6 +34,7 @@ public class Parameters
public DirectoryPathCollection BuildDirs { get; private set; }
public string FileZipSuffix { get; private set; }
public FilePath ZipCoreArtifacts { get; private set; }
+ public FilePath ZipNuGetArtifacts { get; private set; }
public DirectoryPath ZipSourceControlCatalogDesktopDirs { get; private set; }
public FilePath ZipTargetControlCatalogDesktopDirs { get; private set; }
@@ -53,12 +54,12 @@ public class Parameters
ReleasePlatform = "Any CPU";
ReleaseConfiguration = "Release";
MSBuildSolution = "./Avalonia.sln";
- XBuildSolution = "./Avalonia.XBuild.sln";
// PARAMETERS
IsPlatformAnyCPU = StringComparer.OrdinalIgnoreCase.Equals(Platform, "Any CPU");
IsPlatformX86 = StringComparer.OrdinalIgnoreCase.Equals(Platform, "x86");
IsPlatformX64 = StringComparer.OrdinalIgnoreCase.Equals(Platform, "x64");
+ IsPlatformNetCoreOnly = StringComparer.OrdinalIgnoreCase.Equals(Platform, "NetCoreOnly");
IsLocalBuild = buildSystem.IsLocalBuild;
IsRunningOnUnix = context.IsRunningOnUnix();
IsRunningOnWindows = context.IsRunningOnWindows();
@@ -71,7 +72,6 @@ public class Parameters
IsReleasable = StringComparer.OrdinalIgnoreCase.Equals(ReleasePlatform, Platform)
&& StringComparer.OrdinalIgnoreCase.Equals(ReleaseConfiguration, Configuration);
IsMyGetRelease = !IsTagged && IsReleasable;
-
// VERSION
Version = context.Argument("force-nuget-version", context.ParseAssemblyInfo(AssemblyInfoPath).AssemblyVersion);
@@ -103,14 +103,12 @@ public class Parameters
NugetRoot = ArtifactsDir.Combine("nuget");
ZipRoot = ArtifactsDir.Combine("zip");
BinRoot = ArtifactsDir.Combine("bin");
-
BuildDirs = context.GetDirectories("**/bin") + context.GetDirectories("**/obj");
-
DirSuffix = Configuration;
DirSuffixIOS = "iPhone" + "/" + Configuration;
-
FileZipSuffix = Version + ".zip";
ZipCoreArtifacts = ZipRoot.CombineWithFilePath("Avalonia-" + FileZipSuffix);
+ ZipNuGetArtifacts = ZipRoot.CombineWithFilePath("Avalonia-NuGet-" + FileZipSuffix);
ZipSourceControlCatalogDesktopDirs = (DirectoryPath)context.Directory("./samples/ControlCatalog.Desktop/bin/" + DirSuffix + "/net461");
ZipTargetControlCatalogDesktopDirs = ZipRoot.CombineWithFilePath("ControlCatalog.Desktop-" + FileZipSuffix);
}
diff --git a/samples/BindingTest/App.config b/samples/BindingDemo/App.config
similarity index 100%
rename from samples/BindingTest/App.config
rename to samples/BindingDemo/App.config
diff --git a/samples/BindingTest/App.xaml b/samples/BindingDemo/App.xaml
similarity index 100%
rename from samples/BindingTest/App.xaml
rename to samples/BindingDemo/App.xaml
diff --git a/samples/BindingTest/App.xaml.cs b/samples/BindingDemo/App.xaml.cs
similarity index 95%
rename from samples/BindingTest/App.xaml.cs
rename to samples/BindingDemo/App.xaml.cs
index ccad1d0ba9..01c52a2a49 100644
--- a/samples/BindingTest/App.xaml.cs
+++ b/samples/BindingDemo/App.xaml.cs
@@ -5,7 +5,7 @@ using Avalonia.Logging.Serilog;
using Avalonia.Markup.Xaml;
using Serilog;
-namespace BindingTest
+namespace BindingDemo
{
public class App : Application
{
diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingDemo/BindingDemo.csproj
similarity index 100%
rename from samples/BindingTest/BindingTest.csproj
rename to samples/BindingDemo/BindingDemo.csproj
diff --git a/samples/BindingTest/MainWindow.xaml b/samples/BindingDemo/MainWindow.xaml
similarity index 98%
rename from samples/BindingTest/MainWindow.xaml
rename to samples/BindingDemo/MainWindow.xaml
index 6b80225686..a69fb75742 100644
--- a/samples/BindingTest/MainWindow.xaml
+++ b/samples/BindingDemo/MainWindow.xaml
@@ -1,7 +1,7 @@
diff --git a/samples/BindingTest/MainWindow.xaml.cs b/samples/BindingDemo/MainWindow.xaml.cs
similarity index 88%
rename from samples/BindingTest/MainWindow.xaml.cs
rename to samples/BindingDemo/MainWindow.xaml.cs
index c1c3c09406..eaa57e1f5f 100644
--- a/samples/BindingTest/MainWindow.xaml.cs
+++ b/samples/BindingDemo/MainWindow.xaml.cs
@@ -1,9 +1,9 @@
-using BindingTest.ViewModels;
+using BindingDemo.ViewModels;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-namespace BindingTest
+namespace BindingDemo
{
public class MainWindow : Window
{
diff --git a/samples/BindingTest/TestItemView.xaml b/samples/BindingDemo/TestItemView.xaml
similarity index 100%
rename from samples/BindingTest/TestItemView.xaml
rename to samples/BindingDemo/TestItemView.xaml
diff --git a/samples/BindingTest/TestItemView.xaml.cs b/samples/BindingDemo/TestItemView.xaml.cs
similarity index 93%
rename from samples/BindingTest/TestItemView.xaml.cs
rename to samples/BindingDemo/TestItemView.xaml.cs
index 32f367ef68..8c0b592f00 100644
--- a/samples/BindingTest/TestItemView.xaml.cs
+++ b/samples/BindingDemo/TestItemView.xaml.cs
@@ -1,7 +1,7 @@
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-namespace BindingTest
+namespace BindingDemo
{
public class TestItemView : UserControl
{
diff --git a/samples/BindingTest/ViewModels/DataAnnotationsErrorViewModel.cs b/samples/BindingDemo/ViewModels/DataAnnotationsErrorViewModel.cs
similarity index 92%
rename from samples/BindingTest/ViewModels/DataAnnotationsErrorViewModel.cs
rename to samples/BindingDemo/ViewModels/DataAnnotationsErrorViewModel.cs
index 634498c165..e274f9180e 100644
--- a/samples/BindingTest/ViewModels/DataAnnotationsErrorViewModel.cs
+++ b/samples/BindingDemo/ViewModels/DataAnnotationsErrorViewModel.cs
@@ -3,7 +3,7 @@
using System.ComponentModel.DataAnnotations;
-namespace BindingTest.ViewModels
+namespace BindingDemo.ViewModels
{
public class DataAnnotationsErrorViewModel
{
diff --git a/samples/BindingTest/ViewModels/ExceptionErrorViewModel.cs b/samples/BindingDemo/ViewModels/ExceptionErrorViewModel.cs
similarity index 95%
rename from samples/BindingTest/ViewModels/ExceptionErrorViewModel.cs
rename to samples/BindingDemo/ViewModels/ExceptionErrorViewModel.cs
index e6071e0678..2ab6c26e68 100644
--- a/samples/BindingTest/ViewModels/ExceptionErrorViewModel.cs
+++ b/samples/BindingDemo/ViewModels/ExceptionErrorViewModel.cs
@@ -4,7 +4,7 @@
using ReactiveUI;
using System;
-namespace BindingTest.ViewModels
+namespace BindingDemo.ViewModels
{
public class ExceptionErrorViewModel : ReactiveObject
{
diff --git a/samples/BindingTest/ViewModels/IndeiErrorViewModel.cs b/samples/BindingDemo/ViewModels/IndeiErrorViewModel.cs
similarity index 98%
rename from samples/BindingTest/ViewModels/IndeiErrorViewModel.cs
rename to samples/BindingDemo/ViewModels/IndeiErrorViewModel.cs
index b4bb528abb..bb3b4d64e9 100644
--- a/samples/BindingTest/ViewModels/IndeiErrorViewModel.cs
+++ b/samples/BindingDemo/ViewModels/IndeiErrorViewModel.cs
@@ -6,7 +6,7 @@ using System;
using System.ComponentModel;
using System.Collections;
-namespace BindingTest.ViewModels
+namespace BindingDemo.ViewModels
{
public class IndeiErrorViewModel : ReactiveObject, INotifyDataErrorInfo
{
diff --git a/samples/BindingTest/ViewModels/MainWindowViewModel.cs b/samples/BindingDemo/ViewModels/MainWindowViewModel.cs
similarity index 99%
rename from samples/BindingTest/ViewModels/MainWindowViewModel.cs
rename to samples/BindingDemo/ViewModels/MainWindowViewModel.cs
index 1116810ccb..858fb5159a 100644
--- a/samples/BindingTest/ViewModels/MainWindowViewModel.cs
+++ b/samples/BindingDemo/ViewModels/MainWindowViewModel.cs
@@ -6,7 +6,7 @@ using System.Reactive.Linq;
using System.Threading.Tasks;
using System.Threading;
-namespace BindingTest.ViewModels
+namespace BindingDemo.ViewModels
{
public class MainWindowViewModel : ReactiveObject
{
diff --git a/samples/BindingTest/ViewModels/NestedCommandViewModel.cs b/samples/BindingDemo/ViewModels/NestedCommandViewModel.cs
similarity index 92%
rename from samples/BindingTest/ViewModels/NestedCommandViewModel.cs
rename to samples/BindingDemo/ViewModels/NestedCommandViewModel.cs
index 886ecbed8e..0e9139ab98 100644
--- a/samples/BindingTest/ViewModels/NestedCommandViewModel.cs
+++ b/samples/BindingDemo/ViewModels/NestedCommandViewModel.cs
@@ -6,7 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
-namespace BindingTest.ViewModels
+namespace BindingDemo.ViewModels
{
public class NestedCommandViewModel : ReactiveObject
{
diff --git a/samples/BindingTest/ViewModels/TestItem.cs b/samples/BindingDemo/ViewModels/TestItem.cs
similarity index 93%
rename from samples/BindingTest/ViewModels/TestItem.cs
rename to samples/BindingDemo/ViewModels/TestItem.cs
index 2326a92b7d..5a9f192f58 100644
--- a/samples/BindingTest/ViewModels/TestItem.cs
+++ b/samples/BindingDemo/ViewModels/TestItem.cs
@@ -1,6 +1,6 @@
using ReactiveUI;
-namespace BindingTest.ViewModels
+namespace BindingDemo.ViewModels
{
public class TestItem : ReactiveObject
{
diff --git a/samples/ControlCatalog.NetCore/Program.cs b/samples/ControlCatalog.NetCore/Program.cs
index b45a93455e..1f53dedc14 100644
--- a/samples/ControlCatalog.NetCore/Program.cs
+++ b/samples/ControlCatalog.NetCore/Program.cs
@@ -1,9 +1,9 @@
using System;
using System.Diagnostics;
using System.Linq;
-using System.Runtime.InteropServices;
using System.Threading;
using Avalonia;
+using Avalonia.Skia;
namespace ControlCatalog.NetCore
{
@@ -37,7 +37,7 @@ namespace ControlCatalog.NetCore
/// This method is needed for IDE previewer infrastructure
///
public static AppBuilder BuildAvaloniaApp()
- => AppBuilder.Configure().UsePlatformDetect().UseReactiveUI();
+ => AppBuilder.Configure().UsePlatformDetect().UseSkia().UseReactiveUI();
static void ConsoleSilencer()
{
diff --git a/samples/RemoteTest/Program.cs b/samples/RemoteDemo/Program.cs
similarity index 98%
rename from samples/RemoteTest/Program.cs
rename to samples/RemoteDemo/Program.cs
index f518e77143..0565b676fb 100644
--- a/samples/RemoteTest/Program.cs
+++ b/samples/RemoteDemo/Program.cs
@@ -9,7 +9,7 @@ using Avalonia.Remote.Protocol;
using Avalonia.Threading;
using ControlCatalog;
-namespace RemoteTest
+namespace RemoteDemo
{
class Program
{
diff --git a/samples/RemoteTest/RemoteTest.csproj b/samples/RemoteDemo/RemoteDemo.csproj
similarity index 100%
rename from samples/RemoteTest/RemoteTest.csproj
rename to samples/RemoteDemo/RemoteDemo.csproj
diff --git a/samples/RenderTest/App.config b/samples/RenderDemo/App.config
similarity index 100%
rename from samples/RenderTest/App.config
rename to samples/RenderDemo/App.config
diff --git a/samples/RenderTest/App.xaml b/samples/RenderDemo/App.xaml
similarity index 81%
rename from samples/RenderTest/App.xaml
rename to samples/RenderDemo/App.xaml
index c119f54915..aee75cb139 100644
--- a/samples/RenderTest/App.xaml
+++ b/samples/RenderDemo/App.xaml
@@ -2,6 +2,6 @@
-
+
\ No newline at end of file
diff --git a/samples/RenderTest/App.xaml.cs b/samples/RenderDemo/App.xaml.cs
similarity index 97%
rename from samples/RenderTest/App.xaml.cs
rename to samples/RenderDemo/App.xaml.cs
index fd2b940f6a..0f627961e6 100644
--- a/samples/RenderTest/App.xaml.cs
+++ b/samples/RenderDemo/App.xaml.cs
@@ -5,7 +5,7 @@ using Avalonia;
using Avalonia.Logging.Serilog;
using Avalonia.Markup.Xaml;
-namespace RenderTest
+namespace RenderDemo
{
public class App : Application
{
diff --git a/samples/RenderTest/MainWindow.xaml b/samples/RenderDemo/MainWindow.xaml
similarity index 95%
rename from samples/RenderTest/MainWindow.xaml
rename to samples/RenderDemo/MainWindow.xaml
index da49054b77..df2b221423 100644
--- a/samples/RenderTest/MainWindow.xaml
+++ b/samples/RenderDemo/MainWindow.xaml
@@ -1,6 +1,6 @@
diff --git a/samples/RenderTest/MainWindow.xaml.cs b/samples/RenderDemo/MainWindow.xaml.cs
similarity index 94%
rename from samples/RenderTest/MainWindow.xaml.cs
rename to samples/RenderDemo/MainWindow.xaml.cs
index 76a8e81aca..f1f974f7a1 100644
--- a/samples/RenderTest/MainWindow.xaml.cs
+++ b/samples/RenderDemo/MainWindow.xaml.cs
@@ -5,10 +5,10 @@ using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-using RenderTest.ViewModels;
+using RenderDemo.ViewModels;
using ReactiveUI;
-namespace RenderTest
+namespace RenderDemo
{
public class MainWindow : Window
{
diff --git a/samples/RenderTest/Pages/AnimationsPage.xaml b/samples/RenderDemo/Pages/AnimationsPage.xaml
similarity index 100%
rename from samples/RenderTest/Pages/AnimationsPage.xaml
rename to samples/RenderDemo/Pages/AnimationsPage.xaml
diff --git a/samples/RenderTest/Pages/AnimationsPage.xaml.cs b/samples/RenderDemo/Pages/AnimationsPage.xaml.cs
similarity index 90%
rename from samples/RenderTest/Pages/AnimationsPage.xaml.cs
rename to samples/RenderDemo/Pages/AnimationsPage.xaml.cs
index 2623721393..5b02fd9297 100644
--- a/samples/RenderTest/Pages/AnimationsPage.xaml.cs
+++ b/samples/RenderDemo/Pages/AnimationsPage.xaml.cs
@@ -7,9 +7,9 @@ using Avalonia.Data;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
-using RenderTest.ViewModels;
+using RenderDemo.ViewModels;
-namespace RenderTest.Pages
+namespace RenderDemo.Pages
{
public class AnimationsPage : UserControl
{
diff --git a/samples/RenderTest/Pages/ClippingPage.xaml b/samples/RenderDemo/Pages/ClippingPage.xaml
similarity index 100%
rename from samples/RenderTest/Pages/ClippingPage.xaml
rename to samples/RenderDemo/Pages/ClippingPage.xaml
diff --git a/samples/RenderTest/Pages/ClippingPage.xaml.cs b/samples/RenderDemo/Pages/ClippingPage.xaml.cs
similarity index 96%
rename from samples/RenderTest/Pages/ClippingPage.xaml.cs
rename to samples/RenderDemo/Pages/ClippingPage.xaml.cs
index 2a79076d4c..5357181838 100644
--- a/samples/RenderTest/Pages/ClippingPage.xaml.cs
+++ b/samples/RenderDemo/Pages/ClippingPage.xaml.cs
@@ -7,7 +7,7 @@ using Avalonia.Data;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
-namespace RenderTest.Pages
+namespace RenderDemo.Pages
{
public class ClippingPage : UserControl
{
diff --git a/samples/RenderTest/Pages/DrawingPage.xaml b/samples/RenderDemo/Pages/DrawingPage.xaml
similarity index 100%
rename from samples/RenderTest/Pages/DrawingPage.xaml
rename to samples/RenderDemo/Pages/DrawingPage.xaml
diff --git a/samples/RenderTest/Pages/DrawingPage.xaml.cs b/samples/RenderDemo/Pages/DrawingPage.xaml.cs
similarity index 91%
rename from samples/RenderTest/Pages/DrawingPage.xaml.cs
rename to samples/RenderDemo/Pages/DrawingPage.xaml.cs
index 3bf9bd545d..3475e1aa07 100644
--- a/samples/RenderTest/Pages/DrawingPage.xaml.cs
+++ b/samples/RenderDemo/Pages/DrawingPage.xaml.cs
@@ -1,7 +1,7 @@
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-namespace RenderTest.Pages
+namespace RenderDemo.Pages
{
public class DrawingPage : UserControl
{
diff --git a/samples/RenderTest/RenderTest.csproj b/samples/RenderDemo/RenderDemo.csproj
similarity index 100%
rename from samples/RenderTest/RenderTest.csproj
rename to samples/RenderDemo/RenderDemo.csproj
diff --git a/samples/RenderTest/SideBar.xaml b/samples/RenderDemo/SideBar.xaml
similarity index 100%
rename from samples/RenderTest/SideBar.xaml
rename to samples/RenderDemo/SideBar.xaml
diff --git a/samples/RenderTest/ViewModels/AnimationsPageViewModel.cs b/samples/RenderDemo/ViewModels/AnimationsPageViewModel.cs
similarity index 97%
rename from samples/RenderTest/ViewModels/AnimationsPageViewModel.cs
rename to samples/RenderDemo/ViewModels/AnimationsPageViewModel.cs
index 17eee547a1..626a3e7c77 100644
--- a/samples/RenderTest/ViewModels/AnimationsPageViewModel.cs
+++ b/samples/RenderDemo/ViewModels/AnimationsPageViewModel.cs
@@ -2,7 +2,7 @@
using ReactiveUI;
using Avalonia.Animation;
-namespace RenderTest.ViewModels
+namespace RenderDemo.ViewModels
{
public class AnimationsPageViewModel : ReactiveObject
{
diff --git a/samples/RenderTest/ViewModels/MainWindowViewModel.cs b/samples/RenderDemo/ViewModels/MainWindowViewModel.cs
similarity index 96%
rename from samples/RenderTest/ViewModels/MainWindowViewModel.cs
rename to samples/RenderDemo/ViewModels/MainWindowViewModel.cs
index 02a2abeb89..0cb5e1b87b 100644
--- a/samples/RenderTest/ViewModels/MainWindowViewModel.cs
+++ b/samples/RenderDemo/ViewModels/MainWindowViewModel.cs
@@ -1,7 +1,7 @@
using System;
using ReactiveUI;
-namespace RenderTest.ViewModels
+namespace RenderDemo.ViewModels
{
public class MainWindowViewModel : ReactiveObject
{
diff --git a/samples/VirtualizationTest/App.config b/samples/VirtualizationDemo/App.config
similarity index 100%
rename from samples/VirtualizationTest/App.config
rename to samples/VirtualizationDemo/App.config
diff --git a/samples/VirtualizationTest/App.xaml b/samples/VirtualizationDemo/App.xaml
similarity index 100%
rename from samples/VirtualizationTest/App.xaml
rename to samples/VirtualizationDemo/App.xaml
diff --git a/samples/VirtualizationTest/App.xaml.cs b/samples/VirtualizationDemo/App.xaml.cs
similarity index 92%
rename from samples/VirtualizationTest/App.xaml.cs
rename to samples/VirtualizationDemo/App.xaml.cs
index 14ab5b3f84..b220807443 100644
--- a/samples/VirtualizationTest/App.xaml.cs
+++ b/samples/VirtualizationDemo/App.xaml.cs
@@ -4,7 +4,7 @@
using Avalonia;
using Avalonia.Markup.Xaml;
-namespace VirtualizationTest
+namespace VirtualizationDemo
{
public class App : Application
{
diff --git a/samples/VirtualizationTest/MainWindow.xaml b/samples/VirtualizationDemo/MainWindow.xaml
similarity index 100%
rename from samples/VirtualizationTest/MainWindow.xaml
rename to samples/VirtualizationDemo/MainWindow.xaml
diff --git a/samples/VirtualizationTest/MainWindow.xaml.cs b/samples/VirtualizationDemo/MainWindow.xaml.cs
similarity index 89%
rename from samples/VirtualizationTest/MainWindow.xaml.cs
rename to samples/VirtualizationDemo/MainWindow.xaml.cs
index 952383dffb..271519b10b 100644
--- a/samples/VirtualizationTest/MainWindow.xaml.cs
+++ b/samples/VirtualizationDemo/MainWindow.xaml.cs
@@ -4,9 +4,9 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-using VirtualizationTest.ViewModels;
+using VirtualizationDemo.ViewModels;
-namespace VirtualizationTest
+namespace VirtualizationDemo
{
public class MainWindow : Window
{
diff --git a/samples/VirtualizationTest/Program.cs b/samples/VirtualizationDemo/Program.cs
similarity index 94%
rename from samples/VirtualizationTest/Program.cs
rename to samples/VirtualizationDemo/Program.cs
index 097f0cfdc7..98f1f08d6c 100644
--- a/samples/VirtualizationTest/Program.cs
+++ b/samples/VirtualizationDemo/Program.cs
@@ -7,7 +7,7 @@ using Avalonia.Controls;
using Avalonia.Logging.Serilog;
using Serilog;
-namespace VirtualizationTest
+namespace VirtualizationDemo
{
class Program
{
diff --git a/samples/VirtualizationTest/ViewModels/ItemViewModel.cs b/samples/VirtualizationDemo/ViewModels/ItemViewModel.cs
similarity index 92%
rename from samples/VirtualizationTest/ViewModels/ItemViewModel.cs
rename to samples/VirtualizationDemo/ViewModels/ItemViewModel.cs
index 75777012c1..e883cdfeb9 100644
--- a/samples/VirtualizationTest/ViewModels/ItemViewModel.cs
+++ b/samples/VirtualizationDemo/ViewModels/ItemViewModel.cs
@@ -4,7 +4,7 @@
using System;
using ReactiveUI;
-namespace VirtualizationTest.ViewModels
+namespace VirtualizationDemo.ViewModels
{
internal class ItemViewModel : ReactiveObject
{
diff --git a/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs b/samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs
similarity index 99%
rename from samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs
rename to samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs
index 8eab91e06d..eb08ef9656 100644
--- a/samples/VirtualizationTest/ViewModels/MainWindowViewModel.cs
+++ b/samples/VirtualizationDemo/ViewModels/MainWindowViewModel.cs
@@ -9,7 +9,7 @@ using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using ReactiveUI;
-namespace VirtualizationTest.ViewModels
+namespace VirtualizationDemo.ViewModels
{
internal class MainWindowViewModel : ReactiveObject
{
diff --git a/samples/VirtualizationTest/VirtualizationTest.csproj b/samples/VirtualizationDemo/VirtualizationDemo.csproj
similarity index 100%
rename from samples/VirtualizationTest/VirtualizationTest.csproj
rename to samples/VirtualizationDemo/VirtualizationDemo.csproj
diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs
index 48e72db126..baca1494be 100644
--- a/src/Avalonia.Base/AvaloniaObject.cs
+++ b/src/Avalonia.Base/AvaloniaObject.cs
@@ -10,6 +10,7 @@ using System.Reactive.Linq;
using Avalonia.Data;
using Avalonia.Diagnostics;
using Avalonia.Logging;
+using Avalonia.Reactive;
using Avalonia.Threading;
using Avalonia.Utilities;
@@ -38,7 +39,7 @@ namespace Avalonia
/// Maintains a list of direct property binding subscriptions so that the binding source
/// doesn't get collected.
///
- private List _directBindings;
+ private List _directBindings;
///
/// Event handler for implementation.
@@ -359,25 +360,12 @@ namespace Avalonia
property,
description);
- IDisposable subscription = null;
-
if (_directBindings == null)
{
- _directBindings = new List();
+ _directBindings = new List();
}
- subscription = source
- .Select(x => CastOrDefault(x, property.PropertyType))
- .Do(_ => { }, () => _directBindings.Remove(subscription))
- .Subscribe(x => SetDirectValue(property, x));
-
- _directBindings.Add(subscription);
-
- return Disposable.Create(() =>
- {
- subscription.Dispose();
- _directBindings.Remove(subscription);
- });
+ return new DirectBindingSubscription(this, property, source);
}
else
{
@@ -908,5 +896,38 @@ namespace Avalonia
value,
priority);
}
+
+ private class DirectBindingSubscription : IObserver