示例#1
0
 static unsafe string GetError(IntPtr error)
 {
     if (error == IntPtr.Zero)
     {
         return("Unknown error");
     }
     return(Utf8Buffer.StringFromPtr(((GError *)error)->message));
 }
示例#2
0
文件: Pixbuf.cs 项目: x2bool/Avalonia
 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);
     }
 }
示例#3
0
文件: Signal.cs 项目: zjmsky/Avalonia
        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));
            }
        }
示例#4
0
文件: Pixbuf.cs 项目: x2bool/Avalonia
        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);
        }