fix(text): group controls and filter font families

Put size and color on one row, place emphasis labels before their toggles, and split the remaining font families into handwriting, symbols, and international groups while omitting legacy dingbat fonts. Text-layer properties follow the existing hierarchical layout and palette conventions.
This commit is contained in:
2026-11-04 17:17:57 -08:00
parent 5f7bcc2425
commit d195c29f79
3 changed files with 115 additions and 31 deletions
+55 -4
View File
@@ -8,8 +8,13 @@ namespace ytLive.ViewModels;
public partial class MainViewModel
{
private static readonly HashSet<string> ExcludedLegacyFontFamilies = new(StringComparer.OrdinalIgnoreCase)
{
"Bookshelf Symbol 7", "Marlett", "Symbol", "Webdings", "Wingdings", "Wingdings 2", "Wingdings 3",
};
private static readonly string[] SystemTextFontFamilies = Fonts.SystemFontFamilies
.Select(font => font.Source)
.Where(font => !ExcludedLegacyFontFamilies.Contains(font))
.Distinct(StringComparer.OrdinalIgnoreCase)
.OrderBy(name => name, StringComparer.CurrentCultureIgnoreCase)
.ToArray();
@@ -26,7 +31,7 @@ public partial class MainViewModel
private string _selectedTextFontType = "Sans Serif";
public IReadOnlyList<string> TextFontTypeOptions { get; } =
new[] { "Sans Serif", "Serif", "Monospace", "Display", "Other" };
new[] { "Sans Serif", "Serif", "Monospace", "Display", "Handwriting", "Symbols", "International", "Other" };
public string SelectedTextFontType
{
@@ -104,18 +109,33 @@ public partial class MainViewModel
|| font.Contains("Terminal", StringComparison.OrdinalIgnoreCase))
return "Monospace";
if (SymbolFonts.Contains(font, StringComparer.OrdinalIgnoreCase)
|| SymbolFontTokens.Any(token => font.Contains(token, StringComparison.OrdinalIgnoreCase)))
return "Symbols";
if (font.Contains("Script", StringComparison.OrdinalIgnoreCase)
|| font.Contains("Hand", StringComparison.OrdinalIgnoreCase)
|| font.Contains("Print", StringComparison.OrdinalIgnoreCase)
|| HandwritingFonts.Contains(font, StringComparer.OrdinalIgnoreCase))
return "Handwriting";
if (InternationalFonts.Contains(font, StringComparer.OrdinalIgnoreCase)
|| InternationalFontTokens.Any(token => font.Contains(token, StringComparison.OrdinalIgnoreCase)))
return "International";
if (SerifFonts.Contains(font, StringComparer.OrdinalIgnoreCase)
|| (font.Contains("Serif", StringComparison.OrdinalIgnoreCase)
&& !font.Contains("Sans", StringComparison.OrdinalIgnoreCase)))
return "Serif";
if (font.Contains("Display", StringComparison.OrdinalIgnoreCase)
|| font.Contains("Script", StringComparison.OrdinalIgnoreCase)
|| DisplayFonts.Contains(font, StringComparer.OrdinalIgnoreCase))
return "Display";
if (font.Contains("Sans", StringComparison.OrdinalIgnoreCase)
|| SansSerifFonts.Contains(font, StringComparer.OrdinalIgnoreCase))
|| SansSerifFonts.Contains(font, StringComparer.OrdinalIgnoreCase)
|| font.StartsWith("Segoe UI", StringComparison.OrdinalIgnoreCase)
|| font.StartsWith("Arial", StringComparison.OrdinalIgnoreCase))
return "Sans Serif";
return "Other";
@@ -130,7 +150,38 @@ public partial class MainViewModel
private static readonly string[] DisplayFonts =
{
"Algerian", "Broadway", "Chiller", "Comic Sans MS", "Cooper Black", "Impact", "Jokerman",
"Magneto", "Papyrus", "Showcard Gothic", "Stencil",
"Magneto", "Showcard Gothic", "Stencil",
};
private static readonly string[] HandwritingFonts =
{
"Bradley Hand ITC", "Brush Script MT", "Edwardian Script ITC", "French Script MT",
"Freestyle Script", "Kunstler Script", "Lucida Handwriting", "Mistral", "Monotype Corsiva",
"Papyrus", "Pristina", "Segoe Print", "Segoe Script", "Viner Hand ITC", "Vladimir Script",
};
private static readonly string[] SymbolFonts =
{
"Segoe MDL2 Assets", "Segoe Fluent Icons", "Segoe UI Symbol", "Segoe UI Emoji",
};
private static readonly string[] SymbolFontTokens =
{
"Emoji", "Icon", "Symbol", "Wingding", "Webding", "Dingbat",
};
private static readonly string[] InternationalFonts =
{
"Batang", "DengXian", "Dotum", "Ebrima", "FangSong", "Gulim", "Hiragino", "KaiTi",
"Leelawadee", "Malgun Gothic", "Meiryo", "MingLiU", "Mongolian", "MS Gothic", "Nirmala UI",
"NSimSun", "PMingLiU", "SimSun", "Yu Gothic", "Yu Mincho",
};
private static readonly string[] InternationalFontTokens =
{
"Arabic", "Armenian", "Bengali", "Canadian Aboriginal", "Cherokee", "Devanagari", "Ethiopic",
"Georgian", "Gujarati", "Gurmukhi", "Hebrew", "Javanese", "Kannada", "Khmer", "Lao",
"Myanmar", "Oriya", "Sinhala", "Syriac", "Tamil", "Telugu", "Thai",
};
private static readonly string[] SansSerifFonts =