132 changed files with 4315 additions and 807 deletions
@ -0,0 +1,7 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<configuration> |
||||
|
<packageSources> |
||||
|
<clear /> |
||||
|
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" /> |
||||
|
</packageSources> |
||||
|
</configuration> |
||||
@ -1,31 +1,27 @@ |
|||||
version: 1.0.{build} |
|
||||
os: Visual Studio 2015 |
os: Visual Studio 2015 |
||||
before_build: |
platform: |
||||
- git submodule update --init |
- Any CPU |
||||
- nuget restore Avalonia.sln |
configuration: |
||||
|
- Release |
||||
environment: |
environment: |
||||
myget_key: |
NUGET_API_KEY: |
||||
secure: XOgD5bJUKNOS2kDDgb+affS4pDcslxALh+xvvnr1Koy0PjXlhILsBdNhxRe0KcNm |
secure: Xv89dlP2MSBZKhl1nrWSxqcDgCXB0HRhOd4SWQ+jRJ7QoLxQel5mLTipXM++J3G5 |
||||
|
NUGET_API_URL: https://www.nuget.org/api/v2/package |
||||
|
MYGET_API_KEY: |
||||
|
secure: OtVfyN3ErqQrDTnWH2HDfJDlCiu/i4/X4wFmK3ZXXP7HmCiXYPSbTjMPwwdOxRaK |
||||
|
MYGET_API_URL: https://www.myget.org/F/avalonia-ci/api/v2/package |
||||
install: |
install: |
||||
- if not exist gtk-sharp-2.12.26.msi appveyor DownloadFile http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.26.msi |
- if not exist gtk-sharp-2.12.26.msi appveyor DownloadFile http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.26.msi |
||||
- msiexec /i gtk-sharp-2.12.26.msi /qn /norestart |
- msiexec /i gtk-sharp-2.12.26.msi /qn /norestart |
||||
- cmd: set PATH=%programfiles(x86)%\GtkSharp\2.12\bin\;%PATH% |
- cmd: set PATH=%programfiles(x86)%\GtkSharp\2.12\bin\;%PATH% |
||||
|
before_build: |
||||
cache: |
- git submodule update --init |
||||
- gtk-sharp-2.12.26.msi |
build_script: |
||||
|
- ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration" |
||||
configuration: |
after_build: |
||||
- Release |
|
||||
|
|
||||
after_test: |
|
||||
- .\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" |
- .\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll" |
||||
- ps: nuget\build-appveyor.ps1 |
test: off |
||||
|
|
||||
artifacts: |
artifacts: |
||||
- path: nuget\*.nupkg |
- path: artifacts\nuget\*.nupkg |
||||
|
cache: |
||||
build: |
- gtk-sharp-2.12.26.msi |
||||
project: Avalonia.sln |
|
||||
verbosity: minimal |
|
||||
|
|||||
@ -0,0 +1,776 @@ |
|||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// ADDINS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
#addin "nuget:?package=Polly&version=4.2.0" |
||||
|
#addin "nuget:?package=NuGet.Core&version=2.12.0" |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// TOOLS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
#tool "nuget:?package=xunit.runner.console&version=2.1.0" |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// USINGS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
using System; |
||||
|
using System.Collections; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using Polly; |
||||
|
using NuGet; |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// ARGUMENTS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
var target = Argument("target", "Default"); |
||||
|
var platform = Argument("platform", "Any CPU"); |
||||
|
var configuration = Argument("configuration", "Release"); |
||||
|
var skipTests = HasArgument("skip-tests"); |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// CONFIGURATION |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
var MainRepo = "AvaloniaUI/Avalonia"; |
||||
|
var MasterBranch = "master"; |
||||
|
var AssemblyInfoPath = File("./src/Shared/SharedAssemblyInfo.cs"); |
||||
|
var ReleasePlatform = "Any CPU"; |
||||
|
var ReleaseConfiguration = "Release"; |
||||
|
var MSBuildSolution = "./Avalonia.sln"; |
||||
|
var XBuildSolution = "./Avalonia.sln"; |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// PARAMETERS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
var isPlatformAnyCPU = StringComparer.OrdinalIgnoreCase.Equals(platform, "Any CPU"); |
||||
|
var isPlatformX86 = StringComparer.OrdinalIgnoreCase.Equals(platform, "x86"); |
||||
|
var isPlatformX64 = StringComparer.OrdinalIgnoreCase.Equals(platform, "x64"); |
||||
|
var isLocalBuild = BuildSystem.IsLocalBuild; |
||||
|
var isRunningOnUnix = IsRunningOnUnix(); |
||||
|
var isRunningOnWindows = IsRunningOnWindows(); |
||||
|
var isRunningOnAppVeyor = BuildSystem.AppVeyor.IsRunningOnAppVeyor; |
||||
|
var isPullRequest = BuildSystem.AppVeyor.Environment.PullRequest.IsPullRequest; |
||||
|
var isMainRepo = StringComparer.OrdinalIgnoreCase.Equals(MainRepo, BuildSystem.AppVeyor.Environment.Repository.Name); |
||||
|
var isMasterBranch = StringComparer.OrdinalIgnoreCase.Equals(MasterBranch, BuildSystem.AppVeyor.Environment.Repository.Branch); |
||||
|
var isTagged = BuildSystem.AppVeyor.Environment.Repository.Tag.IsTag |
||||
|
&& !string.IsNullOrWhiteSpace(BuildSystem.AppVeyor.Environment.Repository.Tag.Name); |
||||
|
var isReleasable = StringComparer.OrdinalIgnoreCase.Equals(ReleasePlatform, platform) |
||||
|
&& StringComparer.OrdinalIgnoreCase.Equals(ReleaseConfiguration, configuration); |
||||
|
var isMyGetRelease = !isTagged && isReleasable; |
||||
|
var isNuGetRelease = isTagged && isReleasable; |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// VERSION |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
var version = ParseAssemblyInfo(AssemblyInfoPath).AssemblyVersion; |
||||
|
|
||||
|
if (isRunningOnAppVeyor) |
||||
|
{ |
||||
|
if (isTagged) |
||||
|
{ |
||||
|
// Use Tag Name as version |
||||
|
version = BuildSystem.AppVeyor.Environment.Repository.Tag.Name; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
// Use AssemblyVersion with Build as version |
||||
|
version += "-build" + EnvironmentVariable("APPVEYOR_BUILD_NUMBER") + "-alpha"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// DIRECTORIES |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
var artifactsDir = (DirectoryPath)Directory("./artifacts"); |
||||
|
var nugetRoot = artifactsDir.Combine("nuget"); |
||||
|
|
||||
|
var dirSuffix = configuration; |
||||
|
var dirSuffixSkia = (isPlatformAnyCPU ? "x86" : platform) + "/" + configuration; |
||||
|
var dirSuffixIOS = "iPhone" + "/" + configuration; |
||||
|
|
||||
|
var buildDirs = |
||||
|
GetDirectories("./src/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./src/**/obj/" + dirSuffix) + |
||||
|
GetDirectories("./src/Markup/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./src/Markup/**/obj/" + dirSuffix) + |
||||
|
GetDirectories("./src/Android/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./src/Android/**/obj/" + dirSuffix) + |
||||
|
GetDirectories("./src/Gtk/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./src/Gtk/**/obj/" + dirSuffix) + |
||||
|
GetDirectories("./src/iOS/**/bin/" + dirSuffixIOS) + |
||||
|
GetDirectories("./src/iOS/**/obj/" + dirSuffixIOS) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.Android/bin/" + dirSuffix) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.Android/obj/" + dirSuffix) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.Android.TestApp/bin/" + dirSuffix) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.Android.TestApp/obj/" + dirSuffix) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.Desktop/bin/" + dirSuffixSkia) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.Desktop/obj/" + dirSuffixSkia) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.iOS/bin/" + dirSuffixIOS) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.iOS/obj/" + dirSuffixIOS) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.iOS.TestApp/bin/" + dirSuffixIOS) + |
||||
|
(DirectoryPath)Directory("./src/Skia/Avalonia.Skia.iOS.TestApp/obj/" + dirSuffixIOS) + |
||||
|
GetDirectories("./src/Windows/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./src/Windows/**/obj/" + dirSuffix) + |
||||
|
GetDirectories("./tests/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./tests/**/obj/" + dirSuffix) + |
||||
|
GetDirectories("./Samples/**/bin/" + dirSuffix) + |
||||
|
GetDirectories("./Samples/**/obj/" + dirSuffix); |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// NUGET NUSPECS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
Information("Getting git modules:"); |
||||
|
|
||||
|
var ignoredSubModulesPaths = System.IO.File.ReadAllLines(".git/config").Where(m=>m.StartsWith("[submodule ")).Select(m => |
||||
|
{ |
||||
|
var path = m.Split(' ')[1].Trim("\"[] \t".ToArray()); |
||||
|
Information(path); |
||||
|
return ((DirectoryPath)Directory(path)).FullPath; |
||||
|
}).ToList(); |
||||
|
|
||||
|
var normalizePath = new Func<string, string>( |
||||
|
path => path.Replace(System.IO.Path.DirectorySeparatorChar, System.IO.Path.AltDirectorySeparatorChar).ToUpperInvariant()); |
||||
|
|
||||
|
// Key: Package Id |
||||
|
// Value is Tuple where Item1: Package Version, Item2: The packages.config file path. |
||||
|
var packageVersions = new Dictionary<string, IList<Tuple<string,string>>>(); |
||||
|
|
||||
|
System.IO.Directory.EnumerateFiles(((DirectoryPath)Directory("./src")).FullPath, "packages.config", SearchOption.AllDirectories).ToList().ForEach(fileName => |
||||
|
{ |
||||
|
if (!ignoredSubModulesPaths.Any(i => normalizePath(fileName).Contains(normalizePath(i)))) |
||||
|
{ |
||||
|
var file = new PackageReferenceFile(fileName); |
||||
|
foreach (PackageReference packageReference in file.GetPackageReferences()) |
||||
|
{ |
||||
|
IList<Tuple<string, string>> versions; |
||||
|
packageVersions.TryGetValue(packageReference.Id, out versions); |
||||
|
if (versions == null) |
||||
|
{ |
||||
|
versions = new List<Tuple<string, string>>(); |
||||
|
packageVersions[packageReference.Id] = versions; |
||||
|
} |
||||
|
versions.Add(Tuple.Create(packageReference.Version.ToString(), fileName)); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
Information("Checking installed NuGet package dependencies versions:"); |
||||
|
|
||||
|
packageVersions.ToList().ForEach(package => |
||||
|
{ |
||||
|
var packageVersion = package.Value.First().Item1; |
||||
|
bool isValidVersion = package.Value.All(x => x.Item1 == packageVersion); |
||||
|
if (!isValidVersion) |
||||
|
{ |
||||
|
Information("Error: package {0} has multiple versions installed:", package.Key); |
||||
|
foreach (var v in package.Value) |
||||
|
{ |
||||
|
Information("{0}, file: {1}", v.Item1, v.Item2); |
||||
|
} |
||||
|
throw new Exception("Detected multiple NuGet package version installed for different projects."); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
Information("Setting NuGet package dependencies versions:"); |
||||
|
|
||||
|
var SerilogVersion = packageVersions["Serilog"].FirstOrDefault().Item1; |
||||
|
var SplatVersion = packageVersions["Splat"].FirstOrDefault().Item1; |
||||
|
var SpracheVersion = packageVersions["Sprache"].FirstOrDefault().Item1; |
||||
|
var SystemReactiveVersion = packageVersions["System.Reactive"].FirstOrDefault().Item1; |
||||
|
var SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1; |
||||
|
var SharpDXVersion = packageVersions["SharpDX"].FirstOrDefault().Item1; |
||||
|
var SharpDXDirect2D1Version = packageVersions["SharpDX.Direct2D1"].FirstOrDefault().Item1; |
||||
|
var SharpDXDXGIVersion = packageVersions["SharpDX.DXGI"].FirstOrDefault().Item1; |
||||
|
|
||||
|
Information("Package: Serilog, version: {0}", SerilogVersion); |
||||
|
Information("Package: Splat, version: {0}", SplatVersion); |
||||
|
Information("Package: Sprache, version: {0}", SpracheVersion); |
||||
|
Information("Package: System.Reactive, version: {0}", SystemReactiveVersion); |
||||
|
Information("Package: SkiaSharp, version: {0}", SkiaSharpVersion); |
||||
|
Information("Package: SharpDX, version: {0}", SharpDXVersion); |
||||
|
Information("Package: SharpDX.Direct2D1, version: {0}", SharpDXDirect2D1Version); |
||||
|
Information("Package: SharpDX.DXGI, version: {0}", SharpDXDXGIVersion); |
||||
|
|
||||
|
var SetNuGetNuspecCommonProperties = new Action<NuGetPackSettings> ((nuspec) => { |
||||
|
nuspec.Version = version; |
||||
|
nuspec.Authors = new [] { "Avalonia Team" }; |
||||
|
nuspec.Owners = new [] { "stevenk" }; |
||||
|
nuspec.LicenseUrl = new Uri("http://opensource.org/licenses/MIT"); |
||||
|
nuspec.ProjectUrl = new Uri("https://github.com/AvaloniaUI/Avalonia/"); |
||||
|
nuspec.RequireLicenseAcceptance = false; |
||||
|
nuspec.Symbols = false; |
||||
|
nuspec.NoPackageAnalysis = true; |
||||
|
nuspec.Description = "The Avalonia UI framework"; |
||||
|
nuspec.Copyright = "Copyright 2015"; |
||||
|
nuspec.Tags = new [] { "Avalonia" }; |
||||
|
}); |
||||
|
|
||||
|
var coreLibraries = new string[][] |
||||
|
{ |
||||
|
new [] { "./src/", "Avalonia.Animation", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Animation", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Base", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Base", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Controls", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Controls", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.DesignerSupport", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.DesignerSupport", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Diagnostics", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Diagnostics", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Input", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Input", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Interactivity", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Interactivity", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Layout", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Layout", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Logging.Serilog", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Logging.Serilog", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.SceneGraph", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.SceneGraph", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.Styling", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Styling", ".xml" }, |
||||
|
new [] { "./src/", "Avalonia.ReactiveUI", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Themes.Default", ".dll" }, |
||||
|
new [] { "./src/", "Avalonia.Themes.Default", ".xml" }, |
||||
|
new [] { "./src/Markup/", "Avalonia.Markup", ".dll" }, |
||||
|
new [] { "./src/Markup/", "Avalonia.Markup", ".xml" }, |
||||
|
new [] { "./src/Markup/", "Avalonia.Markup.Xaml", ".dll" }, |
||||
|
new [] { "./src/Markup/", "Avalonia.Markup.Xaml", ".xml" } |
||||
|
}; |
||||
|
|
||||
|
var coreLibrariesFiles = coreLibraries.Select((lib) => { |
||||
|
return (FilePath)File(lib[0] + lib[1] + "/bin/" + dirSuffix + "/" + lib[1] + lib[2]); |
||||
|
}).ToList(); |
||||
|
|
||||
|
var coreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => { |
||||
|
return new NuSpecContent { |
||||
|
Source = file.FullPath, Target = "lib/portable-windows8+net45" |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
var win32CoreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => { |
||||
|
return new NuSpecContent { |
||||
|
Source = file.FullPath, Target = "lib/net45" |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
var net45RuntimePlatformExtensions = new [] {".xml", ".dll"}; |
||||
|
var net45RuntimePlatform = net45RuntimePlatformExtensions.Select(libSuffix => { |
||||
|
return new NuSpecContent { |
||||
|
Source = ((FilePath)File("./src/Avalonia.DotNetFrameworkRuntime/bin/" + dirSuffix + "/Avalonia.DotNetFrameworkRuntime" + libSuffix)).FullPath, |
||||
|
Target = "lib/net45" |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
var nuspecNuGetSettingsCore = new [] |
||||
|
{ |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Serilog", Version = SerilogVersion }, |
||||
|
new NuSpecDependency() { Id = "Splat", Version = SplatVersion }, |
||||
|
new NuSpecDependency() { Id = "Sprache", Version = SpracheVersion }, |
||||
|
new NuSpecDependency() { Id = "System.Reactive", Version = SystemReactiveVersion } |
||||
|
}, |
||||
|
Files = coreLibrariesNuSpecContent.Concat(win32CoreLibrariesNuSpecContent).Concat(net45RuntimePlatform).ToList(), |
||||
|
BasePath = Directory("./"), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.HtmlRenderer |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.HtmlRenderer", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.HtmlRenderer.dll", Target = "lib/portable-windows8+net45" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Avalonia.HtmlRenderer/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
var nuspecNuGetSettingsMobile = new [] |
||||
|
{ |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Android |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Android", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.Skia.Android", Version = version } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Android.dll", Target = "lib/MonoAndroid10" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Android/Avalonia.Android/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Skia.Android |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Skia.Android", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version }, |
||||
|
new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Skia.Android.dll", Target = "lib/MonoAndroid10" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Skia/Avalonia.Skia.Android/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.iOS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.iOS", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.Skia.iOS", Version = version } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.iOS.dll", Target = "lib/Xamarin.iOS10" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/iOS/Avalonia.iOS/bin/" + dirSuffixIOS), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Skia.iOS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Skia.iOS", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version }, |
||||
|
new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Skia.iOS.dll", Target = "lib/Xamarin.iOS10" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Skia/Avalonia.Skia.iOS/bin/" + dirSuffixIOS), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Mobile |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Mobile", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia.Android", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.iOS", Version = version } |
||||
|
}, |
||||
|
Files = new NuSpecContent[] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "licence.md", Target = "" } |
||||
|
}, |
||||
|
BasePath = Directory("./"), |
||||
|
OutputDirectory = nugetRoot |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
var nuspecNuGetSettingsDesktop = new [] |
||||
|
{ |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Win32 |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Win32", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Win32.dll", Target = "lib/net45" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Windows/Avalonia.Win32/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Direct2D1 |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Direct2D1", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version }, |
||||
|
new NuSpecDependency() { Id = "SharpDX", Version = SharpDXVersion }, |
||||
|
new NuSpecDependency() { Id = "SharpDX.Direct2D1", Version = SharpDXDirect2D1Version }, |
||||
|
new NuSpecDependency() { Id = "SharpDX.DXGI", Version = SharpDXDXGIVersion } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Direct2D1.dll", Target = "lib/net45" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Windows/Avalonia.Direct2D1/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Gtk |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Gtk", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Gtk.dll", Target = "lib/net45" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Gtk/Avalonia.Gtk/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Cairo |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Cairo", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Cairo.dll", Target = "lib/net45" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Gtk/Avalonia.Cairo/bin/" + dirSuffix), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Skia.Desktop |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Skia.Desktop", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia", Version = version }, |
||||
|
new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion } |
||||
|
}, |
||||
|
Files = new [] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "Avalonia.Skia.Desktop.dll", Target = "lib/net45" } |
||||
|
}, |
||||
|
BasePath = Directory("./src/Skia/Avalonia.Skia.Desktop/bin/" + dirSuffixSkia), |
||||
|
OutputDirectory = nugetRoot |
||||
|
}, |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// Avalonia.Desktop |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
new NuGetPackSettings() |
||||
|
{ |
||||
|
Id = "Avalonia.Desktop", |
||||
|
Dependencies = new [] |
||||
|
{ |
||||
|
new NuSpecDependency() { Id = "Avalonia.Win32", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.Gtk", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.Cairo", Version = version }, |
||||
|
new NuSpecDependency() { Id = "Avalonia.Skia.Desktop", Version = version } |
||||
|
}, |
||||
|
Files = new NuSpecContent[] |
||||
|
{ |
||||
|
new NuSpecContent { Source = "licence.md", Target = "" } |
||||
|
}, |
||||
|
BasePath = Directory("./"), |
||||
|
OutputDirectory = nugetRoot |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
var nuspecNuGetSettings = new List<NuGetPackSettings>(); |
||||
|
|
||||
|
nuspecNuGetSettings.AddRange(nuspecNuGetSettingsCore); |
||||
|
nuspecNuGetSettings.AddRange(nuspecNuGetSettingsDesktop); |
||||
|
nuspecNuGetSettings.AddRange(nuspecNuGetSettingsMobile); |
||||
|
|
||||
|
nuspecNuGetSettings.ForEach((nuspec) => SetNuGetNuspecCommonProperties(nuspec)); |
||||
|
|
||||
|
var nugetPackages = nuspecNuGetSettings.Select(nuspec => { |
||||
|
return nuspec.OutputDirectory.CombineWithFilePath(string.Concat(nuspec.Id, ".", nuspec.Version, ".nupkg")); |
||||
|
}).ToArray(); |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// INFORMATION |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
Information("Building version {0} of Avalonia ({1}, {2}, {3}) using version {4} of Cake.", |
||||
|
version, |
||||
|
platform, |
||||
|
configuration, |
||||
|
target, |
||||
|
typeof(ICakeContext).Assembly.GetName().Version.ToString()); |
||||
|
|
||||
|
if (isRunningOnAppVeyor) |
||||
|
{ |
||||
|
Information("Repository Name: " + BuildSystem.AppVeyor.Environment.Repository.Name); |
||||
|
Information("Repository Branch: " + BuildSystem.AppVeyor.Environment.Repository.Branch); |
||||
|
} |
||||
|
|
||||
|
Information("Target: " + target); |
||||
|
Information("Platform: " + platform); |
||||
|
Information("Configuration: " + configuration); |
||||
|
Information("IsLocalBuild: " + isLocalBuild); |
||||
|
Information("IsRunningOnUnix: " + isRunningOnUnix); |
||||
|
Information("IsRunningOnWindows: " + isRunningOnWindows); |
||||
|
Information("IsRunningOnAppVeyor: " + isRunningOnAppVeyor); |
||||
|
Information("IsPullRequest: " + isPullRequest); |
||||
|
Information("IsMainRepo: " + isMainRepo); |
||||
|
Information("IsMasterBranch: " + isMasterBranch); |
||||
|
Information("IsTagged: " + isTagged); |
||||
|
Information("IsReleasable: " + isReleasable); |
||||
|
Information("IsMyGetRelease: " + isMyGetRelease); |
||||
|
Information("IsNuGetRelease: " + isNuGetRelease); |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// TASKS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
Task("Clean") |
||||
|
.Does(() => |
||||
|
{ |
||||
|
CleanDirectories(buildDirs); |
||||
|
CleanDirectory(artifactsDir); |
||||
|
CleanDirectory(nugetRoot); |
||||
|
}); |
||||
|
|
||||
|
Task("Restore-NuGet-Packages") |
||||
|
.IsDependentOn("Clean") |
||||
|
.Does(() => |
||||
|
{ |
||||
|
var maxRetryCount = 5; |
||||
|
var toolTimeout = 1d; |
||||
|
Policy |
||||
|
.Handle<Exception>() |
||||
|
.Retry(maxRetryCount, (exception, retryCount, context) => { |
||||
|
if (retryCount == maxRetryCount) |
||||
|
{ |
||||
|
throw exception; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
Verbose("{0}", exception); |
||||
|
toolTimeout+=0.5; |
||||
|
}}) |
||||
|
.Execute(()=> { |
||||
|
if(isRunningOnWindows) |
||||
|
{ |
||||
|
NuGetRestore(MSBuildSolution, new NuGetRestoreSettings { |
||||
|
ToolTimeout = TimeSpan.FromMinutes(toolTimeout) |
||||
|
}); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
NuGetRestore(XBuildSolution, new NuGetRestoreSettings { |
||||
|
ToolTimeout = TimeSpan.FromMinutes(toolTimeout) |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
Task("Build") |
||||
|
.IsDependentOn("Restore-NuGet-Packages") |
||||
|
.Does(() => |
||||
|
{ |
||||
|
if(isRunningOnWindows) |
||||
|
{ |
||||
|
MSBuild(MSBuildSolution, settings => { |
||||
|
settings.SetConfiguration(configuration); |
||||
|
settings.WithProperty("Platform", "\"" + platform + "\""); |
||||
|
settings.SetVerbosity(Verbosity.Minimal); |
||||
|
settings.WithProperty("Windows", "True"); |
||||
|
settings.UseToolVersion(MSBuildToolVersion.VS2015); |
||||
|
settings.SetNodeReuse(false); |
||||
|
}); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
XBuild(XBuildSolution, settings => { |
||||
|
settings.SetConfiguration(configuration); |
||||
|
settings.WithProperty("Platform", "\"" + platform + "\""); |
||||
|
settings.SetVerbosity(Verbosity.Minimal); |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
Task("Run-Unit-Tests") |
||||
|
.IsDependentOn("Build") |
||||
|
.WithCriteria(() => !skipTests) |
||||
|
.Does(() => |
||||
|
{ |
||||
|
var pattern = "./tests/Avalonia.*.UnitTests/bin/" + dirSuffix + "/Avalonia.*.UnitTests.dll"; |
||||
|
|
||||
|
Func<IFileSystemInfo, bool> ExcludeWindowsTests = i => { |
||||
|
return !(i.Path.FullPath.IndexOf("Direct2D", StringComparison.OrdinalIgnoreCase) >= 0); |
||||
|
}; |
||||
|
|
||||
|
var unitTests = isRunningOnWindows ? GetFiles(pattern) : GetFiles(pattern, ExcludeWindowsTests); |
||||
|
|
||||
|
if (isRunningOnWindows) |
||||
|
{ |
||||
|
var windowsTests = GetFiles("./tests/Avalonia.DesignerSupport.Tests/bin/" + dirSuffix + "/*Tests.dll") + |
||||
|
GetFiles("./tests/Avalonia.LeakTests/bin/" + dirSuffix + "/*Tests.dll") + |
||||
|
GetFiles("./tests/Avalonia.RenderTests/bin/" + dirSuffix + "/*Tests.dll"); |
||||
|
|
||||
|
unitTests += windowsTests; |
||||
|
} |
||||
|
|
||||
|
var toolPath = (isPlatformAnyCPU || isPlatformX86) ? |
||||
|
"./tools/xunit.runner.console/tools/xunit.console.x86.exe" : |
||||
|
"./tools/xunit.runner.console/tools/xunit.console.exe"; |
||||
|
|
||||
|
var settings = new XUnit2Settings |
||||
|
{ |
||||
|
ToolPath = toolPath, |
||||
|
Parallelism = ParallelismOption.None |
||||
|
}; |
||||
|
|
||||
|
if (isRunningOnWindows) |
||||
|
{ |
||||
|
settings.NoAppDomain = false; |
||||
|
} |
||||
|
|
||||
|
foreach (var file in unitTests) |
||||
|
{ |
||||
|
Information("Running test " + file.GetFilenameWithoutExtension()); |
||||
|
XUnit2(file.FullPath, settings); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
Task("Create-NuGet-Packages") |
||||
|
.IsDependentOn("Run-Unit-Tests") |
||||
|
.Does(() => |
||||
|
{ |
||||
|
foreach(var nuspec in nuspecNuGetSettings) |
||||
|
{ |
||||
|
NuGetPack(nuspec); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
Task("Publish-MyGet") |
||||
|
.IsDependentOn("Create-NuGet-Packages") |
||||
|
.WithCriteria(() => !isLocalBuild) |
||||
|
.WithCriteria(() => !isPullRequest) |
||||
|
.WithCriteria(() => isMainRepo) |
||||
|
.WithCriteria(() => isMasterBranch) |
||||
|
.WithCriteria(() => isMyGetRelease) |
||||
|
.Does(() => |
||||
|
{ |
||||
|
var apiKey = EnvironmentVariable("MYGET_API_KEY"); |
||||
|
if(string.IsNullOrEmpty(apiKey)) |
||||
|
{ |
||||
|
throw new InvalidOperationException("Could not resolve MyGet API key."); |
||||
|
} |
||||
|
|
||||
|
var apiUrl = EnvironmentVariable("MYGET_API_URL"); |
||||
|
if(string.IsNullOrEmpty(apiUrl)) |
||||
|
{ |
||||
|
throw new InvalidOperationException("Could not resolve MyGet API url."); |
||||
|
} |
||||
|
|
||||
|
foreach(var nupkg in nugetPackages) |
||||
|
{ |
||||
|
NuGetPush(nupkg, new NuGetPushSettings { |
||||
|
Source = apiUrl, |
||||
|
ApiKey = apiKey |
||||
|
}); |
||||
|
} |
||||
|
}) |
||||
|
.OnError(exception => |
||||
|
{ |
||||
|
Information("Publish-MyGet Task failed, but continuing with next Task..."); |
||||
|
}); |
||||
|
|
||||
|
Task("Publish-NuGet") |
||||
|
.IsDependentOn("Create-NuGet-Packages") |
||||
|
.WithCriteria(() => !isLocalBuild) |
||||
|
.WithCriteria(() => !isPullRequest) |
||||
|
.WithCriteria(() => isMainRepo) |
||||
|
.WithCriteria(() => isMasterBranch) |
||||
|
.WithCriteria(() => isNuGetRelease) |
||||
|
.Does(() => |
||||
|
{ |
||||
|
var apiKey = EnvironmentVariable("NUGET_API_KEY"); |
||||
|
if(string.IsNullOrEmpty(apiKey)) |
||||
|
{ |
||||
|
throw new InvalidOperationException("Could not resolve NuGet API key."); |
||||
|
} |
||||
|
|
||||
|
var apiUrl = EnvironmentVariable("NUGET_API_URL"); |
||||
|
if(string.IsNullOrEmpty(apiUrl)) |
||||
|
{ |
||||
|
throw new InvalidOperationException("Could not resolve NuGet API url."); |
||||
|
} |
||||
|
|
||||
|
foreach(var nupkg in nugetPackages) |
||||
|
{ |
||||
|
NuGetPush(nupkg, new NuGetPushSettings { |
||||
|
ApiKey = apiKey, |
||||
|
Source = apiUrl |
||||
|
}); |
||||
|
} |
||||
|
}) |
||||
|
.OnError(exception => |
||||
|
{ |
||||
|
Information("Publish-NuGet Task failed, but continuing with next Task..."); |
||||
|
}); |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// TARGETS |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
Task("Package") |
||||
|
.IsDependentOn("Create-NuGet-Packages"); |
||||
|
|
||||
|
Task("Default") |
||||
|
.IsDependentOn("Package"); |
||||
|
|
||||
|
Task("AppVeyor") |
||||
|
.IsDependentOn("Publish-MyGet") |
||||
|
.IsDependentOn("Publish-NuGet"); |
||||
|
|
||||
|
Task("Travis") |
||||
|
.IsDependentOn("Run-Unit-Tests"); |
||||
|
|
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
// EXECUTE |
||||
|
/////////////////////////////////////////////////////////////////////////////// |
||||
|
|
||||
|
RunTarget(target); |
||||
@ -0,0 +1,201 @@ |
|||||
|
########################################################################## |
||||
|
# This is the Cake bootstrapper script for PowerShell. |
||||
|
# This file was downloaded from https://github.com/cake-build/resources |
||||
|
# Feel free to change this file to fit your needs. |
||||
|
########################################################################## |
||||
|
|
||||
|
<# |
||||
|
|
||||
|
.SYNOPSIS |
||||
|
This is a Powershell script to bootstrap a Cake build. |
||||
|
|
||||
|
.DESCRIPTION |
||||
|
This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) |
||||
|
and execute your Cake build script with the parameters you provide. |
||||
|
|
||||
|
.PARAMETER Script |
||||
|
The build script to execute. |
||||
|
.PARAMETER Target |
||||
|
The build script target to run. |
||||
|
.PARAMETER Platform |
||||
|
The build platform to use. |
||||
|
.PARAMETER Configuration |
||||
|
The build configuration to use. |
||||
|
.PARAMETER Verbosity |
||||
|
Specifies the amount of information to be displayed. |
||||
|
.PARAMETER Experimental |
||||
|
Tells Cake to use the latest Roslyn release. |
||||
|
.PARAMETER WhatIf |
||||
|
Performs a dry run of the build script. |
||||
|
No tasks will be executed. |
||||
|
.PARAMETER Mono |
||||
|
Tells Cake to use the Mono scripting engine. |
||||
|
.PARAMETER SkipToolPackageRestore |
||||
|
Skips restoring of packages. |
||||
|
.PARAMETER SkipTests |
||||
|
Skips unit tests |
||||
|
.PARAMETER ScriptArgs |
||||
|
Remaining arguments are added here. |
||||
|
|
||||
|
.LINK |
||||
|
http://cakebuild.net |
||||
|
|
||||
|
#> |
||||
|
|
||||
|
[CmdletBinding()] |
||||
|
Param( |
||||
|
[string]$Script = "build.cake", |
||||
|
[string]$Target = "Default", |
||||
|
[ValidateSet("Any CPU", "x86", "x64", "Mono", "iPhone")] |
||||
|
[string]$Platform = "Any CPU", |
||||
|
[ValidateSet("Release", "Debug")] |
||||
|
[string]$Configuration = "Release", |
||||
|
[ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] |
||||
|
[string]$Verbosity = "Verbose", |
||||
|
[switch]$Experimental, |
||||
|
[Alias("DryRun","Noop")] |
||||
|
[switch]$WhatIf, |
||||
|
[switch]$Mono, |
||||
|
[switch]$SkipToolPackageRestore, |
||||
|
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] |
||||
|
[string[]]$ScriptArgs |
||||
|
) |
||||
|
|
||||
|
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null |
||||
|
function MD5HashFile([string] $filePath) |
||||
|
{ |
||||
|
if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf)) |
||||
|
{ |
||||
|
return $null |
||||
|
} |
||||
|
|
||||
|
[System.IO.Stream] $file = $null; |
||||
|
[System.Security.Cryptography.MD5] $md5 = $null; |
||||
|
try |
||||
|
{ |
||||
|
$md5 = [System.Security.Cryptography.MD5]::Create() |
||||
|
$file = [System.IO.File]::OpenRead($filePath) |
||||
|
return [System.BitConverter]::ToString($md5.ComputeHash($file)) |
||||
|
} |
||||
|
finally |
||||
|
{ |
||||
|
if ($file -ne $null) |
||||
|
{ |
||||
|
$file.Dispose() |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Write-Host "Preparing to run build script..." |
||||
|
|
||||
|
if(!$PSScriptRoot){ |
||||
|
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent |
||||
|
} |
||||
|
|
||||
|
$TOOLS_DIR = Join-Path $PSScriptRoot "tools" |
||||
|
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" |
||||
|
$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" |
||||
|
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" |
||||
|
$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" |
||||
|
$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum" |
||||
|
|
||||
|
# Should we use mono? |
||||
|
$UseMono = ""; |
||||
|
if($Mono.IsPresent) { |
||||
|
Write-Verbose -Message "Using the Mono based scripting engine." |
||||
|
$UseMono = "-mono" |
||||
|
} |
||||
|
|
||||
|
# Should we use the new Roslyn? |
||||
|
$UseExperimental = ""; |
||||
|
if($Experimental.IsPresent -and !($Mono.IsPresent)) { |
||||
|
Write-Verbose -Message "Using experimental version of Roslyn." |
||||
|
$UseExperimental = "-experimental" |
||||
|
} |
||||
|
|
||||
|
# Is this a dry run? |
||||
|
$UseDryRun = ""; |
||||
|
if($WhatIf.IsPresent) { |
||||
|
$UseDryRun = "-dryrun" |
||||
|
} |
||||
|
|
||||
|
# Is this a dry run? |
||||
|
$UseSkipTests = ""; |
||||
|
if($SkipTests.IsPresent) { |
||||
|
$UseSkipTests = "-skip-tests" |
||||
|
} |
||||
|
|
||||
|
# Make sure tools folder exists |
||||
|
if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { |
||||
|
Write-Verbose -Message "Creating tools directory..." |
||||
|
New-Item -Path $TOOLS_DIR -Type directory | out-null |
||||
|
} |
||||
|
|
||||
|
# Make sure that packages.config exist. |
||||
|
if (!(Test-Path $PACKAGES_CONFIG)) { |
||||
|
Write-Verbose -Message "Downloading packages.config..." |
||||
|
try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { |
||||
|
Throw "Could not download packages.config." |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Try find NuGet.exe in path if not exists |
||||
|
if (!(Test-Path $NUGET_EXE)) { |
||||
|
Write-Verbose -Message "Trying to find nuget.exe in PATH..." |
||||
|
$existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } |
||||
|
$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 |
||||
|
if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { |
||||
|
Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." |
||||
|
$NUGET_EXE = $NUGET_EXE_IN_PATH.FullName |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Try download NuGet.exe if not exists |
||||
|
if (!(Test-Path $NUGET_EXE)) { |
||||
|
Write-Verbose -Message "Downloading NuGet.exe..." |
||||
|
try { |
||||
|
(New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) |
||||
|
} catch { |
||||
|
Throw "Could not download NuGet.exe." |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Save nuget.exe path to environment to be available to child processed |
||||
|
$ENV:NUGET_EXE = $NUGET_EXE |
||||
|
|
||||
|
# Restore tools from NuGet? |
||||
|
if(-Not $SkipToolPackageRestore.IsPresent) { |
||||
|
Push-Location |
||||
|
Set-Location $TOOLS_DIR |
||||
|
|
||||
|
# Check for changes in packages.config and remove installed tools if true. |
||||
|
[string] $md5Hash = MD5HashFile($PACKAGES_CONFIG) |
||||
|
if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or |
||||
|
($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) { |
||||
|
Write-Verbose -Message "Missing or changed package.config hash..." |
||||
|
Remove-Item * -Recurse -Exclude packages.config,nuget.exe |
||||
|
} |
||||
|
|
||||
|
Write-Verbose -Message "Restoring tools from NuGet..." |
||||
|
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`"" |
||||
|
|
||||
|
if ($LASTEXITCODE -ne 0) { |
||||
|
Throw "An error occured while restoring NuGet tools." |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
$md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" |
||||
|
} |
||||
|
Write-Verbose -Message ($NuGetOutput | out-string) |
||||
|
Pop-Location |
||||
|
} |
||||
|
|
||||
|
# Make sure that Cake has been installed. |
||||
|
if (!(Test-Path $CAKE_EXE)) { |
||||
|
Throw "Could not find Cake.exe at $CAKE_EXE" |
||||
|
} |
||||
|
|
||||
|
# Start Cake |
||||
|
Write-Host "Running build script..." |
||||
|
Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -platform=`"$Platform`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseSkipTests $UseMono $UseDryRun $UseExperimental $ScriptArgs" |
||||
|
exit $LASTEXITCODE |
||||
@ -0,0 +1,105 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
########################################################################## |
||||
|
# This is the Cake bootstrapper script for Linux and OS X. |
||||
|
# This file was downloaded from https://github.com/cake-build/resources |
||||
|
# Feel free to change this file to fit your needs. |
||||
|
########################################################################## |
||||
|
|
||||
|
# Define directories. |
||||
|
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) |
||||
|
TOOLS_DIR=$SCRIPT_DIR/tools |
||||
|
NUGET_EXE=$TOOLS_DIR/nuget.exe |
||||
|
CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe |
||||
|
PACKAGES_CONFIG=$TOOLS_DIR/packages.config |
||||
|
PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum |
||||
|
|
||||
|
# Define md5sum or md5 depending on Linux/OSX |
||||
|
MD5_EXE= |
||||
|
if [[ "$(uname -s)" == "Darwin" ]]; then |
||||
|
MD5_EXE="md5 -r" |
||||
|
else |
||||
|
MD5_EXE="md5sum" |
||||
|
fi |
||||
|
|
||||
|
# Define default arguments. |
||||
|
SCRIPT="build.cake" |
||||
|
TARGET="Default" |
||||
|
CONFIGURATION="Release" |
||||
|
PLATFORM="Any CPU" |
||||
|
VERBOSITY="verbose" |
||||
|
DRYRUN= |
||||
|
SKIP_TESTS= |
||||
|
SHOW_VERSION=false |
||||
|
SCRIPT_ARGUMENTS=() |
||||
|
|
||||
|
# Parse arguments. |
||||
|
for i in "$@"; do |
||||
|
case $1 in |
||||
|
-s|--script) SCRIPT="$2"; shift ;; |
||||
|
-t|--target) TARGET="$2"; shift ;; |
||||
|
-p|--platform) PLATFORM="$2"; shift ;; |
||||
|
-c|--configuration) CONFIGURATION="$2"; shift ;; |
||||
|
--skip-tests) SKIP_TESTS="-skip-tests"; shift ;; |
||||
|
-v|--verbosity) VERBOSITY="$2"; shift ;; |
||||
|
-d|--dryrun) DRYRUN="-dryrun" ;; |
||||
|
--version) SHOW_VERSION=true ;; |
||||
|
--) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; |
||||
|
*) SCRIPT_ARGUMENTS+=("$1") ;; |
||||
|
esac |
||||
|
shift |
||||
|
done |
||||
|
|
||||
|
# Make sure the tools folder exist. |
||||
|
if [ ! -d "$TOOLS_DIR" ]; then |
||||
|
mkdir "$TOOLS_DIR" |
||||
|
fi |
||||
|
|
||||
|
# Make sure that packages.config exist. |
||||
|
if [ ! -f "$TOOLS_DIR/packages.config" ]; then |
||||
|
echo "Downloading packages.config..." |
||||
|
curl -Lsfo "$TOOLS_DIR/packages.config" http://cakebuild.net/download/bootstrapper/packages |
||||
|
if [ $? -ne 0 ]; then |
||||
|
echo "An error occured while downloading packages.config." |
||||
|
exit 1 |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
# Download NuGet if it does not exist. |
||||
|
if [ ! -f "$NUGET_EXE" ]; then |
||||
|
echo "Downloading NuGet..." |
||||
|
curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe |
||||
|
if [ $? -ne 0 ]; then |
||||
|
echo "An error occured while downloading nuget.exe." |
||||
|
exit 1 |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
# Restore tools from NuGet. |
||||
|
pushd "$TOOLS_DIR" >/dev/null |
||||
|
if [ ! -f $PACKAGES_CONFIG_MD5 ] || [ "$( cat $PACKAGES_CONFIG_MD5 | sed 's/\r$//' )" != "$( $MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' )" ]; then |
||||
|
find . -type d ! -name . | xargs rm -rf |
||||
|
fi |
||||
|
|
||||
|
mono "$NUGET_EXE" install -ExcludeVersion |
||||
|
if [ $? -ne 0 ]; then |
||||
|
echo "Could not restore NuGet packages." |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
$MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' >| $PACKAGES_CONFIG_MD5 |
||||
|
|
||||
|
popd >/dev/null |
||||
|
|
||||
|
# Make sure that Cake has been installed. |
||||
|
if [ ! -f "$CAKE_EXE" ]; then |
||||
|
echo "Could not find Cake.exe at '$CAKE_EXE'." |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Start Cake |
||||
|
if $SHOW_VERSION; then |
||||
|
exec mono "$CAKE_EXE" -version |
||||
|
else |
||||
|
exec mono "$CAKE_EXE" $SCRIPT -verbosity=$VERBOSITY -platform="$PLATFORM" -configuration="$CONFIGURATION" -target=$TARGET $DRYRUN $SKIP_TESTS "${SCRIPT_ARGUMENTS[@]}" |
||||
|
fi |
||||
@ -0,0 +1,86 @@ |
|||||
|
# Avalonia NuGet Packages |
||||
|
|
||||
|
Avalonia is divided into several `NuGet` packages. |
||||
|
|
||||
|
* The `Avalonia` package contains core portable class libraries. |
||||
|
* The `Dekstop` and `Mobile` packages contain platform specific windowing and rendering back-ends. |
||||
|
* The `Avalonia.Desktop` package is intended to be used by the end users targeting multiple desktop platforms (`Windows`, `Linux` and `OSX`). |
||||
|
* The `Avalonia.iOS` and `Avalonia.Android` packages are intended to be used by the end users targeting specific mobile platforms. |
||||
|
* The `Avalonia.Mobile` package is intended to be used by the end users targeting multiple mobile platforms (`Android` and `iOS`). |
||||
|
|
||||
|
## Core |
||||
|
|
||||
|
* Avalonia (.nupkg) |
||||
|
- Avalonia.Animation (.dll) |
||||
|
- Avalonia.Base (.dll) |
||||
|
- Avalonia.Controls (.dll) |
||||
|
- Avalonia.DesignerSupport (.dll) |
||||
|
- Avalonia.Diagnostics (.dll) |
||||
|
- Avalonia.Input (.dll) |
||||
|
- Avalonia.Interactivity (.dll) |
||||
|
- Avalonia.Layout (.dll) |
||||
|
- Avalonia.Logging.Serilog (.dll) |
||||
|
- Avalonia.SceneGraph (.dll) |
||||
|
- Avalonia.Styling (.dll) |
||||
|
- Avalonia.ReactiveUI (.dll) |
||||
|
- Avalonia.Themes.Default (.dll) |
||||
|
- Avalonia.Markup (.dll) |
||||
|
- Avalonia.Markup.Xaml (.dll) |
||||
|
- Serilog (.nupkg) |
||||
|
- Splat (.nupkg) |
||||
|
- Sprache (.nupkg) |
||||
|
- System.Reactive (.nupkg) |
||||
|
|
||||
|
* Avalonia.HtmlRenderer (.nupkg) |
||||
|
- Avalonia (.nupkg) |
||||
|
|
||||
|
## Desktop |
||||
|
|
||||
|
* Avalonia.Win32 (.nupkg) |
||||
|
- Avalonia.Win32 (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
|
||||
|
* Avalonia.Direct2D1 (.nupkg) |
||||
|
- Avalonia.Direct2D1 (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
- SharpDX (.nupkg) |
||||
|
- SharpDX.Direct2D1 (.nupkg) |
||||
|
- SharpDX.DXGI (.nupkg) |
||||
|
|
||||
|
* Avalonia.Gtk (.nupkg) |
||||
|
- Avalonia.Gtk (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
|
||||
|
* Avalonia.Cairo (.nupkg) |
||||
|
- Avalonia.Cairo (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
|
||||
|
* Avalonia.Skia.Desktop (.nupkg) |
||||
|
- Avalonia.Skia.Desktop (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
- SkiaSharp (.nupkg) |
||||
|
|
||||
|
* Avalonia.Desktop (.nupkg) |
||||
|
- Avalonia.Win32 (.nupkg) |
||||
|
- Avalonia.Direct2D1 (.nupkg) |
||||
|
- Avalonia.Gtk (.nupkg) |
||||
|
- Avalonia.Cairo (.nupkg) |
||||
|
- Avalonia.Skia.Desktop (.nupkg) |
||||
|
|
||||
|
## Mobile |
||||
|
|
||||
|
* Avalonia.Android (.nupkg) |
||||
|
- Avalonia.Android (.dll) |
||||
|
- Avalonia.Skia.Android (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
- SkiaSharp (.nupkg) |
||||
|
|
||||
|
* Avalonia.iOS (.nupkg) |
||||
|
- Avalonia.iOS (.dll) |
||||
|
- Avalonia.Skia.iOS (.dll) |
||||
|
- Avalonia (.nupkg) |
||||
|
- SkiaSharp (.nupkg) |
||||
|
|
||||
|
* Avalonia.Mobile (.nupkg) |
||||
|
- Avalonia.Android (.nupkg) |
||||
|
- Avalonia.iOS (.nupkg) |
||||
@ -1,2 +1,6 @@ |
|||||
- name: Getting Started |
- name: Getting Started |
||||
href: gettingstarted.md |
href: gettingstarted.md |
||||
|
- name: Avalonia NuGet Packages |
||||
|
href: nuget.md |
||||
|
- name: Avalonia for WPF Developers |
||||
|
href: from-wpf.md |
||||
|
|||||
@ -1,2 +0,0 @@ |
|||||
Avalonia |
|
||||
*.nupkg |
|
||||
@ -1,35 +0,0 @@ |
|||||
$ErrorActionPreference = "Stop" |
|
||||
$scriptpath = $MyInvocation.MyCommand.Path |
|
||||
$dir = Split-Path $scriptpath |
|
||||
Push-Location $dir |
|
||||
|
|
||||
|
|
||||
sv version $env:APPVEYOR_BUILD_NUMBER |
|
||||
#sv version "1-debug" |
|
||||
|
|
||||
sv version 0.4.1-build$version-alpha |
|
||||
sv key $env:myget_key |
|
||||
|
|
||||
. ".\include.ps1" |
|
||||
.\build-version.ps1 $version |
|
||||
|
|
||||
sv reponame $env:APPVEYOR_REPO_NAME |
|
||||
sv repobranch $env:APPVEYOR_REPO_BRANCH |
|
||||
sv pullreq $env:APPVEYOR_PULL_REQUEST_NUMBER |
|
||||
|
|
||||
echo "Checking for publishing" |
|
||||
echo "$reponame $repobranch $pullreq" |
|
||||
if ([string]::IsNullOrWhiteSpace($pullreq)) |
|
||||
{ |
|
||||
echo "Build is not a PR" |
|
||||
if($repobranch -eq "master") |
|
||||
{ |
|
||||
echo "Repo branch matched" |
|
||||
foreach($pkg in $Packages) |
|
||||
{ |
|
||||
nuget.exe push "$($pkg).$($version).nupkg" $key -Source https://www.myget.org/F/avalonia-ci/api/v2/package |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
@ -1,84 +0,0 @@ |
|||||
$ErrorActionPreference = "Stop" |
|
||||
|
|
||||
. ".\include.ps1" |
|
||||
|
|
||||
foreach($pkg in $Packages) |
|
||||
{ |
|
||||
rm -Force -Recurse .\$pkg -ErrorAction SilentlyContinue |
|
||||
} |
|
||||
|
|
||||
rm -Force -Recurse *.nupkg -ErrorAction SilentlyContinue |
|
||||
Copy-Item template Avalonia -Recurse |
|
||||
sv lib "Avalonia\lib\portable-windows8+net45" |
|
||||
sv build "Avalonia.Desktop\lib\net45" |
|
||||
|
|
||||
sv skia_root "Avalonia.Skia.Desktop" |
|
||||
sv skia_lib "Avalonia.Skia.Desktop\lib\net45" |
|
||||
sv android "Avalonia.Android\lib\MonoAndroid10" |
|
||||
sv ios "Avalonia.iOS\lib\Xamarin.iOS10" |
|
||||
|
|
||||
mkdir $lib -ErrorAction SilentlyContinue |
|
||||
mkdir $build -ErrorAction SilentlyContinue |
|
||||
mkdir $skia_lib |
|
||||
mkdir $android |
|
||||
mkdir $ios |
|
||||
|
|
||||
|
|
||||
Copy-Item ..\src\Avalonia.Animation\bin\Release\Avalonia.Animation.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Animation\bin\Release\Avalonia.Animation.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Base\bin\Release\Avalonia.Base.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Base\bin\Release\Avalonia.Base.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Controls\bin\Release\Avalonia.Controls.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Controls\bin\Release\Avalonia.Controls.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.DesignerSupport\bin\Release\Avalonia.DesignerSupport.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.DesignerSupport\bin\Release\Avalonia.DesignerSupport.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Diagnostics\bin\Release\\Avalonia.Diagnostics.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Diagnostics\bin\Release\\Avalonia.Diagnostics.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Input\bin\Release\Avalonia.Input.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Input\bin\Release\Avalonia.Input.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Interactivity\bin\Release\Avalonia.Interactivity.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Interactivity\bin\Release\Avalonia.Interactivity.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Layout\bin\Release\Avalonia.Layout.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Layout\bin\Release\Avalonia.Layout.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Logging.Serilog\bin\Release\Avalonia.Logging.Serilog.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Logging.Serilog\bin\Release\Avalonia.Logging.Serilog.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.SceneGraph\bin\Release\Avalonia.SceneGraph.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.SceneGraph\bin\Release\Avalonia.SceneGraph.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Styling\bin\Release\Avalonia.Styling.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Styling\bin\Release\Avalonia.Styling.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.Themes.Default\bin\Release\Avalonia.Themes.Default.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.Themes.Default\bin\Release\Avalonia.Themes.Default.xml $lib |
|
||||
Copy-Item ..\src\Markup\Avalonia.Markup\bin\Release\Avalonia.Markup.dll $lib |
|
||||
Copy-Item ..\src\Markup\Avalonia.Markup\bin\Release\Avalonia.Markup.xml $lib |
|
||||
Copy-Item ..\src\Markup\Avalonia.Markup.Xaml\bin\Release\Avalonia.Markup.Xaml.dll $lib |
|
||||
Copy-Item ..\src\Markup\Avalonia.Markup.Xaml\bin\Release\Avalonia.Markup.Xaml.xml $lib |
|
||||
Copy-Item ..\src\Avalonia.HtmlRenderer\bin\Release\Avalonia.HtmlRenderer.dll $lib |
|
||||
Copy-Item ..\src\Avalonia.ReactiveUI\bin\Release\Avalonia.ReactiveUI.dll $lib |
|
||||
|
|
||||
Copy-Item ..\src\Windows\Avalonia.Direct2D1\bin\Release\Avalonia.Direct2D1.dll $build |
|
||||
Copy-Item ..\src\Windows\Avalonia.Win32\bin\Release\Avalonia.Win32.dll $build |
|
||||
Copy-Item ..\src\Gtk\Avalonia.Gtk\bin\Release\Avalonia.Gtk.dll $build |
|
||||
Copy-Item ..\src\Gtk\Avalonia.Cairo\bin\Release\Avalonia.Cairo.dll $build |
|
||||
|
|
||||
Copy-Item ..\src\Skia\Avalonia.Skia.Desktop\bin\x86\Release\Avalonia.Skia.Desktop.dll $skia_lib |
|
||||
|
|
||||
Copy-Item ..\src\Android\Avalonia.Android\bin\Release\Avalonia.Android.dll $android |
|
||||
Copy-Item ..\src\Skia\Avalonia.Skia.Android\bin\Release\Avalonia.Skia.Android.dll $android |
|
||||
|
|
||||
Copy-Item ..\src\iOS\Avalonia.iOS\bin\iPhone\Release\Avalonia.iOS.dll $ios |
|
||||
Copy-Item ..\src\Skia\Avalonia.Skia.iOS\bin\iPhone\Release\Avalonia.Skia.iOS.dll $ios |
|
||||
|
|
||||
foreach($pkg in $Packages) |
|
||||
{ |
|
||||
(gc Avalonia\$pkg.nuspec).replace('#VERSION#', $args[0]) | sc $pkg\$pkg.nuspec |
|
||||
} |
|
||||
|
|
||||
foreach($pkg in $Packages) |
|
||||
{ |
|
||||
nuget.exe pack $pkg\$pkg.nuspec |
|
||||
} |
|
||||
|
|
||||
foreach($pkg in $Packages) |
|
||||
{ |
|
||||
rm -Force -Recurse .\$pkg |
|
||||
} |
|
||||
@ -1 +0,0 @@ |
|||||
.\build-version.ps1 0.4.1 |
|
||||
@ -1 +0,0 @@ |
|||||
$Packages = @("Avalonia", "Avalonia.Desktop", "Avalonia.Skia.Desktop", "Avalonia.Android", "Avalonia.iOS") |
|
||||
@ -1,28 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<package> |
|
||||
<metadata> |
|
||||
<id>Avalonia.Android</id> |
|
||||
<version>#VERSION#</version> |
|
||||
<authors>Avalonia Team</authors> |
|
||||
<owners>stevenk</owners> |
|
||||
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> |
|
||||
<projectUrl>https://github.com/AvaloniaUI/Avalonia/</projectUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>The Avalonia UI framework</description> |
|
||||
<releaseNotes></releaseNotes> |
|
||||
<copyright>Copyright 2015</copyright> |
|
||||
<tags>Avalonia</tags> |
|
||||
<dependencies> |
|
||||
<dependency id="Serilog" version="1.5.14" /> |
|
||||
<dependency id="Splat" version="1.6.2" /> |
|
||||
<dependency id="Sprache" version="2.0.0.50" /> |
|
||||
<dependency id="System.Reactive" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Core" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Interfaces" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Linq" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.PlatformServices" version="3.0.0" /> |
|
||||
<dependency id="SkiaSharp" version="1.53.0"/> |
|
||||
<dependency id="Avalonia" version="#VERSION#" /> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
</package> |
|
||||
@ -1,30 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<package> |
|
||||
<metadata> |
|
||||
<id>Avalonia.Desktop</id> |
|
||||
<version>#VERSION#</version> |
|
||||
<authors>Avalonia Team</authors> |
|
||||
<owners>stevenk</owners> |
|
||||
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> |
|
||||
<projectUrl>https://github.com/AvaloniaUI/Avalonia/</projectUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>The Avalonia UI framework</description> |
|
||||
<releaseNotes></releaseNotes> |
|
||||
<copyright>Copyright 2015</copyright> |
|
||||
<tags>Avalonia</tags> |
|
||||
<dependencies> |
|
||||
<dependency id="Serilog" version="1.5.14" /> |
|
||||
<dependency id="Splat" version="1.6.2" /> |
|
||||
<dependency id="Sprache" version="2.0.0.50" /> |
|
||||
<dependency id="System.Reactive" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Core" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Interfaces" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Linq" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.PlatformServices" version="3.0.0" /> |
|
||||
<dependency id="SharpDX" version="3.0.2"/> |
|
||||
<dependency id="SharpDX.Direct2D1" version="3.0.2"/> |
|
||||
<dependency id="SharpDX.DXGI" version="3.0.2"/> |
|
||||
<dependency id="Avalonia" version="#VERSION#" /> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
</package> |
|
||||
@ -1,20 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<package> |
|
||||
<metadata> |
|
||||
<id>Avalonia.Skia.Desktop</id> |
|
||||
<version>#VERSION#</version> |
|
||||
<authors>Avalonia Team</authors> |
|
||||
<owners>stevenk</owners> |
|
||||
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> |
|
||||
<projectUrl>https://github.com/AvaloniaUI/Avalonia/</projectUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>The Avalonia UI framework</description> |
|
||||
<releaseNotes></releaseNotes> |
|
||||
<copyright>Copyright 2015</copyright> |
|
||||
<tags>Avalonia</tags> |
|
||||
<dependencies> |
|
||||
<dependency id="SkiaSharp" version="1.53.0"/> |
|
||||
<dependency id="Avalonia" version="#VERSION#" /> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
</package> |
|
||||
@ -1,27 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<package> |
|
||||
<metadata> |
|
||||
<id>Avalonia.iOS</id> |
|
||||
<version>#VERSION#</version> |
|
||||
<authors>Avalonia Team</authors> |
|
||||
<owners>stevenk</owners> |
|
||||
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> |
|
||||
<projectUrl>https://github.com/AvaloniaUI/Avalonia/</projectUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>The Avalonia UI framework</description> |
|
||||
<releaseNotes></releaseNotes> |
|
||||
<copyright>Copyright 2015</copyright> |
|
||||
<tags>Avalonia</tags> |
|
||||
<dependencies> |
|
||||
<dependency id="Serilog" version="1.5.14" /> |
|
||||
<dependency id="Splat" version="1.6.2" /> |
|
||||
<dependency id="Sprache" version="2.0.0.50" /> |
|
||||
<dependency id="System.Reactive" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Core" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Interfaces" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Linq" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.PlatformServices" version="3.0.0" /> |
|
||||
<dependency id="Avalonia" version="#VERSION#" /> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
</package> |
|
||||
@ -1,26 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<package> |
|
||||
<metadata> |
|
||||
<id>Avalonia</id> |
|
||||
<version>#VERSION#</version> |
|
||||
<authors>Avalonia Team</authors> |
|
||||
<owners>stevenk</owners> |
|
||||
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> |
|
||||
<projectUrl>https://github.com/AvaloniaUI/Avalonia/</projectUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>The Avalonia UI framework</description> |
|
||||
<releaseNotes>Initial alpha release.</releaseNotes> |
|
||||
<copyright>Copyright 2015</copyright> |
|
||||
<tags>Avalonia</tags> |
|
||||
<dependencies> |
|
||||
<dependency id="Serilog" version="1.5.14" /> |
|
||||
<dependency id="Splat" version="1.6.2" /> |
|
||||
<dependency id="Sprache" version="2.0.0.50" /> |
|
||||
<dependency id="System.Reactive" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Core" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Interfaces" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.Linq" version="3.0.0" /> |
|
||||
<dependency id="System.Reactive.PlatformServices" version="3.0.0" /> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
</package> |
|
||||
@ -0,0 +1,24 @@ |
|||||
|
<UserControl xmlns="https://github.com/avaloniaui" |
||||
|
xmlns:pages="clr-namespace:ControlCatalog.Pages;assembly=ControlCatalog" |
||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
||||
|
<TabControl Classes="sidebar"> |
||||
|
<TabControl.Transition> |
||||
|
<CrossFade Duration="0.25"/> |
||||
|
</TabControl.Transition> |
||||
|
<TabItem Header="Border"><pages:BorderPage/></TabItem> |
||||
|
<TabItem Header="Button"><pages:ButtonPage/></TabItem> |
||||
|
<TabItem Header="Canvas"><pages:CanvasPage/></TabItem> |
||||
|
<TabItem Header="Carousel"><pages:CarouselPage/></TabItem> |
||||
|
<TabItem Header="CheckBox"><pages:CheckBoxPage/></TabItem> |
||||
|
<TabItem Header="DropDown"><pages:DropDownPage/></TabItem> |
||||
|
<TabItem Header="Expander"><pages:ExpanderPage/></TabItem> |
||||
|
<TabItem Header="Image"><pages:ImagePage/></TabItem> |
||||
|
<TabItem Header="LayoutTransformControl"><pages:LayoutTransformControlPage/></TabItem> |
||||
|
<TabItem Header="Menu"><pages:MenuPage/></TabItem> |
||||
|
<TabItem Header="RadioButton"><pages:RadioButtonPage/></TabItem> |
||||
|
<TabItem Header="Slider"><pages:SliderPage/></TabItem> |
||||
|
<TabItem Header="TextBox"><pages:TextBoxPage/></TabItem> |
||||
|
<TabItem Header="ToolTip"><pages:ToolTipPage/></TabItem> |
||||
|
<TabItem Header="TreeView"><pages:TreeViewPage/></TabItem> |
||||
|
</TabControl> |
||||
|
</UserControl> |
||||
@ -0,0 +1,19 @@ |
|||||
|
using Avalonia; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Markup.Xaml; |
||||
|
|
||||
|
namespace ControlCatalog |
||||
|
{ |
||||
|
public class MainView : UserControl |
||||
|
{ |
||||
|
public MainView() |
||||
|
{ |
||||
|
this.InitializeComponent(); |
||||
|
} |
||||
|
|
||||
|
private void InitializeComponent() |
||||
|
{ |
||||
|
AvaloniaXamlLoader.Load(this); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,26 +1,6 @@ |
|||||
<Window xmlns="https://github.com/avaloniaui" |
<Window xmlns="https://github.com/avaloniaui" MinWidth="500" MinHeight="300" |
||||
xmlns:pages="clr-namespace:ControlCatalog.Pages;assembly=ControlCatalog" |
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
||||
Title="Avalonia Control Gallery" |
Title="Avalonia Control Gallery" |
||||
Icon="resm:ControlCatalog.Assets.test_icon.ico?assembly=ControlCatalog"> |
Icon="resm:ControlCatalog.Assets.test_icon.ico?assembly=ControlCatalog" |
||||
<TabControl Classes="sidebar"> |
xmlns:local="clr-namespace:ControlCatalog;assembly=ControlCatalog"> |
||||
<TabControl.Transition> |
<local:MainView/> |
||||
<CrossFade Duration="0.25"/> |
|
||||
</TabControl.Transition> |
|
||||
<TabItem Header="Border"><pages:BorderPage/></TabItem> |
|
||||
<TabItem Header="Button"><pages:ButtonPage/></TabItem> |
|
||||
<TabItem Header="Canvas"><pages:CanvasPage/></TabItem> |
|
||||
<TabItem Header="Carousel"><pages:CarouselPage/></TabItem> |
|
||||
<TabItem Header="CheckBox"><pages:CheckBoxPage/></TabItem> |
|
||||
<TabItem Header="DropDown"><pages:DropDownPage/></TabItem> |
|
||||
<TabItem Header="Expander"><pages:ExpanderPage/></TabItem> |
|
||||
<TabItem Header="Image"><pages:ImagePage/></TabItem> |
|
||||
<TabItem Header="LayoutTransformControl"><pages:LayoutTransformControlPage/></TabItem> |
|
||||
<TabItem Header="Menu"><pages:MenuPage/></TabItem> |
|
||||
<TabItem Header="RadioButton"><pages:RadioButtonPage/></TabItem> |
|
||||
<TabItem Header="Slider"><pages:SliderPage/></TabItem> |
|
||||
<TabItem Header="TextBox"><pages:TextBoxPage/></TabItem> |
|
||||
<TabItem Header="ToolTip"><pages:ToolTipPage/></TabItem> |
|
||||
<TabItem Header="TreeView"><pages:TreeViewPage/></TabItem> |
|
||||
</TabControl> |
|
||||
</Window> |
</Window> |
||||
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
|
<configuration> |
||||
|
<startup> |
||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> |
||||
|
</startup> |
||||
|
</configuration> |
||||
@ -0,0 +1,160 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
||||
|
<PropertyGroup> |
||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
||||
|
<ProjectGuid>{BD7F352C-6DC1-4740-BAF2-2D34A038728C}</ProjectGuid> |
||||
|
<OutputType>WinExe</OutputType> |
||||
|
<AppDesignerFolder>Properties</AppDesignerFolder> |
||||
|
<RootNamespace>GtkInteropDemo</RootNamespace> |
||||
|
<AssemblyName>GtkInteropDemo</AssemblyName> |
||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion> |
||||
|
<FileAlignment>512</FileAlignment> |
||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> |
||||
|
</PropertyGroup> |
||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
||||
|
<PlatformTarget>AnyCPU</PlatformTarget> |
||||
|
<DebugSymbols>true</DebugSymbols> |
||||
|
<DebugType>full</DebugType> |
||||
|
<Optimize>false</Optimize> |
||||
|
<OutputPath>bin\Debug\</OutputPath> |
||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants> |
||||
|
<ErrorReport>prompt</ErrorReport> |
||||
|
<WarningLevel>4</WarningLevel> |
||||
|
<UseVSHostingProcess>false</UseVSHostingProcess> |
||||
|
</PropertyGroup> |
||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
||||
|
<PlatformTarget>AnyCPU</PlatformTarget> |
||||
|
<DebugType>pdbonly</DebugType> |
||||
|
<Optimize>true</Optimize> |
||||
|
<OutputPath>bin\Release\</OutputPath> |
||||
|
<DefineConstants>TRACE</DefineConstants> |
||||
|
<ErrorReport>prompt</ErrorReport> |
||||
|
<WarningLevel>4</WarningLevel> |
||||
|
</PropertyGroup> |
||||
|
<ItemGroup> |
||||
|
<Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> |
||||
|
<Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> |
||||
|
<Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> |
||||
|
<Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> |
||||
|
<Reference Include="System" /> |
||||
|
<Reference Include="System.Core" /> |
||||
|
<Reference Include="System.Xml.Linq" /> |
||||
|
<Reference Include="System.Data.DataSetExtensions" /> |
||||
|
<Reference Include="Microsoft.CSharp" /> |
||||
|
<Reference Include="System.Data" /> |
||||
|
<Reference Include="System.Deployment" /> |
||||
|
<Reference Include="System.Drawing" /> |
||||
|
<Reference Include="System.Net.Http" /> |
||||
|
<Reference Include="System.Xml" /> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<Compile Include="MainWindow.cs" /> |
||||
|
<Compile Include="Program.cs" /> |
||||
|
<Compile Include="Properties\AssemblyInfo.cs" /> |
||||
|
<EmbeddedResource Include="Properties\Resources.resx"> |
||||
|
<Generator>ResXFileCodeGenerator</Generator> |
||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput> |
||||
|
<SubType>Designer</SubType> |
||||
|
</EmbeddedResource> |
||||
|
<Compile Include="Properties\Resources.Designer.cs"> |
||||
|
<AutoGen>True</AutoGen> |
||||
|
<DependentUpon>Resources.resx</DependentUpon> |
||||
|
</Compile> |
||||
|
<None Include="Properties\Settings.settings"> |
||||
|
<Generator>SettingsSingleFileGenerator</Generator> |
||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput> |
||||
|
</None> |
||||
|
<Compile Include="Properties\Settings.Designer.cs"> |
||||
|
<AutoGen>True</AutoGen> |
||||
|
<DependentUpon>Settings.settings</DependentUpon> |
||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput> |
||||
|
</Compile> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<None Include="App.config" /> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Animation\Avalonia.Animation.csproj"> |
||||
|
<Project>{d211e587-d8bc-45b9-95a4-f297c8fa5200}</Project> |
||||
|
<Name>Avalonia.Animation</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Base\Avalonia.Base.csproj"> |
||||
|
<Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project> |
||||
|
<Name>Avalonia.Base</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Controls\Avalonia.Controls.csproj"> |
||||
|
<Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project> |
||||
|
<Name>Avalonia.Controls</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj"> |
||||
|
<Project>{7062ae20-5dcc-4442-9645-8195bdece63e}</Project> |
||||
|
<Name>Avalonia.Diagnostics</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj"> |
||||
|
<Project>{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}</Project> |
||||
|
<Name>Avalonia.DotNetFrameworkRuntime</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Input\Avalonia.Input.csproj"> |
||||
|
<Project>{62024b2d-53eb-4638-b26b-85eeaa54866e}</Project> |
||||
|
<Name>Avalonia.Input</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj"> |
||||
|
<Project>{6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}</Project> |
||||
|
<Name>Avalonia.Interactivity</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Layout\Avalonia.Layout.csproj"> |
||||
|
<Project>{42472427-4774-4c81-8aff-9f27b8e31721}</Project> |
||||
|
<Name>Avalonia.Layout</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj"> |
||||
|
<Project>{6417b24e-49c2-4985-8db2-3ab9d898ec91}</Project> |
||||
|
<Name>Avalonia.ReactiveUI</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.SceneGraph\Avalonia.SceneGraph.csproj"> |
||||
|
<Project>{eb582467-6abb-43a1-b052-e981ba910e3a}</Project> |
||||
|
<Name>Avalonia.SceneGraph</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Styling\Avalonia.Styling.csproj"> |
||||
|
<Project>{f1baa01a-f176-4c6a-b39d-5b40bb1b148f}</Project> |
||||
|
<Name>Avalonia.Styling</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj"> |
||||
|
<Project>{3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f}</Project> |
||||
|
<Name>Avalonia.Themes.Default</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Gtk\Avalonia.Cairo\Avalonia.Cairo.csproj"> |
||||
|
<Project>{fb05ac90-89ba-4f2f-a924-f37875fb547c}</Project> |
||||
|
<Name>Avalonia.Cairo</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Gtk\Avalonia.Gtk\Avalonia.Gtk.csproj"> |
||||
|
<Project>{54f237d5-a70a-4752-9656-0c70b1a7b047}</Project> |
||||
|
<Name>Avalonia.Gtk</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj"> |
||||
|
<Project>{3e53a01a-b331-47f3-b828-4a5717e77a24}</Project> |
||||
|
<Name>Avalonia.Markup.Xaml</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj"> |
||||
|
<Project>{6417e941-21bc-467b-a771-0de389353ce6}</Project> |
||||
|
<Name>Avalonia.Markup</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Skia\Avalonia.Skia.Desktop\Avalonia.Skia.Desktop.csproj"> |
||||
|
<Project>{925dd807-b651-475f-9f7c-cbeb974ce43d}</Project> |
||||
|
<Name>Avalonia.Skia.Desktop</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\ControlCatalog\ControlCatalog.csproj"> |
||||
|
<Project>{d0a739b9-3c68-4ba6-a328-41606954b6bd}</Project> |
||||
|
<Name>ControlCatalog</Name> |
||||
|
</ProjectReference> |
||||
|
</ItemGroup> |
||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. |
||||
|
Other similar extension points exist, see Microsoft.Common.targets. |
||||
|
<Target Name="BeforeBuild"> |
||||
|
</Target> |
||||
|
<Target Name="AfterBuild"> |
||||
|
</Target> |
||||
|
--> |
||||
|
</Project> |
||||
@ -0,0 +1,30 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia.Diagnostics; |
||||
|
using Avalonia.Gtk.Embedding; |
||||
|
using ControlCatalog; |
||||
|
using Gtk; |
||||
|
|
||||
|
namespace GtkInteropDemo |
||||
|
{ |
||||
|
class MainWindow : Window |
||||
|
{ |
||||
|
public MainWindow() : base("Gtk Embedding Demo") |
||||
|
{ |
||||
|
var root = new HBox(); |
||||
|
var left = new VBox(); |
||||
|
left.Add(new Button("I'm GTK button")); |
||||
|
left.Add(new Calendar()); |
||||
|
root.PackEnd(left, false, false, 0); |
||||
|
var host = new GtkAvaloniaControlHost() {Content = new MainView()}; |
||||
|
host.SetSizeRequest(600, 600); |
||||
|
root.PackStart(host, true, true, 0); |
||||
|
Add(root); |
||||
|
|
||||
|
ShowAll(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia; |
||||
|
using Avalonia.Controls; |
||||
|
using ControlCatalog; |
||||
|
|
||||
|
namespace GtkInteropDemo |
||||
|
{ |
||||
|
static class Program |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// The main entry point for the application.
|
||||
|
/// </summary>
|
||||
|
[STAThread] |
||||
|
static void Main() |
||||
|
{ |
||||
|
AppBuilder.Configure<App>().UseGtk().UseCairo().SetupWithoutStarting(); |
||||
|
new MainWindow().Show(); |
||||
|
Gtk.Application.Run(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
using System.Reflection; |
||||
|
using System.Runtime.CompilerServices; |
||||
|
using System.Runtime.InteropServices; |
||||
|
|
||||
|
// General Information about an assembly is controlled through the following
|
||||
|
// set of attributes. Change these attribute values to modify the information
|
||||
|
// associated with an assembly.
|
||||
|
[assembly: AssemblyTitle("GtkInteropDemo")] |
||||
|
[assembly: AssemblyDescription("")] |
||||
|
[assembly: AssemblyConfiguration("")] |
||||
|
[assembly: AssemblyCompany("")] |
||||
|
[assembly: AssemblyProduct("GtkInteropDemo")] |
||||
|
[assembly: AssemblyCopyright("Copyright © 2016")] |
||||
|
[assembly: AssemblyTrademark("")] |
||||
|
[assembly: AssemblyCulture("")] |
||||
|
|
||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
|
// to COM components. If you need to access a type in this assembly from
|
||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||
|
[assembly: ComVisible(false)] |
||||
|
|
||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
|
[assembly: Guid("bd7f352c-6dc1-4740-baf2-2d34a038728c")] |
||||
|
|
||||
|
// Version information for an assembly consists of the following four values:
|
||||
|
//
|
||||
|
// Major Version
|
||||
|
// Minor Version
|
||||
|
// Build Number
|
||||
|
// Revision
|
||||
|
//
|
||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
|
// by using the '*' as shown below:
|
||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||
|
[assembly: AssemblyFileVersion("1.0.0.0")] |
||||
@ -0,0 +1,71 @@ |
|||||
|
//------------------------------------------------------------------------------
|
||||
|
// <auto-generated>
|
||||
|
// This code was generated by a tool.
|
||||
|
// Runtime Version:4.0.30319.42000
|
||||
|
//
|
||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
|
// the code is regenerated.
|
||||
|
// </auto-generated>
|
||||
|
//------------------------------------------------------------------------------
|
||||
|
|
||||
|
namespace GtkInteropDemo.Properties |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
|
/// </summary>
|
||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
|
// class via a tool like ResGen or Visual Studio.
|
||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
|
// with the /str option, or rebuild your VS project.
|
||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] |
||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
||||
|
internal class Resources |
||||
|
{ |
||||
|
|
||||
|
private static global::System.Resources.ResourceManager resourceMan; |
||||
|
|
||||
|
private static global::System.Globalization.CultureInfo resourceCulture; |
||||
|
|
||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] |
||||
|
internal Resources() |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||
|
/// </summary>
|
||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
||||
|
internal static global::System.Resources.ResourceManager ResourceManager |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
if ((resourceMan == null)) |
||||
|
{ |
||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GtkInteropDemo.Properties.Resources", typeof(Resources).Assembly); |
||||
|
resourceMan = temp; |
||||
|
} |
||||
|
return resourceMan; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||
|
/// resource lookups using this strongly typed resource class.
|
||||
|
/// </summary>
|
||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
||||
|
internal static global::System.Globalization.CultureInfo Culture |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return resourceCulture; |
||||
|
} |
||||
|
set |
||||
|
{ |
||||
|
resourceCulture = value; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,117 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<root> |
||||
|
<!-- |
||||
|
Microsoft ResX Schema |
||||
|
|
||||
|
Version 2.0 |
||||
|
|
||||
|
The primary goals of this format is to allow a simple XML format |
||||
|
that is mostly human readable. The generation and parsing of the |
||||
|
various data types are done through the TypeConverter classes |
||||
|
associated with the data types. |
||||
|
|
||||
|
Example: |
||||
|
|
||||
|
... ado.net/XML headers & schema ... |
||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader> |
||||
|
<resheader name="version">2.0</resheader> |
||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value> |
||||
|
</data> |
||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
||||
|
<comment>This is a comment</comment> |
||||
|
</data> |
||||
|
|
||||
|
There are any number of "resheader" rows that contain simple |
||||
|
name/value pairs. |
||||
|
|
||||
|
Each data row contains a name, and value. The row also contains a |
||||
|
type or mimetype. Type corresponds to a .NET class that support |
||||
|
text/value conversion through the TypeConverter architecture. |
||||
|
Classes that don't support this are serialized and stored with the |
||||
|
mimetype set. |
||||
|
|
||||
|
The mimetype is used for serialized objects, and tells the |
||||
|
ResXResourceReader how to depersist the object. This is currently not |
||||
|
extensible. For a given mimetype the value must be set accordingly: |
||||
|
|
||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format |
||||
|
that the ResXResourceWriter will generate, however the reader can |
||||
|
read any of the formats listed below. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.binary.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.soap.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64 |
||||
|
value : The object must be serialized into a byte array |
||||
|
: using a System.ComponentModel.TypeConverter |
||||
|
: and then encoded with base64 encoding. |
||||
|
--> |
||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
||||
|
<xsd:element name="root" msdata:IsDataSet="true"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:choice maxOccurs="unbounded"> |
||||
|
<xsd:element name="metadata"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="assembly"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:attribute name="alias" type="xsd:string" /> |
||||
|
<xsd:attribute name="name" type="xsd:string" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="data"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="resheader"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" use="required" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:choice> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:schema> |
||||
|
<resheader name="resmimetype"> |
||||
|
<value>text/microsoft-resx</value> |
||||
|
</resheader> |
||||
|
<resheader name="version"> |
||||
|
<value>2.0</value> |
||||
|
</resheader> |
||||
|
<resheader name="reader"> |
||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
<resheader name="writer"> |
||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
</root> |
||||
@ -0,0 +1,30 @@ |
|||||
|
//------------------------------------------------------------------------------
|
||||
|
// <auto-generated>
|
||||
|
// This code was generated by a tool.
|
||||
|
// Runtime Version:4.0.30319.42000
|
||||
|
//
|
||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
|
// the code is regenerated.
|
||||
|
// </auto-generated>
|
||||
|
//------------------------------------------------------------------------------
|
||||
|
|
||||
|
namespace GtkInteropDemo.Properties |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] |
||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase |
||||
|
{ |
||||
|
|
||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); |
||||
|
|
||||
|
public static Settings Default |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return defaultInstance; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
<?xml version='1.0' encoding='utf-8'?> |
||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> |
||||
|
<Profiles> |
||||
|
<Profile Name="(Default)" /> |
||||
|
</Profiles> |
||||
|
<Settings /> |
||||
|
</SettingsFile> |
||||
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
|
<configuration> |
||||
|
<startup> |
||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> |
||||
|
</startup> |
||||
|
</configuration> |
||||
@ -0,0 +1,119 @@ |
|||||
|
using Avalonia.Win32.Embedding; |
||||
|
|
||||
|
namespace WindowsInteropTest |
||||
|
{ |
||||
|
partial class EmbedToWinFormsDemo |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Required designer variable.
|
||||
|
/// </summary>
|
||||
|
private System.ComponentModel.IContainer components = null; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Clean up any resources being used.
|
||||
|
/// </summary>
|
||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
|
protected override void Dispose(bool disposing) |
||||
|
{ |
||||
|
if (disposing && (components != null)) |
||||
|
{ |
||||
|
components.Dispose(); |
||||
|
} |
||||
|
base.Dispose(disposing); |
||||
|
} |
||||
|
|
||||
|
#region Windows Form Designer generated code
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Required method for Designer support - do not modify
|
||||
|
/// the contents of this method with the code editor.
|
||||
|
/// </summary>
|
||||
|
private void InitializeComponent() |
||||
|
{ |
||||
|
this.button1 = new System.Windows.Forms.Button(); |
||||
|
this.monthCalendar1 = new System.Windows.Forms.MonthCalendar(); |
||||
|
this.groupBox1 = new System.Windows.Forms.GroupBox(); |
||||
|
this.groupBox2 = new System.Windows.Forms.GroupBox(); |
||||
|
this.avaloniaHost = new WinFormsAvaloniaControlHost(); |
||||
|
this.groupBox1.SuspendLayout(); |
||||
|
this.groupBox2.SuspendLayout(); |
||||
|
this.SuspendLayout(); |
||||
|
//
|
||||
|
// button1
|
||||
|
//
|
||||
|
this.button1.Location = new System.Drawing.Point(28, 29); |
||||
|
this.button1.Name = "button1"; |
||||
|
this.button1.Size = new System.Drawing.Size(164, 73); |
||||
|
this.button1.TabIndex = 0; |
||||
|
this.button1.Text = "button1"; |
||||
|
this.button1.UseVisualStyleBackColor = true; |
||||
|
//
|
||||
|
// monthCalendar1
|
||||
|
//
|
||||
|
this.monthCalendar1.Location = new System.Drawing.Point(28, 114); |
||||
|
this.monthCalendar1.Name = "monthCalendar1"; |
||||
|
this.monthCalendar1.TabIndex = 1; |
||||
|
//
|
||||
|
// groupBox1
|
||||
|
//
|
||||
|
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) |
||||
|
| System.Windows.Forms.AnchorStyles.Left))); |
||||
|
this.groupBox1.Controls.Add(this.button1); |
||||
|
this.groupBox1.Controls.Add(this.monthCalendar1); |
||||
|
this.groupBox1.Location = new System.Drawing.Point(12, 12); |
||||
|
this.groupBox1.Name = "groupBox1"; |
||||
|
this.groupBox1.Size = new System.Drawing.Size(227, 418); |
||||
|
this.groupBox1.TabIndex = 2; |
||||
|
this.groupBox1.TabStop = false; |
||||
|
this.groupBox1.Text = "WinForms"; |
||||
|
//
|
||||
|
// groupBox2
|
||||
|
//
|
||||
|
this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) |
||||
|
| System.Windows.Forms.AnchorStyles.Left) |
||||
|
| System.Windows.Forms.AnchorStyles.Right))); |
||||
|
this.groupBox2.Controls.Add(this.avaloniaHost); |
||||
|
this.groupBox2.Location = new System.Drawing.Point(245, 12); |
||||
|
this.groupBox2.Name = "groupBox2"; |
||||
|
this.groupBox2.Size = new System.Drawing.Size(501, 418); |
||||
|
this.groupBox2.TabIndex = 3; |
||||
|
this.groupBox2.TabStop = false; |
||||
|
this.groupBox2.Text = "Avalonia"; |
||||
|
//
|
||||
|
// avaloniaHost
|
||||
|
//
|
||||
|
this.avaloniaHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) |
||||
|
| System.Windows.Forms.AnchorStyles.Left) |
||||
|
| System.Windows.Forms.AnchorStyles.Right))); |
||||
|
this.avaloniaHost.Content = null; |
||||
|
this.avaloniaHost.Location = new System.Drawing.Point(6, 19); |
||||
|
this.avaloniaHost.Name = "avaloniaHost"; |
||||
|
this.avaloniaHost.Size = new System.Drawing.Size(489, 393); |
||||
|
this.avaloniaHost.TabIndex = 0; |
||||
|
this.avaloniaHost.Text = "avaloniaHost"; |
||||
|
//
|
||||
|
// EmbedToWinFormsDemo
|
||||
|
//
|
||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); |
||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
||||
|
this.ClientSize = new System.Drawing.Size(758, 442); |
||||
|
this.Controls.Add(this.groupBox2); |
||||
|
this.Controls.Add(this.groupBox1); |
||||
|
this.MinimumSize = new System.Drawing.Size(600, 400); |
||||
|
this.Name = "EmbedToWinFormsDemo"; |
||||
|
this.Text = "EmbedToWinFormsDemo"; |
||||
|
this.groupBox1.ResumeLayout(false); |
||||
|
this.groupBox2.ResumeLayout(false); |
||||
|
this.ResumeLayout(false); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
private System.Windows.Forms.Button button1; |
||||
|
private System.Windows.Forms.MonthCalendar monthCalendar1; |
||||
|
private System.Windows.Forms.GroupBox groupBox1; |
||||
|
private System.Windows.Forms.GroupBox groupBox2; |
||||
|
private WinFormsAvaloniaControlHost avaloniaHost; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel; |
||||
|
using System.Data; |
||||
|
using System.Drawing; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using System.Windows.Forms; |
||||
|
using Avalonia.Controls; |
||||
|
using ControlCatalog; |
||||
|
|
||||
|
namespace WindowsInteropTest |
||||
|
{ |
||||
|
public partial class EmbedToWinFormsDemo : Form |
||||
|
{ |
||||
|
public EmbedToWinFormsDemo() |
||||
|
{ |
||||
|
InitializeComponent(); |
||||
|
avaloniaHost.Content = new MainView(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,120 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<root> |
||||
|
<!-- |
||||
|
Microsoft ResX Schema |
||||
|
|
||||
|
Version 2.0 |
||||
|
|
||||
|
The primary goals of this format is to allow a simple XML format |
||||
|
that is mostly human readable. The generation and parsing of the |
||||
|
various data types are done through the TypeConverter classes |
||||
|
associated with the data types. |
||||
|
|
||||
|
Example: |
||||
|
|
||||
|
... ado.net/XML headers & schema ... |
||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader> |
||||
|
<resheader name="version">2.0</resheader> |
||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value> |
||||
|
</data> |
||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
||||
|
<comment>This is a comment</comment> |
||||
|
</data> |
||||
|
|
||||
|
There are any number of "resheader" rows that contain simple |
||||
|
name/value pairs. |
||||
|
|
||||
|
Each data row contains a name, and value. The row also contains a |
||||
|
type or mimetype. Type corresponds to a .NET class that support |
||||
|
text/value conversion through the TypeConverter architecture. |
||||
|
Classes that don't support this are serialized and stored with the |
||||
|
mimetype set. |
||||
|
|
||||
|
The mimetype is used for serialized objects, and tells the |
||||
|
ResXResourceReader how to depersist the object. This is currently not |
||||
|
extensible. For a given mimetype the value must be set accordingly: |
||||
|
|
||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format |
||||
|
that the ResXResourceWriter will generate, however the reader can |
||||
|
read any of the formats listed below. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.binary.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.soap.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64 |
||||
|
value : The object must be serialized into a byte array |
||||
|
: using a System.ComponentModel.TypeConverter |
||||
|
: and then encoded with base64 encoding. |
||||
|
--> |
||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> |
||||
|
<xsd:element name="root" msdata:IsDataSet="true"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:choice maxOccurs="unbounded"> |
||||
|
<xsd:element name="metadata"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" use="required" type="xsd:string" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" /> |
||||
|
<xsd:attribute ref="xml:space" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="assembly"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:attribute name="alias" type="xsd:string" /> |
||||
|
<xsd:attribute name="name" type="xsd:string" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="data"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
||||
|
<xsd:attribute ref="xml:space" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="resheader"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" use="required" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:choice> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:schema> |
||||
|
<resheader name="resmimetype"> |
||||
|
<value>text/microsoft-resx</value> |
||||
|
</resheader> |
||||
|
<resheader name="version"> |
||||
|
<value>2.0</value> |
||||
|
</resheader> |
||||
|
<resheader name="reader"> |
||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
<resheader name="writer"> |
||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
</root> |
||||
@ -0,0 +1,21 @@ |
|||||
|
<Window x:Class="WindowsInteropTest.EmbedToWpfDemo" |
||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
||||
|
xmlns:local="clr-namespace:WindowsInteropTest" |
||||
|
xmlns:embedding="clr-namespace:Avalonia.Win32.Embedding;assembly=Avalonia.Win32" |
||||
|
mc:Ignorable="d" |
||||
|
d:DesignHeight="400" d:DesignWidth="400" MinWidth="500" MinHeight="400"> |
||||
|
<DockPanel> |
||||
|
<GroupBox DockPanel.Dock="Left" Header="WPF"> |
||||
|
<StackPanel> |
||||
|
<Slider/> |
||||
|
<Calendar/> |
||||
|
</StackPanel> |
||||
|
</GroupBox> |
||||
|
<GroupBox Header="Avalonia"> |
||||
|
<embedding:WpfAvaloniaControlHost x:Name="Host"/> |
||||
|
</GroupBox> |
||||
|
</DockPanel> |
||||
|
</Window> |
||||
@ -0,0 +1,31 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using System.Windows.Controls; |
||||
|
using System.Windows.Data; |
||||
|
using System.Windows.Documents; |
||||
|
using System.Windows.Input; |
||||
|
using System.Windows.Media; |
||||
|
using System.Windows.Media.Imaging; |
||||
|
using System.Windows.Navigation; |
||||
|
using System.Windows.Shapes; |
||||
|
using Avalonia.Controls; |
||||
|
using ControlCatalog; |
||||
|
using Window = System.Windows.Window; |
||||
|
|
||||
|
namespace WindowsInteropTest |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Interaction logic for EmbedToWpfDemo.xaml
|
||||
|
/// </summary>
|
||||
|
public partial class EmbedToWpfDemo : Window |
||||
|
{ |
||||
|
public EmbedToWpfDemo() |
||||
|
{ |
||||
|
InitializeComponent(); |
||||
|
Host.Content = new MainView(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,22 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Controls; |
||||
|
using ControlCatalog; |
||||
|
using Avalonia; |
||||
|
|
||||
|
namespace WindowsInteropTest |
||||
|
{ |
||||
|
static class Program |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// The main entry point for the application.
|
||||
|
/// </summary>
|
||||
|
[STAThread] |
||||
|
static void Main() |
||||
|
{ |
||||
|
System.Windows.Forms.Application.EnableVisualStyles(); |
||||
|
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); |
||||
|
AppBuilder.Configure<App>().UseWin32().UseSkia().SetupWithoutStarting(); |
||||
|
System.Windows.Forms.Application.Run(new SelectorForm()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
using System.Reflection; |
||||
|
using System.Runtime.CompilerServices; |
||||
|
using System.Runtime.InteropServices; |
||||
|
|
||||
|
// General Information about an assembly is controlled through the following
|
||||
|
// set of attributes. Change these attribute values to modify the information
|
||||
|
// associated with an assembly.
|
||||
|
[assembly: AssemblyTitle("WindowsInteropTest")] |
||||
|
[assembly: AssemblyDescription("")] |
||||
|
[assembly: AssemblyConfiguration("")] |
||||
|
[assembly: AssemblyCompany("")] |
||||
|
[assembly: AssemblyProduct("WindowsInteropTest")] |
||||
|
[assembly: AssemblyCopyright("Copyright © 2016")] |
||||
|
[assembly: AssemblyTrademark("")] |
||||
|
[assembly: AssemblyCulture("")] |
||||
|
|
||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
|
// to COM components. If you need to access a type in this assembly from
|
||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||
|
[assembly: ComVisible(false)] |
||||
|
|
||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
|
[assembly: Guid("c7a69145-60b6-4882-97d6-a3921dd43978")] |
||||
|
|
||||
|
// Version information for an assembly consists of the following four values:
|
||||
|
//
|
||||
|
// Major Version
|
||||
|
// Minor Version
|
||||
|
// Build Number
|
||||
|
// Revision
|
||||
|
//
|
||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
|
// by using the '*' as shown below:
|
||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||
|
[assembly: AssemblyFileVersion("1.0.0.0")] |
||||
@ -0,0 +1,71 @@ |
|||||
|
//------------------------------------------------------------------------------
|
||||
|
// <auto-generated>
|
||||
|
// This code was generated by a tool.
|
||||
|
// Runtime Version:4.0.30319.42000
|
||||
|
//
|
||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
|
// the code is regenerated.
|
||||
|
// </auto-generated>
|
||||
|
//------------------------------------------------------------------------------
|
||||
|
|
||||
|
namespace WindowsInteropTest.Properties |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
|
/// </summary>
|
||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
|
// class via a tool like ResGen or Visual Studio.
|
||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
|
// with the /str option, or rebuild your VS project.
|
||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] |
||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
||||
|
internal class Resources |
||||
|
{ |
||||
|
|
||||
|
private static global::System.Resources.ResourceManager resourceMan; |
||||
|
|
||||
|
private static global::System.Globalization.CultureInfo resourceCulture; |
||||
|
|
||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] |
||||
|
internal Resources() |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||
|
/// </summary>
|
||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
||||
|
internal static global::System.Resources.ResourceManager ResourceManager |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
if ((resourceMan == null)) |
||||
|
{ |
||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsInteropTest.Properties.Resources", typeof(Resources).Assembly); |
||||
|
resourceMan = temp; |
||||
|
} |
||||
|
return resourceMan; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||
|
/// resource lookups using this strongly typed resource class.
|
||||
|
/// </summary>
|
||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
||||
|
internal static global::System.Globalization.CultureInfo Culture |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return resourceCulture; |
||||
|
} |
||||
|
set |
||||
|
{ |
||||
|
resourceCulture = value; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,117 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<root> |
||||
|
<!-- |
||||
|
Microsoft ResX Schema |
||||
|
|
||||
|
Version 2.0 |
||||
|
|
||||
|
The primary goals of this format is to allow a simple XML format |
||||
|
that is mostly human readable. The generation and parsing of the |
||||
|
various data types are done through the TypeConverter classes |
||||
|
associated with the data types. |
||||
|
|
||||
|
Example: |
||||
|
|
||||
|
... ado.net/XML headers & schema ... |
||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader> |
||||
|
<resheader name="version">2.0</resheader> |
||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value> |
||||
|
</data> |
||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
||||
|
<comment>This is a comment</comment> |
||||
|
</data> |
||||
|
|
||||
|
There are any number of "resheader" rows that contain simple |
||||
|
name/value pairs. |
||||
|
|
||||
|
Each data row contains a name, and value. The row also contains a |
||||
|
type or mimetype. Type corresponds to a .NET class that support |
||||
|
text/value conversion through the TypeConverter architecture. |
||||
|
Classes that don't support this are serialized and stored with the |
||||
|
mimetype set. |
||||
|
|
||||
|
The mimetype is used for serialized objects, and tells the |
||||
|
ResXResourceReader how to depersist the object. This is currently not |
||||
|
extensible. For a given mimetype the value must be set accordingly: |
||||
|
|
||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format |
||||
|
that the ResXResourceWriter will generate, however the reader can |
||||
|
read any of the formats listed below. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.binary.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.soap.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64 |
||||
|
value : The object must be serialized into a byte array |
||||
|
: using a System.ComponentModel.TypeConverter |
||||
|
: and then encoded with base64 encoding. |
||||
|
--> |
||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
||||
|
<xsd:element name="root" msdata:IsDataSet="true"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:choice maxOccurs="unbounded"> |
||||
|
<xsd:element name="metadata"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="assembly"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:attribute name="alias" type="xsd:string" /> |
||||
|
<xsd:attribute name="name" type="xsd:string" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="data"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="resheader"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" use="required" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:choice> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:schema> |
||||
|
<resheader name="resmimetype"> |
||||
|
<value>text/microsoft-resx</value> |
||||
|
</resheader> |
||||
|
<resheader name="version"> |
||||
|
<value>2.0</value> |
||||
|
</resheader> |
||||
|
<resheader name="reader"> |
||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
<resheader name="writer"> |
||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
</root> |
||||
@ -0,0 +1,30 @@ |
|||||
|
//------------------------------------------------------------------------------
|
||||
|
// <auto-generated>
|
||||
|
// This code was generated by a tool.
|
||||
|
// Runtime Version:4.0.30319.42000
|
||||
|
//
|
||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
|
// the code is regenerated.
|
||||
|
// </auto-generated>
|
||||
|
//------------------------------------------------------------------------------
|
||||
|
|
||||
|
namespace WindowsInteropTest.Properties |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] |
||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase |
||||
|
{ |
||||
|
|
||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); |
||||
|
|
||||
|
public static Settings Default |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
return defaultInstance; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
<?xml version='1.0' encoding='utf-8'?> |
||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> |
||||
|
<Profiles> |
||||
|
<Profile Name="(Default)" /> |
||||
|
</Profiles> |
||||
|
<Settings /> |
||||
|
</SettingsFile> |
||||
@ -0,0 +1,76 @@ |
|||||
|
namespace WindowsInteropTest |
||||
|
{ |
||||
|
partial class SelectorForm |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Required designer variable.
|
||||
|
/// </summary>
|
||||
|
private System.ComponentModel.IContainer components = null; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Clean up any resources being used.
|
||||
|
/// </summary>
|
||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
|
protected override void Dispose(bool disposing) |
||||
|
{ |
||||
|
if (disposing && (components != null)) |
||||
|
{ |
||||
|
components.Dispose(); |
||||
|
} |
||||
|
base.Dispose(disposing); |
||||
|
} |
||||
|
|
||||
|
#region Windows Form Designer generated code
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Required method for Designer support - do not modify
|
||||
|
/// the contents of this method with the code editor.
|
||||
|
/// </summary>
|
||||
|
private void InitializeComponent() |
||||
|
{ |
||||
|
this.btnEmbedToWinForms = new System.Windows.Forms.Button(); |
||||
|
this.btnEmbedToWpf = new System.Windows.Forms.Button(); |
||||
|
this.SuspendLayout(); |
||||
|
//
|
||||
|
// btnEmbedToWinForms
|
||||
|
//
|
||||
|
this.btnEmbedToWinForms.Location = new System.Drawing.Point(12, 12); |
||||
|
this.btnEmbedToWinForms.Name = "btnEmbedToWinForms"; |
||||
|
this.btnEmbedToWinForms.Size = new System.Drawing.Size(201, 86); |
||||
|
this.btnEmbedToWinForms.TabIndex = 0; |
||||
|
this.btnEmbedToWinForms.Text = "Embed to WinForms"; |
||||
|
this.btnEmbedToWinForms.UseVisualStyleBackColor = true; |
||||
|
this.btnEmbedToWinForms.Click += new System.EventHandler(this.btnEmbedToWinForms_Click); |
||||
|
//
|
||||
|
// btnEmbedToWpf
|
||||
|
//
|
||||
|
this.btnEmbedToWpf.Location = new System.Drawing.Point(219, 12); |
||||
|
this.btnEmbedToWpf.Name = "btnEmbedToWpf"; |
||||
|
this.btnEmbedToWpf.Size = new System.Drawing.Size(201, 86); |
||||
|
this.btnEmbedToWpf.TabIndex = 1; |
||||
|
this.btnEmbedToWpf.Text = "Embed to WPF"; |
||||
|
this.btnEmbedToWpf.UseVisualStyleBackColor = true; |
||||
|
this.btnEmbedToWpf.Click += new System.EventHandler(this.btnEmbedToWpf_Click); |
||||
|
//
|
||||
|
// SelectorForm
|
||||
|
//
|
||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); |
||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
||||
|
this.ClientSize = new System.Drawing.Size(432, 284); |
||||
|
this.Controls.Add(this.btnEmbedToWpf); |
||||
|
this.Controls.Add(this.btnEmbedToWinForms); |
||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; |
||||
|
this.MaximizeBox = false; |
||||
|
this.Name = "SelectorForm"; |
||||
|
this.Text = "Interop"; |
||||
|
this.ResumeLayout(false); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
private System.Windows.Forms.Button btnEmbedToWinForms; |
||||
|
private System.Windows.Forms.Button btnEmbedToWpf; |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,30 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel; |
||||
|
using System.Data; |
||||
|
using System.Drawing; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using System.Windows.Forms; |
||||
|
|
||||
|
namespace WindowsInteropTest |
||||
|
{ |
||||
|
public partial class SelectorForm : Form |
||||
|
{ |
||||
|
public SelectorForm() |
||||
|
{ |
||||
|
InitializeComponent(); |
||||
|
} |
||||
|
|
||||
|
private void btnEmbedToWinForms_Click(object sender, EventArgs e) |
||||
|
{ |
||||
|
new EmbedToWinFormsDemo().ShowDialog(this); |
||||
|
} |
||||
|
|
||||
|
private void btnEmbedToWpf_Click(object sender, EventArgs e) |
||||
|
{ |
||||
|
new EmbedToWpfDemo().ShowDialog(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,120 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<root> |
||||
|
<!-- |
||||
|
Microsoft ResX Schema |
||||
|
|
||||
|
Version 2.0 |
||||
|
|
||||
|
The primary goals of this format is to allow a simple XML format |
||||
|
that is mostly human readable. The generation and parsing of the |
||||
|
various data types are done through the TypeConverter classes |
||||
|
associated with the data types. |
||||
|
|
||||
|
Example: |
||||
|
|
||||
|
... ado.net/XML headers & schema ... |
||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader> |
||||
|
<resheader name="version">2.0</resheader> |
||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value> |
||||
|
</data> |
||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
||||
|
<comment>This is a comment</comment> |
||||
|
</data> |
||||
|
|
||||
|
There are any number of "resheader" rows that contain simple |
||||
|
name/value pairs. |
||||
|
|
||||
|
Each data row contains a name, and value. The row also contains a |
||||
|
type or mimetype. Type corresponds to a .NET class that support |
||||
|
text/value conversion through the TypeConverter architecture. |
||||
|
Classes that don't support this are serialized and stored with the |
||||
|
mimetype set. |
||||
|
|
||||
|
The mimetype is used for serialized objects, and tells the |
||||
|
ResXResourceReader how to depersist the object. This is currently not |
||||
|
extensible. For a given mimetype the value must be set accordingly: |
||||
|
|
||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format |
||||
|
that the ResXResourceWriter will generate, however the reader can |
||||
|
read any of the formats listed below. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.binary.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.soap.base64 |
||||
|
value : The object must be serialized with |
||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
||||
|
: and then encoded with base64 encoding. |
||||
|
|
||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64 |
||||
|
value : The object must be serialized into a byte array |
||||
|
: using a System.ComponentModel.TypeConverter |
||||
|
: and then encoded with base64 encoding. |
||||
|
--> |
||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> |
||||
|
<xsd:element name="root" msdata:IsDataSet="true"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:choice maxOccurs="unbounded"> |
||||
|
<xsd:element name="metadata"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" use="required" type="xsd:string" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" /> |
||||
|
<xsd:attribute ref="xml:space" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="assembly"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:attribute name="alias" type="xsd:string" /> |
||||
|
<xsd:attribute name="name" type="xsd:string" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="data"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> |
||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
||||
|
<xsd:attribute ref="xml:space" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
<xsd:element name="resheader"> |
||||
|
<xsd:complexType> |
||||
|
<xsd:sequence> |
||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
||||
|
</xsd:sequence> |
||||
|
<xsd:attribute name="name" type="xsd:string" use="required" /> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:choice> |
||||
|
</xsd:complexType> |
||||
|
</xsd:element> |
||||
|
</xsd:schema> |
||||
|
<resheader name="resmimetype"> |
||||
|
<value>text/microsoft-resx</value> |
||||
|
</resheader> |
||||
|
<resheader name="version"> |
||||
|
<value>2.0</value> |
||||
|
</resheader> |
||||
|
<resheader name="reader"> |
||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
<resheader name="writer"> |
||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
||||
|
</resheader> |
||||
|
</root> |
||||
@ -0,0 +1,190 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
||||
|
<PropertyGroup> |
||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
||||
|
<ProjectGuid>{C7A69145-60B6-4882-97D6-A3921DD43978}</ProjectGuid> |
||||
|
<OutputType>WinExe</OutputType> |
||||
|
<AppDesignerFolder>Properties</AppDesignerFolder> |
||||
|
<RootNamespace>WindowsInteropTest</RootNamespace> |
||||
|
<AssemblyName>WindowsInteropTest</AssemblyName> |
||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion> |
||||
|
<FileAlignment>512</FileAlignment> |
||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> |
||||
|
</PropertyGroup> |
||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
||||
|
<PlatformTarget>AnyCPU</PlatformTarget> |
||||
|
<DebugSymbols>true</DebugSymbols> |
||||
|
<DebugType>full</DebugType> |
||||
|
<Optimize>false</Optimize> |
||||
|
<OutputPath>bin\Debug\</OutputPath> |
||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants> |
||||
|
<ErrorReport>prompt</ErrorReport> |
||||
|
<WarningLevel>4</WarningLevel> |
||||
|
</PropertyGroup> |
||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
||||
|
<PlatformTarget>AnyCPU</PlatformTarget> |
||||
|
<DebugType>pdbonly</DebugType> |
||||
|
<Optimize>true</Optimize> |
||||
|
<OutputPath>bin\Release\</OutputPath> |
||||
|
<DefineConstants>TRACE</DefineConstants> |
||||
|
<ErrorReport>prompt</ErrorReport> |
||||
|
<WarningLevel>4</WarningLevel> |
||||
|
</PropertyGroup> |
||||
|
<ItemGroup> |
||||
|
<Reference Include="PresentationCore" /> |
||||
|
<Reference Include="PresentationFramework" /> |
||||
|
<Reference Include="System" /> |
||||
|
<Reference Include="System.Core" /> |
||||
|
<Reference Include="System.Xaml" /> |
||||
|
<Reference Include="System.Xml.Linq" /> |
||||
|
<Reference Include="System.Data.DataSetExtensions" /> |
||||
|
<Reference Include="Microsoft.CSharp" /> |
||||
|
<Reference Include="System.Data" /> |
||||
|
<Reference Include="System.Deployment" /> |
||||
|
<Reference Include="System.Drawing" /> |
||||
|
<Reference Include="System.Net.Http" /> |
||||
|
<Reference Include="System.Windows.Forms" /> |
||||
|
<Reference Include="System.Xml" /> |
||||
|
<Reference Include="WindowsBase" /> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<Compile Include="EmbedToWinFormsDemo.cs"> |
||||
|
<SubType>Form</SubType> |
||||
|
</Compile> |
||||
|
<Compile Include="EmbedToWinFormsDemo.Designer.cs"> |
||||
|
<DependentUpon>EmbedToWinFormsDemo.cs</DependentUpon> |
||||
|
</Compile> |
||||
|
<Compile Include="EmbedToWpfDemo.xaml.cs"> |
||||
|
<DependentUpon>EmbedToWpfDemo.xaml</DependentUpon> |
||||
|
</Compile> |
||||
|
<Compile Include="SelectorForm.cs"> |
||||
|
<SubType>Form</SubType> |
||||
|
</Compile> |
||||
|
<Compile Include="SelectorForm.Designer.cs"> |
||||
|
<DependentUpon>SelectorForm.cs</DependentUpon> |
||||
|
</Compile> |
||||
|
<Compile Include="Program.cs" /> |
||||
|
<Compile Include="Properties\AssemblyInfo.cs" /> |
||||
|
<EmbeddedResource Include="EmbedToWinFormsDemo.resx"> |
||||
|
<DependentUpon>EmbedToWinFormsDemo.cs</DependentUpon> |
||||
|
</EmbeddedResource> |
||||
|
<EmbeddedResource Include="Properties\Resources.resx"> |
||||
|
<Generator>ResXFileCodeGenerator</Generator> |
||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput> |
||||
|
<SubType>Designer</SubType> |
||||
|
</EmbeddedResource> |
||||
|
<Compile Include="Properties\Resources.Designer.cs"> |
||||
|
<AutoGen>True</AutoGen> |
||||
|
<DependentUpon>Resources.resx</DependentUpon> |
||||
|
</Compile> |
||||
|
<EmbeddedResource Include="SelectorForm.resx"> |
||||
|
<DependentUpon>SelectorForm.cs</DependentUpon> |
||||
|
</EmbeddedResource> |
||||
|
<None Include="Properties\Settings.settings"> |
||||
|
<Generator>SettingsSingleFileGenerator</Generator> |
||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput> |
||||
|
</None> |
||||
|
<Compile Include="Properties\Settings.Designer.cs"> |
||||
|
<AutoGen>True</AutoGen> |
||||
|
<DependentUpon>Settings.settings</DependentUpon> |
||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput> |
||||
|
</Compile> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<None Include="App.config" /> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Animation\Avalonia.Animation.csproj"> |
||||
|
<Project>{d211e587-d8bc-45b9-95a4-f297c8fa5200}</Project> |
||||
|
<Name>Avalonia.Animation</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Base\Avalonia.Base.csproj"> |
||||
|
<Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project> |
||||
|
<Name>Avalonia.Base</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Controls\Avalonia.Controls.csproj"> |
||||
|
<Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project> |
||||
|
<Name>Avalonia.Controls</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj"> |
||||
|
<Project>{799a7bb5-3c2c-48b6-85a7-406a12c420da}</Project> |
||||
|
<Name>Avalonia.DesignerSupport</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj"> |
||||
|
<Project>{7062ae20-5dcc-4442-9645-8195bdece63e}</Project> |
||||
|
<Name>Avalonia.Diagnostics</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj"> |
||||
|
<Project>{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}</Project> |
||||
|
<Name>Avalonia.DotNetFrameworkRuntime</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Input\Avalonia.Input.csproj"> |
||||
|
<Project>{62024b2d-53eb-4638-b26b-85eeaa54866e}</Project> |
||||
|
<Name>Avalonia.Input</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj"> |
||||
|
<Project>{6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}</Project> |
||||
|
<Name>Avalonia.Interactivity</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Layout\Avalonia.Layout.csproj"> |
||||
|
<Project>{42472427-4774-4c81-8aff-9f27b8e31721}</Project> |
||||
|
<Name>Avalonia.Layout</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj"> |
||||
|
<Project>{6417b24e-49c2-4985-8db2-3ab9d898ec91}</Project> |
||||
|
<Name>Avalonia.ReactiveUI</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.SceneGraph\Avalonia.SceneGraph.csproj"> |
||||
|
<Project>{eb582467-6abb-43a1-b052-e981ba910e3a}</Project> |
||||
|
<Name>Avalonia.SceneGraph</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Styling\Avalonia.Styling.csproj"> |
||||
|
<Project>{f1baa01a-f176-4c6a-b39d-5b40bb1b148f}</Project> |
||||
|
<Name>Avalonia.Styling</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj"> |
||||
|
<Project>{3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f}</Project> |
||||
|
<Name>Avalonia.Themes.Default</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj"> |
||||
|
<Project>{3e53a01a-b331-47f3-b828-4a5717e77a24}</Project> |
||||
|
<Name>Avalonia.Markup.Xaml</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj"> |
||||
|
<Project>{6417e941-21bc-467b-a771-0de389353ce6}</Project> |
||||
|
<Name>Avalonia.Markup</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Skia\Avalonia.Skia.Desktop\Avalonia.Skia.Desktop.csproj"> |
||||
|
<Project>{925dd807-b651-475f-9f7c-cbeb974ce43d}</Project> |
||||
|
<Name>Avalonia.Skia.Desktop</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj"> |
||||
|
<Project>{3e908f67-5543-4879-a1dc-08eace79b3cd}</Project> |
||||
|
<Name>Avalonia.Direct2D1</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\..\src\Windows\Avalonia.Win32\Avalonia.Win32.csproj"> |
||||
|
<Project>{811a76cf-1cf6-440f-963b-bbe31bd72a82}</Project> |
||||
|
<Name>Avalonia.Win32</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\..\ControlCatalog\ControlCatalog.csproj"> |
||||
|
<Project>{d0a739b9-3c68-4ba6-a328-41606954b6bd}</Project> |
||||
|
<Name>ControlCatalog</Name> |
||||
|
</ProjectReference> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<Page Include="EmbedToWpfDemo.xaml"> |
||||
|
<SubType>Designer</SubType> |
||||
|
<Generator>MSBuild:Compile</Generator> |
||||
|
</Page> |
||||
|
</ItemGroup> |
||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. |
||||
|
Other similar extension points exist, see Microsoft.Common.targets. |
||||
|
<Target Name="BeforeBuild"> |
||||
|
</Target> |
||||
|
<Target Name="AfterBuild"> |
||||
|
</Target> |
||||
|
--> |
||||
|
</Project> |
||||
@ -0,0 +1,18 @@ |
|||||
|
using Avalonia.Platform; |
||||
|
|
||||
|
namespace Avalonia.Shared.PlatformSupport |
||||
|
{ |
||||
|
internal partial class StandardRuntimePlatform |
||||
|
{ |
||||
|
public RuntimePlatformInfo GetRuntimeInfo() => new RuntimePlatformInfo |
||||
|
{ |
||||
|
IsCoreClr = false, |
||||
|
IsDesktop = false, |
||||
|
IsMobile = true, |
||||
|
IsDotNetFramework = false, |
||||
|
IsMono = true, |
||||
|
IsUnix = true, |
||||
|
OperatingSystem = OperatingSystemType.Android |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
@ -1,17 +0,0 @@ |
|||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Linq; |
|
||||
using System.Reflection; |
|
||||
using System.Text; |
|
||||
using System.Threading.Tasks; |
|
||||
|
|
||||
namespace Avalonia.Platform |
|
||||
{ |
|
||||
public interface IPclPlatformWrapper |
|
||||
{ |
|
||||
Assembly[] GetLoadedAssemblies(); |
|
||||
void PostThreadPoolItem(Action cb); |
|
||||
IDisposable StartSystemTimer(TimeSpan interval, Action tick); |
|
||||
string GetStackTrace(); |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,39 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Reflection; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Avalonia.Platform |
||||
|
{ |
||||
|
public interface IRuntimePlatform |
||||
|
{ |
||||
|
Assembly[] GetLoadedAssemblies(); |
||||
|
void PostThreadPoolItem(Action cb); |
||||
|
IDisposable StartSystemTimer(TimeSpan interval, Action tick); |
||||
|
string GetStackTrace(); |
||||
|
RuntimePlatformInfo GetRuntimeInfo(); |
||||
|
} |
||||
|
|
||||
|
public struct RuntimePlatformInfo |
||||
|
{ |
||||
|
public OperatingSystemType OperatingSystem { get; set; } |
||||
|
public bool IsDesktop { get; set; } |
||||
|
public bool IsMobile { get; set; } |
||||
|
public bool IsCoreClr { get; set; } |
||||
|
public bool IsMono { get; set; } |
||||
|
public bool IsDotNetFramework { get; set; } |
||||
|
public bool IsUnix { get; set; } |
||||
|
} |
||||
|
|
||||
|
public enum OperatingSystemType |
||||
|
{ |
||||
|
Unknown, |
||||
|
WinNT, |
||||
|
Linux, |
||||
|
OSX, |
||||
|
Android, |
||||
|
iOS |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,73 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Controls.Platform; |
||||
|
using Avalonia.Input; |
||||
|
using Avalonia.Layout; |
||||
|
using Avalonia.Platform; |
||||
|
using Avalonia.Styling; |
||||
|
|
||||
|
namespace Avalonia.Controls.Embedding |
||||
|
{ |
||||
|
public class EmbeddableControlRoot : TopLevel, IStyleable, IFocusScope, INameScope, IDisposable |
||||
|
{ |
||||
|
public EmbeddableControlRoot(IEmbeddableWindowImpl impl) : base(impl) |
||||
|
{ |
||||
|
PlatformImpl.Show(); |
||||
|
} |
||||
|
|
||||
|
public EmbeddableControlRoot() : base(PlatformManager.CreateEmbeddableWindow()) |
||||
|
{ |
||||
|
PlatformImpl.Show(); |
||||
|
} |
||||
|
|
||||
|
public new IEmbeddableWindowImpl PlatformImpl => (IEmbeddableWindowImpl) base.PlatformImpl; |
||||
|
|
||||
|
public void Prepare() |
||||
|
{ |
||||
|
EnsureInitialized(); |
||||
|
ApplyTemplate(); |
||||
|
PlatformImpl.Show(); |
||||
|
LayoutManager.Instance.ExecuteInitialLayoutPass(this); |
||||
|
} |
||||
|
|
||||
|
private void EnsureInitialized() |
||||
|
{ |
||||
|
if (!this.IsInitialized) |
||||
|
{ |
||||
|
var init = (ISupportInitialize)this; |
||||
|
init.BeginInit(); |
||||
|
init.EndInit(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
protected override Size MeasureOverride(Size availableSize) |
||||
|
{ |
||||
|
base.MeasureOverride(PlatformImpl.ClientSize); |
||||
|
return PlatformImpl.ClientSize; |
||||
|
} |
||||
|
|
||||
|
private readonly NameScope _nameScope = new NameScope(); |
||||
|
public event EventHandler<NameScopeEventArgs> Registered |
||||
|
{ |
||||
|
add { _nameScope.Registered += value; } |
||||
|
remove { _nameScope.Registered -= value; } |
||||
|
} |
||||
|
|
||||
|
public event EventHandler<NameScopeEventArgs> Unregistered |
||||
|
{ |
||||
|
add { _nameScope.Unregistered += value; } |
||||
|
remove { _nameScope.Unregistered -= value; } |
||||
|
} |
||||
|
|
||||
|
public void Register(string name, object element) => _nameScope.Register(name, element); |
||||
|
|
||||
|
public object Find(string name) => _nameScope.Find(name); |
||||
|
|
||||
|
public void Unregister(string name) => _nameScope.Unregister(name); |
||||
|
|
||||
|
Type IStyleable.StyleKey => typeof(EmbeddableControlRoot); |
||||
|
public void Dispose() |
||||
|
{ |
||||
|
PlatformImpl.Dispose(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,15 @@ |
|||||
|
// Copyright (c) The Avalonia Project. All rights reserved.
|
||||
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
||||
|
|
||||
|
using System; |
||||
|
|
||||
|
namespace Avalonia.Platform |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Defines a platform-specific embeddable window implementation.
|
||||
|
/// </summary>
|
||||
|
public interface IEmbeddableWindowImpl : IWindowImpl |
||||
|
{ |
||||
|
event Action LostFocus; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,40 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Reflection; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Platform; |
||||
|
using Avalonia.Shared.PlatformSupport; |
||||
|
|
||||
|
namespace Avalonia |
||||
|
{ |
||||
|
public sealed class AppBuilder : AppBuilderBase<AppBuilder> |
||||
|
{ |
||||
|
public AppBuilder() : base(new StandardRuntimePlatform(), () => StandardRuntimePlatformServices.Register()) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public AppBuilder(Application app) : this() |
||||
|
{ |
||||
|
Instance = app; |
||||
|
} |
||||
|
|
||||
|
public AppBuilder UsePlatformDetect() |
||||
|
{ |
||||
|
var platformId = (int)Environment.OSVersion.Platform; |
||||
|
if (platformId == 4 || platformId == 6) |
||||
|
{ |
||||
|
UseRenderingSubsystem("Avalonia.Cairo"); |
||||
|
UseWindowingSubsystem("Avalonia.Gtk"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
UseRenderingSubsystem("Avalonia.Direct2D1"); |
||||
|
UseWindowingSubsystem("Avalonia.Win32"); |
||||
|
} |
||||
|
return this; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,84 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
||||
|
<PropertyGroup> |
||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
||||
|
<ProjectGuid>{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}</ProjectGuid> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<AppDesignerFolder>Properties</AppDesignerFolder> |
||||
|
<RootNamespace>Avalonia.DotNetFrameworkRuntime</RootNamespace> |
||||
|
<AssemblyName>Avalonia.DotNetFrameworkRuntime</AssemblyName> |
||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> |
||||
|
<FileAlignment>512</FileAlignment> |
||||
|
<TargetFrameworkProfile /> |
||||
|
</PropertyGroup> |
||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
||||
|
<DebugSymbols>true</DebugSymbols> |
||||
|
<DebugType>full</DebugType> |
||||
|
<Optimize>false</Optimize> |
||||
|
<OutputPath>bin\Debug\</OutputPath> |
||||
|
<DefineConstants>TRACE;DEBUG;FULLDOTNET</DefineConstants> |
||||
|
<ErrorReport>prompt</ErrorReport> |
||||
|
<WarningLevel>4</WarningLevel> |
||||
|
<DocumentationFile>bin\Debug\Avalonia.DotNetFrameworkRuntime.xml</DocumentationFile> |
||||
|
</PropertyGroup> |
||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
||||
|
<DebugType>pdbonly</DebugType> |
||||
|
<Optimize>true</Optimize> |
||||
|
<OutputPath>bin\Release\</OutputPath> |
||||
|
<DefineConstants>TRACE;FULLDOTNET</DefineConstants> |
||||
|
<ErrorReport>prompt</ErrorReport> |
||||
|
<WarningLevel>4</WarningLevel> |
||||
|
<DocumentationFile>bin\Release\Avalonia.DotNetFrameworkRuntime.xml</DocumentationFile> |
||||
|
</PropertyGroup> |
||||
|
<ItemGroup> |
||||
|
<Reference Include="System" /> |
||||
|
<Reference Include="System.Core" /> |
||||
|
<Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"> |
||||
|
<HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath> |
||||
|
<Private>True</Private> |
||||
|
</Reference> |
||||
|
<Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL"> |
||||
|
<HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath> |
||||
|
<Private>True</Private> |
||||
|
</Reference> |
||||
|
<Reference Include="System.Xml.Linq" /> |
||||
|
<Reference Include="System.Data.DataSetExtensions" /> |
||||
|
<Reference Include="Microsoft.CSharp" /> |
||||
|
<Reference Include="System.Data" /> |
||||
|
<Reference Include="System.Net.Http" /> |
||||
|
<Reference Include="System.Xml" /> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<Compile Include="AppBuilder.cs" /> |
||||
|
<Compile Include="Properties\AssemblyInfo.cs" /> |
||||
|
<Compile Include="RuntimeInfo.cs" /> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj"> |
||||
|
<Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project> |
||||
|
<Name>Avalonia.Base</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj"> |
||||
|
<Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project> |
||||
|
<Name>Avalonia.Controls</Name> |
||||
|
</ProjectReference> |
||||
|
<ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj"> |
||||
|
<Project>{f1baa01a-f176-4c6a-b39d-5b40bb1b148f}</Project> |
||||
|
<Name>Avalonia.Styling</Name> |
||||
|
</ProjectReference> |
||||
|
</ItemGroup> |
||||
|
<ItemGroup> |
||||
|
<None Include="packages.config" /> |
||||
|
</ItemGroup> |
||||
|
<Import Project="..\Shared\PlatformSupport\PlatformSupport.projitems" Label="Shared" /> |
||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. |
||||
|
Other similar extension points exist, see Microsoft.Common.targets. |
||||
|
<Target Name="BeforeBuild"> |
||||
|
</Target> |
||||
|
<Target Name="AfterBuild"> |
||||
|
</Target> |
||||
|
--> |
||||
|
</Project> |
||||
@ -0,0 +1,36 @@ |
|||||
|
using System.Reflection; |
||||
|
using System.Runtime.CompilerServices; |
||||
|
using System.Runtime.InteropServices; |
||||
|
|
||||
|
// General Information about an assembly is controlled through the following
|
||||
|
// set of attributes. Change these attribute values to modify the information
|
||||
|
// associated with an assembly.
|
||||
|
[assembly: AssemblyTitle("Avalonia.DotNetFrameworkRuntime")] |
||||
|
[assembly: AssemblyDescription("")] |
||||
|
[assembly: AssemblyConfiguration("")] |
||||
|
[assembly: AssemblyCompany("")] |
||||
|
[assembly: AssemblyProduct("Avalonia.DotNetFrameworkRuntime")] |
||||
|
[assembly: AssemblyCopyright("Copyright © 2016")] |
||||
|
[assembly: AssemblyTrademark("")] |
||||
|
[assembly: AssemblyCulture("")] |
||||
|
|
||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
|
// to COM components. If you need to access a type in this assembly from
|
||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||
|
[assembly: ComVisible(false)] |
||||
|
|
||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
|
[assembly: Guid("4a1abb09-9047-4bd5-a4ad-a055e52c5ee0")] |
||||
|
|
||||
|
// Version information for an assembly consists of the following four values:
|
||||
|
//
|
||||
|
// Major Version
|
||||
|
// Minor Version
|
||||
|
// Build Number
|
||||
|
// Revision
|
||||
|
//
|
||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
|
// by using the '*' as shown below:
|
||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||
|
[assembly: AssemblyFileVersion("1.0.0.0")] |
||||
@ -0,0 +1,44 @@ |
|||||
|
using System; |
||||
|
using System.Runtime.InteropServices; |
||||
|
using Avalonia.Platform; |
||||
|
|
||||
|
namespace Avalonia.Shared.PlatformSupport |
||||
|
{ |
||||
|
internal partial class StandardRuntimePlatform |
||||
|
{ |
||||
|
private static readonly Lazy<RuntimePlatformInfo> Info = new Lazy<RuntimePlatformInfo>(() => |
||||
|
{ |
||||
|
var isMono = Type.GetType("Mono.Runtime") != null; |
||||
|
var isUnix = Environment.OSVersion.Platform == PlatformID.Unix || |
||||
|
Environment.OSVersion.Platform == PlatformID.MacOSX; |
||||
|
return new RuntimePlatformInfo |
||||
|
{ |
||||
|
IsCoreClr = false, |
||||
|
IsDesktop = true, |
||||
|
IsDotNetFramework = !isMono, |
||||
|
IsMono = isMono, |
||||
|
IsMobile = false, |
||||
|
IsUnix = isUnix, |
||||
|
OperatingSystem = isUnix ? DetectUnix() : OperatingSystemType.WinNT, |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
[DllImport("libc")] |
||||
|
static extern int uname(IntPtr buf); |
||||
|
|
||||
|
static OperatingSystemType DetectUnix() |
||||
|
{ |
||||
|
var buffer = Marshal.AllocHGlobal(0x1000); |
||||
|
uname(buffer); |
||||
|
var unixName = Marshal.PtrToStringAnsi(buffer); |
||||
|
Marshal.FreeHGlobal(buffer); |
||||
|
if(unixName=="Darwin") |
||||
|
return OperatingSystemType.OSX; |
||||
|
if (unixName == "Linux") |
||||
|
return OperatingSystemType.Linux; |
||||
|
return OperatingSystemType.Unknown; |
||||
|
} |
||||
|
|
||||
|
public RuntimePlatformInfo GetRuntimeInfo() => Info.Value; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,5 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<packages> |
||||
|
<package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" /> |
||||
|
<package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" /> |
||||
|
</packages> |
||||
@ -0,0 +1,17 @@ |
|||||
|
<Style xmlns="https://github.com/avaloniaui" Selector="EmbeddableControlRoot"> |
||||
|
<Setter Property="Background" Value="{StyleResource ThemeBackgroundBrush}"/> |
||||
|
<Setter Property="FontFamily" Value="Segoe UI"/> |
||||
|
<Setter Property="FontSize" Value="{StyleResource FontSizeNormal}"/> |
||||
|
<Setter Property="Template"> |
||||
|
<ControlTemplate> |
||||
|
<Border Background="{TemplateBinding Background}"> |
||||
|
<AdornerDecorator> |
||||
|
<ContentPresenter Name="PART_ContentPresenter" |
||||
|
Content="{TemplateBinding Content}" |
||||
|
ContentTemplate="{TemplateBinding ContentTemplate}" |
||||
|
Margin="{TemplateBinding Padding}"/> |
||||
|
</AdornerDecorator> |
||||
|
</Border> |
||||
|
</ControlTemplate> |
||||
|
</Setter> |
||||
|
</Style> |
||||
@ -0,0 +1,70 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Reactive.Disposables; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia.Platform; |
||||
|
using Gdk; |
||||
|
using Gtk; |
||||
|
using Action = System.Action; |
||||
|
using WindowEdge = Avalonia.Controls.WindowEdge; |
||||
|
|
||||
|
namespace Avalonia.Gtk |
||||
|
{ |
||||
|
class EmbeddableImpl : WindowImplBase, IEmbeddableWindowImpl |
||||
|
{ |
||||
|
public event Action LostFocus; |
||||
|
|
||||
|
public EmbeddableImpl(DrawingArea area) : base(area) |
||||
|
{ |
||||
|
area.Events = EventMask.AllEventsMask; |
||||
|
area.SizeAllocated += Plug_SizeAllocated; |
||||
|
} |
||||
|
|
||||
|
public EmbeddableImpl() : this(new PlatformHandleAwareDrawingArea()) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
private void Plug_SizeAllocated(object o, SizeAllocatedArgs args) |
||||
|
{ |
||||
|
Resized?.Invoke(new Size(args.Allocation.Width, args.Allocation.Height)); |
||||
|
} |
||||
|
|
||||
|
public override Size ClientSize |
||||
|
{ |
||||
|
get { return new Size(Widget.Allocation.Width, Widget.Allocation.Height); } |
||||
|
set {} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//Stubs are needed for future GTK designer embedding support
|
||||
|
public override void SetTitle(string title) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public override IDisposable ShowDialog() => Disposable.Create(() => { }); |
||||
|
|
||||
|
public override void SetSystemDecorations(bool enabled) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public override void SetIcon(IWindowIconImpl icon) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public override void BeginMoveDrag() |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public override void BeginResizeDrag(WindowEdge edge) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public override Point Position |
||||
|
{ |
||||
|
get { return new Point(); } |
||||
|
set {} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,77 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Controls.Embedding; |
||||
|
using Avalonia.Diagnostics; |
||||
|
using Avalonia.Input; |
||||
|
using Avalonia.Interactivity; |
||||
|
using Avalonia.Layout; |
||||
|
using Avalonia.Platform; |
||||
|
using Avalonia.VisualTree; |
||||
|
using Gdk; |
||||
|
using Gtk; |
||||
|
|
||||
|
namespace Avalonia.Gtk.Embedding |
||||
|
{ |
||||
|
public class GtkAvaloniaControlHost : DrawingArea, IPlatformHandle |
||||
|
{ |
||||
|
private EmbeddableControlRoot _root; |
||||
|
|
||||
|
public GtkAvaloniaControlHost() |
||||
|
{ |
||||
|
_root = new EmbeddableControlRoot(new EmbeddableImpl(this)); |
||||
|
_root.Prepare(); |
||||
|
if (_root.IsFocused) |
||||
|
Unfocus(); |
||||
|
_root.GotFocus += RootGotFocus; |
||||
|
CanFocus = true; |
||||
|
} |
||||
|
|
||||
|
void Unfocus() |
||||
|
{ |
||||
|
var focused = (IVisual)FocusManager.Instance.Current; |
||||
|
if (focused == null) |
||||
|
return; |
||||
|
while (focused.VisualParent != null) |
||||
|
focused = focused.VisualParent; |
||||
|
|
||||
|
if (focused == _root) |
||||
|
KeyboardDevice.Instance.SetFocusedElement(null, NavigationMethod.Unspecified, InputModifiers.None); |
||||
|
} |
||||
|
|
||||
|
protected override bool OnFocusOutEvent(EventFocus evnt) |
||||
|
{ |
||||
|
Unfocus(); |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
private void RootGotFocus(object sender, RoutedEventArgs e) |
||||
|
{ |
||||
|
this.HasFocus = true; |
||||
|
GdkWindow.Focus(0); |
||||
|
} |
||||
|
|
||||
|
private Control _content; |
||||
|
|
||||
|
public Control Content |
||||
|
{ |
||||
|
get { return _content; } |
||||
|
set |
||||
|
{ |
||||
|
_content = value; |
||||
|
if (_root != null) |
||||
|
{ |
||||
|
_root.Content = value; |
||||
|
_root.Prepare(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
IntPtr IPlatformHandle.Handle => PlatformHandleAwareWindow.GetNativeWindow(GdkWindow); |
||||
|
|
||||
|
string IPlatformHandle.HandleDescriptor => "HWND"; |
||||
|
} |
||||
|
} |
||||
@ -1,404 +1,118 @@ |
|||||
// Copyright (c) The Avalonia Project. All rights reserved.
|
|
||||
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
||||
|
|
||||
using System; |
using System; |
||||
using System.Reactive.Disposables; |
using System.Reactive.Disposables; |
||||
using System.Runtime.InteropServices; |
|
||||
using Gdk; |
|
||||
using Avalonia.Controls; |
|
||||
using Avalonia.Input.Raw; |
|
||||
using Avalonia.Platform; |
using Avalonia.Platform; |
||||
using Avalonia.Input; |
using Gdk; |
||||
using Avalonia.Threading; |
|
||||
using Action = System.Action; |
|
||||
using WindowEdge = Avalonia.Controls.WindowEdge; |
|
||||
|
|
||||
namespace Avalonia.Gtk |
namespace Avalonia.Gtk |
||||
{ |
{ |
||||
using Gtk = global::Gtk; |
using Gtk = global::Gtk; |
||||
|
public class WindowImpl : WindowImplBase |
||||
public class WindowImpl : Gtk.Window, IWindowImpl, IPlatformHandle |
|
||||
{ |
{ |
||||
private IInputRoot _inputRoot; |
private Gtk.Window _window; |
||||
|
private Gtk.Window Window => _window ?? (_window = (Gtk.Window) Widget); |
||||
|
|
||||
private Size _lastClientSize; |
|
||||
|
|
||||
private Gtk.IMContext _imContext; |
|
||||
|
|
||||
private uint _lastKeyEventTimestamp; |
public WindowImpl(Gtk.WindowType type) : base(new PlatformHandleAwareWindow(type)) |
||||
|
|
||||
private static readonly Gdk.Cursor DefaultCursor = new Gdk.Cursor(CursorType.LeftPtr); |
|
||||
|
|
||||
public WindowImpl() |
|
||||
: base(Gtk.WindowType.Toplevel) |
|
||||
{ |
{ |
||||
DefaultSize = new Gdk.Size(900, 480); |
|
||||
Init(); |
Init(); |
||||
} |
} |
||||
|
|
||||
public WindowImpl(Gtk.WindowType type) |
public WindowImpl() |
||||
: base(type) |
: base(new PlatformHandleAwareWindow(Gtk.WindowType.Toplevel) {DefaultSize = new Gdk.Size(900, 480)}) |
||||
{ |
{ |
||||
Init(); |
Init(); |
||||
} |
} |
||||
|
|
||||
private void Init() |
void Init() |
||||
{ |
{ |
||||
Events = EventMask.PointerMotionMask | |
Window.FocusActivated += OnFocusActivated; |
||||
EventMask.ButtonPressMask | |
Window.ConfigureEvent += OnConfigureEvent; |
||||
EventMask.ButtonReleaseMask; |
|
||||
_imContext = new Gtk.IMMulticontext(); |
|
||||
_imContext.Commit += ImContext_Commit; |
|
||||
DoubleBuffered = false; |
|
||||
Realize(); |
|
||||
_lastClientSize = ClientSize; |
_lastClientSize = ClientSize; |
||||
} |
} |
||||
|
private Size _lastClientSize; |
||||
protected override void OnRealized () |
void OnConfigureEvent(object o, Gtk.ConfigureEventArgs args) |
||||
{ |
|
||||
base.OnRealized (); |
|
||||
_imContext.ClientWindow = this.GdkWindow; |
|
||||
} |
|
||||
|
|
||||
public Size ClientSize |
|
||||
{ |
{ |
||||
get |
var evnt = args.Event; |
||||
{ |
args.RetVal = true; |
||||
int width; |
var newSize = new Size(evnt.Width, evnt.Height); |
||||
int height; |
|
||||
GetSize(out width, out height); |
|
||||
return new Size(width, height); |
|
||||
} |
|
||||
|
|
||||
set |
|
||||
{ |
|
||||
Resize((int)value.Width, (int)value.Height); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public Size MaxClientSize |
if (newSize != _lastClientSize) |
||||
{ |
|
||||
get |
|
||||
{ |
{ |
||||
// TODO: This should take into account things such as taskbar and window border
|
Resized(newSize); |
||||
// thickness etc.
|
_lastClientSize = newSize; |
||||
return new Size(Screen.Width, Screen.Height); |
|
||||
} |
} |
||||
} |
} |
||||
|
|
||||
public Avalonia.Controls.WindowState WindowState |
public override Size ClientSize |
||||
{ |
{ |
||||
get |
get |
||||
{ |
{ |
||||
switch (GdkWindow.State) |
int width; |
||||
{ |
int height; |
||||
case Gdk.WindowState.Iconified: |
Window.GetSize(out width, out height); |
||||
return Controls.WindowState.Minimized; |
return new Size(width, height); |
||||
case Gdk.WindowState.Maximized: |
|
||||
return Controls.WindowState.Maximized; |
|
||||
default: |
|
||||
return Controls.WindowState.Normal; |
|
||||
} |
|
||||
} |
} |
||||
|
|
||||
set |
set |
||||
{ |
{ |
||||
switch (value) |
Window.Resize((int)value.Width, (int)value.Height); |
||||
{ |
|
||||
case Controls.WindowState.Minimized: |
|
||||
GdkWindow.Iconify(); |
|
||||
break; |
|
||||
case Controls.WindowState.Maximized: |
|
||||
GdkWindow.Maximize(); |
|
||||
break; |
|
||||
case Controls.WindowState.Normal: |
|
||||
GdkWindow.Deiconify(); |
|
||||
GdkWindow.Unmaximize(); |
|
||||
break; |
|
||||
} |
|
||||
} |
} |
||||
} |
} |
||||
|
|
||||
public double Scaling => 1; |
public override void SetTitle(string title) |
||||
|
|
||||
IPlatformHandle ITopLevelImpl.Handle => this; |
|
||||
|
|
||||
[DllImport("libgdk-win32-2.0-0.dll", CallingConvention = CallingConvention.Cdecl)] |
|
||||
extern static IntPtr gdk_win32_drawable_get_handle(IntPtr gdkWindow); |
|
||||
|
|
||||
[DllImport("libgtk-x11-2.0.so.0", CallingConvention = CallingConvention.Cdecl)] |
|
||||
extern static IntPtr gdk_x11_drawable_get_xid(IntPtr gdkWindow); |
|
||||
|
|
||||
[DllImport("libgdk-quartz-2.0-0.dylib", CallingConvention = CallingConvention.Cdecl)] |
|
||||
extern static IntPtr gdk_quartz_window_get_nswindow(IntPtr gdkWindow); |
|
||||
|
|
||||
IntPtr _nativeWindow; |
|
||||
|
|
||||
IntPtr GetNativeWindow() |
|
||||
{ |
{ |
||||
IntPtr h = GdkWindow.Handle; |
Window.Title = title; |
||||
if (_nativeWindow != IntPtr.Zero) |
|
||||
return _nativeWindow; |
|
||||
//Try whatever backend that works
|
|
||||
try |
|
||||
{ |
|
||||
return _nativeWindow = gdk_quartz_window_get_nswindow(h); |
|
||||
} |
|
||||
catch |
|
||||
{ |
|
||||
} |
|
||||
try |
|
||||
{ |
|
||||
return _nativeWindow = gdk_x11_drawable_get_xid(h); |
|
||||
} |
|
||||
catch |
|
||||
{ |
|
||||
} |
|
||||
return _nativeWindow = gdk_win32_drawable_get_handle(h); |
|
||||
} |
} |
||||
|
|
||||
|
void OnFocusActivated(object sender, EventArgs eventArgs) |
||||
IntPtr IPlatformHandle.Handle => GetNativeWindow(); |
|
||||
public string HandleDescriptor => "HWND"; |
|
||||
|
|
||||
public Action Activated { get; set; } |
|
||||
|
|
||||
public Action Closed { get; set; } |
|
||||
|
|
||||
public Action Deactivated { get; set; } |
|
||||
|
|
||||
public Action<RawInputEventArgs> Input { get; set; } |
|
||||
|
|
||||
public Action<Rect> Paint { get; set; } |
|
||||
|
|
||||
public Action<Size> Resized { get; set; } |
|
||||
|
|
||||
public Action<double> ScalingChanged { get; set; } |
|
||||
|
|
||||
public IPopupImpl CreatePopup() |
|
||||
{ |
|
||||
return new PopupImpl(); |
|
||||
} |
|
||||
|
|
||||
public void Invalidate(Rect rect) |
|
||||
{ |
|
||||
if (base.GdkWindow != null) |
|
||||
base.GdkWindow.InvalidateRect( |
|
||||
new Rectangle((int) rect.X, (int) rect.Y, (int) rect.Width, (int) rect.Height), true); |
|
||||
} |
|
||||
|
|
||||
public Point PointToClient(Point point) |
|
||||
{ |
{ |
||||
int x, y; |
Activated(); |
||||
GdkWindow.GetDeskrelativeOrigin(out x, out y); |
|
||||
|
|
||||
return new Point(point.X - x, point.Y - y); |
|
||||
} |
|
||||
|
|
||||
public Point PointToScreen(Point point) |
|
||||
{ |
|
||||
int x, y; |
|
||||
GdkWindow.GetDeskrelativeOrigin(out x, out y); |
|
||||
|
|
||||
return new Point(point.X + x, point.Y + y); |
|
||||
} |
|
||||
|
|
||||
public void SetInputRoot(IInputRoot inputRoot) |
|
||||
{ |
|
||||
_inputRoot = inputRoot; |
|
||||
} |
|
||||
|
|
||||
public void SetTitle(string title) |
|
||||
{ |
|
||||
Title = title; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
public void SetCursor(IPlatformHandle cursor) |
|
||||
{ |
|
||||
GdkWindow.Cursor = cursor != null ? new Gdk.Cursor(cursor.Handle) : DefaultCursor; |
|
||||
} |
} |
||||
|
|
||||
public void BeginMoveDrag() |
public override void BeginMoveDrag() |
||||
{ |
{ |
||||
int x, y; |
int x, y; |
||||
ModifierType mod; |
ModifierType mod; |
||||
Screen.RootWindow.GetPointer(out x, out y, out mod); |
Window.Screen.RootWindow.GetPointer(out x, out y, out mod); |
||||
BeginMoveDrag(1, x, y, 0); |
Window.BeginMoveDrag(1, x, y, 0); |
||||
} |
} |
||||
|
|
||||
public void BeginResizeDrag(WindowEdge edge) |
public override void BeginResizeDrag(Controls.WindowEdge edge) |
||||
{ |
{ |
||||
int x, y; |
int x, y; |
||||
ModifierType mod; |
ModifierType mod; |
||||
Screen.RootWindow.GetPointer(out x, out y, out mod); |
Window.Screen.RootWindow.GetPointer(out x, out y, out mod); |
||||
BeginResizeDrag((Gdk.WindowEdge) (int) edge, 1, x, y, 0); |
Window.BeginResizeDrag((Gdk.WindowEdge)(int)edge, 1, x, y, 0); |
||||
} |
} |
||||
|
|
||||
public Point Position |
public override Point Position |
||||
{ |
{ |
||||
get |
get |
||||
{ |
{ |
||||
int x, y; |
int x, y; |
||||
GetPosition(out x, out y); |
Window.GetPosition(out x, out y); |
||||
return new Point(x, y); |
return new Point(x, y); |
||||
} |
} |
||||
set |
set |
||||
{ |
{ |
||||
Move((int)value.X, (int)value.Y); |
Window.Move((int)value.X, (int)value.Y); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
public IDisposable ShowDialog() |
public override IDisposable ShowDialog() |
||||
{ |
{ |
||||
Modal = true; |
Window.Modal = true; |
||||
Show(); |
Window.Show(); |
||||
|
|
||||
return Disposable.Empty; |
return Disposable.Empty; |
||||
} |
} |
||||
|
|
||||
public void SetSystemDecorations(bool enabled) => Decorated = enabled; |
public override void SetSystemDecorations(bool enabled) => Window.Decorated = enabled; |
||||
|
|
||||
void ITopLevelImpl.Activate() |
|
||||
{ |
|
||||
Activate(); |
|
||||
} |
|
||||
|
|
||||
private static InputModifiers GetModifierKeys(ModifierType state) |
|
||||
{ |
|
||||
var rv = InputModifiers.None; |
|
||||
if (state.HasFlag(ModifierType.ControlMask)) |
|
||||
rv |= InputModifiers.Control; |
|
||||
if (state.HasFlag(ModifierType.ShiftMask)) |
|
||||
rv |= InputModifiers.Shift; |
|
||||
if (state.HasFlag(ModifierType.Mod1Mask)) |
|
||||
rv |= InputModifiers.Control; |
|
||||
if(state.HasFlag(ModifierType.Button1Mask)) |
|
||||
rv |= InputModifiers.LeftMouseButton; |
|
||||
if (state.HasFlag(ModifierType.Button2Mask)) |
|
||||
rv |= InputModifiers.RightMouseButton; |
|
||||
if (state.HasFlag(ModifierType.Button3Mask)) |
|
||||
rv |= InputModifiers.MiddleMouseButton; |
|
||||
return rv; |
|
||||
} |
|
||||
|
|
||||
protected override bool OnButtonPressEvent(EventButton evnt) |
|
||||
{ |
|
||||
|
|
||||
var e = new RawMouseEventArgs( |
|
||||
GtkMouseDevice.Instance, |
|
||||
evnt.Time, |
|
||||
_inputRoot, |
|
||||
evnt.Button == 1 |
|
||||
? RawMouseEventType.LeftButtonDown |
|
||||
: evnt.Button == 3 ? RawMouseEventType.RightButtonDown : RawMouseEventType.MiddleButtonDown, |
|
||||
new Point(evnt.X, evnt.Y), GetModifierKeys(evnt.State)); |
|
||||
Input(e); |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
protected override bool OnScrollEvent(EventScroll evnt) |
|
||||
{ |
|
||||
double step = 1; |
|
||||
var delta = new Vector(); |
|
||||
if (evnt.Direction == ScrollDirection.Down) |
|
||||
delta = new Vector(0, -step); |
|
||||
else if (evnt.Direction == ScrollDirection.Up) |
|
||||
delta = new Vector(0, step); |
|
||||
else if (evnt.Direction == ScrollDirection.Right) |
|
||||
delta = new Vector(-step, 0); |
|
||||
if (evnt.Direction == ScrollDirection.Left) |
|
||||
delta = new Vector(step, 0); |
|
||||
var e = new RawMouseWheelEventArgs(GtkMouseDevice.Instance, evnt.Time, _inputRoot, new Point(evnt.X, evnt.Y), delta, GetModifierKeys(evnt.State)); |
|
||||
Input(e); |
|
||||
return base.OnScrollEvent(evnt); |
|
||||
} |
|
||||
|
|
||||
protected override bool OnButtonReleaseEvent(EventButton evnt) |
|
||||
{ |
|
||||
var e = new RawMouseEventArgs( |
|
||||
GtkMouseDevice.Instance, |
|
||||
evnt.Time, |
|
||||
_inputRoot, |
|
||||
evnt.Button == 1 |
|
||||
? RawMouseEventType.LeftButtonUp |
|
||||
: evnt.Button == 3 ? RawMouseEventType.RightButtonUp : RawMouseEventType.MiddleButtonUp, |
|
||||
new Point(evnt.X, evnt.Y), GetModifierKeys(evnt.State)); |
|
||||
Input(e); |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
protected override bool OnConfigureEvent(EventConfigure evnt) |
|
||||
{ |
|
||||
var newSize = new Size(evnt.Width, evnt.Height); |
|
||||
|
|
||||
if (newSize != _lastClientSize) |
|
||||
{ |
|
||||
Resized(newSize); |
|
||||
_lastClientSize = newSize; |
|
||||
} |
|
||||
|
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
protected override void OnDestroyed() |
|
||||
{ |
|
||||
Closed(); |
|
||||
} |
|
||||
|
|
||||
private bool ProcessKeyEvent(EventKey evnt) |
|
||||
{ |
|
||||
_lastKeyEventTimestamp = evnt.Time; |
|
||||
if (_imContext.FilterKeypress(evnt)) |
|
||||
return true; |
|
||||
var e = new RawKeyEventArgs( |
|
||||
GtkKeyboardDevice.Instance, |
|
||||
evnt.Time, |
|
||||
evnt.Type == EventType.KeyPress ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp, |
|
||||
GtkKeyboardDevice.ConvertKey(evnt.Key), GetModifierKeys(evnt.State)); |
|
||||
Input(e); |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
protected override bool OnKeyPressEvent(EventKey evnt) => ProcessKeyEvent(evnt); |
|
||||
|
|
||||
protected override bool OnKeyReleaseEvent(EventKey evnt) => ProcessKeyEvent(evnt); |
|
||||
|
|
||||
private void ImContext_Commit(object o, Gtk.CommitArgs args) |
|
||||
{ |
|
||||
Input(new RawTextInputEventArgs(GtkKeyboardDevice.Instance, _lastKeyEventTimestamp, args.Str)); |
|
||||
} |
|
||||
|
|
||||
protected override bool OnExposeEvent(EventExpose evnt) |
|
||||
{ |
|
||||
Paint(evnt.Area.ToAvalonia()); |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
protected override void OnFocusActivated() |
|
||||
{ |
|
||||
Activated(); |
|
||||
} |
|
||||
|
|
||||
protected override bool OnMotionNotifyEvent(EventMotion evnt) |
|
||||
{ |
|
||||
var position = new Point(evnt.X, evnt.Y); |
|
||||
|
|
||||
GtkMouseDevice.Instance.SetClientPosition(position); |
|
||||
|
|
||||
var e = new RawMouseEventArgs( |
|
||||
GtkMouseDevice.Instance, |
|
||||
evnt.Time, |
|
||||
_inputRoot, |
|
||||
RawMouseEventType.Move, |
|
||||
position, GetModifierKeys(evnt.State)); |
|
||||
Input(e); |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
public void SetIcon(IWindowIconImpl icon) |
public override void SetIcon(IWindowIconImpl icon) |
||||
{ |
{ |
||||
Icon = ((IconImpl)icon).Pixbuf; |
Window.Icon = ((IconImpl)icon).Pixbuf; |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
@ -0,0 +1,310 @@ |
|||||
|
// Copyright (c) The Avalonia Project. All rights reserved.
|
||||
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
||||
|
|
||||
|
using System; |
||||
|
using System.Reactive.Disposables; |
||||
|
using System.Runtime.InteropServices; |
||||
|
using Gdk; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Input.Raw; |
||||
|
using Avalonia.Platform; |
||||
|
using Avalonia.Input; |
||||
|
using Avalonia.Threading; |
||||
|
using Action = System.Action; |
||||
|
using WindowEdge = Avalonia.Controls.WindowEdge; |
||||
|
|
||||
|
namespace Avalonia.Gtk |
||||
|
{ |
||||
|
using Gtk = global::Gtk; |
||||
|
|
||||
|
public abstract class WindowImplBase : IWindowImpl |
||||
|
{ |
||||
|
private IInputRoot _inputRoot; |
||||
|
protected Gtk.Widget _window; |
||||
|
public Gtk.Widget Widget => _window; |
||||
|
|
||||
|
|
||||
|
private Gtk.IMContext _imContext; |
||||
|
|
||||
|
private uint _lastKeyEventTimestamp; |
||||
|
|
||||
|
private static readonly Gdk.Cursor DefaultCursor = new Gdk.Cursor(CursorType.LeftPtr); |
||||
|
|
||||
|
protected WindowImplBase(Gtk.Widget window) |
||||
|
{ |
||||
|
_window = window; |
||||
|
Init(); |
||||
|
} |
||||
|
|
||||
|
void Init() |
||||
|
{ |
||||
|
Handle = _window as IPlatformHandle; |
||||
|
_window.Events = EventMask.AllEventsMask; |
||||
|
_imContext = new Gtk.IMMulticontext(); |
||||
|
_imContext.Commit += ImContext_Commit; |
||||
|
_window.Realized += OnRealized; |
||||
|
_window.DoubleBuffered = false; |
||||
|
_window.Realize(); |
||||
|
_window.ButtonPressEvent += OnButtonPressEvent; |
||||
|
_window.ButtonReleaseEvent += OnButtonReleaseEvent; |
||||
|
_window.ScrollEvent += OnScrollEvent; |
||||
|
_window.Destroyed += OnDestroyed; |
||||
|
_window.KeyPressEvent += OnKeyPressEvent; |
||||
|
_window.KeyReleaseEvent += OnKeyReleaseEvent; |
||||
|
_window.ExposeEvent += OnExposeEvent; |
||||
|
_window.MotionNotifyEvent += OnMotionNotifyEvent; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public IPlatformHandle Handle { get; private set; } |
||||
|
|
||||
|
void OnRealized (object sender, EventArgs eventArgs) |
||||
|
{ |
||||
|
_imContext.ClientWindow = _window.GdkWindow; |
||||
|
} |
||||
|
|
||||
|
public abstract Size ClientSize { get; set; } |
||||
|
|
||||
|
|
||||
|
public Size MaxClientSize |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
// TODO: This should take into account things such as taskbar and window border
|
||||
|
// thickness etc.
|
||||
|
return new Size(_window.Screen.Width, _window.Screen.Height); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public Avalonia.Controls.WindowState WindowState |
||||
|
{ |
||||
|
get |
||||
|
{ |
||||
|
switch (_window.GdkWindow.State) |
||||
|
{ |
||||
|
case Gdk.WindowState.Iconified: |
||||
|
return Controls.WindowState.Minimized; |
||||
|
case Gdk.WindowState.Maximized: |
||||
|
return Controls.WindowState.Maximized; |
||||
|
default: |
||||
|
return Controls.WindowState.Normal; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
set |
||||
|
{ |
||||
|
switch (value) |
||||
|
{ |
||||
|
case Controls.WindowState.Minimized: |
||||
|
_window.GdkWindow.Iconify(); |
||||
|
break; |
||||
|
case Controls.WindowState.Maximized: |
||||
|
_window.GdkWindow.Maximize(); |
||||
|
break; |
||||
|
case Controls.WindowState.Normal: |
||||
|
_window.GdkWindow.Deiconify(); |
||||
|
_window.GdkWindow.Unmaximize(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public double Scaling => 1; |
||||
|
|
||||
|
public Action Activated { get; set; } |
||||
|
|
||||
|
public Action Closed { get; set; } |
||||
|
|
||||
|
public Action Deactivated { get; set; } |
||||
|
|
||||
|
public Action<RawInputEventArgs> Input { get; set; } |
||||
|
|
||||
|
public Action<Rect> Paint { get; set; } |
||||
|
|
||||
|
public Action<Size> Resized { get; set; } |
||||
|
|
||||
|
public Action<double> ScalingChanged { get; set; } |
||||
|
|
||||
|
public IPopupImpl CreatePopup() |
||||
|
{ |
||||
|
return new PopupImpl(); |
||||
|
} |
||||
|
|
||||
|
public void Invalidate(Rect rect) |
||||
|
{ |
||||
|
if (_window.GdkWindow != null) |
||||
|
_window.GdkWindow.InvalidateRect( |
||||
|
new Rectangle((int) rect.X, (int) rect.Y, (int) rect.Width, (int) rect.Height), true); |
||||
|
} |
||||
|
|
||||
|
public Point PointToClient(Point point) |
||||
|
{ |
||||
|
int x, y; |
||||
|
_window.GdkWindow.GetDeskrelativeOrigin(out x, out y); |
||||
|
|
||||
|
return new Point(point.X - x, point.Y - y); |
||||
|
} |
||||
|
|
||||
|
public Point PointToScreen(Point point) |
||||
|
{ |
||||
|
int x, y; |
||||
|
_window.GdkWindow.GetDeskrelativeOrigin(out x, out y); |
||||
|
return new Point(point.X + x, point.Y + y); |
||||
|
} |
||||
|
|
||||
|
public void SetInputRoot(IInputRoot inputRoot) |
||||
|
{ |
||||
|
_inputRoot = inputRoot; |
||||
|
} |
||||
|
|
||||
|
public abstract void SetTitle(string title); |
||||
|
public abstract IDisposable ShowDialog(); |
||||
|
public abstract void SetSystemDecorations(bool enabled); |
||||
|
public abstract void SetIcon(IWindowIconImpl icon); |
||||
|
|
||||
|
|
||||
|
public void SetCursor(IPlatformHandle cursor) |
||||
|
{ |
||||
|
_window.GdkWindow.Cursor = cursor != null ? new Gdk.Cursor(cursor.Handle) : DefaultCursor; |
||||
|
} |
||||
|
|
||||
|
public void Show() => _window.Show(); |
||||
|
|
||||
|
public void Hide() => _window.Hide(); |
||||
|
public abstract void BeginMoveDrag(); |
||||
|
public abstract void BeginResizeDrag(WindowEdge edge); |
||||
|
public abstract Point Position { get; set; } |
||||
|
|
||||
|
void ITopLevelImpl.Activate() |
||||
|
{ |
||||
|
_window.Activate(); |
||||
|
} |
||||
|
|
||||
|
private static InputModifiers GetModifierKeys(ModifierType state) |
||||
|
{ |
||||
|
var rv = InputModifiers.None; |
||||
|
if (state.HasFlag(ModifierType.ControlMask)) |
||||
|
rv |= InputModifiers.Control; |
||||
|
if (state.HasFlag(ModifierType.ShiftMask)) |
||||
|
rv |= InputModifiers.Shift; |
||||
|
if (state.HasFlag(ModifierType.Mod1Mask)) |
||||
|
rv |= InputModifiers.Control; |
||||
|
if(state.HasFlag(ModifierType.Button1Mask)) |
||||
|
rv |= InputModifiers.LeftMouseButton; |
||||
|
if (state.HasFlag(ModifierType.Button2Mask)) |
||||
|
rv |= InputModifiers.RightMouseButton; |
||||
|
if (state.HasFlag(ModifierType.Button3Mask)) |
||||
|
rv |= InputModifiers.MiddleMouseButton; |
||||
|
return rv; |
||||
|
} |
||||
|
|
||||
|
void OnButtonPressEvent(object o, Gtk.ButtonPressEventArgs args) |
||||
|
{ |
||||
|
var evnt = args.Event; |
||||
|
var e = new RawMouseEventArgs( |
||||
|
GtkMouseDevice.Instance, |
||||
|
evnt.Time, |
||||
|
_inputRoot, |
||||
|
evnt.Button == 1 |
||||
|
? RawMouseEventType.LeftButtonDown |
||||
|
: evnt.Button == 3 ? RawMouseEventType.RightButtonDown : RawMouseEventType.MiddleButtonDown, |
||||
|
new Point(evnt.X, evnt.Y), GetModifierKeys(evnt.State)); |
||||
|
Input(e); |
||||
|
} |
||||
|
|
||||
|
void OnScrollEvent(object o, Gtk.ScrollEventArgs args) |
||||
|
{ |
||||
|
var evnt = args.Event; |
||||
|
double step = 1; |
||||
|
var delta = new Vector(); |
||||
|
if (evnt.Direction == ScrollDirection.Down) |
||||
|
delta = new Vector(0, -step); |
||||
|
else if (evnt.Direction == ScrollDirection.Up) |
||||
|
delta = new Vector(0, step); |
||||
|
else if (evnt.Direction == ScrollDirection.Right) |
||||
|
delta = new Vector(-step, 0); |
||||
|
if (evnt.Direction == ScrollDirection.Left) |
||||
|
delta = new Vector(step, 0); |
||||
|
var e = new RawMouseWheelEventArgs(GtkMouseDevice.Instance, evnt.Time, _inputRoot, new Point(evnt.X, evnt.Y), delta, GetModifierKeys(evnt.State)); |
||||
|
Input(e); |
||||
|
} |
||||
|
|
||||
|
protected void OnButtonReleaseEvent(object o, Gtk.ButtonReleaseEventArgs args) |
||||
|
{ |
||||
|
var evnt = args.Event; |
||||
|
var e = new RawMouseEventArgs( |
||||
|
GtkMouseDevice.Instance, |
||||
|
evnt.Time, |
||||
|
_inputRoot, |
||||
|
evnt.Button == 1 |
||||
|
? RawMouseEventType.LeftButtonUp |
||||
|
: evnt.Button == 3 ? RawMouseEventType.RightButtonUp : RawMouseEventType.MiddleButtonUp, |
||||
|
new Point(evnt.X, evnt.Y), GetModifierKeys(evnt.State)); |
||||
|
Input(e); |
||||
|
} |
||||
|
|
||||
|
void OnDestroyed(object sender, EventArgs eventArgs) |
||||
|
{ |
||||
|
Closed(); |
||||
|
} |
||||
|
|
||||
|
private void ProcessKeyEvent(EventKey evnt) |
||||
|
{ |
||||
|
|
||||
|
_lastKeyEventTimestamp = evnt.Time; |
||||
|
if (_imContext.FilterKeypress(evnt)) |
||||
|
return; |
||||
|
var e = new RawKeyEventArgs( |
||||
|
GtkKeyboardDevice.Instance, |
||||
|
evnt.Time, |
||||
|
evnt.Type == EventType.KeyPress ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp, |
||||
|
GtkKeyboardDevice.ConvertKey(evnt.Key), GetModifierKeys(evnt.State)); |
||||
|
Input(e); |
||||
|
} |
||||
|
|
||||
|
void OnKeyPressEvent(object o, Gtk.KeyPressEventArgs args) |
||||
|
{ |
||||
|
args.RetVal = true; |
||||
|
ProcessKeyEvent(args.Event); |
||||
|
} |
||||
|
|
||||
|
void OnKeyReleaseEvent(object o, Gtk.KeyReleaseEventArgs args) |
||||
|
{ |
||||
|
args.RetVal = true; |
||||
|
ProcessKeyEvent(args.Event); |
||||
|
} |
||||
|
|
||||
|
private void ImContext_Commit(object o, Gtk.CommitArgs args) |
||||
|
{ |
||||
|
Input(new RawTextInputEventArgs(GtkKeyboardDevice.Instance, _lastKeyEventTimestamp, args.Str)); |
||||
|
} |
||||
|
|
||||
|
void OnExposeEvent(object o, Gtk.ExposeEventArgs args) |
||||
|
{ |
||||
|
Paint(args.Event.Area.ToAvalonia()); |
||||
|
args.RetVal = true; |
||||
|
} |
||||
|
|
||||
|
void OnMotionNotifyEvent(object o, Gtk.MotionNotifyEventArgs args) |
||||
|
{ |
||||
|
var evnt = args.Event; |
||||
|
var position = new Point(evnt.X, evnt.Y); |
||||
|
|
||||
|
GtkMouseDevice.Instance.SetClientPosition(position); |
||||
|
|
||||
|
var e = new RawMouseEventArgs( |
||||
|
GtkMouseDevice.Instance, |
||||
|
evnt.Time, |
||||
|
_inputRoot, |
||||
|
RawMouseEventType.Move, |
||||
|
position, GetModifierKeys(evnt.State)); |
||||
|
Input(e); |
||||
|
args.RetVal = true; |
||||
|
} |
||||
|
|
||||
|
public void Dispose() |
||||
|
{ |
||||
|
_window.Dispose(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,91 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Runtime.InteropServices; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Avalonia.Platform; |
||||
|
using Gdk; |
||||
|
using Gtk; |
||||
|
using Window = Gtk.Window; |
||||
|
using WindowType = Gtk.WindowType; |
||||
|
|
||||
|
namespace Avalonia.Gtk |
||||
|
{ |
||||
|
class PlatformHandleAwareWindow : Window, IPlatformHandle |
||||
|
{ |
||||
|
public PlatformHandleAwareWindow(WindowType type) : base(type) |
||||
|
{ |
||||
|
Events = EventMask.AllEventsMask; |
||||
|
} |
||||
|
|
||||
|
IntPtr IPlatformHandle.Handle => GetNativeWindow(); |
||||
|
public string HandleDescriptor => "HWND"; |
||||
|
|
||||
|
|
||||
|
[DllImport("libgdk-win32-2.0-0.dll", CallingConvention = CallingConvention.Cdecl)] |
||||
|
static extern IntPtr gdk_win32_drawable_get_handle(IntPtr gdkWindow); |
||||
|
|
||||
|
[DllImport("libgtk-x11-2.0.so.0", CallingConvention = CallingConvention.Cdecl)] |
||||
|
static extern IntPtr gdk_x11_drawable_get_xid(IntPtr gdkWindow); |
||||
|
|
||||
|
[DllImport("libgdk-quartz-2.0-0.dylib", CallingConvention = CallingConvention.Cdecl)] |
||||
|
static extern IntPtr gdk_quartz_window_get_nswindow(IntPtr gdkWindow); |
||||
|
|
||||
|
IntPtr _nativeWindow; |
||||
|
|
||||
|
IntPtr GetNativeWindow() |
||||
|
{ |
||||
|
if (_nativeWindow != IntPtr.Zero) |
||||
|
return _nativeWindow; |
||||
|
return _nativeWindow = GetNativeWindow(GdkWindow); |
||||
|
} |
||||
|
|
||||
|
public static IntPtr GetNativeWindow(Gdk.Window window) |
||||
|
{ |
||||
|
IntPtr h = window.Handle; |
||||
|
|
||||
|
//Try whatever backend that works
|
||||
|
try |
||||
|
{ |
||||
|
return gdk_quartz_window_get_nswindow(h); |
||||
|
} |
||||
|
catch |
||||
|
{ |
||||
|
} |
||||
|
try |
||||
|
{ |
||||
|
return gdk_x11_drawable_get_xid(h); |
||||
|
} |
||||
|
catch |
||||
|
{ |
||||
|
} |
||||
|
return gdk_win32_drawable_get_handle(h); |
||||
|
} |
||||
|
|
||||
|
protected override bool OnConfigureEvent(EventConfigure evnt) |
||||
|
{ |
||||
|
base.OnConfigureEvent(evnt); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class PlatformHandleAwareDrawingArea : DrawingArea, IPlatformHandle |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
|
||||
|
IntPtr IPlatformHandle.Handle => GetNativeWindow(); |
||||
|
public string HandleDescriptor => "HWND"; |
||||
|
IntPtr _nativeWindow; |
||||
|
|
||||
|
IntPtr GetNativeWindow() |
||||
|
{ |
||||
|
|
||||
|
if (_nativeWindow != IntPtr.Zero) |
||||
|
return _nativeWindow; |
||||
|
Realize(); |
||||
|
return _nativeWindow = PlatformHandleAwareWindow.GetNativeWindow(GdkWindow); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
namespace Avalonia.Markup.Xaml.Converters |
||||
|
{ |
||||
|
using Avalonia.Media; |
||||
|
using OmniXaml.TypeConversion; |
||||
|
using System; |
||||
|
using System.Globalization; |
||||
|
|
||||
|
public class FontWeightConverter : ITypeConverter |
||||
|
{ |
||||
|
public bool CanConvertFrom(IValueContext context, Type sourceType) |
||||
|
{ |
||||
|
return sourceType == typeof(string); |
||||
|
} |
||||
|
|
||||
|
public bool CanConvertTo(IValueContext context, Type destinationType) |
||||
|
{ |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
public object ConvertFrom(IValueContext context, CultureInfo culture, object value) |
||||
|
{ |
||||
|
FontWeight result; |
||||
|
|
||||
|
if (Enum.TryParse(value as string, out result)) |
||||
|
{ |
||||
|
return result; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
throw new ArgumentException("unable to convert parameter to FontWeight"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue