diff --git a/.gitignore b/.gitignore
index 5917c0f2ba..6ee6057d5f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -94,10 +94,6 @@ publish/
*.Publish.xml
*.pubxml
-# NuGet Packages Directory
-## TODO: If you have NuGet Package Restore enabled, uncomment the next line
-packages/
-
# Windows Azure Build Output
csx
*.build.csdef
@@ -189,3 +185,13 @@ project.lock.json
BenchmarkDotNet.Artifacts/
dirs.sln
+
+
+##################
+# XCode
+##################
+Index/
+Logs/
+ModuleCache.noindex/
+Build/Intermediates.noindex/
+info.plist
diff --git a/.ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject b/.ncrunch/Avalonia.DesktopRuntime.v3.ncrunchproject
similarity index 100%
rename from .ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject
rename to .ncrunch/Avalonia.DesktopRuntime.v3.ncrunchproject
diff --git a/.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject b/.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject
deleted file mode 100644
index 3cd9a982c9..0000000000
--- a/.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- False
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Avalonia.Gtk.v3.ncrunchproject b/.ncrunch/Avalonia.Gtk.v3.ncrunchproject
deleted file mode 100644
index 6800b4a3fe..0000000000
--- a/.ncrunch/Avalonia.Gtk.v3.ncrunchproject
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject b/.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject
deleted file mode 100644
index 6800b4a3fe..0000000000
--- a/.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject b/.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject
deleted file mode 100644
index 95a483b433..0000000000
--- a/.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject b/.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject
deleted file mode 100644
index 95a483b433..0000000000
--- a/.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.ncrunch/BindingTest.v3.ncrunchproject b/.ncrunch/BindingTest.v3.ncrunchproject
deleted file mode 100644
index a4953e14f9..0000000000
--- a/.ncrunch/BindingTest.v3.ncrunchproject
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- True
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/RemoteTest.v3.ncrunchproject b/.ncrunch/RemoteTest.v3.ncrunchproject
deleted file mode 100644
index 319cd523ce..0000000000
--- a/.ncrunch/RemoteTest.v3.ncrunchproject
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/RenderTest.v3.ncrunchproject b/.ncrunch/RenderTest.v3.ncrunchproject
deleted file mode 100644
index e12537d535..0000000000
--- a/.ncrunch/RenderTest.v3.ncrunchproject
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- MissingOrIgnoredProjectReference
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/VirtualizationTest.v3.ncrunchproject b/.ncrunch/VirtualizationTest.v3.ncrunchproject
deleted file mode 100644
index a4953e14f9..0000000000
--- a/.ncrunch/VirtualizationTest.v3.ncrunchproject
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- True
- True
-
-
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index d80d24f32c..b0c0c807cb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,6 +11,8 @@ mono:
- 5.2.0
dotnet: 2.1.200
script:
+ - sudo apt-get update
+ - sudo apt-get install castxml
- ./build.sh --target "Travis" --configuration "Release"
notifications:
email: false
diff --git a/Avalonia.sln b/Avalonia.sln
index 76d8a14524..7fa5f7736a 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -80,13 +80,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Skia", "Skia", "{3743B0F2-C
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Android", "Android", "{7CF9789C-F1D3-4D0E-90E5-F1DF67A2753F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Android", "src\Android\Avalonia.Android\Avalonia.Android.csproj", "{7B92AF71-6287-4693-9DCB-BD5B6E927E23}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Android", "src\Android\Avalonia.Android\Avalonia.Android.csproj", "{7B92AF71-6287-4693-9DCB-BD5B6E927E23}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.AndroidTestApplication", "src\Android\Avalonia.AndroidTestApplication\Avalonia.AndroidTestApplication.csproj", "{FF69B927-C545-49AE-8E16-3D14D621AA12}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "iOS", "iOS", "{0CB0B92E-6CFF-4240-80A5-CCAFE75D91E1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.iOS", "src\iOS\Avalonia.iOS\Avalonia.iOS.csproj", "{4488AD85-1495-4809-9AA4-DDFE0A48527E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.iOS", "src\iOS\Avalonia.iOS\Avalonia.iOS.csproj", "{4488AD85-1495-4809-9AA4-DDFE0A48527E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.iOSTestApplication", "src\iOS\Avalonia.iOSTestApplication\Avalonia.iOSTestApplication.csproj", "{8C923867-8A8F-4F6B-8B80-47D9E8436166}"
EndProject
@@ -116,14 +116,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Interop", "Interop", "{A0CC
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInteropTest", "samples\interop\WindowsInteropTest\WindowsInteropTest.csproj", "{C7A69145-60B6-4882-97D6-A3921DD43978}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DotNetFrameworkRuntime", "src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj", "{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RenderDemo", "samples\RenderDemo\RenderDemo.csproj", "{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Android", "samples\ControlCatalog.Android\ControlCatalog.Android.csproj", "{29132311-1848-4FD6-AE0C-4FF841151BD3}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DotNetCoreRuntime", "src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj", "{7863EA94-F0FB-4386-BF8C-E5BFA761560A}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia", "src\Skia\Avalonia.Skia\Avalonia.Skia.csproj", "{7D2D3083-71DD-4CC9-8907-39A0D86FB322}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Gtk3", "src\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj", "{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}"
@@ -164,7 +160,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.LinuxFramebuffer",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Direct3DInteropSample", "samples\interop\Direct3DInteropSample\Direct3DInteropSample.csproj", "{638580B0-7910-40EF-B674-DCB34DA308CD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Win32.Interop", "src\Windows\Avalonia.Win32.Interop\Avalonia.Win32.Interop.csproj", "{CBC4FF2F-92D4-420B-BE21-9FE0B930B04E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Win32.Interop", "src\Windows\Avalonia.Win32.Interop\Avalonia.Win32.Interop.csproj", "{CBC4FF2F-92D4-420B-BE21-9FE0B930B04E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.RenderTests", "tests\Avalonia.Skia.RenderTests\Avalonia.Skia.RenderTests.csproj", "{E1582370-37B3-403C-917F-8209551B1634}"
EndProject
@@ -178,21 +174,25 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Designer.HostApp",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Previewer", "samples\Previewer\Previewer.csproj", "{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OSX", "OSX", "{A59C4C0A-64DF-4621-B450-2BA00D6F61E2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.UnitTests", "tests\Avalonia.Skia.UnitTests\Avalonia.Skia.UnitTests.csproj", "{E1240B49-7B4B-4371-A00E-068778C5CF0B}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.MonoMac", "src\OSX\Avalonia.MonoMac\Avalonia.MonoMac.csproj", "{CBFD5788-567D-401B-9DFA-74E4224025A0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.OpenGL", "src\Avalonia.OpenGL\Avalonia.OpenGL.csproj", "{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Designer.HostApp.NetFX", "src\tools\Avalonia.Designer.HostApp.NetFX\Avalonia.Designer.HostApp.NetFX.csproj", "{4ADA61C8-D191-428D-9066-EF4F0D86520F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Native", "src\Avalonia.Native\Avalonia.Native.csproj", "{12A91A62-C064-42CA-9A8C-A1272F354388}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.UnitTests", "tests\Avalonia.Skia.UnitTests\Avalonia.Skia.UnitTests.csproj", "{E1240B49-7B4B-4371-A00E-068778C5CF0B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DesktopRuntime", "src\Avalonia.DesktopRuntime\Avalonia.DesktopRuntime.csproj", "{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Packages", "Packages", "{E870DCD7-F46A-498D-83FC-D0FD13E0A11C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia", "packages\Avalonia\Avalonia.csproj", "{D49233F8-F29C-47DD-9975-C4C9E4502720}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Desktop", "src\Avalonia.Desktop\Avalonia.Desktop.csproj", "{3C471044-3640-45E3-B1B2-16D2FF8399EE}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4
- src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4
- src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{7b92af71-6287-4693-9dcb-bd5b6e927e23}*SharedItemsImports = 4
src\Shared\RenderHelpers\RenderHelpers.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4
tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{dabfd304-d6a4-4752-8123-c2ccf7ac7831}*SharedItemsImports = 4
@@ -1219,30 +1219,6 @@ Global
{C7A69145-60B6-4882-97D6-A3921DD43978}.Release|iPhone.Build.0 = Release|Any CPU
{C7A69145-60B6-4882-97D6-A3921DD43978}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{C7A69145-60B6-4882-97D6-A3921DD43978}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|Any CPU.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhone.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhone.Build.0 = Debug|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|Any CPU.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhone.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhone.Build.0 = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1303,30 +1279,6 @@ Global
{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|Any CPU.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhone.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhone.Build.0 = Debug|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|Any CPU.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhone.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhone.Build.0 = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1591,54 +1543,6 @@ Global
{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Release|iPhone.Build.0 = Release|Any CPU
{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.AppStore|Any CPU.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.AppStore|iPhone.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Debug|iPhone.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Release|Any CPU.Build.0 = Release|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Release|iPhone.ActiveCfg = Release|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Release|iPhone.Build.0 = Release|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {CBFD5788-567D-401B-9DFA-74E4224025A0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|Any CPU.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhone.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhone.Build.0 = Debug|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|Any CPU.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhone.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhone.Build.0 = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
@@ -1663,6 +1567,126 @@ Global
{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhone.Build.0 = Release|Any CPU
{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhone.Build.0 = Release|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {7CCAEFC4-135D-401D-BDDD-896B9B7D3569}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Release|Any CPU.Build.0 = Release|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhone.Build.0 = Release|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|Any CPU.Build.0 = Release|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhone.Build.0 = Release|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhone.Build.0 = Release|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhone.Build.0 = Release|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1713,9 +1737,9 @@ Global
{E2999E4A-9086-401F-898C-AEB0AD38E676} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{050CC912-FF49-4A8B-B534-9544017446DD} = {4ED8B739-6F4E-4CD4-B993-545E6B5CE637}
{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE} = {9B9E3891-2366-4253-A952-D08BCEB71098}
- {CBFD5788-567D-401B-9DFA-74E4224025A0} = {A59C4C0A-64DF-4621-B450-2BA00D6F61E2}
- {4ADA61C8-D191-428D-9066-EF4F0D86520F} = {4ED8B739-6F4E-4CD4-B993-545E6B5CE637}
{E1240B49-7B4B-4371-A00E-068778C5CF0B} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
+ {D49233F8-F29C-47DD-9975-C4C9E4502720} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C}
+ {3C471044-3640-45E3-B1B2-16D2FF8399EE} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000000..50476c81f1
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,5 @@
+
+
+ $(MSBuildThisFileDirectory)artifacts/nuget
+
+
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 0000000000..f6929f8dee
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,128 @@
+jobs:
+- job: Linux
+ pool:
+ vmImage: 'ubuntu-16.04'
+ steps:
+ - task: CmdLine@2
+ displayName: 'Install CastXML'
+ inputs:
+ script: |
+ sudo apt-get update
+ sudo apt-get install castxml
+
+ - task: CmdLine@2
+ displayName: 'Install Cake'
+ inputs:
+ script: |
+ dotnet tool install -g Cake.Tool --version 0.30.0
+
+ - task: CmdLine@2
+ displayName: 'Run Cake'
+ inputs:
+ script: |
+ export PATH="$PATH:$HOME/.dotnet/tools"
+ dotnet --info
+ printenv
+ dotnet cake build.cake -target="Azure-Linux" -configuration="Release"
+
+ - task: PublishTestResults@2
+ inputs:
+ testResultsFormat: 'VSTest'
+ testResultsFiles: '$(Build.SourcesDirectory)/artifacts/test-results/*.trx'
+ condition: not(canceled())
+
+- job: macOS
+ pool:
+ vmImage: 'xcode9-macos10.13'
+ steps:
+ - task: DotNetCoreInstaller@0
+ inputs:
+ version: '2.1.403'
+
+ - task: Xcode@5
+ inputs:
+ actions: 'build'
+ scheme: ''
+ sdk: 'macosx10.13'
+ configuration: 'Release'
+ xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
+ xcodeVersion: 'default' # Options: 8, 9, default, specifyPath
+ args: '-derivedDataPath ./'
+
+ - task: CmdLine@2
+ displayName: 'Install CastXML'
+ inputs:
+ script: brew install castxml
+
+ - task: CmdLine@2
+ displayName: 'Install Cake'
+ inputs:
+ script: |
+ dotnet tool install -g Cake.Tool --version 0.30.0
+
+ - task: CmdLine@2
+ displayName: 'Run Cake'
+ inputs:
+ script: |
+ export COREHOST_TRACE=0
+ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+ export DOTNET_CLI_TELEMETRY_OPTOUT=1
+ which dotnet
+ dotnet --info
+ export PATH="$PATH:$HOME/.dotnet/tools"
+ dotnet --info
+ printenv
+ dotnet cake build.cake -target="Azure-OSX" -configuration="Release"
+
+ - task: PublishTestResults@2
+ inputs:
+ testResultsFormat: 'VSTest'
+ testResultsFiles: '$(Build.SourcesDirectory)/artifacts/test-results/*.trx'
+ condition: not(canceled())
+
+ - task: PublishBuildArtifacts@1
+ inputs:
+ pathToPublish: '$(Build.SourcesDirectory)/Build/Products/Release/'
+ artifactName: 'Avalonia.Native.OSX'
+ condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
+
+ - task: PublishBuildArtifacts@1
+ inputs:
+ pathtoPublish: '$(Build.SourcesDirectory)/artifacts/nuget'
+ artifactName: 'NuGetOSX'
+ condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
+
+- job: Windows
+ pool:
+ vmImage: 'vs2017-win2016'
+ steps:
+ - task: CmdLine@2
+ displayName: 'Install Cake'
+ inputs:
+ script: |
+ dotnet tool install -g Cake.Tool --version 0.30.0
+
+ - task: CmdLine@2
+ displayName: 'Run Cake'
+ inputs:
+ script: |
+ set PATH=%PATH%;%USERPROFILE%\.dotnet\tools
+ dotnet cake build.cake -target="Azure-Windows" -configuration="Release"
+
+ - task: PublishTestResults@2
+ inputs:
+ testResultsFormat: 'VSTest'
+ testResultsFiles: '$(Build.SourcesDirectory)/artifacts/test-results/*.trx'
+ condition: not(canceled())
+
+ - task: PublishBuildArtifacts@1
+ inputs:
+ pathtoPublish: '$(Build.SourcesDirectory)/artifacts/nuget'
+ artifactName: 'NuGet'
+ condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
+
+ - task: PublishBuildArtifacts@1
+ inputs:
+ pathToPublish: '$(Build.SourcesDirectory)/artifacts/zip'
+ artifactName: 'Samples'
+ condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
diff --git a/build-native.sh b/build-native.sh
new file mode 100644
index 0000000000..5983751dce
--- /dev/null
+++ b/build-native.sh
@@ -0,0 +1,6 @@
+# /bin/sh
+
+mkdir native-build
+cd native-build
+cmake -DCMAKE_BUILD_TYPE=$1 ../native
+cmake --build . --target install
\ No newline at end of file
diff --git a/build.cake b/build.cake
index 24f529ee4a..f10a12c4e6 100644
--- a/build.cake
+++ b/build.cake
@@ -1,15 +1,9 @@
-///////////////////////////////////////////////////////////////////////////////
-// ADDINS
-///////////////////////////////////////////////////////////////////////////////
-
-#addin "nuget:?package=NuGet.Core&version=2.14.0"
-#tool "nuget:?package=NuGet.CommandLine&version=4.3.0"
-#tool "nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2017.1.20170613.162720"
-
///////////////////////////////////////////////////////////////////////////////
// TOOLS
///////////////////////////////////////////////////////////////////////////////
+#tool "nuget:?package=NuGet.CommandLine&version=4.7.1"
+#tool "nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2018.2.3"
#tool "nuget:?package=xunit.runner.console&version=2.3.1"
#tool "nuget:?package=JetBrains.dotMemoryUnit&version=3.0.20171219.105559"
@@ -21,39 +15,20 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
-using NuGet;
///////////////////////////////////////////////////////////////////////////////
// SCRIPTS
///////////////////////////////////////////////////////////////////////////////
#load "./parameters.cake"
-#load "./packages.cake"
-
-//////////////////////////////////////////////////////////////////////
-// PARAMETERS
-//////////////////////////////////////////////////////////////////////
-
-class AvaloniaBuildData
-{
- public AvaloniaBuildData(Parameters parameters, Packages packages)
- {
- Parameters = parameters;
- Packages = packages;
- }
-
- public Parameters Parameters { get; }
- public Packages Packages { get; }
-}
///////////////////////////////////////////////////////////////////////////////
// SETUP
///////////////////////////////////////////////////////////////////////////////
-Setup(context =>
+Setup(context =>
{
var parameters = new Parameters(context);
- var buildContext = new AvaloniaBuildData(parameters, new Packages(context, parameters));
Information("Building version {0} of Avalonia ({1}) using version {2} of Cake.",
parameters.Version,
@@ -71,22 +46,24 @@ Setup(context =>
Information("IsRunningOnUnix: " + parameters.IsRunningOnUnix);
Information("IsRunningOnWindows: " + parameters.IsRunningOnWindows);
Information("IsRunningOnAppVeyor: " + parameters.IsRunningOnAppVeyor);
+ Information("IsRunnongOnAzure:" + parameters.IsRunningOnAzure);
Information("IsPullRequest: " + parameters.IsPullRequest);
Information("IsMainRepo: " + parameters.IsMainRepo);
Information("IsMasterBranch: " + parameters.IsMasterBranch);
+ Information("IsReleaseBranch: " + parameters.IsReleaseBranch);
Information("IsTagged: " + parameters.IsTagged);
Information("IsReleasable: " + parameters.IsReleasable);
Information("IsMyGetRelease: " + parameters.IsMyGetRelease);
Information("IsNuGetRelease: " + parameters.IsNuGetRelease);
- return buildContext;
+ return parameters;
});
///////////////////////////////////////////////////////////////////////////////
// TEARDOWN
///////////////////////////////////////////////////////////////////////////////
-Teardown((context, buildContext) =>
+Teardown((context, buildContext) =>
{
Information("Finished running tasks.");
});
@@ -96,13 +73,13 @@ Teardown((context, buildContext) =>
///////////////////////////////////////////////////////////////////////////////
Task("Clean-Impl")
- .Does(data =>
+ .Does(data =>
{
- CleanDirectories(data.Parameters.BuildDirs);
- CleanDirectory(data.Parameters.ArtifactsDir);
- CleanDirectory(data.Parameters.NugetRoot);
- CleanDirectory(data.Parameters.ZipRoot);
- CleanDirectory(data.Parameters.BinRoot);
+ CleanDirectories(data.BuildDirs);
+ CleanDirectory(data.ArtifactsDir);
+ CleanDirectory(data.NugetRoot);
+ CleanDirectory(data.ZipRoot);
+ CleanDirectory(data.TestResultsRoot);
});
void DotNetCoreBuild(Parameters parameters)
@@ -110,27 +87,35 @@ void DotNetCoreBuild(Parameters parameters)
var settings = new DotNetCoreBuildSettings
{
Configuration = parameters.Configuration,
+ MSBuildSettings = new DotNetCoreMSBuildSettings
+ {
+ Properties =
+ {
+ { "PackageVersion", new [] { parameters.Version } }
+ }
+ }
};
DotNetCoreBuild(parameters.MSBuildSolution, settings);
}
Task("Build-Impl")
- .Does(data =>
+ .Does(data =>
{
- if(data.Parameters.IsRunningOnWindows)
+ if(data.IsRunningOnWindows)
{
- MSBuild(data.Parameters.MSBuildSolution, settings => {
- settings.SetConfiguration(data.Parameters.Configuration);
+ MSBuild(data.MSBuildSolution, settings => {
+ settings.SetConfiguration(data.Configuration);
settings.SetVerbosity(Verbosity.Minimal);
settings.WithProperty("iOSRoslynPathHackRequired", "true");
+ settings.WithProperty("PackageVersion", data.Version);
settings.UseToolVersion(MSBuildToolVersion.VS2017);
settings.WithRestore();
});
}
else
{
- DotNetCoreBuild(data.Parameters);
+ DotNetCoreBuild(data);
}
});
@@ -146,55 +131,63 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
continue;
Information("Running for " + fw);
- DotNetCoreTest(project,
- new DotNetCoreTestSettings {
- Configuration = parameters.Configuration,
- Framework = fw,
- NoBuild = true,
- NoRestore = true
- });
+ var settings = new DotNetCoreTestSettings {
+ Configuration = parameters.Configuration,
+ Framework = fw,
+ NoBuild = true,
+ NoRestore = true
+ };
+
+ if (parameters.PublishTestResults)
+ {
+ settings.Logger = "trx";
+ settings.ResultsDirectory = parameters.TestResultsRoot;
+ }
+
+ DotNetCoreTest(project, settings);
}
}
Task("Run-Unit-Tests-Impl")
- .WithCriteria((context, data) => !data.Parameters.SkipTests)
- .Does(data =>
+ .WithCriteria((context, data) => !data.SkipTests)
+ .Does(data =>
{
- RunCoreTest("./tests/Avalonia.Base.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Controls.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Input.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Layout.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Markup.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Styling.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data.Parameters, false);
- RunCoreTest("./tests/Avalonia.Skia.UnitTests", data.Parameters, false);
- if (data.Parameters.IsRunningOnWindows)
+ RunCoreTest("./tests/Avalonia.Base.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Controls.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Input.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Layout.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Markup.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Styling.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.Skia.UnitTests", data, false);
+ RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests", data, false);
+ if (data.IsRunningOnWindows)
{
- RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data, false);
}
});
Task("Run-Designer-Tests-Impl")
- .WithCriteria((context, data) => !data.Parameters.SkipTests)
- .Does(data =>
+ .WithCriteria((context, data) => !data.SkipTests)
+ .Does(data =>
{
- RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false);
+ RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data, false);
});
Task("Run-Render-Tests-Impl")
- .WithCriteria((context, data) => !data.Parameters.SkipTests)
- .WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
- .Does(data =>
+ .WithCriteria((context, data) => !data.SkipTests)
+ .WithCriteria((context, data) => data.IsRunningOnWindows)
+ .Does(data =>
{
- RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data.Parameters, true);
- RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data.Parameters, true);
+ RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data, true);
+ RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data, true);
});
Task("Run-Leak-Tests-Impl")
- .WithCriteria((context, data) => !data.Parameters.SkipTests)
- .WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
+ .WithCriteria((context, data) => !data.SkipTests)
+ .WithCriteria((context, data) => data.IsRunningOnWindows)
.Does(() =>
{
var dotMemoryUnit = Context.Tools.Resolve("dotMemoryUnit.exe");
@@ -214,136 +207,58 @@ Task("Run-Leak-Tests-Impl")
}
});
-Task("Copy-Files-Impl")
- .Does(data =>
-{
- CopyFiles(data.Packages.BinFiles, data.Parameters.BinRoot);
-});
-
Task("Zip-Files-Impl")
- .Does(data =>
+ .Does(data =>
{
- Zip(data.Parameters.BinRoot, data.Parameters.ZipCoreArtifacts);
+ Zip(data.BinRoot, data.ZipCoreArtifacts);
- Zip(data.Parameters.NugetRoot, data.Parameters.ZipNuGetArtifacts);
+ Zip(data.NugetRoot, data.ZipNuGetArtifacts);
- Zip(data.Parameters.ZipSourceControlCatalogDesktopDirs,
- data.Parameters.ZipTargetControlCatalogDesktopDirs,
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") +
- GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
+ Zip(data.ZipSourceControlCatalogDesktopDirs,
+ data.ZipTargetControlCatalogDesktopDirs,
+ GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") +
+ GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") +
+ GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") +
+ GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") +
+ GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
});
-Task("Create-NuGet-Packages-Impl")
- .Does(data =>
+void DotNetCorePack(Parameters parameters)
{
- foreach(var nuspec in data.Packages.NuspecNuGetSettings)
+ var settings = new DotNetCorePackSettings
{
- NuGetPack(nuspec);
- }
-});
-
-Task("Publish-MyGet-Impl")
- .WithCriteria((context, data) => !data.Parameters.IsLocalBuild)
- .WithCriteria((context, data) => !data.Parameters.IsPullRequest)
- .WithCriteria((context, data) => data.Parameters.IsMainRepo)
- .WithCriteria((context, data) => data.Parameters.IsMasterBranch)
- .WithCriteria((context, data) => data.Parameters.IsMyGetRelease)
- .Does(data =>
-{
- 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.");
- }
+ Configuration = parameters.Configuration,
+ MSBuildSettings = new DotNetCoreMSBuildSettings
+ {
+ Properties =
+ {
+ { "PackageVersion", new [] { parameters.Version } }
+ }
+ }
+ };
- foreach(var nupkg in data.Packages.NugetPackages)
- {
- NuGetPush(nupkg, new NuGetPushSettings {
- Source = apiUrl,
- ApiKey = apiKey
- });
- }
-})
-.OnError(exception =>
-{
- Information("Publish-MyGet Task failed, but continuing with next Task...");
-});
+ DotNetCorePack(parameters.MSBuildSolution, settings);
+}
-Task("Publish-NuGet-Impl")
- .WithCriteria((context, data) => !data.Parameters.IsLocalBuild)
- .WithCriteria((context, data) => !data.Parameters.IsPullRequest)
- .WithCriteria((context, data) => data.Parameters.IsMainRepo)
- .WithCriteria((context, data) => data.Parameters.IsNuGetRelease)
- .Does(data =>
+Task("Create-NuGet-Packages-Impl")
+ .Does(data =>
{
- 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))
+ if(data.IsRunningOnWindows)
{
- throw new InvalidOperationException("Could not resolve NuGet API url.");
- }
-
- foreach(var nupkg in data.Packages.NugetPackages)
- {
- NuGetPush(nupkg, new NuGetPushSettings {
- ApiKey = apiKey,
- Source = apiUrl
+ MSBuild(data.MSBuildSolution, settings => {
+ settings.SetConfiguration(data.Configuration);
+ settings.SetVerbosity(Verbosity.Minimal);
+ settings.WithProperty("iOSRoslynPathHackRequired", "true");
+ settings.WithProperty("PackageVersion", data.Version);
+ settings.UseToolVersion(MSBuildToolVersion.VS2017);
+ settings.WithRestore();
+ settings.WithTarget("Pack");
});
}
-})
-.OnError(exception =>
-{
- Information("Publish-NuGet Task failed, but continuing with next Task...");
-});
-
-Task("Inspect-Impl")
- .WithCriteria((context, data) => data.Parameters.IsRunningOnWindows)
- .Does(() =>
-{
- var badIssues = new []{"PossibleNullReferenceException"};
- var whitelist = new []{"tests", "src\\android", "src\\ios",
- "src\\markup\\avalonia.markup.xaml\\portablexaml\\portable.xaml.github"};
- Information("Running code inspections");
-
- var exitCode = StartProcess(Context.Tools.Resolve("inspectcode.exe"),
- new ProcessSettings
- {
- Arguments = "--output=artifacts\\inspectcode.xml --profile=Avalonia.sln.DotSettings Avalonia.sln",
- RedirectStandardOutput = true
- });
-
- Information("Analyzing report");
- var doc = XDocument.Parse(System.IO.File.ReadAllText("artifacts\\inspectcode.xml"));
- var failBuild = false;
- foreach(var xml in doc.Descendants("Issue"))
+ else
{
- var typeId = xml.Attribute("TypeId").Value.ToString();
- if(badIssues.Contains(typeId))
- {
- var file = xml.Attribute("File").Value.ToString().ToLower();
- if(whitelist.Any(wh => file.StartsWith(wh)))
- continue;
- var line = xml.Attribute("Line").Value.ToString();
- Error(typeId + " - " + file + " on line " + line);
- failBuild = true;
- }
+ DotNetCorePack(data);
}
- if(failBuild)
- throw new Exception("Issues found");
});
///////////////////////////////////////////////////////////////////////////////
@@ -363,19 +278,26 @@ Task("Run-Tests")
Task("Package")
.IsDependentOn("Run-Tests")
- .IsDependentOn("Inspect-Impl")
.IsDependentOn("Create-NuGet-Packages-Impl");
Task("AppVeyor")
.IsDependentOn("Package")
- .IsDependentOn("Copy-Files-Impl")
- .IsDependentOn("Zip-Files-Impl")
- .IsDependentOn("Publish-MyGet-Impl")
- .IsDependentOn("Publish-NuGet-Impl");
+ .IsDependentOn("Zip-Files-Impl");
Task("Travis")
.IsDependentOn("Run-Tests");
+Task("Azure-Linux")
+ .IsDependentOn("Run-Tests");
+
+Task("Azure-OSX")
+ .IsDependentOn("Package")
+ .IsDependentOn("Zip-Files-Impl");
+
+Task("Azure-Windows")
+ .IsDependentOn("Package")
+ .IsDependentOn("Zip-Files-Impl");
+
///////////////////////////////////////////////////////////////////////////////
// EXECUTE
///////////////////////////////////////////////////////////////////////////////
diff --git a/build/CoreLibraries.props b/build/CoreLibraries.props
new file mode 100644
index 0000000000..d989e643b8
--- /dev/null
+++ b/build/CoreLibraries.props
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/LegacyProject.targets b/build/LegacyProject.targets
new file mode 100644
index 0000000000..0e0d49b1c2
--- /dev/null
+++ b/build/LegacyProject.targets
@@ -0,0 +1,3 @@
+
+
+
diff --git a/build/MonoMac.props b/build/MonoMac.props
deleted file mode 100644
index 5cf19ef503..0000000000
--- a/build/MonoMac.props
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/build/ReactiveUI.props b/build/ReactiveUI.props
index acdfdd215a..1208be34b8 100644
--- a/build/ReactiveUI.props
+++ b/build/ReactiveUI.props
@@ -1,5 +1,5 @@
-
+
diff --git a/build/ReferenceCoreLibraries.props b/build/ReferenceCoreLibraries.props
new file mode 100644
index 0000000000..bd9d6ad843
--- /dev/null
+++ b/build/ReferenceCoreLibraries.props
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/build/Rx.props b/build/Rx.props
index f4affcacac..359ce53a92 100644
--- a/build/Rx.props
+++ b/build/Rx.props
@@ -1,9 +1,5 @@
-
-
-
-
diff --git a/build/SampleApp.props b/build/SampleApp.props
index 3b538e4029..5580a4c2c9 100644
--- a/build/SampleApp.props
+++ b/build/SampleApp.props
@@ -2,12 +2,7 @@
WinExe
-
-
-
-
+
-
diff --git a/build/SharedVersion.props b/build/SharedVersion.props
index 351583a106..b46ac16a79 100644
--- a/build/SharedVersion.props
+++ b/build/SharedVersion.props
@@ -2,8 +2,8 @@
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Avalonia
- 0.6.2
- Copyright 2016 © The AvaloniaUI Project
+ 0.7.1
+ Copyright 2018 © The AvaloniaUI Project
https://github.com/AvaloniaUI/Avalonia/blob/master/licence.md
https://github.com/AvaloniaUI/Avalonia/
https://github.com/AvaloniaUI/Avalonia/
diff --git a/build/System.Drawing.Common.props b/build/System.Drawing.Common.props
index a568152bbd..2b3707d38a 100644
--- a/build/System.Drawing.Common.props
+++ b/build/System.Drawing.Common.props
@@ -1,5 +1,5 @@
-
+
diff --git a/dirs.proj b/dirs.proj
index b655987aa4..0f24632b72 100644
--- a/dirs.proj
+++ b/dirs.proj
@@ -3,6 +3,7 @@
+
diff --git a/global.json b/global.json
index 38f403a701..d11e78bd7f 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,7 @@
{
"msbuild-sdks": {
- "Microsoft.Build.Traversal": "1.0.41",
- "MSBuild.Sdk.Extras": "1.6.46"
+ "Microsoft.Build.Traversal": "1.0.43",
+ "MSBuild.Sdk.Extras": "1.6.46",
+ "AggregatePackage.NuGet.Sdk" : "0.1.12"
}
}
diff --git a/native/Avalonia.Native/inc/avalonia-native-guids.h b/native/Avalonia.Native/inc/avalonia-native-guids.h
new file mode 100644
index 0000000000..439008fd4b
--- /dev/null
+++ b/native/Avalonia.Native/inc/avalonia-native-guids.h
@@ -0,0 +1,5 @@
+// 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.
+
+#define COM_GUIDS_MATERIALIZE
+#include "avalonia-native.h"
diff --git a/native/Avalonia.Native/inc/avalonia-native.h b/native/Avalonia.Native/inc/avalonia-native.h
new file mode 100644
index 0000000000..0c965b7498
--- /dev/null
+++ b/native/Avalonia.Native/inc/avalonia-native.h
@@ -0,0 +1,363 @@
+// 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.
+
+#include "com.h"
+#include "key.h"
+
+#define AVNCOM(name, id) COMINTERFACE(name, 2e2cda0a, 9ae5, 4f1b, 8e, 20, 08, 1a, 04, 27, 9f, id)
+
+struct IAvnWindowEvents;
+struct IAvnWindow;
+struct IAvnPopup;
+struct IAvnMacOptions;
+struct IAvnPlatformThreadingInterface;
+struct IAvnSystemDialogEvents;
+struct IAvnSystemDialogs;
+struct IAvnScreens;
+struct IAvnClipboard;
+struct IAvnCursor;
+struct IAvnCursorFactory;
+struct IAvnGlFeature;
+struct IAvnGlContext;
+struct IAvnGlDisplay;
+struct IAvnGlSurfaceRenderTarget;
+struct IAvnGlSurfaceRenderingSession;
+
+struct AvnSize
+{
+ double Width, Height;
+};
+
+struct AvnPixelSize
+{
+ int Width, Height;
+};
+
+struct AvnRect
+{
+ double X, Y, Width, Height;
+};
+
+struct AvnVector
+{
+ double X, Y;
+};
+
+struct AvnPoint
+{
+ double X, Y;
+};
+
+struct AvnScreen
+{
+ AvnRect Bounds;
+ AvnRect WorkingArea;
+ bool Primary;
+};
+
+enum AvnPixelFormat
+{
+ kAvnRgb565,
+ kAvnRgba8888,
+ kAvnBgra8888
+};
+
+struct AvnFramebuffer
+{
+ void* Data;
+ int Width;
+ int Height;
+ int Stride;
+ AvnVector Dpi;
+ AvnPixelFormat PixelFormat;
+};
+
+struct AvnColor
+{
+ unsigned char Alpha;
+ unsigned char Red;
+ unsigned char Green;
+ unsigned char Blue;
+};
+
+enum AvnRawMouseEventType
+{
+ LeaveWindow,
+ LeftButtonDown,
+ LeftButtonUp,
+ RightButtonDown,
+ RightButtonUp,
+ MiddleButtonDown,
+ MiddleButtonUp,
+ Move,
+ Wheel,
+ NonClientLeftButtonDown
+};
+
+enum AvnRawKeyEventType
+{
+ KeyDown,
+ KeyUp
+};
+
+enum AvnInputModifiers
+{
+ AvnInputModifiersNone = 0,
+ Alt = 1,
+ Control = 2,
+ Shift = 4,
+ Windows = 8,
+ LeftMouseButton = 16,
+ RightMouseButton = 32,
+ MiddleMouseButton = 64
+};
+
+enum AvnWindowState
+{
+ Normal,
+ Minimized,
+ Maximized,
+};
+
+enum AvnStandardCursorType
+{
+ CursorArrow,
+ CursorIbeam,
+ CursorWait,
+ CursorCross,
+ CursorUpArrow,
+ CursorSizeWestEast,
+ CursorSizeNorthSouth,
+ CursorSizeAll,
+ CursorNo,
+ CursorHand,
+ CursorAppStarting,
+ CursorHelp,
+ CursorTopSide,
+ CursorBottomSize,
+ CursorLeftSide,
+ CursorRightSide,
+ CursorTopLeftCorner,
+ CursorTopRightCorner,
+ CursorBottomLeftCorner,
+ CursorBottomRightCorner,
+ CursorDragMove,
+ CursorDragCopy,
+ CursorDragLink,
+};
+
+enum AvnWindowEdge
+{
+ WindowEdgeNorthWest,
+ WindowEdgeNorth,
+ WindowEdgeNorthEast,
+ WindowEdgeWest,
+ WindowEdgeEast,
+ WindowEdgeSouthWest,
+ WindowEdgeSouth,
+ WindowEdgeSouthEast
+};
+
+AVNCOM(IAvaloniaNativeFactory, 01) : IUnknown
+{
+public:
+ virtual HRESULT Initialize() = 0;
+ virtual IAvnMacOptions* GetMacOptions() = 0;
+ virtual HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnWindow** ppv) = 0;
+ virtual HRESULT CreatePopup (IAvnWindowEvents* cb, IAvnPopup** ppv) = 0;
+ virtual HRESULT CreatePlatformThreadingInterface(IAvnPlatformThreadingInterface** ppv) = 0;
+ virtual HRESULT CreateSystemDialogs (IAvnSystemDialogs** ppv) = 0;
+ virtual HRESULT CreateScreens (IAvnScreens** ppv) = 0;
+ virtual HRESULT CreateClipboard(IAvnClipboard** ppv) = 0;
+ virtual HRESULT CreateCursorFactory(IAvnCursorFactory** ppv) = 0;
+ virtual HRESULT ObtainGlFeature(IAvnGlFeature** ppv) = 0;
+};
+
+AVNCOM(IAvnWindowBase, 02) : IUnknown
+{
+ virtual HRESULT Show() = 0;
+ virtual HRESULT Hide () = 0;
+ virtual HRESULT Close() = 0;
+ virtual HRESULT Activate () = 0;
+ virtual HRESULT GetClientSize(AvnSize*ret) = 0;
+ virtual HRESULT GetMaxClientSize(AvnSize* ret) = 0;
+ virtual HRESULT GetScaling(double*ret)=0;
+ virtual HRESULT SetMinMaxSize(AvnSize minSize, AvnSize maxSize) = 0;
+ virtual HRESULT Resize(double width, double height) = 0;
+ virtual HRESULT Invalidate (AvnRect rect) = 0;
+ virtual HRESULT BeginMoveDrag () = 0;
+ virtual HRESULT BeginResizeDrag (AvnWindowEdge edge) = 0;
+ virtual HRESULT GetPosition (AvnPoint*ret) = 0;
+ virtual HRESULT SetPosition (AvnPoint point) = 0;
+ virtual HRESULT PointToClient (AvnPoint point, AvnPoint*ret) = 0;
+ virtual HRESULT PointToScreen (AvnPoint point, AvnPoint*ret) = 0;
+ virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose) = 0;
+ virtual HRESULT SetTopMost (bool value) = 0;
+ virtual HRESULT SetCursor(IAvnCursor* cursor) = 0;
+ virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ret) = 0;
+ virtual HRESULT GetSoftwareFramebuffer(AvnFramebuffer*ret) = 0;
+ virtual bool TryLock() = 0;
+ virtual void Unlock() = 0;
+};
+
+AVNCOM(IAvnPopup, 03) : virtual IAvnWindowBase
+{
+
+};
+
+AVNCOM(IAvnWindow, 04) : virtual IAvnWindowBase
+{
+ virtual HRESULT ShowDialog (IUnknown**ppv) = 0;
+ virtual HRESULT SetCanResize(bool value) = 0;
+ virtual HRESULT SetHasDecorations(bool value) = 0;
+ virtual HRESULT SetTitle (const char* title) = 0;
+ virtual HRESULT SetTitleBarColor (AvnColor color) = 0;
+ virtual HRESULT SetWindowState(AvnWindowState state) = 0;
+ virtual HRESULT GetWindowState(AvnWindowState*ret) = 0;
+};
+
+AVNCOM(IAvnWindowBaseEvents, 05) : IUnknown
+{
+ virtual HRESULT Paint() = 0;
+ virtual void Closed() = 0;
+ virtual void Activated() = 0;
+ virtual void Deactivated() = 0;
+ virtual void Resized(const AvnSize& size) = 0;
+ virtual void PositionChanged (AvnPoint position) = 0;
+ virtual void RawMouseEvent (AvnRawMouseEventType type,
+ unsigned int timeStamp,
+ AvnInputModifiers modifiers,
+ AvnPoint point,
+ AvnVector delta) = 0;
+ virtual bool RawKeyEvent (AvnRawKeyEventType type, unsigned int timeStamp, AvnInputModifiers modifiers, unsigned int key) = 0;
+ virtual bool RawTextInputEvent (unsigned int timeStamp, const char* text) = 0;
+ virtual void ScalingChanged(double scaling) = 0;
+ virtual void RunRenderPriorityJobs() = 0;
+};
+
+
+AVNCOM(IAvnWindowEvents, 06) : IAvnWindowBaseEvents
+{
+ /**
+ * Closing Event
+ * Called when the user presses the OS window close button.
+ * return true to allow the close, return false to prevent close.
+ */
+ virtual bool Closing () = 0;
+
+ virtual void WindowStateChanged (AvnWindowState state) = 0;
+};
+
+AVNCOM(IAvnMacOptions, 07) : IUnknown
+{
+ virtual HRESULT SetShowInDock(int show) = 0;
+};
+
+AVNCOM(IAvnActionCallback, 08) : IUnknown
+{
+ virtual void Run() = 0;
+};
+
+AVNCOM(IAvnSignaledCallback, 09) : IUnknown
+{
+ virtual void Signaled(int priority, bool priorityContainsMeaningfulValue) = 0;
+};
+
+AVNCOM(IAvnLoopCancellation, 0a) : IUnknown
+{
+ virtual void Cancel() = 0;
+};
+
+AVNCOM(IAvnPlatformThreadingInterface, 0b) : IUnknown
+{
+ virtual bool GetCurrentThreadIsLoopThread() = 0;
+ virtual void SetSignaledCallback(IAvnSignaledCallback* cb) = 0;
+ virtual IAvnLoopCancellation* CreateLoopCancellation() = 0;
+ virtual void RunLoop(IAvnLoopCancellation* cancel) = 0;
+ // Can't pass int* to sharpgentools for some reason
+ virtual void Signal(int priority) = 0;
+ virtual IUnknown* StartTimer(int priority, int ms, IAvnActionCallback* callback) = 0;
+};
+
+AVNCOM(IAvnSystemDialogEvents, 0c) : IUnknown
+{
+ virtual void OnCompleted (int numResults, void* ptrFirstResult) = 0;
+};
+
+AVNCOM(IAvnSystemDialogs, 0d) : IUnknown
+{
+ virtual void SelectFolderDialog (IAvnWindow* parentWindowHandle,
+ IAvnSystemDialogEvents* events,
+ const char* title,
+ const char* initialPath) = 0;
+
+ virtual void OpenFileDialog (IAvnWindow* parentWindowHandle,
+ IAvnSystemDialogEvents* events,
+ bool allowMultiple,
+ const char* title,
+ const char* initialDirectory,
+ const char* initialFile,
+ const char* filters) = 0;
+
+ virtual void SaveFileDialog (IAvnWindow* parentWindowHandle,
+ IAvnSystemDialogEvents* events,
+ const char* title,
+ const char* initialDirectory,
+ const char* initialFile,
+ const char* filters) = 0;
+};
+
+AVNCOM(IAvnScreens, 0e) : IUnknown
+{
+ virtual HRESULT GetScreenCount (int* ret) = 0;
+ virtual HRESULT GetScreen (int index, AvnScreen* ret) = 0;
+};
+
+AVNCOM(IAvnClipboard, 0f) : IUnknown
+{
+ virtual HRESULT GetText (void** retOut) = 0;
+ virtual HRESULT SetText (char* text) = 0;
+ virtual HRESULT Clear() = 0;
+};
+
+AVNCOM(IAvnCursor, 10) : IUnknown
+{
+};
+
+AVNCOM(IAvnCursorFactory, 11) : IUnknown
+{
+ virtual HRESULT GetCursor (AvnStandardCursorType cursorType, IAvnCursor** retOut) = 0;
+};
+
+
+AVNCOM(IAvnGlFeature, 12) : IUnknown
+{
+ virtual HRESULT ObtainDisplay(IAvnGlDisplay**retOut) = 0;
+ virtual HRESULT ObtainImmediateContext(IAvnGlContext**retOut) = 0;
+};
+
+AVNCOM(IAvnGlDisplay, 13) : IUnknown
+{
+ virtual HRESULT GetSampleCount(int* ret) = 0;
+ virtual HRESULT GetStencilSize(int* ret) = 0;
+ virtual HRESULT ClearContext() = 0;
+ virtual void* GetProcAddress(char* proc) = 0;
+};
+
+AVNCOM(IAvnGlContext, 14) : IUnknown
+{
+ virtual HRESULT MakeCurrent() = 0;
+};
+
+AVNCOM(IAvnGlSurfaceRenderTarget, 15) : IUnknown
+{
+ virtual HRESULT BeginDrawing(IAvnGlSurfaceRenderingSession** ret) = 0;
+};
+
+AVNCOM(IAvnGlSurfaceRenderingSession, 16) : IUnknown
+{
+ virtual HRESULT GetPixelSize(AvnPixelSize* ret) = 0;
+ virtual HRESULT GetScaling(double* ret) = 0;
+};
+
+extern "C" IAvaloniaNativeFactory* CreateAvaloniaNative();
diff --git a/native/Avalonia.Native/inc/com.h b/native/Avalonia.Native/inc/com.h
new file mode 100644
index 0000000000..22fb4a11a3
--- /dev/null
+++ b/native/Avalonia.Native/inc/com.h
@@ -0,0 +1,57 @@
+// 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.
+
+#pragma clang diagnostic push
+#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection"
+#ifndef COM_H_INCLUDED
+#define COM_H_INCLUDED
+
+
+typedef struct _GUID {
+ unsigned int Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[ 8 ];
+} GUID;
+typedef GUID IID;
+typedef const IID* REFIID;
+typedef unsigned int HRESULT;
+typedef unsigned int DWORD;
+typedef DWORD ULONG;
+
+#define STDMETHODCALLTYPE
+
+#define S_OK 0x0L
+
+#define E_NOTIMPL 0x80004001L
+#define E_NOINTERFACE 0x80004002L
+#define E_POINTER 0x80004003L
+#define E_ABORT 0x80004004L
+#define E_FAIL 0x80004005L
+#define E_UNEXPECTED 0x8000FFFFL
+#define E_HANDLE 0x80070006L
+#define E_INVALIDARG 0x80070057L
+
+struct IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+ REFIID riid,
+ void **ppvObject) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE Release( void) = 0;
+
+};
+
+#ifdef COM_GUIDS_MATERIALIZE
+#define __IID_DEF(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) extern "C" const GUID IID_ ## name = {0x ## d1, 0x ## d2, 0x ## d3, \
+{0x ## d41, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42, 0x ## d42 } };
+#else
+#define __IID_DEF(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) extern "C" const GUID IID_ ## name;
+#endif
+#define COMINTERFACE(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) __IID_DEF(name,d1,d2,d3, d41, d42, d43, d44, d45, d46, d47, d48) \
+struct __attribute__((annotate("uuid(" #d1 "-" #d2 "-" #d3 "-" #d41 #d42 "-" #d43 #d44 #d45 #d46 #d47 #d48 ")" ))) name
+
+#endif // COM_H_INCLUDED
+#pragma clang diagnostic pop
diff --git a/native/Avalonia.Native/inc/comimpl.h b/native/Avalonia.Native/inc/comimpl.h
new file mode 100644
index 0000000000..cf1aa4c735
--- /dev/null
+++ b/native/Avalonia.Native/inc/comimpl.h
@@ -0,0 +1,184 @@
+// 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.
+#include "com.h"
+#pragma clang diagnostic push
+#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection"
+#ifndef COMIMPL_H_INCLUDED
+#define COMIMPL_H_INCLUDED
+
+#include
+
+__IID_DEF(IUnknown, 0, 0, 0, C0, 00, 00, 00, 00, 00, 00, 46);
+
+class ComObject : public virtual IUnknown
+{
+private:
+ unsigned int _refCount;
+public:
+
+ virtual ULONG AddRef()
+ {
+ _refCount++;
+ return _refCount;
+ }
+
+
+ virtual ULONG Release()
+ {
+ _refCount--;
+ ULONG rv = _refCount;
+ if(_refCount == 0)
+ delete(this);
+ return rv;
+ }
+
+ ComObject()
+ {
+ _refCount = 1;
+
+ }
+ virtual ~ComObject()
+ {
+ }
+
+
+ virtual ::HRESULT STDMETHODCALLTYPE QueryInterfaceImpl(REFIID riid, void **ppvObject) = 0;
+
+ virtual ::HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,
+ void **ppvObject)
+ {
+ if(0 == memcmp(riid, &IID_IUnknown, sizeof(GUID)))
+ *ppvObject = (IUnknown*)this;
+ else
+ {
+ auto rv = QueryInterfaceImpl(riid, ppvObject);
+ if(rv != S_OK)
+ return rv;
+ }
+ _refCount++;
+ return S_OK;
+ }
+
+};
+
+
+#define FORWARD_IUNKNOWN() \
+virtual ULONG Release() override \
+{ \
+return ComObject::Release(); \
+} \
+virtual ULONG AddRef() override \
+{ \
+ return ComObject::AddRef(); \
+} \
+virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) override \
+{ \
+ return ComObject::QueryInterface(riid, ppvObject); \
+}
+
+#define BEGIN_INTERFACE_MAP() public: virtual HRESULT STDMETHODCALLTYPE QueryInterfaceImpl(REFIID riid, void **ppvObject) override {
+#define INTERFACE_MAP_ENTRY(TInterface, IID) if(0 == memcmp(riid, &IID, sizeof(GUID))) { TInterface* casted = this; *ppvObject = casted; return S_OK; }
+#define END_INTERFACE_MAP() return E_NOINTERFACE; }
+#define INHERIT_INTERFACE_MAP(TBase) if(TBase::QueryInterfaceImpl(riid, ppvObject) == S_OK) return S_OK;
+
+
+
+class ComUnknownObject : public ComObject
+{
+public:
+ FORWARD_IUNKNOWN()
+ virtual ::HRESULT STDMETHODCALLTYPE QueryInterfaceImpl(REFIID riid, void **ppvObject) override
+ {
+ return E_NOINTERFACE;
+ };
+ virtual ~ComUnknownObject(){}
+};
+
+template class ComSingleObject : public ComObject, public virtual TInterface
+{
+ BEGIN_INTERFACE_MAP()
+ INTERFACE_MAP_ENTRY(TInterface, *TIID)
+ END_INTERFACE_MAP()
+
+public:
+ virtual ~ComSingleObject(){}
+};
+
+template
+class ComPtr
+{
+private:
+ TInterface* _obj;
+public:
+ ComPtr()
+ {
+ _obj = 0;
+ }
+
+ ComPtr(TInterface* pObj)
+ {
+ _obj = 0;
+
+ if (pObj)
+ {
+ _obj = pObj;
+ _obj->AddRef();
+ }
+ }
+
+ ComPtr(const ComPtr& ptr)
+ {
+ _obj = 0;
+
+ if (ptr._obj)
+ {
+ _obj = ptr._obj;
+ _obj->AddRef();
+ }
+
+ }
+
+ ComPtr& operator=(ComPtr other)
+ {
+ if(_obj != NULL)
+ _obj->Release();
+ _obj = other._obj;
+ if(_obj != NULL)
+ _obj->AddRef();
+ return *this;
+ }
+
+ ~ComPtr()
+ {
+ if (_obj)
+ {
+ _obj->Release();
+ _obj = 0;
+ }
+ }
+
+ TInterface* getRaw()
+ {
+ return _obj;
+ }
+
+ operator TInterface*() const
+ {
+ return _obj;
+ }
+ TInterface& operator*() const
+ {
+ return *_obj;
+ }
+ TInterface** operator&()
+ {
+ return &_obj;
+ }
+ TInterface* operator->() const
+ {
+ return _obj;
+ }
+};
+
+#endif // COMIMPL_H_INCLUDED
+#pragma clang diagnostic pop
diff --git a/native/Avalonia.Native/inc/key.h b/native/Avalonia.Native/inc/key.h
new file mode 100644
index 0000000000..cdc9658e29
--- /dev/null
+++ b/native/Avalonia.Native/inc/key.h
@@ -0,0 +1,1023 @@
+// 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.
+
+#ifndef _KEY_H_
+#define _KEY_H_
+
+///
+/// Defines the keys available on a keyboard.
+///
+enum AvnKey
+{
+ ///
+ /// No key pressed.
+ ///
+ AvnKeyNone = 0,
+
+ ///
+ /// The Cancel key.
+ ///
+ AvnKeyCancel = 1,
+
+ ///
+ /// The Back key.
+ ///
+ AvnKeyBack = 2,
+
+ ///
+ /// The Tab key.
+ ///
+ AvnKeyTab = 3,
+
+ ///
+ /// The Linefeed key.
+ ///
+ AvnKeyLineFeed = 4,
+
+ ///
+ /// The Clear key.
+ ///
+ AvnKeyClear = 5,
+
+ ///
+ /// The Return key.
+ ///
+ AvnKeyReturn = 6,
+
+ ///
+ /// The Enter key.
+ ///
+ AvnKeyEnter = 6,
+
+ ///
+ /// The Pause key.
+ ///
+ AvnKeyPause = 7,
+
+ ///
+ /// The Caps Lock key.
+ ///
+ AvnKeyCapsLock = 8,
+
+ ///
+ /// The Caps Lock key.
+ ///
+ AvnKeyCapital = 8,
+
+ ///
+ /// The IME Hangul mode key.
+ ///
+ AvnKeyHangulMode = 9,
+
+ ///
+ /// The IME Kana mode key.
+ ///
+ AvnKeyKanaMode = 9,
+
+ ///
+ /// The IME Junja mode key.
+ ///
+ AvnKeyJunjaMode = 10,
+
+ ///
+ /// The IME Final mode key.
+ ///
+ AvnKeyFinalMode = 11,
+
+ ///
+ /// The IME Kanji mode key.
+ ///
+ AvnKeyKanjiMode = 12,
+
+ ///
+ /// The IME Hanja mode key.
+ ///
+ HanjaMode = 12,
+
+ ///
+ /// The Escape key.
+ ///
+ Escape = 13,
+
+ ///
+ /// The IME Convert key.
+ ///
+ ImeConvert = 14,
+
+ ///
+ /// The IME NonConvert key.
+ ///
+ ImeNonConvert = 15,
+
+ ///
+ /// The IME Accept key.
+ ///
+ ImeAccept = 16,
+
+ ///
+ /// The IME Mode change key.
+ ///
+ ImeModeChange = 17,
+
+ ///
+ /// The space bar.
+ ///
+ Space = 18,
+
+ ///
+ /// The Page Up key.
+ ///
+ PageUp = 19,
+
+ ///
+ /// The Page Up key.
+ ///
+ Prior = 19,
+
+ ///
+ /// The Page Down key.
+ ///
+ PageDown = 20,
+
+ ///
+ /// The Page Down key.
+ ///
+ Next = 20,
+
+ ///
+ /// The End key.
+ ///
+ End = 21,
+
+ ///
+ /// The Home key.
+ ///
+ Home = 22,
+
+ ///
+ /// The Left arrow key.
+ ///
+ Left = 23,
+
+ ///
+ /// The Up arrow key.
+ ///
+ Up = 24,
+
+ ///
+ /// The Right arrow key.
+ ///
+ Right = 25,
+
+ ///
+ /// The Down arrow key.
+ ///
+ Down = 26,
+
+ ///
+ /// The Select key.
+ ///
+ Select = 27,
+
+ ///
+ /// The Print key.
+ ///
+ Print = 28,
+
+ ///
+ /// The Execute key.
+ ///
+ Execute = 29,
+
+ ///
+ /// The Print Screen key.
+ ///
+ Snapshot = 30,
+
+ ///
+ /// The Print Screen key.
+ ///
+ PrintScreen = 30,
+
+ ///
+ /// The Insert key.
+ ///
+ Insert = 31,
+
+ ///
+ /// The Delete key.
+ ///
+ Delete = 32,
+
+ ///
+ /// The Help key.
+ ///
+ Help = 33,
+
+ ///
+ /// The 0 key.
+ ///
+ D0 = 34,
+
+ ///
+ /// The 1 key.
+ ///
+ D1 = 35,
+
+ ///
+ /// The 2 key.
+ ///
+ D2 = 36,
+
+ ///
+ /// The 3 key.
+ ///
+ D3 = 37,
+
+ ///
+ /// The 4 key.
+ ///
+ D4 = 38,
+
+ ///
+ /// The 5 key.
+ ///
+ D5 = 39,
+
+ ///
+ /// The 6 key.
+ ///
+ D6 = 40,
+
+ ///
+ /// The 7 key.
+ ///
+ D7 = 41,
+
+ ///
+ /// The 8 key.
+ ///
+ D8 = 42,
+
+ ///
+ /// The 9 key.
+ ///
+ D9 = 43,
+
+ ///
+ /// The A key.
+ ///
+ A = 44,
+
+ ///
+ /// The B key.
+ ///
+ B = 45,
+
+ ///
+ /// The C key.
+ ///
+ C = 46,
+
+ ///
+ /// The D key.
+ ///
+ D = 47,
+
+ ///
+ /// The E key.
+ ///
+ E = 48,
+
+ ///
+ /// The F key.
+ ///
+ F = 49,
+
+ ///
+ /// The G key.
+ ///
+ G = 50,
+
+ ///
+ /// The H key.
+ ///
+ H = 51,
+
+ ///
+ /// The I key.
+ ///
+ I = 52,
+
+ ///
+ /// The J key.
+ ///
+ J = 53,
+
+ ///
+ /// The K key.
+ ///
+ AvnKeyK = 54,
+
+ ///
+ /// The L key.
+ ///
+ L = 55,
+
+ ///
+ /// The M key.
+ ///
+ M = 56,
+
+ ///
+ /// The N key.
+ ///
+ N = 57,
+
+ ///
+ /// The O key.
+ ///
+ O = 58,
+
+ ///
+ /// The P key.
+ ///
+ P = 59,
+
+ ///
+ /// The Q key.
+ ///
+ Q = 60,
+
+ ///
+ /// The R key.
+ ///
+ R = 61,
+
+ ///
+ /// The S key.
+ ///
+ S = 62,
+
+ ///
+ /// The T key.
+ ///
+ T = 63,
+
+ ///
+ /// The U key.
+ ///
+ U = 64,
+
+ ///
+ /// The V key.
+ ///
+ V = 65,
+
+ ///
+ /// The W key.
+ ///
+ W = 66,
+
+ ///
+ /// The X key.
+ ///
+ X = 67,
+
+ ///
+ /// The Y key.
+ ///
+ Y = 68,
+
+ ///
+ /// The Z key.
+ ///
+ Z = 69,
+
+ ///
+ /// The left Windows key.
+ ///
+ LWin = 70,
+
+ ///
+ /// The right Windows key.
+ ///
+ RWin = 71,
+
+ ///
+ /// The Application key.
+ ///
+ Apps = 72,
+
+ ///
+ /// The Sleep key.
+ ///
+ Sleep = 73,
+
+ ///
+ /// The 0 key on the numeric keypad.
+ ///
+ NumPad0 = 74,
+
+ ///
+ /// The 1 key on the numeric keypad.
+ ///
+ NumPad1 = 75,
+
+ ///
+ /// The 2 key on the numeric keypad.
+ ///
+ NumPad2 = 76,
+
+ ///
+ /// The 3 key on the numeric keypad.
+ ///
+ NumPad3 = 77,
+
+ ///
+ /// The 4 key on the numeric keypad.
+ ///
+ NumPad4 = 78,
+
+ ///
+ /// The 5 key on the numeric keypad.
+ ///
+ NumPad5 = 79,
+
+ ///
+ /// The 6 key on the numeric keypad.
+ ///
+ NumPad6 = 80,
+
+ ///
+ /// The 7 key on the numeric keypad.
+ ///
+ NumPad7 = 81,
+
+ ///
+ /// The 8 key on the numeric keypad.
+ ///
+ NumPad8 = 82,
+
+ ///
+ /// The 9 key on the numeric keypad.
+ ///
+ NumPad9 = 83,
+
+ ///
+ /// The Multiply key.
+ ///
+ Multiply = 84,
+
+ ///
+ /// The Add key.
+ ///
+ Add = 85,
+
+ ///
+ /// The Separator key.
+ ///
+ Separator = 86,
+
+ ///
+ /// The Subtract key.
+ ///
+ Subtract = 87,
+
+ ///
+ /// The Decimal key.
+ ///
+ Decimal = 88,
+
+ ///
+ /// The Divide key.
+ ///
+ Divide = 89,
+
+ ///
+ /// The F1 key.
+ ///
+ F1 = 90,
+
+ ///
+ /// The F2 key.
+ ///
+ F2 = 91,
+
+ ///
+ /// The F3 key.
+ ///
+ F3 = 92,
+
+ ///
+ /// The F4 key.
+ ///
+ F4 = 93,
+
+ ///
+ /// The F5 key.
+ ///
+ F5 = 94,
+
+ ///
+ /// The F6 key.
+ ///
+ F6 = 95,
+
+ ///
+ /// The F7 key.
+ ///
+ F7 = 96,
+
+ ///
+ /// The F8 key.
+ ///
+ F8 = 97,
+
+ ///
+ /// The F9 key.
+ ///
+ F9 = 98,
+
+ ///
+ /// The F10 key.
+ ///
+ F10 = 99,
+
+ ///
+ /// The F11 key.
+ ///
+ F11 = 100,
+
+ ///
+ /// The F12 key.
+ ///
+ F12 = 101,
+
+ ///
+ /// The F13 key.
+ ///
+ F13 = 102,
+
+ ///
+ /// The F14 key.
+ ///
+ F14 = 103,
+
+ ///
+ /// The F15 key.
+ ///
+ F15 = 104,
+
+ ///
+ /// The F16 key.
+ ///
+ F16 = 105,
+
+ ///
+ /// The F17 key.
+ ///
+ F17 = 106,
+
+ ///
+ /// The F18 key.
+ ///
+ F18 = 107,
+
+ ///
+ /// The F19 key.
+ ///
+ F19 = 108,
+
+ ///
+ /// The F20 key.
+ ///
+ F20 = 109,
+
+ ///
+ /// The F21 key.
+ ///
+ F21 = 110,
+
+ ///
+ /// The F22 key.
+ ///
+ F22 = 111,
+
+ ///
+ /// The F23 key.
+ ///
+ F23 = 112,
+
+ ///
+ /// The F24 key.
+ ///
+ F24 = 113,
+
+ ///
+ /// The Numlock key.
+ ///
+ NumLock = 114,
+
+ ///
+ /// The Scroll key.
+ ///
+ Scroll = 115,
+
+ ///
+ /// The left Shift key.
+ ///
+ LeftShift = 116,
+
+ ///
+ /// The right Shift key.
+ ///
+ RightShift = 117,
+
+ ///
+ /// The left Ctrl key.
+ ///
+ LeftCtrl = 118,
+
+ ///
+ /// The right Ctrl key.
+ ///
+ RightCtrl = 119,
+
+ ///
+ /// The left Alt key.
+ ///
+ LeftAlt = 120,
+
+ ///
+ /// The right Alt key.
+ ///
+ RightAlt = 121,
+
+ ///
+ /// The browser Back key.
+ ///
+ BrowserBack = 122,
+
+ ///
+ /// The browser Forward key.
+ ///
+ BrowserForward = 123,
+
+ ///
+ /// The browser Refresh key.
+ ///
+ BrowserRefresh = 124,
+
+ ///
+ /// The browser Stop key.
+ ///
+ BrowserStop = 125,
+
+ ///
+ /// The browser Search key.
+ ///
+ BrowserSearch = 126,
+
+ ///
+ /// The browser Favorites key.
+ ///
+ BrowserFavorites = 127,
+
+ ///
+ /// The browser Home key.
+ ///
+ BrowserHome = 128,
+
+ ///
+ /// The Volume Mute key.
+ ///
+ VolumeMute = 129,
+
+ ///
+ /// The Volume Down key.
+ ///
+ VolumeDown = 130,
+
+ ///
+ /// The Volume Up key.
+ ///
+ VolumeUp = 131,
+
+ ///
+ /// The media Next Track key.
+ ///
+ MediaNextTrack = 132,
+
+ ///
+ /// The media Previous Track key.
+ ///
+ MediaPreviousTrack = 133,
+
+ ///
+ /// The media Stop key.
+ ///
+ MediaStop = 134,
+
+ ///
+ /// The media Play/Pause key.
+ ///
+ MediaPlayPause = 135,
+
+ ///
+ /// The Launch Mail key.
+ ///
+ LaunchMail = 136,
+
+ ///
+ /// The Select Media key.
+ ///
+ SelectMedia = 137,
+
+ ///
+ /// The Launch Application 1 key.
+ ///
+ LaunchApplication1 = 138,
+
+ ///
+ /// The Launch Application 2 key.
+ ///
+ LaunchApplication2 = 139,
+
+ ///
+ /// The OEM Semicolon key.
+ ///
+ OemSemicolon = 140,
+
+ ///
+ /// The OEM 1 key.
+ ///
+ Oem1 = 140,
+
+ ///
+ /// The OEM Plus key.
+ ///
+ OemPlus = 141,
+
+ ///
+ /// The OEM Comma key.
+ ///
+ OemComma = 142,
+
+ ///
+ /// The OEM Minus key.
+ ///
+ OemMinus = 143,
+
+ ///
+ /// The OEM Period key.
+ ///
+ OemPeriod = 144,
+
+ ///
+ /// The OEM Question Mark key.
+ ///
+ OemQuestion = 145,
+
+ ///
+ /// The OEM 2 key.
+ ///
+ Oem2 = 145,
+
+ ///
+ /// The OEM Tilde key.
+ ///
+ OemTilde = 146,
+
+ ///
+ /// The OEM 3 key.
+ ///
+ Oem3 = 146,
+
+ ///
+ /// The ABNT_C1 (Brazilian) key.
+ ///
+ AbntC1 = 147,
+
+ ///
+ /// The ABNT_C2 (Brazilian) key.
+ ///
+ AbntC2 = 148,
+
+ ///
+ /// The OEM Open Brackets key.
+ ///
+ OemOpenBrackets = 149,
+
+ ///
+ /// The OEM 4 key.
+ ///
+ Oem4 = 149,
+
+ ///
+ /// The OEM Pipe key.
+ ///
+ OemPipe = 150,
+
+ ///
+ /// The OEM 5 key.
+ ///
+ Oem5 = 150,
+
+ ///
+ /// The OEM Close Brackets key.
+ ///
+ OemCloseBrackets = 151,
+
+ ///
+ /// The OEM 6 key.
+ ///
+ Oem6 = 151,
+
+ ///
+ /// The OEM Quotes key.
+ ///
+ OemQuotes = 152,
+
+ ///
+ /// The OEM 7 key.
+ ///
+ Oem7 = 152,
+
+ ///
+ /// The OEM 8 key.
+ ///
+ Oem8 = 153,
+
+ ///
+ /// The OEM Backslash key.
+ ///
+ OemBackslash = 154,
+
+ ///
+ /// The OEM 3 key.
+ ///
+ Oem102 = 154,
+
+ ///
+ /// A special key masking the real key being processed by an IME.
+ ///
+ ImeProcessed = 155,
+
+ ///
+ /// A special key masking the real key being processed as a system key.
+ ///
+ System = 156,
+
+ ///
+ /// The OEM ATTN key.
+ ///
+ OemAttn = 157,
+
+ ///
+ /// The DBE_ALPHANUMERIC key.
+ ///
+ DbeAlphanumeric = 157,
+
+ ///
+ /// The OEM Finish key.
+ ///
+ OemFinish = 158,
+
+ ///
+ /// The DBE_KATAKANA key.
+ ///
+ DbeKatakana = 158,
+
+ ///
+ /// The DBE_HIRAGANA key.
+ ///
+ DbeHiragana = 159,
+
+ ///
+ /// The OEM Copy key.
+ ///
+ OemCopy = 159,
+
+ ///
+ /// The DBE_SBCSCHAR key.
+ ///
+ DbeSbcsChar = 160,
+
+ ///
+ /// The OEM Auto key.
+ ///
+ OemAuto = 160,
+
+ ///
+ /// The DBE_DBCSCHAR key.
+ ///
+ DbeDbcsChar = 161,
+
+ ///
+ /// The OEM ENLW key.
+ ///
+ OemEnlw = 161,
+
+ ///
+ /// The OEM BackTab key.
+ ///
+ OemBackTab = 162,
+
+ ///
+ /// The DBE_ROMAN key.
+ ///
+ DbeRoman = 162,
+
+ ///
+ /// The DBE_NOROMAN key.
+ ///
+ DbeNoRoman = 163,
+
+ ///
+ /// The ATTN key.
+ ///
+ Attn = 163,
+
+ ///
+ /// The CRSEL key.
+ ///
+ CrSel = 164,
+
+ ///
+ /// The DBE_ENTERWORDREGISTERMODE key.
+ ///
+ DbeEnterWordRegisterMode = 164,
+
+ ///
+ /// The EXSEL key.
+ ///
+ ExSel = 165,
+
+ ///
+ /// The DBE_ENTERIMECONFIGMODE key.
+ ///
+ DbeEnterImeConfigureMode = 165,
+
+ ///
+ /// The ERASE EOF Key.
+ ///
+ EraseEof = 166,
+
+ ///
+ /// The DBE_FLUSHSTRING key.
+ ///
+ DbeFlushString = 166,
+
+ ///
+ /// The Play key.
+ ///
+ Play = 167,
+
+ ///
+ /// The DBE_CODEINPUT key.
+ ///
+ DbeCodeInput = 167,
+
+ ///
+ /// The DBE_NOCODEINPUT key.
+ ///
+ DbeNoCodeInput = 168,
+
+ ///
+ /// The Zoom key.
+ ///
+ Zoom = 168,
+
+ ///
+ /// Reserved for future use.
+ ///
+ NoName = 169,
+
+ ///
+ /// The DBE_DETERMINESTRING key.
+ ///
+ DbeDetermineString = 169,
+
+ ///
+ /// The DBE_ENTERDLGCONVERSIONMODE key.
+ ///
+ DbeEnterDialogConversionMode = 170,
+
+ ///
+ /// The PA1 key.
+ ///
+ Pa1 = 170,
+
+ ///
+ /// The OEM Clear key.
+ ///
+ OemClear = 171,
+
+ ///
+ /// The key is used with another key to create a single combined character.
+ ///
+ DeadCharProcessed = 172,
+};
+
+#endif
diff --git a/native/Avalonia.Native/src/OSX/.gitignore b/native/Avalonia.Native/src/OSX/.gitignore
new file mode 100644
index 0000000000..cbe26bb13c
--- /dev/null
+++ b/native/Avalonia.Native/src/OSX/.gitignore
@@ -0,0 +1,4 @@
+build
+
+Avalonia.Native.OSX.xcodeproj/xcuserdata
+Avalonia.Native.OSX.xcodeproj/project.xcworkspace/xcuserdata
diff --git a/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.pbxproj b/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..bd8ac481a8
--- /dev/null
+++ b/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.pbxproj
@@ -0,0 +1,328 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 37A517B32159597E00FBA241 /* Screens.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37A517B22159597E00FBA241 /* Screens.mm */; };
+ 37C09D8821580FE4006A6758 /* SystemDialogs.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37C09D8721580FE4006A6758 /* SystemDialogs.mm */; };
+ 37E2330F21583241000CB7E2 /* KeyTransform.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37E2330E21583241000CB7E2 /* KeyTransform.mm */; };
+ 5B21A982216530F500CEE36E /* cursor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B21A981216530F500CEE36E /* cursor.mm */; };
+ 5B8BD94F215BFEA6005ED2A7 /* clipboard.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5B8BD94E215BFEA6005ED2A7 /* clipboard.mm */; };
+ AB00E4F72147CA920032A60A /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB00E4F62147CA920032A60A /* main.mm */; };
+ AB1E522C217613570091CD71 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB1E522B217613570091CD71 /* OpenGL.framework */; };
+ AB573DC4217605E400D389A2 /* gl.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB573DC3217605E400D389A2 /* gl.mm */; };
+ AB661C1E2148230F00291242 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB661C1D2148230F00291242 /* AppKit.framework */; };
+ AB661C202148286E00291242 /* window.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB661C1F2148286E00291242 /* window.mm */; };
+ AB8F7D6B21482D7F0057DBA5 /* platformthreading.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB8F7D6A21482D7F0057DBA5 /* platformthreading.mm */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 379860FE214DA0C000CD0246 /* KeyTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KeyTransform.h; sourceTree = ""; };
+ 37A4E71A2178846A00EACBCD /* headers */ = {isa = PBXFileReference; lastKnownFileType = folder; name = headers; path = ../../inc; sourceTree = ""; };
+ 37A517B22159597E00FBA241 /* Screens.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Screens.mm; sourceTree = ""; };
+ 37C09D8721580FE4006A6758 /* SystemDialogs.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SystemDialogs.mm; sourceTree = ""; };
+ 37C09D8A21581EF2006A6758 /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = window.h; sourceTree = ""; };
+ 37E2330E21583241000CB7E2 /* KeyTransform.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = KeyTransform.mm; sourceTree = ""; };
+ 5B21A981216530F500CEE36E /* cursor.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = cursor.mm; sourceTree = ""; };
+ 5B8BD94E215BFEA6005ED2A7 /* clipboard.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = clipboard.mm; sourceTree = ""; };
+ 5BF943652167AD1D009CAE35 /* cursor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = ""; };
+ AB00E4F62147CA920032A60A /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; };
+ AB1E522B217613570091CD71 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+ AB573DC3217605E400D389A2 /* gl.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = gl.mm; sourceTree = ""; };
+ AB661C1D2148230F00291242 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+ AB661C1F2148286E00291242 /* window.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = window.mm; sourceTree = ""; };
+ AB661C212148288600291242 /* common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; };
+ AB7A61EF2147C815003C5833 /* libAvalonia.Native.OSX.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libAvalonia.Native.OSX.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+ AB8F7D6A21482D7F0057DBA5 /* platformthreading.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = platformthreading.mm; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ AB7A61EC2147C814003C5833 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AB1E522C217613570091CD71 /* OpenGL.framework in Frameworks */,
+ AB661C1E2148230F00291242 /* AppKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ AB661C1C2148230E00291242 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ AB1E522B217613570091CD71 /* OpenGL.framework */,
+ AB661C1D2148230F00291242 /* AppKit.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ AB7A61E62147C814003C5833 = {
+ isa = PBXGroup;
+ children = (
+ 37A4E71A2178846A00EACBCD /* headers */,
+ AB573DC3217605E400D389A2 /* gl.mm */,
+ 5BF943652167AD1D009CAE35 /* cursor.h */,
+ 5B21A981216530F500CEE36E /* cursor.mm */,
+ 5B8BD94E215BFEA6005ED2A7 /* clipboard.mm */,
+ AB8F7D6A21482D7F0057DBA5 /* platformthreading.mm */,
+ AB661C212148288600291242 /* common.h */,
+ 379860FE214DA0C000CD0246 /* KeyTransform.h */,
+ 37E2330E21583241000CB7E2 /* KeyTransform.mm */,
+ AB661C1F2148286E00291242 /* window.mm */,
+ 37C09D8A21581EF2006A6758 /* window.h */,
+ AB00E4F62147CA920032A60A /* main.mm */,
+ 37A517B22159597E00FBA241 /* Screens.mm */,
+ 37C09D8721580FE4006A6758 /* SystemDialogs.mm */,
+ AB7A61F02147C815003C5833 /* Products */,
+ AB661C1C2148230E00291242 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ AB7A61F02147C815003C5833 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ AB7A61EF2147C815003C5833 /* libAvalonia.Native.OSX.dylib */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ AB7A61ED2147C814003C5833 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ AB7A61EE2147C814003C5833 /* Avalonia.Native.OSX */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = AB7A61F82147C815003C5833 /* Build configuration list for PBXNativeTarget "Avalonia.Native.OSX" */;
+ buildPhases = (
+ AB7A61EB2147C814003C5833 /* Sources */,
+ AB7A61EC2147C814003C5833 /* Frameworks */,
+ AB7A61ED2147C814003C5833 /* Headers */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Avalonia.Native.OSX;
+ productName = Avalonia.Native.OSX;
+ productReference = AB7A61EF2147C815003C5833 /* libAvalonia.Native.OSX.dylib */;
+ productType = "com.apple.product-type.library.dynamic";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ AB7A61E72147C814003C5833 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1000;
+ ORGANIZATIONNAME = Avalonia;
+ TargetAttributes = {
+ AB7A61EE2147C814003C5833 = {
+ CreatedOnToolsVersion = 8.3.2;
+ ProvisioningStyle = Automatic;
+ };
+ };
+ };
+ buildConfigurationList = AB7A61EA2147C814003C5833 /* Build configuration list for PBXProject "Avalonia.Native.OSX" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = AB7A61E62147C814003C5833;
+ productRefGroup = AB7A61F02147C815003C5833 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ AB7A61EE2147C814003C5833 /* Avalonia.Native.OSX */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ AB7A61EB2147C814003C5833 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5B8BD94F215BFEA6005ED2A7 /* clipboard.mm in Sources */,
+ 5B21A982216530F500CEE36E /* cursor.mm in Sources */,
+ AB8F7D6B21482D7F0057DBA5 /* platformthreading.mm in Sources */,
+ 37E2330F21583241000CB7E2 /* KeyTransform.mm in Sources */,
+ 37A517B32159597E00FBA241 /* Screens.mm in Sources */,
+ AB00E4F72147CA920032A60A /* main.mm in Sources */,
+ 37C09D8821580FE4006A6758 /* SystemDialogs.mm in Sources */,
+ AB573DC4217605E400D389A2 /* gl.mm in Sources */,
+ AB661C202148286E00291242 /* window.mm in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ AB7A61F62147C815003C5833 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ };
+ name = Debug;
+ };
+ AB7A61F72147C815003C5833 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.12;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ };
+ name = Release;
+ };
+ AB7A61F92147C815003C5833 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ EXECUTABLE_PREFIX = lib;
+ HEADER_SEARCH_PATHS = ../../inc;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ AB7A61FA2147C815003C5833 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ EXECUTABLE_PREFIX = lib;
+ HEADER_SEARCH_PATHS = ../../inc;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ AB7A61EA2147C814003C5833 /* Build configuration list for PBXProject "Avalonia.Native.OSX" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AB7A61F62147C815003C5833 /* Debug */,
+ AB7A61F72147C815003C5833 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ AB7A61F82147C815003C5833 /* Build configuration list for PBXNativeTarget "Avalonia.Native.OSX" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AB7A61F92147C815003C5833 /* Debug */,
+ AB7A61FA2147C815003C5833 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = AB7A61E72147C814003C5833 /* Project object */;
+}
diff --git a/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..4ea7ed7566
--- /dev/null
+++ b/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme b/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme
new file mode 100644
index 0000000000..1a665d3ea5
--- /dev/null
+++ b/native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/native/Avalonia.Native/src/OSX/KeyTransform.h b/native/Avalonia.Native/src/OSX/KeyTransform.h
new file mode 100644
index 0000000000..c4466020c3
--- /dev/null
+++ b/native/Avalonia.Native/src/OSX/KeyTransform.h
@@ -0,0 +1,12 @@
+// 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.
+
+#ifndef keytransform_h
+#define keytransform_h
+#include "common.h"
+#include "key.h"
+#include
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -32,4 +13,5 @@
+
diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj
index 86030bf200..272632e7eb 100644
--- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj
+++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj
@@ -155,4 +155,5 @@
+
diff --git a/samples/ControlCatalog.Desktop/App.config b/samples/ControlCatalog.Desktop/App.config
deleted file mode 100644
index cd4593817b..0000000000
--- a/samples/ControlCatalog.Desktop/App.config
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
index d60d087393..054de2a05f 100644
--- a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
+++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
@@ -6,16 +6,9 @@
-
-
-
-
-
-
-
diff --git a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj
index ec841db5b2..7e2c707e91 100644
--- a/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj
+++ b/samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj
@@ -6,10 +6,12 @@
-
-
+
-
\ No newline at end of file
+
+
+
+
diff --git a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
index 6754cdf9a9..7596e4cfe2 100644
--- a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
+++ b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
@@ -176,4 +176,5 @@
+
diff --git a/samples/ControlCatalog/App.config b/samples/ControlCatalog/App.config
deleted file mode 100644
index 0c47592f2c..0000000000
--- a/samples/ControlCatalog/App.config
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/samples/ControlCatalog/App.xaml b/samples/ControlCatalog/App.xaml
index 43971dec4f..95d515ec60 100644
--- a/samples/ControlCatalog/App.xaml
+++ b/samples/ControlCatalog/App.xaml
@@ -14,6 +14,11 @@
-
+
+
+
-
\ No newline at end of file
+
diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj
index a147eac6ef..13b79d75b5 100644
--- a/samples/ControlCatalog/ControlCatalog.csproj
+++ b/samples/ControlCatalog/ControlCatalog.csproj
@@ -22,19 +22,8 @@
-
-
-
-
-
-
-
-
-
+
-
-
-
diff --git a/samples/ControlCatalog/Pages/ButtonPage.xaml b/samples/ControlCatalog/Pages/ButtonPage.xaml
index 38757148ab..a4690e32e1 100644
--- a/samples/ControlCatalog/Pages/ButtonPage.xaml
+++ b/samples/ControlCatalog/Pages/ButtonPage.xaml
@@ -18,7 +18,7 @@
diff --git a/samples/ControlCatalog/Pages/CanvasPage.xaml b/samples/ControlCatalog/Pages/CanvasPage.xaml
index 10a38895a2..d6c138a4f7 100644
--- a/samples/ControlCatalog/Pages/CanvasPage.xaml
+++ b/samples/ControlCatalog/Pages/CanvasPage.xaml
@@ -11,7 +11,8 @@
-
+
+
diff --git a/samples/ControlCatalog/Pages/LayoutTransformControlPage.xaml b/samples/ControlCatalog/Pages/LayoutTransformControlPage.xaml
index b428cd1b9f..f7e1c08cac 100644
--- a/samples/ControlCatalog/Pages/LayoutTransformControlPage.xaml
+++ b/samples/ControlCatalog/Pages/LayoutTransformControlPage.xaml
@@ -19,7 +19,7 @@
- Layout Transform
+
diff --git a/samples/ControlCatalog/Pages/MenuPage.xaml b/samples/ControlCatalog/Pages/MenuPage.xaml
index 296cfa8704..c5aa35312c 100644
--- a/samples/ControlCatalog/Pages/MenuPage.xaml
+++ b/samples/ControlCatalog/Pages/MenuPage.xaml
@@ -7,29 +7,46 @@
Margin="0,16,0,0"
HorizontalAlignment="Center"
Spacing="16">
-
+
+
+
+ Dyanamically generated
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/samples/ControlCatalog/Pages/MenuPage.xaml.cs b/samples/ControlCatalog/Pages/MenuPage.xaml.cs
index d637c172e1..ec7c000fe6 100644
--- a/samples/ControlCatalog/Pages/MenuPage.xaml.cs
+++ b/samples/ControlCatalog/Pages/MenuPage.xaml.cs
@@ -1,5 +1,10 @@
+using System.Collections.Generic;
+using System.Reactive;
+using System.Threading.Tasks;
+using System.Windows.Input;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
+using ReactiveUI;
namespace ControlCatalog.Pages
{
@@ -8,6 +13,51 @@ namespace ControlCatalog.Pages
public MenuPage()
{
this.InitializeComponent();
+ var vm = new MenuPageViewModel();
+
+ vm.MenuItems = new[]
+ {
+ new MenuItemViewModel
+ {
+ Header = "_File",
+ Items = new[]
+ {
+ new MenuItemViewModel { Header = "_Open...", Command = vm.OpenCommand },
+ new MenuItemViewModel { Header = "Save", Command = vm.SaveCommand },
+ new MenuItemViewModel { Header = "-" },
+ new MenuItemViewModel
+ {
+ Header = "Recent",
+ Items = new[]
+ {
+ new MenuItemViewModel
+ {
+ Header = "File1.txt",
+ Command = vm.OpenRecentCommand,
+ CommandParameter = @"c:\foo\File1.txt"
+ },
+ new MenuItemViewModel
+ {
+ Header = "File2.txt",
+ Command = vm.OpenRecentCommand,
+ CommandParameter = @"c:\foo\File2.txt"
+ },
+ }
+ },
+ }
+ },
+ new MenuItemViewModel
+ {
+ Header = "_Edit",
+ Items = new[]
+ {
+ new MenuItemViewModel { Header = "_Copy" },
+ new MenuItemViewModel { Header = "_Paste" },
+ }
+ }
+ };
+
+ DataContext = vm;
}
private void InitializeComponent()
@@ -15,4 +65,51 @@ namespace ControlCatalog.Pages
AvaloniaXamlLoader.Load(this);
}
}
+
+ public class MenuPageViewModel
+ {
+ public MenuPageViewModel()
+ {
+ OpenCommand = ReactiveCommand.CreateFromTask(Open);
+ SaveCommand = ReactiveCommand.Create(Save);
+ OpenRecentCommand = ReactiveCommand.Create(OpenRecent);
+ }
+
+ public IReadOnlyList MenuItems { get; set; }
+ public ReactiveCommand OpenCommand { get; }
+ public ReactiveCommand SaveCommand { get; }
+ public ReactiveCommand OpenRecentCommand { get; }
+
+ public async Task Open()
+ {
+ var dialog = new OpenFileDialog();
+ var result = await dialog.ShowAsync();
+
+ if (result != null)
+ {
+ foreach (var path in result)
+ {
+ System.Diagnostics.Debug.WriteLine($"Opened: {path}");
+ }
+ }
+ }
+
+ public void Save()
+ {
+ System.Diagnostics.Debug.WriteLine("Save");
+ }
+
+ public void OpenRecent(string path)
+ {
+ System.Diagnostics.Debug.WriteLine($"Open recent: {path}");
+ }
+ }
+
+ public class MenuItemViewModel
+ {
+ public string Header { get; set; }
+ public ICommand Command { get; set; }
+ public object CommandParameter { get; set; }
+ public IList Items { get; set; }
+ }
}
diff --git a/samples/Directory.Build.props b/samples/Directory.Build.props
index 7325bab2a3..b9075b957b 100644
--- a/samples/Directory.Build.props
+++ b/samples/Directory.Build.props
@@ -1,3 +1,6 @@
+
+ false
+
-
\ No newline at end of file
+
diff --git a/samples/Previewer/Previewer.csproj b/samples/Previewer/Previewer.csproj
index b4dda473f2..2cdde0c945 100644
--- a/samples/Previewer/Previewer.csproj
+++ b/samples/Previewer/Previewer.csproj
@@ -8,19 +8,9 @@
%(Filename)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
diff --git a/samples/RemoteDemo/RemoteDemo.csproj b/samples/RemoteDemo/RemoteDemo.csproj
index 2487c66e41..046999e06e 100644
--- a/samples/RemoteDemo/RemoteDemo.csproj
+++ b/samples/RemoteDemo/RemoteDemo.csproj
@@ -6,20 +6,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/samples/RenderDemo/MainWindow.xaml b/samples/RenderDemo/MainWindow.xaml
index df2b221423..fc5b1ce94d 100644
--- a/samples/RenderDemo/MainWindow.xaml
+++ b/samples/RenderDemo/MainWindow.xaml
@@ -8,12 +8,13 @@