This commit is contained in:
Zhe Fang
2025-08-04 11:23:07 -04:00
parent eb05c1ea13
commit 430b2f4d28
4 changed files with 24 additions and 9 deletions

View File

@@ -12,7 +12,7 @@
<Identity
Name="37412.BetterLyrics"
Publisher="CN=E1428B0E-DC1D-4EA4-ACB1-4556569D5BA9"
Version="1.0.40.0" />
Version="1.0.42.0" />
<mp:PhoneIdentity PhoneProductId="ca4a4830-fc19-40d9-b823-53e2bff3d816" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>

View File

@@ -64,10 +64,15 @@ namespace BetterLyrics.WinUI3.Models
CanvasTextLayout.HorizontalAlignment = type.ToCanvasHorizontalAlignment();
}
public void UpdateTextGeometry()
public void DisposeTextGeometry()
{
TextGeometry?.Dispose();
TextGeometry = null;
}
public void UpdateTextGeometry()
{
DisposeTextGeometry();
if (CanvasTextLayout == null)
{
return;
@@ -75,12 +80,17 @@ namespace BetterLyrics.WinUI3.Models
TextGeometry = CanvasGeometry.CreateText(CanvasTextLayout);
}
public void UpdateFontEffect(ICanvasAnimatedControl control, bool drawStroke, Color strokeColor, int strokeWidth, Color fontColor)
public void DisposeFontEffects()
{
BackgroundFontEffect?.Dispose();
BackgroundFontEffect = null;
ForegroundFontEffect?.Dispose();
ForegroundFontEffect = null;
}
public void UpdateFontEffect(ICanvasAnimatedControl control, bool drawStroke, Color strokeColor, int strokeWidth, Color fontColor)
{
DisposeFontEffects();
if (TextGeometry == null)
{
return;

View File

@@ -258,7 +258,7 @@ namespace BetterLyrics.WinUI3.ViewModels
}
);
if (line.HighlightOpacityTransition.Value != 0)
if (line.HighlightOpacityTransition.Value !=0)
{
// 再叠加高亮行歌词层(前景歌词层)
using var mask = new CanvasCommandList(control.Device);
@@ -431,6 +431,9 @@ namespace BetterLyrics.WinUI3.ViewModels
// Reset scale
ds.Transform = Matrix3x2.Identity;
line.DisposeFontEffects();
line.DisposeTextGeometry();
}
}

View File

@@ -6,6 +6,7 @@ using Microsoft.Graphics.Canvas.Text;
using Microsoft.Graphics.Canvas.UI.Xaml;
using Microsoft.UI;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -238,7 +239,7 @@ namespace BetterLyrics.WinUI3.ViewModels
UpdateCanvasYScrollOffset(control, false, true);
}
UpdateLinesProps();
UpdateLinesProps(control);
_isLayoutChanged = false;
@@ -288,11 +289,9 @@ namespace BetterLyrics.WinUI3.ViewModels
continue;
}
line.UpdateTextLayout(control, _lyricsTextFormat, _maxLyricsWidth, _canvasHeight, _isDockMode ? TextAlignmentType.Center : _lyricsAlignmentType);
line.UpdateTextGeometry();
line.Position = new Vector2(0, y);
line.UpdateTextLayout(control, _lyricsTextFormat, _maxLyricsWidth, _canvasHeight, _isDockMode ? TextAlignmentType.Center : _lyricsAlignmentType);
line.UpdateCenterPosition(_maxLyricsWidth, _isDockMode ? TextAlignmentType.Center : _lyricsAlignmentType);
line.UpdateFontEffect(control, _isDesktopMode, _strokeFontColor, _lyricsFontStrokeWidth, _bgFontColor);
if (line.CanvasTextLayout == null)
{
@@ -501,7 +500,7 @@ namespace BetterLyrics.WinUI3.ViewModels
_isLayoutChanged = true;
}
private void UpdateLinesProps()
private void UpdateLinesProps(ICanvasAnimatedControl control)
{
var currentPlayingLine = _lyricsDataArr
.ElementAtOrDefault(_langIndex)
@@ -515,6 +514,9 @@ namespace BetterLyrics.WinUI3.ViewModels
if (line == null) continue;
line.UpdateTextGeometry();
line.UpdateFontEffect(control, _isDesktopMode, _strokeFontColor, _lyricsFontStrokeWidth, _bgFontColor);
if (_isLayoutChanged || _isVisibleLinesBoundaryChanged || _isPlayingLineChanged)
{
float distanceFromPlayingLine = Math.Abs(line.Position.Y - currentPlayingLine.Position.Y);