Skip to content

Commit 8ad95df

Browse files
committed
refactor(theme): streamline font fallback logic by introducing FindBaseFontFile method for improved clarity and maintainability
1 parent 588135d commit 8ad95df

1 file changed

Lines changed: 19 additions & 9 deletions

File tree

src/Ui/Shell/Theme/RitsuShellThemeValueCoerce.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -295,15 +295,26 @@ private static bool IsGameLocaleFontResource(Font font)
295295

296296
private static void ApplyGameFallbacks(Font font)
297297
{
298-
switch (font)
298+
var baseFont = FindBaseFontFile(font);
299+
if (baseFont != null)
300+
AddGameFallbacks(baseFont);
301+
}
302+
303+
private static FontFile? FindBaseFontFile(Font font)
304+
{
305+
var visited = new HashSet<Font>(ReferenceEqualityComparer.Instance);
306+
while (visited.Add(font))
299307
{
300-
case FontVariation { BaseFont: FontFile baseFont }:
301-
AddGameFallbacks(baseFont);
302-
break;
303-
case FontFile fontFile:
304-
AddGameFallbacks(fontFile);
305-
break;
308+
if (font is FontFile fontFile)
309+
return fontFile;
310+
311+
if (font is not FontVariation { BaseFont: { } baseFont })
312+
return null;
313+
314+
font = baseFont;
306315
}
316+
317+
return null;
307318
}
308319

309320
private static void AddGameFallbacks(FontFile baseFont)
@@ -329,8 +340,7 @@ private static void AddFontFallbackIfAvailable(FontFile baseFont, Array<Font> ta
329340
if (TryLoadFontResource(path, out var resourceFont))
330341
{
331342
if (ReferenceEquals(resourceFont, baseFont) ||
332-
(resourceFont is FontVariation { BaseFont: FontFile resourceBaseFont } &&
333-
ReferenceEquals(resourceBaseFont, baseFont)))
343+
ReferenceEquals(FindBaseFontFile(resourceFont), baseFont))
334344
return;
335345

336346
target.Add(resourceFont);

0 commit comments

Comments
 (0)