diff --git a/.editorconfig b/.editorconfig
index f1f5575fc5..12b3df9785 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,7 +9,7 @@ indent_style = space
# (Please don't specify an indent_size here; that has too many unintended consequences.)
# Code files
-[*.{cs,csx,vb,vbx}]
+[*.{cs,csx,vb,vbx,ts}]
indent_style = tab
indent_size = 4
insert_final_newline = true
diff --git a/nuget/SkiaSharp.Views.Uno.nuspec b/nuget/SkiaSharp.Views.Uno.nuspec
index 0834728f8d..ec58fb6db5 100644
--- a/nuget/SkiaSharp.Views.Uno.nuspec
+++ b/nuget/SkiaSharp.Views.Uno.nuspec
@@ -27,6 +27,11 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
© Microsoft Corporation. All rights reserved.
+
+
+
+
+
@@ -50,15 +55,18 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
+
+
+
-
+
diff --git a/samples/Basic/Uno/SkiaSharpSample.Linux.sln b/samples/Basic/Uno/SkiaSharpSample.Linux.sln
index fe9b58080c..da2d247255 100644
--- a/samples/Basic/Uno/SkiaSharpSample.Linux.sln
+++ b/samples/Basic/Uno/SkiaSharpSample.Linux.sln
@@ -5,17 +5,30 @@ VisualStudioVersion = 16.0.30229.9
MinimumVisualStudioVersion = 10.0.40219.1
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharpSample.Shared", "SkiaSharpSample.Shared\SkiaSharpSample.Shared.shproj", "{6279C845-92F8-4333-AB99-3D213163593C}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpSample.Wasm", "SkiaSharpSample.Wasm\SkiaSharpSample.Wasm.csproj", "{9726301D-8A93-4A06-88DF-92BA01CF80AD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "..\..\..\source\SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{1787D9BF-9815-4E1D-BDEB-9994859FE91E}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp", "..\..\..\binding\SkiaSharp\SkiaSharp.csproj", "{409AF271-D8B7-4F79-B293-02F562A51955}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13
+ SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{9726301d-8a93-4a06-88df-92ba01cf80ad}*SharedItemsImports = 5
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.Build.0 = Release|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/Assets/SplashScreen.png b/samples/Basic/Uno/SkiaSharpSample.Wasm/Assets/SplashScreen.png
new file mode 100644
index 0000000000..a87b6e2d5d
Binary files /dev/null and b/samples/Basic/Uno/SkiaSharpSample.Wasm/Assets/SplashScreen.png differ
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/LinkerConfig.xml b/samples/Basic/Uno/SkiaSharpSample.Wasm/LinkerConfig.xml
new file mode 100644
index 0000000000..3349ebe5f6
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/LinkerConfig.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/Program.cs b/samples/Basic/Uno/SkiaSharpSample.Wasm/Program.cs
new file mode 100644
index 0000000000..1742b8fdaf
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/Program.cs
@@ -0,0 +1,78 @@
+using Microsoft.Extensions.Logging;
+using Uno.Extensions;
+using Uno.UI;
+using Windows.UI.Xaml;
+
+namespace SkiaSharpSample
+{
+ public class Program
+ {
+ private static App _app;
+
+ static int Main(string[] args)
+ {
+ FeatureConfiguration.UIElement.AssignDOMXamlName = true;
+
+ ConfigureFilters(LogExtensionPoint.AmbientLoggerFactory);
+
+ Application.Start(_ => _app = new App());
+
+ return 0;
+ }
+
+ static void ConfigureFilters(ILoggerFactory factory)
+ {
+ factory
+ .WithFilter(new FilterLoggerSettings
+ {
+ { "Uno", LogLevel.Warning },
+ { "Windows", LogLevel.Warning },
+ { "nVentive.Umbrella", LogLevel.Warning },
+ { "SkiaSharp", LogLevel.Warning },
+
+ // View Navigation related messages
+ // { "nVentive.Umbrella.Views.Navigation", LogLevel.Debug },
+ // { "nVentive.Umbrella.Presentation.Light.ViewModelRegistry", LogLevel.Debug },
+
+ // All presentation related messages
+ // { "nVentive.Umbrella.Presentation.Light", LogLevel.Debug },
+
+ // ViewModel related messages
+ // { "nVentive.Umbrella.Presentation.Light.ViewModelBase", LogLevel.Debug },
+
+ // Dynamic properties related messages
+ // { "nVentive.Umbrella.Presentation.Light.DynamicProperties", LogLevel.Debug },
+
+ // AVVM/AVP Related messages
+ // { "nVentive.Umbrella.Presentation.Light.Extensions.AsyncValueViewModel", LogLevel.Debug },
+ // { "nVentive.Umbrella.Views.Controls.AsyncValuePresenter", LogLevel.Debug },
+ // { "nVentive.Umbrella.Views.Controls.IfDataContext", LogLevel.Debug },
+
+ // Layouter specific messages
+ // { "Windows.UI.Xaml.Controls", LogLevel.Debug },
+ // { "Windows.UI.Xaml.Controls.Layouter", LogLevel.Debug },
+ // { "Windows.UI.Xaml.Controls.Panel", LogLevel.Debug },
+
+ // Binding related messages
+ // { "Windows.UI.Xaml.Data", LogLevel.Debug },
+ // { "Windows.UI.Xaml.Data", LogLevel.Debug },
+
+ // Binder memory references tracking
+ // { "ReferenceHolder", LogLevel.Debug },
+
+ // Web Queries related messages
+ // gManager.SetLoggerLevel("nVentive.Umbrella.Web", LogLevel.Debug },
+
+ // Location service messages
+ // { "nVentive.Umbrella.Services.Location", LogLevel.Debug },
+
+ // Map Component messages
+ // { "nVentive.Umbrella.Components.Maps", LogLevel.Debug },
+
+ // ApplicationViewState
+ // { "nVentive.Umbrella.Views.Services.ApplicationViewState.ApplicationViewStateService", LogLevel.Debug },
+ })
+ .AddConsole(LogLevel.Debug);
+ }
+ }
+}
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/Properties/launchSettings.json b/samples/Basic/Uno/SkiaSharpSample.Wasm/Properties/launchSettings.json
new file mode 100644
index 0000000000..8bcf8ae7a0
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:63559/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "SkiaSharpSample.Wasm": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:5000"
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/SkiaSharpSample.Wasm.csproj b/samples/Basic/Uno/SkiaSharpSample.Wasm/SkiaSharpSample.Wasm.csproj
new file mode 100644
index 0000000000..f827f718aa
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/SkiaSharpSample.Wasm.csproj
@@ -0,0 +1,44 @@
+
+
+
+
+
+ Exe
+ netstandard2.0
+ true
+ $(DefineConstants);__WASM__
+ 8.0
+ true
+ true
+
+
+ true
+ portable
+ true
+ Interpreter
+
+
+ FullAOT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmCSS/Fonts.css b/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmCSS/Fonts.css
new file mode 100644
index 0000000000..f69615d75f
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmCSS/Fonts.css
@@ -0,0 +1,10 @@
+/**
+ When adding fonts here, make sure to add them using a base64 data uri, otherwise
+ fonts loading are delayed, and text may get displayed incorrectly.
+*/
+
+@font-face {
+ font-family: "Symbols";
+ /* winjs-symbols.woff2: https://github.com/Microsoft/fonts/tree/master/Symbols */
+ src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
+}
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmScripts/AppManifest.js b/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmScripts/AppManifest.js
new file mode 100644
index 0000000000..dc33e78186
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmScripts/AppManifest.js
@@ -0,0 +1,5 @@
+var UnoAppManifest = {
+ splashScreenImage: "Assets/SplashScreen.png",
+ splashScreenColor: "#F8F8F8",
+ displayName: "SkiaSharp for WebAssembly"
+}
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmScripts/SkiaSharpSample.js b/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmScripts/SkiaSharpSample.js
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/WasmScripts/SkiaSharpSample.js
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/samples/Basic/Uno/SkiaSharpSample.Wasm/wwwroot/web.config b/samples/Basic/Uno/SkiaSharpSample.Wasm/wwwroot/web.config
new file mode 100644
index 0000000000..0b041e919d
--- /dev/null
+++ b/samples/Basic/Uno/SkiaSharpSample.Wasm/wwwroot/web.config
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Basic/Uno/SkiaSharpSample.Windows.sln b/samples/Basic/Uno/SkiaSharpSample.Windows.sln
index ff10d01a3d..54d04fe0d5 100644
--- a/samples/Basic/Uno/SkiaSharpSample.Windows.sln
+++ b/samples/Basic/Uno/SkiaSharpSample.Windows.sln
@@ -17,12 +17,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpSample.Wasm", "SkiaSharpSample.Wasm\SkiaSharpSample.Wasm.csproj", "{9726301D-8A93-4A06-88DF-92BA01CF80AD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "..\..\..\source\SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{1787D9BF-9815-4E1D-BDEB-9994859FE91E}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp", "..\..\..\binding\SkiaSharp\SkiaSharp.csproj", "{409AF271-D8B7-4F79-B293-02F562A51955}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{8b8db39e-c0ff-4edc-83a6-0b6a4ab763ee}*SharedItemsImports = 4
+ SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{9726301d-8a93-4a06-88df-92ba01cf80ad}*SharedItemsImports = 5
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{ae39aa1d-32c8-482b-9395-ad5493c98f7e}*SharedItemsImports = 4
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -178,6 +183,46 @@ Global
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x64.Build.0 = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.ActiveCfg = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.Build.0 = Release|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|ARM.ActiveCfg = Debug|Any CPU
diff --git a/samples/Basic/Uno/SkiaSharpSample.sln b/samples/Basic/Uno/SkiaSharpSample.sln
index 91bfe51221..5d6f3c8990 100644
--- a/samples/Basic/Uno/SkiaSharpSample.sln
+++ b/samples/Basic/Uno/SkiaSharpSample.sln
@@ -29,6 +29,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpSample.Wasm", "SkiaSharpSample.Wasm\SkiaSharpSample.Wasm.csproj", "{9726301D-8A93-4A06-88DF-92BA01CF80AD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "..\..\..\source\SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{1787D9BF-9815-4E1D-BDEB-9994859FE91E}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp", "..\..\..\binding\SkiaSharp\SkiaSharp.csproj", "{409AF271-D8B7-4F79-B293-02F562A51955}"
EndProject
Global
@@ -36,6 +40,7 @@ Global
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{2a19c71c-d1ab-4c70-b821-6a7c7c4abe66}*SharedItemsImports = 4
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{8b8db39e-c0ff-4edc-83a6-0b6a4ab763ee}*SharedItemsImports = 4
+ SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{9726301d-8a93-4a06-88df-92ba01cf80ad}*SharedItemsImports = 5
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{ae39aa1d-32c8-482b-9395-ad5493c98f7e}*SharedItemsImports = 4
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{b3a30dc3-0e2d-4f46-97c5-fdc6ab8062e6}*SharedItemsImports = 4
EndGlobalSection
@@ -429,6 +434,62 @@ Global
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x64.Build.0 = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.ActiveCfg = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhone.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhone.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.Build.0 = Release|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|ARM.ActiveCfg = Debug|Any CPU
diff --git a/samples/Gallery/PlatformShared/SamplesInitializer.cs b/samples/Gallery/PlatformShared/SamplesInitializer.cs
index 0e1d7ae444..9ae3f3cfbd 100644
--- a/samples/Gallery/PlatformShared/SamplesInitializer.cs
+++ b/samples/Gallery/PlatformShared/SamplesInitializer.cs
@@ -2,11 +2,20 @@
using System.IO;
using System.Linq;
using Xamarin.Essentials;
+#if __WASM__
+using System.Runtime.InteropServices;
+using Windows.ApplicationModel;
+using Windows.Storage;
+using Windows.System;
+using Uno.Foundation;
+#endif
#if WINDOWS_UWP
using Windows.ApplicationModel;
using Windows.Storage;
using Windows.System;
+#if !__WASM__
using Launcher = Xamarin.Essentials.Launcher;
+#endif
#elif __MACOS__
using AppKit;
using Foundation;
@@ -55,6 +64,20 @@ public static void Init()
var path = Path.Combine(root, "Media", fontName);
#elif __TIZEN__
var path = ResourcePath.GetPath(fontName);
+#elif __WASM__
+ // WASM does not have an app package, so just use the embedded font
+ string path;
+ using (var stream = SampleMedia.Fonts.EmbeddedFont)
+ {
+ var appData = ApplicationData.Current.LocalFolder.Path;
+ var temp = Path.Combine(appData, "SkiaSharpSample", "Assets", "Media");
+ if (!Directory.Exists(temp))
+ Directory.CreateDirectory(temp);
+
+ path = Path.Combine(temp, fontName);
+ using (var writer = File.OpenWrite(path))
+ stream.CopyTo(writer);
+ }
#endif
#if WINDOWS_UWP || __IOS__ || __TVOS__ || __ANDROID__ || __TIZEN__
@@ -63,6 +86,8 @@ public static void Init()
var localStorage = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
#elif __DESKTOP__
var localStorage = System.Windows.Forms.Application.LocalUserAppDataPath;
+#elif __WASM__
+ var localStorage = ApplicationData.Current.LocalFolder.Path;
#endif
SamplesManager.ContentFontPath = path;
@@ -90,6 +115,18 @@ private static async void OnOpenSampleFile(string path)
}
#elif __DESKTOP__
Process.Start(path);
+#elif __WASM__
+ var data = File.ReadAllBytes(path);
+ var gch = GCHandle.Alloc(data, GCHandleType.Pinned);
+ var pinnedData = gch.AddrOfPinnedObject();
+ try
+ {
+ WebAssemblyRuntime.InvokeJS($"fileSaveAs('{Path.GetFileName(path)}', {pinnedData}, {data.Length})");
+ }
+ finally
+ {
+ gch.Free();
+ }
#endif
}
}
diff --git a/samples/Gallery/Shared/Samples/BitmapScalerSample.cs b/samples/Gallery/Shared/Samples/BitmapScalerSample.cs
index a8b0ed0ee6..b3a12ed51d 100644
--- a/samples/Gallery/Shared/Samples/BitmapScalerSample.cs
+++ b/samples/Gallery/Shared/Samples/BitmapScalerSample.cs
@@ -2,7 +2,6 @@
using System.Threading.Tasks;
using SkiaSharp;
using System.Collections.Generic;
-using System.Linq;
namespace SkiaSharpSample.Samples
{
@@ -25,10 +24,17 @@ public BitmapScalerSample()
protected override Task OnInit()
{
- methods = Enum.GetValues(typeof(SKBitmapResizeMethod)).Cast().ToList();
+ methods = new List
+ {
+ SKBitmapResizeMethod.Box,
+ SKBitmapResizeMethod.Triangle,
+ SKBitmapResizeMethod.Lanczos3,
+ SKBitmapResizeMethod.Hamming,
+ SKBitmapResizeMethod.Mitchell,
+ };
method = methods[0];
- using (var stream = new SKManagedStream(SampleMedia.Images.AdobeDng))
+ using (var stream = new SKManagedStream(SampleMedia.Images.Baboon))
{
bitmap = SKBitmap.Decode(stream);
}
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Linux.sln b/samples/Gallery/Uno/SkiaSharpSample.Linux.sln
index fe9b58080c..da2d247255 100644
--- a/samples/Gallery/Uno/SkiaSharpSample.Linux.sln
+++ b/samples/Gallery/Uno/SkiaSharpSample.Linux.sln
@@ -5,17 +5,30 @@ VisualStudioVersion = 16.0.30229.9
MinimumVisualStudioVersion = 10.0.40219.1
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharpSample.Shared", "SkiaSharpSample.Shared\SkiaSharpSample.Shared.shproj", "{6279C845-92F8-4333-AB99-3D213163593C}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpSample.Wasm", "SkiaSharpSample.Wasm\SkiaSharpSample.Wasm.csproj", "{9726301D-8A93-4A06-88DF-92BA01CF80AD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "..\..\..\source\SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{1787D9BF-9815-4E1D-BDEB-9994859FE91E}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp", "..\..\..\binding\SkiaSharp\SkiaSharp.csproj", "{409AF271-D8B7-4F79-B293-02F562A51955}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13
+ SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{9726301d-8a93-4a06-88df-92ba01cf80ad}*SharedItemsImports = 5
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.Build.0 = Release|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/samples/Gallery/Uno/SkiaSharpSample.UWP/SkiaSharpSample.UWP.csproj b/samples/Gallery/Uno/SkiaSharpSample.UWP/SkiaSharpSample.UWP.csproj
index 33f45e0c4e..7761984234 100644
--- a/samples/Gallery/Uno/SkiaSharpSample.UWP/SkiaSharpSample.UWP.csproj
+++ b/samples/Gallery/Uno/SkiaSharpSample.UWP/SkiaSharpSample.UWP.csproj
@@ -146,6 +146,10 @@
+
+ Assets\Media\content-font.ttf
+ PreserveNewest
+
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/Assets/SplashScreen.png b/samples/Gallery/Uno/SkiaSharpSample.Wasm/Assets/SplashScreen.png
new file mode 100644
index 0000000000..a87b6e2d5d
Binary files /dev/null and b/samples/Gallery/Uno/SkiaSharpSample.Wasm/Assets/SplashScreen.png differ
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/LinkerConfig.xml b/samples/Gallery/Uno/SkiaSharpSample.Wasm/LinkerConfig.xml
new file mode 100644
index 0000000000..3349ebe5f6
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/LinkerConfig.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/Program.cs b/samples/Gallery/Uno/SkiaSharpSample.Wasm/Program.cs
new file mode 100644
index 0000000000..1742b8fdaf
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/Program.cs
@@ -0,0 +1,78 @@
+using Microsoft.Extensions.Logging;
+using Uno.Extensions;
+using Uno.UI;
+using Windows.UI.Xaml;
+
+namespace SkiaSharpSample
+{
+ public class Program
+ {
+ private static App _app;
+
+ static int Main(string[] args)
+ {
+ FeatureConfiguration.UIElement.AssignDOMXamlName = true;
+
+ ConfigureFilters(LogExtensionPoint.AmbientLoggerFactory);
+
+ Application.Start(_ => _app = new App());
+
+ return 0;
+ }
+
+ static void ConfigureFilters(ILoggerFactory factory)
+ {
+ factory
+ .WithFilter(new FilterLoggerSettings
+ {
+ { "Uno", LogLevel.Warning },
+ { "Windows", LogLevel.Warning },
+ { "nVentive.Umbrella", LogLevel.Warning },
+ { "SkiaSharp", LogLevel.Warning },
+
+ // View Navigation related messages
+ // { "nVentive.Umbrella.Views.Navigation", LogLevel.Debug },
+ // { "nVentive.Umbrella.Presentation.Light.ViewModelRegistry", LogLevel.Debug },
+
+ // All presentation related messages
+ // { "nVentive.Umbrella.Presentation.Light", LogLevel.Debug },
+
+ // ViewModel related messages
+ // { "nVentive.Umbrella.Presentation.Light.ViewModelBase", LogLevel.Debug },
+
+ // Dynamic properties related messages
+ // { "nVentive.Umbrella.Presentation.Light.DynamicProperties", LogLevel.Debug },
+
+ // AVVM/AVP Related messages
+ // { "nVentive.Umbrella.Presentation.Light.Extensions.AsyncValueViewModel", LogLevel.Debug },
+ // { "nVentive.Umbrella.Views.Controls.AsyncValuePresenter", LogLevel.Debug },
+ // { "nVentive.Umbrella.Views.Controls.IfDataContext", LogLevel.Debug },
+
+ // Layouter specific messages
+ // { "Windows.UI.Xaml.Controls", LogLevel.Debug },
+ // { "Windows.UI.Xaml.Controls.Layouter", LogLevel.Debug },
+ // { "Windows.UI.Xaml.Controls.Panel", LogLevel.Debug },
+
+ // Binding related messages
+ // { "Windows.UI.Xaml.Data", LogLevel.Debug },
+ // { "Windows.UI.Xaml.Data", LogLevel.Debug },
+
+ // Binder memory references tracking
+ // { "ReferenceHolder", LogLevel.Debug },
+
+ // Web Queries related messages
+ // gManager.SetLoggerLevel("nVentive.Umbrella.Web", LogLevel.Debug },
+
+ // Location service messages
+ // { "nVentive.Umbrella.Services.Location", LogLevel.Debug },
+
+ // Map Component messages
+ // { "nVentive.Umbrella.Components.Maps", LogLevel.Debug },
+
+ // ApplicationViewState
+ // { "nVentive.Umbrella.Views.Services.ApplicationViewState.ApplicationViewStateService", LogLevel.Debug },
+ })
+ .AddConsole(LogLevel.Debug);
+ }
+ }
+}
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/Properties/launchSettings.json b/samples/Gallery/Uno/SkiaSharpSample.Wasm/Properties/launchSettings.json
new file mode 100644
index 0000000000..8bcf8ae7a0
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:63559/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "SkiaSharpSample.Wasm": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:5000"
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/SkiaSharpSample.Wasm.csproj b/samples/Gallery/Uno/SkiaSharpSample.Wasm/SkiaSharpSample.Wasm.csproj
new file mode 100644
index 0000000000..f827f718aa
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/SkiaSharpSample.Wasm.csproj
@@ -0,0 +1,44 @@
+
+
+
+
+
+ Exe
+ netstandard2.0
+ true
+ $(DefineConstants);__WASM__
+ 8.0
+ true
+ true
+
+
+ true
+ portable
+ true
+ Interpreter
+
+
+ FullAOT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmCSS/Fonts.css b/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmCSS/Fonts.css
new file mode 100644
index 0000000000..f69615d75f
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmCSS/Fonts.css
@@ -0,0 +1,10 @@
+/**
+ When adding fonts here, make sure to add them using a base64 data uri, otherwise
+ fonts loading are delayed, and text may get displayed incorrectly.
+*/
+
+@font-face {
+ font-family: "Symbols";
+ /* winjs-symbols.woff2: https://github.com/Microsoft/fonts/tree/master/Symbols */
+ src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
+}
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmScripts/AppManifest.js b/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmScripts/AppManifest.js
new file mode 100644
index 0000000000..dc33e78186
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmScripts/AppManifest.js
@@ -0,0 +1,5 @@
+var UnoAppManifest = {
+ splashScreenImage: "Assets/SplashScreen.png",
+ splashScreenColor: "#F8F8F8",
+ displayName: "SkiaSharp for WebAssembly"
+}
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmScripts/SkiaSharpSample.js b/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmScripts/SkiaSharpSample.js
new file mode 100644
index 0000000000..c3c75a8b60
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/WasmScripts/SkiaSharpSample.js
@@ -0,0 +1,23 @@
+
+function fileSaveAs(fileName, dataPtr, size) {
+ // copy data into buffer
+ var buffer = new Uint8Array(size);
+ for (var i = 0; i < size; i++) {
+ buffer[i] = Module.getValue(dataPtr + i, "i8");
+ }
+
+ // create the download anchor
+ var a = window.document.createElement('a');
+ var blob = new Blob([buffer]);
+ a.href = window.URL.createObjectURL(blob);
+ a.download = fileName;
+
+ // append anchor to body
+ document.body.appendChild(a);
+
+ // "click" download
+ a.click();
+
+ // remove anchor from body
+ document.body.removeChild(a);
+}
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Wasm/wwwroot/web.config b/samples/Gallery/Uno/SkiaSharpSample.Wasm/wwwroot/web.config
new file mode 100644
index 0000000000..0b041e919d
--- /dev/null
+++ b/samples/Gallery/Uno/SkiaSharpSample.Wasm/wwwroot/web.config
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Gallery/Uno/SkiaSharpSample.Windows.sln b/samples/Gallery/Uno/SkiaSharpSample.Windows.sln
index ff10d01a3d..54d04fe0d5 100644
--- a/samples/Gallery/Uno/SkiaSharpSample.Windows.sln
+++ b/samples/Gallery/Uno/SkiaSharpSample.Windows.sln
@@ -17,12 +17,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpSample.Wasm", "SkiaSharpSample.Wasm\SkiaSharpSample.Wasm.csproj", "{9726301D-8A93-4A06-88DF-92BA01CF80AD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "..\..\..\source\SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{1787D9BF-9815-4E1D-BDEB-9994859FE91E}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp", "..\..\..\binding\SkiaSharp\SkiaSharp.csproj", "{409AF271-D8B7-4F79-B293-02F562A51955}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{8b8db39e-c0ff-4edc-83a6-0b6a4ab763ee}*SharedItemsImports = 4
+ SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{9726301d-8a93-4a06-88df-92ba01cf80ad}*SharedItemsImports = 5
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{ae39aa1d-32c8-482b-9395-ad5493c98f7e}*SharedItemsImports = 4
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -178,6 +183,46 @@ Global
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x64.Build.0 = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.ActiveCfg = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.Build.0 = Release|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|ARM.ActiveCfg = Debug|Any CPU
diff --git a/samples/Gallery/Uno/SkiaSharpSample.sln b/samples/Gallery/Uno/SkiaSharpSample.sln
index 91bfe51221..5d6f3c8990 100644
--- a/samples/Gallery/Uno/SkiaSharpSample.sln
+++ b/samples/Gallery/Uno/SkiaSharpSample.sln
@@ -29,6 +29,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.UWP", "..\.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.UWP", "..\..\..\binding\SkiaSharp.UWP\SkiaSharp.UWP.csproj", "{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharpSample.Wasm", "SkiaSharpSample.Wasm\SkiaSharpSample.Wasm.csproj", "{9726301D-8A93-4A06-88DF-92BA01CF80AD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "..\..\..\source\SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{1787D9BF-9815-4E1D-BDEB-9994859FE91E}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp", "..\..\..\binding\SkiaSharp\SkiaSharp.csproj", "{409AF271-D8B7-4F79-B293-02F562A51955}"
EndProject
Global
@@ -36,6 +40,7 @@ Global
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{2a19c71c-d1ab-4c70-b821-6a7c7c4abe66}*SharedItemsImports = 4
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{8b8db39e-c0ff-4edc-83a6-0b6a4ab763ee}*SharedItemsImports = 4
+ SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{9726301d-8a93-4a06-88df-92ba01cf80ad}*SharedItemsImports = 5
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{ae39aa1d-32c8-482b-9395-ad5493c98f7e}*SharedItemsImports = 4
SkiaSharpSample.Shared\SkiaSharpSample.Shared.projitems*{b3a30dc3-0e2d-4f46-97c5-fdc6ab8062e6}*SharedItemsImports = 4
EndGlobalSection
@@ -429,6 +434,62 @@ Global
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x64.Build.0 = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.ActiveCfg = Release|Any CPU
{6FF6B08F-0A69-41A4-8F53-8FE9B7FB4A67}.Release|x86.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x64.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Debug|x86.Build.0 = Debug|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|ARM64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhone.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x64.Build.0 = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.ActiveCfg = Release|Any CPU
+ {9726301D-8A93-4A06-88DF-92BA01CF80AD}.Release|x86.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x64.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Debug|x86.Build.0 = Debug|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|ARM64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhone.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x64.Build.0 = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.ActiveCfg = Release|Any CPU
+ {1787D9BF-9815-4E1D-BDEB-9994859FE91E}.Release|x86.Build.0 = Release|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|Any CPU.Build.0 = Debug|Any CPU
{409AF271-D8B7-4F79-B293-02F562A51955}.Debug|ARM.ActiveCfg = Debug|Any CPU
diff --git a/samples/Gallery/Xamarin.Forms/UWP/UWP.csproj b/samples/Gallery/Xamarin.Forms/UWP/UWP.csproj
index fc0b5cd15b..4bb920337d 100644
--- a/samples/Gallery/Xamarin.Forms/UWP/UWP.csproj
+++ b/samples/Gallery/Xamarin.Forms/UWP/UWP.csproj
@@ -174,12 +174,9 @@
Assets\Media\content-font.ttf
- Always
+ PreserveNewest
-
-
-
-
+
diff --git a/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/SKXamlCanvas.Wasm.cs b/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/SKXamlCanvas.Wasm.cs
new file mode 100644
index 0000000000..647bc372e4
--- /dev/null
+++ b/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/SKXamlCanvas.Wasm.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Runtime.InteropServices;
+using Uno.Foundation;
+using Windows.UI.Xaml;
+
+namespace SkiaSharp.Views.UWP
+{
+ public partial class SKXamlCanvas : FrameworkElement
+ {
+ private IntPtr pixels;
+ private int pixelWidth;
+ private int pixelHeight;
+
+ static SKXamlCanvas()
+ {
+ const string js = @"
+(window || global).SkiaSharp_Views_UWP_SKXamlCanvas = class SKXamlCanvas {
+ static invalidateCanvas(pData, canvasId, width, height) {
+ var htmlCanvas = document.getElementById(canvasId);
+ htmlCanvas.width = width;
+ htmlCanvas.height = height;
+
+ var ctx = htmlCanvas.getContext('2d');
+ if (!ctx)
+ return false;
+
+ var buffer = new Uint8ClampedArray(Module.HEAPU8.buffer, pData, width * height * 4);
+ var imageData = new ImageData(buffer, width, height);
+ ctx.putImageData(imageData, 0, 0);
+
+ return true;
+ }
+};";
+ WebAssemblyRuntime.InvokeJS(js);
+ }
+
+ public SKXamlCanvas()
+ : base("canvas")
+ {
+ Initialize();
+ }
+
+ partial void DoUnloaded() =>
+ FreeBitmap();
+
+ private SKSize GetCanvasSize() =>
+ new SKSize(pixelWidth, pixelHeight);
+
+ private void DoInvalidate()
+ {
+ if (designMode)
+ return;
+
+ if (!isVisible)
+ return;
+
+ if (ActualWidth <= 0 || ActualHeight <= 0)
+ return;
+
+ int width, height;
+ if (IgnorePixelScaling)
+ {
+ width = (int)ActualWidth;
+ height = (int)ActualHeight;
+ }
+ else
+ {
+ width = (int)(ActualWidth * Dpi);
+ height = (int)(ActualHeight * Dpi);
+ }
+
+ var info = new SKImageInfo(width, height, SKImageInfo.PlatformColorType, SKAlphaType.Opaque);
+ CreateBitmap(info);
+
+ using (var surface = SKSurface.Create(info, pixels, info.RowBytes))
+ {
+ OnPaintSurface(new SKPaintSurfaceEventArgs(surface, info));
+ }
+
+ WebAssemblyRuntime.InvokeJS($"SkiaSharp_Views_UWP_SKXamlCanvas.invalidateCanvas({pixels}, \"{HtmlId}\", {info.Width}, {pixelHeight});");
+ }
+
+ private unsafe void CreateBitmap(SKImageInfo info)
+ {
+ if (pixels == IntPtr.Zero || pixelWidth != info.Width || pixelHeight != info.Height)
+ {
+ FreeBitmap();
+
+ var ptr = Marshal.AllocHGlobal(info.BytesSize);
+
+ pixels = ptr;
+ pixelWidth = info.Width;
+ pixelHeight = info.Height;
+ }
+ }
+
+ private void FreeBitmap()
+ {
+ if (pixels != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(pixels);
+ pixels = IntPtr.Zero;
+ }
+ }
+ }
+}
diff --git a/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/SkiaSharp.Views.Uno.Wasm.csproj b/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/SkiaSharp.Views.Uno.Wasm.csproj
new file mode 100644
index 0000000000..77dd4172fd
--- /dev/null
+++ b/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/SkiaSharp.Views.Uno.Wasm.csproj
@@ -0,0 +1,27 @@
+
+
+ netstandard2.0
+ SkiaSharp.Views.UWP
+ SkiaSharp.Views.UWP
+ false
+ SkiaSharp.Views.Uno
+ $(DefineConstants);__WASM__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/nuget/build/netstandard2.0/SkiaSharp.Views.Uno.targets b/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/nuget/build/netstandard2.0/SkiaSharp.Views.Uno.targets
new file mode 100644
index 0000000000..8dd18c709a
--- /dev/null
+++ b/source/SkiaSharp.Views.Uno/SkiaSharp.Views.Uno.Wasm/nuget/build/netstandard2.0/SkiaSharp.Views.Uno.targets
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/SkiaSharpSource.Linux.sln b/source/SkiaSharpSource.Linux.sln
index 33ff4167c3..4b50ee45db 100644
--- a/source/SkiaSharpSource.Linux.sln
+++ b/source/SkiaSharpSource.Linux.sln
@@ -47,6 +47,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Vulkan.SharpVk",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SkiaSharp.Views.Uno", "SkiaSharp.Views.Uno", "{00C9099A-BE4F-40D0-9401-295618368370}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{08599A28-FADE-43B5-95A0-BDCB22B97D3A}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -109,6 +111,10 @@ Global
{4606F63B-F0B1-418E-8B45-844361E17EB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4606F63B-F0B1-418E-8B45-844361E17EB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4606F63B-F0B1-418E-8B45-844361E17EB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {08599A28-FADE-43B5-95A0-BDCB22B97D3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {08599A28-FADE-43B5-95A0-BDCB22B97D3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {08599A28-FADE-43B5-95A0-BDCB22B97D3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {08599A28-FADE-43B5-95A0-BDCB22B97D3A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -128,6 +134,7 @@ Global
{6FB08346-1A02-4793-B5E1-4F739C6342D5} = {4F5EBFFB-DD81-43B9-8531-156ED3639C91}
{857CB6E9-BA27-4E94-A2D7-68BFF1EE193B} = {B3C4E4EC-68C7-4AFB-A6D4-1B2B0EB8C421}
{4606F63B-F0B1-418E-8B45-844361E17EB1} = {66A0800A-CA70-4AC2-88B7-8E7C4CA7C914}
+ {08599A28-FADE-43B5-95A0-BDCB22B97D3A} = {00C9099A-BE4F-40D0-9401-295618368370}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B4229170-607D-4886-9990-8FD5D86220B9}
diff --git a/source/SkiaSharpSource.Mac.sln b/source/SkiaSharpSource.Mac.sln
index 341fa5cf71..dd21c1b270 100644
--- a/source/SkiaSharpSource.Mac.sln
+++ b/source/SkiaSharpSource.Mac.sln
@@ -85,6 +85,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.iOS", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Mac", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Mac\SkiaSharp.Views.Uno.Mac.csproj", "{E0FF9BFF-2253-4486-A8E2-94312D09D056}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{242213FA-1F0E-40BB-A9B2-6FEE82B5D216}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -223,6 +225,10 @@ Global
{E0FF9BFF-2253-4486-A8E2-94312D09D056}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0FF9BFF-2253-4486-A8E2-94312D09D056}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0FF9BFF-2253-4486-A8E2-94312D09D056}.Release|Any CPU.Build.0 = Release|Any CPU
+ {242213FA-1F0E-40BB-A9B2-6FEE82B5D216}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {242213FA-1F0E-40BB-A9B2-6FEE82B5D216}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {242213FA-1F0E-40BB-A9B2-6FEE82B5D216}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {242213FA-1F0E-40BB-A9B2-6FEE82B5D216}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -261,6 +267,7 @@ Global
{D35B20BC-838A-4C1E-B427-4269F6387CAB} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
{6F92F6C5-6249-4A42-A028-DE1118D3CF78} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
{E0FF9BFF-2253-4486-A8E2-94312D09D056} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
+ {242213FA-1F0E-40BB-A9B2-6FEE82B5D216} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4B8BED07-EA83-4BC1-B3BB-6B8EBC54C25F}
diff --git a/source/SkiaSharpSource.Windows.sln b/source/SkiaSharpSource.Windows.sln
index f29cc032b5..462ac5271f 100644
--- a/source/SkiaSharpSource.Windows.sln
+++ b/source/SkiaSharpSource.Windows.sln
@@ -69,6 +69,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SkiaSharp.Views.Uno", "Skia
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Android", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Android\SkiaSharp.Views.Uno.Android.csproj", "{D35B20BC-838A-4C1E-B427-4269F6387CAB}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{F675A841-ECDB-4571-8AA3-7D4642FD57DB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -175,6 +177,10 @@ Global
{D35B20BC-838A-4C1E-B427-4269F6387CAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D35B20BC-838A-4C1E-B427-4269F6387CAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D35B20BC-838A-4C1E-B427-4269F6387CAB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F675A841-ECDB-4571-8AA3-7D4642FD57DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F675A841-ECDB-4571-8AA3-7D4642FD57DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F675A841-ECDB-4571-8AA3-7D4642FD57DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F675A841-ECDB-4571-8AA3-7D4642FD57DB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -205,6 +211,7 @@ Global
{F55B16B3-4427-45EA-A93C-E12A7409E37D} = {D40675E1-610D-4BBB-AA2A-BEF020717431}
{4606F63B-F0B1-418E-8B45-844361E17EB1} = {66A0800A-CA70-4AC2-88B7-8E7C4CA7C914}
{D35B20BC-838A-4C1E-B427-4269F6387CAB} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
+ {F675A841-ECDB-4571-8AA3-7D4642FD57DB} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {63A8C36E-4917-46DB-9AAD-522B8EC00C23}
diff --git a/source/SkiaSharpSource.sln b/source/SkiaSharpSource.sln
index 3ddfc7d82d..d4175315b7 100644
--- a/source/SkiaSharpSource.sln
+++ b/source/SkiaSharpSource.sln
@@ -105,6 +105,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.iOS", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Mac", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Mac\SkiaSharp.Views.Uno.Mac.csproj", "{E0FF9BFF-2253-4486-A8E2-94312D09D056}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkiaSharp.Views.Uno.Wasm", "SkiaSharp.Views.Uno\SkiaSharp.Views.Uno.Wasm\SkiaSharp.Views.Uno.Wasm.csproj", "{047C460D-7470-418C-AF2C-30620A1AF61C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -283,6 +285,10 @@ Global
{E0FF9BFF-2253-4486-A8E2-94312D09D056}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0FF9BFF-2253-4486-A8E2-94312D09D056}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0FF9BFF-2253-4486-A8E2-94312D09D056}.Release|Any CPU.Build.0 = Release|Any CPU
+ {047C460D-7470-418C-AF2C-30620A1AF61C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {047C460D-7470-418C-AF2C-30620A1AF61C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {047C460D-7470-418C-AF2C-30620A1AF61C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {047C460D-7470-418C-AF2C-30620A1AF61C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -331,6 +337,7 @@ Global
{D35B20BC-838A-4C1E-B427-4269F6387CAB} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
{6F92F6C5-6249-4A42-A028-DE1118D3CF78} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
{E0FF9BFF-2253-4486-A8E2-94312D09D056} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
+ {047C460D-7470-418C-AF2C-30620A1AF61C} = {E53351EA-FE40-47D2-B388-4A75DA6CCD71}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {67EACD19-0CEA-4127-9842-549AA6FB84C9}
diff --git a/tests/SkiaSharp.Wasm.Tests/SkiaSharp.Wasm.Tests.csproj b/tests/SkiaSharp.Wasm.Tests/SkiaSharp.Wasm.Tests.csproj
index fc4e6db0d4..7e82bce1e4 100644
--- a/tests/SkiaSharp.Wasm.Tests/SkiaSharp.Wasm.Tests.csproj
+++ b/tests/SkiaSharp.Wasm.Tests/SkiaSharp.Wasm.Tests.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/utils/NativeLibraryMiniTest/wasm/NativeLibraryMiniTest.csproj b/utils/NativeLibraryMiniTest/wasm/NativeLibraryMiniTest.csproj
index dba2525e16..938696c1c0 100644
--- a/utils/NativeLibraryMiniTest/wasm/NativeLibraryMiniTest.csproj
+++ b/utils/NativeLibraryMiniTest/wasm/NativeLibraryMiniTest.csproj
@@ -10,8 +10,8 @@
-
-
+
+