これは C API であるため、単純に P/Invoke を使用してバインドできます。
複合型について:
NSRect
になりますRectangleF
- 例についてNSGraphics.RectClip
はmonomac/src/AppKit/NSGraphics.csを参照してください。
NSImage *
になるIntPtr
- を受け取るコンストラクタを使用して、アドレスを取得するためのプロパティをIntPtr
構築します。Handle
GCFloat
は単にfloat
です。
BOOL
ですbool
(NSGraphics.BestDepth
例については を参照してください)。
- 列挙型に使用
int
します。NSCompositingOperation
したがって、ピースをまとめると、次のようになります。
[DllImport (Constants.AppKitLibrary)]
extern static void NSDrawThreePartImage (RectangleF rect, IntPtr startCap, IntPtr centerFill, IntPtr endCap, bool vertial, int op, float alphaFraction, bool flipped);
public void DrawThreePartImage (RectangleF frame, NSImage startCap, NSImage centerFill, NSImage endCap, bool vertical, NSCompositingOperation op, float alphaFraction, bool flipped)
{
// Or throw ArgumentNullException if NULL is not allowed here
var startCapPtr = startCap != null ? startCap.Handle : IntPtr.Zero;
var centerFillPtr = centerFill != null ? centerFill.Handle : IntPtr.Zero;
var endCapPtr = endCap != null ? endCap.Handle : IntPtr.Zero;
NSDrawThreePartImage (frame, startCapPtr, centerFillPtr, endCapPtr, vertical, (int)op, alphaFraction, flipped);
}
NSDrawNinePartImage
同様の方法で動作するはずです。
コメントアウトされている理由はわかりませんが、実装されていない可能性が高いです。さらに欠品があります。うまくいくかどうかお知らせください。NSCell.cs に追加します。
編集:
これを NSCell.cs に追加しました: https://github.com/mono/monomac/commit/7c60d5756c49331642d2348c7c83320b9ec3f549。これをテストしてくれてありがとう!