diff --git a/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKCanvas.cs b/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKCanvas.cs index 839877af13..a70f533b2b 100644 --- a/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKCanvas.cs +++ b/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKCanvas.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +using Avalonia.Compatibility; using SkiaSharp; namespace Avalonia.Skia; @@ -20,14 +21,19 @@ internal static unsafe partial class SkiaCompat static void NewCall(SKCanvas canvas, SKMatrix matrix) { var m44 = ToSkMatrix44(matrix); - sk_canvas_set_matrix(canvas.Handle, &m44); + if (OperatingSystemEx.IsIOS() || OperatingSystemEx.IsTvOS()) + sk_canvas_set_matrix_ios(canvas.Handle, &m44); + else + sk_canvas_set_matrix(canvas.Handle, &m44); } - + static void LegacyCall(SKCanvas canvas, SKMatrix matrix) => canvas.SetMatrix(matrix); } [DllImport("libSkiaSharp", CallingConvention = CallingConvention.Cdecl)] - internal static extern unsafe void sk_canvas_set_matrix(IntPtr ccanvas, sk_matrix44_t* cmatrix); + internal static extern void sk_canvas_set_matrix(IntPtr ccanvas, sk_matrix44_t* cmatrix); + [DllImport("@rpath/libSkiaSharp.framework/libSkiaSharp", CallingConvention = CallingConvention.Cdecl)] + internal static extern void sk_canvas_set_matrix_ios(IntPtr ccanvas, sk_matrix44_t* cmatrix); } diff --git a/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKPath.cs b/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKPath.cs index 7937b8209e..afb0d4c63f 100644 --- a/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKPath.cs +++ b/src/Skia/Avalonia.Skia/Compatibility/SkiaCompat.SKPath.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +using Avalonia.Compatibility; using SkiaSharp; namespace Avalonia.Skia; @@ -9,9 +10,15 @@ internal static unsafe partial class SkiaCompat public static void CTransform(this SKPath path, ref SKMatrix matrix) { fixed (SKMatrix* m = &matrix) - sk_path_transform(path.Handle, m); + if (OperatingSystemEx.IsIOS() || OperatingSystemEx.IsTvOS()) + sk_path_transform_ios(path.Handle, m); + else + sk_path_transform(path.Handle, m); } [DllImport("libSkiaSharp", CallingConvention = CallingConvention.Cdecl)] private static extern void sk_path_transform(IntPtr cpath, SKMatrix* cmatrix); + + [DllImport("@rpath/libSkiaSharp.framework/libSkiaSharp", CallingConvention = CallingConvention.Cdecl)] + private static extern void sk_path_transform_ios(IntPtr cpath, SKMatrix* cmatrix); }