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

317 lines
8.9 KiB
C#

using CPF.Mac.CoreGraphics;
using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace CPF.Mac.AppKit
{
[Register("NSScreen", true)]
public class NSScreen : NSObject
{
private static readonly IntPtr selScreensHandle = Selector.GetHandle("screens");
private static readonly IntPtr selMainScreenHandle = Selector.GetHandle("mainScreen");
private static readonly IntPtr selDeepestScreenHandle = Selector.GetHandle("deepestScreen");
private static readonly IntPtr selDepthHandle = Selector.GetHandle("depth");
private static readonly IntPtr selFrameHandle = Selector.GetHandle("frame");
private static readonly IntPtr selVisibleFrameHandle = Selector.GetHandle("visibleFrame");
private static readonly IntPtr selDeviceDescriptionHandle = Selector.GetHandle("deviceDescription");
private static readonly IntPtr selColorSpaceHandle = Selector.GetHandle("colorSpace");
private static readonly IntPtr selUserSpaceScaleFactorHandle = Selector.GetHandle("userSpaceScaleFactor");
private static readonly IntPtr selBackingScaleFactorHandle = Selector.GetHandle("backingScaleFactor");
private static readonly IntPtr selSupportedWindowDepthsHandle = Selector.GetHandle("supportedWindowDepths");
private static readonly IntPtr selConvertRectToBacking_Handle = Selector.GetHandle("convertRectToBacking:");
private static readonly IntPtr selConvertRectFromBacking_Handle = Selector.GetHandle("convertRectFromBacking:");
private static readonly IntPtr selBackingAlignedRectOptions_Handle = Selector.GetHandle("backingAlignedRect:options:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSScreen");
private static object __mt_Screens_var_static;
private static object __mt_MainScreen_var_static;
private static object __mt_DeepestScreen_var_static;
private object __mt_DeviceDescription_var;
private object __mt_ColorSpace_var;
public NSWindowDepth[] SupportedWindowDepths
{
get
{
List<NSWindowDepth> list = new List<NSWindowDepth>();
IntPtr intPtr = GetSupportedWindowDepths();
if (intPtr != IntPtr.Zero)
{
for (int num = Marshal.ReadInt32(intPtr); num != 0; num = Marshal.ReadInt32(intPtr))
{
list.Add((NSWindowDepth)num);
intPtr = (IntPtr)(intPtr.ToInt64() + IntPtr.Size);
}
}
return list.ToArray();
}
}
public override IntPtr ClassHandle => class_ptr;
public static NSScreen[] Screens
{
[Export("screens")]
get
{
NSApplication.EnsureUIThread();
return (NSScreen[])(__mt_Screens_var_static = NSArray.ArrayFromHandle<NSScreen>(Messaging.IntPtr_objc_msgSend(class_ptr, selScreensHandle)));
}
}
public static NSScreen MainScreen
{
[Export("mainScreen")]
get
{
NSApplication.EnsureUIThread();
return (NSScreen)(__mt_MainScreen_var_static = (NSScreen)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selMainScreenHandle)));
}
}
public static NSScreen DeepestScreen
{
[Export("deepestScreen")]
get
{
NSApplication.EnsureUIThread();
return (NSScreen)(__mt_DeepestScreen_var_static = (NSScreen)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selDeepestScreenHandle)));
}
}
public virtual NSWindowDepth Depth
{
[Export("depth")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return (NSWindowDepth)Messaging.Int64_objc_msgSend(base.Handle, selDepthHandle);
}
return (NSWindowDepth)Messaging.Int64_objc_msgSendSuper(base.SuperHandle, selDepthHandle);
}
}
public virtual CGRect Frame
{
[Export("frame")]
get
{
NSApplication.EnsureUIThread();
CGRect retval;
if (IsDirectBinding)
{
Messaging.CGRect_objc_msgSend_stret(out retval, base.Handle, selFrameHandle);
}
else
{
Messaging.CGRect_objc_msgSendSuper_stret(out retval, base.SuperHandle, selFrameHandle);
}
return retval;
}
}
public virtual CGRect VisibleFrame
{
[Export("visibleFrame")]
get
{
NSApplication.EnsureUIThread();
CGRect retval;
if (IsDirectBinding)
{
Messaging.CGRect_objc_msgSend_stret(out retval, base.Handle, selVisibleFrameHandle);
}
else
{
Messaging.CGRect_objc_msgSendSuper_stret(out retval, base.SuperHandle, selVisibleFrameHandle);
}
return retval;
}
}
public virtual NSDictionary DeviceDescription
{
[Export("deviceDescription")]
get
{
NSApplication.EnsureUIThread();
return (NSDictionary)(__mt_DeviceDescription_var = ((!IsDirectBinding) ? ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDeviceDescriptionHandle))) : ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selDeviceDescriptionHandle)))));
}
}
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)))));
}
}
[Obsolete("On Lion", false)]
public virtual double UserSpaceScaleFactor
{
[Export("userSpaceScaleFactor")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.Double_objc_msgSend(base.Handle, selUserSpaceScaleFactorHandle);
}
return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selUserSpaceScaleFactorHandle);
}
}
public virtual double BackingScaleFactor
{
[Export("backingScaleFactor")]
get
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.Double_objc_msgSend(base.Handle, selBackingScaleFactorHandle);
}
return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selBackingScaleFactorHandle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSScreen()
: 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 NSScreen(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 NSScreen(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSScreen(IntPtr handle)
: base(handle)
{
}
[Export("supportedWindowDepths")]
internal virtual IntPtr GetSupportedWindowDepths()
{
NSApplication.EnsureUIThread();
if (IsDirectBinding)
{
return Messaging.IntPtr_objc_msgSend(base.Handle, selSupportedWindowDepthsHandle);
}
return Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSupportedWindowDepthsHandle);
}
[Export("convertRectToBacking:")]
public virtual CGRect ConvertRectToBacking(CGRect aRect)
{
NSApplication.EnsureUIThread();
CGRect retval;
if (IsDirectBinding)
{
Messaging.CGRect_objc_msgSend_stret_CGRect(out retval, base.Handle, selConvertRectToBacking_Handle, aRect);
}
else
{
Messaging.CGRect_objc_msgSendSuper_stret_CGRect(out retval, base.SuperHandle, selConvertRectToBacking_Handle, aRect);
}
return retval;
}
[Export("convertRectFromBacking:")]
public virtual CGRect ConvertRectfromBacking(CGRect aRect)
{
NSApplication.EnsureUIThread();
CGRect retval;
if (IsDirectBinding)
{
Messaging.CGRect_objc_msgSend_stret_CGRect(out retval, base.Handle, selConvertRectFromBacking_Handle, aRect);
}
else
{
Messaging.CGRect_objc_msgSendSuper_stret_CGRect(out retval, base.SuperHandle, selConvertRectFromBacking_Handle, aRect);
}
return retval;
}
[Export("backingAlignedRect:options:")]
public virtual CGRect GetBackingAlignedRect(CGRect globalScreenCoordRect, NSAlignmentOptions options)
{
NSApplication.EnsureUIThread();
CGRect retval;
if (IsDirectBinding)
{
Messaging.CGRect_objc_msgSend_stret_CGRect_UInt64(out retval, base.Handle, selBackingAlignedRectOptions_Handle, globalScreenCoordRect, (ulong)options);
}
else
{
Messaging.CGRect_objc_msgSendSuper_stret_CGRect_UInt64(out retval, base.SuperHandle, selBackingAlignedRectOptions_Handle, globalScreenCoordRect, (ulong)options);
}
return retval;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_DeviceDescription_var = null;
__mt_ColorSpace_var = null;
}
}
}
}