diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CanvasTextLayoutHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CanvasTextLayoutHelper.cs new file mode 100644 index 0000000..27256e5 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CanvasTextLayoutHelper.cs @@ -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); + } + } + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs index cbcf799..4bdd856 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs @@ -130,6 +130,11 @@ namespace BetterLyrics.WinUI3.Helper }; } + public static bool IsCJK(char ch) + { + return IsCJK(ch.ToString()); + } + public static string GetDefaultTargetTranslationLanguageCode() { var found = SupportedTranslationTargetLanguages.Find(x => ApplicationLanguages.Languages.FirstOrDefault()?.Contains(x.LanguageCode) == true); diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs index 245d266..3029a1c 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsLine.cs @@ -143,11 +143,11 @@ namespace BetterLyrics.WinUI3.Models VerticalAlignment = CanvasVerticalAlignment.Top, FontSize = phoneticTextFontSize, FontWeight = fontWeight.ToFontWeight(), - FontFamily = LanguageHelper.IsCJK(PhoneticText) ? fontFamilyCJK : fontFamilyWestern, }, (float)maxWidth, (float)maxHeight) { HorizontalAlignment = type.ToCanvasHorizontalAlignment(), }; + PhoneticCanvasTextLayout.SetFontFamily(PhoneticText, fontFamilyCJK, fontFamilyWestern); } OriginalCanvasTextLayout = new CanvasTextLayout(control, OriginalText, new CanvasTextFormat @@ -156,11 +156,11 @@ namespace BetterLyrics.WinUI3.Models VerticalAlignment = CanvasVerticalAlignment.Top, FontSize = originalTextFontSize, FontWeight = fontWeight.ToFontWeight(), - FontFamily = LanguageHelper.IsCJK(OriginalText) ? fontFamilyCJK : fontFamilyWestern, }, (float)maxWidth, (float)maxHeight) { HorizontalAlignment = type.ToCanvasHorizontalAlignment() }; + OriginalCanvasTextLayout.SetFontFamily(OriginalText, fontFamilyCJK, fontFamilyWestern); if (createTranslated && TranslatedText != "") { @@ -170,11 +170,11 @@ namespace BetterLyrics.WinUI3.Models VerticalAlignment = CanvasVerticalAlignment.Top, FontSize = translatedTextFontSize, FontWeight = fontWeight.ToFontWeight(), - FontFamily = LanguageHelper.IsCJK(TranslatedText) ? fontFamilyCJK : fontFamilyWestern, }, (float)maxWidth, (float)maxHeight) { HorizontalAlignment = type.ToCanvasHorizontalAlignment() }; + TranslatedCanvasTextLayout.SetFontFamily(TranslatedText, fontFamilyCJK, fontFamilyWestern); } }