From eb125e547f4cb06fab073c80e65dcb702ccd49ee Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Sat, 24 Feb 2024 20:24:46 +0800 Subject: [PATCH] add mask when no backdrop --- .../BackgroundImage/BackgroundImageService.cs | 7 ++++-- .../IBackgroundImageService.cs | 2 +- .../BackdropTypeToOpacityConverter.cs | 15 ++++++++++++ src/Snap.Hutao/Snap.Hutao/View/MainView.xaml | 10 +++++++- .../Snap.Hutao/View/MainView.xaml.cs | 6 ----- .../Snap.Hutao/ViewModel/MainViewModel.cs | 24 +++++++++++++++---- 6 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/View/Converter/Specialized/BackdropTypeToOpacityConverter.cs diff --git a/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs b/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs index fce2983e..7b23058a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs @@ -28,13 +28,13 @@ internal sealed partial class BackgroundImageService : IBackgroundImageService private HashSet currentBackgroundPathSet; - public async ValueTask> GetNextBackgroundImageAsync(BackgroundImage? previous) + public async ValueTask> GetNextBackgroundImageAsync(BackgroundImage? previous) { HashSet backgroundSet = await SkipOrInitBackgroundAsync().ConfigureAwait(false); if (backgroundSet.Count <= 0) { - return new(false, default!); + return new(true, default!); } string path = System.Random.Shared.GetItems([..backgroundSet], 1)[0]; @@ -109,6 +109,9 @@ internal sealed partial class BackgroundImageService : IBackgroundImageService case BackgroundImageType.HutaoOfficialLauncher: await SetCurrentBackgroundPathSetAsync(client => client.GetLauncherWallpaperAsync()).ConfigureAwait(false); break; + default: + currentBackgroundPathSet = []; + break; } currentBackgroundPathSet ??= []; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/IBackgroundImageService.cs b/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/IBackgroundImageService.cs index 39bc6201..86ae854f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/IBackgroundImageService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/IBackgroundImageService.cs @@ -5,5 +5,5 @@ namespace Snap.Hutao.Service.BackgroundImage; internal interface IBackgroundImageService { - ValueTask> GetNextBackgroundImageAsync(BackgroundImage? previous); + ValueTask> GetNextBackgroundImageAsync(BackgroundImage? previous); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/Specialized/BackdropTypeToOpacityConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/Specialized/BackdropTypeToOpacityConverter.cs new file mode 100644 index 00000000..d373bbf8 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/Specialized/BackdropTypeToOpacityConverter.cs @@ -0,0 +1,15 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Control; +using Snap.Hutao.Core.Windowing; + +namespace Snap.Hutao.View.Converter.Specialized; + +internal sealed class BackdropTypeToOpacityConverter : ValueConverter +{ + public override double Convert(BackdropType from) + { + return from is BackdropType.None ? 1 : 0; + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml index 45f98c12..dd20062c 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml @@ -9,6 +9,7 @@ xmlns:shch="using:Snap.Hutao.Control.Helper" xmlns:shcm="using:Snap.Hutao.Control.Markup" xmlns:shv="using:Snap.Hutao.View" + xmlns:shvcs="using:Snap.Hutao.View.Converter.Specialized" xmlns:shvh="using:Snap.Hutao.View.Helper" xmlns:shvm="using:Snap.Hutao.ViewModel" xmlns:shvp="using:Snap.Hutao.View.Page" @@ -27,9 +28,16 @@ 0,1,0,0 24 + - + + + + + + + { private readonly IBackgroundImageService backgroundImageService; + private readonly ILogger logger; private readonly ITaskContext taskContext; + private readonly AppOptions appOptions; private BackgroundImage? previousBackgroundImage; private Image? backgroundImagePresenter; + public AppOptions AppOptions { get => appOptions; } + public void Initialize(IBackgroundImagePresenterAccessor accessor) { backgroundImagePresenter = accessor.BackgroundImagePresenter; @@ -40,9 +46,9 @@ internal sealed partial class MainViewModel : Abstraction.ViewModel, IMainViewMo return; } - (bool isOk, BackgroundImage backgroundImage) = await backgroundImageService.GetNextBackgroundImageAsync(previousBackgroundImage).ConfigureAwait(false); + (bool shouldRefresh, BackgroundImage? backgroundImage) = await backgroundImageService.GetNextBackgroundImageAsync(previousBackgroundImage).ConfigureAwait(false); - if (isOk) + if (shouldRefresh) { previousBackgroundImage = backgroundImage; await taskContext.SwitchToMainThreadAsync(); @@ -57,8 +63,18 @@ internal sealed partial class MainViewModel : Abstraction.ViewModel, IMainViewMo .StartAsync(backgroundImagePresenter) .ConfigureAwait(true); - backgroundImagePresenter.Source = backgroundImage.ImageSource; - double targetOpacity = ThemeHelper.IsDarkMode(backgroundImagePresenter.ActualTheme) ? 1 - backgroundImage.Luminance : backgroundImage.Luminance; + backgroundImagePresenter.Source = backgroundImage?.ImageSource; + double targetOpacity = backgroundImage is not null + ? ThemeHelper.IsDarkMode(backgroundImagePresenter.ActualTheme) + ? 1 - backgroundImage.Luminance + : backgroundImage.Luminance + : 0; + + logger.LogInformation( + "Background image: [Accent color: {AccentColor}] [Luminance: {Luminance}] [Opacity: {TargetOpacity}]", + backgroundImage?.AccentColor.ToString(CultureInfo.CurrentCulture), + backgroundImage?.Luminance, + targetOpacity); await AnimationBuilder .Create()