mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-05 17:37:51 +08:00
171 lines
6.4 KiB
C#
171 lines
6.4 KiB
C#
using CPF.Mac.CoreGraphics;
|
|
using CPF.Mac.Foundation;
|
|
using CPF.Mac.ObjCRuntime;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace CPF.Mac.AppKit
|
|
{
|
|
public static class NSGraphics
|
|
{
|
|
public static readonly double White = 1.0;
|
|
|
|
public static readonly double Black = 0.0;
|
|
|
|
public static readonly double LightGray = 2.0 / 3.0;
|
|
|
|
public static readonly double DarkGray = 0.33333333333333331;
|
|
|
|
public static NSWindowDepth[] AvailableWindowDepths
|
|
{
|
|
get
|
|
{
|
|
IntPtr ptr = NSAvailableWindowDepths();
|
|
int i;
|
|
for (i = 0; Marshal.ReadInt32(ptr, i) != 0; i++)
|
|
{
|
|
}
|
|
NSWindowDepth[] array = new NSWindowDepth[i];
|
|
for (int num = 0; num < i; i++)
|
|
{
|
|
array[num] = (NSWindowDepth)Marshal.ReadInt32(ptr, num);
|
|
}
|
|
return array;
|
|
}
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit")]
|
|
private static extern NSWindowDepth NSBestDepth(IntPtr colorspaceHandle, long bitsPerSample, long bitsPerPixel, bool planar, ref bool exactMatch);
|
|
|
|
public static NSWindowDepth BestDepth(NSString colorspace, long bitsPerSample, long bitsPerPixel, bool planar, ref bool exactMatch)
|
|
{
|
|
if (colorspace == null)
|
|
{
|
|
throw new ArgumentNullException("colorspace");
|
|
}
|
|
return NSBestDepth(colorspace.Handle, bitsPerSample, bitsPerPixel, planar, ref exactMatch);
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit")]
|
|
private static extern int NSPlanarFromDepth(NSWindowDepth depth);
|
|
|
|
public static bool PlanarFromDepth(NSWindowDepth depth)
|
|
{
|
|
return NSPlanarFromDepth(depth) != 0;
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit")]
|
|
private static extern IntPtr NSColorSpaceFromDepth(NSWindowDepth depth);
|
|
|
|
public static NSString ColorSpaceFromDepth(NSWindowDepth depth)
|
|
{
|
|
return new NSString(NSColorSpaceFromDepth(depth));
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSBitsPerSampleFromDepth")]
|
|
public static extern int BitsPerSampleFromDepth(NSWindowDepth depth);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSBitsPerPixelFromDepth")]
|
|
public static extern int BitsPerPixelFromDepth(NSWindowDepth depth);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit")]
|
|
private static extern int NSNumberOfColorComponents(IntPtr str);
|
|
|
|
public static int NumberOfColorComponents(NSString colorspaceName)
|
|
{
|
|
if (colorspaceName == null)
|
|
{
|
|
throw new ArgumentNullException("colorspaceName");
|
|
}
|
|
return NSNumberOfColorComponents(colorspaceName.Handle);
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit")]
|
|
private static extern IntPtr NSAvailableWindowDepths();
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSRectFill")]
|
|
public static extern void RectFill(CGRect rect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSRectFillList")]
|
|
private unsafe static extern void RectFillList(CGRect* rects, int count);
|
|
|
|
public unsafe static void RectFill(CGRect[] rects)
|
|
{
|
|
if (rects == null)
|
|
{
|
|
throw new ArgumentNullException("rects");
|
|
}
|
|
fixed (CGRect* rects2 = &rects[0])
|
|
{
|
|
RectFillList(rects2, rects.Length);
|
|
}
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSRectClip")]
|
|
public static extern void RectClip(CGRect rect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSFrameRect")]
|
|
public static extern void FrameRect(CGRect rect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSFrameRectWithWidth")]
|
|
public static extern void FrameRect(CGRect rect, double frameWidth);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSFrameRectWithWidth")]
|
|
public static extern void FrameRectWithWidth(CGRect rect, double frameWidth);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSFrameRectWithWidthUsingOperation")]
|
|
public static extern void FrameRect(CGRect rect, double frameWidth, NSCompositingOperation operation);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSShowAnimationEffect")]
|
|
public static extern void ShowAnimationEffect(NSAnimationEffect animationEffect, CGPoint centerLocation, CGSize size, NSObject animationDelegate, Selector didEndSelector, IntPtr contextInfo);
|
|
|
|
public static void ShowAnimationEffect(NSAnimationEffect animationEffect, CGPoint centerLocation, CGSize size, NSAction endedCallback)
|
|
{
|
|
NSAsyncActionDispatcher nSAsyncActionDispatcher = new NSAsyncActionDispatcher(endedCallback);
|
|
ShowAnimationEffect(animationEffect, centerLocation, size, nSAsyncActionDispatcher, NSActionDispatcher.Selector, IntPtr.Zero);
|
|
GC.KeepAlive(nSAsyncActionDispatcher);
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSDrawWhiteBezel")]
|
|
public static extern void DrawWhiteBezel(CGRect aRect, CGRect clipRect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSDrawLightBezel")]
|
|
public static extern void DrawLightBezel(CGRect aRect, CGRect clipRect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSDrawGrayBezel")]
|
|
public static extern void DrawGrayBezel(CGRect aRect, CGRect clipRect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSDrawDarkBezel")]
|
|
public static extern void DrawDarkBezel(CGRect aRect, CGRect clipRect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSDrawGroove")]
|
|
public static extern void DrawGroove(CGRect aRect, CGRect clipRect);
|
|
|
|
[DllImport("/System/Library/Frameworks/AppKit.framework/AppKit", EntryPoint = "NSDrawTiledRects")]
|
|
private unsafe static extern CGRect DrawTiledRects(CGRect aRect, CGRect clipRect, NSRectEdge* sides, double* grays, long count);
|
|
|
|
public unsafe static CGRect DrawTiledRects(CGRect aRect, CGRect clipRect, NSRectEdge[] sides, double[] grays)
|
|
{
|
|
if (sides == null)
|
|
{
|
|
throw new ArgumentNullException("sides");
|
|
}
|
|
if (grays == null)
|
|
{
|
|
throw new ArgumentNullException("grays");
|
|
}
|
|
if (sides.Length != grays.Length)
|
|
{
|
|
throw new ArgumentOutOfRangeException("grays", "Both array parameters must have the same length");
|
|
}
|
|
fixed (NSRectEdge* sides2 = &sides[0])
|
|
{
|
|
fixed (double* grays2 = &grays[0])
|
|
{
|
|
return DrawTiledRects(aRect, clipRect, sides2, grays2, sides.Length);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|