using System; using System.Collections.Generic; using System.IO; using Quik.Media.Font; namespace Quik.PAL { /// <summary> /// Flags that effect font search criterea. /// </summary> [Flags] public enum FontMatchCriteria { None = 0, Family = 1 << 0, Slant = 1 << 1, Weight = 1 << 2, Stretch = 1 << 3, All = Family | Slant | Weight | Stretch, } /// <summary> /// An abstraction over the system font database. /// </summary> public interface IFontDataBase { /// <summary> /// All the fonts installed in the system. /// </summary> IEnumerable<FontFace> All { get; } public FontFace Serif => GetSystemFontFace(SystemFontFamily.Serif); public FontFace Sans => GetSystemFontFace(SystemFontFamily.Sans); public FontFace Monospace => GetSystemFontFace(SystemFontFamily.Monospace); public FontFace Cursive => GetSystemFontFace(SystemFontFamily.Cursive); public FontFace Fantasy => GetSystemFontFace(SystemFontFamily.Fantasy); /// <summary> /// Search for the given font face. /// </summary> /// <param name="prototype">The font face prototype.</param> /// <param name="criteria">The match criteria</param> /// <returns>A list of fonts sorted by the closest match first.</returns> IEnumerable<FontFace> Search(FontFace prototype, FontMatchCriteria criteria = FontMatchCriteria.All); /// <summary> /// Get the font face file info if it exists. /// </summary> /// <param name="face">The face to look for.</param> /// <returns>The file info if it exists.</returns> FileInfo FontFileInfo(FontFace face); /// <summary> /// Open a font face. /// </summary> /// <param name="face">The font face to open.</param> /// <returns>The stream to the font face.</returns> Stream Open(FontFace face); /// <summary> /// Get a system font family. /// </summary> /// <param name="family">The family type to look up.</param> /// <returns>The name of a font in this family.</returns> FontFace GetSystemFontFace(SystemFontFamily family); } }