A game framework written with osu! in mind.
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
2// See the LICENCE file in the repository root for full licence text.
3
4using System;
5
6namespace osu.Framework.Platform.MacOS.Native
7{
8 internal readonly struct NSPasteboard
9 {
10 internal IntPtr Handle { get; }
11
12 private static readonly IntPtr class_pointer = Class.Get("NSPasteboard");
13 private static readonly IntPtr sel_general_pasteboard = Selector.Get("generalPasteboard");
14 private static readonly IntPtr sel_clear_contents = Selector.Get("clearContents");
15 private static readonly IntPtr sel_can_read_object_for_classes = Selector.Get("canReadObjectForClasses:options:");
16 private static readonly IntPtr sel_read_objects_for_classes = Selector.Get("readObjectsForClasses:options:");
17 private static readonly IntPtr sel_write_objects = Selector.Get("writeObjects:");
18
19 internal NSPasteboard(IntPtr handle)
20 {
21 Handle = handle;
22 }
23
24 internal static NSPasteboard GeneralPasteboard() => new NSPasteboard(Cocoa.SendIntPtr(class_pointer, sel_general_pasteboard));
25
26 internal int ClearContents() => Cocoa.SendInt(Handle, sel_clear_contents);
27
28 internal bool CanReadObjectForClasses(NSArray classArray, NSDictionary? optionDict) =>
29 Cocoa.SendBool(Handle, sel_can_read_object_for_classes, classArray.Handle, optionDict?.Handle ?? IntPtr.Zero);
30
31 internal NSArray? ReadObjectsForClasses(NSArray classArray, NSDictionary? optionDict)
32 {
33 var result = Cocoa.SendIntPtr(Handle, sel_read_objects_for_classes, classArray.Handle, optionDict?.Handle ?? IntPtr.Zero);
34 return result == IntPtr.Zero ? (NSArray?)null : new NSArray(result);
35 }
36
37 internal bool WriteObjects(NSArray objects) => Cocoa.SendBool(Handle, sel_write_objects, objects.Handle);
38 }
39}