mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-08-19 12:23:25 +08:00
,0.6.0
重构了设置系统。解决了大量的bug,正式添加了图标。引入了遥测的同意与许可(暂无实际功能)
This commit is contained in:
72
LanMountainDesktop/Services/AppLogoService.cs
Normal file
72
LanMountainDesktop/Services/AppLogoService.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform;
|
||||
|
||||
namespace LanMountainDesktop.Services;
|
||||
|
||||
public enum AppLogoVariant
|
||||
{
|
||||
Auto = 0,
|
||||
Day = 1,
|
||||
Night = 2
|
||||
}
|
||||
|
||||
public interface IAppLogoService
|
||||
{
|
||||
WindowIcon CreateWindowIcon(AppLogoVariant variant = AppLogoVariant.Auto);
|
||||
WindowIcon CreateTrayIcon(AppLogoVariant variant = AppLogoVariant.Auto);
|
||||
Uri GetVectorLogoUri(AppLogoVariant variant = AppLogoVariant.Auto);
|
||||
}
|
||||
|
||||
internal sealed class AppLogoService : IAppLogoService
|
||||
{
|
||||
private static readonly Uri NightVectorLogoUri = new("avares://LanMountainDesktop/Assets/logo_nightly.svg");
|
||||
private static readonly Uri DayVectorLogoUri = new("avares://LanMountainDesktop/Assets/logo_nightly.svg");
|
||||
private static readonly Uri NightIconUri = new("avares://LanMountainDesktop/Assets/logo_nightly.ico");
|
||||
private static readonly Uri DayIconUri = new("avares://LanMountainDesktop/Assets/logo_nightly.ico");
|
||||
|
||||
public WindowIcon CreateWindowIcon(AppLogoVariant variant = AppLogoVariant.Auto) => CreateIcon(ResolveIconUri(variant));
|
||||
|
||||
public WindowIcon CreateTrayIcon(AppLogoVariant variant = AppLogoVariant.Auto) => CreateIcon(ResolveIconUri(variant));
|
||||
|
||||
public Uri GetVectorLogoUri(AppLogoVariant variant = AppLogoVariant.Auto) => ResolveVectorLogoUri(variant);
|
||||
|
||||
private static WindowIcon CreateIcon(Uri assetUri)
|
||||
{
|
||||
using var stream = AssetLoader.Open(assetUri);
|
||||
return new WindowIcon(stream);
|
||||
}
|
||||
|
||||
private static Uri ResolveIconUri(AppLogoVariant variant) => ResolveVariant(variant) switch
|
||||
{
|
||||
AppLogoVariant.Day => DayIconUri,
|
||||
_ => NightIconUri
|
||||
};
|
||||
|
||||
private static Uri ResolveVectorLogoUri(AppLogoVariant variant) => ResolveVariant(variant) switch
|
||||
{
|
||||
AppLogoVariant.Day => DayVectorLogoUri,
|
||||
_ => NightVectorLogoUri
|
||||
};
|
||||
|
||||
private static AppLogoVariant ResolveVariant(AppLogoVariant variant) => variant switch
|
||||
{
|
||||
AppLogoVariant.Day => AppLogoVariant.Day,
|
||||
AppLogoVariant.Night => AppLogoVariant.Night,
|
||||
_ => AppLogoVariant.Night
|
||||
};
|
||||
}
|
||||
|
||||
internal static class HostAppLogoProvider
|
||||
{
|
||||
private static readonly object Gate = new();
|
||||
private static IAppLogoService? _instance;
|
||||
|
||||
public static IAppLogoService GetOrCreate()
|
||||
{
|
||||
lock (Gate)
|
||||
{
|
||||
return _instance ??= new AppLogoService();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user