diff --git a/.gitmodules b/.gitmodules
index 98b6d076c1..2d2a9ac497 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
-[submodule "src/Avalonia.HtmlRenderer/external"]
- path = src/Avalonia.HtmlRenderer/external
- url = https://github.com/AvaloniaUI/HTML-Renderer.git
- branch = perspex-pcl
[submodule "src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github"]
path = src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github
url = https://github.com/AvaloniaUI/Portable.Xaml.git
diff --git a/Avalonia.sln b/Avalonia.sln
index 47ee4c1ad9..9cf93e8a84 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -1,4 +1,3 @@
-
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2027
@@ -15,8 +14,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Win32", "src\Windo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Direct2D1", "src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj", "{3E908F67-5543-4879-A1DC-08EACE79B3CD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Designer", "src\Windows\Avalonia.Designer\Avalonia.Designer.csproj", "{EC42600F-049B-43FF-AED1-8314D61B2749}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Input", "src\Avalonia.Input\Avalonia.Input.csproj", "{62024B2D-53EB-4638-B26B-85EEAA54866E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Interactivity", "src\Avalonia.Interactivity\Avalonia.Interactivity.csproj", "{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}"
@@ -68,8 +65,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gtk", "Gtk", "{B9894058-278
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.ReactiveUI", "src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj", "{6417B24E-49C2-4985-8DB2-3AB9D898EC91}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.HtmlRenderer", "src\Avalonia.HtmlRenderer\Avalonia.HtmlRenderer.csproj", "{5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}"
-EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "PlatformSupport", "src\Shared\PlatformSupport\PlatformSupport.shproj", "{E4D9629C-F168-4224-3F51-A5E482FFBC42}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Markup", "src\Markup\Avalonia.Markup\Avalonia.Markup.csproj", "{6417E941-21BC-467B-A771-0DE389353CE6}"
@@ -106,7 +101,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DesignerSupport",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog", "samples\ControlCatalog\ControlCatalog.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}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.Desktop", "samples\ControlCatalog.Desktop\ControlCatalog.Desktop.csproj", "{2B888490-D14A-4BCA-AB4B-48676FA93C9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{57E0455D-D565-44BB-B069-EE1AA20F8337}"
EndProject
@@ -134,10 +129,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Gtk3", "src\Gtk\Av
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.NetCore", "samples\ControlCatalog.NetCore\ControlCatalog.NetCore.csproj", "{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{74487168-7D91-487E-BF93-055F2251461E}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1-27F5-4255-9AFC-04ABFD11683A}"
ProjectSection(SolutionItems) = preProject
+ build\Base.props = build\Base.props
+ build\Binding.props = build\Binding.props
build\JetBrains.Annotations.props = build\JetBrains.Annotations.props
build\JetBrains.dotMemoryUnit.props = build\JetBrains.dotMemoryUnit.props
build\Magick.NET-Q16-AnyCPU.props = build\Magick.NET-Q16-AnyCPU.props
@@ -412,38 +407,6 @@ Global
{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|NetCoreOnly.ActiveCfg = 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|NetCoreOnly.ActiveCfg = Debug|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|NetCoreOnly.ActiveCfg = Debug|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|NetCoreOnly.ActiveCfg = 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
- {EC42600F-049B-43FF-AED1-8314D61B2749}.Release|NetCoreOnly.ActiveCfg = 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
@@ -1162,44 +1125,6 @@ Global
{6417B24E-49C2-4985-8DB2-3AB9D898EC91}.Release|NetCoreOnly.Build.0 = Release|Any CPU
{6417B24E-49C2-4985-8DB2-3AB9D898EC91}.Release|x86.ActiveCfg = Release|Any CPU
{6417B24E-49C2-4985-8DB2-3AB9D898EC91}.Release|x86.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|NetCoreOnly.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|Any CPU.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|iPhone.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|NetCoreOnly.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|x86.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.AppStore|x86.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|iPhone.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|x86.ActiveCfg = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Debug|x86.Build.0 = Debug|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|Any CPU.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|iPhone.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|iPhone.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|NetCoreOnly.Build.0 = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|x86.ActiveCfg = Release|Any CPU
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}.Release|x86.Build.0 = Release|Any CPU
{6417E941-21BC-467B-A771-0DE389353CE6}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{6417E941-21BC-467B-A771-0DE389353CE6}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{6417E941-21BC-467B-A771-0DE389353CE6}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1739,6 +1664,7 @@ Global
{52F55355-D120-42AC-8116-8410A7D602FA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {52F55355-D120-42AC-8116-8410A7D602FA}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Debug|x86.ActiveCfg = Debug|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Debug|x86.Build.0 = Debug|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -1748,6 +1674,7 @@ Global
{52F55355-D120-42AC-8116-8410A7D602FA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+ {52F55355-D120-42AC-8116-8410A7D602FA}.Release|NetCoreOnly.Build.0 = Release|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Release|x86.ActiveCfg = Release|Any CPU
{52F55355-D120-42AC-8116-8410A7D602FA}.Release|x86.Build.0 = Release|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
@@ -1775,6 +1702,7 @@ Global
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Debug|x86.ActiveCfg = Debug|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Debug|x86.Build.0 = Debug|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -1784,6 +1712,7 @@ Global
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+ {F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|NetCoreOnly.Build.0 = Release|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|x86.ActiveCfg = Release|Any CPU
{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}.Release|x86.Build.0 = Release|Any CPU
{FBCAF3D0-2808-4934-8E96-3F607594517B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
@@ -2411,6 +2340,7 @@ Global
{050CC912-FF49-4A8B-B534-9544017446DD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+ {050CC912-FF49-4A8B-B534-9544017446DD}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Debug|x86.ActiveCfg = Debug|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Debug|x86.Build.0 = Debug|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -2420,6 +2350,7 @@ Global
{050CC912-FF49-4A8B-B534-9544017446DD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+ {050CC912-FF49-4A8B-B534-9544017446DD}.Release|NetCoreOnly.Build.0 = Release|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Release|x86.ActiveCfg = Release|Any CPU
{050CC912-FF49-4A8B-B534-9544017446DD}.Release|x86.Build.0 = Release|Any CPU
{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
@@ -2545,7 +2476,6 @@ Global
GlobalSection(NestedProjects) = preSolution
{811A76CF-1CF6-440F-963B-BBE31BD72A82} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
{3E908F67-5543-4879-A1DC-08EACE79B3CD} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
- {EC42600F-049B-43FF-AED1-8314D61B2749} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
{47ECDF59-DEF8-4C53-87B1-2098A3429059} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
{5CCB5571-7C30-4E7D-967D-0E2158EBD91F} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
{76716382-3159-460E-BDA6-C5715CF606D7} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
@@ -2582,8 +2512,6 @@ Global
{7D2D3083-71DD-4CC9-8907-39A0D86FB322} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
{BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {B9894058-278A-46B5-B6ED-AD613FCC03B3}
{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3} = {9B9E3891-2366-4253-A952-D08BCEB71098}
- {F3AC8BC1-27F5-4255-9AFC-04ABFD11683A} = {74487168-7D91-487E-BF93-055F2251461E}
- {4D6FAF79-58B4-482F-9122-0668C346364C} = {74487168-7D91-487E-BF93-055F2251461E}
{854568D5-13D1-4B4F-B50D-534DC7EFD3C9} = {86C53C40-57AA-45B8-AD42-FAE0EFDF0F2B}
{638580B0-7910-40EF-B674-DCB34DA308CD} = {A0CC0258-D18C-4AB3-854F-7101680FC3F9}
{CBC4FF2F-92D4-420B-BE21-9FE0B930B04E} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
diff --git a/build.cake b/build.cake
index 20d77e25d3..1c796e8594 100644
--- a/build.cake
+++ b/build.cake
@@ -93,7 +93,6 @@ Task("Clean")
CleanDirectory(parameters.NugetRoot);
CleanDirectory(parameters.ZipRoot);
CleanDirectory(parameters.BinRoot);
- CleanDirectory(parameters.DesignerTestsRoot);
});
Task("Restore-NuGet-Packages")
@@ -183,7 +182,7 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
Task("Run-Unit-Tests")
.IsDependentOn("Build")
- .IsDependentOn("Run-Designer-Unit-Tests")
+ .IsDependentOn("Run-Designer-Tests")
.IsDependentOn("Run-Render-Tests")
.WithCriteria(() => !parameters.SkipTests)
.Does(() => {
@@ -202,6 +201,13 @@ Task("Run-Unit-Tests")
}
});
+Task("Run-Designer-Tests")
+ .IsDependentOn("Build")
+ .WithCriteria(() => !parameters.SkipTests)
+ .Does(() => {
+ RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", parameters, false);
+ });
+
Task("Run-Render-Tests")
.IsDependentOn("Build")
.WithCriteria(() => !parameters.SkipTests && parameters.IsRunningOnWindows)
@@ -210,25 +216,6 @@ Task("Run-Render-Tests")
RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", parameters, true);
});
-Task("Run-Designer-Unit-Tests")
- .IsDependentOn("Build")
- .WithCriteria(() => !parameters.SkipTests && parameters.IsRunningOnWindows)
- .Does(() =>
-{
- var toolPath = (parameters.IsPlatformAnyCPU || parameters.IsPlatformX86) ?
- Context.Tools.Resolve("xunit.console.x86.exe") :
- Context.Tools.Resolve("xunit.console.exe");
-
- var xUnitSettings = new XUnit2Settings
- {
- ToolPath = toolPath,
- Parallelism = ParallelismOption.None,
- ShadowCopy = false,
- };
-
- XUnit2("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.dll", xUnitSettings);
-});
-
Task("Copy-Files")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
@@ -376,7 +363,6 @@ Task("Inspect")
{
var badIssues = new []{"PossibleNullReferenceException"};
var whitelist = new []{"tests", "src\\android", "src\\ios",
- "src\\windows\\avalonia.designer", "src\\avalonia.htmlrenderer\\external",
"src\\markup\\avalonia.markup.xaml\\portablexaml\\portable.xaml.github"};
Information("Running code inspections");
diff --git a/build/Binding.props b/build/Binding.props
new file mode 100644
index 0000000000..a512ee1d9c
--- /dev/null
+++ b/build/Binding.props
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/build/ReactiveUI.props b/build/ReactiveUI.props
index 1e2ad69046..11afefa8ad 100644
--- a/build/ReactiveUI.props
+++ b/build/ReactiveUI.props
@@ -1,5 +1,5 @@
-
+
diff --git a/build/SourceLink.props b/build/SourceLink.props
new file mode 100644
index 0000000000..0c9b6a34f8
--- /dev/null
+++ b/build/SourceLink.props
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/build/XUnit.props b/build/XUnit.props
index 1d7da7257d..15412d19e7 100644
--- a/build/XUnit.props
+++ b/build/XUnit.props
@@ -8,7 +8,7 @@
-
+
diff --git a/packages.cake b/packages.cake
index 17411aef4c..bcb135f6ad 100644
--- a/packages.cake
+++ b/packages.cake
@@ -155,38 +155,28 @@ public class Packages
var coreLibraries = new string[][]
{
- new [] { "./src/", "Avalonia.Animation", ".dll" },
- new [] { "./src/", "Avalonia.Animation", ".xml" },
- new [] { "./src/", "Avalonia.Base", ".dll" },
- new [] { "./src/", "Avalonia.Base", ".xml" },
- new [] { "./src/", "Avalonia.Controls", ".dll" },
- new [] { "./src/", "Avalonia.Controls", ".xml" },
- new [] { "./src/", "Avalonia.DesignerSupport", ".dll" },
- new [] { "./src/", "Avalonia.DesignerSupport", ".xml" },
- new [] { "./src/", "Avalonia.Diagnostics", ".dll" },
- new [] { "./src/", "Avalonia.Diagnostics", ".xml" },
- new [] { "./src/", "Avalonia.Input", ".dll" },
- new [] { "./src/", "Avalonia.Input", ".xml" },
- new [] { "./src/", "Avalonia.Interactivity", ".dll" },
- new [] { "./src/", "Avalonia.Interactivity", ".xml" },
- new [] { "./src/", "Avalonia.Layout", ".dll" },
- new [] { "./src/", "Avalonia.Layout", ".xml" },
- new [] { "./src/", "Avalonia.Logging.Serilog", ".dll" },
- new [] { "./src/", "Avalonia.Logging.Serilog", ".xml" },
- new [] { "./src/", "Avalonia.Visuals", ".dll" },
- new [] { "./src/", "Avalonia.Visuals", ".xml" },
- new [] { "./src/", "Avalonia.Styling", ".dll" },
- new [] { "./src/", "Avalonia.Styling", ".xml" },
- new [] { "./src/", "Avalonia.Themes.Default", ".dll" },
- new [] { "./src/", "Avalonia.Themes.Default", ".xml" },
- new [] { "./src/Markup/", "Avalonia.Markup", ".dll" },
- new [] { "./src/Markup/", "Avalonia.Markup", ".xml" },
- new [] { "./src/Markup/", "Avalonia.Markup.Xaml", ".dll" },
- new [] { "./src/Markup/", "Avalonia.Markup.Xaml", ".xml" }
+ new [] { "./src/", "Avalonia.Animation"},
+ new [] { "./src/", "Avalonia.Base"},
+ new [] { "./src/", "Avalonia.Controls"},
+ new [] { "./src/", "Avalonia.DesignerSupport"},
+ new [] { "./src/", "Avalonia.Diagnostics"},
+ new [] { "./src/", "Avalonia.Input"},
+ new [] { "./src/", "Avalonia.Interactivity"},
+ new [] { "./src/", "Avalonia.Layout"},
+ new [] { "./src/", "Avalonia.Logging.Serilog"},
+ new [] { "./src/", "Avalonia.Visuals"},
+ new [] { "./src/", "Avalonia.Styling"},
+ new [] { "./src/", "Avalonia.Themes.Default"},
+ new [] { "./src/Markup/", "Avalonia.Markup"},
+ new [] { "./src/Markup/", "Avalonia.Markup.Xaml"},
};
- var coreLibrariesFiles = coreLibraries.Select((lib) => {
- return (FilePath)context.File(lib[0] + lib[1] + "/bin/" + parameters.DirSuffix + "/netstandard2.0/" + lib[1] + lib[2]);
+ var extensionsToPack = new [] {".dll", ".xml", ".pdb"};
+
+ var coreLibrariesFiles = coreLibraries
+ .SelectMany(lib => extensionsToPack.Select(ext => new {lib, ext}))
+ .Select((lib) => {
+ return (FilePath)context.File(lib.lib[0] + lib.lib[1] + "/bin/" + parameters.DirSuffix + "/netstandard2.0/" + lib.lib[1] + lib.ext);
}).ToList();
var coreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => {
@@ -207,16 +197,14 @@ public class Packages
};
});
- var net45RuntimePlatformExtensions = new [] {".xml", ".dll"};
- var net45RuntimePlatform = net45RuntimePlatformExtensions.Select(libSuffix => {
+ var net45RuntimePlatform = extensionsToPack.Select(libSuffix => {
return new NuSpecContent {
Source = ((FilePath)context.File("./src/Avalonia.DotNetFrameworkRuntime/bin/" + parameters.DirSuffix + "/net461/Avalonia.DotNetFrameworkRuntime" + libSuffix)).FullPath,
Target = "lib/net45"
};
});
- var netCoreRuntimePlatformExtensions = new [] {".xml", ".dll"};
- var netCoreRuntimePlatform = netCoreRuntimePlatformExtensions.Select(libSuffix => {
+ var netCoreRuntimePlatform = extensionsToPack.Select(libSuffix => {
return new NuSpecContent {
Source = ((FilePath)context.File("./src/Avalonia.DotNetCoreRuntime/bin/" + parameters.DirSuffix + "/netcoreapp2.0/Avalonia.DotNetCoreRuntime" + libSuffix)).FullPath,
Target = "lib/netcoreapp2.0"
@@ -274,23 +262,6 @@ public class Packages
OutputDirectory = parameters.NugetRoot
},
///////////////////////////////////////////////////////////////////////////////
- // Avalonia.HtmlRenderer
- ///////////////////////////////////////////////////////////////////////////////
- new NuGetPackSettings()
- {
- Id = "Avalonia.HtmlRenderer",
- Dependencies = new []
- {
- new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version }
- },
- Files = new []
- {
- new NuSpecContent { Source = "Avalonia.HtmlRenderer.dll", Target = "lib/netstandard2.0" }
- },
- BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix + "/netstandard2.0"),
- OutputDirectory = parameters.NugetRoot
- },
- ///////////////////////////////////////////////////////////////////////////////
// Avalonia.ReactiveUI
///////////////////////////////////////////////////////////////////////////////
new NuGetPackSettings()
diff --git a/parameters.cake b/parameters.cake
index 9e6eaa9d27..759846c658 100644
--- a/parameters.cake
+++ b/parameters.cake
@@ -30,7 +30,6 @@ public class Parameters
public DirectoryPath NugetRoot { get; private set; }
public DirectoryPath ZipRoot { get; private set; }
public DirectoryPath BinRoot { get; private set; }
- public DirectoryPath DesignerTestsRoot { get; private set; }
public string DirSuffix { get; private set; }
public string DirSuffixIOS { get; private set; }
public DirectoryPathCollection BuildDirs { get; private set; }
@@ -106,7 +105,6 @@ public class Parameters
NugetRoot = ArtifactsDir.Combine("nuget");
ZipRoot = ArtifactsDir.Combine("zip");
BinRoot = ArtifactsDir.Combine("bin");
- DesignerTestsRoot = ArtifactsDir.Combine("designer-tests");
BuildDirs = context.GetDirectories("**/bin") + context.GetDirectories("**/obj");
diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj
index 2a91d6a3da..fab8ecd768 100644
--- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj
+++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj
@@ -111,10 +111,6 @@
{7062ae20-5dcc-4442-9645-8195bdece63e}
Avalonia.Diagnostics
-
- {5fb2b005-0a7f-4dad-add4-3ed01444e63d}
- Avalonia.HtmlRenderer
-
{62024b2d-53eb-4638-b26b-85eeaa54866e}
Avalonia.Input
diff --git a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
index c1c5cdcaf7..a60fd242e4 100644
--- a/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
+++ b/samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
@@ -141,10 +141,6 @@
{7062AE20-5DCC-4442-9645-8195BDECE63E}
Avalonia.Diagnostics
-
- {5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}
- Avalonia.HtmlRenderer
-
{62024B2D-53EB-4638-B26B-85EEAA54866E}
Avalonia.Input
diff --git a/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Bold.ttf b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Bold.ttf
new file mode 100644
index 0000000000..f6986468bd
Binary files /dev/null and b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Bold.ttf differ
diff --git a/samples/ControlCatalog/Assets/Fonts/SourceSansPro-BoldItalic.ttf b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-BoldItalic.ttf
new file mode 100644
index 0000000000..5c00b64faf
Binary files /dev/null and b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-BoldItalic.ttf differ
diff --git a/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Italic.ttf b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Italic.ttf
new file mode 100644
index 0000000000..82e8762011
Binary files /dev/null and b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Italic.ttf differ
diff --git a/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Regular.ttf b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Regular.ttf
new file mode 100644
index 0000000000..278ad8aa0a
Binary files /dev/null and b/samples/ControlCatalog/Assets/Fonts/SourceSansPro-Regular.ttf differ
diff --git a/samples/ControlCatalog/ControlCatalog.csproj b/samples/ControlCatalog/ControlCatalog.csproj
index b8a8479a49..dea9b35e24 100644
--- a/samples/ControlCatalog/ControlCatalog.csproj
+++ b/samples/ControlCatalog/ControlCatalog.csproj
@@ -11,6 +11,12 @@
+
+
+
+
+
+
@@ -19,7 +25,6 @@
-
diff --git a/samples/ControlCatalog/MainView.xaml b/samples/ControlCatalog/MainView.xaml
index 377871f658..87cb5e9c5c 100644
--- a/samples/ControlCatalog/MainView.xaml
+++ b/samples/ControlCatalog/MainView.xaml
@@ -2,9 +2,9 @@
xmlns:pages="clr-namespace:ControlCatalog.Pages"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-
+
-
+
diff --git a/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs b/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs
index 6f3b8361cd..f9d6a72a3a 100644
--- a/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs
+++ b/samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs
@@ -2,12 +2,14 @@ using Avalonia.Controls;
using Avalonia.LogicalTree;
using Avalonia.Markup;
using Avalonia.Markup.Xaml;
-using Avalonia.Markup.Xaml.Data;
+using Avalonia.Markup.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using Avalonia.Data.Converters;
+using Avalonia.Data;
namespace ControlCatalog.Pages
{
diff --git a/samples/ControlCatalog/Pages/CarouselPage.xaml b/samples/ControlCatalog/Pages/CarouselPage.xaml
index 4a5b2cea26..3468b71fd8 100644
--- a/samples/ControlCatalog/Pages/CarouselPage.xaml
+++ b/samples/ControlCatalog/Pages/CarouselPage.xaml
@@ -8,9 +8,9 @@
-
+
-
+
diff --git a/samples/ControlCatalog/Pages/CarouselPage.xaml.cs b/samples/ControlCatalog/Pages/CarouselPage.xaml.cs
index 272290e679..5e24bfb58f 100644
--- a/samples/ControlCatalog/Pages/CarouselPage.xaml.cs
+++ b/samples/ControlCatalog/Pages/CarouselPage.xaml.cs
@@ -37,13 +37,13 @@ namespace ControlCatalog.Pages
switch (_transition.SelectedIndex)
{
case 0:
- _carousel.Transition = null;
+ _carousel.PageTransition = null;
break;
case 1:
- _carousel.Transition = new PageSlide(TimeSpan.FromSeconds(0.25), _orientation.SelectedIndex == 0 ? PageSlide.SlideAxis.Horizontal : PageSlide.SlideAxis.Vertical);
+ _carousel.PageTransition = new PageSlide(TimeSpan.FromSeconds(0.25), _orientation.SelectedIndex == 0 ? PageSlide.SlideAxis.Horizontal : PageSlide.SlideAxis.Vertical);
break;
case 2:
- _carousel.Transition = new CrossFade(TimeSpan.FromSeconds(0.25));
+ _carousel.PageTransition = new CrossFade(TimeSpan.FromSeconds(0.25));
break;
}
}
diff --git a/samples/ControlCatalog/Pages/TextBoxPage.xaml b/samples/ControlCatalog/Pages/TextBoxPage.xaml
index db1c9cb69d..fb0d8fb7b1 100644
--- a/samples/ControlCatalog/Pages/TextBoxPage.xaml
+++ b/samples/ControlCatalog/Pages/TextBoxPage.xaml
@@ -31,6 +31,12 @@
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/ControlCatalog/SideBar.xaml b/samples/ControlCatalog/SideBar.xaml
index 7fcd828ba3..e5baf9e942 100644
--- a/samples/ControlCatalog/SideBar.xaml
+++ b/samples/ControlCatalog/SideBar.xaml
@@ -1,4 +1,5 @@
-
+
+
+
diff --git a/samples/Previewer/Previewer.csproj b/samples/Previewer/Previewer.csproj
index 13e2418d67..b4dda473f2 100644
--- a/samples/Previewer/Previewer.csproj
+++ b/samples/Previewer/Previewer.csproj
@@ -15,7 +15,6 @@
-
diff --git a/samples/RenderTest/App.xaml.cs b/samples/RenderTest/App.xaml.cs
index 4492e5ae4c..fd2b940f6a 100644
--- a/samples/RenderTest/App.xaml.cs
+++ b/samples/RenderTest/App.xaml.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using Avalonia;
+using Avalonia.Logging.Serilog;
using Avalonia.Markup.Xaml;
namespace RenderTest
@@ -12,5 +13,17 @@ namespace RenderTest
{
AvaloniaXamlLoader.Load(this);
}
+
+ // TODO: Make this work with GTK/Skia/Cairo depending on command-line args
+ // again.
+ static void Main(string[] args) => BuildAvaloniaApp().Start();
+
+ // App configuration, used by the entry point and previewer
+ static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .UseReactiveUI()
+ .LogToDebug();
+
}
}
diff --git a/samples/RenderTest/MainWindow.xaml b/samples/RenderTest/MainWindow.xaml
index ce8fd3a43e..da49054b77 100644
--- a/samples/RenderTest/MainWindow.xaml
+++ b/samples/RenderTest/MainWindow.xaml
@@ -24,9 +24,9 @@
-
+
-
+
diff --git a/samples/RenderTest/Pages/AnimationsPage.xaml b/samples/RenderTest/Pages/AnimationsPage.xaml
index 6eb7067245..5287e4e373 100644
--- a/samples/RenderTest/Pages/AnimationsPage.xaml
+++ b/samples/RenderTest/Pages/AnimationsPage.xaml
@@ -1,2 +1,123 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hover to activate Transform Keyframe Animations.
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/RenderTest/Pages/AnimationsPage.xaml.cs b/samples/RenderTest/Pages/AnimationsPage.xaml.cs
index 991896c3b5..2623721393 100644
--- a/samples/RenderTest/Pages/AnimationsPage.xaml.cs
+++ b/samples/RenderTest/Pages/AnimationsPage.xaml.cs
@@ -7,6 +7,7 @@ using Avalonia.Data;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
+using RenderTest.ViewModels;
namespace RenderTest.Pages
{
@@ -14,77 +15,13 @@ namespace RenderTest.Pages
{
public AnimationsPage()
{
- this.InitializeComponent();
- this.CreateAnimations();
+ InitializeComponent();
+ this.DataContext = new AnimationsPageViewModel();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
-
- private void CreateAnimations()
- {
- const int Count = 100;
- var panel = new WrapPanel();
-
- for (var i = 0; i < Count; ++i)
- {
- Ellipse ellipse;
- var element = new Panel
- {
- Children =
- {
- (ellipse = new Ellipse
- {
- Name = $"ellipse{i}",
- Width = 100,
- Height = 100,
- Fill = Brushes.Blue,
- }),
- new Path
- {
- Data = StreamGeometry.Parse(
- "F1 M 16.6309,18.6563C 17.1309,8.15625 29.8809,14.1563 29.8809,14.1563C 30.8809,11.1563 34.1308,11.4063 34.1308,11.4063C 33.5,12 34.6309,13.1563 34.6309,13.1563C 32.1309,13.1562 31.1309,14.9062 31.1309,14.9062C 41.1309,23.9062 32.6309,27.9063 32.6309,27.9062C 24.6309,24.9063 21.1309,22.1562 16.6309,18.6563 Z M 16.6309,19.9063C 21.6309,24.1563 25.1309,26.1562 31.6309,28.6562C 31.6309,28.6562 26.3809,39.1562 18.3809,36.1563C 18.3809,36.1563 18,38 16.3809,36.9063C 15,36 16.3809,34.9063 16.3809,34.9063C 16.3809,34.9063 10.1309,30.9062 16.6309,19.9063 Z"),
- Fill = Brushes.Green,
- HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
- VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center,
- RenderTransform = new ScaleTransform(2, 2),
- }
- },
- Margin = new Thickness(4),
- RenderTransform = new ScaleTransform(),
- };
-
- var start = Animate.Stopwatch.Elapsed;
- var index = i % (Count / 2);
- var degrees = Animate.Timer
- .Select(x => (x - start).TotalSeconds)
- .Where(x => (x % Count) >= index && (x % Count) < index + 1)
- .Select(x => (x % 1) / 1);
-
- element.RenderTransform.Bind(
- ScaleTransform.ScaleXProperty,
- degrees,
- BindingPriority.Animation);
-
- ellipse.PointerEnter += Ellipse_PointerEnter;
- ellipse.PointerLeave += Ellipse_PointerLeave;
-
- panel.Children.Add(element);
- }
-
- Content = panel;
- }
-
- private void Ellipse_PointerEnter(object sender, PointerEventArgs e)
- {
- ((Ellipse)sender).Fill = Brushes.Red;
- }
-
- private void Ellipse_PointerLeave(object sender, PointerEventArgs e)
- {
- ((Ellipse)sender).Fill = Brushes.Blue;
- }
}
}
diff --git a/samples/RenderTest/Pages/ClippingPage.xaml b/samples/RenderTest/Pages/ClippingPage.xaml
index 238e3449de..2e7944b0fc 100644
--- a/samples/RenderTest/Pages/ClippingPage.xaml
+++ b/samples/RenderTest/Pages/ClippingPage.xaml
@@ -1,13 +1,52 @@
-
+
-
+
+
+
+
+
+
+ Clip="M 58.625 0.07421875
+ C 50.305778 0.26687364 42.411858 7.0346526 41.806641 15.595703
+ C 42.446442 22.063923 39.707425 13.710754 36.982422 12.683594
+ C 29.348395 6.1821635 16.419398 8.4359222 11.480469 17.195312
+ C 6.0935256 25.476803 9.8118851 37.71125 18.8125 41.6875
+ C 9.1554771 40.62945 -0.070876925 49.146842 0.21679688 58.857422
+ C 0.21545578 60.872512 0.56758794 62.88911 1.2617188 64.78125
+ C 4.3821886 74.16708 16.298268 78.921772 25.03125 74.326172
+ C 28.266843 72.062552 26.298191 74.214838 25.414062 76.398438
+ C 21.407348 85.589198 27.295992 97.294293 37.097656 99.501953
+ C 46.864883 102.3541 57.82177 94.726518 58.539062 84.580078
+ C 58.142158 79.498998 59.307538 83.392694 61.207031 85.433594
+ C 67.532324 93.056874 80.440232 93.192029 86.882812 85.630859
+ C 93.836392 78.456939 92.396838 65.538666 84.115234 60.009766
+ C 79.783641 57.904836 83.569793 58.802369 86.375 58.193359
+ C 96.383335 56.457569 102.87506 44.824101 99.083984 35.394531
+ C 95.963498 26.008711 84.047451 21.254079 75.314453 25.849609
+ C 72.078834 28.113269 74.047517 25.960974 74.931641 23.777344
+ C 78.93827 14.586564 73.049722 2.8815081 63.248047 0.67382812
+ C 61.721916 0.22817968 60.165597 0.038541919 58.625 0.07421875 z ">
+
+
+
Apply Geometry Clip
diff --git a/samples/RenderTest/Pages/ClippingPage.xaml.cs b/samples/RenderTest/Pages/ClippingPage.xaml.cs
index b416f12943..2a79076d4c 100644
--- a/samples/RenderTest/Pages/ClippingPage.xaml.cs
+++ b/samples/RenderTest/Pages/ClippingPage.xaml.cs
@@ -16,7 +16,6 @@ namespace RenderTest.Pages
public ClippingPage()
{
InitializeComponent();
- CreateAnimations();
WireUpCheckbox();
}
@@ -25,18 +24,6 @@ namespace RenderTest.Pages
AvaloniaXamlLoader.Load(this);
}
- private void CreateAnimations()
- {
- var clipped = this.FindControl("clipChild");
- var degrees = Animate.Timer.Select(x => x.TotalMilliseconds / 5);
- clipped.RenderTransform = new RotateTransform();
- clipped.RenderTransform.Bind(RotateTransform.AngleProperty, degrees, BindingPriority.Animation);
- clipped.Bind(
- Border.BackgroundProperty,
- clipped.GetObservable(Control.IsPointerOverProperty)
- .Select(x => x ? Brushes.Crimson : AvaloniaProperty.UnsetValue));
- }
-
private void WireUpCheckbox()
{
var useMask = this.FindControl("useMask");
diff --git a/samples/RenderTest/Program.cs b/samples/RenderTest/Program.cs
deleted file mode 100644
index a1a2b8c410..0000000000
--- a/samples/RenderTest/Program.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Linq;
-using Avalonia;
-using Avalonia.Controls;
-using Avalonia.Logging.Serilog;
-using Avalonia.Platform;
-using Serilog;
-
-namespace RenderTest
-{
- internal class Program
- {
- static void Main(string[] args)
- {
- // TODO: Make this work with GTK/Skia/Cairo depending on command-line args
- // again.
- AppBuilder.Configure()
- .UsePlatformDetect()
- .UseReactiveUI()
- .LogToDebug()
- .Start();
- }
- }
-}
diff --git a/samples/RenderTest/SideBar.xaml b/samples/RenderTest/SideBar.xaml
index 7fcd828ba3..29e5d854f9 100644
--- a/samples/RenderTest/SideBar.xaml
+++ b/samples/RenderTest/SideBar.xaml
@@ -1,4 +1,6 @@
-
+
+
+
diff --git a/samples/RenderTest/ViewModels/AnimationsPageViewModel.cs b/samples/RenderTest/ViewModels/AnimationsPageViewModel.cs
new file mode 100644
index 0000000000..17eee547a1
--- /dev/null
+++ b/samples/RenderTest/ViewModels/AnimationsPageViewModel.cs
@@ -0,0 +1,40 @@
+using System;
+using ReactiveUI;
+using Avalonia.Animation;
+
+namespace RenderTest.ViewModels
+{
+ public class AnimationsPageViewModel : ReactiveObject
+ {
+ private string _playStateText = "Pause all animations";
+
+ public AnimationsPageViewModel()
+ {
+ ToggleGlobalPlayState = ReactiveCommand.Create(()=>TogglePlayState());
+ }
+
+ void TogglePlayState()
+ {
+ switch (Timing.GetGlobalPlayState())
+ {
+ case PlayState.Run:
+ PlayStateText = "Resume all animations";
+ Timing.SetGlobalPlayState(PlayState.Pause);
+ break;
+
+ case PlayState.Pause:
+ PlayStateText = "Pause all animations";
+ Timing.SetGlobalPlayState(PlayState.Run);
+ break;
+ }
+ }
+
+ public string PlayStateText
+ {
+ get { return _playStateText; }
+ set { this.RaiseAndSetIfChanged(ref _playStateText, value); }
+ }
+
+ public ReactiveCommand ToggleGlobalPlayState { get; }
+ }
+}
diff --git a/samples/RenderTest/ViewModels/MainWindowViewModel.cs b/samples/RenderTest/ViewModels/MainWindowViewModel.cs
index b2fa2e8b7a..02a2abeb89 100644
--- a/samples/RenderTest/ViewModels/MainWindowViewModel.cs
+++ b/samples/RenderTest/ViewModels/MainWindowViewModel.cs
@@ -5,7 +5,7 @@ namespace RenderTest.ViewModels
{
public class MainWindowViewModel : ReactiveObject
{
- private bool drawDirtyRects = true;
+ private bool drawDirtyRects = false;
private bool drawFps = true;
public MainWindowViewModel()
diff --git a/src/Android/Avalonia.Android/Resources/Resource.Designer.cs b/src/Android/Avalonia.Android/Resources/Resource.Designer.cs
index 80cbbc51ec..e66c2800d3 100644
--- a/src/Android/Avalonia.Android/Resources/Resource.Designer.cs
+++ b/src/Android/Avalonia.Android/Resources/Resource.Designer.cs
@@ -40,11 +40,14 @@ namespace Avalonia.Android
public partial class String
{
+ // aapt resource value: 0x7f020002
+ public static int ApplicationName = 2130837506;
+
// aapt resource value: 0x7f020001
- public static int ApplicationName = 2130837505;
+ public static int Hello = 2130837505;
// aapt resource value: 0x7f020000
- public static int Hello = 2130837504;
+ public static int library_name = 2130837504;
static String()
{
diff --git a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
index 9977d77978..359adaa1f0 100644
--- a/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
+++ b/src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
@@ -143,10 +143,6 @@
{3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f}
Avalonia.Themes.Default
-
- {5fb2b005-0a7f-4dad-add4-3ed01444e63d}
- Avalonia.HtmlRenderer
-
{7d2d3083-71dd-4cc9-8907-39a0d86fb322}
Avalonia.Skia
diff --git a/src/Avalonia.Animation/Animatable.cs b/src/Avalonia.Animation/Animatable.cs
index 0231ffa0be..a27d996301 100644
--- a/src/Avalonia.Animation/Animatable.cs
+++ b/src/Avalonia.Animation/Animatable.cs
@@ -3,6 +3,13 @@
using System.Linq;
using Avalonia.Data;
+using System;
+using System.Reactive.Linq;
+using Avalonia.Collections;
+using Avalonia.Animation;
+using System.Collections.Generic;
+using System.Threading;
+using System.Collections.Concurrent;
namespace Avalonia.Animation
{
@@ -12,45 +19,90 @@ namespace Avalonia.Animation
public class Animatable : AvaloniaObject
{
///
- /// The property transitions for the control.
+ /// Initializes this object.
///
- private PropertyTransitions _propertyTransitions;
+ public Animatable()
+ {
+ Transitions = new Transitions();
+ AnimatableTimer = Timing.AnimationStateTimer
+ .Select(p =>
+ {
+ if (this._playState == PlayState.Pause)
+ {
+ return PlayState.Pause;
+ }
+ else return p;
+ })
+ .Publish()
+ .RefCount();
+ }
///
- /// Gets or sets the property transitions for the control.
+ /// The specific animations timer for this control.
///
- ///
- /// The property transitions for the control.
- ///
- public PropertyTransitions PropertyTransitions
+ ///
+ public IObservable AnimatableTimer;
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly DirectProperty PlayStateProperty =
+ AvaloniaProperty.RegisterDirect(
+ nameof(PlayState),
+ o => o.PlayState,
+ (o, v) => o.PlayState = v);
+
+ private PlayState _playState = PlayState.Run;
+
+ ///
+ /// Gets or sets the state of the animation for this
+ /// control.
+ ///
+ public PlayState PlayState
{
- get
- {
- return _propertyTransitions ?? (_propertyTransitions = new PropertyTransitions());
- }
+ get { return _playState; }
+ set { SetAndRaise(PlayStateProperty, ref _playState, value); }
- set
- {
- _propertyTransitions = value;
- }
}
+
///
- /// Reacts to a change in a value in order to animate the
- /// change if a is set for the property..
+ /// Defines the property.
+ ///
+ public static readonly DirectProperty> TransitionsProperty =
+ AvaloniaProperty.RegisterDirect>(
+ nameof(Transitions),
+ o => o.Transitions,
+ (o, v) => o.Transitions = v);
+
+ private IEnumerable _transitions = new AvaloniaList();
+
+ ///
+ /// Gets or sets the property transitions for the control.
+ ///
+ public IEnumerable Transitions
+ {
+ get { return _transitions; }
+ set { SetAndRaise(TransitionsProperty, ref _transitions, value); }
+ }
+
+ ///
+ /// Reacts to a change in a value in
+ /// order to animate the change if a is set for the property.
///
/// The event args.
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs e)
{
- if (e.Priority != BindingPriority.Animation && _propertyTransitions != null)
+ if (e.Priority != BindingPriority.Animation && Transitions != null)
{
- var match = _propertyTransitions.FirstOrDefault(x => x.Property == e.Property);
+ var match = Transitions.FirstOrDefault(x => x.Property == e.Property);
if (match != null)
{
- Animate.Property(this, e.Property, e.OldValue, e.NewValue, match.Easing, match.Duration);
+ match.Apply(this, e.OldValue, e.NewValue);
}
}
}
+
}
}
diff --git a/src/Avalonia.Animation/Animate.cs b/src/Avalonia.Animation/Animate.cs
deleted file mode 100644
index 3e23f635ce..0000000000
--- a/src/Avalonia.Animation/Animate.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright (c) The Avalonia Project. All rights reserved.
-// Licensed under the MIT license. See licence.md file in the project root for full license information.
-
-using System;
-using System.Diagnostics;
-using System.Linq;
-using System.Reactive.Linq;
-using Avalonia.Data;
-using Avalonia.Threading;
-
-namespace Avalonia.Animation
-{
- ///
- /// Utilities for creating animations.
- ///
- public static class Animate
- {
- ///
- /// The number of frames per second.
- ///
- public const int FramesPerSecond = 60;
-
- ///
- /// The time span of each frame.
- ///
- private static readonly TimeSpan Tick = TimeSpan.FromSeconds(1.0 / FramesPerSecond);
-
- ///
- /// Initializes static members of the class.
- ///
- static Animate()
- {
- Stopwatch = new Stopwatch();
- Stopwatch.Start();
- Timer = Observable.Interval(Tick, AvaloniaScheduler.Instance)
- .Select(_ => Stopwatch.Elapsed)
- .Publish()
- .RefCount();
- }
-
- ///
- /// The stopwatch used to track time.
- ///
- ///
- /// The stopwatch used to track time.
- ///
- public static Stopwatch Stopwatch
- {
- get; }
-
- ///
- /// Gets the animation timer.
- ///
- ///
- /// The animation timer ticks times per second. The
- /// parameter passed to a subsciber is the time span since the animation system was
- /// initialized.
- ///
- ///
- /// The animation timer.
- ///
- public static IObservable Timer
- {
- get; }
-
- ///
- /// Gets a timer that fires every frame for the specified duration.
- ///
- /// The duration of the animation.
- ///
- /// An observable that notifies the subscriber of the progress along the animation.
- ///
- ///
- /// The parameter passed to the subscriber is the progress along the animation, with
- /// 0 being the start and 1 being the end. The observable is guaranteed to fire 0
- /// immediately on subscribe and 1 at the end of the duration.
- ///
- public static IObservable GetTimer(TimeSpan duration)
- {
- var startTime = Stopwatch.Elapsed.Ticks;
- var endTime = startTime + duration.Ticks;
- return Timer
- .TakeWhile(x => x.Ticks < endTime)
- .Select(x => (x.Ticks - startTime) / (double)duration.Ticks)
- .StartWith(0.0)
- .Concat(Observable.Return(1.0));
- }
-
- ///
- /// Animates a .
- ///
- /// The target object.
- /// The target property.
- /// The value of the property at the start of the animation.
- /// The value of the property at the end of the animation.
- /// The easing function to use.
- /// The duration of the animation.
- /// An that can be used to track or stop the animation.
- public static Animation Property(
- IAvaloniaObject target,
- AvaloniaProperty property,
- object start,
- object finish,
- IEasing easing,
- TimeSpan duration)
- {
- var o = GetTimer(duration).Select(progress => easing.Ease(progress, start, finish));
- return new Animation(o, target.Bind(property, o, BindingPriority.Animation));
- }
-
- ///
- /// Animates a .
- ///
- /// The property type.
- /// The target object.
- /// The target property.
- /// The value of the property at the start of the animation.
- /// The value of the property at the end of the animation.
- /// The easing function to use.
- /// The duration of the animation.
- /// An that can be used to track or stop the animation.
- public static Animation Property(
- IAvaloniaObject target,
- AvaloniaProperty property,
- T start,
- T finish,
- IEasing easing,
- TimeSpan duration)
- {
- var o = GetTimer(duration).Select(progress => easing.Ease(progress, start, finish));
- return new Animation(o, target.Bind(property, o, BindingPriority.Animation));
- }
- }
-}
diff --git a/src/Avalonia.Animation/Animation.cs b/src/Avalonia.Animation/Animation.cs
index 41e4e2fee1..aa436f5f4e 100644
--- a/src/Avalonia.Animation/Animation.cs
+++ b/src/Avalonia.Animation/Animation.cs
@@ -1,34 +1,139 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
+using Avalonia.Animation.Easings;
+using Avalonia.Animation;
+using Avalonia.Collections;
+using Avalonia.Metadata;
using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Reflection;
+using System.Linq;
namespace Avalonia.Animation
{
///
/// Tracks the progress of an animation.
///
- public class Animation : IObservable