static unsafe string GetError(IntPtr error) { if (error == IntPtr.Zero) { return("Unknown error"); } return(Utf8Buffer.StringFromPtr(((GError *)error)->message)); }
public static Pixbuf NewFromFile(string filename) { using (var ub = new Utf8Buffer(filename)) { IntPtr err; var rv = Native.GdkPixbufNewFromFile(ub, out err); if (rv != IntPtr.Zero) { return(new Pixbuf(rv)); } throw new GException(err); } }
public static IDisposable Connect <T>(GObject obj, string name, T handler) { var handle = GCHandle.Alloc(handler); var ptr = Marshal.GetFunctionPointerForDelegate((Delegate)(object)handler); using (var utf = new Utf8Buffer(name)) { var id = Native.GSignalConnectObject(obj, utf, ptr, IntPtr.Zero, 0); if (id == 0) { throw new ArgumentException("Unable to connect to signal " + name); } return(new ConnectedSignal(obj, handle, id)); } }
public void Save(Stream outputStream) { IntPtr buffer, bufferLen, error; using (var png = new Utf8Buffer("png")) if (!Native.GdkPixbufSaveToBufferv(this, out buffer, out bufferLen, png, IntPtr.Zero, IntPtr.Zero, out error)) { throw new GException(error); } var data = new byte[bufferLen.ToInt32()]; Marshal.Copy(buffer, data, 0, bufferLen.ToInt32()); Native.GFree(buffer); outputStream.Write(data, 0, data.Length); }