From 5284066b450be70d92d261d3f0aeaf92dadd085e Mon Sep 17 00:00:00 2001 From: Cameron White Date: Wed, 8 May 2024 22:43:20 -0400 Subject: [PATCH] Update to gir.core 0.5.0 - This contains a fix for the random crashes encountered on Windows - The Cairo.Matrix class now has a more convenient constructor - Gdk.FileList.GetFiles() is not being generated and requires a manual binding for now, but GLib.SList methods are now generated Fixes: #674 --- Directory.Packages.props | 6 +++--- Pinta.Core/Extensions/CairoExtensions.cs | 4 ++-- Pinta.Core/Extensions/GdkExtensions.cs | 23 +++++++++++++++++++---- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 756fee5537..19717d8203 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,9 +3,9 @@ true - - - + + + diff --git a/Pinta.Core/Extensions/CairoExtensions.cs b/Pinta.Core/Extensions/CairoExtensions.cs index 8d59960d96..d6aaf149b9 100644 --- a/Pinta.Core/Extensions/CairoExtensions.cs +++ b/Pinta.Core/Extensions/CairoExtensions.cs @@ -1434,7 +1434,7 @@ public static void AddColorStop (this Gradient gradient, double offset, Color co // TODO-GTK4 (bindings) - requires improvements to struct generation (https://github.com/gircore/gir.core/issues/622) public static Matrix CreateIdentityMatrix () { - var matrix = new Matrix (Cairo.Internal.MatrixManagedHandle.Create ()); + var matrix = new Matrix (); matrix.InitIdentity (); return matrix; } @@ -1442,7 +1442,7 @@ public static Matrix CreateIdentityMatrix () // TODO-GTK4 (bindings) - requires improvements to struct generation (https://github.com/gircore/gir.core/issues/622) public static Matrix CreateMatrix (double xx, double xy, double yx, double yy, double x0, double y0) { - var matrix = new Matrix (Cairo.Internal.MatrixManagedHandle.Create ()); + var matrix = new Matrix (); matrix.Init (xx, xy, yx, yy, x0, y0); return matrix; } diff --git a/Pinta.Core/Extensions/GdkExtensions.cs b/Pinta.Core/Extensions/GdkExtensions.cs index 37d3d589c7..bbb2716799 100644 --- a/Pinta.Core/Extensions/GdkExtensions.cs +++ b/Pinta.Core/Extensions/GdkExtensions.cs @@ -25,6 +25,7 @@ // THE SOFTWARE. using System; +using System.Runtime.InteropServices; using System.Threading.Tasks; using Gdk; @@ -32,6 +33,16 @@ namespace Pinta.Core; public static class GdkExtensions { + private const string GdkLibraryName = "Gdk"; + + static GdkExtensions () + { + NativeImportResolver.RegisterLibrary (GdkLibraryName, + windowsLibraryName: "libgtk-4-1.dll", + linuxLibraryName: "libgtk-4.so.1", + osxLibraryName: "libgtk-4.1.dylib" + ); + } public static bool IsShiftPressed (this ModifierType m) => m.HasFlag (ModifierType.ShiftMask); @@ -224,15 +235,19 @@ public static unsafe Cairo.ImageSurface ToSurface (this Gdk.Texture texture) return surf; } - // TODO-GTK4 (bindings) - struct methods are not generated (https://github.com/gircore/gir.core/issues/622) + [DllImport (GdkLibraryName, EntryPoint = "gdk_file_list_get_files")] + private static extern GLib.Internal.SListOwnedHandle FileListGetFiles (Gdk.Internal.FileListHandle fileList); + + // Wrapper around Gdk.FileList.GetFiles() to return a Gio.File array rather than GLib.SList. + // TODO-GTK4 (bindings) - Gdk.FileList.GetFiles() is not generated public static Gio.File[] GetFilesHelper (this Gdk.FileList file_list) { - var slist = file_list.GetFiles (); + var slist = new GLib.SList (FileListGetFiles (file_list.Handle)); - uint n = GLib.Internal.SList.Length (slist.Handle); + uint n = GLib.SList.Length (slist); var result = new Gio.File[n]; for (uint i = 0; i < n; ++i) { - result[i] = new Gio.FileHelper (GLib.Internal.SList.NthData (slist.Handle, i), ownedRef: false); + result[i] = new Gio.FileHelper (GLib.SList.NthData (slist, i), ownedRef: false); } return result;