これは 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。これをテストしてくれてありがとう!