コード例 #1
0
    public static void Show(
        Color color,
        OnRGBColorSelectedCallback onRGBColorSelectedCallback,
        OnFinishCallback onFinishCallback)
    {
        if (gcHandleForRGBColorSelectedCallback != IntPtr.Zero ||
            gcHandleForColorSelectedCallback != IntPtr.Zero ||
            gcHandleForOnFinishCallback != IntPtr.Zero)
        {
            return;
        }

        OnEarlierIOSVersionsCallback onEarlierIOSVersionsCallback = DoNothing;

        // コールバック関数をGCされないようにAllocしてハンドルを取得する。
        gcHandleForRGBColorSelectedCallback     = (IntPtr)GCHandle.Alloc(onRGBColorSelectedCallback, GCHandleType.Normal);
        gcHandleForOnFinishCallback             = (IntPtr)GCHandle.Alloc(onFinishCallback, GCHandleType.Normal);
        gcHandleForOnEarlierIOSVersionsCallback = (IntPtr)GCHandle.Alloc(onEarlierIOSVersionsCallback, GCHandleType.Normal);

        // 普通の引数 + コールバック関数のハンドル + コールバック関数を呼び出すためのstaticなメソッド
        _CallColorPickerPlugin(
            color.r,
            color.g,
            color.b,
            color.a,
            CallRGBColorSelectedCallback,
            CallOnFinishCallback,
            CallOnEarlierIOSVersionsCallback);
    }
コード例 #2
0
    static void CallRGBColorSelectedCallback(float r, float g, float b, float a)
    {
        GCHandle handle = (GCHandle)gcHandleForRGBColorSelectedCallback;
        OnRGBColorSelectedCallback callback = handle.Target as OnRGBColorSelectedCallback;

        callback(r, g, b, a);
    }