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

324 lines
11 KiB
C#

using CPF.Mac.CoreGraphics;
using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace CPF.Mac.AppKit
{
[Register("NSGradient", true)]
public class NSGradient : NSObject
{
private static IntPtr selInitWithColorsAtLocationsColorSpace = Selector.GetHandle("initWithColors:atLocations:colorSpace:");
private static readonly IntPtr selColorSpaceHandle = Selector.GetHandle("colorSpace");
private static readonly IntPtr selNumberOfColorStopsHandle = Selector.GetHandle("numberOfColorStops");
private static readonly IntPtr selInitWithStartingColorEndingColor_Handle = Selector.GetHandle("initWithStartingColor:endingColor:");
private static readonly IntPtr selInitWithColors_Handle = Selector.GetHandle("initWithColors:");
private static readonly IntPtr selDrawFromPointToPointOptions_Handle = Selector.GetHandle("drawFromPoint:toPoint:options:");
private static readonly IntPtr selDrawInRectAngle_Handle = Selector.GetHandle("drawInRect:angle:");
private static readonly IntPtr selDrawInBezierPathAngle_Handle = Selector.GetHandle("drawInBezierPath:angle:");
private static readonly IntPtr selDrawFromCenterRadiusToCenterRadiusOptions_Handle = Selector.GetHandle("drawFromCenter:radius:toCenter:radius:options:");
private static readonly IntPtr selDrawInRectRelativeCenterPosition_Handle = Selector.GetHandle("drawInRect:relativeCenterPosition:");
private static readonly IntPtr selDrawInBezierPathRelativeCenterPosition_Handle = Selector.GetHandle("drawInBezierPath:relativeCenterPosition:");
private static readonly IntPtr selGetColorLocationAtIndex_Handle = Selector.GetHandle("getColor:location:atIndex:");
private static readonly IntPtr selInterpolatedColorAtLocation_Handle = Selector.GetHandle("interpolatedColorAtLocation:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSGradient");
private object __mt_ColorSpace_var;
public override IntPtr ClassHandle => class_ptr;
public virtual NSColorSpace ColorSpace
{
[Export("colorSpace")]
get
{
NSApplication.EnsureUIThread();
return (NSColorSpace)(__mt_ColorSpace_var = ((!IsDirectBinding) ? ((NSColorSpace)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selColorSpaceHandle))) : ((NSColorSpace)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selColorSpaceHandle)))));
}
}
public virtual long ColorStopsCount
{
[Export("numberOfColorStops")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.Int64_objc_msgSend(base.Handle, selNumberOfColorStopsHandle);
}
return Messaging.Int64_objc_msgSendSuper(base.SuperHandle, selNumberOfColorStopsHandle);
}
}
[Export("initWithColorsAndLocations:")]
public NSGradient(NSColor[] colors, double[] locations)
: this(colors, locations, NSColorSpace.GenericRGBColorSpace)
{
}
[Export("initWithColors:atLocations:colorSpace:")]
public NSGradient(NSColor[] colors, double[] locations, NSColorSpace colorSpace)
: base(NSObjectFlag.Empty)
{
if (colors == null)
{
throw new ArgumentNullException("colors");
}
if (locations == null)
{
throw new ArgumentNullException("locations");
}
if (colorSpace == null)
{
throw new ArgumentNullException("colorSpace");
}
NSArray nSArray = NSArray.FromNSObjects(colors);
IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(locations[0]) * locations.Length);
Marshal.Copy(locations, 0, intPtr, locations.Length);
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_IntPtr(base.Handle, selInitWithColorsAtLocationsColorSpace, nSArray.Handle, intPtr, colorSpace.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr_IntPtr(base.SuperHandle, selInitWithColorsAtLocationsColorSpace, nSArray.Handle, intPtr, colorSpace.Handle);
}
nSArray.Dispose();
Marshal.FreeHGlobal(intPtr);
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSGradient()
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend(base.Handle, Selector.Init);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, Selector.Init);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSGradient(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 NSGradient(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSGradient(IntPtr handle)
: base(handle)
{
}
[Export("initWithStartingColor:endingColor:")]
public NSGradient(NSColor startingColor, NSColor endingColor)
: base(NSObjectFlag.Empty)
{
NSApplication.EnsureUIThread();
if (startingColor == null)
{
throw new ArgumentNullException("startingColor");
}
if (endingColor == null)
{
throw new ArgumentNullException("endingColor");
}
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selInitWithStartingColorEndingColor_Handle, startingColor.Handle, endingColor.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selInitWithStartingColorEndingColor_Handle, startingColor.Handle, endingColor.Handle);
}
}
[Export("initWithColors:")]
public NSGradient(NSColor[] colorArray)
: base(NSObjectFlag.Empty)
{
NSApplication.EnsureUIThread();
if (colorArray == null)
{
throw new ArgumentNullException("colorArray");
}
NSArray nSArray = NSArray.FromNSObjects(colorArray);
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selInitWithColors_Handle, nSArray.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selInitWithColors_Handle, nSArray.Handle);
}
nSArray.Dispose();
}
[Export("drawFromPoint:toPoint:options:")]
public virtual void DrawFromPoint(CGPoint startingPoint, CGPoint endingPoint, NSGradientDrawingOptions options)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_CGPoint_CGPoint_UInt64(base.Handle, selDrawFromPointToPointOptions_Handle, startingPoint, endingPoint, (ulong)options);
}
else
{
Messaging.void_objc_msgSendSuper_CGPoint_CGPoint_UInt64(base.SuperHandle, selDrawFromPointToPointOptions_Handle, startingPoint, endingPoint, (ulong)options);
}
}
[Export("drawInRect:angle:")]
public virtual void DrawInRect(CGRect rect, double angle)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_CGRect_Double(base.Handle, selDrawInRectAngle_Handle, rect, angle);
}
else
{
Messaging.void_objc_msgSendSuper_CGRect_Double(base.SuperHandle, selDrawInRectAngle_Handle, rect, angle);
}
}
[Export("drawInBezierPath:angle:")]
public virtual void DrawInBezierPath(NSBezierPath path, double angle)
{
NSApplication.EnsureUIThread();
if (path == null)
{
throw new ArgumentNullException("path");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr_Double(base.Handle, selDrawInBezierPathAngle_Handle, path.Handle, angle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr_Double(base.SuperHandle, selDrawInBezierPathAngle_Handle, path.Handle, angle);
}
}
[Export("drawFromCenter:radius:toCenter:radius:options:")]
public virtual void DrawFromCenterRadius(CGPoint startCenter, double startRadius, CGPoint endCenter, double endRadius, NSGradientDrawingOptions options)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_CGPoint_Double_CGPoint_Double_UInt64(base.Handle, selDrawFromCenterRadiusToCenterRadiusOptions_Handle, startCenter, startRadius, endCenter, endRadius, (ulong)options);
}
else
{
Messaging.void_objc_msgSendSuper_CGPoint_Double_CGPoint_Double_UInt64(base.SuperHandle, selDrawFromCenterRadiusToCenterRadiusOptions_Handle, startCenter, startRadius, endCenter, endRadius, (ulong)options);
}
}
[Export("drawInRect:relativeCenterPosition:")]
public virtual void DrawInRect(CGRect rect, CGPoint relativeCenterPosition)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_CGRect_CGPoint(base.Handle, selDrawInRectRelativeCenterPosition_Handle, rect, relativeCenterPosition);
}
else
{
Messaging.void_objc_msgSendSuper_CGRect_CGPoint(base.SuperHandle, selDrawInRectRelativeCenterPosition_Handle, rect, relativeCenterPosition);
}
}
[Export("drawInBezierPath:relativeCenterPosition:")]
public virtual void DrawInBezierPath(NSBezierPath path, CGPoint relativeCenterPosition)
{
NSApplication.EnsureUIThread();
if (path == null)
{
throw new ArgumentNullException("path");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr_CGPoint(base.Handle, selDrawInBezierPathRelativeCenterPosition_Handle, path.Handle, relativeCenterPosition);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr_CGPoint(base.SuperHandle, selDrawInBezierPathRelativeCenterPosition_Handle, path.Handle, relativeCenterPosition);
}
}
[Export("getColor:location:atIndex:")]
public virtual void GetColor(out NSColor color, out double location, long index)
{
NSApplication.EnsureUIThread();
IntPtr intPtr = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(intPtr, 0);
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr_out_Double_Int64(base.Handle, selGetColorLocationAtIndex_Handle, intPtr, out location, index);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr_out_Double_Int64(base.SuperHandle, selGetColorLocationAtIndex_Handle, intPtr, out location, index);
}
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
color = ((intPtr2 != IntPtr.Zero) ? ((NSColor)Runtime.GetNSObject(intPtr2)) : null);
Marshal.FreeHGlobal(intPtr);
}
[Export("interpolatedColorAtLocation:")]
public virtual NSColor GetInterpolatedColor(double location)
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return (NSColor)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_Double(base.Handle, selInterpolatedColorAtLocation_Handle, location));
}
return (NSColor)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_Double(base.SuperHandle, selInterpolatedColorAtLocation_Handle, location));
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_ColorSpace_var = null;
}
}
}
}