fix: window color sampling incorrect behavior

This commit is contained in:
Zhe Fang
2025-10-22 10:18:49 -04:00
parent e638739638
commit 2adc2aced2
5 changed files with 32 additions and 40 deletions

View File

@@ -131,7 +131,7 @@ namespace BetterLyrics.WinUI3.Helper
}
case WindowPixelSampleMode.AboveWindow:
{
return GetAverageColorFromScreenRegion(myRect.Left, myRect.Top - 3, screenWidth, 1);
return GetAverageColorFromScreenRegion(myRect.Left, myRect.Top - 2, screenWidth, 1);
}
case WindowPixelSampleMode.WindowArea:
{
@@ -149,49 +149,21 @@ namespace BetterLyrics.WinUI3.Helper
if (width <= 0 || height <= 0)
return System.Drawing.Color.Transparent;
var edgeThickness = new Thickness(36, 0, 36, 0);
var edgeThickness = new Thickness(36, 36, 36, 36);
List<System.Drawing.Color> edgeColors = [];
// Top edge
if (edgeThickness.Top > 0 && edgeThickness.Top < height)
edgeColors.Add(
GetAverageColorFromScreenRegion(
myRect.Left,
myRect.Top,
width,
(int)edgeThickness.Top
)
);
if (edgeThickness.Top > 0)
edgeColors.Add(GetAverageColorFromScreenRegion(myRect.Left, myRect.Top - (int)edgeThickness.Top, width, (int)edgeThickness.Top));
// Bottom edge
if (edgeThickness.Bottom > 0 && edgeThickness.Bottom < height)
edgeColors.Add(
GetAverageColorFromScreenRegion(
myRect.Left,
myRect.Bottom - (int)edgeThickness.Bottom,
width,
(int)edgeThickness.Bottom
)
);
if (edgeThickness.Bottom > 0)
edgeColors.Add(GetAverageColorFromScreenRegion(myRect.Left, myRect.Bottom, width, (int)edgeThickness.Bottom));
// Left edge
if (edgeThickness.Left > 0 && edgeThickness.Left < width)
edgeColors.Add(
GetAverageColorFromScreenRegion(
myRect.Left,
myRect.Top + (int)edgeThickness.Top,
(int)edgeThickness.Left,
height - (int)edgeThickness.Top - (int)edgeThickness.Bottom
)
);
if (edgeThickness.Left > 0)
edgeColors.Add(GetAverageColorFromScreenRegion(myRect.Left - (int)edgeThickness.Left, myRect.Top, (int)edgeThickness.Left, height));
// Right edge
if (edgeThickness.Right > 0 && edgeThickness.Right < width)
edgeColors.Add(
GetAverageColorFromScreenRegion(
myRect.Right - (int)edgeThickness.Right,
myRect.Top + (int)edgeThickness.Top,
(int)edgeThickness.Right,
height - (int)edgeThickness.Top - (int)edgeThickness.Bottom
)
);
if (edgeThickness.Right > 0)
edgeColors.Add(GetAverageColorFromScreenRegion(myRect.Right, myRect.Top, (int)edgeThickness.Right, height));
// 合并四边平均色
if (edgeColors.Count == 0)

View File

@@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.UI.Xaml;
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Windows.UI;
@@ -103,6 +104,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
_immersiveBgColorTransition.StartTransition(message.NewValue);
_environmentalColor = message.NewValue;
UpdateColorConfig();
Debug.WriteLine("Line 107: Invoke UpdateColorConfig();");
}
}
else if (message.Sender is LyricsStyleSettings)

View File

@@ -384,6 +384,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
{
_maxLyricsWidth = _canvasWidth - _lyricsXTransition.Value - _rightMargin;
_maxLyricsWidth = Math.Max(_maxLyricsWidth, 0);
Debug.WriteLine("Line 387: _isLayoutChanged = true");
_isLayoutChanged = true;
}
@@ -395,7 +396,12 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
if (_isLayoutChanged || _isPlayingLineChanged)
{
UpdateCanvasTargetYScrollOffset();
_canvasYScrollTransition.StartTransition(_canvasTargetYScrollOffset, _isLayoutChanged);
if (_isLayoutChanged)
{
Debug.WriteLine("--------------------跳变");
}
//_canvasYScrollTransition.StartTransition(_canvasTargetYScrollOffset, _isLayoutChanged);
_canvasYScrollTransition.StartTransition(_canvasTargetYScrollOffset);
}
UpdateVisibleLinesBoundary();
@@ -406,12 +412,16 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
_titleXTransition.Update(_elapsedTime);
_titleYTransition.Update(_elapsedTime);
_lyricsXTransition.Update(_elapsedTime);
_lyricsYTransition.Update(_elapsedTime);
_albumArtXTransition.Update(_elapsedTime);
_albumArtYTransition.Update(_elapsedTime);
_lyricsOpacityTransition.Update(_elapsedTime);
_albumArtOpacityTransition.Update(_elapsedTime);
_immersiveBgOpacityTransition.Update(_elapsedTime);
_immersiveBgColorTransition.Update(_elapsedTime);
@@ -667,6 +677,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
}
_isLayoutChanged = true;
Debug.WriteLine("Line 680: _isLayoutChanged = true");
}
private void UpdateVisibleLinesProps(ICanvasAnimatedControl control)

View File

@@ -203,6 +203,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
IsPlaying = _mediaSessionsService.IsPlaying;
UpdateColorConfig();
Debug.WriteLine("Line 206: Invoke UpdateColorConfig();");
_spectrumAnalyzer = new SpectrumAnalyzer();
}
@@ -211,6 +212,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
{
_currentLyricsData = e.LyricsData;
_isLayoutChanged = true;
Debug.WriteLine("Line 214: _isLayoutChanged = true");
}
private int GetCurrentPlayingLineIndex()
@@ -360,6 +362,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
if (diff >= _timelineSyncThreshold + 5000)
{
_isLayoutChanged = true;
Debug.WriteLine("Line 364: _isLayoutChanged = true");
}
}
@@ -403,6 +406,7 @@ namespace BetterLyrics.WinUI3.ViewModels.LyricsRendererViewModel
_albumArtDarkAccentColors = e.AlbumArtDarkAccentColors;
UpdateColorConfig();
Debug.WriteLine("Line 409: Invoke UpdateColorConfig();");
}
}
}

View File

@@ -154,7 +154,10 @@ namespace BetterLyrics.WinUI3
{
presenter.IsAlwaysOnTop = true;
}
UpdateBackdropAccentColor(hwnd);
if (_liveStatesService.LiveStates.LyricsWindowStatus.IsAdaptToEnvironment)
{
UpdateBackdropAccentColor(hwnd);
}
}, Constants.Time.DebounceTimeout);
}
);