浏览代码

Merge branch 'master' of https://github.com/avaloniaui/avalonia.native into features/cursor

ElBuda 7 年之前
父节点
当前提交
fb095b87a4

+ 5 - 4
.gitignore

@@ -6,6 +6,7 @@
 [Bb]in/
 packages/
 TestResults/
+artifacts/
 
 # globs
 Makefile.in
@@ -39,7 +40,7 @@ Thumbs.db
 
 # dotCover
 *.dotCover
-
-src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/IDEWorkspaceChecks\.plist
-
-src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/WorkspaceSettings\.xcsettings
+
+src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/IDEWorkspaceChecks\.plist
+
+src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/WorkspaceSettings\.xcsettings

+ 28 - 0
azure-pipelines.yml

@@ -0,0 +1,28 @@
+
+pool:
+  vmImage: 'macOS 10.13'
+
+steps:
+- bash: 'xcodebuild -showsdks'
+- task: Xcode@5
+  inputs:
+    actions: 'archive'
+    scheme: ''
+    sdk: 'macosx10.13'
+    configuration: 'Release'
+    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
+    xcodeVersion: 'default' # Options: 8, 9, default, specifyPath
+    args: '-derivedDataPath ./build'
+- task: DotNetCoreInstaller@0
+  inputs:
+    version: '2.1.401'
+- script: |
+    brew install castxml
+    export COREHOST_TRACE=0
+    export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+    export DOTNET_CLI_TELEMETRY_OPTOUT=1
+    which dotnet
+    dotnet --info
+    dotnet tool install -g Cake.Tool --version 0.30.0
+    export PATH="$PATH:$HOME/.dotnet/tools"
+    dotnet cake build.cake -Target="Azure" -Platform="Any CPU" -Configuration="Release"

+ 148 - 0
build.cake

@@ -0,0 +1,148 @@
+#load "./parameters.cake"
+
+Setup<Parameters>(context =>
+{
+    Information("Running tasks...");
+    return new Parameters(context);
+});
+
+Teardown<Parameters>((context, parameters) =>
+{
+    Information("Finished running tasks.");
+});
+
+Task("Clean")
+    .Does<Parameters>(parameters => 
+{
+    foreach(var project in parameters.BuildProjects)
+    {
+        (string path, string name) = project;
+        Information($"Clean: {name}");
+        DotNetCoreClean($"{path}/{name}/{name}.csproj", new DotNetCoreCleanSettings {
+            Configuration = parameters.Configuration,
+            Verbosity = DotNetCoreVerbosity.Minimal
+        });
+    }
+});
+
+Task("Build")
+    .Does<Parameters>(parameters => 
+{
+    foreach(var project in parameters.BuildProjects)
+    {
+        (string path, string name) = project;
+        Information($"Build: {name}");
+        DotNetCoreBuild($"{path}/{name}/{name}.csproj", new DotNetCoreBuildSettings {
+            Configuration = parameters.Configuration,
+            VersionSuffix = parameters.VersionSuffix
+        });
+    }
+});
+
+Task("Test")
+    .Does<Parameters>(parameters => 
+{
+    foreach(var project in parameters.TestProjects)
+    {
+        (string path, string name) = project;
+        Information($"Test: {name}");
+        DotNetCoreTest($"{path}/{name}/{name}.csproj", new DotNetCoreTestSettings {
+            Configuration = parameters.Configuration
+        });
+    }
+});
+
+Task("Publish")
+    .Does<Parameters>(parameters => 
+{
+    CleanDirectory($"{parameters.Artifacts}/zip");
+    var redistVersion = "14.15.26706";
+    var redistPath = $"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Redist\\MSVC\\{redistVersion}\\x64\\Microsoft.VC141.CRT\\";
+    var redistRuntime = "win7-x64";
+    foreach(var project in parameters.PublishProjects)
+    {
+        (string path, string name, string framework, string runtime) = project;
+        var output = $"./{parameters.Artifacts}/publish/{name}-{framework}-{runtime}";
+        Information($"Publish: {name}, {framework}, {runtime}");
+        DotNetCorePublish($"{path}/{name}/{name}.csproj", new DotNetCorePublishSettings {
+            Configuration = parameters.Configuration,
+            VersionSuffix = parameters.VersionSuffix,
+            Framework = framework,
+            Runtime = runtime,
+            OutputDirectory = output
+        });
+        if (string.Compare(runtime, redistRuntime, StringComparison.OrdinalIgnoreCase) == 0)
+        {
+            CopyFileToDirectory($"{redistPath}msvcp140.dll", output);
+            CopyFileToDirectory($"{redistPath}vcruntime140.dll",  output);
+        }
+        Zip($"{parameters.Artifacts}/publish/{name}-{framework}-{runtime}", $"{parameters.Artifacts}/zip/{name}-{framework}-{runtime}.zip");
+    }
+});
+
+Task("Pack")
+    .Does<Parameters>(parameters => 
+{
+    CleanDirectory($"{parameters.Artifacts}/nuget");
+    foreach(var project in parameters.PackProjects)
+    {
+        (string path, string name) = project;
+        Information($"Pack: {name}");
+        DotNetCorePack($"{path}/{name}/{name}.csproj", new DotNetCorePackSettings {
+            Configuration = parameters.Configuration,
+            VersionSuffix = "parameters.VersionSuffix",
+            OutputDirectory = $"{parameters.Artifacts}/nuget",
+            EnvironmentVariables = new Dictionary<string, string>
+            {
+                { "VERSION", parameters.Version }
+            }
+        });
+    }
+});
+
+Task("Push")
+    .WithCriteria<Parameters>((context, parameters) => parameters.PushNuGet)
+    .Does<Parameters>(parameters => 
+{
+    var apiKey = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_KEY" : "MYGET_API_KEY");
+    var apiUrl = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_URL" : "MYGET_API_URL");
+    var packages = GetFiles($"{parameters.Artifacts}/nuget/*.nupkg");
+    foreach (var package in packages)
+    {
+        DotNetCoreNuGetPush(package.FullPath, new DotNetCoreNuGetPushSettings {
+            Source = apiUrl,
+            ApiKey = apiKey
+        });
+    }
+});
+
+Task("Default")
+  .IsDependentOn("Build");
+
+Task("AppVeyor")
+  .IsDependentOn("Clean")
+  .IsDependentOn("Build")
+  .IsDependentOn("Test")
+  .IsDependentOn("Publish")
+  .IsDependentOn("Pack")
+  .IsDependentOn("Push");
+
+Task("Travis")
+  .IsDependentOn("Test");
+
+Task("CircleCI")
+  .IsDependentOn("Test");
+
+Task("Azure")
+  .IsDependentOn("Clean")
+  .IsDependentOn("Build")
+  .IsDependentOn("Pack")
+  .IsDependentOn("Push");
+
+Task("Azure-macOS")
+  .IsDependentOn("Test");
+
+Task("Azure-Linux")
+  .IsDependentOn("Test");
+
+RunTarget(Context.Argument("target", "Default"));

+ 74 - 0
parameters.cake

@@ -0,0 +1,74 @@
+
+public class Parameters
+{
+    public string Configuration { get; private set; }
+    public string Artifacts { get; private set; }
+    public string VersionSuffix { get; private set; }
+    public string Version { get; private set; } = "0.7.0";
+    public string NuGetPushBranch { get; private set; }
+    public string NuGetPushRepoName { get; private set; }
+    public bool PushNuGet { get; private set; }
+    public bool IsNugetRelease { get; private set; }
+    public (string path, string name)[] BuildProjects { get; private set; }
+    public (string path, string name)[] TestProjects { get; private set; }
+    public (string path, string name, string framework, string runtime)[] PublishProjects { get; private set; }
+    public (string path, string name)[] PackProjects { get; private set; }
+
+    public Parameters(ICakeContext context)
+    {
+        Configuration = context.Argument("configuration", "Release");
+        Artifacts = context.Argument("artifacts", "./artifacts");
+
+        VersionSuffix = context.Argument("suffix", default(string));
+        if (VersionSuffix == null)
+        {
+            var build = context.EnvironmentVariable("BUILD_BUILDNUMBER");
+            VersionSuffix = build != null ? $"-build{build}" : "";
+        }
+
+        Version += "-build" + context.EnvironmentVariable("BUILD_BUILDNUMBER").Replace(".","");
+
+        NuGetPushBranch = "master";
+        NuGetPushRepoName = "https://github.com/AvaloniaUI/Avalonia.Native";
+
+        var repoName = context.EnvironmentVariable("BUILD_REPOSITORY_URI");
+        var repoBranch = context.EnvironmentVariable("BUILD_SOURCEBRANCHNAME");
+        var repoTag = context.EnvironmentVariable("APPVEYOR_REPO_TAG");
+        var repoTagName = context.EnvironmentVariable("APPVEYOR_REPO_TAG_NAME");
+        var pullRequestTitle = context.EnvironmentVariable("SYSTEM_PULLREQUEST_SOURCEBRANCH");
+
+        System.Console.WriteLine($"RepoName: {repoName}, RepoBranch: {repoBranch}, PR Title: {pullRequestTitle}/.");
+
+        if (pullRequestTitle == null 
+            && string.Compare(repoName, NuGetPushRepoName, StringComparison.OrdinalIgnoreCase) == 0
+            && string.Compare(repoBranch, NuGetPushBranch, StringComparison.OrdinalIgnoreCase) == 0)
+        {
+            PushNuGet = true;
+        }
+
+        if (pullRequestTitle == null 
+            && string.Compare(repoTag, "True", StringComparison.OrdinalIgnoreCase) == 0
+            && repoTagName != null)
+        {
+            IsNugetRelease = true;
+        }
+
+        BuildProjects = new []
+        {
+            ( "./src", "Avalonia.Native" )
+        };
+
+        TestProjects = new (string path, string name) []
+        {
+        };
+
+        PublishProjects = new (string path, string name, string framework, string runtime) []
+        {
+        };
+
+        PackProjects = new []
+        {
+            ( "./src", "Avalonia.Native" )
+        };
+    }
+}

+ 1 - 1
src/Avalonia.Native.OSX/window.mm

@@ -594,7 +594,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
     
 }
 
-- (NSArray<NSAttributedStringKey> *)validAttributesForMarkedText
+- (NSArray<NSString *> *)validAttributesForMarkedText
 {
     return [NSArray new];
 }

二进制
src/Avalonia.Native/.AvaloniaNativePlatform.cs.swp


+ 8 - 0
src/Avalonia.Native/Avalonia.Native.csproj

@@ -20,4 +20,12 @@
       <Compile Remove="Generated\LocalInterop.cs" />
       <Compile Remove="Generated\Structures.cs" />
     </ItemGroup>
+
+    <ItemGroup>
+      <Content Include="../build/Build/Intermediates.noindex/ArchiveIntermediates/Avalonia.Native.OSX/BuildProductsPath/Release/libAvalonia.Native.OSX.dylib">
+        <PackagePath>runtimes/osx-x64/libAvalonia.Native.OSX.dylib</PackagePath>
+        <Pack>true</Pack>
+        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+      </Content>
+  </ItemGroup>
 </Project>

+ 4 - 3
src/Avalonia.Native/AvaloniaNativePlatform.cs

@@ -63,7 +63,8 @@ namespace Avalonia.Native
             _factory.Initialize();
 
             AvaloniaLocator.CurrentMutable
-                .Bind<IStandardCursorFactory>().ToConstant(new CursorFactory(_factory.CreateCursor()))
+                .Bind<IPlatformThreadingInterface>().ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface()))
+                .Bind<IStandardCursorFactory>().ToTransient<CursorFactoryStub>()
                 .Bind<IPlatformIconLoader>().ToSingleton<IconLoader>()
                 .Bind<IKeyboardDevice>().ToConstant(KeyboardDevice)
                 .Bind<IMouseDevice>().ToConstant(MouseDevice)
@@ -72,8 +73,8 @@ namespace Avalonia.Native
                 .Bind<IClipboard>().ToConstant(new ClipboardImpl(_factory.CreateClipboard()))
                 .Bind<IRenderLoop>().ToConstant(new RenderLoop())
                 .Bind<IRenderTimer>().ToConstant(new DefaultRenderTimer(60))
-                .Bind<ISystemDialogImpl>().ToConstant(new SystemDialogs(_factory.CreateSystemDialogs()))
-                .Bind<IPlatformThreadingInterface>().ToConstant(new PlatformThreadingInterface(_factory.CreatePlatformThreadingInterface()));
+                .Bind<ISystemDialogImpl>().ToConstant(new SystemDialogs(_factory.CreateSystemDialogs()));
+                
         }
 
         public IWindowImpl CreateWindow()