Browse Source

Implemented all interfaces

flabbet 2 years ago
parent
commit
57ab8d7560

+ 1 - 4
src/ChunkyImageLibTest/ChunkyImageTests.cs

@@ -1,11 +1,8 @@
-using System;
-using System.IO;
-using ChunkyImageLib;
+using ChunkyImageLib;
 using ChunkyImageLib.DataHolders;
 using ChunkyImageLib.DataHolders;
 using PixiEditor.DrawingApi.Core.ColorsImpl;
 using PixiEditor.DrawingApi.Core.ColorsImpl;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Surface;
 using PixiEditor.DrawingApi.Core.Surface;
-using SkiaSharp;
 using Xunit;
 using Xunit;
 
 
 namespace ChunkyImageLibTest;
 namespace ChunkyImageLibTest;

+ 0 - 2
src/ChunkyImageLibTest/RectangleOperationTests.cs

@@ -1,10 +1,8 @@
 using System.Collections.Generic;
 using System.Collections.Generic;
 using ChunkyImageLib;
 using ChunkyImageLib;
-using ChunkyImageLib.DataHolders;
 using ChunkyImageLib.Operations;
 using ChunkyImageLib.Operations;
 using PixiEditor.DrawingApi.Core.ColorsImpl;
 using PixiEditor.DrawingApi.Core.ColorsImpl;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Numerics;
-using SkiaSharp;
 using Xunit;
 using Xunit;
 
 
 namespace ChunkyImageLibTest;
 namespace ChunkyImageLibTest;

+ 1 - 1
src/PixiEditor.DrawingApi.Core/Surface/Bitmap.cs

@@ -5,7 +5,7 @@ namespace PixiEditor.DrawingApi.Core.Surface;
 
 
 public class Bitmap : NativeObject
 public class Bitmap : NativeObject
 {
 {
-    internal Bitmap(IntPtr objPtr) : base(objPtr)
+    public Bitmap(IntPtr objPtr) : base(objPtr)
     {
     {
     }
     }
 
 

+ 1 - 1
src/PixiEditor.DrawingApi.Core/Surface/Pixmap.cs

@@ -28,7 +28,7 @@ public class Pixmap : NativeObject
         return DrawingBackendApi.Current.PixmapImplementation.GetPixels(ObjectPointer);
         return DrawingBackendApi.Current.PixmapImplementation.GetPixels(ObjectPointer);
     }
     }
 
 
-    public Span<T> GetPixelSpan<T>()
+    public Span<T> GetPixelSpan<T>() where T : unmanaged
     {
     {
         return DrawingBackendApi.Current.PixmapImplementation.GetPixelSpan<T>(this);
         return DrawingBackendApi.Current.PixmapImplementation.GetPixelSpan<T>(this);
     }
     }

+ 7 - 4
src/PixiEditor.DrawingApi.Skia/ConversionExtensions.cs

@@ -2,6 +2,7 @@
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Surface;
 using PixiEditor.DrawingApi.Core.Surface;
 using PixiEditor.DrawingApi.Core.Surface.ImageData;
 using PixiEditor.DrawingApi.Core.Surface.ImageData;
+using PixiEditor.DrawingApi.Skia.Implementations;
 using SkiaSharp;
 using SkiaSharp;
 
 
 namespace PixiEditor.DrawingApi.Skia
 namespace PixiEditor.DrawingApi.Skia
@@ -50,12 +51,14 @@ namespace PixiEditor.DrawingApi.Skia
             return new SKImageInfo(info.Width, info.Height, (SKColorType)info.ColorType, (SKAlphaType)info.AlphaType);
             return new SKImageInfo(info.Width, info.Height, (SKColorType)info.ColorType, (SKAlphaType)info.AlphaType);
         }
         }
 
 
-        public static ImageInfo ToImageInfo(this SKImageInfo info)
+        public static ImageInfo ToImageInfo(this SKImageInfo info, SkiaColorSpaceImplementation colorSpaceImpl)
         {
         {
-            return new ImageInfo(info.Width, info.Height, 
-                (ColorType)info.ColorType, 
+            ColorSpace cs = new ColorSpace(info.ColorSpace.Handle);
+            colorSpaceImpl.ManagedInstances[info.ColorSpace.Handle] = info.ColorSpace;
+            return new ImageInfo(info.Width, info.Height,
+                (ColorType)info.ColorType,
                 (AlphaType)info.AlphaType,
                 (AlphaType)info.AlphaType,
-                info.ColorSpace)
+                cs);
         }
         }
     }
     }
 }
 }

+ 25 - 0
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaBitmapImplementation.cs

@@ -0,0 +1,25 @@
+using System;
+using PixiEditor.DrawingApi.Core.Bridge.NativeObjectsImpl;
+using PixiEditor.DrawingApi.Core.Surface;
+using SkiaSharp;
+
+namespace PixiEditor.DrawingApi.Skia.Implementations
+{
+    public class SkiaBitmapImplementation : SkObjectImplementation<SKBitmap>, IBitmapImplementation
+    {
+        public void Dispose(IntPtr objectPointer)
+        {
+            SKBitmap bitmap = ManagedInstances[objectPointer];
+            bitmap.Dispose();   
+            
+            ManagedInstances.Remove(objectPointer);
+        }
+
+        public Bitmap Decode(ReadOnlySpan<byte> buffer)
+        {
+            SKBitmap skBitmap = SKBitmap.Decode(buffer);
+            ManagedInstances[skBitmap.Handle] = skBitmap;
+            return new Bitmap(skBitmap.Handle);
+        }
+    }
+}

+ 2 - 0
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaCanvasImplementation.cs

@@ -164,6 +164,8 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
         public void Dispose(IntPtr objectPointer)
         public void Dispose(IntPtr objectPointer)
         {
         {
             ManagedInstances[objectPointer].Dispose();
             ManagedInstances[objectPointer].Dispose();
+            
+            ManagedInstances.Remove(objectPointer);
         }
         }
     }
     }
 }
 }

+ 2 - 0
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaColorSpaceImplementation.cs

@@ -17,6 +17,8 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
         public void Dispose(IntPtr objectPointer)
         public void Dispose(IntPtr objectPointer)
         {
         {
             ManagedInstances[objectPointer].Dispose();
             ManagedInstances[objectPointer].Dispose();
+            
+            ManagedInstances.Remove(objectPointer);
         }
         }
     }
     }
 }
 }

+ 3 - 1
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaPaintImplementation.cs

@@ -17,7 +17,9 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
 
 
         public void Dispose(IntPtr paintObjPointer)
         public void Dispose(IntPtr paintObjPointer)
         {
         {
-            throw new NotImplementedException();
+            SKPaint paint = ManagedInstances[paintObjPointer];
+            paint.Dispose();
+            ManagedInstances.Remove(paintObjPointer);
         }
         }
 
 
         public Paint Clone(IntPtr paintObjPointer)
         public Paint Clone(IntPtr paintObjPointer)

+ 2 - 0
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaPathImplementation.cs

@@ -32,6 +32,8 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
         public void Dispose(VectorPath path)
         public void Dispose(VectorPath path)
         {
         {
             ManagedInstances[path.ObjectPointer].Dispose();
             ManagedInstances[path.ObjectPointer].Dispose();
+            
+            ManagedInstances.Remove(path.ObjectPointer);
         }
         }
 
 
         public bool IsPathOval(VectorPath path)
         public bool IsPathOval(VectorPath path)

+ 10 - 1
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaPixmapImplementation.cs

@@ -8,9 +8,18 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
 {
 {
     public class SkiaPixmapImplementation : SkObjectImplementation<SKPixmap>, IPixmapImplementation
     public class SkiaPixmapImplementation : SkObjectImplementation<SKPixmap>, IPixmapImplementation
     {
     {
+        private readonly SkiaColorSpaceImplementation _colorSpaceImplementation;
+        
+        public SkiaPixmapImplementation(SkiaColorSpaceImplementation colorSpaceImplementation)
+        {
+            _colorSpaceImplementation = colorSpaceImplementation;
+        }
+        
         public void Dispose(IntPtr objectPointer)
         public void Dispose(IntPtr objectPointer)
         {
         {
             ManagedInstances[objectPointer].Dispose();
             ManagedInstances[objectPointer].Dispose();
+            
+            ManagedInstances.Remove(objectPointer);
         }
         }
 
 
         public IntPtr GetPixels(IntPtr objectPointer)
         public IntPtr GetPixels(IntPtr objectPointer)
@@ -33,7 +42,7 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
         public Pixmap CreateFrom(SKPixmap pixmap)
         public Pixmap CreateFrom(SKPixmap pixmap)
         {
         {
             ManagedInstances[pixmap.Handle] = pixmap;
             ManagedInstances[pixmap.Handle] = pixmap;
-            return new Pixmap(pixmap.Info.ToImageInfo(), pixmap.GetPixels());
+            return new Pixmap(pixmap.Info.ToImageInfo(_colorSpaceImplementation), pixmap.GetPixels());
         }
         }
     }
     }
 }
 }

+ 11 - 3
src/PixiEditor.DrawingApi.Skia/Implementations/SkiaSurfaceImplementation.cs

@@ -9,10 +9,14 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
     public class SkiaSurfaceImplementation : SkObjectImplementation<SKSurface>, ISurfaceImplementation
     public class SkiaSurfaceImplementation : SkObjectImplementation<SKSurface>, ISurfaceImplementation
     {
     {
         private readonly SkiaPixmapImplementation _pixmapImplementation;
         private readonly SkiaPixmapImplementation _pixmapImplementation;
+        private readonly SkiaCanvasImplementation _canvasImplementation;
+        private readonly SkiaPaintImplementation _paintImplementation;
         
         
-        public SkiaSurfaceImplementation(SkiaPixmapImplementation pixmapImplementation)
+        public SkiaSurfaceImplementation(SkiaPixmapImplementation pixmapImplementation, SkiaCanvasImplementation canvasImplementation, SkiaPaintImplementation paintImplementation)
         {
         {
             _pixmapImplementation = pixmapImplementation;
             _pixmapImplementation = pixmapImplementation;
+            _canvasImplementation = canvasImplementation;
+            _paintImplementation = paintImplementation;
         }
         }
         
         
         public Pixmap PeekPixels(DrawingSurface drawingSurface)
         public Pixmap PeekPixels(DrawingSurface drawingSurface)
@@ -38,7 +42,9 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
 
 
         public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int y, Paint drawingPaint)
         public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int y, Paint drawingPaint)
         {
         {
-            ManagedInstances[drawingSurface.ObjectPointer].Draw(surfaceToDraw, x, y, drawingPaint);
+            SKCanvas canvas = _canvasImplementation[surfaceToDraw.ObjectPointer];
+            SKPaint paint = _paintImplementation[drawingPaint.ObjectPointer];
+            ManagedInstances[drawingSurface.ObjectPointer].Draw(canvas, x, y, paint);
         }
         }
 
 
         public DrawingSurface Create(ImageInfo imageInfo, IntPtr pixelBuffer)
         public DrawingSurface Create(ImageInfo imageInfo, IntPtr pixelBuffer)
@@ -51,9 +57,11 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
 
 
         public DrawingSurface Create(Pixmap pixmap)
         public DrawingSurface Create(Pixmap pixmap)
         {
         {
-            SKSurface skSurface = SKSurface.Create(pixmap);
+            SKPixmap skPixmap = _pixmapImplementation[pixmap.ObjectPointer];
+            SKSurface skSurface = SKSurface.Create(skPixmap);
             DrawingSurface surface = new DrawingSurface(skSurface.Handle);
             DrawingSurface surface = new DrawingSurface(skSurface.Handle);
             ManagedInstances[skSurface.Handle] = skSurface;
             ManagedInstances[skSurface.Handle] = skSurface;
+            return surface;
         }
         }
 
 
         public DrawingSurface Create(ImageInfo imageInfo)
         public DrawingSurface Create(ImageInfo imageInfo)

+ 15 - 4
src/PixiEditor.DrawingApi.Skia/SkiaDrawingBackend.cs

@@ -36,15 +36,26 @@ namespace PixiEditor.DrawingApi.Skia
             PathImplementation = pathImpl;
             PathImplementation = pathImpl;
             
             
             MatrixImplementation = new SkiaMatrixImplementation();
             MatrixImplementation = new SkiaMatrixImplementation();
+            
+            SkiaColorSpaceImplementation colorSpaceImpl = new SkiaColorSpaceImplementation();
+            ColorSpaceImplementation = colorSpaceImpl;
 
 
-            SkiaPixmapImplementation pixmapImpl = new SkiaPixmapImplementation();
+            SkiaPixmapImplementation pixmapImpl = new SkiaPixmapImplementation(colorSpaceImpl);
             PixmapImplementation = pixmapImpl;
             PixmapImplementation = pixmapImpl;
+            
+            SkiaBitmapImplementation bitmapImpl = new SkiaBitmapImplementation();
+            BitmapImplementation = bitmapImpl;
 
 
-            ColorSpaceImplementation = new SkiaColorSpaceImplementation();
+            SkiaSurfaceImplementation surfaceImpl = null;
 
 
-            SurfaceImplementation = new SkiaSurfaceImplementation(pixmapImpl);
+            SkiaCanvasImplementation canvasImpl = new SkiaCanvasImplementation(paintImpl, surfaceImpl, imgImpl, bitmapImpl, pathImpl);
             
             
-            CanvasImplementation = new SkiaCanvasImplementation(paintImpl, imgImpl, pathImpl);
+            surfaceImpl = new SkiaSurfaceImplementation(pixmapImpl, canvasImpl, paintImpl);
+
+            CanvasImplementation = canvasImpl;
+
+            SurfaceImplementation = surfaceImpl;
+
         }
         }
         
         
         public void Setup()
         public void Setup()