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); }
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); }
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); }
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); }