diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest index ed46d54..0b8d0ab 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest @@ -12,7 +12,7 @@ + Version="1.0.94.0" /> diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml index ebcb9ce..5d8bd59 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml @@ -14,6 +14,7 @@ diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml.cs index 257adc9..56e2ffb 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Renderer/LyricsRenderer.xaml.cs @@ -35,5 +35,10 @@ namespace BetterLyrics.WinUI3.Renderer LyricsCanvas.RemoveFromVisualTree(); LyricsCanvas = null; } + + private void LyricsCanvas_CreateResources(Microsoft.Graphics.Canvas.UI.Xaml.CanvasAnimatedControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args) + { + ViewModel.CreateResources(sender, args); + } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs index 090dd90..dff9068 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs @@ -69,7 +69,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService if (originalText == null) return; string? originalLangCode = LanguageHelper.DetectLanguageCode(originalText); - _logger.LogInformation("Original language code: {OriginalLangCode}", originalLangCode ?? "null"); + _logger.LogInformation("Original language code: {OriginalLangCode}", originalLangCode); if (originalLangCode == targetLangCode) { @@ -83,7 +83,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService int found = _translateService.SearchTranslatedLyricsItself(_lyricsDataArr, targetLangCode); if (found >= 0) { - _logger.LogInformation("Found translation in lyrics data at index {FoundIndex}", found); + _logger.LogInformation("Found translated text in lyrics data at index {FoundIndex}", found); _lyricsDataArr[0].SetTranslatedText(_lyricsDataArr[found], _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator, 50); TranslationSearchProvider = LyricsSearchProvider.ToTranslationSearchProvider(); @@ -119,7 +119,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService if (originalText == null) return; string? originalLangCode = LanguageHelper.DetectLanguageCode(originalText); - _logger.LogInformation("Original language code: {OriginalLangCode}", originalLangCode ?? "null"); + _logger.LogInformation("Original phonetic code: {OriginalLangCode}", originalLangCode); if (originalLangCode == "zh" && _settingsService.AppSettings.TranslationSettings.IsChineseRomanizationEnabled) { @@ -139,7 +139,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService int found = _translateService.SearchTranslatedLyricsItself(_lyricsDataArr, targetPhoneticCode); if (found >= 0) { - _logger.LogInformation("Found translation in lyrics data at index {FoundIndex}", found); + _logger.LogInformation("Found phonetic text in lyrics data at index {FoundIndex}", found); _lyricsDataArr[0].SetPhoneticText(_lyricsDataArr[found], _liveStatesService.LiveStates.LyricsWindowStatus.LyricsStyleSettings.LyricsTranslationSeparator, 50); } @@ -174,7 +174,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService if (token.IsCancellationRequested) return; LyricsSearchProvider = lyricsSearchResult?.Provider; - _logger.LogInformation("Lyrics was found? {Found}, Provider: {LyricsSearchProvider}", lyricsSearchResult?.IsFound, LyricsSearchProvider?.ToString() ?? "null"); + _logger.LogInformation("Lyrics was found? {Found}, Provider: {LyricsSearchProvider}", lyricsSearchResult?.IsFound, LyricsSearchProvider); var lyricsParser = new LyricsParser(); lyricsParser.Parse( diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.cs index ee83a70..31b0f63 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.cs @@ -663,7 +663,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService { if (message.PropertyName == nameof(TranslationSettings.SelectedTargetLanguageCode)) { - _logger.LogInformation("Target language code changed: {code}", _settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageCode); + _logger.LogInformation("Target LibreTranslate language code changed: {code}", _settingsService.AppSettings.TranslationSettings.SelectedTargetLanguageCode); UpdateTranslations(); } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.CreateResources.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.CreateResources.cs new file mode 100644 index 0000000..a888bc8 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.CreateResources.cs @@ -0,0 +1,30 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel +{ + public partial class LyricsRendererViewModel + { + public void CreateResources(Microsoft.Graphics.Canvas.UI.Xaml.CanvasAnimatedControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args) + { + _logger.LogInformation("Creating resources... Reason: {Reason}", args.Reason); + switch (args.Reason) + { + case Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesReason.FirstTime: + _isDeviceChanged = true; + break; + case Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesReason.NewDevice: + _isDeviceChanged = true; + break; + case Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesReason.DpiChanged: + break; + default: + break; + } + } + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Update.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Update.cs index b7ee1c7..7931a5a 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Update.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.Update.cs @@ -26,6 +26,8 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel { public partial class LyricsRendererViewModel { + private bool _isLayoutChanged = true; + private bool _isCanvasWidthChanged = false; private bool _isCanvasHeightChanged = false; @@ -60,6 +62,8 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel private bool _isLyrics3DMatrixChanged = true; + private bool _isDeviceChanged = true; + public void Update(ICanvasAnimatedControl control, CanvasAnimatedUpdateEventArgs args) { _elapsedTime = args.Timing.ElapsedTime; @@ -77,7 +81,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel //_effect?.Properties["iTime"] = Convert.ToSingle(TotalTime.TotalSeconds); - if (_isFluidOverlayEnabledChanged) + if (_isDeviceChanged || _isFluidOverlayEnabledChanged) { if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsBackgroundSettings.IsFluidOverlayEnabled) { @@ -142,8 +146,11 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel _isDebugOverlayEnabledChanged = false; } - _rotateAngle += _coverRotateBaseSpeed * _liveStatesService.LiveStates.LyricsWindowStatus.LyricsBackgroundSettings.CoverOverlaySpeed / 100.0; - _rotateAngle %= Math.PI * 2; + if (_liveStatesService.LiveStates.LyricsWindowStatus.LyricsBackgroundSettings.CoverOverlaySpeed > 0) + { + _rotateAngle += _coverRotateBaseSpeed * _liveStatesService.LiveStates.LyricsWindowStatus.LyricsBackgroundSettings.CoverOverlaySpeed / 100.0; + _rotateAngle %= Math.PI * 2; + } if (_isSpectrumOverlayEnabledChanged) { @@ -176,7 +183,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel // } //} - if (_isCanvasWidthChanged || _isCanvasHeightChanged) + if (_isDeviceChanged || _isCanvasWidthChanged || _isCanvasHeightChanged) { UpdateSongInfoFontSize(); @@ -200,7 +207,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel } } - if (_isDisplayTypeChanged || _isLyricsLayoutOrientationChanged || _isAlbumArtSizeChanged || + if (_isDeviceChanged || _isDisplayTypeChanged || _isLyricsLayoutOrientationChanged || _isAlbumArtSizeChanged || _isSongInfoFontSizeChanged || _isSongTitleVisibilityChanged || _isSongArtistsVisibilityChanged || _isCanvasWidthChanged || _isCanvasHeightChanged || _isAlbumArtSizeChanged) @@ -320,20 +327,18 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel // 将当前背景图放到 _lastAlbumArtSwBitmap 中 并设置不透明度为 1 // 将新的背景图放到 _albumArtSwBitmap 中 并设置不透明度为 0 // 这样可以实现背景图的连贯渐变效果 - if (_albumArtChanged || _isLyricsLayoutOrientationChanged || _isAlbumArtSizeChanged || + if (_isDeviceChanged || _albumArtChanged || _isLyricsLayoutOrientationChanged || _isAlbumArtSizeChanged || _isCanvasHeightChanged || _isCanvasWidthChanged || _lyricsBgBrightnessTransition.IsTransitioning || _albumArtBgTransition.IsTransitioning) { - // 必须先在此处重置动画 - if (_albumArtChanged) + if (_isDeviceChanged || _albumArtChanged) { + // 必须先在此处重置动画 _albumArtBgTransition.Reset(0f); _albumArtBgTransition.StartTransition(1f); - } - // 更新 last 和 current - if (_albumArtChanged) - { + + // 更新 last 和 current if (_lastAlbumArtSwBitmap != null) { _lastAlbumArtCanvasBitmap?.Dispose(); @@ -360,50 +365,37 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel _isLyricsLayoutOrientationChanged = false; _isAlbumArtSizeChanged = false; - if (_isCoverAcrylicEffectAmountChanged) + if (_isDeviceChanged || _isAlbumArtBgOpacityChanged || _isAlbumArtBgBlurAmountChanged || _isCoverAcrylicEffectAmountChanged) { - UpdateCoverAcrylicOverlay(control); + if (_isDeviceChanged || _isCoverAcrylicEffectAmountChanged) + { + UpdateCoverAcrylicOverlay(control); + } DisposeAlbumArtBgRenderTarget(); UpdateAlbumArtBgEffect(control); _isAlbumArtBgEffectChanged = true; - _isCoverAcrylicEffectAmountChanged = false; - } - - if (_isAlbumArtBgOpacityChanged) - { - DisposeAlbumArtBgRenderTarget(); - UpdateAlbumArtBgEffect(control); - _isAlbumArtBgEffectChanged = true; - _isAlbumArtBgOpacityChanged = false; - } - - if (_isAlbumArtBgBlurAmountChanged) - { - DisposeAlbumArtBgRenderTarget(); - UpdateAlbumArtBgEffect(control); - _isAlbumArtBgEffectChanged = true; - _isAlbumArtBgBlurAmountChanged = false; + _isCoverAcrylicEffectAmountChanged = false; } _albumArtChanged = false; - if (!_isAlbumArtEffectChanged && _albumArtEffect != null) + if (_isDeviceChanged || (!_isAlbumArtEffectChanged && _albumArtEffect != null)) { UpdateAlbumArtRenderTarget(control); DisposeAlbumArtEffect(); } - if (!_isAlbumArtBgEffectChanged && _albumArtBgEffect != null) + if (_isDeviceChanged || (!_isAlbumArtBgEffectChanged && _albumArtBgEffect != null)) { UpdateAlbumArtBgRenderTarget(control); DisposeAlbumArtBgEffect(); } - if (_isCanvasHeightChanged || _isCanvasWidthChanged || _lyricsXTransition.IsTransitioning) + if (_isDeviceChanged || _isCanvasHeightChanged || _isCanvasWidthChanged || _lyricsXTransition.IsTransitioning) { _maxLyricsWidth = _canvasWidth - _lyricsXTransition.Value - _rightMargin; _maxLyricsWidth = Math.Max(_maxLyricsWidth, 0); @@ -458,6 +450,8 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel _lyricsBgBrightnessTransition.Update(_elapsedTime); _songInfoOpacityTransition.Update(_elapsedTime); _canvasYScrollTransition.Update(_elapsedTime); + + _isDeviceChanged = false; } private string AutoSelectFontFamily(string text) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs index 0124070..4ad850f 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel/LyricsRendererViewModel.cs @@ -130,8 +130,6 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel [ObservableProperty] public partial bool IsPlaying { get; set; } = false; - private bool _isLayoutChanged = true; - private int _timelineSyncThreshold = 0; private int _phoneticLyricsFontSize = 18;