diff --git a/binding/Binding/SKFontManager.cs b/binding/Binding/SKFontManager.cs index cbee4a9bc96..4437b9920f7 100644 --- a/binding/Binding/SKFontManager.cs +++ b/binding/Binding/SKFontManager.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; namespace SkiaSharp { @@ -58,7 +59,11 @@ public SKFontStyleSet GetFontStyles (int index) public SKFontStyleSet GetFontStyles (string familyName) { - return SKFontStyleSet.GetObject (SkiaApi.sk_fontmgr_match_family (Handle, familyName)); + var familyNameUtf8ByteList = StringUtilities.GetEncodedText(familyName,SKTextEncoding.Utf8, addNull: true); + fixed (byte* familyNamePointer = familyNameUtf8ByteList) + { + return SKFontStyleSet.GetObject (SkiaApi.sk_fontmgr_match_family (Handle, new IntPtr(familyNamePointer))); + } } public SKTypeface MatchFamily (string familyName) => @@ -68,10 +73,13 @@ public SKTypeface MatchFamily (string familyName, SKFontStyle style) { if (style == null) throw new ArgumentNullException (nameof (style)); - - var tf = SKTypeface.GetObject (SkiaApi.sk_fontmgr_match_family_style (Handle, familyName, style.Handle)); - tf?.PreventPublicDisposal (); - return tf; + var familyNameUtf8ByteList = StringUtilities.GetEncodedText (familyName, SKTextEncoding.Utf8, addNull: true); + fixed (byte* familyNamePointer = familyNameUtf8ByteList) + { + var tf = SKTypeface.GetObject(SkiaApi.sk_fontmgr_match_family_style(Handle, new IntPtr(familyNamePointer), style.Handle)); + tf?.PreventPublicDisposal(); + return tf; + } } public SKTypeface MatchTypeface (SKTypeface face, SKFontStyle style) @@ -182,9 +190,13 @@ public SKTypeface MatchCharacter (string familyName, SKFontStyle style, string[] if (familyName == null) familyName = string.Empty; - var tf = SKTypeface.GetObject (SkiaApi.sk_fontmgr_match_family_style_character (Handle, familyName, style.Handle, bcp47, bcp47?.Length ?? 0, character)); - tf?.PreventPublicDisposal (); - return tf; + var familyNameUtf8ByteList = StringUtilities.GetEncodedText (familyName, SKTextEncoding.Utf8, addNull: true); + fixed (byte* familyNamePointer = familyNameUtf8ByteList) + { + var tf = SKTypeface.GetObject (SkiaApi.sk_fontmgr_match_family_style_character (Handle, new IntPtr (familyNamePointer), style.Handle, bcp47, bcp47?.Length ?? 0, character)); + tf?.PreventPublicDisposal (); + return tf; + } } public static SKFontManager CreateDefault () diff --git a/binding/Binding/SKTypeface.cs b/binding/Binding/SKTypeface.cs index b12ff1ef8af..71c37c63eef 100644 --- a/binding/Binding/SKTypeface.cs +++ b/binding/Binding/SKTypeface.cs @@ -76,9 +76,13 @@ public static SKTypeface FromFamilyName (string familyName, SKFontStyle style) if (style == null) throw new ArgumentNullException (nameof (style)); - var tf = GetObject (SkiaApi.sk_typeface_create_from_name (familyName, style.Handle)); - tf?.PreventPublicDisposal (); - return tf; + var familyNameUtf8ByteList = StringUtilities.GetEncodedText (familyName, SKTextEncoding.Utf8, addNull:true); + fixed (byte* familyNamePointer = familyNameUtf8ByteList) + { + var tf = GetObject (SkiaApi.sk_typeface_create_from_name (new IntPtr (familyNamePointer), style.Handle)); + tf?.PreventPublicDisposal (); + return tf; + } } public static SKTypeface FromFamilyName (string familyName, SKFontStyleWeight weight, SKFontStyleWidth width, SKFontStyleSlant slant) diff --git a/binding/Binding/SkiaApi.generated.cs b/binding/Binding/SkiaApi.generated.cs index 8a70b541341..26d07109e2f 100644 --- a/binding/Binding/SkiaApi.generated.cs +++ b/binding/Binding/SkiaApi.generated.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Runtime.InteropServices; #region Namespaces @@ -12369,42 +12369,42 @@ internal static sk_typeface_t sk_fontmgr_match_face_style (sk_fontmgr_t param0, // sk_fontstyleset_t* sk_fontmgr_match_family(sk_fontmgr_t*, const char* familyName) #if !USE_DELEGATES [DllImport (SKIA, CallingConvention = CallingConvention.Cdecl)] - internal static extern sk_fontstyleset_t sk_fontmgr_match_family (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName); + internal static extern sk_fontstyleset_t sk_fontmgr_match_family (sk_fontmgr_t param0, IntPtr familyName); #else private partial class Delegates { [UnmanagedFunctionPointer (CallingConvention.Cdecl)] - internal delegate sk_fontstyleset_t sk_fontmgr_match_family (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName); + internal delegate sk_fontstyleset_t sk_fontmgr_match_family (sk_fontmgr_t param0, IntPtr familyName); } private static Delegates.sk_fontmgr_match_family sk_fontmgr_match_family_delegate; - internal static sk_fontstyleset_t sk_fontmgr_match_family (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName) => + internal static sk_fontstyleset_t sk_fontmgr_match_family (sk_fontmgr_t param0, IntPtr familyName) => (sk_fontmgr_match_family_delegate ??= GetSymbol ("sk_fontmgr_match_family")).Invoke (param0, familyName); #endif // sk_typeface_t* sk_fontmgr_match_family_style(sk_fontmgr_t*, const char* familyName, sk_fontstyle_t* style) #if !USE_DELEGATES [DllImport (SKIA, CallingConvention = CallingConvention.Cdecl)] - internal static extern sk_typeface_t sk_fontmgr_match_family_style (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style); + internal static extern sk_typeface_t sk_fontmgr_match_family_style (sk_fontmgr_t param0, IntPtr familyName, sk_fontstyle_t style); #else private partial class Delegates { [UnmanagedFunctionPointer (CallingConvention.Cdecl)] - internal delegate sk_typeface_t sk_fontmgr_match_family_style (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style); + internal delegate sk_typeface_t sk_fontmgr_match_family_style (sk_fontmgr_t param0, IntPtr familyName, sk_fontstyle_t style); } private static Delegates.sk_fontmgr_match_family_style sk_fontmgr_match_family_style_delegate; - internal static sk_typeface_t sk_fontmgr_match_family_style (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style) => + internal static sk_typeface_t sk_fontmgr_match_family_style (sk_fontmgr_t param0, IntPtr familyName, sk_fontstyle_t style) => (sk_fontmgr_match_family_style_delegate ??= GetSymbol ("sk_fontmgr_match_family_style")).Invoke (param0, familyName, style); #endif // sk_typeface_t* sk_fontmgr_match_family_style_character(sk_fontmgr_t*, const char* familyName, sk_fontstyle_t* style, const char** bcp47, int bcp47Count, int32_t character) #if !USE_DELEGATES [DllImport (SKIA, CallingConvention = CallingConvention.Cdecl)] - internal static extern sk_typeface_t sk_fontmgr_match_family_style_character (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style, [MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] bcp47, Int32 bcp47Count, Int32 character); + internal static extern sk_typeface_t sk_fontmgr_match_family_style_character (sk_fontmgr_t param0, IntPtr familyName, sk_fontstyle_t style, [MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] bcp47, Int32 bcp47Count, Int32 character); #else private partial class Delegates { [UnmanagedFunctionPointer (CallingConvention.Cdecl)] - internal delegate sk_typeface_t sk_fontmgr_match_family_style_character (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style, [MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] bcp47, Int32 bcp47Count, Int32 character); + internal delegate sk_typeface_t sk_fontmgr_match_family_style_character (sk_fontmgr_t param0, IntPtr familyName, sk_fontstyle_t style, [MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] bcp47, Int32 bcp47Count, Int32 character); } private static Delegates.sk_fontmgr_match_family_style_character sk_fontmgr_match_family_style_character_delegate; - internal static sk_typeface_t sk_fontmgr_match_family_style_character (sk_fontmgr_t param0, [MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style, [MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] bcp47, Int32 bcp47Count, Int32 character) => + internal static sk_typeface_t sk_fontmgr_match_family_style_character (sk_fontmgr_t param0, IntPtr familyName, sk_fontstyle_t style, [MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] bcp47, Int32 bcp47Count, Int32 character) => (sk_fontmgr_match_family_style_character_delegate ??= GetSymbol ("sk_fontmgr_match_family_style_character")).Invoke (param0, familyName, style, bcp47, bcp47Count, character); #endif @@ -12677,14 +12677,14 @@ internal static sk_typeface_t sk_typeface_create_from_file (/* char */ void* pat // sk_typeface_t* sk_typeface_create_from_name(const char* familyName, const sk_fontstyle_t* style) #if !USE_DELEGATES [DllImport (SKIA, CallingConvention = CallingConvention.Cdecl)] - internal static extern sk_typeface_t sk_typeface_create_from_name ([MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style); + internal static extern sk_typeface_t sk_typeface_create_from_name (IntPtr familyName, sk_fontstyle_t style); #else private partial class Delegates { [UnmanagedFunctionPointer (CallingConvention.Cdecl)] - internal delegate sk_typeface_t sk_typeface_create_from_name ([MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style); + internal delegate sk_typeface_t sk_typeface_create_from_name (IntPtr familyName, sk_fontstyle_t style); } private static Delegates.sk_typeface_create_from_name sk_typeface_create_from_name_delegate; - internal static sk_typeface_t sk_typeface_create_from_name ([MarshalAs (UnmanagedType.LPStr)] String familyName, sk_fontstyle_t style) => + internal static sk_typeface_t sk_typeface_create_from_name (IntPtr familyName, sk_fontstyle_t style) => (sk_typeface_create_from_name_delegate ??= GetSymbol ("sk_typeface_create_from_name")).Invoke (familyName, style); #endif diff --git a/binding/libSkiaSharp.json b/binding/libSkiaSharp.json index cf4cc509887..f11d6fa2c71 100644 --- a/binding/libSkiaSharp.json +++ b/binding/libSkiaSharp.json @@ -422,23 +422,23 @@ }, "sk_fontmgr_match_family": { "parameters": { - "1": "[MarshalAs (UnmanagedType.LPStr)] String" + "1": "IntPtr" } }, "sk_fontmgr_match_family_style": { "parameters": { - "1": "[MarshalAs (UnmanagedType.LPStr)] String" + "1": "IntPtr" } }, "sk_fontmgr_match_family_style_character": { "parameters": { - "1": "[MarshalAs (UnmanagedType.LPStr)] String", + "1": "IntPtr", "3": "[MarshalAs (UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[]" } }, "sk_typeface_create_from_name": { "parameters": { - "0": "[MarshalAs (UnmanagedType.LPStr)] String" + "0": "IntPtr" } }, "sk_path_parse_svg_string": {