diff --git a/VERSIONS.txt b/VERSIONS.txt
index ac8e78b4e..f3c8a1adf 100644
--- a/VERSIONS.txt
+++ b/VERSIONS.txt
@@ -25,10 +25,7 @@ Uno.UI release 3.7.6
Microsoft.ProjectReunion release 0.8.0
Microsoft.ProjectReunion.Foundation release 0.8.0
Microsoft.ProjectReunion.WinUI release 0.8.0
-Microsoft.Maui.Core release 6.0.100-preview.5.794
-Microsoft.Maui.Controls release 6.0.100-preview.5.794
-Microsoft.Maui.Controls.Compatibility release 6.0.100-preview.5.794
-Microsoft.Maui.Controls.Compatibility.Android.FormsViewGroup release 6.0.100-preview.5.794
+Microsoft.Maui.Graphics release 6.0.100-preview.5.246
Microsoft.Windows.SDK.NET.Ref release 10.0.18362.15
# additional references used by the tooling
diff --git a/binding/HarfBuzzSharp/nuget/build/android/HarfBuzzSharp.targets b/binding/HarfBuzzSharp/nuget/build/android/HarfBuzzSharp.targets
index f41ecfc01..33ebb029d 100644
--- a/binding/HarfBuzzSharp/nuget/build/android/HarfBuzzSharp.targets
+++ b/binding/HarfBuzzSharp/nuget/build/android/HarfBuzzSharp.targets
@@ -1,23 +1,4 @@
-
-
-
- <_FixedResolvedFileToPublish
- Include="@(ResolvedFileToPublish)"
- Condition="
- '%(ResolvedFileToPublish.AssetType)' == 'native' and
- '%(ResolvedFileToPublish.Filename)' == 'libHarfBuzzSharp' and
- '%(ResolvedFileToPublish.Extension)' == '.so' and
- '%(ResolvedFileToPublish.NuGetPackageId)' != '' and
- '%(ResolvedFileToPublish.RuntimeIdentifier)' == '' and
- '%(ResolvedFileToPublish.PathInPackage)' != '' " />
-
- $([System.Text.RegularExpressions.Regex]::Match('%(_FixedResolvedFileToPublish.PathInPackage)', 'runtimes/([^/]+)/native/.*').Groups[1].Value)
-
- <_FixedResolvedFileToPublish Remove="@(_FixedResolvedFileToPublish)" />
-
-
-
\ No newline at end of file
diff --git a/binding/SkiaSharp/nuget/build/android/SkiaSharp.targets b/binding/SkiaSharp/nuget/build/android/SkiaSharp.targets
index f5ee39239..33ebb029d 100644
--- a/binding/SkiaSharp/nuget/build/android/SkiaSharp.targets
+++ b/binding/SkiaSharp/nuget/build/android/SkiaSharp.targets
@@ -1,23 +1,4 @@
-
-
-
- <_FixedResolvedFileToPublish
- Include="@(ResolvedFileToPublish)"
- Condition="
- '%(ResolvedFileToPublish.AssetType)' == 'native' and
- '%(ResolvedFileToPublish.Filename)' == 'libSkiaSharp' and
- '%(ResolvedFileToPublish.Extension)' == '.so' and
- '%(ResolvedFileToPublish.NuGetPackageId)' != '' and
- '%(ResolvedFileToPublish.RuntimeIdentifier)' == '' and
- '%(ResolvedFileToPublish.PathInPackage)' != '' " />
-
- $([System.Text.RegularExpressions.Regex]::Match('%(_FixedResolvedFileToPublish.PathInPackage)', 'runtimes/([^/]+)/native/.*').Groups[1].Value)
-
- <_FixedResolvedFileToPublish Remove="@(_FixedResolvedFileToPublish)" />
-
-
-
\ No newline at end of file
diff --git a/build.cake b/build.cake
index 75330d9c5..a924a7b71 100644
--- a/build.cake
+++ b/build.cake
@@ -58,7 +58,7 @@ var PREVIEW_NUGET_SUFFIX = string.IsNullOrEmpty (BUILD_NUMBER)
? $"{PREVIEW_LABEL}"
: $"{PREVIEW_LABEL}.{BUILD_NUMBER}";
-var PREVIEW_FEED_URL = "https://pkgs.dev.azure.com/xamarin/public/_packaging/SkiaSharp/nuget/v3/index.json";
+var PREVIEW_FEED_URL = Argument ("previewFeed", "https://pkgs.dev.azure.com/xamarin/public/_packaging/SkiaSharp/nuget/v3/index.json");
var TRACKED_NUGETS = new Dictionary {
{ "SkiaSharp", new Version (1, 57, 0) },
@@ -88,7 +88,6 @@ var TRACKED_NUGETS = new Dictionary {
};
var PREVIEW_ONLY_NUGETS = new List {
- "SkiaSharp.Views.WinUI",
"SkiaSharp.Views.Maui.Core",
"SkiaSharp.Views.Maui.Controls",
"SkiaSharp.Views.Maui.Controls.Compatibility",
@@ -138,7 +137,17 @@ Task ("libs")
platform = ".Linux";
}
}
- RunMSBuild ($"./source/SkiaSharpSource{platform}.sln");
+
+ var net6 = $"./source/SkiaSharpSource{platform}-net6.slnf";
+ var netfx = $"./source/SkiaSharpSource{platform}-netfx.slnf";
+ if (FileExists (net6) || FileExists (netfx)) {
+ if (FileExists (net6))
+ RunMSBuild (net6, properties: new Dictionary { { "BuildingForNet6", "true" } });
+ if (FileExists (netfx))
+ RunMSBuild (netfx, properties: new Dictionary { { "BuildingForNet6", "false" } });
+ } else {
+ RunMSBuild ($"./source/SkiaSharpSource{platform}.sln");
+ }
// assemble the mdoc docs
EnsureDirectoryExists ("./output/docs/mdoc/");
@@ -730,6 +739,7 @@ Task ("nuget-special")
}
if (GetFiles ("./output/nugets/*.nupkg").Count > 0) {
specials[$"_NuGets"] = $"nugets";
+ specials[$"_NuGetsPreview"] = $"nugets";
}
foreach (var pair in specials) {
diff --git a/cake/UpdateDocs.cake b/cake/UpdateDocs.cake
index dfa3a6570..c9ed28302 100644
--- a/cake/UpdateDocs.cake
+++ b/cake/UpdateDocs.cake
@@ -44,10 +44,14 @@ Task ("docs-download-output")
CleanDirectories ("./output");
await DownloadPackageAsync ("_nugets", OUTPUT_NUGETS_PATH);
+ await DownloadPackageAsync ("_nugetspreview", OUTPUT_NUGETS_PATH);
foreach (var id in TRACKED_NUGETS.Keys) {
var version = GetVersion (id);
- var name = $"{id}.{version}.nupkg";
+ var localNugetVersion = PREVIEW_ONLY_NUGETS.Contains(id)
+ ? $"{version}-{PREVIEW_NUGET_SUFFIX}"
+ : version;
+ var name = $"{id}.{localNugetVersion}.nupkg";
CleanDirectories ($"./output/{id}");
Unzip ($"{OUTPUT_NUGETS_PATH}/{name}", $"./output/{id}/nuget");
}
@@ -70,9 +74,10 @@ Task ("docs-api-diff")
comparer.SaveAssemblyApiInfo = true;
comparer.SaveAssemblyMarkdownDiff = true;
- // some libraries depend on SkiaSharp
+ // some parts of SkiaSharp depend on other parts
comparer.SearchPaths.Add($"./output/SkiaSharp/nuget/lib/netstandard2.0");
- comparer.SearchPaths.Add($"./output/SkiaSharp.Views.Maui.Core/nuget/lib/netstandard2.0");
+ foreach (var dir in GetDirectories($"./output/SkiaSharp.Views.Maui.Core/nuget/lib/*"))
+ comparer.SearchPaths.Add(dir.FullPath);
var filter = new NuGetVersions.Filter {
IncludePrerelease = NUGET_DIFF_PRERELEASE
diff --git a/cake/UtilsManaged.cake b/cake/UtilsManaged.cake
index 9dcd967dd..709333841 100644
--- a/cake/UtilsManaged.cake
+++ b/cake/UtilsManaged.cake
@@ -214,9 +214,12 @@ string[] GetDotNetPacksSearchPaths()
var latestSdk = (DirectoryPath)(last.Substring(start, last.Length - start - 1));
var dotnetRoot = latestSdk.Combine("..");
- var packs = GetDirectories(dotnetRoot.Combine("packs").FullPath + "/*.Ref");
+ foreach(var pack in GetDirectories(dotnetRoot.Combine("packs").FullPath + "/*.Ref.*")) {
+ var latestPath = GetDirectories(pack.FullPath + "/*").Last();
+ refs.AddRange(GetDirectories(latestPath.FullPath + "/ref/net*").Select(d => d.FullPath));
+ }
- foreach(var pack in packs) {
+ foreach(var pack in GetDirectories(dotnetRoot.Combine("packs").FullPath + "/*.Ref")) {
var latestPath = GetDirectories(pack.FullPath + "/*").Last();
refs.AddRange(GetDirectories(latestPath.FullPath + "/ref/net*").Select(d => d.FullPath));
}
@@ -253,22 +256,8 @@ async Task CreateNuGetDiffAsync()
await AddDep("Uno.UI", "UAP");
await AddDep("Microsoft.ProjectReunion.Foundation", "net5.0-windows");
await AddDep("Microsoft.ProjectReunion.WinUI", "net5.0-windows10.0.18362.0");
+ await AddDep("Microsoft.Maui.Graphics", "netstandard2.0");
await AddDep("Microsoft.Windows.SDK.NET.Ref", "");
- await AddDep("Microsoft.Maui.Core", "net6.0-android30.0");
- await AddDep("Microsoft.Maui.Core", "net6.0-ios13.6");
- await AddDep("Microsoft.Maui.Core", "net6.0-maccatalyst13.5");
- await AddDep("Microsoft.Maui.Core", "net6.0-windows10.0.18362");
- await AddDep("Microsoft.Maui.Core", "netstandard2.0");
- await AddDep("Microsoft.Maui.Controls", "net6.0-android30.0");
- await AddDep("Microsoft.Maui.Controls", "net6.0-ios13.6");
- await AddDep("Microsoft.Maui.Controls", "net6.0-maccatalyst13.5");
- await AddDep("Microsoft.Maui.Controls", "net6.0-windows10.0.18362");
- await AddDep("Microsoft.Maui.Controls", "netstandard2.0");
- await AddDep("Microsoft.Maui.Controls.Compatibility", "net6.0-android30.0");
- await AddDep("Microsoft.Maui.Controls.Compatibility", "net6.0-ios13.6");
- await AddDep("Microsoft.Maui.Controls.Compatibility", "net6.0-maccatalyst13.5");
- await AddDep("Microsoft.Maui.Controls.Compatibility", "net6.0-windows10.0.18362");
- await AddDep("Microsoft.Maui.Controls.Compatibility.Android.FormsViewGroup", "net6.0-android30.0");
await AddDep("OpenTK.GLControl", "NET40", "reference");
await AddDep("Xamarin.Forms", "Xamarin.iOS10", "reference");
diff --git a/cake/msbuild.cake b/cake/msbuild.cake
index 8e9948445..48684e3ba 100644
--- a/cake/msbuild.cake
+++ b/cake/msbuild.cake
@@ -5,6 +5,9 @@ DirectoryPath OUTPUT_SPECIAL_NUGETS_PATH = MakeAbsolute(ROOT_PATH.Combine("outpu
var NUGETS_SOURCES = new [] {
OUTPUT_NUGETS_PATH.FullPath,
"https://api.nuget.org/v3/index.json",
+ "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json",
+ "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json",
+ "https://pkgs.dev.azure.com/azure-public/vside/_packaging/xamarin-impl/nuget/v3/index.json",
"https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json"
};
diff --git a/changelogs/SkiaSharp.HarfBuzz/2.88.0/SkiaSharp.HarfBuzz.md b/changelogs/SkiaSharp.HarfBuzz/2.88.0/SkiaSharp.HarfBuzz.md
new file mode 100644
index 000000000..adcfa0e26
--- /dev/null
+++ b/changelogs/SkiaSharp.HarfBuzz/2.88.0/SkiaSharp.HarfBuzz.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.HarfBuzz.dll
+
+## SkiaSharp.HarfBuzz.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.Desktop.Common/2.88.0/SkiaSharp.Views.Desktop.Common.md b/changelogs/SkiaSharp.Views.Desktop.Common/2.88.0/SkiaSharp.Views.Desktop.Common.md
new file mode 100644
index 000000000..1aecff62f
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Desktop.Common/2.88.0/SkiaSharp.Views.Desktop.Common.md
@@ -0,0 +1,24 @@
+# API diff: SkiaSharp.Views.Desktop.Common.dll
+
+## SkiaSharp.Views.Desktop.Common.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
+### Namespace SkiaSharp.Views.Desktop
+
+#### Type Changed: SkiaSharp.Views.Desktop.Extensions
+
+Added methods:
+
+```csharp
+public static System.Drawing.Bitmap ToBitmap (this SkiaSharp.SKBitmap skiaBitmap);
+public static System.Drawing.Bitmap ToBitmap (this SkiaSharp.SKImage skiaImage);
+public static System.Drawing.Bitmap ToBitmap (this SkiaSharp.SKPixmap pixmap);
+public static System.Drawing.Bitmap ToBitmap (this SkiaSharp.SKPicture picture, SkiaSharp.SKSizeI dimensions);
+public static SkiaSharp.SKBitmap ToSKBitmap (this System.Drawing.Bitmap bitmap);
+public static SkiaSharp.SKImage ToSKImage (this System.Drawing.Bitmap bitmap);
+public static void ToSKPixmap (this System.Drawing.Bitmap bitmap, SkiaSharp.SKPixmap pixmap);
+```
+
+
+
diff --git a/changelogs/SkiaSharp.Views.Forms.GTK/2.88.0/SkiaSharp.Views.Forms.md b/changelogs/SkiaSharp.Views.Forms.GTK/2.88.0/SkiaSharp.Views.Forms.md
new file mode 100644
index 000000000..cb5b35641
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Forms.GTK/2.88.0/SkiaSharp.Views.Forms.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Forms.dll
+
+## SkiaSharp.Views.Forms.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.Forms.WPF/2.88.0/SkiaSharp.Views.Forms.md b/changelogs/SkiaSharp.Views.Forms.WPF/2.88.0/SkiaSharp.Views.Forms.md
new file mode 100644
index 000000000..cb5b35641
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Forms.WPF/2.88.0/SkiaSharp.Views.Forms.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Forms.dll
+
+## SkiaSharp.Views.Forms.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.Forms/2.88.0/SkiaSharp.Views.Forms.md b/changelogs/SkiaSharp.Views.Forms/2.88.0/SkiaSharp.Views.Forms.md
new file mode 100644
index 000000000..cb5b35641
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Forms/2.88.0/SkiaSharp.Views.Forms.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Forms.dll
+
+## SkiaSharp.Views.Forms.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.Gtk2/2.88.0/SkiaSharp.Views.Gtk.md b/changelogs/SkiaSharp.Views.Gtk2/2.88.0/SkiaSharp.Views.Gtk.md
new file mode 100644
index 000000000..229e5c34a
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Gtk2/2.88.0/SkiaSharp.Views.Gtk.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Gtk.dll
+
+## SkiaSharp.Views.Gtk.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.Gtk3/2.88.0/SkiaSharp.Views.Gtk3.md b/changelogs/SkiaSharp.Views.Gtk3/2.88.0/SkiaSharp.Views.Gtk3.md
new file mode 100644
index 000000000..073df293d
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Gtk3/2.88.0/SkiaSharp.Views.Gtk3.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Gtk3.dll
+
+## SkiaSharp.Views.Gtk3.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.Maui.Controls.Compatibility/2.88.0/SkiaSharp.Views.Maui.Controls.Compatibility.md b/changelogs/SkiaSharp.Views.Maui.Controls.Compatibility/2.88.0/SkiaSharp.Views.Maui.Controls.Compatibility.md
new file mode 100644
index 000000000..9d72da75d
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Maui.Controls.Compatibility/2.88.0/SkiaSharp.Views.Maui.Controls.Compatibility.md
@@ -0,0 +1,53 @@
+# API diff: SkiaSharp.Views.Maui.Controls.Compatibility.dll
+
+## SkiaSharp.Views.Maui.Controls.Compatibility.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 0.0.0.0
+
+### New Namespace SkiaSharp.Views.Maui.Controls.Compatibility
+
+#### New Type: SkiaSharp.Views.Maui.Controls.Compatibility.AppHostBuilderExtensions
+
+```csharp
+public static class AppHostBuilderExtensions {
+ // methods
+ public static Microsoft.Maui.Hosting.IAppHostBuilder UseSkiaSharpCompatibilityRenderers (this Microsoft.Maui.Hosting.IAppHostBuilder builder);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.Compatibility.SKCanvasViewRenderer
+
+```csharp
+public class SKCanvasViewRenderer : SkiaSharp.Views.Maui.Controls.Compatibility.SKCanvasViewRendererBase`2[SkiaSharp.Views.Maui.Controls.SKCanvasView,SkiaSharp.Views.Windows.SKXamlCanvas] {
+ // constructors
+ public SKCanvasViewRenderer ();
+ // methods
+ protected override SkiaSharp.Views.Windows.SKXamlCanvas CreateNativeControl ();
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.Compatibility.SKCanvasViewRendererBase`2
+
+```csharp
+public abstract class SKCanvasViewRendererBase`2 : Microsoft.Maui.Controls.Compatibility.Platform.UWP.ViewRenderer`2[TFormsView,TNativeView] {
+ // constructors
+ protected SKCanvasViewRendererBase`2 ();
+ // methods
+ protected virtual TNativeView CreateNativeControl ();
+ protected override void Dispose (bool disposing);
+ protected override void OnElementChanged (Microsoft.Maui.Controls.Platform.ElementChangedEventArgs e);
+ protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.Compatibility.SKImageSourceHandler
+
+```csharp
+public sealed class SKImageSourceHandler : Microsoft.Maui.Controls.IRegisterable {
+ // constructors
+ public SKImageSourceHandler ();
+ // methods
+ public virtual System.Threading.Tasks.Task LoadImageAsync (Microsoft.Maui.Controls.ImageSource imagesource, System.Threading.CancellationToken cancelationToken);
+}
+```
+
diff --git a/changelogs/SkiaSharp.Views.Maui.Controls/2.88.0/SkiaSharp.Views.Maui.Controls.md b/changelogs/SkiaSharp.Views.Maui.Controls/2.88.0/SkiaSharp.Views.Maui.Controls.md
new file mode 100644
index 000000000..27e61fa58
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Maui.Controls/2.88.0/SkiaSharp.Views.Maui.Controls.md
@@ -0,0 +1,177 @@
+# API diff: SkiaSharp.Views.Maui.Controls.dll
+
+## SkiaSharp.Views.Maui.Controls.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 0.0.0.0
+
+### New Namespace SkiaSharp.Views.Maui.Controls
+
+#### New Type: SkiaSharp.Views.Maui.Controls.AppHostBuilderExtensions
+
+```csharp
+public static class AppHostBuilderExtensions {
+ // methods
+ public static Microsoft.Maui.Hosting.IAppHostBuilder UseSkiaSharpHandlers (this Microsoft.Maui.Hosting.IAppHostBuilder builder);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.GetPropertyValueEventArgs`1
+
+```csharp
+public class GetPropertyValueEventArgs`1 : System.EventArgs {
+ // constructors
+ public GetPropertyValueEventArgs`1 ();
+ // properties
+ public T Value { get; set; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.ISKCanvasViewController
+
+```csharp
+public interface ISKCanvasViewController : Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.IViewController, Microsoft.Maui.Controls.IVisualElementController {
+ // events
+ public event System.EventHandler> GetCanvasSize;
+ public event System.EventHandler SurfaceInvalidated;
+ // methods
+ public virtual void OnPaintSurface (SkiaSharp.Views.Maui.SKPaintSurfaceEventArgs e);
+ public virtual void OnTouch (SkiaSharp.Views.Maui.SKTouchEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.ISKGLViewController
+
+```csharp
+public interface ISKGLViewController : Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.IViewController, Microsoft.Maui.Controls.IVisualElementController {
+ // events
+ public event System.EventHandler> GetCanvasSize;
+ public event System.EventHandler> GetGRContext;
+ public event System.EventHandler SurfaceInvalidated;
+ // methods
+ public virtual void OnPaintSurface (SkiaSharp.Views.Maui.SKPaintGLSurfaceEventArgs e);
+ public virtual void OnTouch (SkiaSharp.Views.Maui.SKTouchEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.SKBitmapImageSource
+
+```csharp
+public sealed class SKBitmapImageSource : Microsoft.Maui.Controls.ImageSource, Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.Internals.IDynamicResourceHandler, Microsoft.Maui.Controls.Internals.INameScope, Microsoft.Maui.IElement, Microsoft.Maui.IImageSource, SkiaSharp.Views.Maui.ISKBitmapImageSource, System.ComponentModel.INotifyPropertyChanged {
+ // constructors
+ public SKBitmapImageSource ();
+ // fields
+ public static Microsoft.Maui.Controls.BindableProperty BitmapProperty;
+ // properties
+ public override SkiaSharp.SKBitmap Bitmap { get; set; }
+ // methods
+ public override System.Threading.Tasks.Task Cancel ();
+ protected override void OnPropertyChanged (string propertyName);
+ public static SKBitmapImageSource op_Implicit (SkiaSharp.SKBitmap bitmap);
+ public static SkiaSharp.SKBitmap op_Implicit (SKBitmapImageSource source);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.SKCanvasView
+
+```csharp
+public class SKCanvasView : Microsoft.Maui.Controls.View, Microsoft.Maui.Controls.IAnimatable, Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.IGestureRecognizers, Microsoft.Maui.Controls.ITabStopElement, Microsoft.Maui.Controls.IViewController, Microsoft.Maui.Controls.IVisualElementController, Microsoft.Maui.Controls.Internals.IDynamicResourceHandler, Microsoft.Maui.Controls.Internals.IGestureController, Microsoft.Maui.Controls.Internals.INameScope, Microsoft.Maui.Controls.Internals.INavigationProxy, Microsoft.Maui.HotReload.IHotReloadableView, Microsoft.Maui.IElement, Microsoft.Maui.IFrameworkElement, Microsoft.Maui.IPropertyMapperView, Microsoft.Maui.IReplaceableView, Microsoft.Maui.ITransform, Microsoft.Maui.IView, ISKCanvasViewController, SkiaSharp.Views.Maui.ISKCanvasView, System.ComponentModel.INotifyPropertyChanged {
+ // constructors
+ public SKCanvasView ();
+ // fields
+ public static Microsoft.Maui.Controls.BindableProperty EnableTouchEventsProperty;
+ public static Microsoft.Maui.Controls.BindableProperty IgnorePixelScalingProperty;
+ // properties
+ public virtual SkiaSharp.SKSize CanvasSize { get; }
+ public override bool EnableTouchEvents { get; set; }
+ public override bool IgnorePixelScaling { get; set; }
+ // events
+ public event System.EventHandler PaintSurface;
+ public event System.EventHandler Touch;
+ // methods
+ public virtual void InvalidateSurface ();
+ protected override Microsoft.Maui.SizeRequest OnMeasure (double widthConstraint, double heightConstraint);
+ protected virtual void OnPaintSurface (SkiaSharp.Views.Maui.SKPaintSurfaceEventArgs e);
+ protected virtual void OnTouch (SkiaSharp.Views.Maui.SKTouchEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.SKGLView
+
+```csharp
+public class SKGLView : Microsoft.Maui.Controls.View, Microsoft.Maui.Controls.IAnimatable, Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.IGestureRecognizers, Microsoft.Maui.Controls.ITabStopElement, Microsoft.Maui.Controls.IViewController, Microsoft.Maui.Controls.IVisualElementController, Microsoft.Maui.Controls.Internals.IDynamicResourceHandler, Microsoft.Maui.Controls.Internals.IGestureController, Microsoft.Maui.Controls.Internals.INameScope, Microsoft.Maui.Controls.Internals.INavigationProxy, Microsoft.Maui.HotReload.IHotReloadableView, Microsoft.Maui.IElement, Microsoft.Maui.IFrameworkElement, Microsoft.Maui.IPropertyMapperView, Microsoft.Maui.IReplaceableView, Microsoft.Maui.ITransform, Microsoft.Maui.IView, ISKGLViewController, System.ComponentModel.INotifyPropertyChanged {
+ // constructors
+ public SKGLView ();
+ // fields
+ public static Microsoft.Maui.Controls.BindableProperty EnableTouchEventsProperty;
+ public static Microsoft.Maui.Controls.BindableProperty HasRenderLoopProperty;
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public bool EnableTouchEvents { get; set; }
+ public SkiaSharp.GRContext GRContext { get; }
+ public bool HasRenderLoop { get; set; }
+ // events
+ public event System.EventHandler PaintSurface;
+ public event System.EventHandler Touch;
+ // methods
+ public void InvalidateSurface ();
+ protected override Microsoft.Maui.SizeRequest OnMeasure (double widthConstraint, double heightConstraint);
+ protected virtual void OnPaintSurface (SkiaSharp.Views.Maui.SKPaintGLSurfaceEventArgs e);
+ protected virtual void OnTouch (SkiaSharp.Views.Maui.SKTouchEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.SKImageImageSource
+
+```csharp
+public sealed class SKImageImageSource : Microsoft.Maui.Controls.ImageSource, Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.Internals.IDynamicResourceHandler, Microsoft.Maui.Controls.Internals.INameScope, Microsoft.Maui.IElement, Microsoft.Maui.IImageSource, SkiaSharp.Views.Maui.ISKImageImageSource, System.ComponentModel.INotifyPropertyChanged {
+ // constructors
+ public SKImageImageSource ();
+ // fields
+ public static Microsoft.Maui.Controls.BindableProperty ImageProperty;
+ // properties
+ public override SkiaSharp.SKImage Image { get; set; }
+ // methods
+ public override System.Threading.Tasks.Task Cancel ();
+ protected override void OnPropertyChanged (string propertyName);
+ public static SKImageImageSource op_Implicit (SkiaSharp.SKImage image);
+ public static SkiaSharp.SKImage op_Implicit (SKImageImageSource source);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.SKPictureImageSource
+
+```csharp
+public sealed class SKPictureImageSource : Microsoft.Maui.Controls.ImageSource, Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.Internals.IDynamicResourceHandler, Microsoft.Maui.Controls.Internals.INameScope, Microsoft.Maui.IElement, Microsoft.Maui.IImageSource, SkiaSharp.Views.Maui.ISKPictureImageSource, System.ComponentModel.INotifyPropertyChanged {
+ // constructors
+ public SKPictureImageSource ();
+ // fields
+ public static Microsoft.Maui.Controls.BindableProperty DimensionsProperty;
+ public static Microsoft.Maui.Controls.BindableProperty PictureProperty;
+ // properties
+ public override SkiaSharp.SKSizeI Dimensions { get; set; }
+ public override SkiaSharp.SKPicture Picture { get; set; }
+ // methods
+ public override System.Threading.Tasks.Task Cancel ();
+ protected override void OnPropertyChanged (string propertyName);
+ public static SkiaSharp.SKPicture op_Explicit (SKPictureImageSource source);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Controls.SKPixmapImageSource
+
+```csharp
+public sealed class SKPixmapImageSource : Microsoft.Maui.Controls.ImageSource, Microsoft.Maui.Controls.IElementController, Microsoft.Maui.Controls.Internals.IDynamicResourceHandler, Microsoft.Maui.Controls.Internals.INameScope, Microsoft.Maui.IElement, Microsoft.Maui.IImageSource, SkiaSharp.Views.Maui.ISKPixmapImageSource, System.ComponentModel.INotifyPropertyChanged {
+ // constructors
+ public SKPixmapImageSource ();
+ // fields
+ public static Microsoft.Maui.Controls.BindableProperty PixmapProperty;
+ // properties
+ public override SkiaSharp.SKPixmap Pixmap { get; set; }
+ // methods
+ public override System.Threading.Tasks.Task Cancel ();
+ protected override void OnPropertyChanged (string propertyName);
+ public static SKPixmapImageSource op_Implicit (SkiaSharp.SKPixmap pixmap);
+ public static SkiaSharp.SKPixmap op_Implicit (SKPixmapImageSource source);
+}
+```
+
diff --git a/changelogs/SkiaSharp.Views.Maui.Core/2.88.0/SkiaSharp.Views.Maui.Core.md b/changelogs/SkiaSharp.Views.Maui.Core/2.88.0/SkiaSharp.Views.Maui.Core.md
new file mode 100644
index 000000000..44ce3d88d
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Maui.Core/2.88.0/SkiaSharp.Views.Maui.Core.md
@@ -0,0 +1,224 @@
+# API diff: SkiaSharp.Views.Maui.Core.dll
+
+## SkiaSharp.Views.Maui.Core.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 0.0.0.0
+
+### New Namespace SkiaSharp.Views.Maui
+
+#### New Type: SkiaSharp.Views.Maui.Extensions
+
+```csharp
+public static class Extensions {
+ // methods
+ public static Microsoft.Maui.Graphics.Color ToMauiColor (this SkiaSharp.SKColor color);
+ public static Microsoft.Maui.Graphics.Color ToMauiColor (this SkiaSharp.SKColorF color);
+ public static Microsoft.Maui.Graphics.Point ToMauiPoint (this SkiaSharp.SKPoint point);
+ public static Microsoft.Maui.Graphics.Point ToMauiPoint (this SkiaSharp.SKPointI point);
+ public static Microsoft.Maui.Graphics.PointF ToMauiPointF (this SkiaSharp.SKPoint point);
+ public static Microsoft.Maui.Graphics.PointF ToMauiPointF (this SkiaSharp.SKPointI point);
+ public static Microsoft.Maui.Graphics.Rectangle ToMauiRectangle (this SkiaSharp.SKRect rect);
+ public static Microsoft.Maui.Graphics.Rectangle ToMauiRectangle (this SkiaSharp.SKRectI rect);
+ public static Microsoft.Maui.Graphics.RectangleF ToMauiRectangleF (this SkiaSharp.SKRect rect);
+ public static Microsoft.Maui.Graphics.RectangleF ToMauiRectangleF (this SkiaSharp.SKRectI rect);
+ public static Microsoft.Maui.Graphics.Size ToMauiSize (this SkiaSharp.SKSize size);
+ public static Microsoft.Maui.Graphics.Size ToMauiSize (this SkiaSharp.SKSizeI size);
+ public static Microsoft.Maui.Graphics.SizeF ToMauiSizeF (this SkiaSharp.SKSize size);
+ public static Microsoft.Maui.Graphics.SizeF ToMauiSizeF (this SkiaSharp.SKSizeI size);
+ public static SkiaSharp.SKColor ToSKColor (this Microsoft.Maui.Graphics.Color color);
+ public static SkiaSharp.SKColorF ToSKColorF (this Microsoft.Maui.Graphics.Color color);
+ public static SkiaSharp.SKPoint ToSKPoint (this Microsoft.Maui.Graphics.Point point);
+ public static SkiaSharp.SKPoint ToSKPoint (this Microsoft.Maui.Graphics.PointF point);
+ public static SkiaSharp.SKRect ToSKRect (this Microsoft.Maui.Graphics.Rectangle rect);
+ public static SkiaSharp.SKRect ToSKRect (this Microsoft.Maui.Graphics.RectangleF rect);
+ public static SkiaSharp.SKSize ToSKSize (this Microsoft.Maui.Graphics.Size size);
+ public static SkiaSharp.SKSize ToSKSize (this Microsoft.Maui.Graphics.SizeF size);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.ISKBitmapImageSource
+
+```csharp
+public interface ISKBitmapImageSource : Microsoft.Maui.IImageSource {
+ // properties
+ public virtual SkiaSharp.SKBitmap Bitmap { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.ISKCanvasView
+
+```csharp
+public interface ISKCanvasView : Microsoft.Maui.IElement, Microsoft.Maui.IFrameworkElement, Microsoft.Maui.ITransform, Microsoft.Maui.IView {
+ // properties
+ public virtual SkiaSharp.SKSize CanvasSize { get; }
+ public virtual bool EnableTouchEvents { get; }
+ public virtual bool IgnorePixelScaling { get; }
+ // methods
+ public virtual void InvalidateSurface ();
+ public virtual void OnCanvasSizeChanged (SkiaSharp.SKSizeI size);
+ public virtual void OnPaintSurface (SKPaintSurfaceEventArgs e);
+ public virtual void OnTouch (SKTouchEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.ISKImageImageSource
+
+```csharp
+public interface ISKImageImageSource : Microsoft.Maui.IImageSource {
+ // properties
+ public virtual SkiaSharp.SKImage Image { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.ISKPictureImageSource
+
+```csharp
+public interface ISKPictureImageSource : Microsoft.Maui.IImageSource {
+ // properties
+ public virtual SkiaSharp.SKSizeI Dimensions { get; }
+ public virtual SkiaSharp.SKPicture Picture { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.ISKPixmapImageSource
+
+```csharp
+public interface ISKPixmapImageSource : Microsoft.Maui.IImageSource {
+ // properties
+ public virtual SkiaSharp.SKPixmap Pixmap { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.SKMouseButton
+
+```csharp
+[Serializable]
+public enum SKMouseButton {
+ Left = 1,
+ Middle = 2,
+ Right = 3,
+ Unknown = 0,
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.SKPaintGLSurfaceEventArgs
+
+```csharp
+public class SKPaintGLSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget);
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType);
+ // properties
+ public SkiaSharp.GRBackendRenderTarget BackendRenderTarget { get; }
+ public SkiaSharp.SKColorType ColorType { get; }
+ public SkiaSharp.GRSurfaceOrigin Origin { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.SKPaintSurfaceEventArgs
+
+```csharp
+public class SKPaintSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.SKImageInfo info);
+ // properties
+ public SkiaSharp.SKImageInfo Info { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.SKTouchAction
+
+```csharp
+[Serializable]
+public enum SKTouchAction {
+ Cancelled = 4,
+ Entered = 0,
+ Exited = 5,
+ Moved = 2,
+ Pressed = 1,
+ Released = 3,
+ WheelChanged = 6,
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.SKTouchDeviceType
+
+```csharp
+[Serializable]
+public enum SKTouchDeviceType {
+ Mouse = 1,
+ Pen = 2,
+ Touch = 0,
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.SKTouchEventArgs
+
+```csharp
+public class SKTouchEventArgs : System.EventArgs {
+ // constructors
+ public SKTouchEventArgs (long id, SKTouchAction type, SkiaSharp.SKPoint location, bool inContact);
+ public SKTouchEventArgs (long id, SKTouchAction type, SKMouseButton mouseButton, SKTouchDeviceType deviceType, SkiaSharp.SKPoint location, bool inContact);
+ public SKTouchEventArgs (long id, SKTouchAction type, SKMouseButton mouseButton, SKTouchDeviceType deviceType, SkiaSharp.SKPoint location, bool inContact, int wheelDelta);
+ public SKTouchEventArgs (long id, SKTouchAction type, SKMouseButton mouseButton, SKTouchDeviceType deviceType, SkiaSharp.SKPoint location, bool inContact, int wheelDelta, float pressure);
+ // properties
+ public SKTouchAction ActionType { get; }
+ public SKTouchDeviceType DeviceType { get; }
+ public bool Handled { get; set; }
+ public long Id { get; }
+ public bool InContact { get; }
+ public SkiaSharp.SKPoint Location { get; }
+ public SKMouseButton MouseButton { get; }
+ public float Pressure { get; }
+ public int WheelDelta { get; }
+ // methods
+ public override string ToString ();
+}
+```
+
+### New Namespace SkiaSharp.Views.Maui.Handlers
+
+#### New Type: SkiaSharp.Views.Maui.Handlers.SKCanvasViewHandler
+
+```csharp
+public class SKCanvasViewHandler : Microsoft.Maui.Handlers.ViewHandler`2[SkiaSharp.Views.Maui.ISKCanvasView,SkiaSharp.Views.Windows.SKXamlCanvas], Microsoft.Maui.IElementHandler, Microsoft.Maui.INativeViewHandler, Microsoft.Maui.IViewHandler {
+ // constructors
+ public SKCanvasViewHandler ();
+ public SKCanvasViewHandler (Microsoft.Maui.PropertyMapper mapper);
+ // fields
+ public static Microsoft.Maui.PropertyMapper SKCanvasViewMapper;
+ // methods
+ protected override void ConnectHandler (SkiaSharp.Views.Windows.SKXamlCanvas nativeView);
+ protected override SkiaSharp.Views.Windows.SKXamlCanvas CreateNativeView ();
+ protected override void DisconnectHandler (SkiaSharp.Views.Windows.SKXamlCanvas nativeView);
+ public static void MapEnableTouchEvents (SKCanvasViewHandler handler, SkiaSharp.Views.Maui.ISKCanvasView canvasView);
+ public static void MapIgnorePixelScaling (SKCanvasViewHandler handler, SkiaSharp.Views.Maui.ISKCanvasView canvasView);
+ public static void OnInvalidateSurface (SKCanvasViewHandler handler, SkiaSharp.Views.Maui.ISKCanvasView canvasView);
+}
+```
+
+#### New Type: SkiaSharp.Views.Maui.Handlers.SKImageSourceService
+
+```csharp
+public class SKImageSourceService : Microsoft.Maui.ImageSourceService, Microsoft.Maui.IImageSourceService, Microsoft.Maui.IImageSourceService, Microsoft.Maui.IImageSourceService, Microsoft.Maui.IImageSourceService, Microsoft.Maui.IImageSourceService {
+ // constructors
+ public SKImageSourceService ();
+ public SKImageSourceService (Microsoft.Extensions.Logging.ILogger logger);
+ // methods
+ public override System.Threading.Tasks.Task> GetImageSourceAsync (Microsoft.Maui.IImageSource imageSource, float scale, System.Threading.CancellationToken cancellationToken);
+}
+```
+
+### New Namespace SkiaSharp.Views.Maui.Platform
+
+#### New Type: SkiaSharp.Views.Maui.Platform.SKCanvasViewExtensions
+
+```csharp
+public static class SKCanvasViewExtensions {
+ // methods
+ public static void UpdateIgnorePixelScaling (this SkiaSharp.Views.Windows.SKXamlCanvas nativeView, SkiaSharp.Views.Maui.ISKCanvasView canvasView);
+}
+```
+
diff --git a/changelogs/SkiaSharp.Views.Uno/2.88.0/SkiaSharp.Views.UWP.breaking.md b/changelogs/SkiaSharp.Views.Uno/2.88.0/SkiaSharp.Views.UWP.breaking.md
new file mode 100644
index 000000000..4d53bf40b
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Uno/2.88.0/SkiaSharp.Views.UWP.breaking.md
@@ -0,0 +1,19 @@
+# API diff: SkiaSharp.Views.UWP.dll
+
+## SkiaSharp.Views.UWP.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
+### Namespace SkiaSharp.Views.UWP
+
+#### Type Changed: SkiaSharp.Views.UWP.SKXamlCanvas
+
+Modified base type:
+
+```diff
+-Windows.UI.Xaml.FrameworkElement
++Windows.UI.Xaml.Controls.Canvas
+```
+
+
+
diff --git a/changelogs/SkiaSharp.Views.Uno/2.88.0/SkiaSharp.Views.UWP.md b/changelogs/SkiaSharp.Views.Uno/2.88.0/SkiaSharp.Views.UWP.md
new file mode 100644
index 000000000..5d3ab5036
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.Uno/2.88.0/SkiaSharp.Views.UWP.md
@@ -0,0 +1,45 @@
+# API diff: SkiaSharp.Views.UWP.dll
+
+## SkiaSharp.Views.UWP.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
+### Namespace SkiaSharp.Views.UWP
+
+#### Type Changed: SkiaSharp.Views.UWP.GlobalStaticResources
+
+Obsoleted methods:
+
+```diff
+ [Obsolete ()]
+ public static object FindResource (string name);
+```
+
+Added methods:
+
+```csharp
+public static void RegisterDefaultStyles ();
+public static void RegisterResourceDictionariesBySource ();
+```
+
+
+#### Type Changed: SkiaSharp.Views.UWP.SKSwapChainPanel
+
+Added property:
+
+```csharp
+public static bool RaiseOnUnsupported { get; set; }
+```
+
+
+#### Type Changed: SkiaSharp.Views.UWP.SKXamlCanvas
+
+Modified base type:
+
+```diff
+-Windows.UI.Xaml.FrameworkElement
++Windows.UI.Xaml.Controls.Canvas
+```
+
+
+
diff --git a/changelogs/SkiaSharp.Views.WPF/2.88.0/SkiaSharp.Views.WPF.md b/changelogs/SkiaSharp.Views.WPF/2.88.0/SkiaSharp.Views.WPF.md
new file mode 100644
index 000000000..45c29223d
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.WPF/2.88.0/SkiaSharp.Views.WPF.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.WPF.dll
+
+## SkiaSharp.Views.WPF.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views.WinUI/2.88.0/SkiaSharp.Views.Windows.md b/changelogs/SkiaSharp.Views.WinUI/2.88.0/SkiaSharp.Views.Windows.md
new file mode 100644
index 000000000..9aff18384
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.WinUI/2.88.0/SkiaSharp.Views.Windows.md
@@ -0,0 +1,103 @@
+# API diff: SkiaSharp.Views.Windows.dll
+
+## SkiaSharp.Views.Windows.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 0.0.0.0
+
+### New Namespace SkiaSharp.Views.Windows
+
+#### New Type: SkiaSharp.Views.Windows.Extensions
+
+```csharp
+public static class Extensions {
+ // methods
+ public static System.Drawing.PointF ToDrawingPoint (this SkiaSharp.SKPoint point);
+ public static System.Drawing.Point ToDrawingPoint (this SkiaSharp.SKPointI point);
+ public static System.Drawing.RectangleF ToDrawingRect (this SkiaSharp.SKRect rect);
+ public static System.Drawing.Rectangle ToDrawingRect (this SkiaSharp.SKRectI rect);
+ public static System.Drawing.SizeF ToDrawingSize (this SkiaSharp.SKSize size);
+ public static System.Drawing.Size ToDrawingSize (this SkiaSharp.SKSizeI size);
+ public static SkiaSharp.SKPointI ToSKPoint (this System.Drawing.Point point);
+ public static SkiaSharp.SKPoint ToSKPoint (this System.Drawing.PointF point);
+ public static SkiaSharp.SKRectI ToSKRect (this System.Drawing.Rectangle rect);
+ public static SkiaSharp.SKRect ToSKRect (this System.Drawing.RectangleF rect);
+ public static SkiaSharp.SKSizeI ToSKSize (this System.Drawing.Size size);
+ public static SkiaSharp.SKSize ToSKSize (this System.Drawing.SizeF size);
+}
+```
+
+#### New Type: SkiaSharp.Views.Windows.SKPaintGLSurfaceEventArgs
+
+```csharp
+public class SKPaintGLSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget);
+
+ [Obsolete]
+public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTargetDesc renderTarget);
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType);
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType, SkiaSharp.GRGlFramebufferInfo glInfo);
+ // properties
+ public SkiaSharp.GRBackendRenderTarget BackendRenderTarget { get; }
+ public SkiaSharp.SKColorType ColorType { get; }
+ public SkiaSharp.GRSurfaceOrigin Origin { get; }
+
+ [Obsolete]
+public SkiaSharp.GRBackendRenderTargetDesc RenderTarget { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Windows.SKPaintSurfaceEventArgs
+
+```csharp
+public class SKPaintSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.SKImageInfo info);
+ // properties
+ public SkiaSharp.SKImageInfo Info { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Windows.SKXamlCanvas
+
+```csharp
+public class SKXamlCanvas : Microsoft.UI.Xaml.Controls.Canvas, Microsoft.UI.Composition.IAnimationObject, Microsoft.UI.Composition.IVisualElement, Microsoft.UI.Composition.IVisualElement2, System.IEquatable, System.IEquatable, System.IEquatable, System.IEquatable, System.IEquatable, System.Runtime.InteropServices.ICustomQueryInterface, System.Runtime.InteropServices.IDynamicInterfaceCastable, WinRT.IWinRTObject {
+ // constructors
+ public SKXamlCanvas ();
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public double Dpi { get; }
+ public bool IgnorePixelScaling { get; set; }
+ // events
+ public event System.EventHandler PaintSurface;
+ // methods
+ public void Invalidate ();
+ protected virtual void OnPaintSurface (SKPaintSurfaceEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Windows.WindowsExtensions
+
+```csharp
+public static class WindowsExtensions {
+ // methods
+ public static Windows.UI.Color ToColor (this SkiaSharp.SKColor color);
+ public static Windows.Foundation.Point ToPoint (this SkiaSharp.SKPoint point);
+ public static Windows.Foundation.Rect ToRect (this SkiaSharp.SKRect rect);
+ public static SkiaSharp.SKBitmap ToSKBitmap (this Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap bitmap);
+ public static SkiaSharp.SKColor ToSKColor (this Windows.UI.Color color);
+ public static SkiaSharp.SKImage ToSKImage (this Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap bitmap);
+ public static bool ToSKPixmap (this Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap bitmap, SkiaSharp.SKPixmap pixmap);
+ public static SkiaSharp.SKPoint ToSKPoint (this Windows.Foundation.Point point);
+ public static SkiaSharp.SKRect ToSKRect (this Windows.Foundation.Rect rect);
+ public static SkiaSharp.SKSize ToSKSize (this Windows.Foundation.Size size);
+ public static Windows.Foundation.Size ToSize (this SkiaSharp.SKSize size);
+ public static Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap ToWriteableBitmap (this SkiaSharp.SKBitmap skiaBitmap);
+ public static Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap ToWriteableBitmap (this SkiaSharp.SKImage skiaImage);
+ public static Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap ToWriteableBitmap (this SkiaSharp.SKPixmap pixmap);
+ public static Microsoft.UI.Xaml.Media.Imaging.WriteableBitmap ToWriteableBitmap (this SkiaSharp.SKPicture picture, SkiaSharp.SKSizeI dimensions);
+}
+```
+
diff --git a/changelogs/SkiaSharp.Views.WindowsForms/2.88.0/SkiaSharp.Views.WindowsForms.md b/changelogs/SkiaSharp.Views.WindowsForms/2.88.0/SkiaSharp.Views.WindowsForms.md
new file mode 100644
index 000000000..d8b59adba
--- /dev/null
+++ b/changelogs/SkiaSharp.Views.WindowsForms/2.88.0/SkiaSharp.Views.WindowsForms.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.WindowsForms.dll
+
+## SkiaSharp.Views.WindowsForms.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Android.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Android.md
new file mode 100644
index 000000000..9d68d7374
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Android.md
@@ -0,0 +1,320 @@
+# API diff: SkiaSharp.Views.Android.dll
+
+## SkiaSharp.Views.Android.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 0.0.0.0
+
+### New Namespace SkiaSharp.Views.Android
+
+#### New Type: SkiaSharp.Views.Android.AndroidExtensions
+
+```csharp
+public static class AndroidExtensions {
+ // methods
+ public static Android.Graphics.Bitmap ToBitmap (this SkiaSharp.SKBitmap skiaBitmap);
+ public static Android.Graphics.Bitmap ToBitmap (this SkiaSharp.SKImage skiaImage);
+ public static Android.Graphics.Bitmap ToBitmap (this SkiaSharp.SKPixmap skiaPixmap);
+ public static Android.Graphics.Bitmap ToBitmap (this SkiaSharp.SKPicture skiaPicture, SkiaSharp.SKSizeI dimensions);
+ public static Android.Graphics.Color ToColor (this SkiaSharp.SKColor color);
+ public static Android.Graphics.Matrix ToMatrix (this SkiaSharp.SKMatrix matrix);
+ public static Android.Graphics.PointF ToPoint (this SkiaSharp.SKPoint point);
+ public static Android.Graphics.Point ToPoint (this SkiaSharp.SKPointI point);
+ public static Android.Graphics.RectF ToRect (this SkiaSharp.SKRect rect);
+ public static Android.Graphics.Rect ToRect (this SkiaSharp.SKRectI rect);
+ public static SkiaSharp.SKBitmap ToSKBitmap (this Android.Graphics.Bitmap bitmap);
+ public static SkiaSharp.SKColor ToSKColor (this Android.Graphics.Color color);
+ public static SkiaSharp.SKImage ToSKImage (this Android.Graphics.Bitmap bitmap);
+ public static SkiaSharp.SKMatrix ToSKMatrix (this Android.Graphics.Matrix matrix);
+ public static void ToSKPixmap (this Android.Graphics.Bitmap bitmap, SkiaSharp.SKPixmap pixmap);
+ public static SkiaSharp.SKPointI ToSKPoint (this Android.Graphics.Point point);
+ public static SkiaSharp.SKPoint ToSKPoint (this Android.Graphics.PointF point);
+ public static SkiaSharp.SKRectI ToSKRect (this Android.Graphics.Rect rect);
+ public static SkiaSharp.SKRect ToSKRect (this Android.Graphics.RectF rect);
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.Extensions
+
+```csharp
+public static class Extensions {
+ // methods
+ public static System.Drawing.Color ToDrawingColor (this SkiaSharp.SKColor color);
+ public static System.Drawing.PointF ToDrawingPoint (this SkiaSharp.SKPoint point);
+ public static System.Drawing.Point ToDrawingPoint (this SkiaSharp.SKPointI point);
+ public static System.Drawing.RectangleF ToDrawingRect (this SkiaSharp.SKRect rect);
+ public static System.Drawing.Rectangle ToDrawingRect (this SkiaSharp.SKRectI rect);
+ public static System.Drawing.SizeF ToDrawingSize (this SkiaSharp.SKSize size);
+ public static System.Drawing.Size ToDrawingSize (this SkiaSharp.SKSizeI size);
+ public static SkiaSharp.SKColor ToSKColor (this System.Drawing.Color color);
+ public static SkiaSharp.SKPointI ToSKPoint (this System.Drawing.Point point);
+ public static SkiaSharp.SKPoint ToSKPoint (this System.Drawing.PointF point);
+ public static SkiaSharp.SKRectI ToSKRect (this System.Drawing.Rectangle rect);
+ public static SkiaSharp.SKRect ToSKRect (this System.Drawing.RectangleF rect);
+ public static SkiaSharp.SKSizeI ToSKSize (this System.Drawing.Size size);
+ public static SkiaSharp.SKSize ToSKSize (this System.Drawing.SizeF size);
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.GLTextureView
+
+```csharp
+public class GLTextureView : Android.Views.TextureView, Android.Graphics.Drawables.Drawable.ICallback, Android.Runtime.IJavaObject, Android.Views.Accessibility.IAccessibilityEventSource, Android.Views.KeyEvent.ICallback, Android.Views.TextureView.ISurfaceTextureListener, Android.Views.View.IOnLayoutChangeListener, Java.Interop.IJavaPeerable, System.IDisposable {
+ // constructors
+ public GLTextureView (Android.Content.Context context);
+ public GLTextureView (Android.Content.Context context, Android.Util.IAttributeSet attrs);
+ // properties
+ public Android.Opengl.DebugFlags DebugFlags { get; set; }
+ public bool PreserveEGLContextOnPause { get; set; }
+ public Android.Opengl.Rendermode RenderMode { get; set; }
+ // methods
+ protected override void Dispose (bool disposing);
+ protected override void OnAttachedToWindow ();
+ protected override void OnDetachedFromWindow ();
+ public virtual void OnLayoutChange (Android.Views.View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom);
+ public void OnPause ();
+ public void OnResume ();
+ public virtual void OnSurfaceTextureAvailable (Android.Graphics.SurfaceTexture surface, int width, int height);
+ public virtual bool OnSurfaceTextureDestroyed (Android.Graphics.SurfaceTexture surface);
+ public virtual void OnSurfaceTextureSizeChanged (Android.Graphics.SurfaceTexture surface, int w, int h);
+ public virtual void OnSurfaceTextureUpdated (Android.Graphics.SurfaceTexture surface);
+ public void QueueEvent (Java.Lang.IRunnable r);
+ public void QueueEvent (System.Action r);
+ public void RequestRender ();
+ public void SetEGLConfigChooser (GLTextureView.IEGLConfigChooser configChooser);
+ public void SetEGLConfigChooser (bool needDepth);
+ public void SetEGLConfigChooser (int redSize, int greenSize, int blueSize, int alphaSize, int depthSize, int stencilSize);
+ public void SetEGLContextClientVersion (int version);
+ public void SetEGLContextFactory (GLTextureView.IEGLContextFactory factory);
+ public void SetEGLWindowSurfaceFactory (GLTextureView.IEGLWindowSurfaceFactory factory);
+ public void SetGLWrapper (GLTextureView.IGLWrapper glWrapper);
+ public void SetRenderer (GLTextureView.IRenderer renderer);
+
+ // inner types
+ public interface IEGLConfigChooser {
+ // methods
+ public virtual Javax.Microedition.Khronos.Egl.EGLConfig ChooseConfig (Javax.Microedition.Khronos.Egl.IEGL10 egl, Javax.Microedition.Khronos.Egl.EGLDisplay display);
+ }
+ public interface IEGLContextFactory {
+ // methods
+ public virtual Javax.Microedition.Khronos.Egl.EGLContext CreateContext (Javax.Microedition.Khronos.Egl.IEGL10 egl, Javax.Microedition.Khronos.Egl.EGLDisplay display, Javax.Microedition.Khronos.Egl.EGLConfig eglConfig);
+ public virtual void DestroyContext (Javax.Microedition.Khronos.Egl.IEGL10 egl, Javax.Microedition.Khronos.Egl.EGLDisplay display, Javax.Microedition.Khronos.Egl.EGLContext context);
+ }
+ public interface IEGLWindowSurfaceFactory {
+ // methods
+ public virtual Javax.Microedition.Khronos.Egl.EGLSurface CreateWindowSurface (Javax.Microedition.Khronos.Egl.IEGL10 egl, Javax.Microedition.Khronos.Egl.EGLDisplay display, Javax.Microedition.Khronos.Egl.EGLConfig config, Java.Lang.Object nativeWindow);
+ public virtual void DestroySurface (Javax.Microedition.Khronos.Egl.IEGL10 egl, Javax.Microedition.Khronos.Egl.EGLDisplay display, Javax.Microedition.Khronos.Egl.EGLSurface surface);
+ }
+ public interface IGLWrapper {
+ // methods
+ public virtual Javax.Microedition.Khronos.Opengles.IGL Wrap (Javax.Microedition.Khronos.Opengles.IGL gl);
+ }
+ public interface IRenderer {
+ // methods
+ public virtual void OnDrawFrame (Javax.Microedition.Khronos.Opengles.IGL10 gl);
+ public virtual void OnSurfaceChanged (Javax.Microedition.Khronos.Opengles.IGL10 gl, int width, int height);
+ public virtual void OnSurfaceCreated (Javax.Microedition.Khronos.Opengles.IGL10 gl, Javax.Microedition.Khronos.Egl.EGLConfig config);
+ public virtual void OnSurfaceDestroyed ();
+ }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.Resource
+
+```csharp
+public class Resource {
+ // constructors
+ public Resource ();
+
+ // inner types
+ public class Attribute {
+ }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKCanvasView
+
+```csharp
+public class SKCanvasView : Android.Views.View, Android.Graphics.Drawables.Drawable.ICallback, Android.Runtime.IJavaObject, Android.Views.Accessibility.IAccessibilityEventSource, Android.Views.KeyEvent.ICallback, Java.Interop.IJavaPeerable, System.IDisposable {
+ // constructors
+ public SKCanvasView (Android.Content.Context context);
+ public SKCanvasView (Android.Content.Context context, Android.Util.IAttributeSet attrs);
+ protected SKCanvasView (IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer);
+ public SKCanvasView (Android.Content.Context context, Android.Util.IAttributeSet attrs, int defStyleAttr);
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public bool IgnorePixelScaling { get; set; }
+ // events
+ public event System.EventHandler PaintSurface;
+ // methods
+ protected override void Dispose (bool disposing);
+ protected override void OnAttachedToWindow ();
+ protected override void OnDetachedFromWindow ();
+ protected override void OnDraw (Android.Graphics.Canvas canvas);
+
+ [Obsolete]
+protected virtual void OnDraw (SkiaSharp.SKSurface surface, SkiaSharp.SKImageInfo info);
+ protected virtual void OnPaintSurface (SKPaintSurfaceEventArgs e);
+ protected override void OnSizeChanged (int w, int h, int oldw, int oldh);
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKGLSurfaceView
+
+```csharp
+public class SKGLSurfaceView : Android.Opengl.GLSurfaceView, Android.Graphics.Drawables.Drawable.ICallback, Android.Runtime.IJavaObject, Android.Views.Accessibility.IAccessibilityEventSource, Android.Views.ISurfaceHolderCallback, Android.Views.ISurfaceHolderCallback2, Android.Views.KeyEvent.ICallback, Java.Interop.IJavaPeerable, System.IDisposable {
+ // constructors
+ public SKGLSurfaceView (Android.Content.Context context);
+ public SKGLSurfaceView (Android.Content.Context context, Android.Util.IAttributeSet attrs);
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public SkiaSharp.GRContext GRContext { get; }
+ // events
+ public event System.EventHandler PaintSurface;
+ // methods
+ protected virtual void OnPaintSurface (SKPaintGLSurfaceEventArgs e);
+
+ [Obsolete]
+public virtual void SetRenderer (SKGLSurfaceView.ISKRenderer renderer);
+
+ // inner types
+ public interface ISKRenderer {
+ // methods
+ public virtual void OnDrawFrame (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTargetDesc renderTarget);
+ }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKGLSurfaceViewRenderer
+
+```csharp
+public abstract class SKGLSurfaceViewRenderer : Java.Lang.Object, Android.Opengl.GLSurfaceView.IRenderer, Android.Runtime.IJavaObject, Java.Interop.IJavaPeerable, System.IDisposable {
+ // constructors
+ protected SKGLSurfaceViewRenderer ();
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public SkiaSharp.GRContext GRContext { get; }
+ // methods
+ protected override void Dispose (bool disposing);
+ public virtual void OnDrawFrame (Javax.Microedition.Khronos.Opengles.IGL10 gl);
+
+ [Obsolete]
+protected virtual void OnDrawFrame (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTargetDesc renderTarget);
+ protected virtual void OnPaintSurface (SKPaintGLSurfaceEventArgs e);
+ public virtual void OnSurfaceChanged (Javax.Microedition.Khronos.Opengles.IGL10 gl, int width, int height);
+ public virtual void OnSurfaceCreated (Javax.Microedition.Khronos.Opengles.IGL10 gl, Javax.Microedition.Khronos.Egl.EGLConfig config);
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKGLTextureView
+
+```csharp
+public class SKGLTextureView : SkiaSharp.Views.Android.GLTextureView, Android.Graphics.Drawables.Drawable.ICallback, Android.Runtime.IJavaObject, Android.Views.Accessibility.IAccessibilityEventSource, Android.Views.KeyEvent.ICallback, Android.Views.TextureView.ISurfaceTextureListener, Android.Views.View.IOnLayoutChangeListener, Java.Interop.IJavaPeerable, System.IDisposable {
+ // constructors
+ public SKGLTextureView (Android.Content.Context context);
+ public SKGLTextureView (Android.Content.Context context, Android.Util.IAttributeSet attrs);
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public SkiaSharp.GRContext GRContext { get; }
+ // events
+ public event System.EventHandler PaintSurface;
+ // methods
+ protected virtual void OnPaintSurface (SKPaintGLSurfaceEventArgs e);
+
+ [Obsolete]
+public virtual void SetRenderer (SKGLTextureView.ISKRenderer renderer);
+
+ // inner types
+ public interface ISKRenderer {
+ // methods
+ public virtual void OnDrawFrame (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTargetDesc renderTarget);
+ }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKGLTextureViewRenderer
+
+```csharp
+public abstract class SKGLTextureViewRenderer : Java.Lang.Object, Android.Runtime.IJavaObject, Java.Interop.IJavaPeerable, GLTextureView.IRenderer, System.IDisposable {
+ // constructors
+ protected SKGLTextureViewRenderer ();
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public SkiaSharp.GRContext GRContext { get; }
+ // methods
+ protected override void Dispose (bool disposing);
+ public virtual void OnDrawFrame (Javax.Microedition.Khronos.Opengles.IGL10 gl);
+
+ [Obsolete]
+protected virtual void OnDrawFrame (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTargetDesc renderTarget);
+ protected virtual void OnPaintSurface (SKPaintGLSurfaceEventArgs e);
+ public virtual void OnSurfaceChanged (Javax.Microedition.Khronos.Opengles.IGL10 gl, int width, int height);
+ public virtual void OnSurfaceCreated (Javax.Microedition.Khronos.Opengles.IGL10 gl, Javax.Microedition.Khronos.Egl.EGLConfig config);
+ public virtual void OnSurfaceDestroyed ();
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKLockedSurface
+
+```csharp
+public class SKLockedSurface {
+ // properties
+ public SkiaSharp.SKCanvas Canvas { get; }
+ public SkiaSharp.SKImageInfo ImageInfo { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKPaintGLSurfaceEventArgs
+
+```csharp
+public class SKPaintGLSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget);
+
+ [Obsolete]
+public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTargetDesc renderTarget);
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType);
+ public SKPaintGLSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType, SkiaSharp.GRGlFramebufferInfo glInfo);
+ // properties
+ public SkiaSharp.GRBackendRenderTarget BackendRenderTarget { get; }
+ public SkiaSharp.SKColorType ColorType { get; }
+ public SkiaSharp.GRSurfaceOrigin Origin { get; }
+
+ [Obsolete]
+public SkiaSharp.GRBackendRenderTargetDesc RenderTarget { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKPaintSurfaceEventArgs
+
+```csharp
+public class SKPaintSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.SKImageInfo info);
+ // properties
+ public SkiaSharp.SKImageInfo Info { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+#### New Type: SkiaSharp.Views.Android.SKSurfaceView
+
+```csharp
+public class SKSurfaceView : Android.Views.SurfaceView, Android.Graphics.Drawables.Drawable.ICallback, Android.Runtime.IJavaObject, Android.Views.Accessibility.IAccessibilityEventSource, Android.Views.ISurfaceHolderCallback, Android.Views.KeyEvent.ICallback, Java.Interop.IJavaPeerable, System.IDisposable {
+ // constructors
+ public SKSurfaceView (Android.Content.Context context);
+ public SKSurfaceView (Android.Content.Context context, Android.Util.IAttributeSet attrs);
+ public SKSurfaceView (Android.Content.Context context, Android.Util.IAttributeSet attrs, int defStyle);
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ // methods
+ protected override void Dispose (bool disposing);
+ public SKLockedSurface LockSurface ();
+ public virtual void SurfaceChanged (Android.Views.ISurfaceHolder holder, Android.Graphics.Format format, int width, int height);
+ public virtual void SurfaceCreated (Android.Views.ISurfaceHolder holder);
+ public virtual void SurfaceDestroyed (Android.Views.ISurfaceHolder holder);
+ public void UnlockSurfaceAndPost (SKLockedSurface surface);
+}
+```
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Desktop.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Desktop.md
new file mode 100644
index 000000000..a892c46ff
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Desktop.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Desktop.dll
+
+## SkiaSharp.Views.Desktop.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Mac.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Mac.md
new file mode 100644
index 000000000..05d953964
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Mac.md
@@ -0,0 +1,44 @@
+# API diff: SkiaSharp.Views.Mac.dll
+
+## SkiaSharp.Views.Mac.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
+### Namespace SkiaSharp.Views.Mac
+
+#### New Type: SkiaSharp.Views.Mac.SKMetalView
+
+```csharp
+public class SKMetalView : MetalKit.MTKView, AppKit.INSAccessibility, AppKit.INSAccessibilityElementProtocol, AppKit.INSAppearanceCustomization, AppKit.INSDraggingDestination, AppKit.INSTouchBarProvider, AppKit.INSUserInterfaceItemIdentification, CoreAnimation.ICALayerDelegate, Foundation.INSCoding, Foundation.INSObjectProtocol, MetalKit.IMTKViewDelegate, ObjCRuntime.INativeObject, System.ComponentModel.IComponent, System.IDisposable, System.IEquatable {
+ // constructors
+ public SKMetalView ();
+ public SKMetalView (CoreGraphics.CGRect frame);
+ public SKMetalView (IntPtr p);
+ public SKMetalView (CoreGraphics.CGRect frame, Metal.IMTLDevice device);
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public SkiaSharp.GRContext GRContext { get; }
+ // events
+ public event System.EventHandler PaintSurface;
+ // methods
+ public override void AwakeFromNib ();
+ protected virtual void OnPaintSurface (SKPaintMetalSurfaceEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.Mac.SKPaintMetalSurfaceEventArgs
+
+```csharp
+public class SKPaintMetalSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintMetalSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget);
+ public SKPaintMetalSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType);
+ // properties
+ public SkiaSharp.GRBackendRenderTarget BackendRenderTarget { get; }
+ public SkiaSharp.SKColorType ColorType { get; }
+ public SkiaSharp.GRSurfaceOrigin Origin { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Tizen.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Tizen.md
new file mode 100644
index 000000000..b9598a5ab
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.Tizen.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.Tizen.dll
+
+## SkiaSharp.Views.Tizen.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.UWP.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.UWP.md
new file mode 100644
index 000000000..d1c066124
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.UWP.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.UWP.dll
+
+## SkiaSharp.Views.UWP.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.iOS.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.iOS.md
new file mode 100644
index 000000000..3d9ec9fb4
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.iOS.md
@@ -0,0 +1,44 @@
+# API diff: SkiaSharp.Views.iOS.dll
+
+## SkiaSharp.Views.iOS.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
+### Namespace SkiaSharp.Views.iOS
+
+#### New Type: SkiaSharp.Views.iOS.SKMetalView
+
+```csharp
+public class SKMetalView : MetalKit.MTKView, CoreAnimation.ICALayerDelegate, Foundation.INSCoding, Foundation.INSObjectProtocol, MetalKit.IMTKViewDelegate, ObjCRuntime.INativeObject, System.Collections.IEnumerable, System.ComponentModel.IComponent, System.IDisposable, System.IEquatable, UIKit.IUIAccessibilityIdentification, UIKit.IUIAppearance, UIKit.IUIAppearanceContainer, UIKit.IUICoordinateSpace, UIKit.IUIDynamicItem, UIKit.IUIFocusEnvironment, UIKit.IUIFocusItem, UIKit.IUIFocusItemContainer, UIKit.IUILargeContentViewerItem, UIKit.IUIPasteConfigurationSupporting, UIKit.IUITraitEnvironment, UIKit.IUIUserActivityRestoring {
+ // constructors
+ public SKMetalView ();
+ public SKMetalView (CoreGraphics.CGRect frame);
+ public SKMetalView (IntPtr p);
+ public SKMetalView (CoreGraphics.CGRect frame, Metal.IMTLDevice device);
+ // properties
+ public SkiaSharp.SKSize CanvasSize { get; }
+ public SkiaSharp.GRContext GRContext { get; }
+ // events
+ public event System.EventHandler PaintSurface;
+ // methods
+ public override void AwakeFromNib ();
+ protected virtual void OnPaintSurface (SKPaintMetalSurfaceEventArgs e);
+}
+```
+
+#### New Type: SkiaSharp.Views.iOS.SKPaintMetalSurfaceEventArgs
+
+```csharp
+public class SKPaintMetalSurfaceEventArgs : System.EventArgs {
+ // constructors
+ public SKPaintMetalSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget);
+ public SKPaintMetalSurfaceEventArgs (SkiaSharp.SKSurface surface, SkiaSharp.GRBackendRenderTarget renderTarget, SkiaSharp.GRSurfaceOrigin origin, SkiaSharp.SKColorType colorType);
+ // properties
+ public SkiaSharp.GRBackendRenderTarget BackendRenderTarget { get; }
+ public SkiaSharp.SKColorType ColorType { get; }
+ public SkiaSharp.GRSurfaceOrigin Origin { get; }
+ public SkiaSharp.SKSurface Surface { get; }
+}
+```
+
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.tvOS.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.tvOS.md
new file mode 100644
index 000000000..ddefe87c5
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.tvOS.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.tvOS.dll
+
+## SkiaSharp.Views.tvOS.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.watchOS.md b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.watchOS.md
new file mode 100644
index 000000000..ab97091ba
--- /dev/null
+++ b/changelogs/SkiaSharp.Views/2.88.0/SkiaSharp.Views.watchOS.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Views.watchOS.dll
+
+## SkiaSharp.Views.watchOS.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp.Vulkan.SharpVk/2.88.0/SkiaSharp.Vulkan.SharpVk.md b/changelogs/SkiaSharp.Vulkan.SharpVk/2.88.0/SkiaSharp.Vulkan.SharpVk.md
new file mode 100644
index 000000000..cb46da37c
--- /dev/null
+++ b/changelogs/SkiaSharp.Vulkan.SharpVk/2.88.0/SkiaSharp.Vulkan.SharpVk.md
@@ -0,0 +1,6 @@
+# API diff: SkiaSharp.Vulkan.SharpVk.dll
+
+## SkiaSharp.Vulkan.SharpVk.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
diff --git a/changelogs/SkiaSharp/2.88.0/SkiaSharp.md b/changelogs/SkiaSharp/2.88.0/SkiaSharp.md
new file mode 100644
index 000000000..5306749b8
--- /dev/null
+++ b/changelogs/SkiaSharp/2.88.0/SkiaSharp.md
@@ -0,0 +1,263 @@
+# API diff: SkiaSharp.dll
+
+## SkiaSharp.dll
+
+> Assembly Version Changed: 2.88.0.0 vs 2.80.0.0
+
+### Namespace SkiaSharp
+
+#### Type Changed: SkiaSharp.GRBackend
+
+Added value:
+
+```csharp
+Direct3D = 4,
+```
+
+
+#### Type Changed: SkiaSharp.GRContext
+
+Added property:
+
+```csharp
+public bool IsAbandoned { get; }
+```
+
+Added methods:
+
+```csharp
+public static GRContext CreateGl (GRContextOptions options);
+public static GRContext CreateGl (GRGlInterface backendContext, GRContextOptions options);
+public static GRContext CreateVulkan (GRVkBackendContext backendContext, GRContextOptions options);
+protected override void DisposeNative ();
+```
+
+
+#### Type Changed: SkiaSharp.GRGlInterface
+
+Added method:
+
+```csharp
+public static GRGlInterface CreateAngle ();
+```
+
+
+#### Type Changed: SkiaSharp.GRVkImageInfo
+
+Added properties:
+
+```csharp
+public uint ImageUsageFlags { get; set; }
+public uint SampleCount { get; set; }
+public uint SharingMode { get; set; }
+```
+
+
+#### Type Changed: SkiaSharp.SKBitmap
+
+Obsoleted properties:
+
+```diff
+ [Obsolete ()]
+ public bool IsVolatile { get; set; }
+```
+
+
+#### Type Changed: SkiaSharp.SKColorSpaceXyz
+
+Obsoleted properties:
+
+```diff
+ [Obsolete ()]
+ public static SKColorSpaceXyz Dcip3 { get; }
+```
+
+Added property:
+
+```csharp
+public static SKColorSpaceXyz DisplayP3 { get; }
+```
+
+
+#### Type Changed: SkiaSharp.SKColorType
+
+Added values:
+
+```csharp
+Bgr101010x = 20,
+Bgra1010102 = 19,
+```
+
+
+#### Type Changed: SkiaSharp.SKData
+
+Added property:
+
+```csharp
+public System.Span Span { get; }
+```
+
+Added methods:
+
+```csharp
+public static SKData Create (long size);
+public static SKData CreateCopy (IntPtr bytes, int length);
+public static SKData CreateCopy (IntPtr bytes, long length);
+```
+
+
+#### Type Changed: SkiaSharp.SKImage
+
+Added property:
+
+```csharp
+public SKImageInfo Info { get; }
+```
+
+Added method:
+
+```csharp
+public SKImage ApplyImageFilter (GRContext context, SKImageFilter filter, SKRectI subset, SKRectI clipBounds, out SKRectI outSubset, out SKPointI outOffset);
+```
+
+
+#### Type Changed: SkiaSharp.SKPicture
+
+Added methods:
+
+```csharp
+public static SKPicture Deserialize (SKData data);
+public static SKPicture Deserialize (SKStream stream);
+public static SKPicture Deserialize (System.IO.Stream stream);
+public static SKPicture Deserialize (System.ReadOnlySpan data);
+public static SKPicture Deserialize (IntPtr data, int length);
+public SKData Serialize ();
+public void Serialize (SKWStream stream);
+public void Serialize (System.IO.Stream stream);
+```
+
+
+#### Type Changed: SkiaSharp.SKSurface
+
+Obsoleted methods:
+
+```diff
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, SKColorType colorType);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, GRSurfaceOrigin origin, SKColorType colorType);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, SKColorType colorType, SKSurfaceProperties props);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, GRSurfaceOrigin origin, SKColorType colorType, SKSurfaceProperties props);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, GRSurfaceOrigin origin, int sampleCount, SKColorType colorType);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, GRSurfaceOrigin origin, int sampleCount, SKColorType colorType, SKColorSpace colorspace);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, GRSurfaceOrigin origin, int sampleCount, SKColorType colorType, SKSurfaceProperties props);
+ [Obsolete ()]
+ public static SKSurface CreateAsRenderTarget (GRContext context, GRBackendTexture texture, GRSurfaceOrigin origin, int sampleCount, SKColorType colorType, SKColorSpace colorspace, SKSurfaceProperties props);
+```
+
+Added method:
+
+```csharp
+public void Flush ();
+```
+
+
+#### New Type: SkiaSharp.GRContextOptions
+
+```csharp
+public class GRContextOptions {
+ // constructors
+ public GRContextOptions ();
+ // properties
+ public bool AllowPathMaskCaching { get; set; }
+ public bool AvoidStencilBuffers { get; set; }
+ public int BufferMapThreshold { get; set; }
+ public bool DoManualMipmapping { get; set; }
+ public int GlyphCacheTextureMaximumBytes { get; set; }
+ public int RuntimeProgramCacheSize { get; set; }
+}
+```
+
+#### New Type: SkiaSharp.SKRuntimeEffect
+
+```csharp
+public class SKRuntimeEffect : SkiaSharp.SKObject, System.IDisposable {
+ // properties
+ public System.Collections.Generic.IReadOnlyList Children { get; }
+ public int UniformSize { get; }
+ public System.Collections.Generic.IReadOnlyList Uniforms { get; }
+ // methods
+ public static SKRuntimeEffect Create (string sksl, out string errors);
+ public SKColorFilter ToColorFilter ();
+ public SKColorFilter ToColorFilter (SKRuntimeEffectUniforms uniforms);
+ public SKColorFilter ToColorFilter (SKRuntimeEffectUniforms uniforms, SKRuntimeEffectChildren children);
+ public SKShader ToShader (bool isOpaque);
+ public SKShader ToShader (bool isOpaque, SKRuntimeEffectUniforms uniforms);
+ public SKShader ToShader (bool isOpaque, SKRuntimeEffectUniforms uniforms, SKRuntimeEffectChildren children);
+ public SKShader ToShader (bool isOpaque, SKRuntimeEffectUniforms uniforms, SKRuntimeEffectChildren children, SKMatrix localMatrix);
+}
+```
+
+#### New Type: SkiaSharp.SKRuntimeEffectChildren
+
+```csharp
+public class SKRuntimeEffectChildren : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable {
+ // constructors
+ public SKRuntimeEffectChildren (SKRuntimeEffect effect);
+ // properties
+ public int Count { get; }
+ public SKShader Item { set; }
+ public System.Collections.Generic.IReadOnlyList Names { get; }
+ // methods
+ public void Add (string name, SKShader value);
+ public bool Contains (string name);
+ public virtual System.Collections.Generic.IEnumerator GetEnumerator ();
+ public void Reset ();
+ public SKShader[] ToArray ();
+}
+```
+
+#### New Type: SkiaSharp.SKRuntimeEffectUniform
+
+```csharp
+public struct SKRuntimeEffectUniform {
+ // properties
+ public static SKRuntimeEffectUniform Empty { get; }
+ public bool IsEmpty { get; }
+ public int Size { get; }
+ // methods
+ public void WriteTo (System.Span data);
+ public static SKRuntimeEffectUniform op_Implicit (SKMatrix value);
+ public static SKRuntimeEffectUniform op_Implicit (System.ReadOnlySpan value);
+ public static SKRuntimeEffectUniform op_Implicit (float value);
+ public static SKRuntimeEffectUniform op_Implicit (float[] value);
+ public static SKRuntimeEffectUniform op_Implicit (float[][] value);
+ public static SKRuntimeEffectUniform op_Implicit (System.Span value);
+}
+```
+
+#### New Type: SkiaSharp.SKRuntimeEffectUniforms
+
+```csharp
+public class SKRuntimeEffectUniforms : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable {
+ // constructors
+ public SKRuntimeEffectUniforms (SKRuntimeEffect effect);
+ // properties
+ public int Count { get; }
+ public SKRuntimeEffectUniform Item { set; }
+ public System.Collections.Generic.IReadOnlyList Names { get; }
+ // methods
+ public void Add (string name, SKRuntimeEffectUniform value);
+ public bool Contains (string name);
+ public virtual System.Collections.Generic.IEnumerator GetEnumerator ();
+ public void Reset ();
+ public SKData ToData ();
+}
+```
+
+
diff --git a/docs b/docs
index 4eaaabdfb..c74cd3c52 160000
--- a/docs
+++ b/docs
@@ -1 +1 @@
-Subproject commit 4eaaabdfba22d042856d59c8ce4f3eabe87a972c
+Subproject commit c74cd3c5254d65997d92bf9d89732c6da5400f6e
diff --git a/nuget/SkiaSharp.Views.Maui.Controls.Compatibility.nuspec b/nuget/SkiaSharp.Views.Maui.Controls.Compatibility.nuspec
index a2b03eb9f..a37892e24 100644
--- a/nuget/SkiaSharp.Views.Maui.Controls.Compatibility.nuspec
+++ b/nuget/SkiaSharp.Views.Maui.Controls.Compatibility.nuspec
@@ -29,19 +29,15 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
-
-
-
-
diff --git a/nuget/SkiaSharp.Views.Maui.Controls.nuspec b/nuget/SkiaSharp.Views.Maui.Controls.nuspec
index 116446bd8..3ccd5e029 100644
--- a/nuget/SkiaSharp.Views.Maui.Controls.nuspec
+++ b/nuget/SkiaSharp.Views.Maui.Controls.nuspec
@@ -27,29 +27,23 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
© Microsoft Corporation. All rights reserved.
-
+
-
-
-
-
@@ -57,8 +51,8 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
-
-
+
+
diff --git a/nuget/SkiaSharp.Views.Maui.Core.nuspec b/nuget/SkiaSharp.Views.Maui.Core.nuspec
index 662e33e0a..b1bc92ce7 100644
--- a/nuget/SkiaSharp.Views.Maui.Core.nuspec
+++ b/nuget/SkiaSharp.Views.Maui.Core.nuspec
@@ -27,33 +27,27 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
© Microsoft Corporation. All rights reserved.
-
+
-
-
-
-
@@ -61,8 +55,8 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release
-
-
+
+
diff --git a/nuget/_NuGetsPreview.nuspec b/nuget/_NuGetsPreview.nuspec
new file mode 100644
index 000000000..0eef1a164
--- /dev/null
+++ b/nuget/_NuGetsPreview.nuspec
@@ -0,0 +1,18 @@
+
+
+
+
+ _NuGetsPreview
+ Build NuGets
+ 1.0.0
+ All the preview NuGet packages from the build.
+ All the preview NuGet packages from the build.
+ Microsoft
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/App.xaml b/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/App.xaml
new file mode 100644
index 000000000..dd574369e
--- /dev/null
+++ b/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/App.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/App.xaml.cs b/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/App.xaml.cs
new file mode 100644
index 000000000..37324f7c8
--- /dev/null
+++ b/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/App.xaml.cs
@@ -0,0 +1,22 @@
+using Microsoft.Maui;
+using Microsoft.UI.Xaml;
+
+namespace SkiaSharpSample.WinUI
+{
+ public partial class App : MauiWinUIApplication
+ {
+ public App()
+ {
+ InitializeComponent();
+ }
+
+ protected override IStartup OnCreateStartup() => new Startup();
+
+ protected override void OnLaunched(LaunchActivatedEventArgs args)
+ {
+ base.OnLaunched(args);
+
+ Microsoft.Maui.Essentials.Platform.OnLaunched(args);
+ }
+ }
+}
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/Package.appxmanifest b/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/Package.appxmanifest
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/Package.appxmanifest
rename to samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/Package.appxmanifest
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/app.manifest b/samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/app.manifest
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/app.manifest
rename to samples/Basic/Maui/SkiaSharpSample.WinUI/Platforms/Windows/app.manifest
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Properties/launchSettings.json b/samples/Basic/Maui/SkiaSharpSample.WinUI/Properties/launchSettings.json
index fe30f65c7..161bf8d58 100644
--- a/samples/Basic/Maui/SkiaSharpSample.WinUI/Properties/launchSettings.json
+++ b/samples/Basic/Maui/SkiaSharpSample.WinUI/Properties/launchSettings.json
@@ -1,7 +1,8 @@
{
"profiles": {
"SkiaSharpSample.WinUI": {
- "commandName": "AppContainer"
+ "commandName": "MsixPackage",
+ "nativeDebugging": true
}
}
}
\ No newline at end of file
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/SkiaSharpSample.WinUI.csproj b/samples/Basic/Maui/SkiaSharpSample.WinUI/SkiaSharpSample.WinUI.csproj
index 0daf310d9..8e8192374 100644
--- a/samples/Basic/Maui/SkiaSharpSample.WinUI/SkiaSharpSample.WinUI.csproj
+++ b/samples/Basic/Maui/SkiaSharpSample.WinUI/SkiaSharpSample.WinUI.csproj
@@ -6,6 +6,8 @@
10.0.17763.0
true
SkiaSharpSample
+ true
+ win-x64
true
@@ -18,14 +20,10 @@
-
+
-
-
-
-
@@ -33,11 +31,9 @@
-
-
-
-
-
+
+
+
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/App.xaml b/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/App.xaml
deleted file mode 100644
index 91041cb69..000000000
--- a/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/App.xaml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/App.xaml.cs b/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/App.xaml.cs
deleted file mode 100644
index 5e7d9fee8..000000000
--- a/samples/Basic/Maui/SkiaSharpSample.WinUI/Windows/App.xaml.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Microsoft.Maui;
-using Microsoft.UI.Xaml;
-using Windows.ApplicationModel;
-
-// To learn more about WinUI, the WinUI project structure,
-// and more about our project templates, see: http://aka.ms/winui-project-info.
-
-namespace SkiaSharpSample.WinUI
-{
- ///
- /// Provides application-specific behavior to supplement the default Application class.
- ///
- public partial class App : MiddleApp
- {
- ///
- /// Initializes the singleton application object. This is the first line of authored code
- /// executed, and as such is the logical equivalent of main() or WinMain().
- ///
- public App()
- {
- this.InitializeComponent();
- }
-
- protected override void OnLaunched(LaunchActivatedEventArgs args)
- {
- base.OnLaunched(args);
-
- Microsoft.Maui.Essentials.Platform.OnLaunched(args);
- }
- }
- public class MiddleApp : MauiWinUIApplication
- {
- }
-}
diff --git a/samples/Basic/Maui/SkiaSharpSample/App.xaml b/samples/Basic/Maui/SkiaSharpSample/App.xaml
index 9d3ea833f..eed75fc4e 100644
--- a/samples/Basic/Maui/SkiaSharpSample/App.xaml
+++ b/samples/Basic/Maui/SkiaSharpSample/App.xaml
@@ -1,7 +1,9 @@
+ x:Class="SkiaSharpSample.App"
+ windows:Application.ImageDirectory="Assets">
diff --git a/samples/Basic/Maui/SkiaSharpSample/App.xaml.cs b/samples/Basic/Maui/SkiaSharpSample/App.xaml.cs
index 790f01181..cc735baa0 100644
--- a/samples/Basic/Maui/SkiaSharpSample/App.xaml.cs
+++ b/samples/Basic/Maui/SkiaSharpSample/App.xaml.cs
@@ -1,8 +1,4 @@
-using Microsoft.Maui;
-using Microsoft.Maui.Controls;
-using Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific;
-using Application = Microsoft.Maui.Controls.Application;
-using WindowsConfiguration = Microsoft.Maui.Controls.PlatformConfiguration.Windows;
+using Microsoft.Maui.Controls;
namespace SkiaSharpSample
{
@@ -11,13 +7,8 @@ namespace SkiaSharpSample
public App()
{
InitializeComponent();
- }
- protected override IWindow CreateWindow(IActivationState activationState)
- {
- On().SetImageDirectory("Assets");
-
- return new Window(new MainPage());
+ MainPage = new MainPage();
}
}
}
diff --git a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Entitlements.plist b/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Entitlements.plist
deleted file mode 100644
index 36a870670..000000000
--- a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Entitlements.plist
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Program.cs b/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Program.cs
deleted file mode 100644
index 6175f1b23..000000000
--- a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Program.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using UIKit;
-
-namespace SkiaSharpSample
-{
- public class Program
- {
- // This is the main entry point of the application.
- static void Main(string[] args)
- {
- // if you want to use a different Application Delegate class from "AppDelegate"
- // you can specify it here.
- UIApplication.Main(args, null, "AppDelegate");
- }
- }
-}
\ No newline at end of file
diff --git a/samples/Basic/Maui/SkiaSharpSample/MainPage.xaml.cs b/samples/Basic/Maui/SkiaSharpSample/MainPage.xaml.cs
index 8d7e0bf4c..01dabda17 100644
--- a/samples/Basic/Maui/SkiaSharpSample/MainPage.xaml.cs
+++ b/samples/Basic/Maui/SkiaSharpSample/MainPage.xaml.cs
@@ -1,7 +1,6 @@
using Microsoft.Maui.Controls;
using SkiaSharp;
using SkiaSharp.Views.Maui;
-using SkiaSharp.Views.Maui.Controls;
namespace SkiaSharpSample
{
diff --git a/samples/Basic/Maui/SkiaSharpSample/Android/AndroidManifest.xml b/samples/Basic/Maui/SkiaSharpSample/Platforms/Android/AndroidManifest.xml
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample/Android/AndroidManifest.xml
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/Android/AndroidManifest.xml
diff --git a/samples/Basic/Maui/SkiaSharpSample/Android/MainActivity.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/Android/MainActivity.cs
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample/Android/MainActivity.cs
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/Android/MainActivity.cs
diff --git a/samples/Basic/Maui/SkiaSharpSample/Android/MainApplication.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/Android/MainApplication.cs
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample/Android/MainApplication.cs
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/Android/MainApplication.cs
diff --git a/samples/Basic/Maui/SkiaSharpSample/iOS/AppDelegate.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/AppDelegate.cs
similarity index 80%
rename from samples/Basic/Maui/SkiaSharpSample/iOS/AppDelegate.cs
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/AppDelegate.cs
index 8a96b63f1..1842d10f6 100644
--- a/samples/Basic/Maui/SkiaSharpSample/iOS/AppDelegate.cs
+++ b/samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/AppDelegate.cs
@@ -3,8 +3,8 @@ using Microsoft.Maui;
namespace SkiaSharpSample
{
- [Register("AppDelegate")]
+ [Register(nameof(AppDelegate))]
public class AppDelegate : MauiUIApplicationDelegate
{
}
-}
\ No newline at end of file
+}
diff --git a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Info.plist b/samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/Info.plist
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample/MacCatalyst/Info.plist
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/Info.plist
diff --git a/samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/Program.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/Program.cs
new file mode 100644
index 000000000..db38dfd6d
--- /dev/null
+++ b/samples/Basic/Maui/SkiaSharpSample/Platforms/MacCatalyst/Program.cs
@@ -0,0 +1,12 @@
+using UIKit;
+
+namespace SkiaSharpSample
+{
+ public class Program
+ {
+ static void Main(string[] args)
+ {
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+ }
+}
diff --git a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/AppDelegate.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/AppDelegate.cs
similarity index 80%
rename from samples/Basic/Maui/SkiaSharpSample/MacCatalyst/AppDelegate.cs
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/AppDelegate.cs
index 8a96b63f1..1842d10f6 100644
--- a/samples/Basic/Maui/SkiaSharpSample/MacCatalyst/AppDelegate.cs
+++ b/samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/AppDelegate.cs
@@ -3,8 +3,8 @@ using Microsoft.Maui;
namespace SkiaSharpSample
{
- [Register("AppDelegate")]
+ [Register(nameof(AppDelegate))]
public class AppDelegate : MauiUIApplicationDelegate
{
}
-}
\ No newline at end of file
+}
diff --git a/samples/Basic/Maui/SkiaSharpSample/iOS/Info.plist b/samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/Info.plist
similarity index 100%
rename from samples/Basic/Maui/SkiaSharpSample/iOS/Info.plist
rename to samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/Info.plist
diff --git a/samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/Program.cs b/samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/Program.cs
new file mode 100644
index 000000000..db38dfd6d
--- /dev/null
+++ b/samples/Basic/Maui/SkiaSharpSample/Platforms/iOS/Program.cs
@@ -0,0 +1,12 @@
+using UIKit;
+
+namespace SkiaSharpSample
+{
+ public class Program
+ {
+ static void Main(string[] args)
+ {
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+ }
+}
diff --git a/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj b/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj
index bc28ea081..5e6e1ccd6 100644
--- a/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj
+++ b/samples/Basic/Maui/SkiaSharpSample/SkiaSharpSample.csproj
@@ -9,6 +9,7 @@
com.companyname.SkiaSharpSample
1.0
1
+ true
@@ -16,10 +17,6 @@
-
-
-
-
diff --git a/samples/Basic/Maui/SkiaSharpSample/iOS/Entitlements.plist b/samples/Basic/Maui/SkiaSharpSample/iOS/Entitlements.plist
deleted file mode 100644
index 36a870670..000000000
--- a/samples/Basic/Maui/SkiaSharpSample/iOS/Entitlements.plist
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/samples/Basic/Maui/SkiaSharpSample/iOS/Program.cs b/samples/Basic/Maui/SkiaSharpSample/iOS/Program.cs
deleted file mode 100644
index 6175f1b23..000000000
--- a/samples/Basic/Maui/SkiaSharpSample/iOS/Program.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using UIKit;
-
-namespace SkiaSharpSample
-{
- public class Program
- {
- // This is the main entry point of the application.
- static void Main(string[] args)
- {
- // if you want to use a different Application Delegate class from "AppDelegate"
- // you can specify it here.
- UIApplication.Main(args, null, "AppDelegate");
- }
- }
-}
\ No newline at end of file
diff --git a/samples/Directory.Build.props b/samples/Directory.Build.props
index 1789d43dc..de297e327 100644
--- a/samples/Directory.Build.props
+++ b/samples/Directory.Build.props
@@ -5,4 +5,8 @@
true
+
+ false
+
+
\ No newline at end of file
diff --git a/scripts/azure-pipelines.yml b/scripts/azure-pipelines.yml
index 2306c611d..71f7e8740 100644
--- a/scripts/azure-pipelines.yml
+++ b/scripts/azure-pipelines.yml
@@ -25,9 +25,8 @@ variables:
XCODE_VERSION: 12.4
DOTNET_VERSION_PREVIOUS: 3.1.410
DOTNET_VERSION: 5.0.301
- DOTNET_VERSION_PREVIEW: 6.0.100-preview.5.21302.13
+ DOTNET_VERSION_PREVIEW: 6.0.100-preview.6.21355.2
VS_VERSION_PREVIEW: 16/pre
- MAUI_CHECK_MANIFEST: https://raw.githubusercontent.com/Redth/dotnet-maui-check/165c910079623e73ecb04c50bade01da1f78f6c9/manifests/maui-preview.manifest.json
CONFIGURATION: 'Release'
VM_IMAGE_WINDOWS: windows-2019
VM_IMAGE_WINDOWS_PREVIOUS: vs2017-win2016
diff --git a/scripts/azure-templates-bootstrapper.yml b/scripts/azure-templates-bootstrapper.yml
index 19b197c1d..3807f9fc5 100644
--- a/scripts/azure-templates-bootstrapper.yml
+++ b/scripts/azure-templates-bootstrapper.yml
@@ -123,7 +123,7 @@ jobs:
- pwsh: .\scripts\install-vs.ps1 -Version $env:VS_VERSION_PREVIEW
displayName: Install Visual Studio Preview
- ${{ if not(endsWith(parameters.name, '_linux')) }}:
- - pwsh: .\scripts\install-maui.ps1 -Manifest $env:MAUI_CHECK_MANIFEST -InstallDir "$env:AGENT_TOOLSDIRECTORY/dotnet"
+ - pwsh: .\scripts\install-maui.ps1 -InstallDir "$env:AGENT_TOOLSDIRECTORY/dotnet"
displayName: Install the .NET Core workloads
# display dotnet info
- pwsh: dotnet --info
diff --git a/scripts/install-maui.ps1 b/scripts/install-maui.ps1
index c8b9c26ee..3e7523c8a 100644
--- a/scripts/install-maui.ps1
+++ b/scripts/install-maui.ps1
@@ -12,11 +12,12 @@ Write-Host "Installing maui-check..."
Write-Host "Installing Maui..."
& maui-check `
- --manifest "$Manifest" `
+ --preview `
--verbose --ci --fix --non-interactive `
--skip androidsdk `
--skip xcode `
--skip vswin `
- --skip vsmac
+ --skip vsmac `
+ --skip edgewebview2
exit $LASTEXITCODE
diff --git a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs
index 7f603cb76..fee4b023a 100644
--- a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs
+++ b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKCanvasViewRendererBase.cs
@@ -108,11 +108,7 @@ namespace SkiaSharp.Views.Forms
}
#endif
-#if __MAUI__ && __ANDROID__
- protected override void OnElementChanged(Microsoft.Maui.Controls.Compatibility.Platform.Android.ElementChangedEventArgs e)
-#else
protected override void OnElementChanged(ElementChangedEventArgs e)
-#endif
{
if (e.OldElement != null)
{
diff --git a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs
index 398ff519b..2a08f6fd1 100644
--- a/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs
+++ b/source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Native.Shared/SKGLViewRendererBase.cs
@@ -102,11 +102,7 @@ namespace SkiaSharp.Views.Forms
}
#endif
-#if __MAUI__ && __ANDROID__
- protected override void OnElementChanged(Microsoft.Maui.Controls.Compatibility.Platform.Android.ElementChangedEventArgs e)
-#else
protected override void OnElementChanged(ElementChangedEventArgs e)
-#endif
{
if (e.OldElement != null)
{
diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/SkiaSharp.Views.Maui.Controls.Compatibility.csproj b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/SkiaSharp.Views.Maui.Controls.Compatibility.csproj
index a2ec7fc75..bd1ea0769 100644
--- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/SkiaSharp.Views.Maui.Controls.Compatibility.csproj
+++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls.Compatibility/SkiaSharp.Views.Maui.Controls.Compatibility.csproj
@@ -9,10 +9,8 @@
false
$(DefineConstants);__MAUI__
net6.0-windows
+ true
-
-
-
diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls/SkiaSharp.Views.Maui.Controls.csproj b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls/SkiaSharp.Views.Maui.Controls.csproj
index edf7d57d9..48817bacb 100644
--- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls/SkiaSharp.Views.Maui.Controls.csproj
+++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Controls/SkiaSharp.Views.Maui.Controls.csproj
@@ -1,6 +1,6 @@
- netstandard2.0;netstandard2.1;net6.0-ios;net6.0-maccatalyst;net6.0-android
+ net6.0-ios;net6.0-maccatalyst;net6.0-android
$(TargetFrameworks);net6.0-windows10.0.19041
10.0.17763.0
SkiaSharp.Views.Maui.Controls
@@ -9,10 +9,8 @@
false
$(DefineConstants);__MAUI__
net6.0-windows
+ true
-
-
-
diff --git a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/SkiaSharp.Views.Maui.Core.csproj b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/SkiaSharp.Views.Maui.Core.csproj
index fd32a1638..de8fdde16 100644
--- a/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/SkiaSharp.Views.Maui.Core.csproj
+++ b/source/SkiaSharp.Views.Maui/SkiaSharp.Views.Maui.Core/SkiaSharp.Views.Maui.Core.csproj
@@ -1,6 +1,6 @@
- netstandard2.0;netstandard2.1;net6.0-ios;net6.0-maccatalyst;net6.0-android
+ net6.0-ios;net6.0-maccatalyst;net6.0-android
$(TargetFrameworks);net6.0-windows10.0.19041
10.0.17763.0
SkiaSharp.Views.Maui.Core
@@ -10,10 +10,8 @@
false
$(DefineConstants);__MAUI__
net6.0-windows
+ true
-
-
-
diff --git a/source/SkiaSharpSource.Windows-net6.slnf b/source/SkiaSharpSource.Windows-net6.slnf
new file mode 100644
index 000000000..2e6431161
--- /dev/null
+++ b/source/SkiaSharpSource.Windows-net6.slnf
@@ -0,0 +1,14 @@
+{
+ "solution": {
+ "path": "SkiaSharpSource.Windows.sln",
+ "projects": [
+ "..\\binding\\HarfBuzzSharp\\HarfBuzzSharp.csproj",
+ "..\\binding\\SkiaSharp\\SkiaSharp.csproj",
+ "SkiaSharp.Views.Maui\\SkiaSharp.Views.Maui.Controls.Compatibility\\SkiaSharp.Views.Maui.Controls.Compatibility.csproj",
+ "SkiaSharp.Views.Maui\\SkiaSharp.Views.Maui.Controls\\SkiaSharp.Views.Maui.Controls.csproj",
+ "SkiaSharp.Views.Maui\\SkiaSharp.Views.Maui.Core\\SkiaSharp.Views.Maui.Core.csproj",
+ "SkiaSharp.Views.WinUI\\SkiaSharp.Views.WinUI\\SkiaSharp.Views.WinUI.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views\\SkiaSharp.Views.csproj"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/source/SkiaSharpSource.Windows-netfx.slnf b/source/SkiaSharpSource.Windows-netfx.slnf
new file mode 100644
index 000000000..d29994b87
--- /dev/null
+++ b/source/SkiaSharpSource.Windows-netfx.slnf
@@ -0,0 +1,36 @@
+{
+ "solution": {
+ "path": "SkiaSharpSource.Windows.sln",
+ "projects": [
+ "..\\binding\\HarfBuzzSharp.Android\\HarfBuzzSharp.Android.csproj",
+ "..\\binding\\HarfBuzzSharp.Tizen\\HarfBuzzSharp.Tizen.csproj",
+ "..\\binding\\HarfBuzzSharp.UWP\\HarfBuzzSharp.UWP.csproj",
+ "..\\binding\\HarfBuzzSharp\\HarfBuzzSharp.csproj",
+ "..\\binding\\SkiaSharp.Android\\SkiaSharp.Android.csproj",
+ "..\\binding\\SkiaSharp.Tizen\\SkiaSharp.Tizen.csproj",
+ "..\\binding\\SkiaSharp.UWP\\SkiaSharp.UWP.csproj",
+ "..\\binding\\SkiaSharp\\SkiaSharp.csproj",
+ "SkiaSharp.DotNet.Interactive\\SkiaSharp.DotNet.Interactive.csproj",
+ "SkiaSharp.HarfBuzz\\SkiaSharp.HarfBuzz\\SkiaSharp.HarfBuzz.csproj",
+ "SkiaSharp.Views.Forms\\SkiaSharp.Views.Forms.Android\\SkiaSharp.Views.Forms.Android.csproj",
+ "SkiaSharp.Views.Forms\\SkiaSharp.Views.Forms.Tizen\\SkiaSharp.Views.Forms.Tizen.csproj",
+ "SkiaSharp.Views.Forms\\SkiaSharp.Views.Forms.UWP\\SkiaSharp.Views.Forms.UWP.csproj",
+ "SkiaSharp.Views.Forms\\SkiaSharp.Views.Forms.WPF\\SkiaSharp.Views.Forms.WPF.csproj",
+ "SkiaSharp.Views.Forms\\SkiaSharp.Views.Forms\\SkiaSharp.Views.Forms.csproj",
+ "SkiaSharp.Views.Uno\\SkiaSharp.Views.Uno.Android\\SkiaSharp.Views.Uno.Android.csproj",
+ "SkiaSharp.Views.Uno\\SkiaSharp.Views.Uno.Reference\\SkiaSharp.Views.Uno.Reference.csproj",
+ "SkiaSharp.Views.Uno\\SkiaSharp.Views.Uno.Skia\\SkiaSharp.Views.Uno.Skia.csproj",
+ "SkiaSharp.Views.Uno\\SkiaSharp.Views.Uno.Wasm\\SkiaSharp.Views.Uno.Wasm.csproj",
+ "SkiaSharp.Views.WinUI\\SkiaSharp.Views.WinUI\\SkiaSharp.Views.WinUI.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.Android\\SkiaSharp.Views.Android.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.Desktop.Common\\SkiaSharp.Views.Desktop.Common.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.Desktop\\SkiaSharp.Views.Desktop.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.Gtk3\\SkiaSharp.Views.Gtk3.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.Tizen\\SkiaSharp.Views.Tizen.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.UWP\\SkiaSharp.Views.UWP.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.WPF\\SkiaSharp.Views.WPF.csproj",
+ "SkiaSharp.Views\\SkiaSharp.Views.WindowsForms\\SkiaSharp.Views.WindowsForms.csproj",
+ "SkiaSharp.Vulkan\\SkiaSharp.Vulkan.SharpVk\\SkiaSharp.Vulkan.SharpVk.csproj"
+ ]
+ }
+}
\ No newline at end of file