Browse Source

casting wip

Krzysztof Krysiński 2 years ago
parent
commit
3b54c84747

+ 19 - 0
src/PixiEditor.DrawingApi.Skia/CastUtility.cs

@@ -0,0 +1,19 @@
+using System.Runtime.CompilerServices;
+
+namespace PixiEditor.DrawingApi.Skia
+{
+    public static class CastUtility
+    {
+        public static T2[] UnsafeArrayCast<T1, T2>(T1[] source)
+        {
+            unsafe
+            {
+                T2[] target = new T2[source.Length];
+                fixed (int* p = &target)
+                {
+                    Unsafe.Copy(p, ref source);
+                }
+            }
+        }
+    }
+}

+ 19 - 0
src/PixiEditor.DrawingApi.Skia/ConversionExtensions.cs

@@ -0,0 +1,19 @@
+using PixiEditor.DrawingApi.Core.ColorsImpl;
+using PixiEditor.DrawingApi.Core.Numerics;
+using SkiaSharp;
+
+namespace PixiEditor.DrawingApi.Skia
+{
+    public static class ConversionExtensions
+    {
+        public static SKRect ToSKRect(this RectD rectD)
+        {
+            return SKRect.Create((float)rectD.X, (float)rectD.Y, (float)rectD.Width, (float)rectD.Height);
+        }
+
+        public static SKColor ToSKColor(this Color color)
+        {
+            return new SKColor(color.R, color.G, color.B, color.A);
+        }
+    }
+}

+ 3 - 3
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaCanvasImplementation.cs

@@ -85,7 +85,7 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
         {
             ManagedInstances[objPtr].DrawPoints(
                 (SKPointMode)pointMode,
-                points,
+                CastUtility.UnsafeArrayCast<Point, SKPoint>(points),
                 _paintImpl[paint.ObjectPointer]);
         }
 
@@ -136,7 +136,7 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
 
         public void DrawColor(IntPtr objPtr, Color color, BlendMode paintBlendMode)
         {
-            ManagedInstances[objPtr].DrawColor(color, (SKBlendMode)paintBlendMode);
+            ManagedInstances[objPtr].DrawColor(color.ToSKColor(), (SKBlendMode)paintBlendMode);
         }
 
         public void RotateRadians(IntPtr objPtr, float radians, float centerX, float centerY)
@@ -148,7 +148,7 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
         {
             ManagedInstances[objPtr].DrawImage(
                 _imageImpl[image.ObjectPointer],
-                rect, 
+                rect.ToSKRect(), 
                 _paintImpl[paint.ObjectPointer]);
         }
 

+ 1 - 0
src/PixiEditor.DrawingApi.Skia/PixiEditor.DrawingApi.Skia.csproj

@@ -3,6 +3,7 @@
     <PropertyGroup>
         <TargetFramework>netstandard2.1</TargetFramework>
         <Nullable>enable</Nullable>
+        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     </PropertyGroup>
 
     <ItemGroup>