#nullable disable using SixLabors.Fonts; namespace EllieBot.Services; public class FontProvider : IEService { public FontFamily NotoSans { get; } public FontFamily Symbola { get; } public List<FontFamily> FallBackFonts { get; } private readonly FontCollection _fonts; public FontProvider() { _fonts = new(); NotoSans = _fonts.Add("data/fonts/NotoSans-Bold.ttf"); Symbola = _fonts.Add("data/fonts/Symbola-10.24.ttf"); FallBackFonts = new(); // try loading some emoji and jap fonts on windows as fallback fonts if (Environment.OSVersion.Platform == PlatformID.Win32NT) { try { var fontsfolder = Environment.GetFolderPath(Environment.SpecialFolder.Fonts); FallBackFonts.Add(_fonts.Add(Path.Combine(fontsfolder, "seguiemj.ttf"))); FallBackFonts.AddRange(_fonts.AddCollection(Path.Combine(fontsfolder, "msgothic.ttc"))); FallBackFonts.AddRange(_fonts.AddCollection(Path.Combine(fontsfolder, "segoe.ttc"))); } catch { } } // any fonts present in data/fonts should be added as fallback fonts // this will allow support for special characters when drawing text foreach (var font in Directory.GetFiles(@"data/fonts")) { if (font.EndsWith(".ttf")) FallBackFonts.Add(_fonts.Add(font)); else if (font.EndsWith(".ttc")) FallBackFonts.AddRange(_fonts.AddCollection(font)); } } }