public CTFontCollection(CTFontCollectionOptions options)
 {
     handle = CTFontCollectionCreateFromAvailableFonts(
         options == null ? IntPtr.Zero : options.Dictionary.Handle);
     if (handle == IntPtr.Zero)
     {
         throw ConstructorError.Unknown(this);
     }
 }
 public CTFontCollection(CTFontDescriptor[] queryDescriptors, CTFontCollectionOptions options)
 {
     using (var descriptors = queryDescriptors == null
                                 ? null
                                 : CFArray.FromNativeObjects(queryDescriptors))
         handle = CTFontCollectionCreateWithFontDescriptors(
             descriptors == null ? IntPtr.Zero : descriptors.Handle,
             options == null ? IntPtr.Zero : options.Dictionary.Handle);
     if (handle == IntPtr.Zero)
     {
         throw ConstructorError.Unknown(this);
     }
 }
        public CTFontDescriptor [] GetMatchingFontDescriptors(CTFontCollectionOptions options)
        {
            var cfArrayRef = CTFontCollectionCreateMatchingFontDescriptorsWithOptions(handle, options == null ? IntPtr.Zero : options.Dictionary.Handle);

            if (cfArrayRef == IntPtr.Zero)
            {
                return(Array.Empty <CTFontDescriptor> ());
            }
            var matches = NSArray.ArrayFromHandle(cfArrayRef,
                                                  fd => new CTFontDescriptor(fd, false));

            CFObject.CFRelease(cfArrayRef);
            return(matches);
        }
        public CTFontCollection WithFontDescriptors(CTFontDescriptor[] queryDescriptors, CTFontCollectionOptions options)
        {
            IntPtr h;

            using (var descriptors = queryDescriptors == null
                                        ? null
                                        : CFArray.FromNativeObjects(queryDescriptors)) {
                h = CTFontCollectionCreateCopyWithFontDescriptors(
                    handle,
                    descriptors == null ? IntPtr.Zero : descriptors.Handle,
                    options == null ? IntPtr.Zero : options.Dictionary.Handle);
            }
            if (h == IntPtr.Zero)
            {
                return(null);
            }
            return(new CTFontCollection(h, true));
        }