diff --git a/.gitignore b/.gitignore
index 6ee6057d5f..2b2c9c3d0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -195,3 +195,4 @@ Logs/
ModuleCache.noindex/
Build/Intermediates.noindex/
info.plist
+build-intermediate
diff --git a/.gitmodules b/.gitmodules
index 2d2a9ac497..22c56307b0 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github"]
path = src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github
url = https://github.com/AvaloniaUI/Portable.Xaml.git
+[submodule "nukebuild/Numerge"]
+ path = nukebuild/Numerge
+ url = https://github.com/kekekeks/Numerge.git
diff --git a/Avalonia.sln b/Avalonia.sln
index ee098b9397..ac68b85553 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -1,4 +1,4 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
+Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 10.0.40219.1
@@ -197,6 +197,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Build.Tasks", "src
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "nukebuild\_build.csproj", "{3F00BC43-5095-477F-93D8-E65B08179A00}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Animation.UnitTests", "tests\Avalonia.Animation.UnitTests\Avalonia.Animation.UnitTests.csproj", "{AF227847-E65C-4BE9-BCE9-B551357788E0}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
@@ -1748,6 +1750,30 @@ Global
{BF28998D-072C-439A-AFBB-2FE5021241E0}.Release|iPhone.Build.0 = Release|Any CPU
{BF28998D-072C-439A-AFBB-2FE5021241E0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BF28998D-072C-439A-AFBB-2FE5021241E0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhone.Build.0 = Release|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {AF227847-E65C-4BE9-BCE9-B551357788E0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1803,6 +1829,7 @@ Global
{8B5768BB-71F9-4E23-89B5-DDBA6458B856} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{D49233F8-F29C-47DD-9975-C4C9E4502720} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C}
{3C471044-3640-45E3-B1B2-16D2FF8399EE} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C}
+ {AF227847-E65C-4BE9-BCE9-B551357788E0} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}
diff --git a/Directory.Build.props b/Directory.Build.props
index 50476c81f1..1f26df9bbc 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,5 +1,5 @@
- $(MSBuildThisFileDirectory)artifacts/nuget
+ $(MSBuildThisFileDirectory)build-intermediate/nuget
diff --git a/build/Magick.NET-Q16-AnyCPU.props b/build/Magick.NET-Q16-AnyCPU.props
index 4e600a1c11..21d9cdcb1f 100644
--- a/build/Magick.NET-Q16-AnyCPU.props
+++ b/build/Magick.NET-Q16-AnyCPU.props
@@ -1,5 +1,5 @@
-
+
diff --git a/build/ReferenceCoreLibraries.props b/build/ReferenceCoreLibraries.props
index bd9d6ad843..cffc2e0324 100644
--- a/build/ReferenceCoreLibraries.props
+++ b/build/ReferenceCoreLibraries.props
@@ -1,5 +1,4 @@
-
diff --git a/build/SkiaSharp.props b/build/SkiaSharp.props
index 35c979a95e..a43c99e978 100644
--- a/build/SkiaSharp.props
+++ b/build/SkiaSharp.props
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/native/Avalonia.Native/src/OSX/gl.mm b/native/Avalonia.Native/src/OSX/gl.mm
index a62098a074..083adc927d 100644
--- a/native/Avalonia.Native/src/OSX/gl.mm
+++ b/native/Avalonia.Native/src/OSX/gl.mm
@@ -208,9 +208,8 @@ public:
virtual ~AvnGlRenderingSession()
{
- glFlush();
[_context flushBuffer];
- [_context setView:nil];
+ [NSOpenGLContext clearCurrentContext];
CGLUnlockContext([_context CGLContextObj]);
[_view unlockFocus];
}
@@ -241,9 +240,8 @@ public:
auto gl = _context;
CGLLockContext([_context CGLContextObj]);
[gl setView: _view];
+ [gl update];
[gl makeCurrentContext];
- auto frame = [_view frame];
-
*ret = new AvnGlRenderingSession(_window, _view, gl);
return S_OK;
}
diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm
index ae00bde780..ef5dcb5b2e 100644
--- a/native/Avalonia.Native/src/OSX/window.mm
+++ b/native/Avalonia.Native/src/OSX/window.mm
@@ -425,7 +425,7 @@ private:
[[Window parentWindow] removeChildWindow:Window];
WindowBaseImpl::Show();
- return SetWindowState(_lastWindowState);
+ return SetWindowState(Normal);
}
}
@@ -1184,6 +1184,25 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
}
}
+- (void)windowDidMiniaturize:(NSNotification *)notification
+{
+ auto parent = dynamic_cast(_parent.operator->());
+
+ if(parent != nullptr)
+ {
+ parent->WindowStateChanged();
+ }
+}
+
+- (void)windowDidDeminiaturize:(NSNotification *)notification
+{
+ auto parent = dynamic_cast(_parent.operator->());
+
+ if(parent != nullptr)
+ {
+ parent->WindowStateChanged();
+ }
+}
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
{
diff --git a/nukebuild/.editorconfig b/nukebuild/.editorconfig
new file mode 100644
index 0000000000..d6009b3c0f
--- /dev/null
+++ b/nukebuild/.editorconfig
@@ -0,0 +1,8 @@
+# editorconfig.org
+
+# top-most EditorConfig file
+root = false
+
+# C# files
+[*.cs]
+dotnet_style_require_accessibility_modifiers = never
diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs
index 1014aa1b47..a14842cfd3 100644
--- a/nukebuild/Build.cs
+++ b/nukebuild/Build.cs
@@ -63,6 +63,7 @@ partial class Build : NukeBuild
DeleteDirectories(Parameters.BuildDirs);
EnsureCleanDirectories(Parameters.BuildDirs);
EnsureCleanDirectory(Parameters.ArtifactsDir);
+ EnsureCleanDirectory(Parameters.NugetIntermediateRoot);
EnsureCleanDirectory(Parameters.NugetRoot);
EnsureCleanDirectory(Parameters.ZipRoot);
EnsureCleanDirectory(Parameters.TestResultsRoot);
@@ -123,6 +124,7 @@ partial class Build : NukeBuild
.DependsOn(Compile)
.Executes(() =>
{
+ RunCoreTest("./tests/Avalonia.Animation.UnitTests", false);
RunCoreTest("./tests/Avalonia.Base.UnitTests", false);
RunCoreTest("./tests/Avalonia.Controls.UnitTests", false);
RunCoreTest("./tests/Avalonia.Input.UnitTests", false);
@@ -137,12 +139,13 @@ partial class Build : NukeBuild
});
Target RunRenderTests => _ => _
- .OnlyWhen(() => !Parameters.SkipTests && Parameters.IsRunningOnWindows)
+ .OnlyWhen(() => !Parameters.SkipTests)
.DependsOn(Compile)
.Executes(() =>
{
RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", true);
- RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", true);
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", true);
});
Target RunDesignerTests => _ => _
@@ -181,7 +184,7 @@ partial class Build : NukeBuild
GlobFiles(data.ZipSourceControlCatalogDesktopDir, "*.exe")));
});
- Target CreateNugetPackages => _ => _
+ Target CreateIntermediateNugetPackages => _ => _
.DependsOn(Compile)
.After(RunTests)
.Executes(() =>
@@ -200,6 +203,17 @@ partial class Build : NukeBuild
c.SetConfiguration(Parameters.Configuration)
.AddProperty("PackageVersion", Parameters.Version));
});
+
+ Target CreateNugetPackages => _ => _
+ .DependsOn(CreateIntermediateNugetPackages)
+ .Executes(() =>
+ {
+ var config = Numerge.MergeConfiguration.LoadFile(RootDirectory / "nukebuild" / "numerge.config");
+ EnsureCleanDirectory(Parameters.NugetRoot);
+ if(!Numerge.NugetPackageMerger.Merge(Parameters.NugetIntermediateRoot, Parameters.NugetRoot, config,
+ new NumergeNukeLogger()))
+ throw new Exception("Package merge failed");
+ });
Target RunTests => _ => _
.DependsOn(RunCoreLibsTests)
diff --git a/nukebuild/BuildParameters.cs b/nukebuild/BuildParameters.cs
index 9029aef60d..5f8ec7267e 100644
--- a/nukebuild/BuildParameters.cs
+++ b/nukebuild/BuildParameters.cs
@@ -47,6 +47,7 @@ public partial class Build
public bool PublishTestResults { get; }
public string Version { get; }
public AbsolutePath ArtifactsDir { get; }
+ public AbsolutePath NugetIntermediateRoot { get; }
public AbsolutePath NugetRoot { get; }
public AbsolutePath ZipRoot { get; }
public AbsolutePath BinRoot { get; }
@@ -117,6 +118,7 @@ public partial class Build
// DIRECTORIES
ArtifactsDir = RootDirectory / "artifacts";
NugetRoot = ArtifactsDir / "nuget";
+ NugetIntermediateRoot = RootDirectory / "build-intermediate" / "nuget";
ZipRoot = ArtifactsDir / "zip";
BinRoot = ArtifactsDir / "bin";
TestResultsRoot = ArtifactsDir / "test-results";
@@ -130,9 +132,9 @@ public partial class Build
ZipTargetControlCatalogDesktopDir = ZipRoot / ("ControlCatalog.Desktop-" + FileZipSuffix);
}
- private static string GetVersion()
+ string GetVersion()
{
- var xdoc = XDocument.Load("./build/SharedVersion.props");
+ var xdoc = XDocument.Load(RootDirectory / "build/SharedVersion.props");
return xdoc.Descendants().First(x => x.Name.LocalName == "Version").Value;
}
}
diff --git a/nukebuild/Numerge b/nukebuild/Numerge
new file mode 160000
index 0000000000..4464343aef
--- /dev/null
+++ b/nukebuild/Numerge
@@ -0,0 +1 @@
+Subproject commit 4464343aef5c8ab7a42fcb20a483a6058199f8b8
diff --git a/nukebuild/Shims.cs b/nukebuild/Shims.cs
index 1ba72494d7..461d617643 100644
--- a/nukebuild/Shims.cs
+++ b/nukebuild/Shims.cs
@@ -5,6 +5,7 @@ using System.IO.Compression;
using System.Linq;
using Nuke.Common;
using Nuke.Common.IO;
+using Numerge;
public partial class Build
{
@@ -76,4 +77,17 @@ public partial class Build
}
}
}
+
+ class NumergeNukeLogger : INumergeLogger
+ {
+ public void Log(NumergeLogLevel level, string message)
+ {
+ if(level == NumergeLogLevel.Error)
+ Logger.Error(message);
+ else if (level == NumergeLogLevel.Warning)
+ Logger.Warn(message);
+ else
+ Logger.Info(message);
+ }
+ }
}
diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj
index ed94116a93..e02acff007 100644
--- a/nukebuild/_build.csproj
+++ b/nukebuild/_build.csproj
@@ -30,6 +30,8 @@
+
+
diff --git a/nukebuild/numerge.config b/nukebuild/numerge.config
new file mode 100644
index 0000000000..e4e15d693d
--- /dev/null
+++ b/nukebuild/numerge.config
@@ -0,0 +1,23 @@
+{
+ "Packages":
+ [
+ {
+ "Id": "Avalonia",
+ "MergeAll": true,
+ "Exclude": ["Avalonia.Remote.Protocol"],
+ "IncomingIncludeAssetsOverride": "",
+ "Merge": [
+ {
+ "Id": "Avalonia.Build.Tasks",
+ "IgnoreMissingFrameworkBinaries": true,
+ "DoNotMergeDependencies": true
+ },
+ {
+ "Id": "Avalonia.DesktopRuntime",
+ "IgnoreMissingFrameworkBinaries": true,
+ "IgnoreMissingFrameworkDependencies": true
+ }
+ ]
+ }
+ ]
+}
diff --git a/packages/Avalonia/Avalonia.csproj b/packages/Avalonia/Avalonia.csproj
index 3033064594..489cb228aa 100644
--- a/packages/Avalonia/Avalonia.csproj
+++ b/packages/Avalonia/Avalonia.csproj
@@ -1,10 +1,10 @@
-
+
netstandard2.0;net461;netcoreapp2.0
-
+
@@ -40,10 +40,6 @@
true
build\
-
- true
- tools\
-
diff --git a/packages/Avalonia/Avalonia.props b/packages/Avalonia/Avalonia.props
index 30e3f93b5c..6f21971d3d 100644
--- a/packages/Avalonia/Avalonia.props
+++ b/packages/Avalonia/Avalonia.props
@@ -2,7 +2,7 @@
$(MSBuildThisFileDirectory)\..\tools\netcoreapp2.0\designer\Avalonia.Designer.HostApp.dll
$(MSBuildThisFileDirectory)\..\tools\net461\designer\Avalonia.Designer.HostApp.exe
- $(MSBuildThisFileDirectory)\..\tools\Avalonia.Build.Tasks.dll
+ $(MSBuildThisFileDirectory)\..\tools\netstandard2.0\Avalonia.Build.Tasks.dll
false
diff --git a/samples/RenderDemo/Pages/AnimationsPage.xaml b/samples/RenderDemo/Pages/AnimationsPage.xaml
index 1646708797..b5a8ff6dea 100644
--- a/samples/RenderDemo/Pages/AnimationsPage.xaml
+++ b/samples/RenderDemo/Pages/AnimationsPage.xaml
@@ -43,7 +43,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+
@@ -120,6 +150,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+
diff --git a/samples/RenderDemo/Pages/ClippingPage.xaml b/samples/RenderDemo/Pages/ClippingPage.xaml
index 2bdecfc0ef..ca1b297363 100644
--- a/samples/RenderDemo/Pages/ClippingPage.xaml
+++ b/samples/RenderDemo/Pages/ClippingPage.xaml
@@ -8,7 +8,7 @@ xmlns="https://github.com/avaloniaui">