FontCollection
Provides a base class for installed and private font collections.
using System.Runtime.CompilerServices;
using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.Graphics.GdiPlus;
namespace System.Drawing.Text
{
public abstract class FontCollection : IDisposable, IPointer<GpFontCollection>
{
private unsafe GpFontCollection* _nativeFontCollection;
unsafe IntPtr IPointer<GpFontCollection>.Pointer {
get {
return (IntPtr)_nativeFontCollection;
}
}
[Nullable(1)]
public unsafe FontFamily[] Families {
[NullableContext(1)]
get {
int num = default(int);
PInvokeGdiPlus.GdipGetFontCollectionFamilyCount(_nativeFontCollection, &num).ThrowIfFailed();
if (num == 0)
return Array.Empty<FontFamily>();
bool fromInstalledFontCollection = GetType() == typeof(InstalledFontCollection);
GpFontFamily*[] array = new GpFontFamily*[num];
fixed (GpFontFamily** gpfamilies = array) {
PInvokeGdiPlus.GdipGetFontCollectionFamilyList(_nativeFontCollection, num, gpfamilies, &num).ThrowIfFailed();
}
FontFamily[] array2 = new FontFamily[num];
for (int i = 0; i < num; i++) {
array2[i] = new FontFamily(array[i], fromInstalledFontCollection);
}
GC.KeepAlive(this);
return array2;
}
}
private protected unsafe FontCollection(GpFontCollection* nativeFontCollection)
{
_nativeFontCollection = nativeFontCollection;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected unsafe virtual void Dispose(bool disposing)
{
_nativeFontCollection = null;
}
~FontCollection()
{
Dispose(false);
}
}
}