List<string> NativeFontFamilies()
        {
            if (nativeFontCollection == null)
            {
                var collectionOptions = new CTFontCollectionOptions ();
                collectionOptions.RemoveDuplicates = true;
                nativeFontCollection = new CTFontCollection (collectionOptions);
                nativeFontDescriptors = new Dictionary<string, CTFontDescriptor> ();
            }

            var fontdescs = nativeFontCollection.GetMatchingFontDescriptors ();

            foreach (var fontdesc in fontdescs)
            {
                var font = new CTFont (fontdesc, 0);

                // Just in case RemoveDuplicates collection option is not working
                if (!nativeFontDescriptors.ContainsKey (font.FamilyName))
                {
                    nativeFontDescriptors.Add (font.FamilyName, fontdesc);
                }

            }
            var fontFamilies = new List<string> (nativeFontDescriptors.Keys);

            return fontFamilies;
        }
예제 #2
0
 public CTFontCollection(CTFontCollectionOptions options)
 {
     handle = CTFontCollectionCreateFromAvailableFonts(
         options == null ? IntPtr.Zero : options.Dictionary.Handle);
     if (handle == IntPtr.Zero)
     {
         throw ConstructorError.Unknown(this);
     }
 }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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));
        }
예제 #5
0
		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);
		}
예제 #6
0
		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);
		}
예제 #7
0
		public CTFontCollection (CTFontCollectionOptions options)
		{
			Handle = CTFontCollectionCreateFromAvailableFonts (
					options == null ? IntPtr.Zero : options.Dictionary.Handle);
			if (Handle == IntPtr.Zero)
				throw ConstructorError.Unknown (this);
		}