mirror of
https://github.com/kwsch/pkNX.git
synced 2026-05-02 10:55:18 -05:00
49 lines
1.6 KiB
C#
49 lines
1.6 KiB
C#
using FontAwesome.Sharp;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Windows.Media;
|
|
|
|
namespace pkNX.WinForms;
|
|
|
|
public static class FormsIconHelper
|
|
{
|
|
private static int UniCode<TEnum>(this TEnum icon)
|
|
where TEnum : struct, IConvertible, IComparable, IFormattable
|
|
{
|
|
return icon.ToInt32(CultureInfo.InvariantCulture);
|
|
}
|
|
|
|
private static readonly string[] FontTitles =
|
|
[
|
|
"Font Awesome 6 Free Regular", // fa-regular-400.ttf
|
|
"Font Awesome 6 Free Solid", // fa-solid-900.ttf
|
|
"Font Awesome 6 Brands Regular", // fa-brands-400.ttf
|
|
];
|
|
|
|
private static readonly Typeface[] Typefaces = typeof(IconHelper).Assembly.LoadTypefaces("fonts", FontTitles);
|
|
|
|
internal static FontFamily FontFor(IconChar iconChar)
|
|
{
|
|
if (IconHelper.Orphans.Contains(iconChar)) return null;
|
|
var typeFace = Typefaces.Find(iconChar.UniCode(), out _, out _);
|
|
return typeFace?.FontFamily;
|
|
}
|
|
|
|
internal static FontFamily FontFamilyFor(this IconChar iconChar, IconFont iconFont)
|
|
{
|
|
if (iconFont == IconFont.Auto) return FontFor(iconChar);
|
|
var key = (int)iconFont;
|
|
if (FontForStyle.TryGetValue(key, out var fontFamily)) return fontFamily;
|
|
|
|
int id = Array.FindIndex(FontTitles, f =>
|
|
f.IndexOf(iconFont.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0);
|
|
|
|
fontFamily = Typefaces[id].FontFamily;
|
|
FontForStyle.Add(key, fontFamily);
|
|
return fontFamily;
|
|
}
|
|
private static readonly Dictionary<int, FontFamily> FontForStyle = [];
|
|
}
|