fix: Set CJK and latin font family individually

This commit is contained in:
Zhe Fang
2025-11-12 16:20:14 -05:00
parent 7b2abfbe15
commit 008c80c886
3 changed files with 30 additions and 3 deletions

View File

@@ -0,0 +1,22 @@
using Microsoft.Graphics.Canvas.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BetterLyrics.WinUI3.Helper
{
public static class CanvasTextLayoutExtensions
{
public static void SetFontFamily(this CanvasTextLayout? layout, string text, string cjk, string latin)
{
if (layout == null) return;
for (int i = 0; i < text.Length; i++)
{
layout.SetFontFamily(i, 1, LanguageHelper.IsCJK(text[i]) ? cjk : latin);
}
}
}
}

View File

@@ -130,6 +130,11 @@ namespace BetterLyrics.WinUI3.Helper
}; };
} }
public static bool IsCJK(char ch)
{
return IsCJK(ch.ToString());
}
public static string GetDefaultTargetTranslationLanguageCode() public static string GetDefaultTargetTranslationLanguageCode()
{ {
var found = SupportedTranslationTargetLanguages.Find(x => ApplicationLanguages.Languages.FirstOrDefault()?.Contains(x.LanguageCode) == true); var found = SupportedTranslationTargetLanguages.Find(x => ApplicationLanguages.Languages.FirstOrDefault()?.Contains(x.LanguageCode) == true);

View File

@@ -143,11 +143,11 @@ namespace BetterLyrics.WinUI3.Models
VerticalAlignment = CanvasVerticalAlignment.Top, VerticalAlignment = CanvasVerticalAlignment.Top,
FontSize = phoneticTextFontSize, FontSize = phoneticTextFontSize,
FontWeight = fontWeight.ToFontWeight(), FontWeight = fontWeight.ToFontWeight(),
FontFamily = LanguageHelper.IsCJK(PhoneticText) ? fontFamilyCJK : fontFamilyWestern,
}, (float)maxWidth, (float)maxHeight) }, (float)maxWidth, (float)maxHeight)
{ {
HorizontalAlignment = type.ToCanvasHorizontalAlignment(), HorizontalAlignment = type.ToCanvasHorizontalAlignment(),
}; };
PhoneticCanvasTextLayout.SetFontFamily(PhoneticText, fontFamilyCJK, fontFamilyWestern);
} }
OriginalCanvasTextLayout = new CanvasTextLayout(control, OriginalText, new CanvasTextFormat OriginalCanvasTextLayout = new CanvasTextLayout(control, OriginalText, new CanvasTextFormat
@@ -156,11 +156,11 @@ namespace BetterLyrics.WinUI3.Models
VerticalAlignment = CanvasVerticalAlignment.Top, VerticalAlignment = CanvasVerticalAlignment.Top,
FontSize = originalTextFontSize, FontSize = originalTextFontSize,
FontWeight = fontWeight.ToFontWeight(), FontWeight = fontWeight.ToFontWeight(),
FontFamily = LanguageHelper.IsCJK(OriginalText) ? fontFamilyCJK : fontFamilyWestern,
}, (float)maxWidth, (float)maxHeight) }, (float)maxWidth, (float)maxHeight)
{ {
HorizontalAlignment = type.ToCanvasHorizontalAlignment() HorizontalAlignment = type.ToCanvasHorizontalAlignment()
}; };
OriginalCanvasTextLayout.SetFontFamily(OriginalText, fontFamilyCJK, fontFamilyWestern);
if (createTranslated && TranslatedText != "") if (createTranslated && TranslatedText != "")
{ {
@@ -170,11 +170,11 @@ namespace BetterLyrics.WinUI3.Models
VerticalAlignment = CanvasVerticalAlignment.Top, VerticalAlignment = CanvasVerticalAlignment.Top,
FontSize = translatedTextFontSize, FontSize = translatedTextFontSize,
FontWeight = fontWeight.ToFontWeight(), FontWeight = fontWeight.ToFontWeight(),
FontFamily = LanguageHelper.IsCJK(TranslatedText) ? fontFamilyCJK : fontFamilyWestern,
}, (float)maxWidth, (float)maxHeight) }, (float)maxWidth, (float)maxHeight)
{ {
HorizontalAlignment = type.ToCanvasHorizontalAlignment() HorizontalAlignment = type.ToCanvasHorizontalAlignment()
}; };
TranslatedCanvasTextLayout.SetFontFamily(TranslatedText, fontFamilyCJK, fontFamilyWestern);
} }
} }