From d802d1af1587c59009cfd4d78bf4759850bb4fc2 Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Tue, 4 Oct 2022 16:44:53 +0800
Subject: [PATCH] avatar info complete 1
---
.../Control/Image/CompositionImage.cs | 24 +-
.../Snap.Hutao/Control/Markup/UriExtension.cs | 32 ++
.../Control/Text/DescriptionTextBlock.cs | 2 +-
.../Model/Binding/AvatarProperty/Weapon.cs | 2 +-
.../Metadata/Converter/DescParamDescriptor.cs | 2 +-
.../Converter/QualityColorConverter.cs | 28 ++
.../Resource/Icon/UI_Icon_Locked.png | Bin 0 -> 1847 bytes
.../AvatarInfo/Factory/SummaryFactory.cs | 7 +-
src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 2 +
.../View/Page/AvatarPropertyPage.xaml | 279 ++++++++++++++----
10 files changed, 303 insertions(+), 75 deletions(-)
create mode 100644 src/Snap.Hutao/Snap.Hutao/Control/Markup/UriExtension.cs
create mode 100644 src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Icon/UI_Icon_Locked.png
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 0000000000000000000000000000000000000000..db6ba038cdfcb27cd845981e5af4a804d70cb24c
GIT binary patch
literal 1847
zcmV-72gvw|P)nv0l
zP<9Tyr;qwt`k)Ve#9wlG_pA5b-#hP~bM6NsrBW#(fbsG1G2#YLK2F?Yf%8uY2P^;(
zFG584Lm-48>WL6D%4`tuMGiq2rk-AfXgW#JaDJnZ^ku0gfgnprNQlyCG-*qhF8v@h
zG*lsxNJ1bi#0ta1!-IhSzP`TO{r&y-O(v81G60IK%!WK2mn(QnVknI;gTb&fE-o%{
z&6+hIxvB^RgE54Kg+*g}{rdI!ot>SR%w}^Oj|>+8Qbd-iM_nVhqn<|z}iB_=B@Ec|rawr%@GB2myR+al4?(aNHt
zqSn~hSpAVBN4|%welj^1Im2UOEOSa$R#vtb-g2QYfOrwxw{Jfl9v&`-msU#W!JHf9
z(#DJ>hNR--^u4Cj(OrcQ7)6>&S
zKmx44wOXwfPyh$(>grmYiaO{>TU%QPXu;ngT9J{Fq0wr!#h@kMVQX*4jvWUtT)1%c
z;lqay2#5K`g&5i>qSxznGMP-lR>5Mi{F;}Sm;U(i<4(#`anNP(c}`o3_Sx-;TA2cZ{
z%RxMV!{Hc%7jio%Cr5ws6H~i;0OzWXr#I?_OJTbMtp(mS}8j
zytsAi*2`>CQ>j$%!?X?u4cqHUTU>}mxzb?QuU~I~Z{820Psz+7fkFRw<;s;RHez7c
z)_F<_;VCiSq@*MnTfxxKkgc+^(oDSMp@YBpU0Pb&G4v;y`RLhzG}V;5H7z_PCR(*>
zRXke(5PL#JXYALpwdqU@0j}0tp0?q!#OOW=rS=(vun{lA8*O?@Y&;|+1nrQ-xnPt6
znLX%Fc@b#Y5w;2-MVt;O$!Upmm6%|_=hnbWg*#%XzESMB&RPgQV5pnA3aajGK)YOv
zz;w7NZj2JlTfy{zkyLQEI-n>~4u1p;GhHtp)1#H{uYuB#*Oy&Sv
zwrnZYXf!3bX98$%YHBJsnM}A}g5FCXvo5Q|s;a6gz(30(uOMJeD*{Cpi6K8fA67OA
zMx9Pq=v?mwVy`kOHsDxc%w+fO-Nlgni_V`y3>I}sLLx;2#|*@NsIIPl=0G!vNx*H&
zB?1M^z0ZtBBhI&OOf!iEMn*=iCISUD_5eD~Bqk0B2#6p8h4a|wzkvp$C?*02_?Y;Z
z@LT7<#O533gqYoKe*!L$1><P3#FAI&`S)?%lgL!Pjfxt8dAiqs1L4Lkr|
zd238e%-6}u$$RZ)EtLqn6Gh~Z{TdwctzgVStH5d$OxcTX>URG8X
zFP|ZTH{}7#_`-AN&Ry>4m^dJDmY75?m%pu6t5f;vpEqK7hE`r)ZUohyd*jB9J7B-)
zeM8@rl$2Ol7}hRcym;DU+nIt_I~Elc6{pkbGIDcs4>GdFV4Smo)VqB4{n}R)8h9rL
zJ|p%a2D>#tWl2XyMhM?{Eis|tHL+PD5Y}V##Cj?gi)Dmo@J`I%-(OB%0(d93cJ12a
zl9H19U0q!_F|AN2)+v?BOuqY_lTQ&mjeIi4V4jchZ(Mi=b!}4g?9Y4zlh}yeZtoH5
z{ymPJnPw6j?C$Qq1Cu*}2oN}SGI=gN0Vc7b*4EY&u*47~F<8`o<8V0srqfgASWQh$
zt4gIZ3hh+$)~#E{>gwvN%)A$r2P_N?c%~~9a!86gT%Z2d0Fu*cwJl(OvS1ag3 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 @@
-
+