Esempio n. 1
0
        public static IntPtr CreateMultiUserData <T1, T2, T3> (T1 wrappedDelegate1, T2 wrappedDelegate2, T3 wrappedDelegate3, object userData, bool makeWeak = false)
            where T1 : Delegate
            where T2 : Delegate
            where T3 : Delegate
        {
            userData = makeWeak ? new WeakReference(userData) : userData;
            var userDataDelegate = new UserDataDelegate(() => userData);

            var del = new GetMultiDelegateDelegate((type) => {
                if (type == typeof(T1))
                {
                    return(wrappedDelegate1);
                }
                if (type == typeof(T2))
                {
                    return(wrappedDelegate2);
                }
                if (type == typeof(T3))
                {
                    return(wrappedDelegate3);
                }
                if (type == typeof(UserDataDelegate))
                {
                    return(userDataDelegate);
                }
                throw new ArgumentOutOfRangeException(nameof(type));
            });

            Create(del, out _, out var ctx);

            return(ctx);
        }
Esempio n. 2
0
        public static IntPtr CreateUserData(object userData, bool makeWeak = false)
        {
            userData = makeWeak ? new WeakReference(userData) : userData;
            var del = new UserDataDelegate(() => userData);

            Create(del, out _, out var ctx);
            return(ctx);
        }
Esempio n. 3
0
        public void SetFontFunctions(FontFunctions fontFunctions, object fontData, ReleaseDelegate destroy)
        {
            _ = fontFunctions ?? throw new ArgumentNullException(nameof(fontFunctions));

            var container      = new FontUserData(this, fontData);
            var actualFontData = new UserDataDelegate(() => container);
            var ctx            = DelegateProxies.CreateMulti(actualFontData, destroy);

            HarfBuzzApi.hb_font_set_funcs(Handle, fontFunctions.Handle, ctx, DelegateProxies.ReleaseDelegateProxyForMulti);
        }
Esempio n. 4
0
        public Face(GetTableDelegate getTable, ReleaseDelegate destroy)
            : this(IntPtr.Zero)
        {
            if (getTable == null)
            {
                throw new ArgumentNullException(nameof(getTable));
            }

            var actualUserData = new UserDataDelegate(() => this);

            Handle = HarfBuzzApi.hb_face_create_for_tables(
                DelegateProxies.GetTableDelegateProxy,
                DelegateProxies.CreateMulti(getTable, actualUserData, destroy),
                DelegateProxies.ReleaseDelegateProxyForMulti);
        }