diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs index dc77c05c..a9ec0f49 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs @@ -121,19 +121,27 @@ public abstract class CompositionImage : Microsoft.UI.Xaml.Controls.Control { await HideAsync(token); + LoadedImageSurface? imageSurface = null; + Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; + if (uri != null) { - StorageFile storageFile = await imageCache.GetFileFromCacheAsync(uri); - Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; - - LoadedImageSurface? imageSurface = null; - try + if (uri.Scheme == "ms-appx") { - imageSurface = await LoadImageSurfaceAsync(storageFile, token); + imageSurface = LoadedImageSurface.StartLoadFromUri(uri); } - catch (COMException) + else { - await imageCache.RemoveAsync(uri.Enumerate()); + StorageFile storageFile = await imageCache.GetFileFromCacheAsync(uri); + + try + { + imageSurface = await LoadImageSurfaceAsync(storageFile, token); + } + catch (COMException) + { + await imageCache.RemoveAsync(uri.Enumerate()); + } } if (imageSurface != null) diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Markup/UriExtension.cs b/src/Snap.Hutao/Snap.Hutao/Control/Markup/UriExtension.cs new file mode 100644 index 00000000..08e46afa --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Control/Markup/UriExtension.cs @@ -0,0 +1,32 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Markup; + +namespace Snap.Hutao.Control.Markup; + +/// +/// Uri扩展 +/// +[MarkupExtensionReturnType(ReturnType = typeof(Uri))] +public sealed class UriExtension : MarkupExtension +{ + /// + /// 构造一个新的Uri扩展 + /// + public UriExtension() + { + } + + /// + /// 地址 + /// + public string? Value { get; set; } + + /// + protected override object ProvideValue() + { + return new Uri(Value ?? string.Empty); + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs b/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs index 91636fc1..6f660209 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs @@ -102,7 +102,7 @@ public class DescriptionTextBlock : ContentControl if (i == description.Length - 1) { - AppendText(text, description[last..i]); + AppendText(text, description[last..(i + 1)]); } } } diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Binding/AvatarProperty/Weapon.cs b/src/Snap.Hutao/Snap.Hutao/Model/Binding/AvatarProperty/Weapon.cs index 46de596b..8079dc66 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Binding/AvatarProperty/Weapon.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Binding/AvatarProperty/Weapon.cs @@ -16,7 +16,7 @@ public class Weapon : EquipBase /// /// 精炼属性 /// - public int AffixLevel { get; set; } + public string AffixLevel { get; set; } = default!; /// /// 精炼名称 diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/DescParamDescriptor.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/DescParamDescriptor.cs index aa3276ab..753800d4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/DescParamDescriptor.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/DescParamDescriptor.cs @@ -28,7 +28,7 @@ internal sealed class DescParamDescriptor : ValueConverterBase param = from.Parameters.Single(param => param.Level == level); - return new LevelParam(param.Level.ToString(), GetParameterInfos(formats, param.Parameters)); + return new LevelParam($"Lv.{param.Level}", GetParameterInfos(formats, param.Parameters)); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs new file mode 100644 index 00000000..ff014fbe --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs @@ -0,0 +1,28 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Control; +using Snap.Hutao.Model.Intrinsic; +using Windows.UI; + +namespace Snap.Hutao.Model.Metadata.Converter; + +/// +/// 品质颜色转换器 +/// +internal class QualityColorConverter : ValueConverterBase +{ + /// + public override Color Convert(ItemQuality from) + { + return from switch + { + ItemQuality.QUALITY_WHITE => Color.FromArgb(0xFF, 0x72, 0x77, 0x8B), + ItemQuality.QUALITY_GREEN => Color.FromArgb(0xFF, 0x2A, 0x8F, 0x72), + ItemQuality.QUALITY_BLUE => Color.FromArgb(0xFF, 0x51, 0x80, 0xCB), + ItemQuality.QUALITY_PURPLE => Color.FromArgb(0xFF, 0xA1, 0x56, 0xE0), + ItemQuality.QUALITY_ORANGE or ItemQuality.QUALITY_ORANGE_SP => Color.FromArgb(0xFF, 0xBC, 0x69, 0x32), + _ => Color.FromArgb(0x00, 0x00, 0x00, 0x00), + }; + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Icon/UI_Icon_Locked.png b/src/Snap.Hutao/Snap.Hutao/Resource/Icon/UI_Icon_Locked.png new file mode 100644 index 00000000..db6ba038 Binary files /dev/null and b/src/Snap.Hutao/Snap.Hutao/Resource/Icon/UI_Icon_Locked.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/Factory/SummaryFactory.cs b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/Factory/SummaryFactory.cs index f2dcc4f1..240b6e5c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/Factory/SummaryFactory.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/Factory/SummaryFactory.cs @@ -5,7 +5,6 @@ using Snap.Hutao.Extension; using Snap.Hutao.Model; using Snap.Hutao.Model.Binding.AvatarProperty; using Snap.Hutao.Model.Intrinsic; -using Snap.Hutao.Model.Metadata.Annotation; using Snap.Hutao.Model.Metadata.Converter; using Snap.Hutao.Model.Metadata.Reliquary; using Snap.Hutao.Service.Metadata; @@ -144,7 +143,7 @@ internal class SummaryFactory : ISummaryFactory Description = reliquary.Description, // EquipBase - Level = $"+ {equip.Reliquary!.Level - 1}", + Level = $"+{equip.Reliquary!.Level - 1}", Quality = reliquary.RankLevel, MainProperty = CreateReliquaryMainProperty(equip.Reliquary.MainPropId, reliquary.RankLevel, equip.Reliquary.Level), @@ -182,13 +181,13 @@ internal class SummaryFactory : ISummaryFactory Description = weapon.Description, // EquipBase - Level = $"{equip.Weapon!.Level}", + Level = $"Lv.{equip.Weapon!.Level}", Quality = weapon.Quality, MainProperty = new(string.Empty, string.Empty), // TODO // Weapon SubProperty = new(string.Empty, string.Empty), // TODO - AffixLevel = level + 1, + AffixLevel = $"精炼{level + 1}", AffixName = weapon.Affix?.Name ?? string.Empty, AffixDescription = weapon.Affix?.Descriptions.Single(a => a.Level == level).Description ?? string.Empty, }; diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj index c7e68e11..98e200cc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj +++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj @@ -39,6 +39,7 @@ + @@ -87,6 +88,7 @@ + diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml index 39340d11..215da3b8 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml @@ -12,8 +12,12 @@ xmlns:shcb="using:Snap.Hutao.Control.Behavior" xmlns:shci="using:Snap.Hutao.Control.Image" xmlns:shcm="using:Snap.Hutao.Control.Markup" - xmlns:shvc="using:Snap.Hutao.View.Control" + xmlns:shct="using:Snap.Hutao.Control.Text" + xmlns:shmmc="using:Snap.Hutao.Model.Metadata.Converter" + xmlns:shvconv="using:Snap.Hutao.View.Converter" xmlns:shv="using:Snap.Hutao.ViewModel" + xmlns:sc="using:SettingsUI.Controls" + xmlns:shvcont="using:Snap.Hutao.View.Control" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" d:DataContext="{d:DesignInstance shv:AvatarPropertyViewModel}"> @@ -28,9 +32,11 @@ 1 - 0.3 + 0.5 + + @@ -140,15 +146,6 @@ - - + + + + + + + + + + + + + + + + + + + + @@ -196,25 +224,126 @@ Background="Transparent" BorderBrush="{x:Null}" Margin="2,2,0,2"> - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -254,61 +384,90 @@ - + + + + - - + + + + + + + - + + - - - - - + + - - - + + - - - + - - - + + + + + + + + + + + + - + @@ -320,7 +479,7 @@ - +