CPF/CPF.Mac/Mac/CoreGraphics/CGDataConsumer.cs
2023-11-21 23:05:03 +08:00

75 lines
1.7 KiB
C#

using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
using System.Runtime.InteropServices;
namespace CPF.Mac.CoreGraphics
{
public class CGDataConsumer : INativeObject, IDisposable
{
internal IntPtr handle;
private IntPtr buffer;
private byte[] reference;
public IntPtr Handle => handle;
public CGDataConsumer(IntPtr handle)
: this(handle, owns: false)
{
this.handle = handle;
}
[Preserve(Conditional = true)]
internal CGDataConsumer(IntPtr handle, bool owns)
{
this.handle = handle;
if (!owns)
{
CGDataConsumerRetain(handle);
}
}
~CGDataConsumer()
{
Dispose(disposing: false);
}
public void Dispose()
{
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGDataConsumerRelease(IntPtr handle);
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern void CGDataConsumerRetain(IntPtr handle);
protected virtual void Dispose(bool disposing)
{
if (handle != IntPtr.Zero)
{
if (buffer != IntPtr.Zero)
{
Marshal.FreeHGlobal(buffer);
}
buffer = IntPtr.Zero;
CGDataConsumerRelease(handle);
handle = IntPtr.Zero;
}
reference = null;
}
[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern IntPtr CGDataConsumerCreateWithCFData(IntPtr data);
public CGDataConsumer(NSMutableData data)
{
handle = CGDataConsumerCreateWithCFData(data.Handle);
}
}
}