diff --git a/Perspex.sln b/Perspex.sln
index 48e1bc66cd..5060a00719 100644
--- a/Perspex.sln
+++ b/Perspex.sln
@@ -60,6 +60,9 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.Markup.Xaml", "src\Markup\Perspex.Markup.Xaml\Perspex.Markup.Xaml.csproj", "{3E53A01A-B331-47F3-B828-4A5717E77A24}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9B9E3891-2366-4253-A952-D08BCEB71098}"
+ ProjectSection(SolutionItems) = preProject
+ samples\ControlCatalog\ControlCatalog.PCL.csproj = samples\ControlCatalog\ControlCatalog.PCL.csproj
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApplication", "samples\TestApplication\TestApplication.csproj", "{E3A1060B-50D0-44E8-88B6-F44EF2E5BD72}"
ProjectSection(ProjectDependencies) = postProject
@@ -137,8 +140,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.iOSTestApplication"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.LeakTests", "tests\Perspex.LeakTests\Perspex.LeakTests.csproj", "{E1AA3DBF-9056-4530-9376-18119A7A3FFE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog", "samples\ControlCatalog\ControlCatalog.csproj", "{61BEC86C-F307-4295-B5B8-9428610D7D55}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.UnitTests", "tests\Perspex.UnitTests\Perspex.UnitTests.csproj", "{88060192-33D5-4932-B0F9-8BD2763E857D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.Benchmarks", "tests\Perspex.Benchmarks\Perspex.Benchmarks.csproj", "{410AC439-81A1-4EB5-B5E9-6A7FC6B77F4B}"
@@ -147,6 +148,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.Logging.Serilog", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.DesignerSupport", "src\Perspex.DesignerSupport\Perspex.DesignerSupport.csproj", "{799A7BB5-3C2C-48B6-85A7-406A12C420DA}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.PCL", "samples\ControlCatalog\ControlCatalog.PCL.csproj", "{D0A739B9-3C68-4BA6-A328-41606954B6BD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Desktop", "samples\ControlCatalog.Desktop\ControlCatalog.Desktop.csproj", "{2B888490-D14A-4BCA-AB4B-48676FA93C9B}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{fb05ac90-89ba-4f2f-a924-f37875fb547c}*SharedItemsImports = 4
@@ -349,32 +354,36 @@ Global
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhone.Build.0 = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.ActiveCfg = Release|Any CPU
+ {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EC42600F-049B-43FF-AED1-8314D61B2749}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|Any CPU.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|iPhone.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EC42600F-049B-43FF-AED1-8314D61B2749}.AppStore|x86.ActiveCfg = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|iPhone.Build.0 = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EC42600F-049B-43FF-AED1-8314D61B2749}.Debug|x86.ActiveCfg = Debug|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Release|Any CPU.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Release|iPhone.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Release|iPhone.Build.0 = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{EC42600F-049B-43FF-AED1-8314D61B2749}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.ActiveCfg = Release|Any CPU
- {3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.Build.0 = Release|Any CPU
+ {EC42600F-049B-43FF-AED1-8314D61B2749}.Release|x86.ActiveCfg = Release|Any CPU
{62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1578,38 +1587,6 @@ Global
{E1AA3DBF-9056-4530-9376-18119A7A3FFE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{E1AA3DBF-9056-4530-9376-18119A7A3FFE}.Release|x86.ActiveCfg = Release|Any CPU
{E1AA3DBF-9056-4530-9376-18119A7A3FFE}.Release|x86.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|Any CPU.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|iPhone.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|x86.ActiveCfg = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.AppStore|x86.Build.0 = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|iPhone.Build.0 = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|x86.ActiveCfg = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Debug|x86.Build.0 = Debug|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|Any CPU.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|iPhone.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|iPhone.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|x86.ActiveCfg = Release|Any CPU
- {61BEC86C-F307-4295-B5B8-9428610D7D55}.Release|x86.Build.0 = Release|Any CPU
{88060192-33D5-4932-B0F9-8BD2763E857D}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{88060192-33D5-4932-B0F9-8BD2763E857D}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{88060192-33D5-4932-B0F9-8BD2763E857D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1738,6 +1715,70 @@ Global
{799A7BB5-3C2C-48B6-85A7-406A12C420DA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{799A7BB5-3C2C-48B6-85A7-406A12C420DA}.Release|x86.ActiveCfg = Release|Any CPU
{799A7BB5-3C2C-48B6-85A7-406A12C420DA}.Release|x86.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.AppStore|x86.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Debug|x86.Build.0 = Debug|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|iPhone.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|x86.ActiveCfg = Release|Any CPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}.Release|x86.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.AppStore|x86.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Debug|x86.Build.0 = Debug|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|iPhone.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|x86.ActiveCfg = Release|Any CPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1780,8 +1821,9 @@ Global
{4488AD85-1495-4809-9AA4-DDFE0A48527E} = {0CB0B92E-6CFF-4240-80A5-CCAFE75D91E1}
{8C923867-8A8F-4F6B-8B80-47D9E8436166} = {0CB0B92E-6CFF-4240-80A5-CCAFE75D91E1}
{E1AA3DBF-9056-4530-9376-18119A7A3FFE} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
- {61BEC86C-F307-4295-B5B8-9428610D7D55} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{88060192-33D5-4932-B0F9-8BD2763E857D} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
{410AC439-81A1-4EB5-B5E9-6A7FC6B77F4B} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD} = {9B9E3891-2366-4253-A952-D08BCEB71098}
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B} = {9B9E3891-2366-4253-A952-D08BCEB71098}
EndGlobalSection
EndGlobal
diff --git a/samples/ControlCatalog.Desktop/App.config b/samples/ControlCatalog.Desktop/App.config
new file mode 100644
index 0000000000..9822b80918
--- /dev/null
+++ b/samples/ControlCatalog.Desktop/App.config
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
new file mode 100644
index 0000000000..de1ef0ab8f
--- /dev/null
+++ b/samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
@@ -0,0 +1,123 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {2B888490-D14A-4BCA-AB4B-48676FA93C9B}
+ WinExe
+ Properties
+ ControlCatalog.Desktop
+ ControlCatalog.Desktop
+ v4.5.1
+ 512
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll
+ True
+
+
+ ..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {FB05AC90-89BA-4F2F-A924-F37875FB547C}
+ Perspex.Cairo
+
+
+ {54F237D5-A70A-4752-9656-0C70B1A7B047}
+ Perspex.Gtk
+
+
+ {3E53A01A-B331-47F3-B828-4A5717E77A24}
+ Perspex.Markup.Xaml
+
+
+ {6417E941-21BC-467B-A771-0DE389353CE6}
+ Perspex.Markup
+
+
+ {B09B78D8-9B26-48B0-9149-D64A2F120F3F}
+ Perspex.Base
+
+
+ {D2221C82-4A25-4583-9B43-D791E3F6820C}
+ Perspex.Controls
+
+
+ {B61B66A3-B82D-4875-8001-89D3394FE0C9}
+ Perspex.Logging.Serilog
+
+
+ {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}
+ Perspex.Styling
+
+
+ {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}
+ Perspex.Themes.Default
+
+
+ {925DD807-B651-475F-9F7C-CBEB974CE43D}
+ Perspex.Skia.Desktop
+
+
+ {3E908F67-5543-4879-A1DC-08EACE79B3CD}
+ Perspex.Direct2D1
+
+
+ {811A76CF-1CF6-440F-963B-BBE31BD72A82}
+ Perspex.Win32
+
+
+ {d0a739b9-3c68-4ba6-a328-41606954b6bd}
+ ControlCatalog.PCL
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/ControlCatalog.Desktop/Program.cs b/samples/ControlCatalog.Desktop/Program.cs
new file mode 100644
index 0000000000..3fa5d32ae3
--- /dev/null
+++ b/samples/ControlCatalog.Desktop/Program.cs
@@ -0,0 +1,147 @@
+using Perspex.Logging.Serilog;
+using Serilog;
+using System;
+using System.Linq;
+using Perspex;
+using System.Reflection;
+using Perspex.Platform;
+
+
+// Not sure where the best home for this is
+namespace Perspex
+{
+ public static class SharedApplicationExtensions
+ {
+ // For true Portable apps we need to select the PCL assembly NOT the host platform exe. Unfortunately
+ // Win32 subsystem registers one by default (the wrong one) and so this can override that.
+ //
+ public static AppT UseAssetAssembly(this AppT app, Assembly assembly) where AppT : Application
+ {
+ // Asset loading searches our own assembly?
+ PerspexLocator.CurrentMutable.GetService().SetDefaultAssembly(assembly);
+ return app;
+ }
+ }
+}
+
+namespace ControlCatalog
+{
+ internal class Program
+ {
+ static void Main(string[] args)
+ {
+ InitializeLogging();
+
+ new App()
+ .ConfigureRenderSystem(args)
+ .UseAssetAssembly(typeof(App).Assembly)
+ .LoadFromXaml()
+ .RunWithMainWindow();
+ }
+
+ // This will be made into a runtime configuration extension soon!
+ private static void InitializeLogging()
+ {
+#if DEBUG
+ SerilogLogger.Initialize(new LoggerConfiguration()
+ .MinimumLevel.Warning()
+ .WriteTo.Trace(outputTemplate: "{Area}: {Message}")
+ .CreateLogger());
+#endif
+ }
+
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Experimental: Would like to move this into a shared location once I figure out the best place for it
+ // considering all common libraries are PCL and do not have access to Environment.OSVersion.Platform
+ // nor do they have access to the platform specific render/subsystem extensions.
+ //
+ // Perhaps via DI we register each system with a priority/rank
+ //
+ public static class RenderSystemExtensions
+ {
+ [Flags]
+ enum RenderSystem
+ {
+ None = 0,
+ GTK = 1,
+ Skia = 2,
+ Direct2D = 4
+ };
+
+ ///
+ /// Default (Optimal) render system for a particular platform
+ ///
+ ///
+ private static RenderSystem DefaultRenderSystem()
+ {
+ switch (Environment.OSVersion.Platform)
+ {
+ case PlatformID.MacOSX:
+ return RenderSystem.GTK;
+
+ case PlatformID.Unix:
+ return RenderSystem.GTK;
+
+ case PlatformID.Win32Windows:
+ return RenderSystem.Direct2D;
+ }
+
+ return RenderSystem.None;
+ }
+
+ ///
+ /// Returns an array of avalidable rendering systems in priority order
+ ///
+ ///
+ private static RenderSystem[] AvailableRenderSystems()
+ {
+ switch (Environment.OSVersion.Platform)
+ {
+ case PlatformID.MacOSX:
+ return new RenderSystem[] { RenderSystem.GTK, RenderSystem.Skia };
+
+ case PlatformID.Unix:
+ return new RenderSystem[] { RenderSystem.GTK, RenderSystem.Skia };
+
+ case PlatformID.Win32Windows:
+ return new RenderSystem[] { RenderSystem.Direct2D, RenderSystem.Skia, RenderSystem.GTK };
+ }
+
+ return new RenderSystem[0];
+ }
+
+ ///
+ /// Selects the optimal render system for desktop platforms. Supports cmd line overrides
+ ///
+ ///
+ ///
+ public static TApp ConfigureRenderSystem(this TApp app, string[] args) where TApp : Application
+ {
+ // So this all works great under Windows where it can support
+ // ALL configurations. But on OSX/Unix we cannot use Direct2D
+ //
+ if (args.Contains("--gtk") || DefaultRenderSystem() == RenderSystem.GTK)
+ {
+ app.UseGtk();
+ app.UseCairo();
+ }
+ else
+ {
+ app.UseWin32();
+
+ if (args.Contains("--skia") || DefaultRenderSystem() == RenderSystem.Skia)
+ {
+ app.UseSkia();
+ }
+ else
+ {
+ app.UseDirect2D();
+ }
+ }
+
+ return app;
+ }
+ }
+}
diff --git a/samples/ControlCatalog.Desktop/Properties/AssemblyInfo.cs b/samples/ControlCatalog.Desktop/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..2377b91393
--- /dev/null
+++ b/samples/ControlCatalog.Desktop/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ControlCatalog.Desktop")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ControlCatalog.Desktop")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("2b888490-d14a-4bca-ab4b-48676fa93c9b")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/samples/ControlCatalog.Desktop/packages.config b/samples/ControlCatalog.Desktop/packages.config
new file mode 100644
index 0000000000..b3abe6f487
--- /dev/null
+++ b/samples/ControlCatalog.Desktop/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/samples/ControlCatalog/App.xaml.cs b/samples/ControlCatalog/App.xaml.cs
index 5ee9373edb..4cd4cea0ee 100644
--- a/samples/ControlCatalog/App.xaml.cs
+++ b/samples/ControlCatalog/App.xaml.cs
@@ -1,18 +1,12 @@
-using System;
-using System.Linq;
-using Perspex;
-using Perspex.Controls;
-using Perspex.Diagnostics;
-using Perspex.Markup.Xaml;
-using Perspex.Logging.Serilog;
-using Serilog;
+using Perspex;
+
namespace ControlCatalog
{
// Eventually we should move this into a PCL library so we can access
// from mobile platforms
//
- class App : Application
+ public class App : Application
{
public App()
{
diff --git a/samples/ControlCatalog/ControlCatalog.PCL.csproj b/samples/ControlCatalog/ControlCatalog.PCL.csproj
new file mode 100644
index 0000000000..5ed85322a0
--- /dev/null
+++ b/samples/ControlCatalog/ControlCatalog.PCL.csproj
@@ -0,0 +1,215 @@
+
+
+
+
+ 10.0
+ Debug
+ AnyCPU
+ {D0A739B9-3C68-4BA6-A328-41606954B6BD}
+ Library
+ Properties
+ ControlCatalog
+ ControlCatalog
+ en-US
+ 512
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Profile7
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+
+
+ App.xaml
+
+
+ MainWindow.xaml
+
+
+ BorderPage.xaml
+
+
+ ButtonPage.xaml
+
+
+ CanvasPage.xaml
+
+
+ CarouselPage.xaml
+
+
+ CheckBoxPage.xaml
+
+
+ DropDownPage.xaml
+
+
+ ExpanderPage.xaml
+
+
+ ImagePage.xaml
+
+
+ LayoutTransformControlPage.xaml
+
+
+ MenuPage.xaml
+
+
+ RadioButtonPage.xaml
+
+
+ SliderPage.xaml
+
+
+ TextBoxPage.xaml
+
+
+ ToolTipPage.xaml
+
+
+
+
+
+
+
+
+
+
+
+ Designer
+
+
+
+
+ {3E53A01A-B331-47F3-B828-4A5717E77A24}
+ Perspex.Markup.Xaml
+
+
+ {6417E941-21BC-467B-A771-0DE389353CE6}
+ Perspex.Markup
+
+
+ {D211E587-D8BC-45B9-95A4-F297C8FA5200}
+ Perspex.Animation
+
+
+ {B09B78D8-9B26-48B0-9149-D64A2F120F3F}
+ Perspex.Base
+
+
+ {D2221C82-4A25-4583-9B43-D791E3F6820C}
+ Perspex.Controls
+
+
+ {7062AE20-5DCC-4442-9645-8195BDECE63E}
+ Perspex.Diagnostics
+
+
+ {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}
+ Perspex.HtmlRenderer
+
+
+ {62024B2D-53EB-4638-B26B-85EEAA54866E}
+ Perspex.Input
+
+
+ {6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}
+ Perspex.Interactivity
+
+
+ {42472427-4774-4C81-8AFF-9F27B8E31721}
+ Perspex.Layout
+
+
+ {6417B24E-49C2-4985-8DB2-3AB9D898EC91}
+ Perspex.ReactiveUI
+
+
+ {EB582467-6ABB-43A1-B052-E981BA910E3A}
+ Perspex.SceneGraph
+
+
+ {F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}
+ Perspex.Styling
+
+
+ {3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}
+ Perspex.Themes.Default
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Perspex.Base/Platform/IAssetLoader.cs b/src/Perspex.Base/Platform/IAssetLoader.cs
index 9594e7e021..00f9d7e4d3 100644
--- a/src/Perspex.Base/Platform/IAssetLoader.cs
+++ b/src/Perspex.Base/Platform/IAssetLoader.cs
@@ -3,6 +3,7 @@
using System;
using System.IO;
+using System.Reflection;
namespace Perspex.Platform
{
@@ -11,6 +12,16 @@ namespace Perspex.Platform
///
public interface IAssetLoader
{
+ ///
+ /// We need a way to override the default assembly selected by the host platform
+ /// because right now it is selecting the wrong one for PCL based Apps. The
+ /// AssetLoader needs a refactor cause right now it lives in 3+ platforms which
+ /// can all be loaded on Windows.
+ ///
+ ///
+ void SetDefaultAssembly(Assembly asm);
+
+
///
/// Checks if an asset with the specified URI exists.
///
diff --git a/src/Shared/PlatformSupport/AssetLoader.cs b/src/Shared/PlatformSupport/AssetLoader.cs
index c70133efaf..458af2a9a1 100644
--- a/src/Shared/PlatformSupport/AssetLoader.cs
+++ b/src/Shared/PlatformSupport/AssetLoader.cs
@@ -38,7 +38,7 @@ namespace Perspex.Shared.PlatformSupport
private static readonly Dictionary AssemblyNameCache
= new Dictionary();
- private readonly AssemblyDescriptor _defaultAssembly;
+ private AssemblyDescriptor _defaultAssembly;
public AssetLoader(Assembly assembly = null)
{
@@ -47,8 +47,11 @@ namespace Perspex.Shared.PlatformSupport
if (assembly != null)
_defaultAssembly = new AssemblyDescriptor(assembly);
}
-
+ public void SetDefaultAssembly(Assembly assembly)
+ {
+ _defaultAssembly = new AssemblyDescriptor(assembly);
+ }
AssemblyDescriptor GetAssembly(string name)
{