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 @@ - +