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

328 lines
9.4 KiB
C#

using CPF.Mac.CoreGraphics;
using CPF.Mac.CoreMedia;
using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace CPF.Mac.Foundation
{
[Register("NSValue", true)]
public class NSValue : NSObject
{
private static readonly IntPtr selNonretainedObjectValueHandle = Selector.GetHandle("nonretainedObjectValue");
private static readonly IntPtr selPointerValueHandle = Selector.GetHandle("pointerValue");
private static readonly IntPtr selCMTimeValueHandle = Selector.GetHandle("CMTimeValue");
private static readonly IntPtr selCMTimeMappingValueHandle = Selector.GetHandle("CMTimeMappingValue");
private static readonly IntPtr selCMTimeRangeValueHandle = Selector.GetHandle("CMTimeRangeValue");
private static readonly IntPtr selRectValueHandle = Selector.GetHandle("rectValue");
private static readonly IntPtr selSizeValueHandle = Selector.GetHandle("sizeValue");
private static readonly IntPtr selPointValueHandle = Selector.GetHandle("pointValue");
private static readonly IntPtr selRangeValueHandle = Selector.GetHandle("rangeValue");
private static readonly IntPtr selGetValue_Handle = Selector.GetHandle("getValue:");
private static readonly IntPtr selObjCTypeHandle = Selector.GetHandle("objCType");
private static readonly IntPtr selValueWithNonretainedObject_Handle = Selector.GetHandle("valueWithNonretainedObject:");
private static readonly IntPtr selValueWithPointer_Handle = Selector.GetHandle("valueWithPointer:");
private static readonly IntPtr selIsEqualToValue_Handle = Selector.GetHandle("isEqualToValue:");
private static readonly IntPtr selValueWithRange_Handle = Selector.GetHandle("valueWithRange:");
private static readonly IntPtr selValueWithCMTime_Handle = Selector.GetHandle("valueWithCMTime:");
private static readonly IntPtr selValueWithCMTimeMapping_Handle = Selector.GetHandle("valueWithCMTimeMapping:");
private static readonly IntPtr selValueWithCMTimeRange_Handle = Selector.GetHandle("valueWithCMTimeRange:");
private static readonly IntPtr selValueWithRect_Handle = Selector.GetHandle("valueWithRect:");
private static readonly IntPtr selValueWithSize_Handle = Selector.GetHandle("valueWithSize:");
private static readonly IntPtr selValueWithPoint_Handle = Selector.GetHandle("valueWithPoint:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSValue");
private object __mt_NonretainedObjectValue_var;
public string ObjCType => Marshal.PtrToStringAnsi(ObjCTypePtr());
public override IntPtr ClassHandle => class_ptr;
public virtual NSObject NonretainedObjectValue
{
[Export("nonretainedObjectValue")]
get
{
return (NSObject)(__mt_NonretainedObjectValue_var = ((!IsDirectBinding) ? Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selNonretainedObjectValueHandle)) : Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selNonretainedObjectValueHandle))));
}
}
public virtual IntPtr PointerValue
{
[Export("pointerValue")]
get
{
if (IsDirectBinding)
{
return Messaging.IntPtr_objc_msgSend(base.Handle, selPointerValueHandle);
}
return Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selPointerValueHandle);
}
}
public virtual CMTime CMTimeValue
{
[Export("CMTimeValue")]
get
{
CMTime retval;
if (IsDirectBinding)
{
Messaging.CMTime_objc_msgSend_stret(out retval, base.Handle, selCMTimeValueHandle);
}
else
{
Messaging.CMTime_objc_msgSendSuper_stret(out retval, base.SuperHandle, selCMTimeValueHandle);
}
return retval;
}
}
public virtual CMTimeMapping CMTimeMappingValue
{
[Export("CMTimeMappingValue")]
get
{
CMTimeMapping retval;
if (IsDirectBinding)
{
Messaging.CMTimeMapping_objc_msgSend_stret(out retval, base.Handle, selCMTimeMappingValueHandle);
}
else
{
Messaging.CMTimeMapping_objc_msgSendSuper_stret(out retval, base.SuperHandle, selCMTimeMappingValueHandle);
}
return retval;
}
}
public virtual CMTimeRange CMTimeRangeValue
{
[Export("CMTimeRangeValue")]
get
{
CMTimeRange retval;
if (IsDirectBinding)
{
Messaging.CMTimeRange_objc_msgSend_stret(out retval, base.Handle, selCMTimeRangeValueHandle);
}
else
{
Messaging.CMTimeRange_objc_msgSendSuper_stret(out retval, base.SuperHandle, selCMTimeRangeValueHandle);
}
return retval;
}
}
public virtual CGRect RectangleValue
{
[Export("rectValue")]
get
{
CGRect retval;
if (IsDirectBinding)
{
Messaging.CGRect_objc_msgSend_stret(out retval, base.Handle, selRectValueHandle);
}
else
{
Messaging.CGRect_objc_msgSendSuper_stret(out retval, base.SuperHandle, selRectValueHandle);
}
return retval;
}
}
public virtual CGSize SizeValue
{
[Export("sizeValue")]
get
{
if (IsDirectBinding)
{
return Messaging.CGSize_objc_msgSend(base.Handle, selSizeValueHandle);
}
return Messaging.CGSize_objc_msgSendSuper(base.SuperHandle, selSizeValueHandle);
}
}
public virtual CGPoint PointValue
{
[Export("pointValue")]
get
{
if (IsDirectBinding)
{
return Messaging.CGPoint_objc_msgSend(base.Handle, selPointValueHandle);
}
return Messaging.CGPoint_objc_msgSendSuper(base.SuperHandle, selPointValueHandle);
}
}
public virtual NSRange RangeValue
{
[Export("rangeValue")]
get
{
if (IsDirectBinding)
{
return Messaging.NSRange_objc_msgSend(base.Handle, selRangeValueHandle);
}
return Messaging.NSRange_objc_msgSendSuper(base.SuperHandle, selRangeValueHandle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSValue(NSCoder coder)
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSValue(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSValue(IntPtr handle)
: base(handle)
{
}
[Export("getValue:")]
public virtual void StoreValueAtAddress(IntPtr value)
{
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selGetValue_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selGetValue_Handle, value);
}
}
[Export("objCType")]
internal virtual IntPtr ObjCTypePtr()
{
if (IsDirectBinding)
{
return Messaging.IntPtr_objc_msgSend(base.Handle, selObjCTypeHandle);
}
return Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selObjCTypeHandle);
}
[Export("valueWithNonretainedObject:")]
public static NSValue ValueFromNonretainedObject(NSObject anObject)
{
if (anObject == null)
{
throw new ArgumentNullException("anObject");
}
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(class_ptr, selValueWithNonretainedObject_Handle, anObject.Handle));
}
[Export("valueWithPointer:")]
public static NSValue ValueFromPointer(IntPtr pointer)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(class_ptr, selValueWithPointer_Handle, pointer));
}
[Export("isEqualToValue:")]
public virtual bool IsEqualTo(NSValue value)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (IsDirectBinding)
{
return Messaging.bool_objc_msgSend_IntPtr(base.Handle, selIsEqualToValue_Handle, value.Handle);
}
return Messaging.bool_objc_msgSendSuper_IntPtr(base.SuperHandle, selIsEqualToValue_Handle, value.Handle);
}
[Export("valueWithRange:")]
public static NSValue FromRange(NSRange range)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_NSRange(class_ptr, selValueWithRange_Handle, range));
}
[Export("valueWithCMTime:")]
public static NSValue FromCMTime(CMTime time)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_CMTime(class_ptr, selValueWithCMTime_Handle, time));
}
[Export("valueWithCMTimeMapping:")]
public static NSValue FromCMTimeMapping(CMTimeMapping timeMapping)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_CMTimeMapping(class_ptr, selValueWithCMTimeMapping_Handle, timeMapping));
}
[Export("valueWithCMTimeRange:")]
public static NSValue FromCMTimeRange(CMTimeRange timeRange)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_CMTimeRange(class_ptr, selValueWithCMTimeRange_Handle, timeRange));
}
[Export("valueWithRect:")]
public static NSValue FromRectangle(CGRect rect)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_CGRect(class_ptr, selValueWithRect_Handle, rect));
}
[Export("valueWithSize:")]
public static NSValue FromSize(CGSize size)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_CGSize(class_ptr, selValueWithSize_Handle, size));
}
[Export("valueWithPoint:")]
public static NSValue FromPoint(CGPoint point)
{
return (NSValue)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_CGPoint(class_ptr, selValueWithPoint_Handle, point));
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_NonretainedObjectValue_var = null;
}
}
}
}