diff --git a/.gitignore b/.gitignore index e67d986a8a..a9a8fd36b4 100644 --- a/.gitignore +++ b/.gitignore @@ -176,3 +176,5 @@ nuget Avalonia.XBuild.sln project.lock.json .idea/* +**/obj-Skia/* +**/obj-Direct2D1/* diff --git a/build.cake b/build.cake index 7d612fcdea..61fda13695 100644 --- a/build.cake +++ b/build.cake @@ -124,14 +124,9 @@ Task("Restore-NuGet-Packages") void DotNetCoreBuild() { - DotNetCoreRestore("samples\\ControlCatalog.NetCore"); - DotNetBuild("samples\\ControlCatalog.NetCore"); + DotNetCoreBuild("samples\\ControlCatalog.NetCore"); } -Task("DotNetCoreBuild") - .IsDependentOn("Clean") - .Does(() => DotNetCoreBuild()); - Task("Build") .IsDependentOn("Restore-NuGet-Packages") .Does(() => @@ -140,9 +135,9 @@ Task("Build") { MSBuild(parameters.MSBuildSolution, settings => { settings.SetConfiguration(parameters.Configuration); + settings.SetVerbosity(Verbosity.Minimal); settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); settings.WithProperty("UseRoslynPathHack", "true"); - settings.SetVerbosity(Verbosity.Minimal); settings.UseToolVersion(MSBuildToolVersion.VS2017); settings.WithProperty("Windows", "True"); settings.SetNodeReuse(false); @@ -160,7 +155,6 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false) if(!project.EndsWith(".csproj")) project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj"); Information("Running tests from " + project); - DotNetCoreRestore(project); var frameworks = new List(){"netcoreapp2.0"}; if(parameters.IsRunningOnWindows) frameworks.Add("net47"); @@ -215,7 +209,7 @@ Task("Run-Designer-Unit-Tests") var toolPath = (parameters.IsPlatformAnyCPU || parameters.IsPlatformX86) ? Context.Tools.Resolve("xunit.console.x86.exe") : Context.Tools.Resolve("xunit.console.exe"); - + var xUnitSettings = new XUnit2Settings { ToolPath = toolPath, @@ -223,7 +217,7 @@ Task("Run-Designer-Unit-Tests") ShadowCopy = false, }; - XUnit2(GetFiles("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.csproj"), xUnitSettings); + XUnit2("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.dll", xUnitSettings); }); Task("Copy-Files") diff --git a/build/Unsafe.props b/build/Unsafe.props new file mode 100644 index 0000000000..db96658bdd --- /dev/null +++ b/build/Unsafe.props @@ -0,0 +1,5 @@ + + + + + diff --git a/packages.cake b/packages.cake index bc290fce22..3c2f76205c 100644 --- a/packages.cake +++ b/packages.cake @@ -120,6 +120,7 @@ public class Packages var SharpDXDirect3D11Version = packageVersions["SharpDX.Direct3D11"].FirstOrDefault().Item1; var SharpDXDirect3D9Version = packageVersions["SharpDX.Direct3D9"].FirstOrDefault().Item1; var SharpDXDXGIVersion = packageVersions["SharpDX.DXGI"].FirstOrDefault().Item1; + var UnsafeVersion = packageVersions["System.Runtime.CompilerServices.Unsafe"].FirstOrDefault().Item1; context.Information("Package: Serilog, version: {0}", SerilogVersion); context.Information("Package: Sprache, version: {0}", SpracheVersion); @@ -394,7 +395,8 @@ public class Packages new NuSpecDependency() { Id = "SharpDX", Version = SharpDXVersion }, new NuSpecDependency() { Id = "SharpDX.Direct2D1", Version = SharpDXDirect2D1Version }, new NuSpecDependency() { Id = "SharpDX.Direct3D11", Version = SharpDXDirect3D11Version }, - new NuSpecDependency() { Id = "SharpDX.DXGI", Version = SharpDXDXGIVersion } + new NuSpecDependency() { Id = "SharpDX.DXGI", Version = SharpDXDXGIVersion }, + new NuSpecDependency() { Id = "System.Runtime.CompilerServices.Unsafe", Version = UnsafeVersion } }, Files = new [] { diff --git a/src/Android/Avalonia.Android/Resources/Resource.Designer.cs b/src/Android/Avalonia.Android/Resources/Resource.Designer.cs index 80cbbc51ec..e66c2800d3 100644 --- a/src/Android/Avalonia.Android/Resources/Resource.Designer.cs +++ b/src/Android/Avalonia.Android/Resources/Resource.Designer.cs @@ -40,11 +40,14 @@ namespace Avalonia.Android public partial class String { + // aapt resource value: 0x7f020002 + public static int ApplicationName = 2130837506; + // aapt resource value: 0x7f020001 - public static int ApplicationName = 2130837505; + public static int Hello = 2130837505; // aapt resource value: 0x7f020000 - public static int Hello = 2130837504; + public static int library_name = 2130837504; static String() { diff --git a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj index a84c373886..2b9ce5466b 100644 --- a/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj +++ b/src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj @@ -2,6 +2,7 @@ netstandard2.0 false + true @@ -25,4 +26,5 @@ + \ No newline at end of file diff --git a/src/Windows/Avalonia.Direct2D1/FramebufferShimRenderTarget.cs b/src/Windows/Avalonia.Direct2D1/FramebufferShimRenderTarget.cs index 83bd4d2957..dbba7271e2 100644 --- a/src/Windows/Avalonia.Direct2D1/FramebufferShimRenderTarget.cs +++ b/src/Windows/Avalonia.Direct2D1/FramebufferShimRenderTarget.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Runtime.CompilerServices; using System.Text; using Avalonia.Controls.Platform.Surfaces; using Avalonia.Direct2D1.Media; @@ -67,10 +68,13 @@ namespace Avalonia.Direct2D1 { for (var y = 0; y < _target.Height; y++) { - UnmanagedMethods.CopyMemory( - _target.Address + _target.RowBytes * y, - l.Data.DataPointer + l.Stride * y, - (uint) Math.Min(l.Stride, _target.RowBytes)); + unsafe + { + Unsafe.CopyBlock( + (void*)(_target.Address + _target.RowBytes * y), + (void*)(l.Data.DataPointer + l.Stride * y), + (uint)Math.Min(l.Stride, _target.RowBytes)); + } } } Dispose(); diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs index 9b99b4c40a..540810f13c 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using System.Runtime.CompilerServices; using Avalonia.Win32.Interop; using SharpDX.WIC; using APixelFormat = Avalonia.Platform.PixelFormat; @@ -74,8 +75,13 @@ namespace Avalonia.Direct2D1.Media { for (var row = 0; row < height; row++) { - UnmanagedMethods.CopyMemory(new IntPtr(l.Data.DataPointer.ToInt64() + row * l.Stride), - new IntPtr(data.ToInt64() + row * stride), (uint) l.Data.Pitch); + unsafe + { + Unsafe.CopyBlock( + (void*)(l.Data.DataPointer + row * l.Stride), + (void*)(data + row * stride), + (uint) l.Data.Pitch); + } } } } diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index fb4aefbf36..bc81010377 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -947,10 +947,7 @@ namespace Avalonia.Win32.Interop uint dwMaximumSizeHigh, uint dwMaximumSizeLow, string lpName); - - [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)] - public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count); - + public enum MONITOR { MONITOR_DEFAULTTONULL = 0x00000000, diff --git a/tests/Avalonia.RenderTests/TestBase.cs b/tests/Avalonia.RenderTests/TestBase.cs index dd6fcb1c06..cf38ef3818 100644 --- a/tests/Avalonia.RenderTests/TestBase.cs +++ b/tests/Avalonia.RenderTests/TestBase.cs @@ -46,12 +46,13 @@ namespace Avalonia.Direct2D1.RenderTests public TestBase(string outputPath) { + var testFiles = Path.GetFullPath(@"..\..\..\..\..\TestFiles\"); #if AVALONIA_SKIA - string testFiles = Path.GetFullPath(@"..\..\..\..\..\TestFiles\Skia"); + var platform = "Skia"; #else - string testFiles = Path.GetFullPath(@"..\..\tests\TestFiles\Direct2D1"); + var platform = "Direct2D1"; #endif - OutputPath = Path.Combine(testFiles, outputPath); + OutputPath = Path.Combine(testFiles, platform, outputPath); threadingInterface.MainThread = Thread.CurrentThread; }