Browse Source

Updated native skia

Marcin Ziąbek 1 year ago
parent
commit
af5fad1285

+ 2 - 2
Source/QuestPDF/Skia/SkBitmap.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkBitmap : IDisposable
+internal sealed class SkBitmap : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkBitmap(IntPtr instance)
     public SkBitmap(IntPtr instance)
     {
     {

+ 1 - 1
Source/QuestPDF/Skia/SkColor.cs

@@ -85,7 +85,7 @@ internal static class SkColor
 
 
         return false;
         return false;
     }
     }
-    
+
     public static uint ColorWithAlpha(this uint color, byte alpha)
     public static uint ColorWithAlpha(this uint color, byte alpha)
     {
     {
         return (color & 0x00FFFFFF) | ((uint)alpha << 24);
         return (color & 0x00FFFFFF) | ((uint)alpha << 24);

+ 3 - 3
Source/QuestPDF/Skia/SkData.cs

@@ -4,10 +4,10 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkData : IDisposable
+internal sealed class SkData : IDisposable
 {
 {
-    internal IntPtr Instance;
-    internal bool DisposeNativeObject = true;
+    public IntPtr Instance { get; private set; }
+    private bool DisposeNativeObject = true;
     
     
     public SkData(IntPtr instance, bool disposeNativeObject = true)
     public SkData(IntPtr instance, bool disposeNativeObject = true)
     {
     {

+ 2 - 2
Source/QuestPDF/Skia/SkDocument.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkDocument : IDisposable
+internal sealed class SkDocument : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
 
 
     internal SkDocument(IntPtr instance)
     internal SkDocument(IntPtr instance)
     {
     {

+ 2 - 2
Source/QuestPDF/Skia/SkPicture.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkPicture : IDisposable
+internal sealed class SkPicture : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkPicture(IntPtr instance)
     public SkPicture(IntPtr instance)
     {
     {

+ 2 - 2
Source/QuestPDF/Skia/SkPictureRecorder.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkPictureRecorder : IDisposable
+internal sealed class SkPictureRecorder : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkPictureRecorder()
     public SkPictureRecorder()
     {
     {

+ 1 - 1
Source/QuestPDF/Skia/SkSize.cs

@@ -7,7 +7,7 @@ internal class SkSize
 {
 {
     public float Width;
     public float Width;
     public float Height;
     public float Height;
-    
+
     public SkSize()
     public SkSize()
     {
     {
         
         

+ 1 - 1
Source/QuestPDF/Skia/SkSvgCanvas.cs

@@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkSvgCanvas
+internal sealed class SkSvgCanvas
 {
 {
     public static SkCanvas CreateSvg(float width, float height, SkWriteStream writeStream)
     public static SkCanvas CreateSvg(float width, float height, SkWriteStream writeStream)
     {
     {

+ 2 - 2
Source/QuestPDF/Skia/SkSvgImage.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkSvgImage : IDisposable
+internal sealed class SkSvgImage : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     public SkRect ViewBox;
     public SkRect ViewBox;
     
     
     public SkSvgImage(string svgString)
     public SkSvgImage(string svgString)

+ 2 - 2
Source/QuestPDF/Skia/SkWriteStream.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia;
 namespace QuestPDF.Skia;
 
 
-internal class SkWriteStream : IDisposable
+internal sealed class SkWriteStream : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkWriteStream()
     public SkWriteStream()
     {
     {

+ 2 - 2
Source/QuestPDF/Skia/Text/SkFontCollection.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia.Text;
 namespace QuestPDF.Skia.Text;
 
 
-internal class SkFontCollection : IDisposable
+internal sealed class SkFontCollection : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkFontCollection(IntPtr instance)
     public SkFontCollection(IntPtr instance)
     {
     {

+ 29 - 6
Source/QuestPDF/Skia/Text/SkParagraphBuilder.cs

@@ -3,6 +3,29 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia.Text;
 namespace QuestPDF.Skia.Text;
 
 
+[StructLayout(LayoutKind.Sequential)]
+internal struct ParagraphStyleConfiguration
+{
+    public TextAlign Alignment;
+    public TextDirection Direction;
+    public int MaxLinesVisible;
+
+    internal enum TextAlign
+    {
+        Left,
+        Right,
+        Center,
+        Justify,
+        Start,
+        End
+    }
+    
+    internal enum TextDirection
+    {
+        Rtl,
+        Ltr
+    }
+}
 
 
 [StructLayout(LayoutKind.Sequential)]
 [StructLayout(LayoutKind.Sequential)]
 internal struct SkPlaceholderStyle
 internal struct SkPlaceholderStyle
@@ -58,18 +81,18 @@ internal struct SkPlaceholderStyle
     }
     }
 }
 }
 
 
-internal class SkParagraphBuilder : IDisposable
+internal sealed class SkParagraphBuilder : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
-    private SkParagraphBuilder(IntPtr instance)
+    public SkParagraphBuilder(IntPtr instance)
     {
     {
         Instance = instance;
         Instance = instance;
     }
     }
     
     
-    public static SkParagraphBuilder Create(SkParagraphStyle paragraphStyle, SkFontCollection fontCollection)
+    public static SkParagraphBuilder Create(ParagraphStyleConfiguration paragraphStyleConfiguration, SkFontCollection fontCollection)
     {
     {
-        var instance = API.paragraph_builder_create(paragraphStyle.Instance, fontCollection.Instance);
+        var instance = API.paragraph_builder_create(paragraphStyleConfiguration, fontCollection.Instance);
         return new SkParagraphBuilder(instance);
         return new SkParagraphBuilder(instance);
     }
     }
     
     
@@ -106,7 +129,7 @@ internal class SkParagraphBuilder : IDisposable
     private static class API
     private static class API
     {
     {
         [DllImport(SkiaAPI.LibraryName)]
         [DllImport(SkiaAPI.LibraryName)]
-        public static extern IntPtr paragraph_builder_create(IntPtr paragraphStyle, IntPtr fontCollection);
+        public static extern IntPtr paragraph_builder_create(ParagraphStyleConfiguration paragraphStyleConfiguration, IntPtr fontCollection);
         
         
         [DllImport(SkiaAPI.LibraryName)]
         [DllImport(SkiaAPI.LibraryName)]
         public static extern void paragraph_builder_add_text(IntPtr paragraphBuilder, string text, IntPtr textStyle);
         public static extern void paragraph_builder_add_text(IntPtr paragraphBuilder, string text, IntPtr textStyle);

+ 0 - 68
Source/QuestPDF/Skia/Text/SkParagraphStyle.cs

@@ -1,68 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace QuestPDF.Skia.Text;
-
-[StructLayout(LayoutKind.Sequential)]
-internal struct ParagraphStyleConfiguration
-{
-    public TextAlign Alignment;
-    public TextDirection Direction;
-    
-    public int MaxLinesVisible;
-    public string Ellipsis;
-
-    internal enum TextAlign
-    {
-        Left,
-        Right,
-        Center,
-        Justify,
-        Start,
-        End
-    }
-    
-    internal enum TextDirection
-    {
-        Rtl,
-        Ltr
-    }
-}
-
-internal class SkParagraphStyle : IDisposable
-{
-    internal IntPtr Instance;
-    
-    public SkParagraphStyle(IntPtr instance)
-    {
-        Instance = instance;
-    }
-    
-    public SkParagraphStyle(ParagraphStyleConfiguration paragraphStyleConfiguration)
-    {
-        Instance = API.paragraph_style_create(paragraphStyleConfiguration);
-    }
-
-    ~SkParagraphStyle()
-    {
-        Dispose();
-    }
-    
-    public void Dispose()
-    {
-        if (Instance == IntPtr.Zero)
-            return;
-        
-        API.paragraph_style_delete(Instance);
-        Instance = IntPtr.Zero;
-    }
-    
-    private static class API
-    {
-        [DllImport(SkiaAPI.LibraryName)]
-        public static extern IntPtr paragraph_style_create(ParagraphStyleConfiguration paragraphStyleConfiguration);
-        
-        [DllImport(SkiaAPI.LibraryName)]
-        public static extern void paragraph_style_delete(IntPtr paragraphStyle);
-    }
-}

+ 5 - 3
Source/QuestPDF/Skia/Text/SkTextStyle.cs

@@ -8,8 +8,10 @@ internal struct TextStyleConfiguration
 {
 {
     public float FontSize;
     public float FontSize;
     public FontWeights FontWeight;
     public FontWeights FontWeight;
+    public bool IsItalic;
 
 
-    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public string[] FontFamilies;
+    public string FontFamily;
+    public string? FontFamilyFallback;
     
     
     public uint ForegroundColor;
     public uint ForegroundColor;
     public uint BackgroundColor;
     public uint BackgroundColor;
@@ -63,9 +65,9 @@ internal struct TextStyleConfiguration
     }
     }
 }
 }
 
 
-internal class SkTextStyle : IDisposable
+internal sealed class SkTextStyle : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkTextStyle(IntPtr instance)
     public SkTextStyle(IntPtr instance)
     {
     {

+ 2 - 2
Source/QuestPDF/Skia/Text/SkTypefaceProvider.cs

@@ -3,9 +3,9 @@ using System.Runtime.InteropServices;
 
 
 namespace QuestPDF.Skia.Text;
 namespace QuestPDF.Skia.Text;
 
 
-internal class SkTypefaceProvider : IDisposable
+internal sealed class SkTypefaceProvider : IDisposable
 {
 {
-    internal IntPtr Instance;
+    public IntPtr Instance { get; private set; }
     
     
     public SkTypefaceProvider()
     public SkTypefaceProvider()
     {
     {