mirror of
https://github.com/jayfunc/BetterLyrics.git
synced 2026-01-12 19:24:55 +08:00
feat: phonetic, original and translated text can be displayed at the same time; support set cjk and western font family individually; phonetic and translated font size can be adjusted
This commit is contained in:
@@ -27,8 +27,9 @@
|
|||||||
<None Remove="Controls\AppSettingsControl.xaml" />
|
<None Remove="Controls\AppSettingsControl.xaml" />
|
||||||
<None Remove="Controls\DemoWindowGrid.xaml" />
|
<None Remove="Controls\DemoWindowGrid.xaml" />
|
||||||
<None Remove="Controls\ExtendedSlider.xaml" />
|
<None Remove="Controls\ExtendedSlider.xaml" />
|
||||||
|
<None Remove="Controls\FontFamilyAutoSuggestBox.xaml" />
|
||||||
<None Remove="Controls\LyricsSearchControl.xaml" />
|
<None Remove="Controls\LyricsSearchControl.xaml" />
|
||||||
<None Remove="Controls\LyricsSettingsControl.xaml" />
|
<None Remove="Controls\LyricsStyleSettingsControl.xaml" />
|
||||||
<None Remove="Controls\LyricsWindowSettingsControl.xaml" />
|
<None Remove="Controls\LyricsWindowSettingsControl.xaml" />
|
||||||
<None Remove="Controls\LyricsWindowSwitchControl.xaml" />
|
<None Remove="Controls\LyricsWindowSwitchControl.xaml" />
|
||||||
<None Remove="Controls\MediaSettingsControl.xaml" />
|
<None Remove="Controls\MediaSettingsControl.xaml" />
|
||||||
@@ -200,6 +201,16 @@
|
|||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Page Update="Controls\FontFamilyAutoSuggestBox.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Page Update="Controls\LyricsStyleSettingsControl.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Update="Views\LyricsWindowSwitchWindow.xaml">
|
<Page Update="Views\LyricsWindowSwitchWindow.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
@@ -241,7 +252,7 @@
|
|||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Update="Controls\LyricsSettingsControl.xaml">
|
<Page Update="Controls\LyricsEffectSettingsControl.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<UserControl
|
||||||
|
x:Class="BetterLyrics.WinUI3.Controls.FontFamilyAutoSuggestBox"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="using:BetterLyrics.WinUI3.Controls"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:ui="using:CommunityToolkit.WinUI"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||||
|
<AutoSuggestBox
|
||||||
|
x:Name="AutoSuggestBox"
|
||||||
|
Width="150"
|
||||||
|
GotFocus="AutoSuggestBox_GotFocus"
|
||||||
|
LostFocus="AutoSuggestBox_LostFocus"
|
||||||
|
SuggestionChosen="AutoSuggestBox_SuggestionChosen"
|
||||||
|
Text="{x:Bind SelectedFontFamily, Mode=OneWay}"
|
||||||
|
TextChanged="AutoSuggestBox_TextChanged" />
|
||||||
|
<Button
|
||||||
|
Click="Button_Click"
|
||||||
|
Content="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
|
||||||
|
FontSize=12,
|
||||||
|
Glyph=}"
|
||||||
|
Style="{StaticResource GhostButtonStyle}" />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
using BetterLyrics.WinUI3.Helper;
|
||||||
|
using BetterLyrics.WinUI3.Models.Settings;
|
||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
using Microsoft.UI.Xaml.Controls;
|
||||||
|
using Microsoft.UI.Xaml.Controls.Primitives;
|
||||||
|
using Microsoft.UI.Xaml.Data;
|
||||||
|
using Microsoft.UI.Xaml.Input;
|
||||||
|
using Microsoft.UI.Xaml.Media;
|
||||||
|
using Microsoft.UI.Xaml.Navigation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices.WindowsRuntime;
|
||||||
|
using Windows.Foundation;
|
||||||
|
using Windows.Foundation.Collections;
|
||||||
|
|
||||||
|
// To learn more about WinUI, the WinUI project structure,
|
||||||
|
// and more about our project templates, see: http://aka.ms/winui-project-info.
|
||||||
|
|
||||||
|
namespace BetterLyrics.WinUI3.Controls
|
||||||
|
{
|
||||||
|
public sealed partial class FontFamilyAutoSuggestBox : UserControl
|
||||||
|
{
|
||||||
|
private List<string> SystemFontNames { get; set; } = [.. FontHelper.SystemFontFamilies];
|
||||||
|
|
||||||
|
public FontFamilyAutoSuggestBox()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty SelectedFontFamilyProperty =
|
||||||
|
DependencyProperty.Register(nameof(SelectedFontFamily), typeof(string), typeof(FontFamilyAutoSuggestBox), new PropertyMetadata(default));
|
||||||
|
|
||||||
|
public string SelectedFontFamily
|
||||||
|
{
|
||||||
|
get => (string)GetValue(SelectedFontFamilyProperty);
|
||||||
|
set => SetValue(SelectedFontFamilyProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
|
||||||
|
{
|
||||||
|
SelectedFontFamily = args.SelectedItem.ToString() ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateAutoSuggestBoxItemsSource()
|
||||||
|
{
|
||||||
|
var suitableItems = new List<string>();
|
||||||
|
var splitText = AutoSuggestBox.Text.ToLower().Split(" ");
|
||||||
|
foreach (var fontFamily in SystemFontNames)
|
||||||
|
{
|
||||||
|
var found = splitText.All((key) =>
|
||||||
|
{
|
||||||
|
return fontFamily.ToLower().Contains(key);
|
||||||
|
});
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
suitableItems.Add(fontFamily);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (suitableItems.Count == 0)
|
||||||
|
{
|
||||||
|
suitableItems.Add("N/A");
|
||||||
|
}
|
||||||
|
AutoSuggestBox.ItemsSource = suitableItems.Order();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
|
||||||
|
{
|
||||||
|
// Since selecting an item will also change the text,
|
||||||
|
// only listen to changes caused by user entering text.
|
||||||
|
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
|
||||||
|
{
|
||||||
|
UpdateAutoSuggestBoxItemsSource();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
SystemFontNames = [.. FontHelper.SystemFontFamilies];
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
UpdateAutoSuggestBoxItemsSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
AutoSuggestBox.Text = SelectedFontFamily;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<UserControl
|
<UserControl
|
||||||
x:Class="BetterLyrics.WinUI3.Controls.LyricsSettingsControl"
|
x:Class="BetterLyrics.WinUI3.Controls.LyricsEffectSettingsControl"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
|
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
|
||||||
@@ -16,203 +16,6 @@
|
|||||||
<Grid Style="{StaticResource SettingsGridStyle}">
|
<Grid Style="{StaticResource SettingsGridStyle}">
|
||||||
<StackPanel Spacing="{StaticResource SettingsCardSpacing}">
|
<StackPanel Spacing="{StaticResource SettingsCardSpacing}">
|
||||||
|
|
||||||
<!-- Lyrics style -->
|
|
||||||
|
|
||||||
<TextBlock x:Uid="SettingsPageLyricsStyle" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" />
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsAlignment" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsAlignmentType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsLeft" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsCenter" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsRight" />
|
|
||||||
</ComboBox>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsFontFamily" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<ComboBox ItemsSource="{x:Bind SystemFontNames, Mode=OneWay}" SelectedItem="{x:Bind LyricsStyleSettings.LyricsFontFamily, Mode=TwoWay}">
|
|
||||||
<ComboBox.ItemTemplate>
|
|
||||||
<DataTemplate>
|
|
||||||
<TextBlock Text="{Binding}" />
|
|
||||||
</DataTemplate>
|
|
||||||
</ComboBox.ItemTemplate>
|
|
||||||
</ComboBox>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsFontWeight" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsFontWeight, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsThin" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsExtraLight" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsLight" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsSemiLight" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsNormal" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsMedium" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsSemiBold" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsBold" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsExtraBold" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsBlack" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsExtraBlack" />
|
|
||||||
</ComboBox>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsBgFontOpacity" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<local:ExtendedSlider
|
|
||||||
Default="30"
|
|
||||||
Frequency="1"
|
|
||||||
Maximum="100"
|
|
||||||
Minimum="0"
|
|
||||||
Unit="%"
|
|
||||||
Value="{x:Bind LyricsStyleSettings.LyricsBgFontOpacity, Mode=TwoWay}" />
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsFontStrokeWidth" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<local:ExtendedSlider
|
|
||||||
Default="0"
|
|
||||||
Frequency="1"
|
|
||||||
Maximum="5"
|
|
||||||
Minimum="0"
|
|
||||||
Value="{x:Bind LyricsStyleSettings.LyricsFontStrokeWidth, Mode=TwoWay}" />
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsStrokeFontColor" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsStrokeFontColorType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveColored" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveGrayed" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorCustom" />
|
|
||||||
</ComboBox>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<ColorPicker
|
|
||||||
ColorSpectrumShape="Box"
|
|
||||||
IsAlphaEnabled="True"
|
|
||||||
IsAlphaSliderVisible="True"
|
|
||||||
IsAlphaTextInputVisible="True"
|
|
||||||
IsColorChannelTextInputVisible="True"
|
|
||||||
IsColorSliderVisible="True"
|
|
||||||
IsHexInputVisible="True"
|
|
||||||
IsMoreButtonVisible="True"
|
|
||||||
Color="{x:Bind LyricsStyleSettings.LyricsCustomStrokeFontColor, Mode=TwoWay}">
|
|
||||||
<interactivity:Interaction.Behaviors>
|
|
||||||
<interactivity:DataTriggerBehavior
|
|
||||||
Binding="{x:Bind LyricsStyleSettings.LyricsStrokeFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
|
||||||
ComparisonCondition="Equal"
|
|
||||||
Value="2">
|
|
||||||
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Visible" />
|
|
||||||
</interactivity:DataTriggerBehavior>
|
|
||||||
<interactivity:DataTriggerBehavior
|
|
||||||
Binding="{x:Bind LyricsStyleSettings.LyricsStrokeFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
|
||||||
ComparisonCondition="NotEqual"
|
|
||||||
Value="2">
|
|
||||||
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
|
|
||||||
</interactivity:DataTriggerBehavior>
|
|
||||||
</interactivity:Interaction.Behaviors>
|
|
||||||
</ColorPicker>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsBgFontColor" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsBgFontColorType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveColored" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveGrayed" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorCustom" />
|
|
||||||
</ComboBox>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<ColorPicker
|
|
||||||
ColorSpectrumShape="Box"
|
|
||||||
IsAlphaEnabled="True"
|
|
||||||
IsAlphaSliderVisible="True"
|
|
||||||
IsAlphaTextInputVisible="True"
|
|
||||||
IsColorChannelTextInputVisible="True"
|
|
||||||
IsColorSliderVisible="True"
|
|
||||||
IsHexInputVisible="True"
|
|
||||||
IsMoreButtonVisible="True"
|
|
||||||
Color="{x:Bind LyricsStyleSettings.LyricsCustomBgFontColor, Mode=TwoWay}">
|
|
||||||
<interactivity:Interaction.Behaviors>
|
|
||||||
<interactivity:DataTriggerBehavior
|
|
||||||
Binding="{x:Bind LyricsStyleSettings.LyricsBgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
|
||||||
ComparisonCondition="Equal"
|
|
||||||
Value="2">
|
|
||||||
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Visible" />
|
|
||||||
</interactivity:DataTriggerBehavior>
|
|
||||||
<interactivity:DataTriggerBehavior
|
|
||||||
Binding="{x:Bind LyricsStyleSettings.LyricsBgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
|
||||||
ComparisonCondition="NotEqual"
|
|
||||||
Value="2">
|
|
||||||
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
|
|
||||||
</interactivity:DataTriggerBehavior>
|
|
||||||
</interactivity:Interaction.Behaviors>
|
|
||||||
</ColorPicker>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsFgFontColor" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsFgFontColorType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveColored" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveGrayed" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorCustom" />
|
|
||||||
</ComboBox>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<ColorPicker
|
|
||||||
ColorSpectrumShape="Box"
|
|
||||||
IsAlphaEnabled="True"
|
|
||||||
IsAlphaSliderVisible="True"
|
|
||||||
IsAlphaTextInputVisible="True"
|
|
||||||
IsColorChannelTextInputVisible="True"
|
|
||||||
IsColorSliderVisible="True"
|
|
||||||
IsHexInputVisible="True"
|
|
||||||
IsMoreButtonVisible="True"
|
|
||||||
Color="{x:Bind LyricsStyleSettings.LyricsCustomFgFontColor, Mode=TwoWay}">
|
|
||||||
<interactivity:Interaction.Behaviors>
|
|
||||||
<interactivity:DataTriggerBehavior
|
|
||||||
Binding="{x:Bind LyricsStyleSettings.LyricsFgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
|
||||||
ComparisonCondition="Equal"
|
|
||||||
Value="2">
|
|
||||||
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Visible" />
|
|
||||||
</interactivity:DataTriggerBehavior>
|
|
||||||
<interactivity:DataTriggerBehavior
|
|
||||||
Binding="{x:Bind LyricsStyleSettings.LyricsFgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
|
||||||
ComparisonCondition="NotEqual"
|
|
||||||
Value="2">
|
|
||||||
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
|
|
||||||
</interactivity:DataTriggerBehavior>
|
|
||||||
</interactivity:Interaction.Behaviors>
|
|
||||||
</ColorPicker>
|
|
||||||
|
|
||||||
<controls:SettingsExpander
|
|
||||||
x:Uid="SettingsPageLyricsFontSize"
|
|
||||||
HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
|
|
||||||
Glyph=}"
|
|
||||||
IsExpanded="True">
|
|
||||||
<controls:SettingsExpander.Items>
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageAutoAdjust">
|
|
||||||
<ToggleSwitch IsOn="{x:Bind LyricsStyleSettings.IsDynamicLyricsFontSize, Mode=TwoWay}" />
|
|
||||||
</controls:SettingsCard>
|
|
||||||
<controls:SettingsCard IsEnabled="{x:Bind LyricsStyleSettings.IsDynamicLyricsFontSize, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}">
|
|
||||||
<local:ExtendedSlider
|
|
||||||
Frequency="2"
|
|
||||||
Maximum="96"
|
|
||||||
Minimum="12"
|
|
||||||
ResetButtonVisibility="Collapsed"
|
|
||||||
Value="{x:Bind LyricsStyleSettings.LyricsFontSize, Mode=TwoWay}" />
|
|
||||||
</controls:SettingsCard>
|
|
||||||
</controls:SettingsExpander.Items>
|
|
||||||
</controls:SettingsExpander>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsLineSpacingFactor" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<local:ExtendedSlider
|
|
||||||
x:Uid="SettingsPageLyricsLineSpacingFactorSlider"
|
|
||||||
Default="0.5"
|
|
||||||
Frequency="0.1"
|
|
||||||
Maximum="2"
|
|
||||||
Minimum="0"
|
|
||||||
Unit="x"
|
|
||||||
Value="{x:Bind LyricsStyleSettings.LyricsLineSpacingFactor, Mode=TwoWay}" />
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageLyricsTranslationSeparator" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="6">
|
|
||||||
<TextBox AcceptsReturn="True" Text="{x:Bind LyricsStyleSettings.LyricsTranslationSeparator, Mode=TwoWay}" />
|
|
||||||
<Button Content="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, FontSize=12, Glyph=}" Style="{StaticResource GhostButtonStyle}" />
|
|
||||||
</StackPanel>
|
|
||||||
</controls:SettingsCard>
|
|
||||||
|
|
||||||
<!-- Effect -->
|
<!-- Effect -->
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
@@ -245,44 +48,48 @@
|
|||||||
<ToggleSwitch IsOn="{x:Bind LyricsEffectSettings.IsLyricsLineFadeEnabled, Mode=TwoWay}" />
|
<ToggleSwitch IsOn="{x:Bind LyricsEffectSettings.IsLyricsLineFadeEnabled, Mode=TwoWay}" />
|
||||||
</controls:SettingsCard>
|
</controls:SettingsCard>
|
||||||
|
|
||||||
<!-- 译文高亮 -->
|
<!-- 高亮 -->
|
||||||
<controls:SettingsExpander
|
<controls:SettingsExpander x:Uid="SettingsPageLyricsHighlight" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
x:Uid="SettingsPageLyricsTranslationHighlight"
|
|
||||||
HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
|
|
||||||
Glyph=}"
|
|
||||||
IsExpanded="True">
|
|
||||||
<controls:SettingsExpander.Items>
|
<controls:SettingsExpander.Items>
|
||||||
<controls:SettingsCard x:Uid="SettingsPageAmount">
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPagePhoneticText">
|
||||||
<local:ExtendedSlider
|
<local:ExtendedSlider
|
||||||
Default="60"
|
Default="60"
|
||||||
Frequency="5"
|
Frequency="5"
|
||||||
Maximum="100"
|
Maximum="100"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Value="{x:Bind LyricsEffectSettings.LyricsTranslationHighlightAmount, Mode=TwoWay}" />
|
Unit="%"
|
||||||
|
Value="{x:Bind LyricsEffectSettings.PhoneticLyricsHighlightAmount, Mode=TwoWay}" />
|
||||||
</controls:SettingsCard>
|
</controls:SettingsCard>
|
||||||
</controls:SettingsExpander.Items>
|
|
||||||
</controls:SettingsExpander>
|
|
||||||
|
|
||||||
<!-- 原文高亮 -->
|
<controls:SettingsCard x:Uid="SettingsPageLyricsHighlightScope">
|
||||||
<controls:SettingsExpander
|
<ComboBox SelectedIndex="{x:Bind LyricsEffectSettings.OriginalLyricsHighlightScope, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
x:Uid="SettingsPageLyricsHighlightScope"
|
<ComboBoxItem x:Uid="SettingsPageLyricsRendingScopeCurrentChar" />
|
||||||
HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
|
<ComboBoxItem x:Uid="SettingsPageLyricsRendingScopeLineStartToCurrentChar" />
|
||||||
Glyph=}"
|
<ComboBoxItem x:Uid="SettingsPageLyricsRendingScopeCurrentLine" />
|
||||||
IsExpanded="True">
|
</ComboBox>
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsEffectSettings.LyricsHighlightScope, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
</controls:SettingsCard>
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsRendingScopeCurrentChar" />
|
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsRendingScopeLineStartToCurrentChar" />
|
<controls:SettingsCard x:Uid="SettingsPageOriginalText">
|
||||||
<ComboBoxItem x:Uid="SettingsPageLyricsRendingScopeCurrentLine" />
|
|
||||||
</ComboBox>
|
|
||||||
<controls:SettingsExpander.Items>
|
|
||||||
<controls:SettingsCard x:Uid="SettingsPageAmount">
|
|
||||||
<local:ExtendedSlider
|
<local:ExtendedSlider
|
||||||
Default="100"
|
Default="60"
|
||||||
Frequency="5"
|
Frequency="5"
|
||||||
Maximum="100"
|
Maximum="100"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Value="{x:Bind LyricsEffectSettings.LyricsHighlightAmount, Mode=TwoWay}" />
|
Unit="%"
|
||||||
|
Value="{x:Bind LyricsEffectSettings.OriginalLyricsHighlightAmount, Mode=TwoWay}" />
|
||||||
</controls:SettingsCard>
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageTranslatedText">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
Default="60"
|
||||||
|
Frequency="5"
|
||||||
|
Maximum="100"
|
||||||
|
Minimum="0"
|
||||||
|
Unit="%"
|
||||||
|
Value="{x:Bind LyricsEffectSettings.TranslatedLyricsHighlightAmount, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
</controls:SettingsExpander.Items>
|
</controls:SettingsExpander.Items>
|
||||||
</controls:SettingsExpander>
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
@@ -426,11 +233,7 @@
|
|||||||
</controls:SettingsExpander>
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
<!-- 滚动动画 -->
|
<!-- 滚动动画 -->
|
||||||
<controls:SettingsExpander
|
<controls:SettingsExpander x:Uid="SettingsPageScrollEasing" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
x:Uid="SettingsPageScrollEasing"
|
|
||||||
HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily},
|
|
||||||
Glyph=}"
|
|
||||||
IsExpanded="True">
|
|
||||||
<ComboBox SelectedIndex="{x:Bind LyricsEffectSettings.LyricsScrollEasingType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
<ComboBox SelectedIndex="{x:Bind LyricsEffectSettings.LyricsScrollEasingType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
<ComboBoxItem x:Uid="SettingsPageEasingTypeLinear" />
|
<ComboBoxItem x:Uid="SettingsPageEasingTypeLinear" />
|
||||||
<ComboBoxItem x:Uid="SettingsPageEasingTypeSmoothStep" />
|
<ComboBoxItem x:Uid="SettingsPageEasingTypeSmoothStep" />
|
||||||
@@ -21,27 +21,15 @@ using Windows.Foundation.Collections;
|
|||||||
|
|
||||||
namespace BetterLyrics.WinUI3.Controls
|
namespace BetterLyrics.WinUI3.Controls
|
||||||
{
|
{
|
||||||
public sealed partial class LyricsSettingsControl : UserControl
|
public sealed partial class LyricsEffectSettingsControl : UserControl
|
||||||
{
|
{
|
||||||
public ObservableCollection<string> SystemFontNames { get; set; } = [.. FontHelper.SystemFontFamilies];
|
public LyricsEffectSettingsControl()
|
||||||
|
|
||||||
public LyricsSettingsControl()
|
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly DependencyProperty LyricsStyleSettingsProperty =
|
|
||||||
DependencyProperty.Register(nameof(LyricsStyleSettings), typeof(LyricsStyleSettings), typeof(LyricsSettingsControl), new PropertyMetadata(default));
|
|
||||||
|
|
||||||
public LyricsStyleSettings LyricsStyleSettings
|
|
||||||
{
|
|
||||||
get => (LyricsStyleSettings)GetValue(LyricsStyleSettingsProperty);
|
|
||||||
set => SetValue(LyricsStyleSettingsProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static readonly DependencyProperty LyricsEffectSettingsProperty =
|
public static readonly DependencyProperty LyricsEffectSettingsProperty =
|
||||||
DependencyProperty.Register(nameof(LyricsEffectSettings), typeof(LyricsEffectSettings), typeof(LyricsSettingsControl), new PropertyMetadata(default));
|
DependencyProperty.Register(nameof(LyricsEffectSettings), typeof(LyricsEffectSettings), typeof(LyricsEffectSettingsControl), new PropertyMetadata(default));
|
||||||
|
|
||||||
public LyricsEffectSettings LyricsEffectSettings
|
public LyricsEffectSettings LyricsEffectSettings
|
||||||
{
|
{
|
||||||
@@ -0,0 +1,241 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<UserControl
|
||||||
|
x:Class="BetterLyrics.WinUI3.Controls.LyricsStyleSettingsControl"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:controls="using:CommunityToolkit.WinUI.Controls"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
||||||
|
xmlns:local="using:BetterLyrics.WinUI3.Controls"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:ui="using:CommunityToolkit.WinUI"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
<ScrollViewer Style="{StaticResource SettingsScrollViewerStyle}">
|
||||||
|
<Grid Style="{StaticResource SettingsGridStyle}">
|
||||||
|
<StackPanel Spacing="{StaticResource SettingsCardSpacing}">
|
||||||
|
|
||||||
|
<!-- Lyrics style -->
|
||||||
|
|
||||||
|
<TextBlock x:Uid="SettingsPageLyricsStyle" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" />
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsAlignment" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsAlignmentType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsLeft" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsCenter" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsRight" />
|
||||||
|
</ComboBox>
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsExpander x:Uid="SettingsPageLyricsFontFamily" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<controls:SettingsExpander.Items>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageCJK">
|
||||||
|
<local:FontFamilyAutoSuggestBox SelectedFontFamily="{x:Bind LyricsStyleSettings.LyricsCJKFontFamily, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageWesternChar">
|
||||||
|
<local:FontFamilyAutoSuggestBox SelectedFontFamily="{x:Bind LyricsStyleSettings.LyricsWesternFontFamily, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
</controls:SettingsExpander.Items>
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsFontWeight" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsFontWeight, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsThin" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsExtraLight" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsLight" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsSemiLight" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsNormal" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsMedium" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsSemiBold" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsBold" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsExtraBold" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsBlack" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsExtraBlack" />
|
||||||
|
</ComboBox>
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsBgFontOpacity" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
Default="30"
|
||||||
|
Frequency="1"
|
||||||
|
Maximum="100"
|
||||||
|
Minimum="0"
|
||||||
|
Unit="%"
|
||||||
|
Value="{x:Bind LyricsStyleSettings.LyricsBgFontOpacity, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsFontStrokeWidth" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
Default="0"
|
||||||
|
Frequency="1"
|
||||||
|
Maximum="5"
|
||||||
|
Minimum="0"
|
||||||
|
Value="{x:Bind LyricsStyleSettings.LyricsFontStrokeWidth, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<!-- 字体颜色 -->
|
||||||
|
<controls:SettingsExpander x:Uid="SettingsPageFontColor" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<controls:SettingsExpander.Items>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageStrokeFontColor">
|
||||||
|
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsStrokeFontColorType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveColored" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveGrayed" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorCustom" />
|
||||||
|
</ComboBox>
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard HorizontalContentAlignment="Left">
|
||||||
|
<interactivity:Interaction.Behaviors>
|
||||||
|
<interactivity:DataTriggerBehavior
|
||||||
|
Binding="{x:Bind LyricsStyleSettings.LyricsStrokeFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
||||||
|
ComparisonCondition="Equal"
|
||||||
|
Value="2">
|
||||||
|
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Visible" />
|
||||||
|
</interactivity:DataTriggerBehavior>
|
||||||
|
<interactivity:DataTriggerBehavior
|
||||||
|
Binding="{x:Bind LyricsStyleSettings.LyricsStrokeFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
||||||
|
ComparisonCondition="NotEqual"
|
||||||
|
Value="2">
|
||||||
|
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
|
||||||
|
</interactivity:DataTriggerBehavior>
|
||||||
|
</interactivity:Interaction.Behaviors>
|
||||||
|
<ColorPicker
|
||||||
|
ColorSpectrumShape="Box"
|
||||||
|
IsAlphaEnabled="True"
|
||||||
|
IsAlphaSliderVisible="True"
|
||||||
|
IsAlphaTextInputVisible="True"
|
||||||
|
IsColorChannelTextInputVisible="True"
|
||||||
|
IsColorSliderVisible="True"
|
||||||
|
IsHexInputVisible="True"
|
||||||
|
IsMoreButtonVisible="True"
|
||||||
|
Color="{x:Bind LyricsStyleSettings.LyricsCustomStrokeFontColor, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsBgFontColor">
|
||||||
|
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsBgFontColorType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveColored" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveGrayed" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorCustom" />
|
||||||
|
</ComboBox>
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard>
|
||||||
|
<interactivity:Interaction.Behaviors>
|
||||||
|
<interactivity:DataTriggerBehavior
|
||||||
|
Binding="{x:Bind LyricsStyleSettings.LyricsBgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
||||||
|
ComparisonCondition="Equal"
|
||||||
|
Value="2">
|
||||||
|
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Visible" />
|
||||||
|
</interactivity:DataTriggerBehavior>
|
||||||
|
<interactivity:DataTriggerBehavior
|
||||||
|
Binding="{x:Bind LyricsStyleSettings.LyricsBgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
||||||
|
ComparisonCondition="NotEqual"
|
||||||
|
Value="2">
|
||||||
|
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
|
||||||
|
</interactivity:DataTriggerBehavior>
|
||||||
|
</interactivity:Interaction.Behaviors>
|
||||||
|
<ColorPicker
|
||||||
|
ColorSpectrumShape="Box"
|
||||||
|
IsAlphaEnabled="True"
|
||||||
|
IsAlphaSliderVisible="True"
|
||||||
|
IsAlphaTextInputVisible="True"
|
||||||
|
IsColorChannelTextInputVisible="True"
|
||||||
|
IsColorSliderVisible="True"
|
||||||
|
IsHexInputVisible="True"
|
||||||
|
IsMoreButtonVisible="True"
|
||||||
|
Color="{x:Bind LyricsStyleSettings.LyricsCustomBgFontColor, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsFgFontColor">
|
||||||
|
<ComboBox SelectedIndex="{x:Bind LyricsStyleSettings.LyricsFgFontColorType, Mode=TwoWay, Converter={StaticResource EnumToIntConverter}}">
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveColored" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorAdaptiveGrayed" />
|
||||||
|
<ComboBoxItem x:Uid="SettingsPageLyricsFontColorCustom" />
|
||||||
|
</ComboBox>
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard>
|
||||||
|
<interactivity:Interaction.Behaviors>
|
||||||
|
<interactivity:DataTriggerBehavior
|
||||||
|
Binding="{x:Bind LyricsStyleSettings.LyricsFgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
||||||
|
ComparisonCondition="Equal"
|
||||||
|
Value="2">
|
||||||
|
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Visible" />
|
||||||
|
</interactivity:DataTriggerBehavior>
|
||||||
|
<interactivity:DataTriggerBehavior
|
||||||
|
Binding="{x:Bind LyricsStyleSettings.LyricsFgFontColorType, Mode=OneWay, Converter={StaticResource EnumToIntConverter}}"
|
||||||
|
ComparisonCondition="NotEqual"
|
||||||
|
Value="2">
|
||||||
|
<interactivity:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
|
||||||
|
</interactivity:DataTriggerBehavior>
|
||||||
|
</interactivity:Interaction.Behaviors>
|
||||||
|
<ColorPicker
|
||||||
|
ColorSpectrumShape="Box"
|
||||||
|
IsAlphaEnabled="True"
|
||||||
|
IsAlphaSliderVisible="True"
|
||||||
|
IsAlphaTextInputVisible="True"
|
||||||
|
IsColorChannelTextInputVisible="True"
|
||||||
|
IsColorSliderVisible="True"
|
||||||
|
IsHexInputVisible="True"
|
||||||
|
IsMoreButtonVisible="True"
|
||||||
|
Color="{x:Bind LyricsStyleSettings.LyricsCustomFgFontColor, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
</controls:SettingsExpander.Items>
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
<controls:SettingsExpander x:Uid="SettingsPageLyricsFontSize" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<controls:SettingsExpander.Items>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageAutoAdjust">
|
||||||
|
<ToggleSwitch IsOn="{x:Bind LyricsStyleSettings.IsDynamicLyricsFontSize, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPagePhoneticText" IsEnabled="{x:Bind LyricsStyleSettings.IsDynamicLyricsFontSize, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
Frequency="2"
|
||||||
|
Maximum="96"
|
||||||
|
Minimum="12"
|
||||||
|
ResetButtonVisibility="Collapsed"
|
||||||
|
Value="{x:Bind LyricsStyleSettings.PhoneticLyricsFontSize, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageOriginalText" IsEnabled="{x:Bind LyricsStyleSettings.IsDynamicLyricsFontSize, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
Frequency="2"
|
||||||
|
Maximum="96"
|
||||||
|
Minimum="12"
|
||||||
|
ResetButtonVisibility="Collapsed"
|
||||||
|
Value="{x:Bind LyricsStyleSettings.OriginalLyricsFontSize, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageTranslatedText" IsEnabled="{x:Bind LyricsStyleSettings.IsDynamicLyricsFontSize, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
Frequency="2"
|
||||||
|
Maximum="96"
|
||||||
|
Minimum="12"
|
||||||
|
ResetButtonVisibility="Collapsed"
|
||||||
|
Value="{x:Bind LyricsStyleSettings.TranslatedLyricsFontSize, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
</controls:SettingsExpander.Items>
|
||||||
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsLineSpacingFactor" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<local:ExtendedSlider
|
||||||
|
x:Uid="SettingsPageLyricsLineSpacingFactorSlider"
|
||||||
|
Default="0.5"
|
||||||
|
Frequency="0.1"
|
||||||
|
Maximum="2"
|
||||||
|
Minimum="0"
|
||||||
|
Unit="x"
|
||||||
|
Value="{x:Bind LyricsStyleSettings.LyricsLineSpacingFactor, Mode=TwoWay}" />
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
<controls:SettingsCard x:Uid="SettingsPageLyricsTranslationSeparator" HeaderIcon="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, Glyph=}">
|
||||||
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||||
|
<TextBox AcceptsReturn="True" Text="{x:Bind LyricsStyleSettings.LyricsTranslationSeparator, Mode=TwoWay}" />
|
||||||
|
<Button Content="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, FontSize=12, Glyph=}" Style="{StaticResource GhostButtonStyle}" />
|
||||||
|
</StackPanel>
|
||||||
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</ScrollViewer>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
using BetterLyrics.WinUI3.Helper;
|
||||||
|
using BetterLyrics.WinUI3.Models.Settings;
|
||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
using Microsoft.UI.Xaml.Controls;
|
||||||
|
using Microsoft.UI.Xaml.Controls.Primitives;
|
||||||
|
using Microsoft.UI.Xaml.Data;
|
||||||
|
using Microsoft.UI.Xaml.Input;
|
||||||
|
using Microsoft.UI.Xaml.Media;
|
||||||
|
using Microsoft.UI.Xaml.Navigation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices.WindowsRuntime;
|
||||||
|
using Windows.Foundation;
|
||||||
|
using Windows.Foundation.Collections;
|
||||||
|
|
||||||
|
// To learn more about WinUI, the WinUI project structure,
|
||||||
|
// and more about our project templates, see: http://aka.ms/winui-project-info.
|
||||||
|
|
||||||
|
namespace BetterLyrics.WinUI3.Controls
|
||||||
|
{
|
||||||
|
public sealed partial class LyricsStyleSettingsControl : UserControl
|
||||||
|
{
|
||||||
|
public LyricsStyleSettingsControl()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty LyricsStyleSettingsProperty =
|
||||||
|
DependencyProperty.Register(nameof(LyricsStyleSettings), typeof(LyricsStyleSettings), typeof(LyricsStyleSettingsControl), new PropertyMetadata(default));
|
||||||
|
|
||||||
|
public LyricsStyleSettings LyricsStyleSettings
|
||||||
|
{
|
||||||
|
get => (LyricsStyleSettings)GetValue(LyricsStyleSettingsProperty);
|
||||||
|
set => SetValue(LyricsStyleSettingsProperty, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -268,9 +268,14 @@
|
|||||||
<uc:AlbumArtLayoutSettingsControl AlbumArtLayoutSettings="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.AlbumArtLayoutSettings, Mode=OneWay}" />
|
<uc:AlbumArtLayoutSettingsControl AlbumArtLayoutSettings="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.AlbumArtLayoutSettings, Mode=OneWay}" />
|
||||||
</controls:Case>
|
</controls:Case>
|
||||||
|
|
||||||
<!-- Lyrics style and effect -->
|
<!-- Lyrics style -->
|
||||||
<controls:Case Value="Lyrics">
|
<controls:Case Value="LyricsStyle">
|
||||||
<uc:LyricsSettingsControl LyricsEffectSettings="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsEffectSettings, Mode=OneWay}" LyricsStyleSettings="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsStyleSettings, Mode=OneWay}" />
|
<uc:LyricsStyleSettingsControl LyricsStyleSettings="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsStyleSettings, Mode=OneWay}" />
|
||||||
|
</controls:Case>
|
||||||
|
|
||||||
|
<!-- Lyrics effect -->
|
||||||
|
<controls:Case Value="LyricsEffect">
|
||||||
|
<uc:LyricsEffectSettingsControl LyricsEffectSettings="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsEffectSettings, Mode=OneWay}" />
|
||||||
</controls:Case>
|
</controls:Case>
|
||||||
|
|
||||||
<!-- Lyrics background -->
|
<!-- Lyrics background -->
|
||||||
@@ -349,13 +354,23 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ListViewItem>
|
</ListViewItem>
|
||||||
|
|
||||||
<ListViewItem Tag="Lyrics">
|
<ListViewItem Tag="LyricsStyle">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="6">
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||||
<FontIcon
|
<FontIcon
|
||||||
FontFamily="{StaticResource IconFontFamily}"
|
FontFamily="{StaticResource IconFontFamily}"
|
||||||
FontSize="16"
|
FontSize="16"
|
||||||
Glyph="" />
|
Glyph="" />
|
||||||
<TextBlock x:Uid="SettingsPageLyrics" VerticalAlignment="Center" />
|
<TextBlock x:Uid="SettingsPageLyricsStyle" VerticalAlignment="Center" />
|
||||||
|
</StackPanel>
|
||||||
|
</ListViewItem>
|
||||||
|
|
||||||
|
<ListViewItem Tag="LyricsEffect">
|
||||||
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||||
|
<FontIcon
|
||||||
|
FontFamily="{StaticResource IconFontFamily}"
|
||||||
|
FontSize="16"
|
||||||
|
Glyph="" />
|
||||||
|
<TextBlock x:Uid="SettingsPageLyricsEffect" VerticalAlignment="Center" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ListViewItem>
|
</ListViewItem>
|
||||||
|
|
||||||
|
|||||||
@@ -306,10 +306,7 @@
|
|||||||
</controls:SettingsExpander>
|
</controls:SettingsExpander>
|
||||||
|
|
||||||
<!-- Lyrics phonetic -->
|
<!-- Lyrics phonetic -->
|
||||||
<controls:SettingsExpander
|
<controls:SettingsExpander x:Uid="SettingsPageChinese" IsExpanded="True">
|
||||||
x:Uid="SettingsPageChinese"
|
|
||||||
IsEnabled="{x:Bind ViewModel.AppSettings.TranslationSettings.IsTranslationEnabled, Mode=OneWay}"
|
|
||||||
IsExpanded="True">
|
|
||||||
<ToggleSwitch IsOn="{x:Bind ViewModel.AppSettings.TranslationSettings.IsChineseRomanizationEnabled, Mode=TwoWay}" />
|
<ToggleSwitch IsOn="{x:Bind ViewModel.AppSettings.TranslationSettings.IsChineseRomanizationEnabled, Mode=TwoWay}" />
|
||||||
<controls:SettingsExpander.Items>
|
<controls:SettingsExpander.Items>
|
||||||
<controls:SettingsCard>
|
<controls:SettingsCard>
|
||||||
@@ -320,7 +317,7 @@
|
|||||||
</controls:SettingsCard>
|
</controls:SettingsCard>
|
||||||
</controls:SettingsExpander.Items>
|
</controls:SettingsExpander.Items>
|
||||||
</controls:SettingsExpander>
|
</controls:SettingsExpander>
|
||||||
<controls:SettingsCard x:Uid="SettingsPageJapanese" IsEnabled="{x:Bind ViewModel.AppSettings.TranslationSettings.IsTranslationEnabled, Mode=OneWay}">
|
<controls:SettingsCard x:Uid="SettingsPageJapanese">
|
||||||
<ToggleSwitch IsOn="{x:Bind ViewModel.AppSettings.TranslationSettings.IsJapaneseRomanizationEnabled, Mode=TwoWay}" />
|
<ToggleSwitch IsOn="{x:Bind ViewModel.AppSettings.TranslationSettings.IsJapaneseRomanizationEnabled, Mode=TwoWay}" />
|
||||||
</controls:SettingsCard>
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using BetterLyrics.WinUI3.Models;
|
|||||||
using Microsoft.Graphics.Canvas;
|
using Microsoft.Graphics.Canvas;
|
||||||
using Microsoft.Graphics.Canvas.Brushes;
|
using Microsoft.Graphics.Canvas.Brushes;
|
||||||
using Microsoft.Graphics.Canvas.Effects;
|
using Microsoft.Graphics.Canvas.Effects;
|
||||||
|
using Microsoft.Graphics.Canvas.Geometry;
|
||||||
using Microsoft.Graphics.Canvas.Text;
|
using Microsoft.Graphics.Canvas.Text;
|
||||||
using Microsoft.Graphics.Canvas.UI.Xaml;
|
using Microsoft.Graphics.Canvas.UI.Xaml;
|
||||||
using Microsoft.UI;
|
using Microsoft.UI;
|
||||||
@@ -72,19 +73,38 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
{
|
{
|
||||||
CanvasCommandList list = new(control);
|
CanvasCommandList list = new(control);
|
||||||
using var ds = list.CreateDrawingSession();
|
using var ds = list.CreateDrawingSession();
|
||||||
|
|
||||||
|
// 描边
|
||||||
if (strokeWidth > 0)
|
if (strokeWidth > 0)
|
||||||
{
|
{
|
||||||
if (lyricsLine.TextGeometry == null)
|
if (lyricsLine.PhoneticCanvasGeometry != null)
|
||||||
{
|
{
|
||||||
return list;
|
ds.DrawGeometry(lyricsLine.PhoneticCanvasGeometry, lyricsLine.PhoneticPosition, strokeColor, strokeWidth);
|
||||||
|
}
|
||||||
|
if (lyricsLine.OriginalCanvasGeometry != null)
|
||||||
|
{
|
||||||
|
ds.DrawGeometry(lyricsLine.OriginalCanvasGeometry, lyricsLine.OriginalPosition, strokeColor, strokeWidth);
|
||||||
|
}
|
||||||
|
if (lyricsLine.TranslatedCanvasGeometry != null)
|
||||||
|
{
|
||||||
|
ds.DrawGeometry(lyricsLine.TranslatedCanvasGeometry, lyricsLine.TranslatedPosition, strokeColor, strokeWidth);
|
||||||
}
|
}
|
||||||
ds.DrawGeometry(lyricsLine.TextGeometry, lyricsLine.Position, strokeColor, strokeWidth); // 描边
|
|
||||||
}
|
}
|
||||||
if (lyricsLine.CanvasTextLayout == null)
|
|
||||||
|
// 绘制文本(填充)
|
||||||
|
if (lyricsLine.PhoneticCanvasTextLayout != null)
|
||||||
{
|
{
|
||||||
return list;
|
ds.DrawTextLayout(lyricsLine.PhoneticCanvasTextLayout, lyricsLine.PhoneticPosition, fontColor);
|
||||||
}
|
}
|
||||||
ds.DrawTextLayout(lyricsLine.CanvasTextLayout, lyricsLine.Position, fontColor); // 绘制文本(填充)
|
if (lyricsLine.OriginalCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
ds.DrawTextLayout(lyricsLine.OriginalCanvasTextLayout, lyricsLine.OriginalPosition, fontColor);
|
||||||
|
}
|
||||||
|
if (lyricsLine.TranslatedCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
ds.DrawTextLayout(lyricsLine.TranslatedCanvasTextLayout, lyricsLine.TranslatedPosition, fontColor);
|
||||||
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,12 +133,12 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
var mask = new CanvasCommandList(control);
|
var mask = new CanvasCommandList(control);
|
||||||
using var ds = mask.CreateDrawingSession();
|
using var ds = mask.CreateDrawingSession();
|
||||||
|
|
||||||
if (lyricsLine.CanvasTextLayout == null)
|
if (lyricsLine.OriginalCanvasTextLayout == null)
|
||||||
{
|
{
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
var highlightRegion = lyricsLine.CanvasTextLayout.GetCharacterRegions(charStartIndex, charLength).FirstOrDefault();
|
var highlightRegion = lyricsLine.OriginalCanvasTextLayout.GetCharacterRegions(charStartIndex, charLength).FirstOrDefault();
|
||||||
|
|
||||||
double highlightTotalWidth = (double)highlightRegion.LayoutBounds.Width;
|
double highlightTotalWidth = (double)highlightRegion.LayoutBounds.Width;
|
||||||
// Draw the highlight for the current character
|
// Draw the highlight for the current character
|
||||||
@@ -129,20 +149,20 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
// Rects
|
// Rects
|
||||||
var highlightRect = new Rect(
|
var highlightRect = new Rect(
|
||||||
highlightRegion.LayoutBounds.X,
|
highlightRegion.LayoutBounds.X,
|
||||||
highlightRegion.LayoutBounds.Y + lyricsLine.Position.Y,
|
highlightRegion.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
highlightWidth,
|
highlightWidth,
|
||||||
highlightRegion.LayoutBounds.Height
|
highlightRegion.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
|
|
||||||
var fadeInRect = new Rect(
|
var fadeInRect = new Rect(
|
||||||
highlightRect.Right - fadingWidth,
|
highlightRect.Right - fadingWidth,
|
||||||
highlightRegion.LayoutBounds.Y + lyricsLine.Position.Y,
|
highlightRegion.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
fadingWidth,
|
fadingWidth,
|
||||||
highlightRegion.LayoutBounds.Height
|
highlightRegion.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
var fadeOutRect = new Rect(
|
var fadeOutRect = new Rect(
|
||||||
highlightRect.Right,
|
highlightRect.Right,
|
||||||
highlightRegion.LayoutBounds.Y + lyricsLine.Position.Y,
|
highlightRegion.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
fadingWidth,
|
fadingWidth,
|
||||||
highlightRegion.LayoutBounds.Height
|
highlightRegion.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
@@ -171,15 +191,15 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
{
|
{
|
||||||
var mask = new CanvasCommandList(control);
|
var mask = new CanvasCommandList(control);
|
||||||
|
|
||||||
if (lyricsLine.CanvasTextLayout == null)
|
if (lyricsLine.OriginalCanvasTextLayout == null)
|
||||||
{
|
{
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
using var ds = mask.CreateDrawingSession();
|
using var ds = mask.CreateDrawingSession();
|
||||||
|
|
||||||
var regions = lyricsLine.CanvasTextLayout.GetCharacterRegions(0, charStartIndex);
|
var regions = lyricsLine.OriginalCanvasTextLayout.GetCharacterRegions(0, charStartIndex);
|
||||||
var highlightRegion = lyricsLine.CanvasTextLayout
|
var highlightRegion = lyricsLine.OriginalCanvasTextLayout
|
||||||
.GetCharacterRegions(charStartIndex, charLength)
|
.GetCharacterRegions(charStartIndex, charLength)
|
||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
if (regions.Length > 0)
|
if (regions.Length > 0)
|
||||||
@@ -190,7 +210,7 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
var region = regions[j];
|
var region = regions[j];
|
||||||
var rect = new Rect(
|
var rect = new Rect(
|
||||||
region.LayoutBounds.X,
|
region.LayoutBounds.X,
|
||||||
region.LayoutBounds.Y + lyricsLine.Position.Y,
|
region.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
region.LayoutBounds.Width,
|
region.LayoutBounds.Width,
|
||||||
region.LayoutBounds.Height
|
region.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
@@ -207,14 +227,14 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
// Rects
|
// Rects
|
||||||
var highlightRect = new Rect(
|
var highlightRect = new Rect(
|
||||||
highlightRegion.LayoutBounds.X,
|
highlightRegion.LayoutBounds.X,
|
||||||
highlightRegion.LayoutBounds.Y + lyricsLine.Position.Y,
|
highlightRegion.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
highlightWidth,
|
highlightWidth,
|
||||||
highlightRegion.LayoutBounds.Height
|
highlightRegion.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
|
|
||||||
var fadeInRect = new Rect(
|
var fadeInRect = new Rect(
|
||||||
highlightRect.Right - fadingWidth,
|
highlightRect.Right - fadingWidth,
|
||||||
highlightRegion.LayoutBounds.Y + lyricsLine.Position.Y,
|
highlightRegion.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
fadingWidth,
|
fadingWidth,
|
||||||
highlightRegion.LayoutBounds.Height
|
highlightRegion.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
@@ -225,7 +245,7 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
{
|
{
|
||||||
var fadeOutRect = new Rect(
|
var fadeOutRect = new Rect(
|
||||||
highlightRect.Right,
|
highlightRect.Right,
|
||||||
highlightRegion.LayoutBounds.Y + lyricsLine.Position.Y,
|
highlightRegion.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
fadingWidth,
|
fadingWidth,
|
||||||
highlightRegion.LayoutBounds.Height
|
highlightRegion.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
@@ -246,12 +266,12 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
var mask = new CanvasCommandList(control);
|
var mask = new CanvasCommandList(control);
|
||||||
using var ds = mask.CreateDrawingSession();
|
using var ds = mask.CreateDrawingSession();
|
||||||
|
|
||||||
if (lyricsLine.CanvasTextLayout == null)
|
if (lyricsLine.OriginalCanvasTextLayout == null)
|
||||||
{
|
{
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
var regions = lyricsLine.CanvasTextLayout.GetCharacterRegions(0, lyricsLine.OriginalText.Length);
|
var regions = lyricsLine.OriginalCanvasTextLayout.GetCharacterRegions(0, lyricsLine.OriginalText.Length);
|
||||||
if (regions.Length > 0)
|
if (regions.Length > 0)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < regions.Length; j++)
|
for (int j = 0; j < regions.Length; j++)
|
||||||
@@ -259,7 +279,7 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
var region = regions[j];
|
var region = regions[j];
|
||||||
var rect = new Rect(
|
var rect = new Rect(
|
||||||
region.LayoutBounds.X,
|
region.LayoutBounds.X,
|
||||||
region.LayoutBounds.Y + lyricsLine.Position.Y,
|
region.LayoutBounds.Y + lyricsLine.OriginalPosition.Y,
|
||||||
region.LayoutBounds.Width,
|
region.LayoutBounds.Width,
|
||||||
region.LayoutBounds.Height
|
region.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
@@ -270,17 +290,17 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CanvasCommandList CreateTranslationHighlightMask(ICanvasAnimatedControl control, LyricsLine lyricsLine)
|
public static CanvasCommandList CreatePhoneticHighlightMask(ICanvasAnimatedControl control, LyricsLine lyricsLine)
|
||||||
{
|
{
|
||||||
var mask = new CanvasCommandList(control);
|
var mask = new CanvasCommandList(control);
|
||||||
using var ds = mask.CreateDrawingSession();
|
using var ds = mask.CreateDrawingSession();
|
||||||
|
|
||||||
if (lyricsLine.CanvasTextLayout == null)
|
if (lyricsLine.PhoneticCanvasTextLayout == null)
|
||||||
{
|
{
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
var regions = lyricsLine.CanvasTextLayout.GetCharacterRegions(lyricsLine.OriginalText.Length, lyricsLine.DisplayedText.Length - lyricsLine.OriginalText.Length);
|
var regions = lyricsLine.PhoneticCanvasTextLayout.GetCharacterRegions(0, lyricsLine.PhoneticText.Length);
|
||||||
if (regions.Length > 0)
|
if (regions.Length > 0)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < regions.Length; j++)
|
for (int j = 0; j < regions.Length; j++)
|
||||||
@@ -288,7 +308,36 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
var region = regions[j];
|
var region = regions[j];
|
||||||
var rect = new Rect(
|
var rect = new Rect(
|
||||||
region.LayoutBounds.X,
|
region.LayoutBounds.X,
|
||||||
region.LayoutBounds.Y + lyricsLine.Position.Y,
|
region.LayoutBounds.Y + lyricsLine.PhoneticPosition.Y,
|
||||||
|
region.LayoutBounds.Width,
|
||||||
|
region.LayoutBounds.Height
|
||||||
|
);
|
||||||
|
ds.FillRectangle(rect, Colors.White);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CanvasCommandList CreateTranslatedHighlightMask(ICanvasAnimatedControl control, LyricsLine lyricsLine)
|
||||||
|
{
|
||||||
|
var mask = new CanvasCommandList(control);
|
||||||
|
using var ds = mask.CreateDrawingSession();
|
||||||
|
|
||||||
|
if (lyricsLine.TranslatedCanvasTextLayout == null)
|
||||||
|
{
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
var regions = lyricsLine.TranslatedCanvasTextLayout.GetCharacterRegions(0, lyricsLine.TranslatedText.Length);
|
||||||
|
if (regions.Length > 0)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < regions.Length; j++)
|
||||||
|
{
|
||||||
|
var region = regions[j];
|
||||||
|
var rect = new Rect(
|
||||||
|
region.LayoutBounds.X,
|
||||||
|
region.LayoutBounds.Y + lyricsLine.TranslatedPosition.Y,
|
||||||
region.LayoutBounds.Width,
|
region.LayoutBounds.Width,
|
||||||
region.LayoutBounds.Height
|
region.LayoutBounds.Height
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
{
|
{
|
||||||
private List<LyricsData> _lyricsDataArr = [];
|
private List<LyricsData> _lyricsDataArr = [];
|
||||||
|
|
||||||
|
public LyricsData? LibreTranslationLyricsData => _lyricsDataArr.LastOrDefault();
|
||||||
|
|
||||||
public List<LyricsData> Parse(string? raw, int? durationMs)
|
public List<LyricsData> Parse(string? raw, int? durationMs)
|
||||||
{
|
{
|
||||||
durationMs ??= (int)TimeSpan.FromMinutes(99).TotalMilliseconds;
|
durationMs ??= (int)TimeSpan.FromMinutes(99).TotalMilliseconds;
|
||||||
@@ -48,7 +50,7 @@ namespace BetterLyrics.WinUI3.Helper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FillRomanizationLyricsData();
|
FillRomanizationLyricsData();
|
||||||
_lyricsDataArr.Add(new LyricsData()); // 为机翻预留
|
_lyricsDataArr.Add(new LyricsData()); // 为 LibreTranslation 预留
|
||||||
return _lyricsDataArr;
|
return _lyricsDataArr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,23 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
LyricsLines = lyricsLines;
|
LyricsLines = lyricsLines;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDisplayedTextAlongWith(LyricsData translationData, string separator, int toleranceMs = 0)
|
public void ClearTranslatedText()
|
||||||
|
{
|
||||||
|
foreach (var line in LyricsLines)
|
||||||
|
{
|
||||||
|
line.TranslatedText = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearPhoneticText()
|
||||||
|
{
|
||||||
|
foreach (var line in LyricsLines)
|
||||||
|
{
|
||||||
|
line.PhoneticText = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTranslatedText(LyricsData translationData, string separator, int toleranceMs = 0)
|
||||||
{
|
{
|
||||||
foreach (var line in LyricsLines)
|
foreach (var line in LyricsLines)
|
||||||
{
|
{
|
||||||
@@ -42,17 +58,39 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
|
|
||||||
if (transLine != null)
|
if (transLine != null)
|
||||||
{
|
{
|
||||||
line.DisplayedText = $"{line.OriginalText}{separator}{transLine.OriginalText}";
|
// 此处 transLine.OriginalText 指翻译中的“原文”属性
|
||||||
|
line.TranslatedText = transLine.OriginalText;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 没有匹配的翻译,翻译部分留空
|
// 没有匹配的翻译
|
||||||
line.DisplayedText = $"{line.OriginalText}";
|
line.TranslatedText = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDisplayedTextAlongWith(string translation, string separator)
|
public void SetPhoneticText(LyricsData phoneticData, string separator, int toleranceMs = 0)
|
||||||
|
{
|
||||||
|
foreach (var line in LyricsLines)
|
||||||
|
{
|
||||||
|
// 在音译歌词中查找与当前行开始时间最接近且在容忍范围内的行
|
||||||
|
var transLine = phoneticData.LyricsLines
|
||||||
|
.FirstOrDefault(t => Math.Abs(t.StartMs - line.StartMs) <= toleranceMs);
|
||||||
|
|
||||||
|
if (transLine != null)
|
||||||
|
{
|
||||||
|
// 此处 transLine.OriginalText 指音译中的“原文”属性
|
||||||
|
line.PhoneticText = transLine.OriginalText;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 没有匹配的音译
|
||||||
|
line.PhoneticText = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTranslation(string translation, string separator)
|
||||||
{
|
{
|
||||||
List<string> translationArr = translation.Split(StringHelper.NewLine).ToList();
|
List<string> translationArr = translation.Split(StringHelper.NewLine).ToList();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -60,24 +98,16 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
{
|
{
|
||||||
if (i >= translationArr.Count)
|
if (i >= translationArr.Count)
|
||||||
{
|
{
|
||||||
line.DisplayedText = line.OriginalText; // No translation available, keep original text
|
line.TranslatedText = ""; // No translation available, keep empty
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
line.DisplayedText = $"{line.OriginalText}{separator}{translationArr[i]}";
|
line.TranslatedText = translationArr[i];
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDisplayedTextInOriginalText()
|
|
||||||
{
|
|
||||||
foreach (var line in LyricsLines)
|
|
||||||
{
|
|
||||||
line.DisplayedText = line.OriginalText;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public LyricsData CreateLyricsDataFrom(string translation)
|
public LyricsData CreateLyricsDataFrom(string translation)
|
||||||
{
|
{
|
||||||
var result = new LyricsData(LyricsLines.Select(line => new LyricsLine
|
var result = new LyricsData(LyricsLines.Select(line => new LyricsLine
|
||||||
@@ -120,8 +150,9 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
{
|
{
|
||||||
StartMs = 0,
|
StartMs = 0,
|
||||||
EndMs = (int)TimeSpan.FromMinutes(99).TotalMilliseconds,
|
EndMs = (int)TimeSpan.FromMinutes(99).TotalMilliseconds,
|
||||||
|
PhoneticText = "",
|
||||||
OriginalText = "● ● ●",
|
OriginalText = "● ● ●",
|
||||||
DisplayedText = "● ● ●",
|
TranslatedText = "",
|
||||||
LyricsChars = [],
|
LyricsChars = [],
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
using BetterLyrics.WinUI3.Enums;
|
using BetterLyrics.WinUI3.Enums;
|
||||||
using BetterLyrics.WinUI3.Helper;
|
using BetterLyrics.WinUI3.Helper;
|
||||||
|
using BetterLyrics.WinUI3.Services;
|
||||||
using Microsoft.Graphics.Canvas;
|
using Microsoft.Graphics.Canvas;
|
||||||
using Microsoft.Graphics.Canvas.Effects;
|
using Microsoft.Graphics.Canvas.Effects;
|
||||||
using Microsoft.Graphics.Canvas.Geometry;
|
using Microsoft.Graphics.Canvas.Geometry;
|
||||||
@@ -53,10 +54,23 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
easingType: EasingType.EaseInOutQuad
|
easingType: EasingType.EaseInOutQuad
|
||||||
);
|
);
|
||||||
|
|
||||||
public CanvasTextLayout? CanvasTextLayout { get; private set; }
|
public CanvasTextLayout? OriginalCanvasTextLayout { get; private set; }
|
||||||
|
public CanvasTextLayout? TranslatedCanvasTextLayout { get; private set; }
|
||||||
|
public CanvasTextLayout? PhoneticCanvasTextLayout { get; private set; }
|
||||||
|
|
||||||
public Vector2 CenterPosition { get; private set; }
|
public Vector2 CenterPosition { get; private set; }
|
||||||
public Vector2 Position { get; set; }
|
/// <summary>
|
||||||
|
/// 原文位置
|
||||||
|
/// </summary>
|
||||||
|
public Vector2 OriginalPosition { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 译文位置
|
||||||
|
/// </summary>
|
||||||
|
public Vector2 TranslatedPosition { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 注音位置
|
||||||
|
/// </summary>
|
||||||
|
public Vector2 PhoneticPosition { get; set; }
|
||||||
|
|
||||||
public List<LyricsChar> LyricsChars { get; set; } = [];
|
public List<LyricsChar> LyricsChars { get; set; } = [];
|
||||||
|
|
||||||
@@ -64,54 +78,134 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
public int? EndMs { get; set; }
|
public int? EndMs { get; set; }
|
||||||
public int StartMs { get; set; }
|
public int StartMs { get; set; }
|
||||||
|
|
||||||
public string DisplayedText { get; set; } = "";
|
/// <summary>
|
||||||
|
/// 原文
|
||||||
|
/// </summary>
|
||||||
public string OriginalText { get; set; } = "";
|
public string OriginalText { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// 译文
|
||||||
|
/// </summary>
|
||||||
|
public string TranslatedText { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// 注音
|
||||||
|
/// </summary>
|
||||||
|
public string PhoneticText { get; set; } = "";
|
||||||
|
|
||||||
public CanvasGeometry? TextGeometry { get; private set; }
|
public CanvasGeometry? OriginalCanvasGeometry { get; private set; }
|
||||||
|
public CanvasGeometry? TranslatedCanvasGeometry { get; private set; }
|
||||||
|
public CanvasGeometry? PhoneticCanvasGeometry { get; private set; }
|
||||||
|
|
||||||
public void UpdateCenterPosition(double maxWidth, TextAlignmentType type)
|
public void UpdateCenterPosition(double maxWidth, TextAlignmentType type)
|
||||||
{
|
{
|
||||||
if (CanvasTextLayout == null)
|
if (OriginalCanvasTextLayout == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double centerY = Position.Y + (double)CanvasTextLayout.LayoutBounds.Height;
|
|
||||||
|
double centerY = OriginalPosition.Y + (OriginalCanvasTextLayout?.LayoutBounds.Height ?? 0) / 2;
|
||||||
|
|
||||||
CenterPosition = type switch
|
CenterPosition = type switch
|
||||||
{
|
{
|
||||||
TextAlignmentType.Left => new Vector2(Position.X, (float)centerY),
|
TextAlignmentType.Left => new Vector2(OriginalPosition.X, (float)centerY),
|
||||||
TextAlignmentType.Center => new Vector2((float)(Position.X + maxWidth / 2.0), (float)centerY),
|
TextAlignmentType.Center => new Vector2((float)(OriginalPosition.X + maxWidth / 2.0), (float)centerY),
|
||||||
TextAlignmentType.Right => new Vector2((float)(Position.X + maxWidth), (float)centerY),
|
TextAlignmentType.Right => new Vector2((float)(OriginalPosition.X + maxWidth), (float)centerY),
|
||||||
_ => throw new System.ArgumentOutOfRangeException(nameof(type), type, null),
|
_ => throw new System.ArgumentOutOfRangeException(nameof(type), type, null),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisposeTextLayout()
|
public void DisposeTextLayout()
|
||||||
{
|
{
|
||||||
CanvasTextLayout?.Dispose();
|
PhoneticCanvasTextLayout?.Dispose();
|
||||||
CanvasTextLayout = null;
|
PhoneticCanvasTextLayout = null;
|
||||||
|
|
||||||
|
OriginalCanvasTextLayout?.Dispose();
|
||||||
|
OriginalCanvasTextLayout = null;
|
||||||
|
|
||||||
|
TranslatedCanvasTextLayout?.Dispose();
|
||||||
|
TranslatedCanvasTextLayout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RecreateTextLayout(ICanvasAnimatedControl control, CanvasTextFormat textFormat, double maxWidth, double maxHeight, TextAlignmentType type)
|
public void RecreateTextLayout(
|
||||||
|
ICanvasAnimatedControl control,
|
||||||
|
bool createPhonetic, bool createTranslated,
|
||||||
|
int phoneticTextFontSize, int originalTextFontSize, int translatedTextFontSize,
|
||||||
|
LyricsFontWeight originalTextFontWeight,
|
||||||
|
string fontFamilyCJK, string fontFamilyWestern,
|
||||||
|
double maxWidth, double maxHeight, TextAlignmentType type)
|
||||||
{
|
{
|
||||||
DisposeTextLayout();
|
DisposeTextLayout();
|
||||||
CanvasTextLayout = new CanvasTextLayout(control, DisplayedText, textFormat, (float)maxWidth, (float)maxHeight);
|
|
||||||
CanvasTextLayout.HorizontalAlignment = type.ToCanvasHorizontalAlignment();
|
if (createPhonetic && PhoneticText != "")
|
||||||
|
{
|
||||||
|
PhoneticCanvasTextLayout = new CanvasTextLayout(control, PhoneticText, new CanvasTextFormat
|
||||||
|
{
|
||||||
|
HorizontalAlignment = CanvasHorizontalAlignment.Left,
|
||||||
|
VerticalAlignment = CanvasVerticalAlignment.Top,
|
||||||
|
FontSize = phoneticTextFontSize,
|
||||||
|
FontFamily = LanguageHelper.IsCJK(PhoneticText) ? fontFamilyCJK : fontFamilyWestern,
|
||||||
|
}, (float)maxWidth, (float)maxHeight)
|
||||||
|
{
|
||||||
|
HorizontalAlignment = type.ToCanvasHorizontalAlignment(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
OriginalCanvasTextLayout = new CanvasTextLayout(control, OriginalText, new CanvasTextFormat
|
||||||
|
{
|
||||||
|
HorizontalAlignment = CanvasHorizontalAlignment.Left,
|
||||||
|
VerticalAlignment = CanvasVerticalAlignment.Top,
|
||||||
|
FontSize = originalTextFontSize,
|
||||||
|
FontWeight = originalTextFontWeight.ToFontWeight(),
|
||||||
|
FontFamily = LanguageHelper.IsCJK(OriginalText) ? fontFamilyCJK : fontFamilyWestern,
|
||||||
|
}, (float)maxWidth, (float)maxHeight)
|
||||||
|
{
|
||||||
|
HorizontalAlignment = type.ToCanvasHorizontalAlignment()
|
||||||
|
};
|
||||||
|
|
||||||
|
if (createTranslated && TranslatedText != "")
|
||||||
|
{
|
||||||
|
TranslatedCanvasTextLayout = new CanvasTextLayout(control, TranslatedText, new CanvasTextFormat
|
||||||
|
{
|
||||||
|
HorizontalAlignment = CanvasHorizontalAlignment.Left,
|
||||||
|
VerticalAlignment = CanvasVerticalAlignment.Top,
|
||||||
|
FontSize = translatedTextFontSize,
|
||||||
|
FontFamily = LanguageHelper.IsCJK(TranslatedText) ? fontFamilyCJK : fontFamilyWestern,
|
||||||
|
}, (float)maxWidth, (float)maxHeight)
|
||||||
|
{
|
||||||
|
HorizontalAlignment = type.ToCanvasHorizontalAlignment()
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisposeTextGeometry()
|
public void DisposeTextGeometry()
|
||||||
{
|
{
|
||||||
TextGeometry?.Dispose();
|
PhoneticCanvasGeometry?.Dispose();
|
||||||
TextGeometry = null;
|
PhoneticCanvasGeometry = null;
|
||||||
|
|
||||||
|
OriginalCanvasGeometry?.Dispose();
|
||||||
|
OriginalCanvasGeometry = null;
|
||||||
|
|
||||||
|
TranslatedCanvasGeometry?.Dispose();
|
||||||
|
TranslatedCanvasGeometry = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RecreateTextGeometry()
|
public void RecreateTextGeometry()
|
||||||
{
|
{
|
||||||
DisposeTextGeometry();
|
DisposeTextGeometry();
|
||||||
if (CanvasTextLayout == null)
|
|
||||||
|
if (PhoneticCanvasTextLayout != null)
|
||||||
{
|
{
|
||||||
return;
|
PhoneticCanvasGeometry = CanvasGeometry.CreateText(PhoneticCanvasTextLayout);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OriginalCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
OriginalCanvasGeometry = CanvasGeometry.CreateText(OriginalCanvasTextLayout);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TranslatedCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
TranslatedCanvasGeometry = CanvasGeometry.CreateText(TranslatedCanvasTextLayout);
|
||||||
}
|
}
|
||||||
TextGeometry = CanvasGeometry.CreateText(CanvasTextLayout);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
EnvironmentSampleMode = WindowPixelSampleMode.WindowEdge,
|
EnvironmentSampleMode = WindowPixelSampleMode.WindowEdge,
|
||||||
LyricsStyleSettings = new()
|
LyricsStyleSettings = new()
|
||||||
{
|
{
|
||||||
LyricsFontSize = 20,
|
OriginalLyricsFontSize = 20,
|
||||||
LyricsAlignmentType = TextAlignmentType.Center,
|
LyricsAlignmentType = TextAlignmentType.Center,
|
||||||
},
|
},
|
||||||
LyricsBackgroundSettings = new LyricsBackgroundSettings
|
LyricsBackgroundSettings = new LyricsBackgroundSettings
|
||||||
@@ -230,7 +230,7 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
LyricsStyleSettings = new LyricsStyleSettings
|
LyricsStyleSettings = new LyricsStyleSettings
|
||||||
{
|
{
|
||||||
LyricsAlignmentType = TextAlignmentType.Center,
|
LyricsAlignmentType = TextAlignmentType.Center,
|
||||||
LyricsFontSize = 18,
|
OriginalLyricsFontSize = 18,
|
||||||
},
|
},
|
||||||
LyricsBackgroundSettings = new LyricsBackgroundSettings
|
LyricsBackgroundSettings = new LyricsBackgroundSettings
|
||||||
{
|
{
|
||||||
@@ -253,7 +253,7 @@ namespace BetterLyrics.WinUI3.Models
|
|||||||
LyricsLayoutOrientation = Enums.LyricsLayoutOrientation.Vertical,
|
LyricsLayoutOrientation = Enums.LyricsLayoutOrientation.Vertical,
|
||||||
LyricsStyleSettings = new LyricsStyleSettings
|
LyricsStyleSettings = new LyricsStyleSettings
|
||||||
{
|
{
|
||||||
LyricsFontSize = 72,
|
OriginalLyricsFontSize = 72,
|
||||||
LyricsAlignmentType = Enums.TextAlignmentType.Center,
|
LyricsAlignmentType = Enums.TextAlignmentType.Center,
|
||||||
},
|
},
|
||||||
AlbumArtLayoutSettings = new AlbumArtLayoutSettings
|
AlbumArtLayoutSettings = new AlbumArtLayoutSettings
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ namespace BetterLyrics.WinUI3.Models.Settings
|
|||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial LineRenderingType LyricsShadowScope { get; set; } = LineRenderingType.LineStartToCurrentChar;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial LineRenderingType LyricsShadowScope { get; set; } = LineRenderingType.LineStartToCurrentChar;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsShadowAmount { get; set; } = 8;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsShadowAmount { get; set; } = 8;
|
||||||
|
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial LineRenderingType LyricsHighlightScope { get; set; } = LineRenderingType.LineStartToCurrentChar;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial LineRenderingType OriginalLyricsHighlightScope { get; set; } = LineRenderingType.LineStartToCurrentChar;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsHighlightAmount { get; set; } = 100; // 100% 是上界
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int PhoneticLyricsHighlightAmount { get; set; } = 60; // 100% 是上界
|
||||||
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int OriginalLyricsHighlightAmount { get; set; } = 100; // 100% 是上界
|
||||||
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int TranslatedLyricsHighlightAmount { get; set; } = 60; // 100% 是上界
|
||||||
|
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsTranslationHighlightAmount { get; set; } = 60; // 100% 是上界
|
|
||||||
|
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsLyricsFloatAnimationEnabled { get; set; } = true;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsLyricsFloatAnimationEnabled { get; set; } = true;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsFloatAmount { get; set; } = 1;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsFloatAmount { get; set; } = 1;
|
||||||
|
|
||||||
@@ -68,9 +68,10 @@ namespace BetterLyrics.WinUI3.Models.Settings
|
|||||||
IsLyricsShadowEnabled = this.IsLyricsShadowEnabled,
|
IsLyricsShadowEnabled = this.IsLyricsShadowEnabled,
|
||||||
LyricsShadowScope = this.LyricsShadowScope,
|
LyricsShadowScope = this.LyricsShadowScope,
|
||||||
LyricsShadowAmount = this.LyricsShadowAmount,
|
LyricsShadowAmount = this.LyricsShadowAmount,
|
||||||
LyricsHighlightScope = this.LyricsHighlightScope,
|
OriginalLyricsHighlightScope = this.OriginalLyricsHighlightScope,
|
||||||
LyricsHighlightAmount = this.LyricsHighlightAmount,
|
PhoneticLyricsHighlightAmount = this.PhoneticLyricsHighlightAmount,
|
||||||
LyricsTranslationHighlightAmount = this.LyricsTranslationHighlightAmount,
|
OriginalLyricsHighlightAmount = this.OriginalLyricsHighlightAmount,
|
||||||
|
TranslatedLyricsHighlightAmount = this.TranslatedLyricsHighlightAmount,
|
||||||
IsLyricsFloatAnimationEnabled = this.IsLyricsFloatAnimationEnabled,
|
IsLyricsFloatAnimationEnabled = this.IsLyricsFloatAnimationEnabled,
|
||||||
LyricsFloatAmount = this.LyricsFloatAmount,
|
LyricsFloatAmount = this.LyricsFloatAmount,
|
||||||
LyricsScrollTopDelay = this.LyricsScrollTopDelay,
|
LyricsScrollTopDelay = this.LyricsScrollTopDelay,
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ namespace BetterLyrics.WinUI3.Models.Settings
|
|||||||
public partial class LyricsStyleSettings : ObservableRecipient, ICloneable
|
public partial class LyricsStyleSettings : ObservableRecipient, ICloneable
|
||||||
{
|
{
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsDynamicLyricsFontSize { get; set; } = true;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial bool IsDynamicLyricsFontSize { get; set; } = true;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsFontSize { get; set; } = 24;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int PhoneticLyricsFontSize { get; set; } = 12;
|
||||||
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int OriginalLyricsFontSize { get; set; } = 24;
|
||||||
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int TranslatedLyricsFontSize { get; set; } = 12;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial TextAlignmentType LyricsAlignmentType { get; set; } = TextAlignmentType.Left;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial TextAlignmentType LyricsAlignmentType { get; set; } = TextAlignmentType.Left;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsBgFontOpacity { get; set; } = 30; // 30% opacity
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsBgFontOpacity { get; set; } = 30; // 30% opacity
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsFontStrokeWidth { get; set; } = 0;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial int LyricsFontStrokeWidth { get; set; } = 0;
|
||||||
@@ -27,23 +29,19 @@ namespace BetterLyrics.WinUI3.Models.Settings
|
|||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial LyricsFontWeight LyricsFontWeight { get; set; } = LyricsFontWeight.Bold;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial LyricsFontWeight LyricsFontWeight { get; set; } = LyricsFontWeight.Bold;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial double LyricsLineSpacingFactor { get; set; } = 0.5;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial double LyricsLineSpacingFactor { get; set; } = 0.5;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LyricsTranslationSeparator { get; set; } = StringHelper.NewLine;
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LyricsTranslationSeparator { get; set; } = StringHelper.NewLine;
|
||||||
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LyricsFontFamily { get; set; } = FontHelper.SystemFontFamilies.FirstOrDefault() ?? "";
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LyricsCJKFontFamily { get; set; } = FontHelper.SystemFontFamilies.FirstOrDefault() ?? "";
|
||||||
|
[ObservableProperty][NotifyPropertyChangedRecipients] public partial string LyricsWesternFontFamily { get; set; } = FontHelper.SystemFontFamilies.FirstOrDefault() ?? "";
|
||||||
|
|
||||||
public LyricsStyleSettings() { }
|
public LyricsStyleSettings() { }
|
||||||
|
|
||||||
public LyricsStyleSettings(int lyricsFontSize, TextAlignmentType lyricsAlignmentType, int lyricsFontStrokeWidth)
|
|
||||||
{
|
|
||||||
LyricsFontSize = lyricsFontSize;
|
|
||||||
LyricsAlignmentType = lyricsAlignmentType;
|
|
||||||
LyricsFontStrokeWidth = lyricsFontStrokeWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public object Clone()
|
public object Clone()
|
||||||
{
|
{
|
||||||
return new LyricsStyleSettings
|
return new LyricsStyleSettings
|
||||||
{
|
{
|
||||||
IsDynamicLyricsFontSize = this.IsDynamicLyricsFontSize,
|
IsDynamicLyricsFontSize = this.IsDynamicLyricsFontSize,
|
||||||
LyricsFontSize = this.LyricsFontSize,
|
PhoneticLyricsFontSize = this.PhoneticLyricsFontSize,
|
||||||
|
OriginalLyricsFontSize = this.OriginalLyricsFontSize,
|
||||||
|
TranslatedLyricsFontSize = this.TranslatedLyricsFontSize,
|
||||||
LyricsAlignmentType = this.LyricsAlignmentType,
|
LyricsAlignmentType = this.LyricsAlignmentType,
|
||||||
LyricsBgFontOpacity = this.LyricsBgFontOpacity,
|
LyricsBgFontOpacity = this.LyricsBgFontOpacity,
|
||||||
LyricsFontStrokeWidth = this.LyricsFontStrokeWidth,
|
LyricsFontStrokeWidth = this.LyricsFontStrokeWidth,
|
||||||
@@ -56,7 +54,8 @@ namespace BetterLyrics.WinUI3.Models.Settings
|
|||||||
LyricsFontWeight = this.LyricsFontWeight,
|
LyricsFontWeight = this.LyricsFontWeight,
|
||||||
LyricsLineSpacingFactor = this.LyricsLineSpacingFactor,
|
LyricsLineSpacingFactor = this.LyricsLineSpacingFactor,
|
||||||
LyricsTranslationSeparator = this.LyricsTranslationSeparator,
|
LyricsTranslationSeparator = this.LyricsTranslationSeparator,
|
||||||
LyricsFontFamily = this.LyricsFontFamily
|
LyricsCJKFontFamily = this.LyricsCJKFontFamily,
|
||||||
|
LyricsWesternFontFamily = this.LyricsWesternFontFamily,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,27 +36,22 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService
|
|||||||
private async Task RefreshTranslationAsync(CancellationToken token)
|
private async Task RefreshTranslationAsync(CancellationToken token)
|
||||||
{
|
{
|
||||||
TranslationSearchProvider = null;
|
TranslationSearchProvider = null;
|
||||||
_lyricsDataArr.ElementAtOrDefault(0)?.SetDisplayedTextInOriginalText();
|
_lyricsDataArr.ElementAtOrDefault(0)?.ClearTranslatedText();
|
||||||
LyricsChanged?.Invoke(this, new LyricsChangedEventArgs(CurrentLyricsData));
|
LyricsChanged?.Invoke(this, new LyricsChangedEventArgs(CurrentLyricsData));
|
||||||
IsTranslating = true;
|
IsTranslating = true;
|
||||||
|
|
||||||
if (_settingsService.AppSettings.TranslationSettings.IsTranslationEnabled)
|
await SetPhoneticTextAsync(token);
|
||||||
{
|
await SetTranslatedTextAsync(token);
|
||||||
await SetDisplayedAlongWithTranslationsAsync(token);
|
if (token.IsCancellationRequested) return;
|
||||||
if (token.IsCancellationRequested) return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.LogInformation("Translation is disabled, showing original lyrics only.");
|
|
||||||
_lyricsDataArr.ElementAtOrDefault(0)?.SetDisplayedTextInOriginalText();
|
|
||||||
_langIndex = 0;
|
|
||||||
}
|
|
||||||
IsTranslating = false;
|
IsTranslating = false;
|
||||||
LyricsChanged?.Invoke(this, new LyricsChangedEventArgs(CurrentLyricsData));
|
LyricsChanged?.Invoke(this, new LyricsChangedEventArgs(CurrentLyricsData));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SetDisplayedAlongWithTranslationsAsync(CancellationToken token)
|
private async Task SetTranslatedTextAsync(CancellationToken token)
|
||||||
{
|
{
|
||||||
|
if (!_settingsService.AppSettings.TranslationSettings.IsTranslationEnabled) return;
|
||||||
|
|
||||||
_logger.LogInformation("Showing translation for lyrics...");
|
_logger.LogInformation("Showing translation for lyrics...");
|
||||||
string targetLangCode = _settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageCode;
|
string targetLangCode = _settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageCode;
|
||||||
_logger.LogInformation("Target language code: {TargetLangCode}", targetLangCode);
|
_logger.LogInformation("Target language code: {TargetLangCode}", targetLangCode);
|
||||||
@@ -66,30 +61,11 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService
|
|||||||
string? originalLangCode = LanguageHelper.DetectLanguageCode(originalText);
|
string? originalLangCode = LanguageHelper.DetectLanguageCode(originalText);
|
||||||
_logger.LogInformation("Original language code: {OriginalLangCode}", originalLangCode ?? "null");
|
_logger.LogInformation("Original language code: {OriginalLangCode}", originalLangCode ?? "null");
|
||||||
|
|
||||||
if (originalLangCode == "zh" && _settingsService.AppSettings.TranslationSettings.IsChineseRomanizationEnabled)
|
|
||||||
{
|
|
||||||
switch (_settingsService.AppSettings.TranslationSettings.ChineseRomanization)
|
|
||||||
{
|
|
||||||
case ChineseRomanization.Pinyin:
|
|
||||||
targetLangCode = "pinyin";
|
|
||||||
break;
|
|
||||||
case ChineseRomanization.Jyutping:
|
|
||||||
targetLangCode = "jyutping";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (originalLangCode == "ja" && _settingsService.AppSettings.TranslationSettings.IsJapaneseRomanizationEnabled)
|
|
||||||
{
|
|
||||||
targetLangCode = "romaji";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (originalLangCode == targetLangCode)
|
if (originalLangCode == targetLangCode)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Original lyrics already in target language: {TargetLangCode}", targetLangCode);
|
_logger.LogInformation("Original lyrics already in target language: {TargetLangCode}", targetLangCode);
|
||||||
|
|
||||||
_lyricsDataArr[0].SetDisplayedTextInOriginalText();
|
_lyricsDataArr[0].ClearTranslatedText();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -100,12 +76,12 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService
|
|||||||
_logger.LogInformation("Found translation in lyrics data at index {FoundIndex}", found);
|
_logger.LogInformation("Found translation in lyrics data at index {FoundIndex}", found);
|
||||||
if (_settingsService.AppSettings.TranslationSettings.ShowTranslationOnly)
|
if (_settingsService.AppSettings.TranslationSettings.ShowTranslationOnly)
|
||||||
{
|
{
|
||||||
_lyricsDataArr[found].SetDisplayedTextInOriginalText();
|
_lyricsDataArr[found].ClearTranslatedText();
|
||||||
_langIndex = found;
|
_langIndex = found;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_lyricsDataArr[0].SetDisplayedTextAlongWith(_lyricsDataArr[found], _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator, 50);
|
_lyricsDataArr[0].SetTranslatedText(_lyricsDataArr[found], _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator, 50);
|
||||||
_langIndex = 0;
|
_langIndex = 0;
|
||||||
TranslationSearchProvider = LyricsSearchProvider.ToTranslationSearchProvider();
|
TranslationSearchProvider = LyricsSearchProvider.ToTranslationSearchProvider();
|
||||||
}
|
}
|
||||||
@@ -123,12 +99,12 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService
|
|||||||
if (_settingsService.AppSettings.TranslationSettings.ShowTranslationOnly)
|
if (_settingsService.AppSettings.TranslationSettings.ShowTranslationOnly)
|
||||||
{
|
{
|
||||||
_lyricsDataArr[^1] = _lyricsDataArr[0].CreateLyricsDataFrom(translated);
|
_lyricsDataArr[^1] = _lyricsDataArr[0].CreateLyricsDataFrom(translated);
|
||||||
_lyricsDataArr[^1].SetDisplayedTextInOriginalText();
|
_lyricsDataArr[^1].ClearTranslatedText();
|
||||||
_langIndex = _lyricsDataArr.Count - 1;
|
_langIndex = _lyricsDataArr.Count - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_lyricsDataArr[0].SetDisplayedTextAlongWith(translated, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator);
|
_lyricsDataArr[0].SetTranslation(translated, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator);
|
||||||
_langIndex = 0;
|
_langIndex = 0;
|
||||||
}
|
}
|
||||||
TranslationSearchProvider = Enums.TranslationSearchProvider.LibreTranslate;
|
TranslationSearchProvider = Enums.TranslationSearchProvider.LibreTranslate;
|
||||||
@@ -141,6 +117,52 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task SetPhoneticTextAsync(CancellationToken token)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("Showing phonetic text for lyrics...");
|
||||||
|
string targetPhoneticCode = "";
|
||||||
|
_logger.LogInformation("Target phonetic code: {TargetPhonetic}", targetPhoneticCode);
|
||||||
|
string? originalText = _lyricsDataArr.FirstOrDefault()?.WrappedOriginalText;
|
||||||
|
if (originalText == null) return;
|
||||||
|
|
||||||
|
string? originalLangCode = LanguageHelper.DetectLanguageCode(originalText);
|
||||||
|
_logger.LogInformation("Original language code: {OriginalLangCode}", originalLangCode ?? "null");
|
||||||
|
|
||||||
|
if (originalLangCode == "zh" && _settingsService.AppSettings.TranslationSettings.IsChineseRomanizationEnabled)
|
||||||
|
{
|
||||||
|
switch (_settingsService.AppSettings.TranslationSettings.ChineseRomanization)
|
||||||
|
{
|
||||||
|
case ChineseRomanization.Pinyin:
|
||||||
|
targetPhoneticCode = "pinyin";
|
||||||
|
break;
|
||||||
|
case ChineseRomanization.Jyutping:
|
||||||
|
targetPhoneticCode = "jyutping";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (originalLangCode == "ja" && _settingsService.AppSettings.TranslationSettings.IsJapaneseRomanizationEnabled)
|
||||||
|
{
|
||||||
|
targetPhoneticCode = "romaji";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetPhoneticCode == "")
|
||||||
|
{
|
||||||
|
_lyricsDataArr[0].ClearPhoneticText();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try get phonetic text from itself first
|
||||||
|
int found = _translateService.SearchTranslatedLyricsItself(_lyricsDataArr, targetPhoneticCode);
|
||||||
|
if (found >= 0)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("Found translation in lyrics data at index {FoundIndex}", found);
|
||||||
|
_lyricsDataArr[0].SetPhoneticText(_lyricsDataArr[found], _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator, 50);
|
||||||
|
_langIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private async Task RefreshLyricsAsync(CancellationToken token)
|
private async Task RefreshLyricsAsync(CancellationToken token)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Refreshing lyrics...");
|
_logger.LogInformation("Refreshing lyrics...");
|
||||||
@@ -180,8 +202,8 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService
|
|||||||
|
|
||||||
_logger.LogInformation("Parsed lyrics: {MultiLangLyricsCount} languages", _lyricsDataArr.Count);
|
_logger.LogInformation("Parsed lyrics: {MultiLangLyricsCount} languages", _lyricsDataArr.Count);
|
||||||
|
|
||||||
// This ensures that original lyrics are always shown while waiting for translations
|
// This ensures that translation is always reset while waiting for translations
|
||||||
_lyricsDataArr[0].SetDisplayedTextInOriginalText();
|
_lyricsDataArr[0].ClearTranslatedText();
|
||||||
LyricsChanged?.Invoke(this, new LyricsChangedEventArgs(CurrentLyricsData));
|
LyricsChanged?.Invoke(this, new LyricsChangedEventArgs(CurrentLyricsData));
|
||||||
ApplyChinesePreference();
|
ApplyChinesePreference();
|
||||||
UpdateTranslations();
|
UpdateTranslations();
|
||||||
|
|||||||
@@ -571,6 +571,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
||||||
<value>Convert Chinese to Traditional Chinese</value>
|
<value>Convert Chinese to Traditional Chinese</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageCJK.Header" xml:space="preserve">
|
||||||
|
<value>CJK Unified Ideograph</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
||||||
<value>Click-through</value>
|
<value>Click-through</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -718,6 +721,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
||||||
<value>Follow system</value>
|
<value>Follow system</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageFontColor.Header" xml:space="preserve">
|
||||||
|
<value>Font color</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
||||||
<value>Keep the lyrics window on top by polling</value>
|
<value>Keep the lyrics window on top by polling</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -814,9 +820,6 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
||||||
<value>LX Music Server</value>
|
<value>LX Music Server</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyrics.Text" xml:space="preserve">
|
|
||||||
<value>Lyrics style and effect</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
||||||
<value>Alignment</value>
|
<value>Alignment</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -824,7 +827,7 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<value>Lyrics background</value>
|
<value>Lyrics background</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
||||||
<value>Font color (Non-current playback area)</value>
|
<value>Non-current playback area</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
||||||
<value>Font opacity (Non-current playback area)</value>
|
<value>Font opacity (Non-current playback area)</value>
|
||||||
@@ -860,7 +863,7 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<value>Extra Light</value>
|
<value>Extra Light</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
||||||
<value>Font color (Current playback area)</value>
|
<value>Current playback area</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
||||||
<value>Adaptive to lyrics background (Colored)</value>
|
<value>Adaptive to lyrics background (Colored)</value>
|
||||||
@@ -898,6 +901,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
||||||
<value>Glow effect</value>
|
<value>Glow effect</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageLyricsHighlight.Header" xml:space="preserve">
|
||||||
|
<value>Highlight</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
||||||
<value>Original highlight range</value>
|
<value>Original highlight range</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -946,9 +952,6 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
||||||
<value>Shadows</value>
|
<value>Shadows</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsStrokeFontColor.Header" xml:space="preserve">
|
|
||||||
<value>Lyrics stroke color</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
||||||
<value>Lyrics style</value>
|
<value>Lyrics style</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1027,6 +1030,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
||||||
<value>Open in file explorer</value>
|
<value>Open in file explorer</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageOriginalText.Header" xml:space="preserve">
|
||||||
|
<value>Original text</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
||||||
<value>Color picker style</value>
|
<value>Color picker style</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1042,6 +1048,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
||||||
<value>The path cannot be found on your computer</value>
|
<value>The path cannot be found on your computer</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPagePhoneticText.Header" xml:space="preserve">
|
||||||
|
<value>Phonetic text</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
||||||
<value>Pinyin of Mandarin</value>
|
<value>Pinyin of Mandarin</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1180,6 +1189,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
||||||
<value>Standard mode</value>
|
<value>Standard mode</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
|
||||||
|
<value>Stroke color</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
||||||
<value>Default</value>
|
<value>Default</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1213,6 +1225,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
||||||
<value>Switch in and cut out shortcut keys</value>
|
<value>Switch in and cut out shortcut keys</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageTranslatedText.Header" xml:space="preserve">
|
||||||
|
<value>Translated text</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
||||||
<value>Lyrics translation</value>
|
<value>Lyrics translation</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1228,6 +1243,9 @@ If you encounter any problems, please go to the Settings page, About tab, and vi
|
|||||||
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
||||||
<value>Version</value>
|
<value>Version</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageWesternChar.Header" xml:space="preserve">
|
||||||
|
<value>Latin alphabet</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
||||||
<value>Width</value>
|
<value>Width</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -571,6 +571,9 @@
|
|||||||
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
||||||
<value>中国人を伝統的な中国人に変換します</value>
|
<value>中国人を伝統的な中国人に変換します</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageCJK.Header" xml:space="preserve">
|
||||||
|
<value>CJK統一漢字</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
||||||
<value>クリックスルー</value>
|
<value>クリックスルー</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -718,6 +721,9 @@
|
|||||||
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
||||||
<value>システムをフォローします</value>
|
<value>システムをフォローします</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageFontColor.Header" xml:space="preserve">
|
||||||
|
<value>フォントの色</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
||||||
<value>ポーリングで歌詞ウィンドウを一番上に保ちましょう</value>
|
<value>ポーリングで歌詞ウィンドウを一番上に保ちましょう</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -814,9 +820,6 @@
|
|||||||
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
||||||
<value>LX Music Server</value>
|
<value>LX Music Server</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyrics.Text" xml:space="preserve">
|
|
||||||
<value>歌詞のスタイルと効果</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
||||||
<value>アライメント</value>
|
<value>アライメント</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -824,7 +827,7 @@
|
|||||||
<value>歌詞の背景</value>
|
<value>歌詞の背景</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
||||||
<value>フォントカラー(非電流再生エリア)</value>
|
<value>非電流再生エリア</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
||||||
<value>フォントの不透明度(非電流再生エリア)</value>
|
<value>フォントの不透明度(非電流再生エリア)</value>
|
||||||
@@ -860,7 +863,7 @@
|
|||||||
<value>余分な光</value>
|
<value>余分な光</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
||||||
<value>フォントカラー(現在の再生エリア)</value>
|
<value>現在の再生エリア</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
||||||
<value>歌詞の背景に適応する(色付き)</value>
|
<value>歌詞の背景に適応する(色付き)</value>
|
||||||
@@ -898,6 +901,9 @@
|
|||||||
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
||||||
<value>グロー効果</value>
|
<value>グロー効果</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageLyricsHighlight.Header" xml:space="preserve">
|
||||||
|
<value>ハイライト</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
||||||
<value>オリジナルのハイライト範囲</value>
|
<value>オリジナルのハイライト範囲</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -946,9 +952,6 @@
|
|||||||
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
||||||
<value>影だ</value>
|
<value>影だ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsStrokeFontColor.Header" xml:space="preserve">
|
|
||||||
<value>歌詞ストロークカラー</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
||||||
<value>歌詞スタイル</value>
|
<value>歌詞スタイル</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1027,6 +1030,9 @@
|
|||||||
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
||||||
<value>ファイルエクスプローラーで開きます</value>
|
<value>ファイルエクスプローラーで開きます</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageOriginalText.Header" xml:space="preserve">
|
||||||
|
<value>原文</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
||||||
<value>カラーピックスタイル</value>
|
<value>カラーピックスタイル</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1042,6 +1048,9 @@
|
|||||||
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
||||||
<value>パスはコンピューターでは見つかりません</value>
|
<value>パスはコンピューターでは見つかりません</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPagePhoneticText.Header" xml:space="preserve">
|
||||||
|
<value>発音</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
||||||
<value>マンダリンのピンイン</value>
|
<value>マンダリンのピンイン</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1180,6 +1189,9 @@
|
|||||||
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
||||||
<value>標準モード</value>
|
<value>標準モード</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
|
||||||
|
<value>ストロークカラー</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
||||||
<value>デフォルト</value>
|
<value>デフォルト</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1213,6 +1225,9 @@
|
|||||||
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
||||||
<value>ショートカットキーを切り込んで切り取ります</value>
|
<value>ショートカットキーを切り込んで切り取ります</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageTranslatedText.Header" xml:space="preserve">
|
||||||
|
<value>译文</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
||||||
<value>歌詞翻訳</value>
|
<value>歌詞翻訳</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1228,6 +1243,9 @@
|
|||||||
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
||||||
<value>バージョン</value>
|
<value>バージョン</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageWesternChar.Header" xml:space="preserve">
|
||||||
|
<value>英字</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
||||||
<value>幅</value>
|
<value>幅</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -571,6 +571,9 @@
|
|||||||
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
||||||
<value>중국어를 전통적인 중국어로 전환합니다</value>
|
<value>중국어를 전통적인 중국어로 전환합니다</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageCJK.Header" xml:space="preserve">
|
||||||
|
<value>한중일 통합 이데오그래프</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
||||||
<value>클릭률</value>
|
<value>클릭률</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -718,6 +721,9 @@
|
|||||||
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
||||||
<value>시스템을 따르십시오</value>
|
<value>시스템을 따르십시오</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageFontColor.Header" xml:space="preserve">
|
||||||
|
<value>폰트 색상</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
||||||
<value>투표를 통해 가사 창을 맨 위에 두세요</value>
|
<value>투표를 통해 가사 창을 맨 위에 두세요</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -814,9 +820,6 @@
|
|||||||
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
||||||
<value>LX 음악 서버</value>
|
<value>LX 음악 서버</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyrics.Text" xml:space="preserve">
|
|
||||||
<value>가사 스타일과 효과</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
||||||
<value>조정</value>
|
<value>조정</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -824,7 +827,7 @@
|
|||||||
<value>가사 배경</value>
|
<value>가사 배경</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
||||||
<value>글꼴 색상 (비 전류 재생 영역)</value>
|
<value>비 전류 재생 영역</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
||||||
<value>글꼴 불투명 (비 전류 재생 영역)</value>
|
<value>글꼴 불투명 (비 전류 재생 영역)</value>
|
||||||
@@ -860,7 +863,7 @@
|
|||||||
<value>여분의 빛</value>
|
<value>여분의 빛</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
||||||
<value>글꼴 색상 (현재 재생 영역)</value>
|
<value>현재 재생 영역</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
||||||
<value>가사 배경 (색상)에 적응</value>
|
<value>가사 배경 (색상)에 적응</value>
|
||||||
@@ -898,6 +901,9 @@
|
|||||||
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
||||||
<value>글로우 효과</value>
|
<value>글로우 효과</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageLyricsHighlight.Header" xml:space="preserve">
|
||||||
|
<value>하이라이트</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
||||||
<value>원래 하이라이트 범위</value>
|
<value>원래 하이라이트 범위</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -946,9 +952,6 @@
|
|||||||
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
||||||
<value>그림자</value>
|
<value>그림자</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsStrokeFontColor.Header" xml:space="preserve">
|
|
||||||
<value>가사 스트로크 컬러</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
||||||
<value>가사 스타일</value>
|
<value>가사 스타일</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1027,6 +1030,9 @@
|
|||||||
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
||||||
<value>파일 탐색기에서 열립니다</value>
|
<value>파일 탐색기에서 열립니다</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageOriginalText.Header" xml:space="preserve">
|
||||||
|
<value>원본</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
||||||
<value>색상 선택 스타일</value>
|
<value>색상 선택 스타일</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1042,6 +1048,9 @@
|
|||||||
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
||||||
<value>경로는 컴퓨터에서 찾을 수 없습니다</value>
|
<value>경로는 컴퓨터에서 찾을 수 없습니다</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPagePhoneticText.Header" xml:space="preserve">
|
||||||
|
<value>발성</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
||||||
<value>만다린의 피니 인</value>
|
<value>만다린의 피니 인</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1180,6 +1189,9 @@
|
|||||||
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
||||||
<value>표준 모드</value>
|
<value>표준 모드</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
|
||||||
|
<value>윤곽선 색상</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
||||||
<value>기본</value>
|
<value>기본</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1213,6 +1225,9 @@
|
|||||||
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
||||||
<value>바로 가기 키를 자르고 잘라냅니다</value>
|
<value>바로 가기 키를 자르고 잘라냅니다</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageTranslatedText.Header" xml:space="preserve">
|
||||||
|
<value>번역</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
||||||
<value>가사 번역</value>
|
<value>가사 번역</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1228,6 +1243,9 @@
|
|||||||
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
||||||
<value>버전</value>
|
<value>버전</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageWesternChar.Header" xml:space="preserve">
|
||||||
|
<value>라틴 알파벳</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
||||||
<value>너비</value>
|
<value>너비</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -571,6 +571,9 @@
|
|||||||
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
||||||
<value>中文转换为繁体</value>
|
<value>中文转换为繁体</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageCJK.Header" xml:space="preserve">
|
||||||
|
<value>中日韩统一表意文字</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
||||||
<value>点击穿透</value>
|
<value>点击穿透</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -718,6 +721,9 @@
|
|||||||
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
||||||
<value>跟随系统</value>
|
<value>跟随系统</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageFontColor.Header" xml:space="preserve">
|
||||||
|
<value>字体颜色</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
||||||
<value>通过轮询方式使歌词窗口保持置于顶层状态</value>
|
<value>通过轮询方式使歌词窗口保持置于顶层状态</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -814,9 +820,6 @@
|
|||||||
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
||||||
<value>LX 音乐服务器</value>
|
<value>LX 音乐服务器</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyrics.Text" xml:space="preserve">
|
|
||||||
<value>歌词样式与动效</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
||||||
<value>对齐方式</value>
|
<value>对齐方式</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -824,7 +827,7 @@
|
|||||||
<value>歌词背景</value>
|
<value>歌词背景</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
||||||
<value>字体颜色(非当前播放区域)</value>
|
<value>非当前播放区域</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
||||||
<value>字体不透明度(非当前播放区域)</value>
|
<value>字体不透明度(非当前播放区域)</value>
|
||||||
@@ -860,7 +863,7 @@
|
|||||||
<value>超细</value>
|
<value>超细</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
||||||
<value>字体颜色(当前播放区域)</value>
|
<value>当前播放区域</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
||||||
<value>适应歌词背景(彩色)</value>
|
<value>适应歌词背景(彩色)</value>
|
||||||
@@ -898,6 +901,9 @@
|
|||||||
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
||||||
<value>辉光效果</value>
|
<value>辉光效果</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageLyricsHighlight.Header" xml:space="preserve">
|
||||||
|
<value>高亮</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
||||||
<value>原文高亮显示范围</value>
|
<value>原文高亮显示范围</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -946,9 +952,6 @@
|
|||||||
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
||||||
<value>阴影</value>
|
<value>阴影</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsStrokeFontColor.Header" xml:space="preserve">
|
|
||||||
<value>歌词描边颜色</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
||||||
<value>歌词样式</value>
|
<value>歌词样式</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1027,6 +1030,9 @@
|
|||||||
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
||||||
<value>在文件资源管理器中打开</value>
|
<value>在文件资源管理器中打开</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageOriginalText.Header" xml:space="preserve">
|
||||||
|
<value>原文</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
||||||
<value>取色风格</value>
|
<value>取色风格</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1042,6 +1048,9 @@
|
|||||||
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
||||||
<value>无法在您的计算机中找到该路径</value>
|
<value>无法在您的计算机中找到该路径</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPagePhoneticText.Header" xml:space="preserve">
|
||||||
|
<value>注音</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
||||||
<value>普通话拼音</value>
|
<value>普通话拼音</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1180,6 +1189,9 @@
|
|||||||
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
||||||
<value>标准模式</value>
|
<value>标准模式</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
|
||||||
|
<value>描边颜色</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
||||||
<value>默认</value>
|
<value>默认</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1213,6 +1225,9 @@
|
|||||||
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
||||||
<value>切入与切出快捷键</value>
|
<value>切入与切出快捷键</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageTranslatedText.Header" xml:space="preserve">
|
||||||
|
<value>译文</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
||||||
<value>歌词翻译</value>
|
<value>歌词翻译</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1228,6 +1243,9 @@
|
|||||||
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
||||||
<value>版本号</value>
|
<value>版本号</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageWesternChar.Header" xml:space="preserve">
|
||||||
|
<value>拉丁字母</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
||||||
<value>宽度</value>
|
<value>宽度</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -571,6 +571,9 @@
|
|||||||
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
<data name="SettingsPageChinesePreference.Header" xml:space="preserve">
|
||||||
<value>中文轉換為繁體</value>
|
<value>中文轉換為繁體</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageCJK.Header" xml:space="preserve">
|
||||||
|
<value>中日韓統一表意文字</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
<data name="SettingsPageClickThrough.Header" xml:space="preserve">
|
||||||
<value>點擊穿透</value>
|
<value>點擊穿透</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -718,6 +721,9 @@
|
|||||||
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
<data name="SettingsPageFollowSystem.Content" xml:space="preserve">
|
||||||
<value>跟隨系統</value>
|
<value>跟隨系統</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageFontColor.Header" xml:space="preserve">
|
||||||
|
<value>字體顏色</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
<data name="SettingsPageForceAlwaysOnTop.Description" xml:space="preserve">
|
||||||
<value>透過輪詢方式使歌詞視窗保持置於頂層狀態</value>
|
<value>透過輪詢方式使歌詞視窗保持置於頂層狀態</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -814,9 +820,6 @@
|
|||||||
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
<data name="SettingsPageLXMusicServer.Text" xml:space="preserve">
|
||||||
<value>LX 音樂服務器</value>
|
<value>LX 音樂服務器</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyrics.Text" xml:space="preserve">
|
|
||||||
<value>歌詞樣式與動效</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsAlignment.Header" xml:space="preserve">
|
||||||
<value>對齊方式</value>
|
<value>對齊方式</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -824,7 +827,7 @@
|
|||||||
<value>歌詞背景</value>
|
<value>歌詞背景</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontColor.Header" xml:space="preserve">
|
||||||
<value>字體顏色(非當前播放區域)</value>
|
<value>非當前播放區域</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsBgFontOpacity.Header" xml:space="preserve">
|
||||||
<value>字體不透明度(非目前播放區域)</value>
|
<value>字體不透明度(非目前播放區域)</value>
|
||||||
@@ -860,7 +863,7 @@
|
|||||||
<value>超細</value>
|
<value>超細</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColor.Header" xml:space="preserve">
|
||||||
<value>字體顏色(當前播放區域)</value>
|
<value>當前播放區域</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
<data name="SettingsPageLyricsFgFontColorAdaptiveColored.Content" xml:space="preserve">
|
||||||
<value>適應歌詞背景(彩色)</value>
|
<value>適應歌詞背景(彩色)</value>
|
||||||
@@ -898,6 +901,9 @@
|
|||||||
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsGlowEffect.Header" xml:space="preserve">
|
||||||
<value>輝光效果</value>
|
<value>輝光效果</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageLyricsHighlight.Header" xml:space="preserve">
|
||||||
|
<value>高亮</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsHighlightScope.Header" xml:space="preserve">
|
||||||
<value>原文高亮顯示範圍</value>
|
<value>原文高亮顯示範圍</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -946,9 +952,6 @@
|
|||||||
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
<data name="SettingsPageLyricsShadow.Header" xml:space="preserve">
|
||||||
<value>陰影</value>
|
<value>陰影</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SettingsPageLyricsStrokeFontColor.Header" xml:space="preserve">
|
|
||||||
<value>歌詞描邊顏色</value>
|
|
||||||
</data>
|
|
||||||
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
<data name="SettingsPageLyricsStyle.Text" xml:space="preserve">
|
||||||
<value>歌詞樣式</value>
|
<value>歌詞樣式</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1027,6 +1030,9 @@
|
|||||||
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
<data name="SettingsPageOpenFolderButton.Content" xml:space="preserve">
|
||||||
<value>在檔案總管中開啟</value>
|
<value>在檔案總管中開啟</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageOriginalText.Header" xml:space="preserve">
|
||||||
|
<value>原文</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
<data name="SettingsPagePaletteGeneratorType.Header" xml:space="preserve">
|
||||||
<value>取色風格</value>
|
<value>取色風格</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1042,6 +1048,9 @@
|
|||||||
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
<data name="SettingsPagePathNotFound.Text" xml:space="preserve">
|
||||||
<value>無法在您的電腦中找到該路徑</value>
|
<value>無法在您的電腦中找到該路徑</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPagePhoneticText.Header" xml:space="preserve">
|
||||||
|
<value>注音</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
<data name="SettingsPagePinyin.Content" xml:space="preserve">
|
||||||
<value>普通話拼音</value>
|
<value>普通話拼音</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1180,6 +1189,9 @@
|
|||||||
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
<data name="SettingsPageStandardMode.Text" xml:space="preserve">
|
||||||
<value>標準模式</value>
|
<value>標準模式</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageStrokeFontColor.Header" xml:space="preserve">
|
||||||
|
<value>描邊顏色</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
<data name="SettingsPageSystemLanguage.Content" xml:space="preserve">
|
||||||
<value>預設</value>
|
<value>預設</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1213,6 +1225,9 @@
|
|||||||
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
<data name="SettingsPageToggleHotKey.Header" xml:space="preserve">
|
||||||
<value>切入與切出快捷鍵</value>
|
<value>切入與切出快捷鍵</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageTranslatedText.Header" xml:space="preserve">
|
||||||
|
<value>譯文</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
<data name="SettingsPageTranslation.Text" xml:space="preserve">
|
||||||
<value>歌詞翻譯</value>
|
<value>歌詞翻譯</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1228,6 +1243,9 @@
|
|||||||
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
<data name="SettingsPageVersion.Text" xml:space="preserve">
|
||||||
<value>版本號</value>
|
<value>版本號</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SettingsPageWesternChar.Header" xml:space="preserve">
|
||||||
|
<value>拉丁字母</value>
|
||||||
|
</data>
|
||||||
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
<data name="SettingsPageWidth.Header" xml:space="preserve">
|
||||||
<value>寬度</value>
|
<value>寬度</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -54,13 +54,11 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
|
|
||||||
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.Is3DLyricsEnabled)
|
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.Is3DLyricsEnabled)
|
||||||
{
|
{
|
||||||
using var perspectiveEffect = new Transform3DEffect
|
combinedDs.DrawImage(new Transform3DEffect
|
||||||
{
|
{
|
||||||
Source = blurredLyrics,
|
Source = blurredLyrics,
|
||||||
TransformMatrix = _lyrics3DMatrix
|
TransformMatrix = _lyrics3DMatrix
|
||||||
};
|
});
|
||||||
|
|
||||||
combinedDs.DrawImage(perspectiveEffect);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -321,7 +319,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
var line = _currentLyricsData?.LyricsLines.ElementAtOrDefault(i);
|
var line = _currentLyricsData?.LyricsLines.ElementAtOrDefault(i);
|
||||||
if (line == null) continue;
|
if (line == null) continue;
|
||||||
|
|
||||||
var textLayout = line.CanvasTextLayout;
|
var textLayout = line.OriginalCanvasTextLayout;
|
||||||
if (textLayout == null) continue;
|
if (textLayout == null) continue;
|
||||||
|
|
||||||
double layoutWidth = (double)textLayout.LayoutBounds.Width;
|
double layoutWidth = (double)textLayout.LayoutBounds.Width;
|
||||||
@@ -335,15 +333,16 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
ds.Transform =
|
ds.Transform =
|
||||||
Matrix3x2.CreateScale((float)line.ScaleTransition.Value, line.CenterPosition)
|
Matrix3x2.CreateScale((float)line.ScaleTransition.Value, line.CenterPosition)
|
||||||
* Matrix3x2.CreateRotation((float)line.AngleTransition.Value,
|
* Matrix3x2.CreateRotation((float)line.AngleTransition.Value,
|
||||||
currentPlayingLine.Position.WithX(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.FanLyricsAngle < 0 ? (float)_maxLyricsWidth : 0))
|
currentPlayingLine.OriginalPosition.WithX(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.FanLyricsAngle < 0 ? (float)_maxLyricsWidth : 0))
|
||||||
* Matrix3x2.CreateTranslation((float)_lyricsXTransition.Value, (float)yOffset);
|
* Matrix3x2.CreateTranslation((float)_lyricsXTransition.Value, (float)yOffset);
|
||||||
|
|
||||||
using var combined = new CanvasCommandList(control);
|
using var combined = new CanvasCommandList(control);
|
||||||
using var combinedDs = combined.CreateDrawingSession();
|
using var combinedDs = combined.CreateDrawingSession();
|
||||||
|
|
||||||
// 先铺一层带默认透明度的已经加了模糊效果的歌词作为最底层(背景歌词层次)
|
// 先铺一层带默认透明度的已经加了模糊效果的歌词作为最底层(背景歌词层次)
|
||||||
using var backgroundFontEffect = CanvasHelper.CreateFontEffect(line, control, _strokeFontColor,
|
using var backgroundFontEffect = CanvasHelper.CreateFontEffect(line, control, _strokeFontColor,
|
||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontStrokeWidth, _bgFontColor);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontStrokeWidth, _bgFontColor);
|
||||||
|
|
||||||
using var backgroundEffect = CanvasHelper.CreateBackgroundEffect(line, backgroundFontEffect, _lyricsOpacityTransition.Value);
|
using var backgroundEffect = CanvasHelper.CreateBackgroundEffect(line, backgroundFontEffect, _lyricsOpacityTransition.Value);
|
||||||
combinedDs.DrawImage(backgroundEffect);
|
combinedDs.DrawImage(backgroundEffect);
|
||||||
|
|
||||||
@@ -357,17 +356,24 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.IsLyricsLineFadeEnabled);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.IsLyricsLineFadeEnabled);
|
||||||
using var lineMask = CanvasHelper.CreateLineMask(control, line);
|
using var lineMask = CanvasHelper.CreateLineMask(control, line);
|
||||||
|
|
||||||
using var foregroundFontEffect = CanvasHelper.CreateFontEffect(line, control, _strokeFontColor,
|
using var foregroundFontEffect = CanvasHelper.CreateFontEffect(line, control, _strokeFontColor,
|
||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontStrokeWidth, _fgFontColor);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontStrokeWidth, _fgFontColor);
|
||||||
|
|
||||||
using var effectLayer = new CanvasCommandList(control);
|
using var effectLayer = new CanvasCommandList(control);
|
||||||
using var effectLayerDs = effectLayer.CreateDrawingSession();
|
using var effectLayerDs = effectLayer.CreateDrawingSession();
|
||||||
if (line.OriginalText != line.DisplayedText && _liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsTranslationHighlightAmount != 0)
|
if (line.PhoneticText != "" && _liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.PhoneticLyricsHighlightAmount != 0)
|
||||||
{
|
{
|
||||||
using var translationHighlightMask = CanvasHelper.CreateTranslationHighlightMask(control, line);
|
using var phoneticHighlightMask = CanvasHelper.CreatePhoneticHighlightMask(control, line);
|
||||||
using var foregroundTranslationHighlightEffect = CanvasHelper.CreateForegroundHighlightEffect(foregroundFontEffect, translationHighlightMask,
|
using var foregroundPhoneticHighlightEffect = CanvasHelper.CreateForegroundHighlightEffect(foregroundFontEffect, phoneticHighlightMask,
|
||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsTranslationHighlightAmount / 100.0);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.PhoneticLyricsHighlightAmount / 100.0);
|
||||||
effectLayerDs.DrawImage(foregroundTranslationHighlightEffect);
|
effectLayerDs.DrawImage(foregroundPhoneticHighlightEffect);
|
||||||
|
}
|
||||||
|
if (line.TranslatedText != "" && _liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.TranslatedLyricsHighlightAmount != 0)
|
||||||
|
{
|
||||||
|
using var translatedHighlightMask = CanvasHelper.CreateTranslatedHighlightMask(control, line);
|
||||||
|
using var foregroundTranslatedHighlightEffect = CanvasHelper.CreateForegroundHighlightEffect(foregroundFontEffect, translatedHighlightMask,
|
||||||
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.TranslatedLyricsHighlightAmount / 100.0);
|
||||||
|
effectLayerDs.DrawImage(foregroundTranslatedHighlightEffect);
|
||||||
}
|
}
|
||||||
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.IsLyricsShadowEnabled)
|
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.IsLyricsShadowEnabled)
|
||||||
{
|
{
|
||||||
@@ -385,12 +391,12 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsGlowEffectAmount);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsGlowEffectAmount);
|
||||||
effectLayerDs.DrawImage(foregroundBlurEffect);
|
effectLayerDs.DrawImage(foregroundBlurEffect);
|
||||||
}
|
}
|
||||||
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsHighlightAmount != 0)
|
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.OriginalLyricsHighlightAmount != 0)
|
||||||
{
|
{
|
||||||
var highlightEffectMask = CanvasHelper.GetAlphaMask(control, charMask, lineStartToCharMask, lineMask,
|
var highlightEffectMask = CanvasHelper.GetAlphaMask(control, charMask, lineStartToCharMask, lineMask,
|
||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsHighlightScope);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.OriginalLyricsHighlightScope);
|
||||||
using var foregroundHighlightEffect = CanvasHelper.CreateForegroundHighlightEffect(foregroundFontEffect, highlightEffectMask,
|
using var foregroundHighlightEffect = CanvasHelper.CreateForegroundHighlightEffect(foregroundFontEffect, highlightEffectMask,
|
||||||
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsHighlightAmount / 100.0);
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.OriginalLyricsHighlightAmount / 100.0);
|
||||||
effectLayerDs.DrawImage(foregroundHighlightEffect);
|
effectLayerDs.DrawImage(foregroundHighlightEffect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -234,7 +234,15 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
}
|
}
|
||||||
else if (message.Sender is LyricsStyleSettings)
|
else if (message.Sender is LyricsStyleSettings)
|
||||||
{
|
{
|
||||||
if (message.PropertyName == nameof(LyricsStyleSettings.LyricsFontSize))
|
if (message.PropertyName == nameof(LyricsStyleSettings.PhoneticLyricsFontSize))
|
||||||
|
{
|
||||||
|
_isLayoutChanged = true;
|
||||||
|
}
|
||||||
|
else if (message.PropertyName == nameof(LyricsStyleSettings.OriginalLyricsFontSize))
|
||||||
|
{
|
||||||
|
_isLayoutChanged = true;
|
||||||
|
}
|
||||||
|
else if (message.PropertyName == nameof(LyricsStyleSettings.TranslatedLyricsFontSize))
|
||||||
{
|
{
|
||||||
_isLayoutChanged = true;
|
_isLayoutChanged = true;
|
||||||
}
|
}
|
||||||
@@ -268,7 +276,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
{
|
{
|
||||||
_isLayoutChanged = true;
|
_isLayoutChanged = true;
|
||||||
}
|
}
|
||||||
else if (message.PropertyName == nameof(LyricsEffectSettings.LyricsHighlightScope))
|
else if (message.PropertyName == nameof(LyricsEffectSettings.OriginalLyricsHighlightScope))
|
||||||
{
|
{
|
||||||
_isLayoutChanged = true;
|
_isLayoutChanged = true;
|
||||||
}
|
}
|
||||||
@@ -372,7 +380,14 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
{
|
{
|
||||||
if (message.Sender is LyricsStyleSettings)
|
if (message.Sender is LyricsStyleSettings)
|
||||||
{
|
{
|
||||||
if (message.PropertyName == nameof(LyricsStyleSettings.LyricsFontFamily))
|
if (message.PropertyName == nameof(LyricsStyleSettings.LyricsCJKFontFamily))
|
||||||
|
{
|
||||||
|
_isLayoutChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (message.Sender is LyricsStyleSettings)
|
||||||
|
{
|
||||||
|
if (message.PropertyName == nameof(LyricsStyleSettings.LyricsWesternFontFamily))
|
||||||
{
|
{
|
||||||
_isLayoutChanged = true;
|
_isLayoutChanged = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using BetterLyrics.WinUI3.Enums;
|
using BetterLyrics.WinUI3.Enums;
|
||||||
using BetterLyrics.WinUI3.Helper;
|
using BetterLyrics.WinUI3.Helper;
|
||||||
using BetterLyrics.WinUI3.Models;
|
using BetterLyrics.WinUI3.Models;
|
||||||
|
using BetterLyrics.WinUI3.Services;
|
||||||
using CommunityToolkit.WinUI;
|
using CommunityToolkit.WinUI;
|
||||||
using Microsoft.Graphics.Canvas;
|
using Microsoft.Graphics.Canvas;
|
||||||
using Microsoft.Graphics.Canvas.Effects;
|
using Microsoft.Graphics.Canvas.Effects;
|
||||||
@@ -444,6 +445,13 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
_canvasYScrollTransition.Update(_elapsedTime);
|
_canvasYScrollTransition.Update(_elapsedTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string AutoSelectFontFamily(string text)
|
||||||
|
{
|
||||||
|
return LanguageHelper.IsCJK(text)
|
||||||
|
? _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsCJKFontFamily
|
||||||
|
: _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsWesternFontFamily;
|
||||||
|
}
|
||||||
|
|
||||||
private void ReLayout(ICanvasAnimatedControl control)
|
private void ReLayout(ICanvasAnimatedControl control)
|
||||||
{
|
{
|
||||||
if (control == null)
|
if (control == null)
|
||||||
@@ -451,14 +459,23 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
|
|
||||||
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.IsDynamicLyricsFontSize)
|
if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.IsDynamicLyricsFontSize)
|
||||||
{
|
{
|
||||||
_lyricsTextFormat.FontSize = (float)Math.Clamp(Math.Min(_canvasHeight, _canvasWidth) / 15, 12, 96);
|
_originalLyricsFontSize = (int)Math.Clamp(Math.Min(_canvasHeight, _canvasWidth) / 15, 12, 96);
|
||||||
|
_translatedLyricsFontSize = _phoneticLyricsFontSize = (int)(_originalLyricsFontSize * 0.6);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_lyricsTextFormat.FontSize = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontSize;
|
_phoneticLyricsFontSize = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.PhoneticLyricsFontSize;
|
||||||
|
_originalLyricsFontSize = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.OriginalLyricsFontSize;
|
||||||
|
_translatedLyricsFontSize = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.TranslatedLyricsFontSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
_originalLyricsFontWeight = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontWeight;
|
||||||
|
|
||||||
|
if (SongInfo != null)
|
||||||
|
{
|
||||||
|
_titleTextFormat.FontFamily = AutoSelectFontFamily(SongInfo.Title);
|
||||||
|
_artistTextFormat.FontFamily = AutoSelectFontFamily(SongInfo.Artist);
|
||||||
}
|
}
|
||||||
_lyricsTextFormat.FontWeight = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontWeight.ToFontWeight();
|
|
||||||
_lyricsTextFormat.FontFamily = _artistTextFormat.FontFamily = _titleTextFormat.FontFamily = _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontFamily;
|
|
||||||
|
|
||||||
_canvasYScrollTransition.SetDuration(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsScrollDuration / 1000.0);
|
_canvasYScrollTransition.SetDuration(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsScrollDuration / 1000.0);
|
||||||
_canvasYScrollTransition.SetEasingType(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsScrollEasingType);
|
_canvasYScrollTransition.SetEasingType(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.LyricsScrollEasingType);
|
||||||
@@ -475,16 +492,70 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
line.Position = new Vector2(0, (float)y);
|
line.RecreateTextLayout(control,
|
||||||
line.RecreateTextLayout(control, _lyricsTextFormat, _maxLyricsWidth, _canvasHeight, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsAlignmentType);
|
_settingsService.AppSettings.TranslationSettings.IsChineseRomanizationEnabled || _settingsService.AppSettings.TranslationSettings.IsJapaneseRomanizationEnabled,
|
||||||
line.UpdateCenterPosition(_maxLyricsWidth, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsAlignmentType);
|
_settingsService.AppSettings.TranslationSettings.IsTranslationEnabled,
|
||||||
|
_phoneticLyricsFontSize, _originalLyricsFontSize, _translatedLyricsFontSize,
|
||||||
|
_originalLyricsFontWeight,
|
||||||
|
_liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsCJKFontFamily, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsWesternFontFamily,
|
||||||
|
_maxLyricsWidth, _canvasHeight, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsAlignmentType);
|
||||||
line.RecreateTextGeometry();
|
line.RecreateTextGeometry();
|
||||||
|
|
||||||
y +=
|
// 设定注音文本布局坐标
|
||||||
(double)line.CanvasTextLayout!.LayoutBounds.Height
|
line.PhoneticPosition = new Vector2(0, (float)y);
|
||||||
/ line.CanvasTextLayout.LineCount
|
|
||||||
* (line.CanvasTextLayout.LineCount + _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsLineSpacingFactor);
|
// Y += 注音文本布局高度
|
||||||
|
if (line.PhoneticCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
y += line.PhoneticCanvasTextLayout.LayoutBounds.Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Y += 自定义 倍注音文本行高
|
||||||
|
if (line.PhoneticCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
y +=
|
||||||
|
(double)line.PhoneticCanvasTextLayout.LayoutBounds.Height
|
||||||
|
/ line.PhoneticCanvasTextLayout.LineCount
|
||||||
|
* 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设定原文文本布局坐标
|
||||||
|
line.OriginalPosition = new Vector2(0, (float)y);
|
||||||
|
|
||||||
|
// Y += 原文文本布局高度
|
||||||
|
if (line.OriginalCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
y += (double)line.OriginalCanvasTextLayout.LayoutBounds.Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.TranslatedCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
// Y += 自定义 倍翻译文本行高
|
||||||
|
y +=
|
||||||
|
(double)line.TranslatedCanvasTextLayout.LayoutBounds.Height
|
||||||
|
/ line.TranslatedCanvasTextLayout.LineCount
|
||||||
|
* 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设定翻译文本布局坐标
|
||||||
|
line.TranslatedPosition = new Vector2(0, (float)y);
|
||||||
|
|
||||||
|
// Y += 翻译文本布局高度
|
||||||
|
if (line.TranslatedCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
y += line.TranslatedCanvasTextLayout.LayoutBounds.Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Y += 用户自定义倍数原文文本布局高度
|
||||||
|
if (line.OriginalCanvasTextLayout != null)
|
||||||
|
{
|
||||||
|
y += (double)line.OriginalCanvasTextLayout.LayoutBounds.Height
|
||||||
|
/ line.OriginalCanvasTextLayout.LineCount
|
||||||
|
* _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsLineSpacingFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
line.UpdateCenterPosition(_maxLyricsWidth, _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsAlignmentType);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,11 +571,15 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
|
|
||||||
if (currentPlayingLine == null) return;
|
if (currentPlayingLine == null) return;
|
||||||
|
|
||||||
var playingTextLayout = currentPlayingLine?.CanvasTextLayout;
|
var playingTextLayout = currentPlayingLine?.OriginalCanvasTextLayout;
|
||||||
|
|
||||||
if (playingTextLayout == null) return;
|
if (playingTextLayout == null) return;
|
||||||
|
|
||||||
double? targetYScrollOffset = -currentPlayingLine!.Position.Y + _currentLyricsData?.LyricsLines[0].Position.Y - playingTextLayout.LayoutBounds.Height / 2.0;
|
//double? targetYScrollOffset = -currentPlayingLine!.OriginalPosition.Y + _currentLyricsData?.LyricsLines[0].OriginalPosition.Y - playingTextLayout.LayoutBounds.Height / 2.0;
|
||||||
|
double? targetYScrollOffset =
|
||||||
|
-currentPlayingLine!.OriginalPosition.Y
|
||||||
|
+ _currentLyricsData?.LyricsLines[0].OriginalPosition.Y
|
||||||
|
- (currentPlayingLine.TranslatedPosition.Y + (currentPlayingLine.TranslatedCanvasTextLayout?.LayoutBounds.Height ?? 0) - currentPlayingLine.PhoneticPosition.Y) / 2.0;
|
||||||
|
|
||||||
if (!targetYScrollOffset.HasValue) return;
|
if (!targetYScrollOffset.HasValue) return;
|
||||||
|
|
||||||
@@ -540,9 +615,9 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
{
|
{
|
||||||
int mid = (left + right) / 2;
|
int mid = (left + right) / 2;
|
||||||
var line = lines[mid];
|
var line = lines[mid];
|
||||||
var layout = line.CanvasTextLayout;
|
var layout = line.OriginalCanvasTextLayout;
|
||||||
if (layout == null) break;
|
if (layout == null) break;
|
||||||
double value = offset + line.Position.Y + (double)layout.LayoutBounds.Height;
|
double value = offset + line.OriginalPosition.Y + (double)layout.LayoutBounds.Height;
|
||||||
if (value >= 0)
|
if (value >= 0)
|
||||||
{
|
{
|
||||||
result = mid;
|
result = mid;
|
||||||
@@ -563,9 +638,9 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
{
|
{
|
||||||
int mid = (left + right) / 2;
|
int mid = (left + right) / 2;
|
||||||
var line = lines[mid];
|
var line = lines[mid];
|
||||||
var layout = line.CanvasTextLayout;
|
var layout = line.OriginalCanvasTextLayout;
|
||||||
if (layout == null) break;
|
if (layout == null) break;
|
||||||
double value = offset + line.Position.Y + (double)layout.LayoutBounds.Height;
|
double value = offset + line.OriginalPosition.Y + (double)layout.LayoutBounds.Height;
|
||||||
if (value >= canvasHeight)
|
if (value >= canvasHeight)
|
||||||
{
|
{
|
||||||
result = mid;
|
result = mid;
|
||||||
@@ -703,7 +778,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
{
|
{
|
||||||
int lineCountDelta = i - _playingLineIndex;
|
int lineCountDelta = i - _playingLineIndex;
|
||||||
int absoluteLineCountDelta = Math.Abs(lineCountDelta);
|
int absoluteLineCountDelta = Math.Abs(lineCountDelta);
|
||||||
double distanceFromPlayingLine = Math.Abs(line.Position.Y - currentPlayingLine.Position.Y);
|
double distanceFromPlayingLine = Math.Abs(line.OriginalPosition.Y - currentPlayingLine.OriginalPosition.Y);
|
||||||
double distanceFactor = Math.Clamp(distanceFromPlayingLine / (_canvasHeight / 2), 0, 1);
|
double distanceFactor = Math.Clamp(distanceFromPlayingLine / (_canvasHeight / 2), 0, 1);
|
||||||
|
|
||||||
line.AngleTransition.StartTransition(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.IsFanLyricsEnabled
|
line.AngleTransition.StartTransition(_liveStatesService.LiveStates.LyricsWindowStatus.LyricsEffectSettings.IsFanLyricsEnabled
|
||||||
|
|||||||
@@ -134,12 +134,12 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
|
|||||||
|
|
||||||
private int _timelineSyncThreshold = 0;
|
private int _timelineSyncThreshold = 0;
|
||||||
|
|
||||||
private CanvasTextFormat _lyricsTextFormat = new()
|
private int _phoneticLyricsFontSize = 18;
|
||||||
{
|
private int _originalLyricsFontSize = 36;
|
||||||
HorizontalAlignment = CanvasHorizontalAlignment.Left,
|
private int _translatedLyricsFontSize = 18;
|
||||||
VerticalAlignment = CanvasVerticalAlignment.Top,
|
|
||||||
FontSize = 12,
|
private LyricsFontWeight _originalLyricsFontWeight = LyricsFontWeight.Bold;
|
||||||
};
|
|
||||||
private CanvasTextFormat _titleTextFormat = new()
|
private CanvasTextFormat _titleTextFormat = new()
|
||||||
{
|
{
|
||||||
FontSize = 18,
|
FontSize = 18,
|
||||||
|
|||||||
@@ -33,8 +33,8 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
x:Uid="MainPageNoMusicPlaying"
|
x:Uid="MainPageNoMusicPlaying"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
FontFamily="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontFamily, Mode=OneWay}"
|
FontFamily="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsCJKFontFamily, Mode=OneWay}"
|
||||||
FontSize="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsFontSize, Mode=OneWay}"
|
FontSize="{x:Bind ViewModel.LiveStates.LyricsWindowStatus.LyricsStyleSettings.OriginalLyricsFontSize, Mode=OneWay}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
|
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
|
||||||
<HyperlinkButton x:Uid="SettingsPageFAQ" NavigateUri="{x:Bind const:Link.FAQUrl}" />
|
<HyperlinkButton x:Uid="SettingsPageFAQ" NavigateUri="{x:Bind const:Link.FAQUrl}" />
|
||||||
@@ -321,7 +321,8 @@
|
|||||||
Margin="0,0,0,2"
|
Margin="0,0,0,2"
|
||||||
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
|
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
|
||||||
Text="{x:Bind ViewModel.TimelineSliderThumbLyricsLine.StartMs, Converter={StaticResource MillisecondsToFormattedTimeConverter}, Mode=OneWay}" />
|
Text="{x:Bind ViewModel.TimelineSliderThumbLyricsLine.StartMs, Converter={StaticResource MillisecondsToFormattedTimeConverter}, Mode=OneWay}" />
|
||||||
<TextBlock Margin="0,0,0,2" Text="{x:Bind ViewModel.TimelineSliderThumbLyricsLine.DisplayedText, Mode=OneWay}" />
|
<!-- TODO 原文翻译共同显示 -->
|
||||||
|
<TextBlock Margin="0,0,0,2" Text="{x:Bind ViewModel.TimelineSliderThumbLyricsLine.OriginalText, Mode=OneWay}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid
|
<Grid
|
||||||
|
|||||||
Reference in New Issue
Block a user