elliebot/src/EllieBot/_common/Services/Impl/FontProvider.cs

47 lines
1.6 KiB
C#
Raw Normal View History

2024-09-20 23:23:21 +12:00
#nullable disable
using SixLabors.Fonts;
namespace EllieBot.Services;
public class FontProvider : IEService
{
public FontFamily NotoSans { get; }
public FontFamily Symbola { get; }
2024-09-20 23:23:21 +12:00
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");
2024-09-20 23:23:21 +12:00
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
{
}
2024-09-20 23:23:21 +12:00
}
// 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));
}
}
}